/*  checks the validity of an email address entered 
*   returns true or false 
*/ 

function validateEmail(email){
	var splitted = email.match("^(.+)@(.+)$");
	if(splitted == null) return false;
	if(splitted[1] != null ){
		var regexp_user=/^\"?[\w-_\.]*\"?$/;
		if(splitted[1].match(regexp_user) == null) return false;
	}
	if(splitted[2] != null){
		var regexp_domain=/^[\w-\.]*\.[A-Za-z]{2,4}$/;
		if(splitted[2].match(regexp_domain) == null){
			var regexp_ip =/^\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\]$/;
			if(splitted[2].match(regexp_ip) == null) return false;
		}
	return true;
	}
return false;
}

/* function validateData 
*  Checks each field in a form 
*  Called from validateForm function 
*/ 
function validateData(strValidateStr,objValue,strError,strErrorA,strErrorB){ 
	var epos = strValidateStr.search("="); 
	var command  = ""; 
	var cmdvalue = ""; 
	if(epos >= 0){ 
		command  = strValidateStr.substring(0,epos); 
		cmdvalue = strValidateStr.substr(epos+1); 
	}else{ 
		command = strValidateStr; 
	} 
	switch(command){ 
		case "req": 
		case "required": { 
			if(eval(objValue.value.length) == 0){
				if(!strError || strError.length ==0){
					strError = objValue.name + " : Required Field"; 
				}
				alert(strError); 
				return false; 
			}
		break;             
		}//case required 
		
		case "maxlength": 
		case "maxlen":{ 
			if(eval(objValue.value.length) >  eval(cmdvalue)){
				if(!strError || strError.length ==0){ 
					strError = objValue.name + " : "+cmdvalue+" max. "; 
				}
				alert(strError + " [" + objValue.value.length + " ]"); 
				return false; 
			}
		break;
		}//case maxlen 
		
		case "minlength": 
		case "minlen":{ 
			if(eval(objValue.value.length) <  eval(cmdvalue)){ 
				if(!strError || strError.length ==0){ 
					strError = objValue.name + " : " + cmdvalue + " characters minimum  "; 
				}
				alert(strError + " [" + objValue.value.length + "]"); 
				return false;
			}
		break;
		}//case minlen
		
		case "alnum":
		case "alphanumeric":{ 
			var charpos = objValue.value.search("[^A-Za-z0-9]"); 
			if(objValue.value.length > 0 &&  charpos >= 0){ 
				if(!strError || strError.length ==0){ 
					strError = objValue.name+": Only alpha-numeric characters allowed "; 
				}
				alert(strError + " [" + eval(charpos+1)+"]"); 
				return false; 
			}
		break; 
		}//case alphanumeric 
		
		case "num":
		case "numeric":{ 
			var charpos = objValue.value.search("[^0-9]"); 
			if(objValue.value.length > 0 &&  charpos >= 0){ 
				if(!strError || strError.length ==0){ 
					strError = objValue.name+": Only digits allowed "; 
				}
				alert(strError + " [" + eval(charpos+1)+"]"); 
				return false; 
			}
		break;
		}//numeric 
		
		case "alphabetic":
		case "alpha":{ 
			var charpos = objValue.value.search("[^A-Za-z]"); 
				if(objValue.value.length > 0 &&  charpos >= 0){ 
					if(!strError || strError.length ==0){ 
					strError = objValue.name+": Only alphabetic characters allowed ";
				}
				alert(strError + " [" + eval(charpos+1)+"]"); 
				return false; 
			}
		break; 
		}//alpha 
		
		case "email":{ 
			if(!validateEmail(objValue.value)){ 
				if(!strError || strError.length ==0){ 
					strError = objValue.name+": Enter a valid Email address "; 
				}
				alert(strError); 
				return false; 
			}
		break; 
		}//case email 
		
		case "lt": 
		case "lessthan":{ 
			if(isNaN(objValue.value)){ 
				alert(objValue.name+": Should be a number "); 
				return false; 
			}
			if(eval(objValue.value) >=  eval(cmdvalue)){ 
				if(!strError || strError.length ==0){ 
					strError = objValue.name + " : value should be less than "+ cmdvalue; 
				}
				alert(strError); 
				return false;
			}
		break; 
		}//case lessthan 
		
		case "gt": 
		case "greaterthan":{ 
			if(isNaN(objValue.value)){ 
				alert(objValue.name+": Should be a number "); 
			return false; 
			}
			if(eval(objValue.value) <=  eval(cmdvalue)){ 
				if(!strError || strError.length ==0){
					strError = objValue.name + " : value should be greater than "+ cmdvalue; 
				}
				alert(strError); 
				return false;
			}
		break;
		}//case greaterthan 
		
		case "regexp":{ 
			if(!objValue.value.match(cmdvalue)){ 
				if(!strError || strError.length ==0){ 
					strError = objValue.name+": Invalid characters found ";
				}
				alert(strError); 
				return false;
			}
		break; 
		}//case regexp 
		
		case "dontselect":{ 
			if(objValue.selectedIndex == null){ 
				alert("BUG: dontselect command for non-select Item"); 
				return false; 
			} 
			if(objValue.selectedIndex == eval(cmdvalue)){ 
				if(!strError || strError.length ==0){
					strError = objValue.name+": Please Select one option "; 
				}
				alert(strError);
				return false;
			}
		break;
		}//case dontselect
	}//switch 
	return true; 
} 

/* 
* function validateForm 
* the function that can be used to validate any form 
* returns false if the validation fails; true if success 
* arguments : 
*   objFrm     : the form object 
*   arrObjDesc : an array of objects describing the validations to conduct on each 
*        input item. 
*          The array should consist of one object per input item in the order the input 
*          elements are present in the form. Each object consist of zero or more validation 
*          objects. Each of these validation object is a pair consisting of the validation 
*          descriptor string and an optional Error message. 
*/ 

function validateForm(objFrm,arrObjDesc){ 
	for(var itrobj=0; itrobj < arrObjDesc.length; itrobj++){ 
		if(objFrm.elements.length <= itrobj){
			alert("BUG: Obj descriptor for a non existent form element");
			return false; 
		}
		for(var itrdesc=0; itrdesc < arrObjDesc[itrobj].length ;itrdesc++){ 
			if(validateData(arrObjDesc[itrobj][itrdesc][0], objFrm[itrobj],arrObjDesc[itrobj][itrdesc][1]) == false){ 
				objFrm[itrobj].focus();
				return false; 
			}
		}
	}
}
