var bCancel = false; 

    function validateContactUsForm(form) {                                                                   
        if (bCancel) 
      return true; 
        else 
 var formValidationResult;
       formValidationResult = validateRequired(form) && validateMask(form) && validateEmail(form); 
     return (formValidationResult == 1);
   } 

 function emailForm_required () { 
     this.a0 = new Array("firstName", "First Name is a required entry.", new Function ("varName", " return this[varName];"));
     this.a1 = new Array("lastName", "Last Name is a required entry.", new Function ("varName", " return this[varName];"));
     this.a2 = new Array("address1", "Address is a required entry.", new Function ("varName", " return this[varName];"));
     this.a3 = new Array("city", "City is a required entry.", new Function ("varName", " return this[varName];"));
     this.a4 = new Array("state", "State is a required entry.", new Function ("varName", " return this[varName];"));
     this.a5 = new Array("zipCode", "Zip is a required entry.", new Function ("varName", "this.mask=/^\\d{5}(-\\d{4})?$/;  return this[varName];"));
     this.a6 = new Array("phone1", "Phone is a required entry.", new Function ("varName", "this.mask=/^\\(?(\\d{3})\\)?[-| ]?(\\d{3})[-| ]?(\\d{4})$/;  return this[varName];"));
     this.a7 = new Array("email", "Email Address is a required entry.", new Function ("varName", " return this[varName];"));
     this.a8 = new Array("question", "Question/Comment is a required entry.", new Function ("varName", " return this[varName];"));
     this.a9 = new Array("ageRestrict", "Please affirm that you are at least 18 years or older.", new Function ("varName", " return this[varName];"));
   
    } 

    function emailForm_mask () { 
     this.a0 = new Array("zipCode", "Zip is an invalid Zip Code. Please re-enter in format 99999-9999.", new Function ("varName", "this.mask=/^\\d{5}(-\\d{4})?$/;  return this[varName];"));
     this.a1 = new Array("phone1", "Phone is an invalid Phone Number. Please re-enter in format (999) 999-9999.", new Function ("varName", "this.mask=/^\\(?(\\d{3})\\)?[-| ]?(\\d{3})[-| ]?(\\d{4})$/;  return this[varName];"));
     this.a2 = new Array("fax1", "Fax is an invalid Phone Number. Please re-enter in format (999) 999-9999.", new Function ("varName", "this.mask=/^\\(?(\\d{3})\\)?[-| ]?(\\d{3})[-| ]?(\\d{4})$/;  return this[varName];"));     
    } 

    function emailForm_email () { 
     this.a0 = new Array("email", "Email Address is an invalid e-mail address.", new Function ("varName", " return this[varName];"));
    } 
    
    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*$/, "" );
    }
     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;
    }
  
    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();
        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);
    }
    
 