// resetFields - removes the default value from form fields onfocus, puts default back onblur if no content
function resetFields(whichform) {
	for (var i=0; i<whichform.elements.length; i++) {
		var element = whichform.elements[i];
		// break loop if this is a submit button
		if (element.type == "submit") continue;
		// break loop if it doesn't have a default value
		if (!element.defaultValue) continue;
		// onfocus - remove the default value if it is displayed
		element.onfocus = function () {
			if (this.value == this.defaultValue) {
				this.value = "";
			}
		}
		// onblur - put the default value back in if unchanged
		element.onblur = function () {
			if (this.value == "") {
				this.value = this.defaultValue;
			}
		}
	}
}

// isFilled - checks whether the form field has data present and if so, is different from the default value
function isFilled (field) {
	// check if the field is not zero length
	if (field.value.length < 1 || field.value == field.defaultValue) {
		return false;
	} else {
		return true;
	}
}

// isEmail - checks whether the data entered looks like an email address
function isEmail(field) {
	// check if the value doesn't have an "@" or a "." in it
	if (field.value.indexOf("@") == -1 || field.value.indexOf(".") == -1) {
		return false;
	} else {
		return true;
	}
}

// validateForm - checks whether the "required" or "email" classes exist and validates those fields
function validateForm(whichform) {
	for (var i=0; i<whichform.elements.length; i++) {
		var element = whichform.elements[i];
		if (element.className.indexOf("required") != -1) {
			if (!isFilled(element)) {
				if (element.className.indexOf("keywords") == -1) {
						alert("Please enter some keywords before searching");
						return false;
				} else {
				alert("Please fill in the "+element.name+" field");
				return false;
				}
			}
		}
		if (element.className.indexOf("email") != -1) {
			if (!isEmail(element)) {
				alert("The "+element.name+" field must be a valid email address");
					  return false;
			}
		}
	}
	return true;
}

// prepareForms - selects and loops through all forms in document
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);