//===================================================================
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;
		}// if
		return true;
	}

	return false;
}
//===================================================================

//===================================================================
function validateData(strValidateStr,objValue,strError) 
{ 
	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"; 
						}//if 
						alert(strError); 
						return false; 
				 }//if 
				 break;             
			 }//case required 
			case "maxlength": 
			case "maxlen": 
				{ 
					 if(eval(objValue.value.length) >  eval(cmdvalue)) 
					 { 
						 if(!strError || strError.length ==0) 
						 { 
							 strError = objValue.name + " : "+cmdvalue+" characters maximum "; 
						 }//if 
						 alert(strError + "\n[Current length = " + objValue.value.length + " ]"); 
						 return false; 
					 }//if 
					 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  "; 
						 }//if               
						 alert(strError + "\n[Current length = " + objValue.value.length + " ]"); 
						 return false;                 
					 }//if 
					 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 "; 
							}//if 
							alert(strError + "\n [Error character position " + eval(charpos+1)+"]"); 
							return false; 
						}//if 
						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 "; 
							}//if               
							alert(strError + "\n [Error character position " + eval(charpos+1)+"]"); 
							return false; 
						}//if 
						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 "; 
							}//if                             
							alert(strError + "\n [Error character position " + eval(charpos+1)+"]"); 
							return false; 
						}//if 
						break; 
				 }//alpha 
	case "alnumhyphen":
		{
						var charpos = objValue.value.search("[^A-Za-z0-9\-_]"); 
						if(objValue.value.length > 0 &&  charpos >= 0) 
						{ 
								if(!strError || strError.length ==0) 
							{ 
								strError = objValue.name+": characters allowed are A-Z,a-z,0-9,- and _"; 
							}//if                             
							alert(strError + "\n [Error character position " + eval(charpos+1)+"]"); 
							return false; 
						}//if 			
		break;
		}
		case "email": 
			{ 
					 if(!validateEmail(objValue.value)) 
					 { 
						 if(!strError || strError.length ==0) 
						 { 
								strError = objValue.name+": Enter a valid Email address "; 
						 }//if                                               
						 alert(strError); 
						 return false; 
					 }//if 
			 break; 
			}//case email 
		case "lt": 
		case "lessthan": 
		 { 
				if(isNaN(objValue.value)) 
				{ 
					alert(objValue.name+": Should be a number "); 
					return false; 
				}//if 
				if(eval(objValue.value) >=  eval(cmdvalue)) 
				{ 
					if(!strError || strError.length ==0) 
					{ 
						strError = objValue.name + " : value should be less than "+ cmdvalue; 
					}//if               
					alert(strError); 
					return false;                 
				 }//if             
				break; 
		 }//case lessthan 
		case "gt": 
		case "greaterthan": 
		 { 
				if(isNaN(objValue.value)) 
				{ 
					alert(objValue.name+": Should be a number "); 
					return false; 
				}//if 
				 if(eval(objValue.value) <=  eval(cmdvalue)) 
				 { 
					 if(!strError || strError.length ==0) 
					 { 
						 strError = objValue.name + " : value should be greater than "+ cmdvalue; 
					 }//if               
					 alert(strError); 
					 return false;                 
				 }//if             
				break; 
		 }//case greaterthan 
		case "regexp": 
		 { 
				if(!objValue.value.match(cmdvalue)) 
				{ 
					if(!strError || strError.length ==0) 
					{ 
						strError = objValue.name+": Invalid characters found "; 
					}//if                                                               
					alert(strError); 
					return false;                   
				}//if 
			 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 "; 
					}//if                                                               
					alert(strError); 
					return false;                                   
				 } 
				 break; 
		 }//case dontselect 
	}//switch 
	return true; 
} 
//===================================================================

//===================================================================
function validateForm(objFrm, arrObjDesc)
{ 
	if(objFrm.elements.length <= arrObjDesc.length) 
	{ 
		alert("BUG: Obj descriptor for a non existent form element"); 
		return false; 
	}//if

	for(var itrobj=0; itrobj < arrObjDesc.length; itrobj++) 
	{
		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; 
			}//if 
		}//for 
	}//for 
	
	return true;
}
//===================================================================