
    /**
    *  Check to see if fields must contain a value.
    * Fields are not checked if they are disabled.
    * <p>
    * @param form The form validation is taking place on.
    */

    function validateRequired(form) {
        var isValid = true;
        var focusField = null;
        var i = 0;
        var fields = new Array();
        var formName = form.getAttributeNode("name");

        oRequired = eval('new ' + formName.value + '_required()');

        for (x in oRequired) {
            var field = form[oRequired[x][0]];

            if ((field.type == 'hidden' ||
                field.type == 'text' ||
                field.type == 'textarea' ||
                field.type == 'file' ||
                field.type == 'checkbox' ||
                field.type == 'select-one' ||
                field.type == 'password') &&
                field.disabled == false) {

                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 (field.type == 'checkbox') {
                    if (field.checked) {
                        value = field.value;
                    }
                } else {
                    value = field.value;
                }

                if (trim(value).length == 0) {

                    if (i == 0) {
                        focusField = field;
                    }
                    fields[i++] = oRequired[x][1];
                    isValid = false;
                }
            } else if (field.type == "select-multiple") { 
                var numOptions = field.options.length;
                lastSelected=-1;
                for(loop=numOptions-1;loop>=0;loop--) {
                    if(field.options[loop].selected) {
                        lastSelected = loop;
                        value = field.options[loop].value;
                        break;
                    }
                }
                if(lastSelected < 0 || trim(value).length == 0) {
                    if(i == 0) {
                        focusField = field;
                    }
                    fields[i++] = oRequired[x][1];
                    isValid=false;
                }
            } else if ((field.length > 0) && (field[0].type == 'radio' || field[0].type == 'checkbox')) {
                isChecked=-1;
                for (loop=0;loop < field.length;loop++) {
                    if (field[loop].checked) {
                        isChecked=loop;
                        break; // only one needs to be checked
                    }
                }
                if (isChecked < 0) {
                    if (i == 0) {
                        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*$/, "" );
    }
    
    
    
    /**
    * A field is considered valid if less than the specified maximum.
    * Fields are not checked if they are disabled.
    * <p>
    * <strong>Caution:</strong> Using <code>validateMaxLength</code> on a password field in a 
    *  login page gives unnecessary information away to hackers. While it only slightly
    *  weakens security, we suggest using it only when modifying a password.</p>
    * @param form The form validation is taking place on.
    */
    function validateMaxLength(form) {
        var isValid = true;
        var focusField = null;
        var i = 0;
        var fields = new Array();
        var formName = form.getAttributeNode("name"); 

        oMaxLength = eval('new ' + formName.value + '_maxlength()');        
        for (x in oMaxLength) {
            var field = form[oMaxLength[x][0]];

            if ((field.type == 'hidden' ||
                field.type == 'text' ||
                field.type == 'password' ||
                field.type == 'textarea') &&
                field.disabled == false) {

                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 validateMinLength(form) {
        var isValid = true;
        var focusField = null;
        var i = 0;
        var fields = new Array();
        var formName = form.getAttributeNode("name"); 

        oMinLength = eval('new ' + formName.value + '_minlength()');        
        for (x in oMinLength) {
            var field = form[oMinLength[x][0]];

            if ((field.type == 'hidden' ||
                field.type == 'text' ||
                field.type == 'password' ||
                field.type == 'textarea') &&
                field.disabled == false) {

                var iMin = parseInt(oMinLength[x][2]("minlength"));
                if (field.value.length < iMin) {
                    if (i == 0) {
                        focusField = field;
                    }
                    fields[i++] = oMinLength[x][1];
                    isValid = false;
                }
            }
        }
        if (fields.length > 0) {
           focusField.focus();
           alert(fields.join('\n'));
        }
        return isValid;
    }
    
    /**
    * Check to see if fields are a valid using a regular expression.
    * Fields are not checked if they are disabled.
    * <p>
    * @param form The form validation is taking place on.
    */
    function validateMask(form) {
        var isValid = true;
        var focusField = null;
        var i = 0;
        var fields = new Array();
        var formName = form.getAttributeNode("name"); 

        oMasked = eval('new ' + formName.value + '_mask()');      
        for (x in oMasked) {
            var field = form[oMasked[x][0]];

            if ((field.type == 'hidden' ||
                field.type == 'text' ||
                 field.type == 'textarea' ||
				 field.type == 'file') &&
                 (field.value.length > 0) &&
                 field.disabled == false) {
				
//				field.value=trimSpace(field.value);
				field.value=trimStr(field.value);
				field.value = trimComma(field.value); // add by Charles
                if (!matchPattern(field.value, oMasked[x][2]("mask"))) {
                    if (i == 0) {
                        focusField = field;
                    }
                    fields[i++] = oMasked[x][1];
                    isValid = false;
                }
            }
        }

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

    function matchPattern(value, mask) {
       return mask.exec(value);
    }
    
    
    /**
    * Check to see if fields are a valid integer.
    * Fields are not checked if they are disabled.
    * <p>
    * @param form The form validation is taking place on.
    */
    function validateInteger(form) {
        var bValid = true;
        var focusField = null;
        var i = 0;
        var fields = new Array();
        var formName = form.getAttributeNode("name"); 

        oInteger = eval('new ' + formName.value + '_IntegerValidations()');
        for (x in oInteger) {
            var field = form[oInteger[x][0]];

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

                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 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;
    }
    
    
    /**
    * Check to see if fields are a valid float.
    * Fields are not checked if they are disabled.
    * <p>
    * @param form The form validation is taking place on.
    */
    function validateFloat(form) {
        var bValid = true;
        var focusField = null;
        var i = 0;
        var fields = new Array();
         var formName = form.getAttributeNode("name");

        oFloat = eval('new ' + formName.value + '_FloatValidations()');
        for (x in oFloat) {
        	var field = form[oFloat[x][0]];
        	
            if ((field.type == 'hidden' ||
                field.type == 'text' ||
                field.type == 'textarea' ||
                field.type == 'select-one' ||
                field.type == 'radio') &&
                field.disabled == false) {
        
            	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('.');
                    //Strip off leading '0'
                    var zeroIndex = 0;
                    var joinedString= tempArray.join('');
                    while (joinedString.charAt(zeroIndex) == '0') {
                        zeroIndex++;
                    }
                    var noZeroString = joinedString.substring(zeroIndex,joinedString.length);

                    if (!isAllDigits(noZeroString)) {
                        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 validateFloatRange(form) {
        var isValid = true;
        var focusField = null;
        var i = 0;
        var fields = new Array();
        var formName = form.getAttributeNode("name"); 

        oRange = eval('new ' + formName.value + '_floatRange()');
        for (x in oRange) {
            var field = form[oRange[x][0]];
            
            if ((field.type == 'hidden' ||
                field.type == 'text' || field.type == 'textarea') &&
                (field.value.length > 0)  &&
                 field.disabled == false) {

								var v = trim(field.value)								
								v = v.replace(/ /g, "");
								v = v.replace(/,/g, "");
								field.value = v;

                var fMin = parseFloat(oRange[x][2]("min"));
                var fMax = parseFloat(oRange[x][2]("max"));
                var fValue = parseFloat(field.value);
                if (!(fValue >= fMin && fValue <= fMax)) {
                    if (i == 0) {
                        focusField = field;
                    }
                    fields[i++] = oRange[x][1];
                    isValid = false;
                }
            }
        }
        if (fields.length > 0) {
            focusField.focus();
            alert(fields.join('\n'));
        }
        return isValid;
    }
    
    
    /**
    * Check to see if fields are a valid email address.
    * Fields are not checked if they are disabled.
    * <p>
    * @param form The form validation is taking place on.
    */
    function validateEmail(form) {
        var bValid = true;
        var focusField = null;
        var i = 0;
        var fields = new Array();
        var formName = form.getAttributeNode("name");


        oEmail = eval('new ' + formName.value + '_email()');

        for (x in oEmail) {
            var field = form[oEmail[x][0]];
            if ((field.type == 'hidden' || 
                 field.type == 'text' ||
                 field.type == 'textarea') &&
                (field.value.length > 0) &&
                field.disabled == false) {
                if (!checkEmail(field.value)) {
                    if (i == 0) {
                        focusField = field;
                    }
                    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 validateRatioAmount(form) {
        var isValid = true;
        var focusField = null;
        var i = 0;
        var fields = new Array();
        var formName = form.getAttributeNode("name"); 

        oRange = eval('new ' + formName.value + '_ratioAmount()');
        for (x in oRange) {
            var field = form[oRange[x][0]];
            
            if ((field.type == 'hidden' ||
                field.type == 'text' || field.type == 'textarea') &&
                (field.value.length > 0)  &&
                 field.disabled == false) {

				var ratiofield=form[oRange[x][2]("ratio")];
				var amountfield=form[oRange[x][2]("amount")];
				
				field.value = trimComma(field.value);
				if (ratiofield==null) {
//					var ratioValue = oRange[x][2]("defaultRatio");
//					amountfield.value=parseFloat(field.value) * parseFloat(ratioValue) / 100;
					if (amountfield.value==null || amountfield.value=='') {
						var ratioValue = oRange[x][2]("defaultRatio");
						amountfield.value=parseFloat(field.value) * parseFloat(ratioValue) / 100;
					}
				} else {

					ratiofield.value = trimComma(ratiofield.value);
					amountfield.value = trimComma(amountfield.value);
				
					var filedValue=parseFloat(field.value);
//alert("ratiofield.value:\t"+ratiofield.value+"\n"+"amountfield.value:\t"+amountfield.value);
					if(ratiofield.value.length > 0 && amountfield.value.length>0) { //prompt msg if two values are not match)	
						var ratioValue=parseFloat(ratiofield.value);
						var amountfieldValue=parseFloat(amountfield.value);
						
//alert("ratiofield.value:\t"+ratioValue+"\n"+"ratioValue:\t"+amountfield.value+"\n");

//alert("calculation value:\t"+(amountfieldValue/filedValue * 100));
//alert("result:\t"+(amountfieldValue/filedValue * 100- ratioValue));
	
						if (Math.abs(amountfieldValue/filedValue * 100 - ratioValue) > 0.01){
						    if (i == 0) {
								focusField = form[oRange[x][2]("ratio")];;
                	    	}                    	
	            	        fields[i++] = oRange[x][1];
    	    	       	    isValid = false;					
						}
						
						if (isValid) {
							amountfieldValue=filedValue*ratioValue/100;
							amountfield.value=Math.round(amountfieldValue * 100) / 100;
						}				
					}
					else if(ratiofield.value.length > 0){
						var ratioValue=parseFloat(ratiofield.value);
						var amountfieldValue=filedValue*ratioValue/100;
						amountfield.value=Math.round(amountfieldValue * 100) / 100;
					}
					else if(amountfield.value.length >0){
						var amountfieldValue=parseFloat(amountfield.value);	
						var ratioValue = (amountfieldValue/filedValue)*100 ;
						ratiofield.value=Math.round(ratioValue * 100) / 100;
						
						var ratioValue=parseFloat(ratiofield.value);
						var amountfieldValue=filedValue*ratioValue/100;
						amountfield.value=Math.round(amountfieldValue * 100) / 100;
					}
					else{  //set two value
						ratiofield.value = oRange[x][2]("defaultRatio");
						amountfield.value=filedValue * parseFloat(ratiofield.value) / 100;
					}

				}

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

    function validateRatioAmount(form) {
        var isValid = true;
        var focusField = null;
        var i = 0;
        var fields = new Array();
        var formName = form.getAttributeNode("name"); 

        oRange = eval('new ' + formName.value + '_ratioAmount()');
        for (x in oRange) {
            var field = form[oRange[x][0]];
            
            if ((field.type == 'hidden' ||
                field.type == 'text' || field.type == 'textarea') &&
                (field.value.length > 0)  &&
                 field.disabled == false) {

				var ratiofield=form[oRange[x][2]("ratio")];
				var amountfield=form[oRange[x][2]("amount")];
				
				field.value = trimComma(field.value);
				
				if (ratiofield==null || amountfield==null) {
					isValid = false;
				} else {
					if (ratiofield.value=='') {
						if (amountfield.value=='') {
							var ratioValue = oRange[x][2]("defaultRatio");
							ratiofield.value=ratioValue;
							amountfield.value=parseFloat(field.value) * parseFloat(ratioValue) / 100;
						} else {
							var amountfieldValue=parseFloat(trimComma(amountfield.value));	
							var ratioValue = (amountfieldValue/parseFloat(field.value))*100 ;
							ratiofield.value=Math.round(ratioValue * 100) / 100;
						}
					} else {
						if (amountfield.value=='') {
							var ratioValue=parseFloat(ratiofield.value);
							var amountfieldValue=parseFloat(field.value)*ratioValue/100;
							amountfield.value=Math.round(amountfieldValue * 100) / 100;
						} else {
							isValid = false;
							ratiofield.focus();
							alert(oRange[x][1]);
						}
					}
				}
            }
        }
        return isValid;
    }
*/

    function validateRatioAmount(form) {
        var isValid = true;
        var focusField = null;
        var i = 0;
        var fields = new Array();
        var formName = form.getAttributeNode("name"); 

        oRange = eval('new ' + formName.value + '_ratioAmount()');
        for (x in oRange) {
            var field = form[oRange[x][0]];
            
            if ((field.type == 'hidden' ||
                field.type == 'text' || field.type == 'textarea') &&
                (field.value.length > 0)  &&
                 field.disabled == false) {

				var amountfield=form[oRange[x][2]("amount")];
				var defaultRatio = oRange[x][2]("defaultRatio");
				
				field.value = trimComma(field.value);
				
				if (amountfield.value=='') {
					amountfield.value=Math.round(parseFloat(field.value) * parseFloat(defaultRatio))/100
				} else {
					var amountfieldValue=parseFloat(trimComma(amountfield.value));	
					var ratioValue = (amountfieldValue/parseFloat(field.value))*100 ;
					if (ratioValue > parseFloat(defaultRatio)) {
						alert(oRange[x][1]+parseFloat(field.value) * parseFloat(defaultRatio) / 100);
						return false;
					}
				}
        	}
        }
		return true;
    }

    function validateCompareMaxValue(form) {
        var isValid = true;
        var focusField = null;
        var i = 0;
        var fields = new Array();
        var formName = form.getAttributeNode("name"); 

        oRange = eval('new ' + formName.value + '_compareMaxValue()');
        for (x in oRange) {
            var field = form[oRange[x][0]];
            
            if ((field.type == 'hidden' ||
                field.type == 'text' || field.type == 'textarea') &&
                (field.value.length > 0)  &&
                 field.disabled == false) {

				field.value = trimComma(field.value);
				
				var fMaxValue;
				
				if(oRange[x][2]("compare")!=null){
					var compfield=form[oRange[x][2]("compare")];								
					var ratiofield=1.0;
					if(oRange[x][2]("maxratio")!=null){
						ratiofield=parseFloat(oRange[x][2]("maxratio"));
					}					
					var maxfield=parseFloat(oRange[x][2]("max"));
						
					var y= trim(compfield.value)								
					y = y.replace(/ /g, "");
					y = y.replace(/,/g, "");
					compfield.value = y;				
					
	                fMaxValue = getMaxValue(compfield.value,maxfield,ratiofield);
                }
                else{
                	fMaxValue = parseFloat(oRange[x][2]("max"));
                }
                var fValue = parseFloat(field.value);
                if (!(fMaxValue>=fValue)) {
                    if (i == 0) {
                        focusField = field;
                    }
                    fields[i++] = oRange[x][1] + " " + formatCurrency(fMaxValue) + "!";
                    isValid = false;
                }
            }
        }
        if (fields.length > 0) {
            focusField.focus();
            alert(fields.join('\n'));
        }
        return isValid;
    }
  
      function validateCompareMinValue(form) {
        var isValid = true;
        var focusField = null;
        var i = 0;
        var fields = new Array();
        var formName = form.getAttributeNode("name"); 

        oRange = eval('new ' + formName.value + '_compareMinValue()');
        for (x in oRange) {
            var field = form[oRange[x][0]];
            
            if ((field.type == 'hidden' ||
                field.type == 'text' || field.type == 'textarea') &&
                (field.value.length > 0)  &&
                 field.disabled == false) {
				
				field.value = trimComma(field.value);
				
                var fMinValue = parseFloat(oRange[x][2]("min"));
                var fValue = parseFloat(field.value);
                //alert('fCompare:' + fCompareValue + ' ' + 'fValue:' + fValue);
                if (!(fMinValue<=fValue)) {
                    if (i == 0) {
                        focusField = field;
                    }
                    fields[i++] = oRange[x][1] + " " + formatCurrency(fMinValue) + "!";
                    isValid = false;
                }
            }
        }
        if (fields.length > 0) {
            focusField.focus();
            alert(fields.join('\n'));
        }
        return isValid;
    }
  
    
    function getMaxValue(v,maxfield,ratio){
		var _max;
		if (parseFloat(v) * ratio < maxfield)
		{
			_max = Math.round(parseFloat(v) * ratio * 100)/100
		}
		else
		{
			_max = maxfield
		}
		return _max
    }    
        
        
    function validateRequireOther(form) {
        var isValid = true;
        var focusField = null;
        var i = 0;
        var fields = new Array();
        var formName = form.getAttributeNode("name"); 

        oRange = eval('new ' + formName.value + '_requireOther()');
        for (x in oRange) {
            var field = form[oRange[x][0]];
            
            if ((field.type == 'hidden' ||field.type == 'text' || field.type == 'textarea' ||field.type == 'select-one')  &&
                 field.disabled == false) {              
                
                var otherField = form[oRange[x][2]("other")];
                
                if(trimStr(otherField.value).length != 0){
                   if(trimStr(field.value).length == 0){
	                    if (i == 0) {
	                        focusField = field;
	                    }
	                    fields[i++] = oRange[x][1];
	                    isValid = false;                   
                   }
                }
            }
        }
        if (fields.length > 0) {
            focusField.focus();
            alert(fields.join('\n'));
        }
        return isValid;
    }
    
    
    function validateSum(form) {
        var isValid = true;
        var focusField = null;
        var i = 0;
        var fields = new Array();
        var formName = form.getAttributeNode("name"); 

        oRange = eval('new ' + formName.value + '_sum()');
        for (x in oRange) {
            var field = form[oRange[x][0]];
            
            if ((field.type == 'hidden' ||
                field.type == 'text' || field.type == 'textarea') &&
                (field.value.length > 0)  &&
                 field.disabled == false) {

				field.value = trimComma(field.value);				
				var field2 =form[oRange[x][2]("sumField")];
				var fValue2 = null;
				if(!(field2.value.length > 0)){
					fValue2=0;
				}
				else{
					fValue2=parseFloat(field2.value); 
				}
				var fSumMax = parseFloat(oRange[x][2]("sumMax"));               
                var fValue = parseFloat(field.value);     
                
                if (!((fValue+fValue2)<=fSumMax)) {
                    if (i == 0) {
                        focusField = field;
                    }
                    fields[i++] = oRange[x][1] + oRange[x][2]("sumMax") + '!';
                    isValid = false;
                }
            }
        }
        if (fields.length > 0) {
            focusField.focus();
            alert(fields.join('\n'));
        }
        return isValid;
    }
    
    function validateRequireMultiple(form) {
        var isValid = false;
        var focusField = null;
        var fields = new Array();
        var formName = form.getAttributeNode("name"); 
        var itemEntered = 0;

        oRange = eval('new ' + formName.value + '_requireMultiple()');

        for (x in oRange) {
        	isValid = false;
        	itemEntered = 0;
            var field = form[oRange[x][0]];
            
            if ((field.type == 'hidden' ||field.type == 'text' || field.type == 'textarea')  &&
                 field.disabled == false) {              
                
				var numOfRequire = oRange[x][2]("requiredField");
				var numOfTotal = oRange[x][2]("totalField");
				var requireMultiCond = oRange[x][2]("requireMultiCond");
				var checkItem = null;
				
				if (numOfRequire!=null && numOfRequire.length!=0 && numOfTotal!=null && numOfTotal.length!=0) {
					var itemRequire = parseInt(numOfRequire);
					var itemTotal = parseInt(numOfTotal);
					if (!isNaN(eval(itemRequire)) && !isNaN(eval(itemTotal))) {
						for (var i = 0;i<itemTotal;i++) {
							checkItem = null;
							if (i==0) {
								checkItem = field;
							} else {
								if (oRange[x][2]("other"+i)!=null) {
									checkItem = form[oRange[x][2]("other"+i)];
								}
							}
							if (checkItem!=null && checkItem.value!=null && trimStr(checkItem.value).length!=0) {
								itemEntered++;
							} else {
								checkItem.focus();
							}
						}
						
						if (requireMultiCond!=null && requireMultiCond == 'least') {
							if (itemEntered >= itemRequire) {
								isValid = true;
							} else {
								alert(oRange[x][1]);
								return false;
							}
						} else if (requireMultiCond!=null && requireMultiCond == 'most') {
							if (itemEntered <= itemRequire) {
								isValid = true;
							} else {
								alert(oRange[x][1]);
								return false;
							}
						} else {
							if (itemEntered == itemRequire) {
								isValid = true;
							} else {
								alert(oRange[x][1]);
								return false;
							}
						}
					}
				}
			}
		}
		return isValid;
	}
    
    function validateCheckBoxRequireOther(form) {
        var isValid = true;
        var focusField = null;
        var i = 0;
        var fields = new Array();
        var formName = form.getAttributeNode("name"); 

        oRange = eval('new ' + formName.value + '_checkBoxRequireOther()');
        for (x in oRange) {
            var field = form[oRange[x][0]];
            
            if ((field.type == 'checkbox')  &&
                 field.disabled == false) {              
                
                var otherField = form[oRange[x][2]("other")];

                if(trimStr(otherField.value).length == 0){
                   if(field.checked){
	                    if (i == 0) {
	                        focusField = field;
	                    }
	                    fields[i++] = oRange[x][1];
	                    isValid = false;                   
                   }
                }
            }
        }
        if (fields.length > 0) {
            focusField.focus();
            alert(fields.join('\n'));
        }
        return isValid;
    }
    
        function validateRequireOthers(form) {
        var isValid = true;
        var focusField = null;
        var fields = new Array();
        var formName = form.getAttributeNode("name"); 
        var itemEntered = 0;
        var alertMsg = '';

        oRange = eval('new ' + formName.value + '_requireOthers()');
        
        for (x in oRange) {
            var field = form[oRange[x][0]];
            
            if ((field.type == 'hidden' ||field.type == 'text' || field.type == 'textarea' || field.type == 'select-one')  &&
                 field.disabled == false) {
                 
                if (field.value!=null && trimStr(field.value)!= '') {
					var numOfRequire = oRange[x][2]("numOfRequire");
					var numOfOthers = oRange[x][2]("numOfOthers");
					var checkItem = null;
				
					if (numOfRequire!=null && numOfRequire.length!=0 && numOfOthers!=null && numOfOthers.length!=0) {
						var itemRequire = parseInt(numOfRequire);
						var itemTotal = parseInt(numOfOthers);
						if (!isNaN(eval(itemRequire)) && !isNaN(eval(itemTotal))) {
							for (var i = 0;i<=itemTotal;i++) {
								checkItem = null;
								if (oRange[x][2]("other"+i)!=null) {
									checkItem = form[oRange[x][2]("other"+i)];
									if (checkItem!=null && checkItem.value!=null && trimStr(checkItem.value).length!=0) {
										itemEntered++;
									} else {
										if (checkItem.disabled == false) {
											checkItem.focus();
										}
									}
								}
							}
							if (itemEntered != itemRequire) {
								isValid = false;
								if (alertMsg=='') {
									alertMsg = oRange[x][1];
								} else {
									alertMsg = alertMsg + '\n\n' + oRange[x][1];
								}
							}
							itemEntered = 0;
						}
					}
                }
			}
		}
		if (!isValid) alert(alertMsg);
		return isValid;
	}
    
        function validateLatinChar(form) {
        var isValid = true;
        var fields = new Array();
        var formName = form.getAttributeNode("name"); 
        var alertMsg = '';

        oRange = eval('new ' + formName.value + '_latinChar()');
        
        for (x in oRange) {
            var field = form[oRange[x][0]];
            
            if ((field.type == 'hidden' ||field.type == 'text' || field.type == 'textarea')  && 
            	field.disabled == false) {
                 
                if (field.value!=null && trimStr(field.value)!= '') {
                	for(var i=0; i<field.value.length; i++) {
						var code = field.value.charCodeAt(i)
						if ((code < 65 || code > 128) && code!=32 && code!=8220 && code!=8221 && code!=8217) {
							isValid = false;
							if (alertMsg=='') {
								alertMsg = oRange[x][1];
							} else {
								alertMsg = alertMsg + '\n' + oRange[x][1];
							}
							field.focus();
							break;
						}
                	}
                }
			}
		}
		if (isValid) {
			return true;
		} else {
			alert(alertMsg);
			return false;
		}
	}
    
    /**
    * A field is considered valid if less than the specified maximum.
    * Fields are not checked if they are disabled.
    * <p>
    * <strong>Caution:</strong> Using <code>validateMaxLength</code> on a password field in a 
    *  login page gives unnecessary information away to hackers. While it only slightly
    *  weakens security, we suggest using it only when modifying a password.</p>
    * @param form The form validation is taking place on.
    */
    function validateStrMaxLength(form) {
        var isValid = true;
        var focusField = null;
        var i = 0;
        var fields = new Array();
        var formName = form.getAttributeNode("name"); 
		
        oMaxLength = eval('new ' + formName.value + '_strMaxLength()');        
        for (x in oMaxLength) {
            var field = form[oMaxLength[x][0]];

            if ((field.type == 'hidden' ||
                field.type == 'text' ||
                field.type == 'password' ||
                field.type == 'textarea') &&
                field.disabled == false) {
                var iMax = parseInt(oMaxLength[x][2]("maxlength"));

                if (countLen(field.value) > 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 countLen(ip_string)
	{
		charcount = 0;
		chicharcount = 0;
		while ((letter=ip_string.charAt(charcount))!="")
		{
			charcount += 1;
			if ((escape(letter).substring(1,3)) > '7F')
				chicharcount += 2;
		}
		return (charcount+chicharcount);
	}
    function validateNumEngChar(form) {
        var isValid = true;
        var fields = new Array();
        var formName = form.getAttributeNode("name"); 
        var alertMsg = '';

        oRange = eval('new ' + formName.value + '_numEngChar()');
        
        for (x in oRange) {
            var field = form[oRange[x][0]];
            
            if ((field.type == 'hidden' ||field.type == 'text' || field.type == 'textarea')  && 
            	field.disabled == false) {
                 
                if (field.value!=null && trimStr(field.value)!= '') {
                	for(var i=0; i<field.value.length; i++) {
						var code = field.value.charCodeAt(i);
						if (!((code >=48 && code <=57) || (code >=65 && code <=90) || (code >=97 && code <=122))) {
							alert(oRange[x][1]);
							field.focus();
							return false;
						}
                	}
                }
			}
		}
		return true;
	}
	
    /**
     * Check whether it's ASCII code >=32 and <= 126  
     * 
     * @param form
     * @return
     */
    function validatePrintChar(form) {
        var isValid = true;
        var focusField = null;
        var fields = new Array();        
        var i = 0;
        var formName = form.getAttributeNode("name");         

        oRange = eval('new ' + formName.value + '_printChar()');
        
        for (x in oRange) {
            var field = form[oRange[x][0]];
            
            if ((field.type == 'hidden' 
            	|| field.type == 'text' 
            	|| field.type == 'textarea'
            	|| field.type == 'password')  && 
            	field.disabled == false) {
                 
                if (field.value!=null && trimStr(field.value)!= '') {
                	for(var i=0; i<field.value.length; i++) {
						var code = field.value.charCodeAt(i);
						if (!(code >=32 && code <=126)) {
							if (i == 0) {
		                        focusField = field;
		                    }
							fields[i++] = oRange[x][1];
		                    isValid = false;
						}
                	}
                }
			}
		}        
        if (!isValid) {
            focusField.focus();
            alert(fields.join('\n'));	
         }        
		return isValid;
	}
    
    function validateFieldsSum(form) {
        var isValid = false;
        var focusField = null;
        var fields = new Array();
        var formName = form.getAttributeNode("name"); 

        oRange = eval('new ' + formName.value + '_fieldsSum()');

        for (x in oRange) {
            var field = form[oRange[x][0]];
            
            if ((field.type == 'hidden' ||field.type == 'text' || field.type == 'textarea')  &&
                 field.disabled == false) {            
				
				var numOfFields = oRange[x][2]("totalSumFields");
				var minOrMax = oRange[x][2]("sumChkOpt");
				var sumVal = oRange[x][2]("sumChkVal");
				var checkField = null;
				
				if (numOfFields!=null && numOfFields.length!=0) {
					var fieldsTotal = parseInt(numOfFields);
					var chkSum = parseFloat(sumVal);
					if (!isNaN(eval(fieldsTotal)) && !isNaN(eval(chkSum)) && (minOrMax=="min" || minOrMax=="max")) {
						var sumOfFields = 0;
						for (var i = 0;i<fieldsTotal;i++) {
							checkField = null;
							if (i==0) {
								checkField = field;
							} else {
								if (oRange[x][2]("sumField"+i)!=null) {
									checkField = form[oRange[x][2]("sumField"+i)];
								}
							}
							if (checkField!=null && checkField.value!=null) {
								var checkFieldVal = parseFloat(checkField.value);
								if (!isNaN(eval(fieldsTotal))) {
									sumOfFields = sumOfFields + checkFieldVal;
								}
							}
						}
						if (minOrMax=="min") {
							if (sumOfFields >= sumVal) {
								isValid = true;
							}
						} else if (minOrMax=="max") {
							if (sumOfFields <= sumVal) {
								isValid = true;
							}
						}
					}
				}
			}
		}
		if (isValid) {
			return true;
		} else {
			alert(oRange[x][1]);
			return false;
		}
	}
	
	/*
    function validateExcludeOtherRange(form) {
        var focusField = null;
        var fields = new Array();
        var formName = form.getAttributeNode("name"); 

        oRange = eval('new ' + formName.value + '_excludeOtherRange()');
        for (x in oRange) {
            var field = form[oRange[x][0]];
			var aciveCode = oRange[x][2]("activeCode");
            
            if ((field.type == 'hidden' ||field.type == 'text' || field.type == 'textarea' ||field.type == 'select-one')  &&
                 field.disabled == false) {
                 
				if (field.value!=null && trimStr(field.value).length != 0 && field.value==aciveCode) {
	                var chkField = form[oRange[x][2]("excludeOther")];
    	            var minVal = parseFloat(oRange[x][2]("excludeMin"));
        	        var maxVal = parseFloat(oRange[x][2]("excludeMax"));
        	        
            	    if(chkField.value!=null && trimStr(chkField.value).length != 0){
                		var chkVal = parseFloat(chkField.value);
                		if (!isNaN(eval(chkVal))) {
                			if (chkVal >= minVal && chkVal <= maxVal) {
	                			alert(oRange[x][1]);
                				return false;
                			}
	                	}
    	            }
				}
            }
        }
        return true;
    }
    */
    
    function validateExcludeOtherRange(form) {
        var focusField = null;
        var fields = new Array();
        var formName = form.getAttributeNode("name"); 

        oRange = eval('new ' + formName.value + '_excludeOtherRange()');
        for (x in oRange) {
            var field = form[oRange[x][0]];
            
            if ((field.type == 'hidden' ||field.type == 'text' || field.type == 'textarea' ||field.type == 'select-one')  &&
                 field.disabled == false) {
                 
				if (field.value!=null && trimStr(field.value).length != 0) {
				
					var baseField = form[oRange[x][2]("excludeBaseField")];
					var baseActiveVal = oRange[x][2]("excludeBaseActive");
					var condition = oRange[x][2]("excludeCondition");
					var amountBaseField = form[oRange[x][2]("excludeAmountBaseField")];
    	            var minVal = parseFloat(oRange[x][2]("excludeMin"));
        	        var maxVal = parseFloat(oRange[x][2]("excludeMax"));
        	        
        	        if (baseField.value!=null && trimStr(baseField.value).length!=0 && trimStr(baseField.value)==baseActiveVal) {
        	        	var chkVal = parseFloat(field.value);
        	        	if (condition == "amount") {
        	        		var baseVal = parseFloat(amountBaseField.value);
        	        		if (!isNaN(eval(chkVal)) && !isNaN(eval(baseVal))) {
        	        			chkVal = chkVal / baseVal * 100;
        	        		}
        	        	}
        	        	
                		if (!isNaN(eval(chkVal))) {
   	            			if (chkVal > minVal && chkVal <= maxVal) {
    	            			alert(oRange[x][1]);
           	    				return false;
               				}
                		}
        	        }
				}
            }
        }
        return true;
    }
    
    function validateCompareMaxRatio(form) {
        var focusField = null;
        var i = 0;
        var fields = new Array();
        var formName = form.getAttributeNode("name"); 

        oRange = eval('new ' + formName.value + '_compareMaxRatio()');
        for (x in oRange) {
            var field = form[oRange[x][0]];
            var factor = form[oRange[x][2]("factor")];
            
            if ((field.type == 'hidden' ||
                field.type == 'text' ||
                field.type == 'password' ||
                field.type == 'textarea') &&
                field.disabled == false) {
                
                if (field.value!=null && trim(field.value)!='' && factor.value!=null && trim(factor.value)!='') {
    	            var maxRatio = parseFloat(oRange[x][2]("maxRatio"));
    	            
    	            var tmpVal = trim(field.value);
    	            tmpVal = tmpVal.replace(/ /g, "");
    	            tmpVal = tmpVal.replace(/,/g, "");
    	            field.value = tmpVal
    	            
    	            tmpVal = trim(factor.value);
    	            tmpVal = tmpVal.replace(/ /g, "");
    	            tmpVal = tmpVal.replace(/,/g, "");
    	            factor.value = tmpVal;

					/*    	                	          
    	            var maxVal = Math.round(parseFloat(factor.value) * maxRatio) /100;
    	            if (parseFloat(field.value) > maxVal) {
    	            	alert(oRange[x][1] + " " + formatCurrency(maxVal));
    	            	return false;
    	            }
					*/
    	            
    	            /*
    	            var chkRatio = Math.round(parseFloat(field.value)/parseFloat(factor.value)*100*100)/100;
    	            
    	            if (chkRatio > maxRatio) {
    	            	//alert(oRange[x][1] + " " + Math.round((parseFloat(factor.value) * maxRatio / 100)*100)/100);
    	            	alert(oRange[x][1] + " " + (parseFloat(factor.value) * maxRatio / 100));
    	            	field.focus();
    	            	return false;
    	            }
    	            */
    	            
    	            /*
    	            if (parseFloat(field.value)/parseFloat(factor.value)*100 > maxRatio) {
    	            	maxVal = Math.round(parseFloat(factor.value) * maxRatio) /100;
    	            	alert(oRange[x][1] + " " + maxVal);
    	            	field.focus();
    	            	return false;
    	            }
    	            */
    	            
    	            if (parseFloat(field.value)/parseFloat(factor.value)*100 > maxRatio) {
    	            	//maxVal = parseInt(parseFloat(factor.value) * maxRatio) /100;
    	            	maxVal = Math.floor(parseFloat(factor.value) * maxRatio) /100;
    	            	alert(oRange[x][1] + " " + maxVal);
    	            	field.focus();
    	            	return false;
    	            }
    	            
				}
            }
        }
        return true;
    }
    
    function validateCompareMinWithOther(form) {
        var focusField = null;
        var i = 0;
        var fields = new Array();
        var formName = form.getAttributeNode("name"); 
        
        oRange = eval('new ' + formName.value + '_compareMinWithOther()');
        for (x in oRange) {
            var field = form[oRange[x][0]];

            if ((field.type == 'hidden' ||
                field.type == 'text' ||
                field.type == 'password' ||
                field.type == 'textarea') &&
                field.disabled == false) {
                
                if (field.value!=null && trim(field.value)!='') {
                	var relatedFieldVal = form[oRange[x][2]("cmoRelField")].value;
                	var numOfChk = parseInt(oRange[x][2]("cmoTotalInChk"));
                	var defaultMinVal =  parseFloat(oRange[x][2]("cmoMinValDefault"));
                	
                	if (!isNaN(eval(numOfChk)) && !isNaN(eval(defaultMinVal))) {
                		for (var i=1;i<=numOfChk;i++) {
                			var chkRelVal = null;
                			var chkMinVal = null;
							if (oRange[x][2]("cmoRelVal"+i)!=null && oRange[x][2]("cmoMinVal"+i)!=null) {
								chkRelVal = oRange[x][2]("cmoRelVal"+i);
								chkMinVal = parseFloat(oRange[x][2]("cmoMinVal"+i));
								if (relatedFieldVal == chkRelVal) {
									if (!isNaN(eval(chkMinVal))) {
										if (parseFloat(field.value) >=  chkMinVal) {
											return true;
										} else {
											alert(oRange[x][1] + " " + formatCurrency(chkMinVal));
											return false;
										}
									} else {
										alert(oRange[x][1] + " " + formatCurrency(chkMinVal));
										return false;
									}
								}
							}
                		}
                		if (parseFloat(field.value) >=  defaultMinVal) {
                			return true;
                		} else {
							alert(oRange[x][1] + " " + formatCurrency(defaultMinVal));
							return false;
                		}
                	}
				}
            }
        }
        return false;
    }
    
    function validateChkAlphaNum(form) {
        var isValid = true;
        var fields = new Array();
        var formName = form.getAttributeNode("name"); 
        var alertMsg = '';

        oRange = eval('new ' + formName.value + '_chkAlphaNum()');
        
        for (x in oRange) {
            var field = form[oRange[x][0]];
            
            if ((field.type == 'hidden' ||field.type == 'text' || field.type == 'textarea')  && 
            	field.disabled == false) {
                 
                if (field.value!=null && trimStr(field.value)!= '') {
                	var langValFieldNm = oRange[x][2]("canLangField");
                	var langVal = null;
                	if (langValFieldNm!=null && trimStr(langValFieldNm)!='') {
                		var langValField = form[langValFieldNm];
                		if (langValField!=null) langVal= langValField.value;                	
                	}
                	var chkLang=oRange[x][2]("canChkLang");
                	
                	if (chkLang==null || (chkLang!=null && langVal!=null && chkLang==langVal)) {
	                	for(var i=0; i<field.value.length; i++) {
    	            		var ch = field.value.charAt(i);
        	        		if(!(ch>=' ' && ch<='z') && ch!='\n' && ch!='\r')  {
								isValid = false;
								if (alertMsg=='') {
									alertMsg = oRange[x][1];
								} else {
									alertMsg = alertMsg + '\n' + oRange[x][1];
								}
								//field.focus();
								break;
            	    		}
                		}
                	}
                }
			}
		}
		if (isValid) {
			return true;
		} else {
			alert(alertMsg);
			return false;
		}
    }
    
    function validateMatch(form) {
        var isValid = true;
        var focusField = null;
        var fields = new Array();
        var formName = form.getAttributeNode("name"); 
        var alertMsg = '';
        
        oRange = eval('new ' + formName.value + '_match()');
        for (x in oRange) {
            var field = form[oRange[x][0]];

            if ((field.type == 'hidden' ||
                field.type == 'text' ||
                field.type == 'password' ||
                field.type == 'textarea') &&
                field.disabled == false) {
                
                if (field.value!=null && trim(field.value)!='') {
                	var matchVal = form[oRange[x][2]("matchField")].value;
                	
                	if (field.value != matchVal) {
                		isValid = false;
						if (alertMsg=='') {
							alertMsg = oRange[x][1];
						} else {
							alertMsg = alertMsg + '\n' + oRange[x][1];
						}
                	}
				}
            }
        }
		if (isValid) {
			return true;
		} else {
			alert(alertMsg);
			return false;
		}
    }
       
    function trimComma(value){
    	var v = trim(value);								
		v = v.replace(/ /g, "");
		v = v.replace(/,/g, "");
		return v;
    }
    
    function formatCurrency(value)
	{
		var strValue =  "" + value;
		var i = strValue.indexOf('.');
		var strDisplay = "";
		if (i < 0)
			i=strValue.length;
		else
			strDisplay = strValue.substring(i,strValue.length);
		for(i=i-3;i>0;i-=3)
		{
			strDisplay = "," + strValue.substring(i,i+3) + strDisplay;
		}
		strDisplay = strValue.substring(0,i+3) + strDisplay;
		return strDisplay;
	}
	
	// Trim whitespace from left and right sides of s.
    function trimStr(s) {
        return s.replace( /^\s*/, "" ).replace( /\s*$/, "" );
    }
    
    function trimSpace(s) {
		s= s.replace(/ /g, "");
		return s;
    }
  
