//
// Universal Form Validation Script V1.5
//
// ©Copyright 2005 WidaGroup Ltd - All Rights Reserved
// www.widagroup.net

var arrFieldName=new Array();
var arrFieldType=new Array();
var arrFieldDescription=new Array();
var blnFormSubmitted=false;

var reCheck=new Object();
reCheck['number']=/^[\d\s\(\)\-\,\.]*$/;
reCheck['email']=/^[a-zA-Z\d][^\(\)\<\>\@\,\;\:\\\"\[\]]*\@[a-zA-Z\d][a-zA-Z\d\-\.]*\.[a-zA-Z]{2,4}$/;
reCheck['postcode']=/^[a-zA-Z]{1,2}\d{1,2}[a-zA-Z]?\s\d[a-zA-Z]{2}$/;
reCheck['ipaddress']=/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/;
reCheck['creditcard']=/^\d{4}[\.\s\-]?\d{4}[\.\s\-]?\d{4}[\.\s\-]?\d{4}$/;
reCheck['date']=/^[0123]?\d[\\\/\-\.][01]?\d[\\\/\-\.]\d{2,4}$/;

// Add as many regular expressions as you like... go on, you know you want to.

function setvalidation(fieldnames,checktypes,fielddescription){
	arrFieldName=fieldnames;
	arrFieldType=checktypes;
	arrFieldDescription=fielddescription;
}

function checkform(theForm){
	var arrFieldValues=new Array();
	var arrCheckTypeDatas=new Array();
	
	if(blnFormSubmitted){
		return false;
	}else{
		var strMessage='';
		var blnOneOfManyPresent=false;
		
		for(n=0;n<arrFieldName.length;n++){
			var blnFieldCollectionLength=theForm[arrFieldName[n]].length?theForm[arrFieldName[n]].length:0;
			
			arrFieldValues[n]='';
			arrCheckTypeDatas[n]=arrFieldType[n].split(',')
			
			if(blnFieldCollectionLength==0){
				arrFieldValues[n]=theForm[arrFieldName[n]].value;
			}else{
				if(theForm[arrFieldName[n]].options){
					arrFieldValues[n]=theForm[arrFieldName[n]].options[theForm[arrFieldName[n]].selectedIndex].value;
				}else{
					for(var i=0;i<theForm[arrFieldName[n]].length;i++){
						if(theForm[arrFieldName[n]][i].checked){
							arrFieldValues[n]+=theForm[arrFieldName[n]][i].value+',';
						}
					}
					arrFieldValues[n]=arrFieldValues[n].substr(0,strFieldValue.length-1);
				}
			}
		}
			
		for(n=0;n<arrFieldName.length;n++){
			var intCheckResult=check_all(arrFieldValues,n,arrCheckTypeDatas);
			switch(intCheckResult){
				case 0: // failed
					if(strMessage==''){
						theForm[arrFieldName[n]].focus();
					}
					
					strMessage+=' - '+arrFieldDescription[n]+'\n';
					
					if(blnFieldCollectionLength==0){theForm[arrFieldName[n]].style.backgroundColor='#ddeeff';}
				break;
				case 1: // failed and is one of many where none passed
					if(strMessage==''){
						theForm[arrFieldName[n]].focus();
					}
					
					strMessage+=' - '+arrFieldDescription[n]+' *\n';
					blnOneOfManyPresent=true;
					
					if(blnFieldCollectionLength==0){theForm[arrFieldName[n]].style.backgroundColor='#eef5ff';}
				break;
				case 2: // passed or is one of many where one or more passed
					if(blnFieldCollectionLength==0){theForm[arrFieldName[n]].style.backgroundColor='#ffffff';}
				break;
			}
		}
		
		blnFormSubmitted=(strMessage=='');
		
		if(blnOneOfManyPresent){strMessage+='\n* You need only fill in one of these details.'}
		
		if(!blnFormSubmitted){alert('Please check the following details:\n\n'+strMessage);}
		
		return blnFormSubmitted;
	}
}

function check_all(arrFieldValues,n,arrCheckTypeDatas){
	var strTemp='';
	
	if(checkstringtype(arrFieldValues[n],arrCheckTypeDatas[n][0]) && checkstringlength(arrFieldValues[n],arrCheckTypeDatas[n][1],arrCheckTypeDatas[n][2])){
		if(arrCheckTypeDatas[n][3]=='repeat'){
			if (arrFieldValues[n]!=arrFieldValues[n-1]){
				return 0;
			}
		}
		return 2;
	}else{
		if(arrCheckTypeDatas[n][3]=='oneofmany'){
			for(var m=0;m<arrFieldName.length;m++){
				if(arrCheckTypeDatas[m][3]==arrCheckTypeDatas[n][3]){
					if(checkstringtype(arrFieldValues[m],arrCheckTypeDatas[m][0]) && checkstringlength(arrFieldValues[m],arrCheckTypeDatas[m][1],arrCheckTypeDatas[m][2])){
						return 2;
					}
				}
			}
			return 1;
		}
		return 0;
	}
}

function checkstringtype(strString,strCheckType){
	return (strCheckType=='' || strString=='' || reCheck[strCheckType].test(strString));
}

function checkstringlength(strString,intMinimum,intMaximum){
	return (!intMinimum || strString.length>=intMinimum) && (!intMaximum || strString.length<=intMaximum);
}

//End of Universal Form Validation Script
