var Validation = {
	validateEmail: function (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;
	},

	validateURL: function (url)
	{
		var regexp_domain=/^[\w-\.]*\.[A-Za-z]{2,4}$/;
		if(url.match(regexp_domain) == null) {
			var regexp_ip =/^\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\]$/;
			if(url.match(regexp_ip) == null) return false;
		}// if
		return true;
	},

	validateData: function (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 "alnumhypspace":
			{
							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 'space'"; 
								}//if                             
								alert(strError + "\n[Error character position " + eval(charpos+1)+"]"); 
								return false; 
							}//if
			break;
			}
			case "email": 
				{ 
						 if(!this.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 "phone":
				{ // /\d{3}\-\d{3}\-\d{4}/
							if (objValue.value.search("[^0-9\-_ ()]") != -1) {
								alert(strError);
								return false;
							};
				break;
				}
			case "url": 
				{ 
						 if(!this.validateURL(objValue.value)) 
						 { 
							 if(!strError || strError.length ==0) 
							 { 
									strError = objValue.name+": Enter a valid URL "; 
							 }//if
							 alert(strError); 
							 return false; 
						 }//if 
				 break; 
				}//case url 

			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 "gtet": 
			case "greaterorequal": 
			 { 
					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 or equal to "+ cmdvalue; 
						 }//if
						 alert(strError); 
						 return false;
					 }//if
					break; 
			 }//case greaterorequal 
			case "date":
			{
							var charpos = objValue.value.search("[^0-9\-/: ]"); 
							if(objValue.value.length > 0 &&  charpos >= 0) 
							{ 
									if(!strError || strError.length ==0) 
								{ 
									strError = objValue.name+": characters allowed are 0-9, -, / ,: and 'space'"; 
								}//if
								alert(strError + "\n[Error character position " + eval(charpos+1)+"]"); 
								return false; 
							}//if 			
			break;
			}
			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; 
	},

	validateForm: function (objFrm, arrObjDesc)
	{ 
		var arrObjDescCount = 0;
		for (var itrobj = 0; itrobj < objFrm.length; itrobj++) {
			if (objFrm[itrobj].nodeName != "FIELDSET" && objFrm[itrobj].type != "hidden") {
				for (var itrdesc=0; itrdesc < arrObjDesc[arrObjDescCount].length; itrdesc++) {
					if (this.validateData(arrObjDesc[arrObjDescCount][itrdesc][0], objFrm[itrobj], arrObjDesc[arrObjDescCount][itrdesc][1]) == false) {
						objFrm[itrobj].focus();
						return false;
					}
				}
				arrObjDescCount++;
				if (arrObjDescCount >= arrObjDesc.length) {
					break;
				}
			}
		}
		
		return true;
	}
};
