/*
formvalidation.js : Matt Simner : Cheniston Consulting Ltd : 2001 
Feel free to use this script, it would be nice to get a mail to see where you've used it
tech.support@chensiston.com

*/

var objPatterns = new Object();

objPatterns.nonspacePat = /\w/;					// matches any non space character
objPatterns.nonspacePat.errormsg = "Value should be entered";
objPatterns.integerPat = /(^-?\d\d*$)/;						// matches any non space character
objPatterns.integerPat.errormsg = "Value should be a whole number";
objPatterns.zipPat = /\d{5}(-\d{4})?/;					// matches zip codes
objPatterns.postcodePat = /[a-zA-Z]{1,2}\d{1,2}\s\d[a-zA-Z]{2}/;					// matches zip codes
objPatterns.postcodePat.errormsg = "Value should be a valid UK post code ";
objPatterns.currencyPat = /([\$]|[\£])(\d{1,3}(,\d{3})*|\d)*\.\d{2}/;	// matches $17.23 or $14,281,545.45 or ...
objPatterns.currencyPat.errormsg = "Value should be a valid currency amount";
objPatterns.timePatAny = /\d{2}:\d{2}/;				// matches 12:34 but also 75:83
objPatterns.timePat12a=/^([1-9]|1[0-2]):[0-5]\d$/;			// matches 5:04 or 12:34 but not 75:83
objPatterns.timePat12b=/^([1-9]|0[1-9]|1[0-2]):[0-5]\d$/;			// matches 5:04 or 12:34 or 05:00 but not 75:83
objPatterns.timePat24a=/^(0[0-9]|[0-9]|1[0-9]|2[0-3]):[0-5]\d$/;	// matches 5:04 or 23:59 but not 75:83 or 5:45
objPatterns.timePat24b=/^(0[0-9]|1[0-9]|2[0-3]):[0-5]\d$/;		// matches 05:04 or 23:59 but not 75:83 or 5:45
objPatterns.emailPat=/^[a-z0-9]([a-z0-9_\-\.]*)@([a-z0-9_\-\.]*)(\.[a-z]{2,3}(\.[a-z]{2}){0,2})$/i;


function validatePatterns(objForm){

	var objElements = objForm.elements; // get all elements of the form into array

	for(var i = 0; i < objElements.length; i++) {
		with(objElements[i]) { 
			var v = objElements[i].validator; // get validator, if any
			//Check field was entered first
			var mandatoryPat = objPatterns.nonspacePat;
			if (type == "") {
				continue;
			}	
			//if (!value) {
			//	continue;
			//}	
			//else	 {
				var fieldEntered = mandatoryPat.exec(value);
			//}	
			
			if (!fieldEntered && objElements[i].mandatory) {
				if (!objElements[i].friendlyName) 
					alert(name + " : must be entered");
				else
					alert(objElements[i].friendlyName + " : must be entered");
						
				//Check whether we want to set focus back for this field
				if (objElements[i].focusOnError != false) {
					objElements[i].focus();
				}
				return false;
			}

			//Skip if not mandatory and not entered
			if (!fieldEntered) continue;

			if(!v) continue; // no validator property, skip to next 'for'
			var objPat = objPatterns[v]; // select the validating regular expr

			var gotIt = objPat.exec(value); // run it on value of objElements[i]
			if(!gotIt){
				if (objPat.errormsg) {
					if (!objElements[i].friendlyName) 
						alert(name + " : " + objPat.errormsg);
					else
						alert(objElements[i].friendlyName + " : " + objPat.errormsg);

				}
				else {  //Use a friendly Name if we have one
					if (!objElements[i].friendlyName) 
						alert(name + ": value '" + value + "' was invalid");
					else
						alert(objElements[i].friendlyName + " : value '" + value + "' was invalid");
						
					if (objElements[i].focusOnError != false) {
						objElements[i].focus();
					}
						
				}
				return false;
			}
		} 
	}
	return true;
}

