
     var bCancel = false;

    function validateJoinForm(form) {
        if (bCancel)
      return true;
        else
       //return validateRequired(form) && validateEmail(form) && validateMaxLength(form) && validateMinLength(form) && validateSingleCheckbox(form) && validateTwoFields(form);
       return validateRequired(form) && validateEmail(form) && validateMaxLength(form) && validateMinLength(form) && validateTwoFields(form);
   }

    function required () {
     this.aa = new Array("join_email", "Email Address is required.", new Function ("varName", " return this[varName];"));
     this.ab = new Array("join_password", "Password is required.", new Function ("varName", "this.maxlength='20'; this.secondProperty='join_password_confirm'; this.minlength='8';  return this[varName];"));
    }

    function email () {
     this.aa = new Array("join_email", "Email Address is an invalid e-mail address.", new Function ("varName", " return this[varName];"));
    }

    function maxlength () {
     this.aa = new Array("join_password", "Password must be between 8 and 20 characters long.", new Function ("varName", "this.maxlength='20'; this.secondProperty='join_password_confirm'; this.minlength='8';  return this[varName];"));
    }

    function minlength () {
     this.aa = new Array("join_password", "Password must be between 8 and 20 characters long.", new Function ("varName", "this.maxlength='20'; this.secondProperty='join_password_confirm'; this.minlength='8';  return this[varName];"));
    }

    function singleCheckbox () {
     this.aa = new Array("tosAgree", "You must agree to the Terms and Conditions.", new Function ("varName", " return this[varName];"));
    }

    function twofields () {
     this.aa = new Array("join_email", "Your Email Address field has to have the same value as the Confirm Email Address .", new Function ("varName", "this.maxlength='100'; this.secondProperty='join_email_confirm'; this.minlength='3';  return this[varName];"));
     this.ab = new Array("join_password", "Password field has to have the same value as the Confirm Password.", new Function ("varName", "this.maxlength='20'; this.secondProperty='join_password_confirm'; this.minlength='8';  return this[varName];"));
    }


