var g_class_remove_array = new Array('delete','remove');

function getLabelFor(el) {
	return el.getAttribute('for')?el.getAttribute('for'):el.getAttribute('htmlFor');
}
function getLabel(el) {
	var form = traverse(el,'form','parent');
	var labels = form.getElementsByTagName('label');
	for(var i=0; i<labels.length; i++) {
		var label = labels[i];
		var labelFor = getLabelFor(label);
		if(el.id==labelFor) {
			return label;
		}
	}
}

var focus_class = 'focus_element';
function form_focus_fix() {
	if(!document.createElement || !document.getElementsByTagName || !document.getElementById) return false;
	var form_collection = document.getElementsByTagName('form');
	var form_collection_length = form_collection.length;
	for(i=0; i<form_collection_length; i++) {
		for(j=0; j<form_collection[i].elements.length; j++) {
			addEvent(form_collection[i].elements[j],'focus',function(){addClass(this,focus_class)});
			addEvent(form_collection[i].elements[j],'blur',function(){removeClass(this,focus_class)})
		}
	}
}

function input_submit_hover_fix() {
	var submit_array = getElementsByClassName(document, 'input', 'submit');
	var submit_array_length = submit_array.length;
	
	for(var i=0; i<submit_array_length; i++) {
		var s = submit_array[i];
		
		var new_div = document.createElement('div');
		s.parentNode.appendChild(new_div);
		new_div.appendChild(s);

		addEvent(s, 'mouseover', function(e) {
			e = e || event; var src = e.target || e.srcElement;
			if(src.parentNode) addClass(src.parentNode,'hover');
		});
		addEvent(s, 'mouseout', function(e) {
			e = e || event; var src = e.target || e.srcElement;
			if(src.parentNode) removeClass(src.parentNode,'hover');
		});
		addEvent(s, 'focus', function(e) {
			e = e || event; var src = e.target || e.srcElement;
			if(src.parentNode) addClass(src.parentNode,'hover');
		});
		addEvent(s, 'blur', function(e) {
			e = e || event; var src = e.target || e.srcElement;
			if(src.parentNode) removeClass(src.parentNode,'hover');
		});
	}
}

function input_delete_setup() {
	var class_array_length = g_class_remove_array.length;
	for(var i=0; i<class_array_length; i++) {
		var buttons_array = getElementsByClassName(document,'input',g_class_remove_array[i]);
		var buttons_array_length = buttons_array.length;

		for(var j=0; j<buttons_array_length; j++) {
			if(buttons_array[j].type.toLowerCase()=='submit') addEvent(buttons_array[j],'click',input_delete_confirm);
		}
	}
}
function input_delete_confirm(e) {
	var agree = confirm("Are you sure you want to delete?");
	if(agree) return true;
	else return false;
}

function input_textarea_setup() {
	//var textareaArray = document.getElementsByTagName('textarea');
	var textareaArray = getElementsByClassName(document.getElementById('content'),'*','expand');
	for(var i=0; i<textareaArray.length; i++) {
		var textarea = textareaArray[i].getElementsByTagName('textarea')[0];
		if(textarea && textarea.id) {
			expand_element(textarea,'textarea');
		}
	}
}

function expand_element(el,type) {
	var originalText = 'Make '+type+' larger';
	var makeSmallerText = 'Make '+type+' smaller';
	var toggleContainer = document.createElement('dd');
	var toggleLink = document.createElement('a'); addClass(toggleContainer,'expand-link');
	
	// FF-Win doesn't support -1 tabindex | Rendered-source of the JS produces <a tabindex="0">
	// http://jehiah.com/archive/tabindex | http://www.w3.org/TR/REC-html40/interact/forms.html#adef-tabindex
	toggleLink.setAttribute('tabindex','-1');
	
	if(getElementsByClassName(document, type, 'larger')!='') {
		toggleLink.setAttribute('href', '#smaller');
		var toggleLinkText = document.createTextNode(makeSmallerText);
	}
	else {
		toggleLink.setAttribute('href', '#bigger');
		var toggleLinkText = document.createTextNode(originalText);
	}
	toggleLink.appendChild(toggleLinkText);
	toggleContainer.appendChild(toggleLink);
	insertAfter(toggleContainer,el.parentNode);
	
	addEvent(toggleLink,'click',function() {
		el.style.height = el.offsetHeight+150+'px';
		toggleLink.blur();
		return false;
	})
}

addEvent(window,'load',input_submit_hover_fix);
addEvent(window,'load',input_delete_setup);
addEvent(window,'load',input_textarea_setup);
addEvent(window,'load',form_focus_fix);
