blockValidate = true;

function validate(action) {
    if (blockValidate) {
        return;
    }
    blockValidate = true;
    var validCheck = new Validator();
    isValid = validCheck.Required(jcaRequiredFields);
    if (isValid) {
        isValid = validCheck.Restricted(jcaRestrictedFields);
    }
    if (isValid) {
        submitForm(action);
        return;
    }
    blockValidate = false;
}
function addRestrictedHelp() {
    for (var i = 0; i < jcaRestrictedFields.length; i++) {
        try {
            $(jcaRestrictedFields[i]).onmouseover = function () {
                return overlib(this.restriction+": ex.("+valid[this.restriction+"Help"]+")");
            }
            $(jcaRestrictedFields[i]).onmouseout = function () {
                return nd();
            }
            $(jcaRestrictedFields[i]).onkeyup = function (e) {
                restrictedInput(this, valid[this.restriction+"Input"]);
            }
        } catch (e) { };
    }
}
function restrictedInput(element, restrictSet) {
    if (restrictSet == "") {
        return;
    }
    var newValue = "";
    for (i = 0; i < element.value.length; i++) {
        char = element.value.charAt(i);
        if (restrictSet.indexOf(char,0) != -1) {
            newValue += char;
        }
    }
    element.value = newValue;
}

var Validator = Class.create();
Validator.prototype = {
    initialize : function () {
    },
    Required : function (fieldArray) {
        var strError = "Values required in the highlighted fields\n\n";
        var isValid = true;
        for (var i = 0; i < fieldArray.length; i++) {
            try {
                $(fieldArray[i]).style.borderColor = "";
                if ($F(fieldArray[i]) == '') {
                    $(fieldArray[i]).style.borderColor = "red";
                    $(fieldArray[i]).focus();
                    isValid = false;
                }
            } catch (e) { };
        }
        if(!isValid) {
            alert(strError);
        }
        return isValid;
    },
    Restricted : function (fieldArray) {
        var strError = "Invalid values in the highlighted fields\n\n";
        var isValid = true;
        for (var i = 0; i < fieldArray.length; i++) {
            try {
                $(fieldArray[i]).style.borderColor = "";
                if ($F(fieldArray[i]) == '') {
                    continue;
                }
                var thePat = valid[$(fieldArray[i]).restriction];
                var gotIt = thePat.exec($F(fieldArray[i]));
                if(! gotIt) {
                    $(fieldArray[i]).style.borderColor = "red";
                    $(fieldArray[i]).focus();
                    isValid = false;
                }
            } catch (e) { }
        }
        if(!isValid) {
            alert(strError);
        }
        return isValid;
    }
}

// REGEX Elements
var valid = {
    zipCode : /\d{5}(-\d{4})?/,
    zipCodeHelp : "##### or #####-####",
    zipCodeInput : "-0123456789",
    Currency : /\d+/,
    CurrencyHelp : "1234.56 or 789",
    CurrencyInput : "-.0123456789",
    Numeric : /\d+/,
    NumericHelp : "123",
    NumericInput : ".0123456789",
    Time : /^([1-9]|1[0-2]):[0-5]\d$/,
    TimeHelp : "5:04 or 12:34 but not 75:83",
    TimeInput : " :0123456789",
    emailAddress : /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/,
    emailAddressHelp : "xxx@xxx.xxx",
    emailAddressInput : "",
    phoneNumber : /^\(?\d{3}\)?\s|-\d{3}-\d{4}$/,
    phoneNumberHelp : "###-###-####",
    phoneNumberInput : "-0123456789",
    phoneNumberInternational : /^\d(\d|-){7,20}/,
    phoneNumberInternationalHelp : "Internation Phone Number",
    phoneNumberInternationalInput : "-0123456789",
    ipAddress : /^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,
    ipAddressHelp : "###.###.###.###",
    ipAddressInput : ".0123456789",
    Date : /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{4}$/,
    DateHelp : "MM/DD/YYYY",
    DateInput : "/0123456789",
    State : /^(AK|AL|AR|AZ|CA|CO|CT|DC|DE|FL|GA|HI|IA|ID|IL|IN|KS|KY|LA|MA|MD|ME|MI|MN|MO|MS|MT|NB|NC|ND|NH|NJ|NM|NV|NY|OH|OK|OR|PA|RI|SC|SD|TN|TX|UT|VA|VT|WA|WI|WV|WY)$/i,
    StateHelp : "FL",
    StateInput : "ABCDEFGHIJKLMNOPQRSTUVWXYZ ",
    SSN : /^\d{3}\-\d{2}\-\d{4}$/,
    SSNHelp : "###-##-####",
    SSNInput : "-0123456789"
}
