var aryvalidate = new Array;
var regexAnything = '^[0-9a-zA-Z]';
var regexZipCode = '^[0-9]{5}([- /]?[0-9]{4})?$';
var regexEmail = '^([0-9a-zA-Z]([-.\w_]*[0-9a-zA-Z])*@(([0-9a-zA-Z])+([-\w]*[0-9a-zA-Z])*\.)+[a-zA-Z]{2,9})$';
var regexPhone = '^[\\(]{0,1}([0-9]){3}[\\)]{0,1}[ ||-]?([^0-1]){1}([0-9]){2}[ ]?[-]?[ ]?([0-9]){4}[ ]*((x){0,1}([0-9]){1,5}){0,1}$';
var regexCC = '^3(?:[47]\\d([ -]?)\\d{4}(?:\\1\\d{4}){2}|0[0-5]\\d{11}|[68]\\d{12})$|^4(?:\\d\\d\\d)?([ -]?)\\d{4}(?:\\2\\d{4}){2}$|^6011([ -]?)\\d{4}(?:\\3\\d{4}){2}$|^5[1-5]\\d\\d([ -]?)\\d{4}(?:\\4\\d{4}){2}$|^2014\\d{11}$|^2149\\d{11}$|^2131\\d{11}$|^1800\\d{11}$|^3\\d{15}$';
var regexNumeric = '^([0-9]+(\\.)?[0-9]*)$';
var regexInteger = '^([0-9]*)$';
var regexDate = '^\\d{1,2}\\/\\d{1,2}\\/\\d{4}$';
var regexTime = '^\\d{1,2}:\\d{2}([ap]m)?$';
Array.prototype.inArray = function(value) {
    var i;
    for (i = 0; i < this.length; i++) {
        if (this[i] === value) {
            return true;
        }
    }
    return false;
};
function IsStyleDisplay(elem) {
    el = elem.parentNode;
    do {
        el = el.parentNode;
        if (el.style.display == "none") {
            return false;
        }
    } while (el.nodeName.toLowerCase() != "body");
    return (elem.disabled ? false : true);
}
function validate(elem, regex) {
    /*	Regular Expression parameters for various fields	Zip Code:  ^[0-9]{5}([- /]?[0-9]{4})?$	Email: ^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@(([0-9a-zA-Z])+([-\w]*[0-9a-zA-Z])*\.)+[a-zA-Z]{2,9})$	Phone: ^[\\(]{0,1}([0-9]){3}[\\)]{0,1}[ ||-]?([^0-1]){1}([0-9]){2}[ ]?[-]?[ ]?([0-9]){4}[ ]*((x){0,1}([0-9]){1,5}){0,1}$	Anything not starting with a special charachter (default) : ^[0-9a-zA-Z]	*/
    bReturnValue = true;
    if (regex == "") {
        regex = regexAnything;
    }
    var re = new RegExp(regex);
    if (elem.type == undefined) { //Entire Form Validation
        var elemfocus = -1;
        var elemmissed = 0;
        var strElementSummary = "";
        var aryRadioButtonNames = new Array();
        for (var i = 0; i < elem.length; i++) {  //Whole Form
            if (elem.elements[i].id != undefined) {
                var bElementIsDisplayed = IsStyleDisplay(elem.elements[i]);
                if (bElementIsDisplayed) {
                    var strrfv = "rfv" + elem.elements[i].id; //.substr(3);
                    rfv = document.getElementById(strrfv);
                    if (aryvalidate[elem.elements[i].id]) {
                        var re = new RegExp(aryvalidate[elem.elements[i].id]);
                    }
                    else {
                        var re = new RegExp(regex);
                    }
                    if (elem.elements[i].type == "text" || elem.elements[i].type == "textarea" || elem.elements[i].type == "password" || elem.elements[i].type == "select-one") {
                        if ((!elem.elements[i].value.match(re)) && document.getElementById(strrfv) && (elem.elements[i].type != undefined)) {
                            rfv.style.fontWeight = "bold";
                            var mooElem = $(elem.elements[i]);
                            //elem.elements[i].style.backgroundColor = "#FFCC99";
                            mooElem.addClass('error');
                            mooElem.removeClass('thumb');
                            strElementSummary = strElementSummary + "<li>" + (elemmissed + 1) + ". ";
                            strInnerText = rfv.innerText;
                            if (rfv.innerText == undefined) {
                                strInnerText = rfv.textContent;
                            }
                            if (strrfv.indexOf('Billing') > 0) {
                                strElementSummary = strElementSummary + "Billing " + strInnerText + "\n";
                            }
                            else if (strrfv.indexOf('Shipping') > 0) {
                                strElementSummary = strElementSummary + "Shipping " + strInnerText + "\n";
                            }
                            else {
                                strElementSummary = strElementSummary + strInnerText + "\n";
                            }
                            strElementSummary += "</li>";
                            bReturnValue = false;
                            elemmissed++;
                            if (elemfocus == -1) {
                                elemfocus = i;
                            }
                        }
                    } else if (elem.elements[i].type == "radio" || elem.elements[i].type == "checkbox") {
                        try {
                            var ary = elem.elements[i].id.split("_");
                            var strrfv = "rfv" + ary[0] + '[]'; //.substr(3);
                            rfv = document.getElementById(strrfv);
                            if (rfv != null) {
                                //aryRdBtn=eval("document."+elem.name+"."+elem.elements[i].name);
                                aryRdBtn = document.getElementsByName(ary[0] + '[]');
                                bChecked = false;
                                for (j = 0; j < aryRdBtn.length; j++) {
                                    //if (eval("document."+elem.name+"."+elem.elements[i].name+"["+j+"].checked;")) {
                                    tmpBtn = aryRdBtn[j];
                                    if (tmpBtn.checked) {
                                        bChecked = true;
                                        break;
                                    }
                                }
                                if (!bChecked && !aryRadioButtonNames.inArray(ary[0] + '[]')) {
                                    strElementSummary = strElementSummary + "<li>" + (elemmissed + 1) + ". ";
                                    strInnerText = rfv.innerText;
                                    rfv.style.fontWeight = "bold";
                                    if (rfv.innerText == undefined) {
                                        strInnerText = rfv.textContent;
                                    }
                                    if (strrfv.indexOf('Billing') > 0) {
                                        strElementSummary = strElementSummary + "Billing " + strInnerText + "\n";
                                    }
                                    else if (strrfv.indexOf('Shipping') > 0) {
                                        strElementSummary = strElementSummary + "Shipping " + strInnerText + "\n";
                                    }
                                    else {
                                        strElementSummary = strElementSummary + strInnerText + "\n";
                                    }
                                    strElementSummary += "</li>";
                                    bReturnValue = false;
                                    elemmissed++;
                                    if (elemfocus == -1) {
                                        elemfocus = j;
                                    }
                                    aryRadioButtonNames.push(ary[0] + '[]');
                                }
                            }
                        } catch (e) {
                        }
                    }
                }
            }
        }
        if (!bReturnValue) {
            var strMessage = "We caught " + elemmissed + " incorrectly completed or missed field(s). Look for and correct the highlighted items, summarized below";
            if (document.getElementById('alert')) {
                document.getElementById('alert').innerHTML = "<h2>" + strMessage + "</h2><ul>" + strElementSummary + "</ul>";
                document.getElementById('alert').style.display = "block";
                $('alert').removeClass('access');
            }
            else {
                var strStrippedSummary = strElementSummary.replace(/(<([^>]+)>)/ig, "");
                alert(strMessage + "\n" + strStrippedSummary);
            }
            elem.elements[elemfocus].focus();
            //return false;
        }
    }
    else { //Form Element Validation
        if (elem.type == "text" || elem.type == "textarea" || elem.type == "select-one" || elem.type == "password") {
            var strrfv = "rfv" + elem.id; //.substr(3);
            var mooElem = $(elem);
            if (regex != regexAnything) {
                aryvalidate[elem.id] = regex;
            }
            if ((!elem.value.match(re)) && document.getElementById(strrfv)) {
                rfv = document.getElementById(strrfv);
                rfv.style.fontWeight = "bold";
                //elem.style.backgroundColor = "#FFCC99";
                mooElem.addClass('error');
                mooElem.removeClass('thumb');
                bReturnValue = false;
            }
            else {
                rfv = document.getElementById(strrfv);
                if (rfv) {
                    rfv.style.fontWeight = "";
                    rfv.style.color = "";
                    //elem.style.backgroundColor = "";
                    mooElem.removeClass('error');
                    mooElem.addClass('thumb');
                    bReturnValue = true;
                }
            }
        }
    }
    return bReturnValue;
}
function doClear(theText) {
    if (theText.value == theText.defaultValue) {
        theText.value = ""
    }
}
