/**
* Check to see if fields are in a valid float range.
* Fields are not checked if they are disabled.
* <p>
* @param form The form validation is taking place on.
*/
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 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;
}

/*$RCSfile: staticJavascript.jsp,v $ $Revision: 1.8 $ $Date: 2005/03/30 05:48:38 $ */

/**
* This is a place holder for common utilities used across the javascript validation
*
**/


/*$RCSfile: staticJavascript.jsp,v $ $Revision: 1.8 $ $Date: 2005/03/30 05:48:38 $ */
/**
* Check to see if fields are a valid byte.
* Fields are not checked if they are disabled.
* <p>
* @param form The form validation is taking place on.
*/
function validateByte(form) {
    var bValid = true;
    var focusField = null;
    var i = 0;
    var fields = new Array();
    var formName = form.getAttributeNode("name"); 
    oByte = eval('new ' + formName.value + '_ByteValidations()');

    for (x in oByte) {
        var field = form[oByte[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++] = oByte[x][1];

                } else {

                    var iValue = parseInt(value);
                    if (isNaN(iValue) || !(iValue >= -128 && iValue <= 127)) {
                        if (i == 0) {
                            focusField = field;
                        }
                        fields[i++] = oByte[x][1];
                        bValid = false;
                    }
                }
            }
        }
    }
    if (fields.length > 0) {
       focusField.focus();
       alert(fields.join('\n'));
    }
    return bValid;
}


/*$RCSfile: staticJavascript.jsp,v $ $Revision: 1.8 $ $Date: 2005/03/30 05:48:38 $ */
/**
* 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;
}


/*$RCSfile: staticJavascript.jsp,v $ $Revision: 1.8 $ $Date: 2005/03/30 05:48:38 $ */
/**
*  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  && form[oRequired[x][0]].type != 'hidden') {
                    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(!isValid){
          break;
        }
    }
    if (fields.length > 0) {
        if(focusField != null) 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*$/, "" );
}


/*$RCSfile: staticJavascript.jsp,v $ $Revision: 1.8 $ $Date: 2005/03/30 05:48:38 $ */
/**
* 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;
}


/*$RCSfile: staticJavascript.jsp,v $ $Revision: 1.8 $ $Date: 2005/03/30 05:48:38 $ */
/**
* Check to see if fields are a valid creditcard number based on Luhn checksum.
* Fields are not checked if they are disabled.
* <p>
* @param form The form validation is taking place on.
*/
function validateCreditCard(form) {
    var bValid = true;
    var focusField = null;
    var i = 0;
    var fields = new Array();
    var formName = form.getAttributeNode("name");

    oCreditCard = eval('new ' + formName.value + '_creditCard()');

    for (x in oCreditCard) {
        if ((form[oCreditCard[x][0]].type == 'text' ||
             form[oCreditCard[x][0]].type == 'textarea') &&
            (form[oCreditCard[x][0]].value.length > 0)  &&
             form[oCreditCard[x][0]].disabled == false) {
            if (!luhnCheck(form[oCreditCard[x][0]].value)) {
                if (i == 0) {
                    focusField = form[oCreditCard[x][0]];
                }
                fields[i++] = oCreditCard[x][1];
                bValid = false;
            }
        }
    }
    if (fields.length > 0) {
        focusField.focus();
        alert(fields.join('\n'));
    }
    return bValid;
}

/**
 * Checks whether a given credit card number has a valid Luhn checksum.
 * This allows you to spot most randomly made-up or garbled credit card numbers immediately.
 * Reference: http://www.speech.cs.cmu.edu/~sburke/pub/luhn_lib.html
 */
function luhnCheck(cardNumber) {
    if (isLuhnNum(cardNumber)) {
        var no_digit = cardNumber.length;
        var oddoeven = no_digit & 1;
        var sum = 0;
        for (var count = 0; count < no_digit; count++) {
            var digit = parseInt(cardNumber.charAt(count));
            if (!((count & 1) ^ oddoeven)) {
                digit *= 2;
                if (digit > 9) digit -= 9;
            };
            sum += digit;
        };
        if (sum == 0) return false;
        if (sum % 10 == 0) return true;
    };
    return false;
}

