//validation
    function validateRequired(form) {
        var isValid = true;
        var focusField = null;
        var i = 0;
        var fields = new Array();
        oRequired = new RequiredValidations();
        for (x in oRequired) {
        	var field = form[oRequired[x][0]];
            var doValidate = false;
            var isFieldArray = false;
            if (field.type == 'text' ||
                field.type == 'textarea' ||
                field.type == 'file' ||
                field.type == 'select-one' ||
                field.type == 'radio' ||
                field.type == 'password' ||
                field.type == 'checkbox') 
            {
            	doValidate = true;
            }
            if(field.length  && field.length > 0)
            {
            	if(field[0].type)
            	{
            		if(field[0].type == 'checkbox')
            		{
            			doValidate = true;
            			isFieldArray = true;
            		}
            	}
            }	
            if (doValidate)
            {
                //if(field.id == "firstname") alert(field.value);
                //
                var value = '';
				// get field's value
				if (field.type == "select-one") {
					var si = field.selectedIndex;
					if (si >= 0) {
						value = field.options[si].value;
					}
				} 
				else if (isFieldArray)
				{
					for (c = 0; c < field.length; c++)
					{
						if(field[0].type == 'checkbox')
						{
							if(field[c].checked)
								value = value + field[c].value;
						}
					}
				}
				else 
				{
					value = field.value;
					//alert(field.value);
				}
                //alert(value)       
                if (trim(value).length == 0) {
	                if (i == 0) {
	                    focusField = field;
	                }
	                if (!isFieldArray)
	                	field.style.background = "orange";
	                else
	                {
	                	field[0].style.background = "orange";
	                	focusField = field[0];
	                }
	                fields[i++] = oRequired[x][1];
	                isValid = false;
                }
            }
        }
        if (fields.length > 0) {
           focusField.focus();
           alert(fields.join('\n'));
        }
        return isValid;
    }
            
    // Trim whitespace from left and right sides of s.
    function trim(s) {
        return s.replace( /^\s*/, "" ).replace( /\s*$/, "" );
    }
	function validateEmail(form) {
	    var bValid = true;
	    var focusField = null;
	    var i = 0;
	    var fields = new Array();
	    oEmail = new EMails();
	    for (x in oEmail) {
	        if ((form[oEmail[x][0]].type == 'text' ||
	             form[oEmail[x][0]].type == 'textarea') &&
	            (form[oEmail[x][0]].value.length > 0)) {
	            if (!checkEmail(form[oEmail[x][0]].value)) {
	                if (i == 0) {
	                    focusField = form[oEmail[x][0]];
	                }
	                form[oEmail[x][0]].style.background = "orange";
	                fields[i++] = oEmail[x][1];
	                bValid = false;
	            }
	        }
	    }
	    if (fields.length > 0) {
	        focusField.focus();
	        alert(fields.join('\n'));
	    }
	    return bValid;
	}

	/**
	 * Reference: Sandeep V. Tamhankar (stamhankar@hotmail.com),
	 * http://javascript.internet.com
	 */
	function checkEmail(emailStr) {
	   if (emailStr.length == 0) {
	       return true;
	   }
	   var emailPat=/^(.+)@(.+)$/;
	   var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]";
	   var validChars="\[^\\s" + specialChars + "\]";
	   var quotedUser="(\"[^\"]*\")";
	   var ipDomainPat=/^(\d{1,3})[.](\d{1,3})[.](\d{1,3})[.](\d{1,3})$/;
	   var atom=validChars + '+';
	   var word="(" + atom + "|" + quotedUser + ")";
	   var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
	   var domainPat=new RegExp("^" + atom + "(\\." + atom + ")*$");
	   var matchArray=emailStr.match(emailPat);
	   if (matchArray == null) {
	       return false;
	   }
	   var user=matchArray[1];
	   var domain=matchArray[2];
	   if (user.match(userPat) == null) {
	       return false;
	   }
	   var IPArray = domain.match(ipDomainPat);
	   if (IPArray != null) {
	       for (var i = 1; i <= 4; i++) {
	          if (IPArray[i] > 255) {
	             return false;
	          }
	       }
	       return true;
	   }
	   var domainArray=domain.match(domainPat);
	   if (domainArray == null) {
	       return false;
	   }
	   var atomPat=new RegExp(atom,"g");
	   var domArr=domain.match(atomPat);
	   var len=domArr.length;
	   if ((domArr[domArr.length-1].length < 2) ||
	       (domArr[domArr.length-1].length > 3)) {
	       return false;
	   }
	   if (len < 2) {
	       return false;
	   }
	   return true;
	}
	    function validateDate(form) {
	       var bValid = true;
	       var focusField = null;
	       var i = 0;
	       var fields = new Array();
	       oDate = new DateValidations();
	       for (x in oDate) {
	           var value = form[oDate[x][0]].value;
	           //var datePattern = oDate[x][2]("datePatternStrict");
	           var datePattern = "YYYY-MM-DD";
	           if ((form[oDate[x][0]].type == 'text' ||
	                form[oDate[x][0]].type == 'textarea') &&
	               (value.length > 0) &&
	               (datePattern.length > 0)) {
	             var MONTH = "MM";
	             var DAY = "DD";
	             var YEAR = "YYYY";
	             var orderMonth = datePattern.indexOf(MONTH);
	             var orderDay = datePattern.indexOf(DAY);
	             var orderYear = datePattern.indexOf(YEAR);
	             if ((orderDay < orderYear && orderDay > orderMonth)) {
	                 var iDelim1 = orderMonth + MONTH.length;
	                 var iDelim2 = orderDay + DAY.length;
	                 var delim1 = datePattern.substring(iDelim1, iDelim1 + 1);
	                 var delim2 = datePattern.substring(iDelim2, iDelim2 + 1);
	                 if (iDelim1 == orderDay && iDelim2 == orderYear) {
	                    dateRegexp = new RegExp("^(\\d{2})(\\d{2})(\\d{4})$");
	                 } else if (iDelim1 == orderDay) {
	                    dateRegexp = new RegExp("^(\\d{2})(\\d{2})[" + delim2 + "](\\d{4})$");
	                 } else if (iDelim2 == orderYear) {
	                    dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})(\\d{4})$");
	                 } else {
	                    dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})[" + delim2 + "](\\d{4})$");
	                 }
	                 var matched = dateRegexp.exec(value);
	                 if(matched != null) {
	                    if (!isValidDate(matched[2], matched[1], matched[3])) {
	                       if (i == 0) {
	                           focusField = form[oDate[x][0]];
	                       }
	                       fields[i++] = oDate[x][1];
	                       bValid =  false;
	                    }
	                 } else {
	                    if (i == 0) {
	                        focusField = form[oDate[x][0]];
	                    }
	                    fields[i++] = oDate[x][1];
	                    bValid =  false;
	                 }
	             } else if ((orderMonth < orderYear && orderMonth > orderDay)) {
	                 var iDelim1 = orderDay + DAY.length;
	                 var iDelim2 = orderMonth + MONTH.length;
	                 var delim1 = datePattern.substring(iDelim1, iDelim1 + 1);
	                 var delim2 = datePattern.substring(iDelim2, iDelim2 + 1);
	                 if (iDelim1 == orderMonth && iDelim2 == orderYear) {
	                     dateRegexp = new RegExp("^(\\d{2})(\\d{2})(\\d{4})$");
	                 } else if (iDelim1 == orderMonth) {
	                     dateRegexp = new RegExp("^(\\d{2})(\\d{2})[" + delim2 + "](\\d{4})$");
	                 } else if (iDelim2 == orderYear) {
	                     dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})(\\d{4})$");
	                 } else {
	                     dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})[" + delim2 + "](\\d{4})$");
	                 }
	                 var matched = dateRegexp.exec(value);
	                 if(matched != null) {
	                     if (!isValidDate(matched[1], matched[2], matched[3])) {
	                         if (i == 0) {
	                             focusField = form[oDate[x][0]];
	                         }
	                         fields[i++] = oDate[x][1];
	                         bValid =  false;
	                      }
	                 } else {
	                     if (i == 0) {
	                         focusField = form[oDate[x][0]];
	                     }
	                     fields[i++] = oDate[x][1];
	                     bValid =  false;
	                 }
	             } else if ((orderMonth > orderYear && orderMonth < orderDay)) {
	                 var iDelim1 = orderYear + YEAR.length;
	                 var iDelim2 = orderMonth + MONTH.length;
	                 var delim1 = datePattern.substring(iDelim1, iDelim1 + 1);
	                 var delim2 = datePattern.substring(iDelim2, iDelim2 + 1);
	                 if (iDelim1 == orderMonth && iDelim2 == orderDay) {
	                     dateRegexp = new RegExp("^(\\d{4})(\\d{2})(\\d{2})$");
	                 } else if (iDelim1 == orderMonth) {
	                     dateRegexp = new RegExp("^(\\d{4})(\\d{2})[" + delim2 + "](\\d{2})$");
	                 } else if (iDelim2 == orderDay) {
	                     dateRegexp = new RegExp("^(\\d{4})[" + delim1 + "](\\d{2})(\\d{2})$");
	                 } else {
	                     dateRegexp = new RegExp("^(\\d{4})[" + delim1 + "](\\d{2})[" + delim2 + "](\\d{2})$");
	                 }
	                 var matched = dateRegexp.exec(value);
	                 if(matched != null) {
	                     if (!isValidDate(matched[3], matched[2], matched[1])) {
	                         if (i == 0) {
	                             focusField = form[oDate[x][0]];
	                          }
	                          fields[i++] = oDate[x][1];
	                          bValid =  false;
	                      }
	                  } else {
	                      if (i == 0) {
	                          focusField = form[oDate[x][0]];
	                      }
	                      fields[i++] = oDate[x][1];
	                      bValid =  false;
	                  }
	             } else {
	                 if (i == 0) {
	                     focusField = form[oDate[x][0]];
	                 }
	                 fields[i++] = oDate[x][1];
	                 bValid =  false;
	             }
	          }
	       }
	       if (fields.length > 0) {
	          focusField.focus();
	          alert(fields.join('\n'));
	       }
	       return bValid;
	    }

	function isValidDate(day, month, year) {
	    if (month < 1 || month > 12) {
	            return false;
	        }
	        if (day < 1 || day > 31) {
	            return false;
	        }
	        if ((month == 4 || month == 6 || month == 9 || month == 11) &&
	            (day == 31)) {
	            return false;
	        }
	        if (month == 2) {
	            var leap = (year % 4 == 0 &&
	                       (year % 100 != 0 || year % 400 == 0));
	            if (day>29 || (day == 29 && !leap)) {
	                return false;
	            }
	        }
	        return true;
	    }
    function validateInteger(form) {
        var bValid = true;
        var focusField = null;
        var i = 0;
        var fields = new Array();
        oInteger = new IntegerValidations();
        for (x in oInteger) {
        	var field = form[oInteger[x][0]];
        	if(field != null){

	            if (field.type == 'text' ||
	                field.type == 'textarea' ||
	                field.type == 'select-one' ||
	                field.type == 'radio') {
	                        
	                var value = '';
					// get field's value
					if (field.type == "select-one") {
						var si = field.selectedIndex;
					    if (si >= 0) {
						    value = field.options[si].value;
					    }
					} else {
						value = field.value;
					}
	                        
	                if (value.length > 0) {
	                        
	                    if (!isAllDigits(value)) {
	                        bValid = false;
	                        if (i == 0) {
	                            focusField = field;
	                        }
					        fields[i++] = oInteger[x][1];
							        
	                    } else {
	                        var iValue = parseInt(value);
	                        if (isNaN(iValue) || !(iValue >= -2147483648 && iValue <= 2147483647)) {
	                            if (i == 0) {
	                                focusField = field;
	                            }
	                            field.style.background = "orange";
	                            fields[i++] = oInteger[x][1];
	                            bValid = false;
	                       }
	                   }
	               }
	            }
			}
        }
        if (fields.length > 0) {
           focusField.focus();
           alert(fields.join('\n'));
        }
        return bValid;
    }

    function isAllDigits(argvalue) {
        argvalue = argvalue.toString();
        var validChars = "0123456789";
        var startFrom = 0;
        if (argvalue.substring(0, 2) == "0x") {
           validChars = "0123456789abcdefABCDEF";
           startFrom = 2;
        } else if (argvalue.charAt(0) == "0") {
           validChars = "01234567";
           startFrom = 1;
        } else if (argvalue.charAt(0) == "-") {
            startFrom = 1;
        }
                
        for (var n = startFrom; n < argvalue.length; n++) {
            if (validChars.indexOf(argvalue.substring(n, n+1)) == -1) return false;
        }
        return true;
    }
    function validateAttrRequired(form) {
        var isValid = true;
        var focusField = null;
        var i = 0;
        var fields = new Array();
        oRequired = new AttrRequiredValidations();
        for (x in oRequired) {
        	var field = form[oRequired[x][0]];
                	
            if (field.type == 'text' ||
                field.type == 'textarea' ||
                field.type == 'file' ||
                field.type == 'select-one' ||
                field.type == 'radio' ||
                field.type == 'password' ||
                field.type == 'checkbox') {
                        
                var value = '';
				// get field's value
				if (field.type == "select-one") {
					var si = field.selectedIndex;
					if (si >= 0) {
						value = field.options[si].value;
					}
				} else {
					value = field.value;
					//alert(field.value);
				}
                        
                if (trim(value).length == 0) {
                        
	                if (i == 0) {
	                    focusField = field;
	                }
	                field.style.background = "orange";
	                fields[i++] = oRequired[x][1];
	                isValid = false;
                }
            }
        }
        if (fields.length > 0) {
           focusField.focus();
           alert(fields.join('\n'));
        }
        return isValid;
    }
    function validateAttrInteger(form) {
      var bValid = true;
      var focusField = null;
      var i = 0;
      var fields = new Array();
      oInteger = new AttrIntegerValidations();
      for (x in oInteger) {
      	var field = form[oInteger[x][0]];
      	if(field != null){

	            if (field.type == 'text' ||
	                field.type == 'textarea' ||
	                field.type == 'select-one' ||
	                field.type == 'radio') {
	                        
	                var value = '';
					// get field's value
					if (field.type == "select-one") {
						var si = field.selectedIndex;
					    if (si >= 0) {
						    value = field.options[si].value;
					    }
					} else {
						value = field.value;
					}
	                        
	                if (value.length > 0) {
	                        
	                    if (!isAllDigits(value)) {
	                        bValid = false;
	                        if (i == 0) {
	                            focusField = field;
	                        }
					        fields[i++] = oInteger[x][1];
							        
	                    } else {
	                        var iValue = parseInt(value);
	                        if (isNaN(iValue) || !(iValue >= -2147483648 && iValue <= 2147483647)) {
	                            if (i == 0) {
	                                focusField = field;
	                            }
	                            fields[i++] = oInteger[x][1];
	                            bValid = false;
	                       }
	                   }
	               }
	            }
			}
        }
        if (fields.length > 0) {
           focusField.focus();
           alert(fields.join('\n'));
        }
        return bValid;
    }
    function validateMinLength(form) {
    	var isValid = true;
    	var focusField = null;
    	var i = 0;
    	var fields = new Array();
    	
    	oMinLength = new minlength();
    	for (x in oMinLength) {
    		
    	    var field = form[oMinLength[x][0]];
    	    //alert("" + field)
    		if(field != null){
    
    		    if (field.type == 'text' ||
    			field.type == 'textarea' ||
    			field.type == 'password') {
    
    			//var iMin = parseInt(oMinLength[x][2]("minlength"));
    			var iMin = parseInt(oMinLength[x][2]);
    			//alert (iMin)
    			if ((trim(field.value).length > 0) && (field.value.length < iMin)) {
    			    if (i == 0) {
    					focusField = field;
    			    }
    			    fields[i++] = oMinLength[x][1];
    			    field.style.background = "orange";
    			    isValid = false;
    			}
    		    }
    		}
    	}
    	if (fields.length > 0) {
    	   focusField.focus();
    	   alert(fields.join('\n'));
    	}
    	return isValid;
    }
    function validateMaxLength(form) {
        var isValid = true;
        var focusField = null;
        var i = 0;
        var fields = new Array();
        oMaxLength = new maxlength();
        for (x in oMaxLength) {
            var field = form[oMaxLength[x][0]];
         	if(field != null){
            
             if (field.type == 'text' ||
                 field.type == 'textarea') {
                 
                 var iMax = parseInt(oMaxLength[x][2]("maxlength"));
                 if (field.value.length > iMax) {
                     if (i == 0) {
                         focusField = field;
                     }
                     fields[i++] = oMaxLength[x][1];
                     isValid = false;
                 }
             }
					}
        }
        if (fields.length > 0) {
           focusField.focus();
           alert(fields.join('\n'));
        }
        return isValid;
    }
