var ValidDict = new Object();

// Postcode
ValidDict.zipPat = /^\d{5}$/

// Integer > 0
ValidDict.IntegerPat = /^0*[1-9]+[0-9]*$/

// Integer >= 0
ValidDict.ZeroIntegerPat = /^\d+$/

// Alphanumeric
ValidDict.Alphanumeric = /^[a-zA-Z0-9\s]+$/

// matches 12 or 17.23 or 14281545,00 or ...
ValidDict.AmountPat = /^\d+((\.|,)\d{0,2})?$/

// matches 12 or 17.234865 or 14281545,00 or ...
ValidDict.AmountLowPat = /^\d+((\.|,)\d{0,6})?$/

// Email pattern
ValidDict.EmailPat = /^([\w-]+\.)*[\w-]+\@([\w-]+\.)+[a-zA-Z]{2,4}$/

// URL pattern
ValidDict.UrlPat = /^https?:\/\/[^\/:]+(:\d+)?(\/[\S]*)?$/

// International phone number
ValidDict.PhonePat = /^(\+?\s*((\d+|\(\d+\))\s*)*)?\d[\d\.\s\-]*\d$/

// Date
ValidDict.DatePat = /^\d{1,2}[\s\/\.-]\d{1,2}[\s\/\.-](20)?\d{2}$/

// Date (Full year)
ValidDict.DateFullPat = /^\d{1,2}[\s\/\.-]\d{1,2}[\s\/\.-](19|20)\d{2}$/

//Rate xxx.xx
ValidDict.RatePat = /^\d{1,3}((\.|,)\d{0,2})?$/

function ValidateForm(theForm){
	var v, val;
	var elArr = theForm.elements;
	for(var i = 0; i < elArr.length; i++){
		val = String(elArr[i].value).replace(/^\s+|\s+$/g,'');
		v = elArr[i].validator;
		var ValidFct = v == null? null : (v.charAt(0) == '/'? new RegExp(v.substr(1, v.length - 2)) : (v.charAt(v.length - 1) == ')'? eval(v.substr(0, v.length - 2)) : ValidDict[v]));
		if((val == '' && elArr[i].mandatory == '1') || (val != '' && ValidFct != null && !(typeof(ValidFct) == 'function'? ValidFct(val) : (ValidFct.exec(val) != null)))){
			alert(val == ''? 'Please complete this field; this information is required to handle your request.' : elArr[i].errormsg);
			elArr[i].focus();
			if(elArr[i].type == 'text' || elArr[i].type == 'password') elArr[i].select();
			return false;
		}
	}
	return true;
}