function isLuhnNum(argvalue) {
    argvalue = argvalue.toString();
    if (argvalue.length == 0) {
        return false;
    }
    for (var n = 0; n < argvalue.length; n++) {
        if ((argvalue.substring(n, n+1) < "0") ||
            (argvalue.substring(n,n+1) > "9")) {
            return false;
        }
    }
    return true;
}


/*$RCSfile: staticJavascript.jsp,v $ $Revision: 1.8 $ $Date: 2005/03/30 05:48:38 $ */
/**
* Check to see if fields are a valid date.
* Fields are not checked if they are disabled.
* <p>
* @param form The form validation is taking place on.
*/
function validateDate(form) {
   var bValid = true;
   var focusField = null;
   var i = 0;
   var fields = new Array();
   var formName = form.getAttributeNode("name"); 

   oDate = eval('new ' + formName.value + '_DateValidations()');

   for (x in oDate) {
       var field = form[oDate[x][0]];
       var value = field.value;
       var datePattern = oDate[x][2]("datePatternStrict");
       // try loose pattern
       if (datePattern == null)
           datePattern = oDate[x][2]("datePattern");
       if ((field.type == 'hidden' ||
            field.type == 'text' ||
            field.type == 'textarea') &&
           (value.length > 0) && (datePattern.length > 0) &&
            field.disabled == false) {
             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 = field;
                       }
                       fields[i++] = oDate[x][1];
                       bValid =  false;
                    }
                 } else {
                    if (i == 0) {
                        focusField = field;
                    }
                    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 = field;
                         }
                         fields[i++] = oDate[x][1];
                         bValid =  false;
                      }
                 } else {
                     if (i == 0) {
                         focusField = field;
                     }
                     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 = field;
                         }
                         fields[i++] = oDate[x][1];
                         bValid =  false;
                     }
                 } else {
                      if (i == 0) {
                          focusField = field;
                      }
                      fields[i++] = oDate[x][1];
                      bValid =  false;
                 }
             } else {
                 if (i == 0) {
                     focusField = field;
                 }
                 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;
}


/*$RCSfile: staticJavascript.jsp,v $ $Revision: 1.8 $ $Date: 2005/03/30 05:48:38 $ */
/**
* Check to see if fields is in a valid integer range.
* Fields are not checked if they are disabled.
* <p>
* @param form The form validation is taking place on.
*/
function validateIntRange(form) {
    var isValid = true;
    var focusField = null;
    var i = 0;
    var fields = new Array();
    var formName = form.getAttributeNode("name"); 

    oRange = eval('new ' + formName.value + '_intRange()');        
    for (x in oRange) {
        var field = form[oRange[x][0]];
        if (field.disabled == false)  {
            var value = '';
            if (field.type == 'hidden' ||
                field.type == 'text' || field.type == 'textarea' ||
                field.type == 'radio' ) {
                value = field.value;
            }
            if (field.type == 'select-one') {
                var si = field.selectedIndex;
                if (si >= 0) {
                    value = field.options[si].value;
                }
            }
            if (value.length > 0) {
                var iMin = parseInt(oRange[x][2]("min"));
                var iMax = parseInt(oRange[x][2]("max"));
                var iValue = parseInt(value);
                if (!(iValue >= iMin && iValue <= iMax)) {
                    if (i == 0) {
                        focusField = field;
                    }
                    fields[i++] = oRange[x][1];
                    isValid = false;
                }
            }
        }
    }
    if (fields.length > 0) {
        focusField.focus();
        alert(fields.join('\n'));
    }
    return isValid;
}


/*$RCSfile: staticJavascript.jsp,v $ $Revision: 1.8 $ $Date: 2005/03/30 05:48:38 $ */
/**
*  Check to see if fields are a valid short.
* Fields are not checked if they are disabled.
* <p>
* @param form The form validation is taking place on.
*/
function validateShort(form) {
    var bValid = true;
    var focusField = null;
    var i = 0;
    var fields = new Array();
    var formName = form.getAttributeNode("name");

    oShort = eval('new ' + formName.value + '_ShortValidations()');

    for (x in oShort) {
        var field = form[oShort[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++] = oShort[x][1];

                } else {

                    var iValue = parseInt(value);
                    if (isNaN(iValue) || !(iValue >= -32768 && iValue <= 32767)) {
                        if (i == 0) {
                            focusField = field;
                        }
                        fields[i++] = oShort[x][1];
                        bValid = false;
                    }
               }
           }
        }
    }
    if (fields.length > 0) {
       focusField.focus();
       alert(fields.join('\n'));
    }
    return bValid;
}