function validateFloat(form) {
var bValid = true;
var focusField = null;
var i = 0;
var fields = new Array();
oFloat = new FloatValidations();
for (x in oFloat) {
var field = form[oFloat[x][0]];
if(field != null){

 if (field.type == 'text' ||
     field.type == 'textarea' ||
     field.type == 'select-one' ||
     field.type == 'radio') {

	var value = '';
	// get field's value
	if (field.type == "select-one") {
		var si = field.selectedIndex;
		if (si >= 0) {
		    value = field.options[si].value;
		}
	} else {
		value = field.value;
	}

     if (value.length > 0) {
	 // remove '.' before checking digits
	 var tempArray = value.split('.');
	 var joinedString= tempArray.join('');

		    if (!isAllDigits(joinedString)) {
			bValid = false;
			if (i == 0) {
			    focusField = field;
			}
			fields[i++] = oFloat[x][1];

		    } else {
			    var iValue = parseFloat(value);
			    if (isNaN(iValue)) {
				if (i == 0) {
				    focusField = field;
				}
				fields[i++] = oFloat[x][1];
				bValid = false;
			    }
		    }
		}
	    }
			}
}
if (fields.length > 0) {
   focusField.focus();
   alert(fields.join('\n'));
}
return bValid;
}
function setBackground(el)
{
	//alert(el.style.background.indexOf('orange'));
	if(el.style.background == "orange" || el.style.background.indexOf('orange') > -1) el.style.background = "";

}   