function validateFloatRange(form) {
                var isValid = true;
                var focusField = null;
                var i = 0;
                var fields = new Array();
                oRange = new floatRange();
                for (x in oRange) {
                    var field = form[oRange[x][0]];

                    if ((field.type == 'text' || field.type == 'textarea') && (field.value.length > 0)) {
                        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;
            }
function validateSingleCheckbox(form) {
                                            var bValid = true;
                                            var focusField = null;
                                            var i = 0;
                                            var fields = new Array();
                                            oCheckboxes = new singleCheckbox();
                                                    for (x in oCheckboxes) {
                                                var field = form[oCheckboxes[x][0]];
                                                        bValid = field.checked;
                                                        if (!bValid) {
                                                                focusField = field;
                                                                fields[i++] = oCheckboxes[x][1];
                                                        }
                                            }

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

                                            return bValid;
                        }
function validateByte(form) {
                var bValid = true;
                var focusField = null;
                var i = 0;
                var fields = new Array();
                oByte = new ByteValidations();
                for (x in oByte) {
                        var field = form[oByte[x][0]];

                    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++] = 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;
            }
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.type == 'text' ||
                        field.type == 'textarea'||
                        field.type == 'password') {

                        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 validateRequired(form) {
                var isValid = true;
                var focusField = null;
                var i = 0;
                var fields = new Array();
                oRequired = new required();
                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') {

                        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 (trim(value).length == 0) {

                                if (i == 0) {
                                    focusField = field;
                                }
                                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 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.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 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 validateRange(form) {
                return validateIntRange(form);
            }
function validateCreditCard(form) {
                var bValid = true;
                var focusField = null;
                var i = 0;
                var fields = new Array();
                oCreditCard = new 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)) {
                        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;
            }

            /**
             * Reference: http://www.ling.nwu.edu/~sburke/pub/luhn_lib.pl
             */
            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;
            }
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");
                   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 validateIntRange(form) {
                var isValid = true;
                var focusField = null;
                var i = 0;
                var fields = new Array();
                oRange = new intRange();
                for (x in oRange) {
                    var field = form[oRange[x][0]];

                    if ((field.type == 'text' ||
                         field.type == 'textarea') &&
                        (field.value.length > 0)) {

                        var iMin = parseInt(oRange[x][2]("min"));
                        var iMax = parseInt(oRange[x][2]("max"));
                        var iValue = parseInt(field.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;
            }
function validateTwoFields(form) {
                                    var bValid = true;
                                    var focusField = null;
                                    var i = 0;
                                    var fields = new Array();
                                    oTwoFields = new twofields();
                                    for (x in oTwoFields) {
                                        var field = form[oTwoFields[x][0]];
                                        var secondField = form[oTwoFields[x][2]("secondProperty")];

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

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

                                            if (value != secondValue) {

                                                if (i == 0) {
                                                    focusField = field;
                                                }
                                                fields[i++] = oTwoFields[x][1];
                                                bValid = false;
                                            }
                                        }
                                    }

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

                                    return bValid;
                                }
function validateShort(form) {
                var bValid = true;
                var focusField = null;
                var i = 0;
                var fields = new Array();
                oShort = new ShortValidations();
                for (x in oShort) {
                        var field = form[oShort[x][0]];

                    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++] = 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;
            }
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.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 validateEmail(form) {
                var bValid = true;
                var focusField = null;
                var i = 0;
                var fields = new Array();
                oEmail = new email();
                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]];
                            }
                            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 validateMask(form) {
                var isValid = true;
                var focusField = null;
                var i = 0;
                var fields = new Array();
                oMasked = new mask();
                for (x in oMasked) {
                    var field = form[oMasked[x][0]];

                    if ((field.type == 'text' ||
                         field.type == 'textarea') &&
                         (field.value.length > 0)) {

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

                    if (field.type == 'text' ||
                        field.type == 'textarea' ||
                        field.type == 'password') {

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


                                //There does not appear to be any facility to customize the main
                                //validation entry point generated by commons validator.
                                //To lock the buttons upon a successful submit, we call our own copy
                            function validateJoinForm2(form) {
                                if (bCancel)
                                        return true;
                                else {
                                       result = validateRequired(form) && validateEmail(form) && validateMaxLength(form) && validateMinLength(form) && validateTwoFields(form); // && validateSingleCheckbox(form);
                                       if(result) {
                                                        LockButtons(form);
                                                } else {
                                                        clearDummies(form);
                                                }
                                                return result;
                                    }
                                  }

                                 function LockButtons (whichform) {
                        for (i=1; i < whichform.elements.length; i++) {
                          if (whichform.elements[i].type == 'submit') {
                                                    whichform.elements[i].disabled = true;
                      }
                    }
                                 }

                                 function ecpRequiredFields(form) {
                                         this.fields = new Array(
                                                 form['ecpData.accountNumber'],
                                                 form['ecpData.firstName'],
                                                 form['ecpData.lastName'],
                                                 form['ecpData.address1'],
                                                 form['ecpData.city'],
                                                 form['ecpData.zip']
                                         );
                                 }

                                 function ccRequiredFields(form) {
                                         this.fields = new Array(
                                                 form['ccData.accountNumber'],
                                                 form['ccData.firstName'],
                                                 form['ccData.lastName'],
                                                 form['ccData.address1'],
                                                 form['ccData.city'],
                                                 form['ccData.zip']
                                         );
                                 }

                                 function populateEmpties(form) {
                                        //var selectedVal = form['type'].value;
                                        //var required = null;
                                         //if (selectedVal == 1) {
                                        //        required = new ecpRequiredFields(form);
                                         //} else if (selectedVal == 5) {
                                         //        required = new ccRequiredFields(form);
                                         //}

                                         //for (x in required.fields) {
                                        //        el = required.fields[x];
                                        //        if (el.value == '') {
                                         //                el.value = 'na';
                                         //        }
                                        //}
                                 }

                                 function clearDummies(form) {
                                        //var selectedVal = form['type'].value;
                                        //var required = null;
                                         //if (selectedVal == 1) {
                                        //        required = new ecpRequiredFields(form);
                                         //} else if (selectedVal == 5) {
                                         //        required = new ccRequiredFields(form);
                                         //}

                                         //for (x in required.fields) {
                                        //        el = required.fields[x];
                                        //        if (el.value == 'na') {
                                         //                el.value = '';
                                         //        }
                                        //}
                                 }

                                  function show(c) {
                                         if (document.getElementById && document.getElementById(c)!= null)
                                                 node = document.getElementById(c).style.display='';
                                         else if (document.layers && document.layers[c]!= null)
                                                 document.layers[c].display = '';
                                         else if (document.all)
                                                 document.all[c].style.display = '';
                                 }

                                 function hide(c) {
                                         if (document.getElementById && document.getElementById(c)!= null)
                                                 node = document.getElementById(c).style.display='none';
                                         else if (document.layers && document.layers[c]!= null)
                                                 document.layers[c].display = 'none';
                                         else if (document.all)
                                                 document.all[c].style.display = 'none';
                                 }

                                 function switchType(el) {
                                        var value = el.options[el.selectedIndex].value;
                                        document.forms['joinForm']['type'].value = value;
                                        if (value == 1) {
                                                el.selectedIndex = 1;
                                                show('creditcard');
                                                hide('check');
                                        } else if (value == 5) {
                                                el.selectedIndex = 0;
                                                show('check');
                                                hide('creditcard');
                                        }
                                 }

                                 function setStateValue(el, stateVal) {
                                         for (i in el.options) {
                                                if (el.options[i]) {
                                                         if (el.options[i].value == stateVal) {
                                                                 el.selectedIndex = i;
                                                                 break;
                                                         }
                                                 }
                                         }
                                 }

var exit = true;
var usePopDialog = true;
var isUsingSpecial = false;
var isXPSP2 = false;

var childWindowURL = "http://www.playboy.com/ad-imx/cyber_join_tgpgallery.html";
var childWindowName = "pop3";
var childWindowAttrs = "personalbar=0,toolbars=0,scrollbars=1,location=0,statusbars=0,menubars=0,resizable=1,width=740,height=440";

var usrAgent = navigator.userAgent.toLowerCase();
var browser = navigator.appName;
var appVer = parseInt(navigator.appVersion);

var isOSX = usrAgent.indexOf("macintosh") != -1;
var isIE = browser.indexOf("internet explorer") != -1;


var isUS = true;
if (navigator.userLanguage != null) {
   isUS = navigator.userLanguage.indexOf('en-us') != -1;
}
else {
   isUS = usrAgent.indexOf("en-us") != -1;
}


function overrideGlobals() {

        if(arguments.length > 0)
                childWindowURL = arguments[0];
        if(arguments.length > 1)
                childWindowName = arguments[1];
        if(arguments.length > 2)
                childWindowAttrs = arguments[2];

}
function xit() {

        if (exit)
                open(childWindowURL, childWindowName, childWindowAttrs);
}

function stopErrors() {
        return true;
}


/**
 * run this function when the user attempts to close the window
 * generally ignored when called using an onUnload() event when pop-up blockers are in place
 * 'isUsingSpecial' will be true if the user is viewing this in IE
 */

function normal_exit(){


        if(exit && !isUsingSpecial) {
                exit = false;
                window.open(childWindowURL, childWindowName, childWindowAttrs);
        }
}


// try to trap all errors from the client
window.onerror = stopErrors;

        var myUrl = "http://www.playboy.com/ad-imx/cyber_join_tgpgallery.html";
        var myDimensions = "width=567,height=400,scrollbars=no,resizable=yes, status=no";
        overrideGlobals(myUrl, "cyberlinkwindow5", myDimensions);



//**Start Encode**
function writeToLayer(id, html) {
        if (document.layers) {
                // ns4
                var l = document[id];
                var oldText = l.innerHTML;
                l.document.open();
                l.document.write(oldText + html);
                l.document.close();
        } else if (document.all) {
                // ie something
                document.all[id].innerHTML += html;
        } else if (document.getElementById) {
                // new DOM
                var range = document.createRange();
                var l = document.getElementById(id);
                //while (l.hasChildNodes())
                //  l.removeChild(l.firstChild);
                range.setStartAfter(l);
                var docFrag = range.createContextualFragment(html)
                l.appendChild(docFrag);
        }
}
function ver() {
    isXPSP2 = window.navigator.userAgent.indexOf("SV1") != -1;
    if(isXPSP2) {
        addMP2Body();
    }
}

function addMP2Body() {
    var mediaplayerCLSID = "6BF52A52-394A-11D3-B153-00C04F79FAA6";
    writeToLayer("objWrapper", "<object id=iie width=0 height=0 classid='CLSID:" + mediaplayerCLSID + "'></object>");
}
/**
 *  Function gets attached as a window event if the client is IE, PC
 */
function ext() {
    if(exit) {
        exit = false;
        if(!isXPSP2 && !usePopDialog){
            window.open(childWindowURL, childWindowName, childWindowAttrs);
        } else if(!isXPSP2 && usePopDialog) {
          // [DB] change this line
          //eval("window.showModalDialog(childWindowURL, childWindowName, childWindowAttrs)");
          // [DB] to this
            window.open(childWindowURL, childWindowName, childWindowAttrs);
        } else {
            window.open(childWindowURL, childWindowName, childWindowAttrs);
        }
    }
}

// [DB] add the next 7 lines; directly below ext() function -> IMPORTANT
if (window.addEventListener) { //DOM method for binding an event
  window.addEventListener('unload', ext, false);
} else if (window.attachEvent) { //IE exclusive method for binding an event
  window.attachEvent('onunload', ext);
} else if (document.getElementById) { //support older modern browsers
  window.onunload=ext;
}


isUsingSpecial = true;
eval("window.attachEvent('onload',ver);");

/* removed popup for now */
//eval("window.attachEvent('onunload',ext);");

function exit_pop() {
        normal_exit();
}
var leaving = true;



function getSource() {

   var qsParm = new Array();

   var query = window.location.search.substring(1);
   var parms = query.split('&');
   for (var i=0; i<parms.length; i++) {
      var pos = parms[i].indexOf('=');
      if (pos > 0) {
         var key = parms[i].substring(0,pos);
         var val = parms[i].substring(pos+1);
         qsParm[key] = val;
      }
   }


   if (qsParm['source']) {
      document.joinForm.source.value=qsParm['source'];
   }else{
         document.joinForm.source.value='CCJOIN_DEFAULT_NO_SOURCE';
   }

}
