//SETS UP FORM FOR VALIDATION BY ADDING ON SUMBIT EVENT HANDLER
function prepareForms() {
	for (var i=0; i < document.forms.length; i++) {
		var thisform = document.forms[i];
		resetFields(thisform);
		
		thisform.onsubmit = function() {
			//return validateForm(this);
			clearfeedback();
			//Add the hijaker
			if(validateForm(this)) {
				return true;
			} else {
				return false;
			}
		}
	}
	return false;
}
//////////////////////////////////

//SET FORM FIELDS TO BLANK AND THEN RESET TO DEFAULT VALUE ON BLUR UNLESS IT'S GOT "http://" AS DEFAULT VALUE
function resetFields(whichform) {
	for (var i=0; i<whichform.elements.length; i++) {
		var element = whichform.elements[i];
		var elemtype = element.getAttribute('type');
		if (elemtype != "submit") {
			if (element.defaultValue) {
				if(element.defaultValue != "http://") {
					element.onfocus = function() {
						if (this.value == this.defaultValue) {
							this.value = "";
						}
					}
				}
			}
		}
		element.onblur = function() {
			if (this.value == "") {
				this.value = this.defaultValue;
			}
		}
	}
	return false;
}


//CLICK ON A LABEL TO FOCUS THE FORM FIELD - already does this in good browsers?
function focusLabels() {
	if (!document.getElementsByTagName) {
		return false;
	}
	else
	{
		var labels = document.getElementsByTagName('LABEL');
		for (var i=0; i<labels.length; i++) {
			if (labels[i].htmlFor) {
				labels[i].onclick = function() {
					var id = this.htmlFor;
					if (!document.getElementById(id)) {
						return false;
					} 
					else 
					{
						var element = document.getElementById(id);
						element.focus();
					}
					return false;
				}
			}
		}
	}
	return false;
}


function getLabel(whichform,element) {
var elementid = element.getAttribute("id");
var formlabels = whichform.getElementsByTagName("LABEL");
	for (var i=0; i<formlabels.length; i++) {
		var blob = formlabels[i];
		if(elementid == blob.htmlFor) {
			return  blob;
		}
	}
	return false;
}

function validateForm(whichform) {
	for (var i=0; i<whichform.elements.length; i++) {
		var element = whichform.elements[i];
		if (element.nodeName == "SELECT" && element.className.indexOf("required") != -1) {
			if (element.options[element.selectedIndex].value == 0) {
				var elementlabel = getLabel(whichform,element);
				var feedback = elementlabel.firstChild.nodeValue + " required";
				addfeedback(elementlabel,feedback);
				element.focus();
				return false;
			}
		}
		if (element.className.indexOf("required") != -1) {
			if (!isFilled(element)) {
				var elementlabel = getLabel(whichform,element);
				var feedback = elementlabel.firstChild.nodeValue + " required";
				addfeedback(elementlabel,feedback);
				element.focus();
				return false;
			}
			if (element.className.indexOf("email") != -1) {
				if (!isEmail(element)) {
					//alert("Please supply a valid email address.");
					var elementlabel = getLabel(whichform,element);
					var feedback = "Valid email address required";
					addfeedback(elementlabel,feedback);
					element.focus();
					return false;
				}
			}
		}
	}
	return true;
}

function addfeedback(elementlabel,feedback) {
	var feedbackText = document.createTextNode(feedback);
	var feedbackSpan = document.createElement('EM');
	feedbackSpan.className = 'feedback';
	feedbackSpan.appendChild(feedbackText);
	elementlabel.appendChild(feedbackSpan);
}

function clearfeedback() {
	var formspans = document.getElementsByTagName("EM");
	for (var i=0; i<formspans.length; i++) {
		var blob = formspans[i];
		if(blob.className == 'feedback') {
			blob.parentNode.removeChild(blob);
		}
	}
}

//STANDARD CHECKERS
function isFilled(field) {
	if (field.value.length < 1 || field.value == field.defaultValue) {
		return false;
	} else {
		return true;
	}
}
function isEmail(field) {
	if (field.value.indexOf("@") == -1 || field.value.indexOf(".") == -1) {
		return false;
	} else {
		return true;
	}
}
function isChecked(field) {
	if (field.checked != true) {
		return false;
	} else {
		return true;
	}
}
addLoadEvent(focusLabels);
addLoadEvent(prepareForms);