function setBackgroundMulti(form,arName)
{
	//
	var field = form[arName];
	if(field.length  && field.length > 0)
	{
		if(field[0].type)
		{
			if(field[0].type == 'checkbox')
			{
				for (c = 0; c < field.length; c++)
				{
					if(field[c].type == 'checkbox')
					{
						if(field[c].style.background == "orange") field[c].style.background = "";
					}
				}
			}
		}
	}	

} 

    function validatePassword(form) {
        var bValid = true;
        var focusField = null;
        var i = 0;
        var fields = new Array();
        oPassword = new PasswordValidations();
        for (x in oPassword) 
        {
        	var field = form[oPassword[x][0]];
        	if(field != null)
        	{
	            if (field.type == 'password')
	            {
					var value = '';
					// get field's value
					value = field.value;
	                if (value.length > 0) 
	                {
	                        
	                    if (!isValidForPassword(value)) 
	                    {
	                        bValid = false;
	                        if (i == 0) 
	                        {
	                            focusField = field;
	                        }
							fields[i++] = oPassword[x][1];
	                        field.style.background = "orange";
							        
	                    } 
	               }
	            }

			}
        }
        if (fields.length > 0) 
        {
           focusField.focus();
           alert(fields.join('\n'));
        }
        return bValid;
    }


    function isValidForPassword(argvalue) {
        argvalue = argvalue.toString();
        var validChars = "#$!_0123456789qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM";
        var startFrom = 0;
                
        for (var n = startFrom; n < argvalue.length; n++) {
            if (validChars.indexOf(argvalue.substring(n, n+1)) == -1) return false;
        }
        return true;
    }
  
