function formValidation(){
	// Set all forms to validate when they are submitted
	for (var f=0;f<document.forms.length;f++){
		frmID = document.forms[f].id;
		document.getElementById(frmID).onsubmit = function (){
			return validate(this);
		}
	}
}
function validate(frm) {
	validForm = true;
	firstError = null;
	errorstring = '';
	var x = frm.elements;
	for (var e=0;e<x.length;e++){
		if (x[e].getAttribute('required') === 'required' && x[e].value == ''){
			writeError(x[e],'This field is required');
		}else{
			if (x[e].getAttribute('type') === 'email' && x[e].value != ''){
				var re = /(^[a-z]([a-z_\.]*)@([a-z_\.]*)([.][a-z]{3})$)|(^[a-z]([a-z_\.]*)@([a-z_\.]*)(\.[a-z]{3})(\.[a-z]{2})*$)/i;
				if (!re.test(x[e].value)){
					writeError(x[e],'This is not a valid email address');
				}
			}
			if (x[e].getAttribute('type') === 'date' && x[e].value != ''){
				x[e].value = x[e].value.replace(/\/|\./g,'-');
				var re = /^\d{1,2}-\d{1,2}-\d{4}$/;
				if (re.test(x[e].value)){
					dateArray = x[e].value.split('-');
					x[e].value = dateArray[2] + '-' + dateArray[0] + '-' + dateArray[1];
				}
				var re = /^\d{4}-\d{1,2}-\d{1,2}$/;
				if (!re.test(x[e].value)){
					writeError(x[e],'This is not a valid date');
				}
			}
			if (x[e].getAttribute('type') === 'number' && x[e].value != ''){
				var re = /(^-?\d\d*\.\d*$)|(^-?\d\d*$)|(^-?\.\d\d*$)/i;
				if (!re.test(x[e].value)){
					writeError(x[e],'This is not a valid number');
				}
			}
		}
	}
	if (!W3CDOM){
		alert(errorstring);
	}
	if (firstError){
		firstError.focus();
	}
	return validForm;
}
function writeError(obj,message) {
	validForm = false;
	if (obj.hasError){
		return;
	}
	if (W3CDOM){
		obj.className += ' error';
		obj.onchange = removeError;
		var sp = document.createElement('span');
		sp.className = 'error';
		sp.appendChild(document.createTextNode(message));
		obj.parentNode.appendChild(sp);
		obj.hasError = sp;
	}else{
		errorstring += obj.name + ': ' + message + '\n';
		obj.hasError = true;
	}
	if (!firstError){
		firstError = obj;
	}
}
function removeError(){
	this.className = this.className.substring(0,this.className.lastIndexOf(' '));
	this.parentNode.removeChild(this.hasError);
	this.hasError = null;
	this.onchange = null;
}