/*$RCSfile: staticJavascript.jsp,v $ $Revision: 1.8 $ $Date: 2005/03/30 05:48:38 $ */
/**
* 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;
}


/*$RCSfile: staticJavascript.jsp,v $ $Revision: 1.8 $ $Date: 2005/03/30 05:48:38 $ */
/**
* 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 && form[oEmail[x][0]].type != 'hidden') {
                    focusField = field;
                }
                fields[i++] = oEmail[x][1];
                bValid = false;
            }
        }
    }
    if (fields.length > 0) {
        if(focusField != null) 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;
}


/*$RCSfile: staticJavascript.jsp,v $ $Revision: 1.8 $ $Date: 2005/03/30 05:48:38 $ */
/**
* 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) {

            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);
}


/*$RCSfile: staticJavascript.jsp,v $ $Revision: 1.8 $ $Date: 2005/03/30 05:48:38 $ */
/**
* A field is considered valid if greater than the specified minimum.
* Fields are not checked if they are disabled.
* <p>
* <strong>Caution:</strong> Using <code>validateMinLength</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 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 ((trim(field.value).length > 0) && (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;
}

/**
*------------------------------------------------------------------------------------
*/

function validateKorean(form) {
    var bValid = true;
    var focusField = null;
    var i = 0;
    var fields = new Array();     
    var formName = form.getAttributeNode("name");
    
    oKor = eval('new ' + formName.value + '_korean()');      

    for (x in oKor) {
        if ((form[oKor[x][0]].type == 'text' ||
            form[oKor[x][0]].type == 'textarea') &&
            (form[oKor[x][0]].value.length > 0)) {
            if (!isAllHangul(form[oKor[x][0]].value)) {
                if (i == 0) {
                    focusField = form[oKor[x][0]];
                }
                fields[i++] = oKor[x][1];
                bValid = false;
            }
        }
    }

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

function isAllHangul(hangul) {
    for(i=0 ; i < hangul.length; i++) {
        ch = escape(hangul.charAt(i));      
        if(ch < '%uAC00' || ch > '%uD7A3'){
            return false;
        }
    }
    return true;
}


function validateEnglish(form) {
    var bValid = true;
    var focusField = null;
    var i = 0;
    var fields = new Array();
    var formName = form.getAttributeNode("name");
    
    oEng = eval('new ' + formName.value + '_english()');      
    
    for (x in oEng) {
        if ((form[oEng[x][0]].type == 'text' ||
             form[oEng[x][0]].type == 'textarea') &&
            (form[oEng[x][0]].value.length > 0)) {
            if (!isAllEnglish(form[oEng[x][0]].value)) {
                if (i == 0) {
                    focusField = form[oEng[x][0]];
                }
                fields[i++] = oEng[x][1];
                bValid = false;
            }
        }
    }
    
    if (fields.length > 0) {
        focusField.focus();
        alert(fields.join('\n'));
    }
    
    return bValid;
}

function isAllEnglish(eng) {
    var pattern = /^[a-zA-Z ]+$/;
        for(i=0 ; i < eng.length; i++) {                  
            if (!pattern.test(eng.charAt(i))) {
                return false;
            }
        }
    return true;      
}


function validateBusinessNumber(form) {
    var bValid = true;
    var focusField = null;
    var i = 0;
    var fields = new Array();
    var formName = form.getAttributeNode("name");
    
    obizNum = eval('new ' + formName.value + '_businessNumber()');
    for (x in obizNum) {
        if ((form[obizNum[x][0]].type == 'text' ||
             form[obizNum[x][0]].type == 'textarea') &&
            (form[obizNum[x][0]].value.length > 0)) {
            if (!checkBusinessNumber(form[obizNum[x][0]].value)) {
                if (i == 0) {
                    focusField = form[obizNum[x][0]];
                }
                fields[i++] = obizNum[x][1];
                bValid = false;
            }
        }
    }
    
    if (fields.length > 0) {
        focusField.focus();
        alert(fields.join('\n'));
    }
    
    return bValid;
}


function checkBusinessNumber(bizNum){
    if (bizNum.length == 10) {
        a = bizNum.charAt(0);
        b = bizNum.charAt(1);
        c = bizNum.charAt(2);
        d = bizNum.charAt(3);
        e = bizNum.charAt(4);
        f = bizNum.charAt(5);
        g = bizNum.charAt(6);
        h = bizNum.charAt(7);
        i = bizNum.charAt(8);
        Osub = bizNum.charAt(9);
        
        suma = a*1 + b*3 + c*7 + d*1 + e*3 + f*7 + g*1 + h*3;
        sumb = (i*5) %10;
        sumc = parseInt((i*5) / 10,10);
        sumd = sumb + sumc; 
        sume = suma + sumd;
        sumf = a + b + c + d + e + f + g + h + i
        k = sume % 10;
        Modvalue = 10 - k;
        LastVal = Modvalue % 10;
    
        if(LastVal != Osub) return false;
        else return true;
    } else {
        return false;
    }
}


function validateResidentNumber(form) {
    var bValid = true;
    var focusField = null;
    var i = 0;
    var fields = new Array();
    var formName = form.getAttributeNode("name");
    
    oRegNO = eval('new ' + formName.value + '_residentNumber()');
    
    for (x in oRegNO) {
        if ((form[oRegNO[x][0]].type == 'text' || form[oRegNO[x][0]].type == 'hidden' ||
            form[oRegNO[x][0]].type == 'textarea') && (form[oRegNO[x][0]].value.length > 0)) {
            if (!checkResidentNumber(form[oRegNO[x][0]].value)) {
                if (i == 0 && form[oRegNO[x][0]].type != 'hidden') {
                    focusField = form[oRegNO[x][0]];
                }
                fields[i++] = oRegNO[x][1];
                bValid = false;
            }
        }
    }
    
    if (fields.length > 0) {
        if(focusField != null) focusField.focus();
        alert(fields.join('\n'));
    }
    
    return bValid;
}

function checkResidentNumber(regNo){
    if (regNo.length == 13) {
        A = regNo.charAt(0);
        B = regNo.charAt(1);
        C = regNo.charAt(2);
        D = regNo.charAt(3);
        E = regNo.charAt(4);
        F = regNo.charAt(5);
        G = regNo.charAt(6);
        H = regNo.charAt(7);
        I = regNo.charAt(8);
        J = regNo.charAt(9);
        K = regNo.charAt(10);
        L = regNo.charAt(11);
        Osub = regNo.charAt(12);
        
        SUMM = A*2 + B*3 + C*4 + D*5+ E*6+ F*7 + G*8 + H*9 + I*2 + J*3 + K*4 + L*5;
        N = SUMM % 11;
        Modvalue = 11 - N;
        LastVal =  Modvalue % 10 ;
        
        if(LastVal != Osub) return false;
        else return true;
    } else {
        return false;
    }
}

function validateAssessPattern(form) {
    var bValid = true;
    var focusField = null;
    var i = 0;
    var fields = new Array();
    var formName = form.getAttributeNode("name");
    
    oAss = eval('new ' + formName.value + '_assesspattern()');      
    
    for (x in oAss) {
        if ((form[oAss[x][0]].type == 'text' ||
             form[oAss[x][0]].type == 'textarea') &&
            (form[oAss[x][0]].value.length > 0)) {
            if (!isAllAssess(form[oAss[x][0]].value)) {
                if (i == 0) {
                    focusField = form[oAss[x][0]];
                }
                fields[i++] = oAss[x][1];
                bValid = false;
            }
        }
    }
    
    if (fields.length > 0) {
        focusField.focus();
        alert(fields.join('\n'));
    }
    
    return bValid;
}

function isAllAssess(ass) {
    var pattern = /^[0-9,.]+$/;
    for(i=0 ; i < ass.length; i++) {                  
        if (!pattern.test(ass.charAt(i))) {
            return false;
        }
    }
    
    return true;
}
