var regexAnything = '^[0-9a-zA-Z]';
//var regexAnything = '[^\s]*';
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 regexInteger = '^([0-9]*)$';
var regexNumeric = '^([0-9]+(\\.)?[0-9]*)$';
var regexDate = '^\\d{1,2}\\/\\d{1,2}\\/\\d{4}$';
var regexTime = '^\\d{1,2}:\\d{2}([ap]m)?$';
var regexAlphaNumeric = '^[a-zA-Z0-9_\-]*$';
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) {
    var mooElem = $(elem);
    var aryFormFields = mooElem.getElements('input').combine(mooElem.getElements('select').combine(mooElem.getElements('textarea'))).include(mooElem);
    var olSummary = new Element("ol");
    var aryTextInputs = ["text", "textarea", "password","file"];
    var arySelectInputs = ["select-one"];
    var aryBoxInputs = ["radio", "checkbox", "select-multiple"];
    aryFormFields.each(function (el) {
        if (el.id != "") {
            var rfv = $('rfv' + el.getProperty('id'));
            if (!rfv) {
                rfv = $('rfv' + el.getProperty('name'));
            }
            if (IsStyleDisplay(el) && rfv) {
                var bError = false;
                var re = new RegExp(regexAnything);
                if (el.getProperty('onblur') != null) {
                    var strblur = new String(el.getProperty('onblur'));
                    var reBlur = strblur.match(/regex[A-Z,a-z,0-9]*/gi);
                    if (reBlur != null) {
                        eval("re=new RegExp(" + reBlur + ");");
                    }
                }
                else if (regex != "" && regex != null && regex != undefined) {
                    eval("re=new RegExp(" + regex + ");");
                }
                else {
                    var aryClass = el.getProperty("class").split(" ");
                    aryClass.each(function (cls, j) {
                        if (cls.indexOf("regex") == 0) {
                            eval("re=new RegExp(" + cls + ");");
                        }
                    })
                }

                if (aryTextInputs.contains(el.type)) {
                    if (!el.get('value').match(re)) {
                        bError = true
                    }
                }
                else if (arySelectInputs.contains(el.type)) {
                    if (!el.getSelected()[0].value.match(re)) {
                        bError = true
                    }
                }
                else if (aryBoxInputs.contains(el.type)) {
                    var bChecked = false;
                    aryOptions = $$(document.getElementsByName(el.name));
                    aryOptions.each(function (opt) {
                        if (opt.checked) {
                            bChecked = true;
                        }
                    });
                    bError = !bChecked;
                }
                if (bError) {
                    /*rfv.setStyle("fontWeight","bold");
                    el.setStyle("backgroundColor","#FFCC99");
                    */
                    rfv.addClass("req")
                    el.addClass("req")
                    //strInnerText=rfv.get('text').replace(/^\*\s*|\s*\*$/g, "");
                    var rfvClone = rfv.clone();
                    rfvClone.getChildren().each(function (elchild, i) {
                        elchild.destroy();
                    });
                    strInnerText = rfvClone.get('text').replace(/^\*\s*|\s*\*$/g, "");
                    var li = new Element('li', { 'html': strInnerText, 'class': el.name });
                    var bHasClass = false;
                    olSummary.getElements("li").each(function (li) {
                        if (li.hasClass(el.name) && !bHasClass) {
                            bHasClass = true;
                        }
                    })
                    if (!bHasClass) {
                        olSummary.adopt(li);
                    }
                }
                else {
                    rfv.removeClass("req")
                    el.removeClass("req")
                }
            }
        }
    });
    if (olSummary.getChildren('li').length > 0) {
        if (mooElem.get('tag') == "form") {
            var h2 = new Element('h2', { 'html': 'We caught ' + olSummary.getChildren("li").length + ' incorrectly completed or missed field(s). Look for and correct the highlighted items, summarized below' });
            if ($('alerts')) {
                $('alerts').empty();
                $('alerts').adopt(h2).adopt(olSummary).setStyle('display', 'block');
            }
            else {
                AlertText("<h2>" + h2.get('html') + '</h2>\n<ol>' + olSummary.get('html') + '</ol>');
                //alert(h2.get('text') + '\n' + olSummary.get('text'));
            }
        }
        return false;
    }
    return true;
}

