

epValidateForms = function() {

	if (!dom) return;

	var allForms = document.getElementsByTagName('form');
	for (var f=0; f<allForms.length; f++) {
		if (hasClass(allForms[f], "epValidate")) {
			// Update form's onsubmit action
			var oldOnsubmit = allForms[f].onsubmit;
			if (typeof allForms[f].onsubmit != "function") {
				allForms[f].onsubmit = function() {
					return epCheckFields(this);
				}
			} else {
				allForms[f].onsubmit = function() {
					epCheckFields(this);
					return oldOnsubmit();
				}
			}
			// Update fields onfocus and onblue actions
			var allInputs = allForms[f].getElementsByTagName("input");
			for (var i=0; i<allInputs.length; i++) {
				if (hasClass(allInputs[i], "txt")) {
					allInputs[i].value = allInputs[i].alt;
					allInputs[i].onfocus = function() {
						clearField(this, this.alt);
					}
					allInputs[i].onblur = function() {
						resetField(this, this.alt);
					}
				}
			}
		}
	}
	return true;
}




epCheckFields = function(theForm) {

	var hasError = false;
	var errObj;
	var errorMessage = "";

	// Loop through all the fields looking for required fields
	var allInputs = theForm.getElementsByTagName("input");
	for (var i=0; i<allInputs.length; i++) {
		if (hasClass(allInputs[i], "epRequired")) {
			// If the field is empty of has the default value
			if (allInputs[i].value == "" || allInputs[i].value == allInputs[i].alt) {
				hasError = true;
				errObj = allInputs[i];
				errorMessage = "Please enter " + allInputs[i].alt.toLowerCase();
				break;
			// If the field has a value and it is an email field - check it is valid
			} else {
				if (hasClass(allInputs[i], "email") && !validateEmail(allInputs[i].value)) {
					hasError = true;
					errObj = allInputs[i];
					errorMessage = "Please enter a valid email address";
					break;
				} else {
					removeClass(allInputs[i], "err");
				}
			}
		}
	}

	// If we have an error return false
	if(hasError) {
		addClass(errObj,"err");
		if (document.getElementById("errorHolder")) {
			document.getElementById("errorHolder").innerHTML = errorMessage;
		} else {
			var errorHolder = document.createElement("p");
			errorHolder.id = "errorHolder";
			addClass(errorHolder,"error");
			errorHolder.appendChild(document.createTextNode(errorMessage));
			theForm.parentNode.insertBefore(errorHolder, theForm);
		}
		return false;
	} else {
		return true;
	}
}




validateEmail = function(addr) {
	var invalidChars = '\/\'\\ ";:?!()[]\{\}^|';
	for (i=0; i<invalidChars.length; i++) {
		if (addr.indexOf(invalidChars.charAt(i),0) > -1) {
			return false;
		}
	}
	for (i=0; i<addr.length; i++) {
		if (addr.charCodeAt(i)>127) {
		return false;
		}
	}
	var atPos = addr.indexOf('@',0);
	if (atPos == -1) {
		return false;
	}
	if (atPos == 0) {
		return false;
	}
	if (addr.indexOf('@', atPos + 1) > - 1) {
		return false;
	}
	if (addr.indexOf('.', atPos) == -1) {
		return false;
	}
	if (addr.indexOf('@.',0) != -1) {
		return false;
	}
	if (addr.indexOf('.@',0) != -1){
		return false;
	}
	if (addr.indexOf('..',0) != -1) {
		return false;
	}
	var suffix = addr.substring(addr.lastIndexOf('.')+1);
	if (suffix.length != 2 && suffix != 'com' && suffix != 'net' && suffix != 'org' && suffix != 'edu' && suffix != 'int' && suffix != 'mil' && suffix != 'gov' & suffix != 'arpa' && suffix != 'biz' && suffix != 'aero' && suffix != 'name' && suffix != 'coop' && suffix != 'info' && suffix != 'pro' && suffix != 'museum') {
		return false;
	}
	return true;
}




addLoadEvent(epValidateForms);
