// iNET Form Validation v1.0.1
var validation = {
	error: "",
	rAlpha:       /^([\w\s]+)$/i,
	rNumeric:     /^([\d\.]+)$/,
	rEmail:       /^([a-z][\w\.\-]*@[\w\.\-]+\.[a-z]{2,3})$/i,
	rJpg:         /(.jpg)$/i,
	rDate:        /(\d\d\/\d\d\/\d\d\d\d)$/i,
	rPostcode:    /^([A-PR-UWYZ0-9][A-HK-Y0-9][AEHMNPRTVXY0-9]?[ABEHMNPRVWXY0-9]? {1,2}[0-9][ABD-HJLN-UW-Z]{2}|GIR 0AA)$/,
	
	init: function() {
		for (var i in document.forms) {
			if (document.forms[i].validation) {
				document.forms[i].onsubmit = function() {
					return validation.validate(this);
				};
			};
		};
	},
	
	validate: function(form) {
		var fields = form.validation.value.substring(0, form.validation.value.length - 1).split(";");  // Split by field names
		for (var i in fields) {
			fields[i] = fields[i].split(":");  // Split into title, name and validation
			fields[i][2] = fields[i][2].split(",");  // Split validation requirements
			field = eval("form." + fields[i][1])
			for (var ii in fields[i][2]) {
				switch(fields[i][2][ii]) {
					case "required" :
						if(field.value == "") {
							validation.showError("'" + fields[i][0] + "' is a required field.", field, form);
							return false;
						};
						break
					case "alpha" :
						if(field.value !== "" && !validation.rAlpha.test(field.value)) {
							validation.showError("'" + fields[i][0] + "' accepts alpha characters only. (a-Z)", field, form);
							return false;
						};
						break
					case "numeric" :
						if(field.value !== "" && !validation.rNumeric.test(field.value)) {
							validation.showError("'" + fields[i][0] + "' accepts numeric characters only.", field, form);
							return false;
						};
						break
					case "email" :
						if(field.value !== "" && !validation.rEmail.test(field.value)) {
							validation.showError("'" + fields[i][0] + "' accepts valid email addresses only.", field, form);
							return false;
						};
						break
					case "jpg" :
						if(field.value !== "" && !validation.rJpg.test(field.value)) {
							validation.showError("'" + fields[i][0] + "' accepts .jpg files only.", field, form);
							return false;
						};
						break
					case "date" :
						if(field.value !== "" && !validation.rDate.test(field.value)) {
							validation.showError("'" + fields[i][0] + "' accepts valid dates only. (dd/mm/yyyy)", field, form);
							return false;
						};
						break
					case "postcode" :
						if(field.value !== "" && !validation.rPostcode.test(field.value)) {
							validation.showError("'" + fields[i][0] + "' accepts valid UK postcodes only.", field, form);
							return false;
						};
						break
				};
			};
		};
	},
	
	showError: function(error, field, form) {
		var DIVs = tag("div", form);
		for(var i = 0; i < DIVs.length; i++) {
			if(DIVs[i].className == "error") DIVs[i].parentNode.removeChild(DIVs[i]);
			if(DIVs[i].firstChild.className) DIVs[i].firstChild.className = DIVs[i].firstChild.className.replace(/(\s)?error/, "");
		};
		var errorDiv = document.createElement("div")
		errorDiv.className = "error";
		field.parentNode.firstChild.className += " error";
		errorDiv.appendChild(document.createTextNode(error));
		field.parentNode.parentNode.insertBefore(errorDiv, field.parentNode);
		
		// Scroll to error
		var dy = errorDiv.offsetTop;
		var thisNode = errorDiv;
    	while (thisNode.offsetParent && (thisNode.offsetParent != document.body)) {
			thisNode = thisNode.offsetParent;
			dy += thisNode.offsetTop;
		}
		window.scrollTo(0, dy)
	}
};

// set Loaded functions
addDOMLoadEvent(validation.init);