//<script language="JavaScript">


// Entry Point for Single field validation
function checkFieldValue(values){
	var myArray = new Array(values);	
	return checkAllFieldValues(myArray);	
}

// Entry Point for All Form Fields validation 
function checkAllFieldValues(arrValues){
	var fieldOk = false;
	var field;
	var fieldLabel = "";
	var isRequired = "";
	var noErrors = true;
	var arrCurElement = new Array();
	
	for (z=0; z<arrValues.length; z++){
		arrCurElement = arrValues[z].split("|");
		field = eval(arrCurElement[1]);		
		fieldLabel = arrCurElement[3];
		isRequired = eval(arrCurElement[4]);
		//alert(field.value.length + ' '+ fieldLabel + ' ' + isRequired);
		if (isRequired == true && field.value.length == 0){
			alert (fieldLabel + ' is a required field.');
			return false;
		}
		
		fieldOk = validateFields(arrValues[z]);			
		//alert(fieldLabel + ' ' + fieldOk);
		if(fieldOk == false)	{
			noErrors = false;
			alert('Please provide a valid ' + fieldLabel);			
		}
	}	
	return noErrors;
}
	
/*************************************************************************
validateFields can be called from any action for form or field level 
validation.  Currently this function validates text, integer, floating 
decimal, email, list (i.e., multi-select and drop down lists), zip code, 
and URL.

main function:		validateFields
supporting functions:  
						validateText, validateInt, validateFloat, 
						validateEmail, validateList, validateLength, validateURL,
						trim;
					   
required parameters:  If called from a form action (either a submit button or link),
					  the function is passed an array of values that defines the 
					  fields to be validated as well as the parameters for the 
					  individual entries.  
					  If called from a field, the function is passed a pipe character 
					  delimited string that defined the parameters for that field.
					  The parameters include the field data type, a field label, 
					  the field maximum data length, and whether the field is 
					  required or not.
					  
					  
Example form array defined in the HEAD and passed by a submit button:
var fieldsToValidate = new Array("email|document.forms[0].txtContactEmail|250|Contact Email|true",
				"text|document.forms[0].txtContactPerson|250|Contact Name|true",
				"int|document.forms[0].txtContactPhone|10|Contact Phone Number|false",
				"float|document.forms[0].txtPropertySize|6|Property Size|false",
				"list|document.forms[0].lstCounty||County|true",
				"URL|document.forms[0].txtURL|500|Web Site Address|false",
				"Zip|document.forms[0].txtZip|10|Zip Code|true);	


Example string passed by a field for validation:
onChange="validateFields('email|document.forms[0].txtContactEmail|250|Contact Email|true')"
Comments:								
To use the validateFields function to perform validation prior to submitting data, it is suggested
that the following syntax is used in the submit link
<a href="javascript:document.forms[0].submit()" onClick="return validateFields(fieldsToValidate)">
*************************************************************************/
function trim(str){
	var re= " ";
   
   re = /^\s+/;   str = str.replace(re, "");
   re = /\s+$/;   str = str.replace(re, "");
   
   return str;
}

function validateFields(arrFields){
	var arrCurElement;
	var curElement;

	var fieldType;
	var isRequired;
	var isDataOk;
	var isLengthOk;
	var maxLength;
	var fieldLabel;

	var retValue=true;
	

	arrCurElement = new Array();
	//arrCurElement = arrFields[i].split("|");
	arrCurElement = arrFields.split("|")
	fieldType = arrCurElement[0].toLowerCase();
	
	curElement = eval(arrCurElement[1]);
	// Except of TextArea maxlength should be set on the Form, no need to check
	maxLength = parseInt(arrCurElement[2]);
//	alert(maxLength);
//	fieldLabel = arrCurElement[3];     not used
	isRequired = eval(arrCurElement[4]);
		
/*		
	sTest = 'i = ' + i
	sTest += '\nfieldType = ' + fieldType
	sTest += '\ncurElement = ' + curElement
	sTest += '\maxLength = ' + maxLength
	sTest += '\nfieldLabel = ' + fieldLabel
	sTest += '\nisRequired = ' + isRequired
	alert(sTest);
*/		
	
	isDataOk = true;
	isLengthOk = true;
	
	switch(fieldType){
		case 'text':
			isDataOk = validateText(curElement, isRequired);
			isLengthOk = validateLength(curElement, maxLength);
			if(isDataOk == false || isLengthOk == false)
				retValue = false;		
			break;
		case 'email':
			retValue = validateEmail(curElement, isRequired);						
			break;
		case 'int':
			retValue = validateInt(curElement, isRequired);	
			break;					
		case 'float':
			retValue = validateFloat(curElement, isRequired);
			break;
		case 'list':
			retValue = validateList(curElement, isRequired);
			break;
		case 'url':
			retValue = validateURL(curElement, isRequired);
			break;					
		case 'zip':
			retValue = validateZip(curElement, isRequired);
			break;																												
	}
	//}
	return retValue;
}
/*******************************************************************************/
function validateLength(textBox, maxLength){

	var retValue = true;
	var fieldValue;
	fieldValue = textBox.value
	if(fieldValue.length > maxLength)	{
		retValue = false;
	}
	
	//if(parseInt(maxLength) > 0){}
	return retValue;
}

