var labels;
var reqdFields = new Array();
var alertMessage = "";
var blankFields = new Array();
var formLabels = document.getElementsByTagName("label");
var docForms = document.getElementsByTagName("form");
var formObject;

function getForm() {
	for ( i=0 ; i<docForms.length ; i++ ) {
		if ( docForms[i].getAttribute("action").indexOf("sendmail") != -1 ) {
			formObject = document.forms[i];
		}
	}
	getRequiredFields();
}

function getRequiredFields() {		//fill array of required fields
	for ( i=0 ; i<formObject.elements.length ; i++ ) {
		if ( formObject.elements[i].className.indexOf("reqd") != -1 ) {
			reqdFields.push(formObject.elements[i]);
		}
	}
	if ( reqdFields.length == 0 ) {
		for ( i=0 ; i<formObject.elements.length ; i++ ) {
			if ( formObject.elements[i].type == "text" || formObject.elements[i].type == "select-one" ) {
				reqdFields.push(formObject.elements[i]);
			}
		}
	}
	labels = document.getElementsByTagName("label");
}

function clearError() {
	switch ( this.type ) {
		case "radio":
			radioSet = eval("formObject." + this.getAttribute("name")); 
			for ( var r=0 ; r<radioSet.length ; r++ ) {
				radioSet[r].style.backgroundColor = "transparent";
			}
			break;
		default:
			this.style.backgroundColor = "#FFFFFF";	
	}
	for ( j=0 ; j<formLabels.length ; j++ ) {
		if ( formLabels[j].htmlFor == this.name ) {
			formLabels[j].style.color = "black";
		}
	}
}

/*
This function accounts for forms with separate first and last name input fields
and combines them for the required 'name' value
*/
function setName() {
	if ( document.getElementById("firstname") != null && document.getElementById("lastname") != null && document.getElementById("name") != null) {
		formObject.name.value = formObject.firstname.value + " " + formObject.lastname.value;
	}
}

function validateForm(form) {		//validate fields upon submit
	for ( var i=0 ; i<reqdFields.length ; i++ ) {
		var inputlabel = "";
		for ( j=0 ; j<labels.length ; j++ ) {
			if ( labels[j].htmlFor == reqdFields[i].getAttribute("name") ) {
				inputlabel = labels[j].firstChild.nodeValue;
			}
		}
		switch ( reqdFields[i].type ) {
			case "text":
				if (reqdFields[i].value == "") {
					alertMessage += "\u00B7 "+inputlabel+"\n";
					blankFields.push(reqdFields[i]);
				}
				break;
			case "textarea":
				if (reqdFields[i].value == "") {
					alertMessage += "\u00B7 "+inputlabel+"\n";
					blankFields.push(reqdFields[i]);
				}
				break;
			case "radio":
				radioSet = eval("formObject." + reqdFields[i].getAttribute("name"));
				var checkedItem = -1
				for ( var r=0 ; r<radioSet.length ; r++ ) {
					if (radioSet[r].checked) {
						checkedItem = r;
					}
					radioSet[r].onclick = clearError;
				}
				if ( checkedItem == -1 ) {
					alertMessage += "\u00B7 "+inputlabel+"\n";
					blankFields.push(reqdFields[i]);
				}
				break;
			case "checkbox":
				checkboxSet = eval("formObject." + reqdFields[i].getAttribute("name"));
				if (checkboxSet.length != undefined) { //if there is more than one checkbox in the set
					var checkedItem = -1
					for ( var c=0 ; c<checkboxSet.length ; c++ ) {
						if (checkboxSet[c].checked) {
							checkedItem = c;
						}
						checkboxSet[c].onclick = clearError;
					}
					if ( checkedItem == -1 ) {
						alertMessage += "\u00B7 "+inputlabel+"\n";
						blankFields.push(reqdFields[i]);
					}
				}
				else if (!checkboxSet.checked) {
					alertMessage += "\u00B7 "+inputlabel+"\n";
					blankFields.push(reqdFields[i]);					
				}
				break;
			case "select-one":
				var selectedItem = reqdFields[i].selectedIndex;				
				if (reqdFields[i].options[selectedItem].value == "") {
					alertMessage += "\u00B7 "+inputlabel+"\n";
					blankFields.push(reqdFields[i]);
					reqdFields[i].onclick = clearError;
				}
				break;
			case "select-multiple":
				var selectedItem = reqdFields[i].selectedIndex;				
				if (reqdFields[i].options[selectedItem].value == "") {
					alertMessage += "\u00B7 "+inputlabel+"\n";
					blankFields.push(reqdFields[i]);
					reqdFields[i].onclick = clearError;
				}
				break;
			default:
				alertMessage += "All information";
		}
	}
	if (alertMessage != "") {
		alert("You did not enter:\n" + alertMessage);
		blankFields[0].focus();
		for ( i=0 ; i<blankFields.length ; i++ ) {
			blankFields[i].style.backgroundColor = "#FFFF99";
		}
		for ( i=0 ; i<blankFields.length ; i++ ) {
			for ( j=0 ; j<formLabels.length ; j++ ) {
				if ( formLabels[j].htmlFor == blankFields[i].name ) {
					formLabels[j].style.color = "red";
				}
			}
			blankFields[i].onblur = clearError;
		}
		alertMessage = "";
		blankFields.length = 0;
		return false;
	}
	else {
		setName();
		return true;
	}
}

window.onload = getForm;
