//Brings associated form field into focus when the text within a label is clicked (and makes the field blank)
function focusLabels() {
	if (!document.getElementsByTagName) return false;
	var labels = document.getElementsByTagName("label");
	for (var i=0; i<labels.length; i++) {
		if (!labels[i].getAttribute("for")) continue;
		labels[i].onclick = function() {
			var id = this.getAttribute("for");
			if (!document.getElementById(id)) return false;
			var element = document.getElementById(id);
			element.focus();
		}
	}
}
addLoadEvent(focusLabels);

//Creates default placeholder text, which disappears and reappears automatically
function resetFields(whichform) {
	for (var i=0; i<whichform.elements.length; i++) {
		var element = whichform.elements[i];
		if (element.type == "reset"||element.type == "submit" || element.type == "checkbox" || element.type == "radio") continue;
		if (!element.defaultValue) continue;
		element.onfocus = function() {
			if (this.value == this.defaultValue) {
				this.value = "";
			}
		}
		element.onblur = function() {
			if (this.value == "") {
				this.value = this.defaultValue;
			}
		}
	}
}

//Determines whether the input field has been completed, based on whether the default still exists
function isFilled(field) {
	if (field.value.length < 1 || field.value == field.defaultValue) {
		return false;
	} else {
		return true;
	}
}

//Determines whether the email field has been completed correctly, based on the existence of certain characters
function isEmail(field) {
	if (field.value.indexOf("@") == -1 || field.value.indexOf(".") == -1)
	{
		return false;
	} else {
		return true;
	}
}

//Adds form checking to email submission forms - places error msg in a div with id="formError"
//Draws upon the previous two functions to validate all form fields, based on whether the class "required" or "email" is present
function validateForm(whichform) {
 var status = true;
 for (var i=0; i<whichform.elements.length; i++) {
  var element = whichform.elements[i];
  if (hasClass(element,"email")) {
   if (!isEmail(element)) {
    if (document.getElementById("formError")){;
     if (status == true) { //only highlight this error if all other errors resolved first
      replaceText("formError","p","class","errmsg","An invalid email address was given.  Please re-enter your email address.");
						var errBox = document.getElementById("formError");
					 errBox.style.display = "block";
						addClass(errBox, "error");
					 addClass(errBox, "box");
      var elmtID = ""+element.id+"";
      var elmt = document.getElementById(elmtID);
      addClass(elmt,"error");
     }
     
     status = false;
    }
    else {
     alert("Please enter a valid e-mail address.");
     return false;
    }
   }
  }
  if (hasClass(element,"required")) { //or can use:  if(element.className.indexOf("required") != -1)
			if (!isFilled(element)) {
    if (document.getElementById("formError")){
     replaceText("formError","p","class","errmsg","Sorry. Fields marked with an asterisk are required.  Please complete these.");
					var errBox = document.getElementById("formError");
					errBox.style.display = "block";
					addClass(errBox, "error");
					addClass(errBox, "box");
     var elmtID = ""+element.id+"";
     var elmt = document.getElementById(elmtID);
     addClass(elmt,"error");
     status = false;
    }
    else {
     alert("You have not filled in the required fields.");
     return false;
    }
   }
  }
 }
 return status;
}

//The function to prepare the previous form enhancements for each form on a page
function prepareForms() {
	for (var i=0; i<document.forms.length; i++) {
		var thisform = document.forms[i];
		resetFields(thisform);
		thisform.onsubmit = function() {
			return validateForm(this);
		}
	}
}
addLoadEvent(prepareForms);