/*******************************************************************************/

function validateList(listBox, allowFirstValue){
	var tmpPos = -1;
	var retValue = true;
	
	for(j=0; j<listBox.length; j++)	{
		if(listBox.options[j].selected){
			tmpPos = listBox.selectedIndex
		}
	}

	if((tmpPos == 0 && allowFirstValue == false) || tmpPos == -1){
		retValue = false;	
	}
	
	return retValue;
	
}

/*******************************************************************************/
function hasData(fieldValue){
	var retValue = true;
	if(trim(fieldValue) == ""){
		retValue = false;
	}
	
	return retValue;
}
/*******************************************************************************/

function validateText(textBox, isRequired){	
	var fieldValue = trim(textBox.value);
	var retValue = true;
	
	if(isRequired == true){
		retValue = hasData(fieldValue);
	}
	
	//alert('validateText:  textBox.name = ' + textBox.name + '\nisRequired = ' + isRequired + '\nhasData = ' + hasData(fieldValue))
	return retValue;
}
/*******************************************************************************/

function validateInt(textBox, isRequired){
	var fieldValue = trim(textBox.value);
	var re = /\d*/;			
	
	var retValue = true;
	
	if(isRequired == true){
		retValue = hasData(fieldValue);
	}
	
	/*  ??
	var test = re.exec(fieldValue);	
	if(test[0].length != fieldValue.length){
		retValue = false;
	}*/
	
	return retValue;

}

/*******************************************************************************/

function validateFloat(textBox, isRequired){
	var fieldValue = trim(textBox.value);
	var re = /^\d*$|^\d*\.\d*$/;	

	var retValue = true;
	
	if(isRequired == true){
		retValue = hasData(fieldValue);
	}	

	if(hasData(fieldValue) == true){   
		retValue = re.test(fieldValue);
	}
	
	return retValue;

}

/*******************************************************************************/
/*
function validateEmail(textBox, isRequired){ 
	var email;
	var retValue = true;
	
	email = trim(textBox.value);  
	alert(email);

	if ((email == "") || (email == null))	{
		retValue = false;
	}

	else if ( (email.indexOf("@")==-1) ||  (email.indexOf(".")==-1 ) ||   (email.length<3) || ((email.indexOf(".com")<5) || (email.indexOf(".edu")<5) || (email.indexOf(".org")<5)  || (email.indexOf(".gov")<5) || (email.indexOf(".net")<5) || (email.indexOf(".mil")<5)) )	{
   		retValue = false;
	}
	{
		retValue=false;
	}


	return retValue;  
}  
*/
function validateEmail(textBox, isRequired){ 

	var fieldValue = trim(textBox.value);
	var re = /^.+\@.+\..+$/;

	var retValue = true;

 	if(isRequired == true){
		retValue = hasData(fieldValue);
	}

	if(hasData(fieldValue) == true){   
      retValue = re.test(fieldValue);
   }

return retValue;
}  
/*******************************************************************************/

function validateURL (textBox, isRequired) {
	
	var fieldValue = trim(textBox.value);	
	var re1 = /(^http:\/\/)/gi;	
	var re2 = /\s/gi;
	
	var retValue = true;
	
	if(isRequired == true){
		retValue = hasData(fieldValue);
	}
	
	if(hasData(fieldValue) == true){
		//if ((re1.exec(fieldValue) == null || re2.exec(fieldValue) != null)) {
		if ((re1.test(fieldValue) == false || re2.test(fieldValue) == true)) {
			retValue = false;
		}
	}		
	return retValue;
}
/*******************************************************************************/	
function validateZip(textBox, isRequired)	{
	
	var fieldValue = trim(textBox.value);	
	var re = /^\d{5}$|^\d{5}[\-=>\s]?\d{4}$/;		
	
	var retValue = true;	
	if(isRequired == true){
		retValue = hasData(fieldValue);
	}
	
	if(hasData(fieldValue) == true){
		//if (re.exec(fieldValue) == null){
			retValue = re.test(fieldValue);
		//}
	}
	return retValue;
}

/*******************************************************************************/
//</script>