var jQuery_formValidator_initConfig;
(function($) {
    $.formValidator = { sustainType: function(B, A) {
        var _ = $("#" + B).get(0), C = _.tagName, D = _.type;
        switch (A.validatetype) {
            case "InitValidator":
                return true;
            case "InputValidator":
                if (C == "INPUT" || C == "TEXTAREA" || C == "SELECT") {
                    return true;
                } else {
                    return false;
                }
            case "CompareValidator":
                if (C == "INPUT" || C == "TEXTAREA") {
                    if (D == "checkbox" || D == "radio") {
                        return false;
                    } else {
                        return true;
                    }
                }
                return false;
            case "AjaxValidator":
                if (D == "text" || D == "textarea" || D == "file" || D == "select-one") {
                    return true;
                } else {
                    return false;
                }
            case "RegexValidator":
                if (C == "INPUT" || C == "TEXTAREA") {
                    if (D == "checkbox" || D == "radio") {
                        return false;
                    } else {
                        return true;
                    }
                }
                return false;
            case "FunctionValidator":
                return true;
        }
    }, initConfig: function(_) {
        var A = { debug: false, validatorgroup: "1", alertmessage: false, validobjectids: "", onsuccess: function() {
            return true;
        }, onerror: function() {
        }, submitonce: false, formid: "", autotip: false
        };
        _ = _ || {};
        $.extend(A, _);
        if (A.formid != "") {
            $("#" + A.formid).submit(function() {
                return $.formValidator.pageIsValid("1");
            });
        }
        if (jQuery_formValidator_initConfig == null) {
            jQuery_formValidator_initConfig = new Array();
        }
        jQuery_formValidator_initConfig.push(A);
    }, appendValid: function(A, _) {
        if (!$.formValidator.sustainType(A, _)) {
            return -1;
        }
        var B = $("#" + A).get(0);
        if (_.validatetype == "InitValidator" || !B.settings || B.settings == undefined) {
            B.settings = new Array();
        }
        var C = B.settings.push(_);
        B.settings[C - 1].index = C - 1;
        return C - 1;
    }, getInitConfig: function($) {
        if (jQuery_formValidator_initConfig != null) {
            for (i = 0; i < jQuery_formValidator_initConfig.length; i++) {
                if ($ == jQuery_formValidator_initConfig[i].validatorgroup) {
                    return jQuery_formValidator_initConfig[i];
                }
            }
        }
        return null;
    }, triggerValidate: function(_) {
        switch (_.setting.validatetype) {
            case "InputValidator":
                $.formValidator.inputValid(_);
                break;
            case "CompareValidator":
                $.formValidator.compareValid(_);
                break;
            case "AjaxValidator":
                $.formValidator.ajaxValid(_);
                break;
            case "RegexValidator":
                $.formValidator.regexValid(_);
                break;
            case "FunctionValidator":
                $.formValidator.functionValid(_);
                break;
        }
    }, setTipState: function(A, _, B) {
        var C = $("#" + A);
        if (B == null || B == "") {
            C.hide();
        } else {
            C.show();
            C.removeClass();
            C.addClass(_);
            C.html("<nobr>" + B + "</nobr>");
        }
    }, setFailState: function(_, A) {
        var B = $("#" + _);
        B.removeClass();
        B.addClass("onError");
        B.html(A);
    }, showMessage: function(D) {
        var C = D.id, H = D.isvalid, B = D.setting, G = "", A = "", F = $("#" + C).get(0).settings, E = $.formValidator.getInitConfig(F[0].validatorgroup);
        if (!H) {
            if (B.validatetype == "AjaxValidator") {
                if (B.lastValid == "") {
                    A = "onLoad";
                    G = B.onwait;
                } else {
                    A = "onError";
                    G = B.onerror;
                }
            } else {
                G = (D.errormsg == "" ? B.onerror : D.errormsg);
                A = "onError";
            }
            if (E.alertmessage) {
                var _ = $("#" + C).get(0);
                if (_.validoldvalue != $(_).val()) {
                    alert(G);
                }
            } else {
                $.formValidator.setTipState(F[0].tipid, A, G);
            }
        } else {
            if (!E.alertmessage) {
                G = "";
                if ($.formValidator.isEmpty(C)) {
                    G = B.onempty;
                } else {
                    G = B.oncorrect;
                }
                $.formValidator.setTipState(B.tipid, "onSuccess", G);
            }
        }
    }, getLength: function(A) {
        var B = $("#" + A);
        sType = B.get(0).type;
        var C = 0;
        switch (sType) {
            case "text":
            case "hidden":
            case "password":
            case "textarea":
            case "file":
                var _ = B.val();
                for (var D = 0; D < _.length; D++) {
                    if (_.charCodeAt(D) >= 19968 && _.charCodeAt(D) <= 40869) {
                        C += 2;
                    } else {
                        C++;
                    }
                }
                break;
            case "checkbox":
            case "radio":
                C = $("input[@type='" + sType + "'][@name='" + B.attr("name") + "'][@checked]").length;
                break;
            case "select-one":
                C = B.get(0).options ? B.get(0).options.selectedIndex : -1;
                break;
            case "select-multiple":
                C = $("select[@name=" + B.get(0).name + "] option[@selected]").length;
                break;
        }
        return C;
    }, isEmpty: function(_) {
        if ($("#" + _).get(0).settings[0].empty && $.formValidator.getLength(_) == 0) {
            return true;
        } else {
            return false;
        }
    }, isOneValid: function(_) {
        return $.formValidator.oneIsValid(_, 1).isvalid;
    }, oneIsValid: function(A, C) {
        var B = new Object();
        B.id = A;
        B.ajax = -1;
        B.errormsg = "";
        var _ = $("#" + A).get(0), D = _.settings, F = D.length;
        if (F == 1) {
            D[0].bind = false;
        }
        if (!D[0].bind) {
            return null;
        }
        for (var E = 0; E < F; E++) {
            if (E == 0) {
                if ($.formValidator.isEmpty(A)) {
                    B.isvalid = true;
                    B.setting = D[0];
                    break;
                }
                continue;
            }
            B.setting = D[E];
            if (D[E].validatetype != "AjaxValidator") {
                $.formValidator.triggerValidate(B);
            } else {
                B.ajax = E;
            }
            if (!D[E].isvalid) {
                B.isvalid = false;
                B.setting = D[E];
                break;
            } else {
                B.isvalid = true;
                B.setting = D[0];
                if (D[E].validatetype == "AjaxValidator") {
                    break;
                }
            }
        }
        return B;
    }, resetTipState: function(A) {
        var B = $.formValidator.getInitConfig(A), _ = $(B.validobjectids);
        _.each(function() {
            var _ = this.settings[0];
            $.formValidator.setTipState(_.tipid, "onShow", _.onshow);
        });
    }, pageIsValid: function(F) {
        if (F == null || F == undefined) {
            F = "1";
        }
        var I = true, D = "", B, C, _, A = "^", H = $.formValidator.getInitConfig(F), E = $(H.validobjectids);
        E.each(function(F, _) {
            if (_.settings[0].bind) {
                C = $.formValidator.oneIsValid(_.id, 1);
                if (C) {
                    var E = _.settings[0].tipid;
                    if (!C.isvalid) {
                        I = false;
                        if (D == "") {
                            D = C.id;
                            B = (C.errormsg == "" ? C.setting.onerror : C.errormsg);
                        }
                    }
                    if (!H.alertmessage) {
                        if (A.indexOf("^" + E + "^") == -1) {
                            A = A + E + "^";
                            if (!C.isvalid) {
                                A = A + E + "^";
                            }
                            $.formValidator.showMessage(C);
                        }
                    }
                }
            }
        });
        if (I) {
            I = H.onsuccess();
            if (H.submitonce) {
                $("input[@type='submit']").attr("disabled", true);
            }
        } else {
            var G = $("#" + D).get(0);
            H.onerror(B, G);
            if (D != "") {
                $("#" + D).focus();
            }
        }
        return !H.debug && I;
    }, ajaxValid: function(C) {
        var A = C.id, D = $("#" + A), _ = D.get(0).settings[C.ajax], E = _.url;
        if (D.size() == 0 && D.get(0).settings[0].empty) {
            C.setting = $("#" + A).get(0).settings[0];
            C.isvalid = true;
            $.formValidator.showMessage(C);
            _.isvalid = true;
            return;
        }
        if (_.addidvalue) {
            var B = "clientid=" + A + "&" + A + "=" + escape(D.val());
            E = E + ((E).indexOf("?") > 0 ? ("&" + B) : ("?" + B));
        }
        $.ajax({ mode: "abort", type: _.type, url: E, cache: _.cache, data: _.data, async: _.async, dataType: _.datatype, success: function(A) {
            setting0 = D.get(0).settings[0];
            if (_.success(A)) {
                $.formValidator.setTipState(setting0.tipid, "onSuccess", setting0.oncorrect);
                _.isvalid = true;
            } else {
                $.formValidator.setTipState(setting0.tipid, "onError", _.onerror);
                _.isvalid = false;
            }
        }, complete: function() {
            if (_.buttons && _.buttons.length > 0) {
                _.buttons.attr({ "disabled": false });
            }
            _.complete;
        }, beforeSend: function() {
            if (_.buttons && _.buttons.length > 0) {
                _.buttons.attr({ "disabled": true });
            }
            var $ = _.beforesend();
            if ($) {
                _.isvalid = false;
            }
            _.lastValid = "-1";
            return _.beforesend;
        }, error: function() {
            setting0 = D.get(0).settings[0];
            $.formValidator.setTipState(setting0.tipid, "onError", _.onerror);
            _.isvalid = false;
            _.error();
        }, processData: _.processdata
        });
    }, regexValid: function(returnObj) {
        var id = returnObj.id, setting = returnObj.setting, srcTag = $("#" + id).get(0).tagName, elem = $("#" + id).get(0);
        if (elem.settings[0].empty && elem.value == "") {
            setting.isvalid = true;
        } else {
            var regexpress = setting.regexp;
            if (setting.datatype == "enum") {
                regexpress = eval("regexEnum." + regexpress);
            }
            if (regexpress == undefined || regexpress == "") {
                setting.isvalid = false;
                return;
            }
            var exp = new RegExp(regexpress, setting.param);
            if (exp.test($("#" + id).val())) {
                setting.isvalid = true;
            } else {
                setting.isvalid = false;
            }
        }
    }, functionValid: function(B) {
        var A = B.id, _ = B.setting, C = $("#" + A), D = _.fun(C.val(), C.get(0));
        if (D != undefined) {
            if (typeof D == "string") {
                _.isvalid = false;
                B.errormsg = D;
            } else {
                _.isvalid = D;
            }
        }
    }, inputValid: function(D) {
        var C = D.id, B = D.setting, G = $("#" + C), A = G.get(0), _ = G.val(), E = A.type, H = $.formValidator.getLength(C);
        switch (E) {
            case "text":
            case "hidden":
            case "password":
            case "textarea":
            case "file":
            case "checkbox":
            case "select-one":
            case "select-multiple":
            case "radio":
                var F = false;
                if (E == "select-one" || E == "select-multiple") {
                    B.type = "size";
                }
                if (B.type == "size") {
                    _ = H;
                    F = true;
                } else {
                    stype = (typeof B.min);
                    if (stype == "number") {
                        _ = parseFloat(_);
                        if (!isNaN(_)) {
                            F = true;
                        }
                    }
                    if (stype == "string") {
                        F = true;
                    }
                }
                if (F) {
                    if (_ < B.min || _ > B.max) {
                        if (_ < B.min && B.onerrormin) {
                            D.errormsg = B.onerrormin;
                        }
                        if (_ > B.min && B.onerrormax) {
                            D.errormsg = B.onerrormax;
                        }
                        B.isvalid = false;
                    } else {
                        B.isvalid = true;
                    }
                } else {
                    B.isvalid = false;
                }
                break;
        }
    }, compareValid: function(B) {
        var A = B.id, _ = B.setting, D = $("#" + A), C = $("#" + _.desid);
        _.isvalid = false;
        curvalue = D.val();
        ls_data = C.val();
        if (_.datatype == "number") {
            if (!isNaN(curvalue) && !isNaN(ls_data)) {
                curvalue = parseFloat(curvalue);
                ls_data = parseFloat(ls_data);
            } else {
                return;
            }
        }
        switch (_.operateor) {
            case "=":
                if (curvalue == ls_data) {
                    _.isvalid = true;
                }
                break;
            case "!=":
                if (curvalue != ls_data) {
                    _.isvalid = true;
                }
                break;
            case ">":
                if (curvalue > ls_data) {
                    _.isvalid = true;
                }
                break;
            case ">=":
                if (curvalue >= ls_data) {
                    _.isvalid = true;
                }
                break;
            case "<":
                if (curvalue < ls_data) {
                    _.isvalid = true;
                }
                break;
            case "<=":
                if (curvalue <= ls_data) {
                    _.isvalid = true;
                }
                break;
            case "oneok":
                if ($.formValidator.isEmpty(A) || $.formValidator.isEmpty(isEmpty.desid)) {
                    _.isvalid = false;
                } else {
                    _.isvalid = true;
                }
        }
    } 
    };
    $.fn.formValidator = function(A) {
        var _ = { validatorgroup: "1", empty: false, submitonce: false, automodify: false, onshow: "\u8bf7\u8f93\u5165\u5185\u5bb9", onfocus: "\u8bf7\u8f93\u5165\u5185\u5bb9", oncorrect: "\u8f93\u5165\u6b63\u786e", onempty: "\u8f93\u5165\u5185\u5bb9\u4e3a\u7a7a", defaultvalue: null, bind: true, validatetype: "InitValidator", tipcss: { "left": "140px", "top": "-25px", "height": "18px", "width": "255px" }, triggerevent: "blur" }, B = $.formValidator.getInitConfig(_.validatorgroup);
        if (B.autotip && !B.alertmessage) {
            $.extend(_.tipcss, A.tipcss || {});
            A.tipcss = _.tipcss;
        }
        A = A || {};
        $.extend(_, A);
        return this.each(function() {
            var E = {};
            $.extend(E, _);
            var I = "";
            if (B.autotip) {
                if (!E.tipid) {
                    E.tipid = this.id;
                }
                var A = E.tipid;
                I = A + "Tip";
                if ($("#" + I).length == 0) {
                    $("<div class=\"formValidateTip\"></div>").insertAfter($("#" + A)).css({ "display": "block" }).prepend($("<div id=\"" + I + "\"></div>").css(E.tipcss));
                }
                E.tipid = I;
            } else {
                if (!E.tipid) {
                    E.tipid = this.id + "Tip";
                }
                I = E.tipid;
            }
            $.formValidator.appendValid(this.id, E);
            var D = B.validobjectids;
            if (D.indexOf("#" + this.id + " ") == -1) {
                B.validobjectids = (D == "" ? "#" + this.id : D + ",#" + this.id);
            }
            if (!B.alertmessage) {
                $.formValidator.setTipState(I, "onShow", _.onshow);
            }
            var C = this.tagName, F = this.type, H = _.defaultvalue, G = $(this);
            if (C == "INPUT" || C == "TEXTAREA") {
                if (H) {
                    if (F == "checkbox" || F == "radio") {
                        if (F == "radio") {
                            if (this.value == H) {
                                G.attr("checked", true);
                            }
                        } else {
                            G.attr("checked", $.inArray(this.value, H) >= 0);
                        }
                    } else {
                        G.val(H);
                    }
                }
                G.focus(function() {
                    if (!B.alertmessage) {
                        $.formValidator.setTipState(I, "onFocus", _.onfocus);
                    }
                    if (F == "password" || F == "text" || F == "textarea" || F == "file") {
                        this.validoldvalue = G.val();
                    }
                });
                G.bind(_.triggerevent, function() {
                    var C = this.settings, A = $.formValidator.oneIsValid(this.id, 1);
                    if (A == null) {
                        return;
                    }
                    if (A.ajax >= 0 && this.validoldvalue != $(this).val()) {
                        $.formValidator.setTipState(I, "onLoad", C[A.ajax].onwait);
                        $.formValidator.ajaxValid(A);
                    } else {
                        $.formValidator.showMessage(A);
                        if (!A.isvalid) {
                            var D = _.automodify && (this.type == "text" || this.type == "textarea" || this.type == "file");
                            if (D && !B.alertmessage) {
                                alert(A.setting.onerror);
                                $.formValidator.setTipState(I, "onShow", _.onshow);
                            }
                        }
                    }
                });
            } else {
                if (C == "SELECT") {
                    if (H) {
                        if (F == "select-one") {
                            G.attr("value", H);
                        }
                    }
                    G.bind(F == "select-one" ? "focus" : "click", function() {
                        if (!B.alertmessage) {
                            $.formValidator.setTipState(I, "onFocus", _.onfocus);
                        }
                    });
                    G.bind(F == "select-one" ? "change" : "blur", function() {
                        var _ = $.formValidator.oneIsValid(this.id, 1);
                        if (_ == null) {
                            return;
                        }
                        if (_.ajax >= 0 && this.validoldvalue != $(this).val()) {
                            $.formValidator.ajaxValid(this.id, _.setting);
                        } else {
                            $.formValidator.showMessage(_);
                        }
                    });
                }
            }
        });
    };
    $.fn.inputValidator = function(_) {
        var A = { isvalid: false, min: 0, max: 99999999999999, type: "size", onerror: "\u8f93\u5165\u9519\u8bef", validatetype: "InputValidator" };
        _ = _ || {};
        $.extend(A, _);
        return this.each(function() {
            $.formValidator.appendValid(this.id, A);
        });
    };
    $.fn.compareValidator = function(_) {
        var A = { isvalid: false, desid: "", operateor: "=", onerror: "\u8f93\u5165\u9519\u8bef", validatetype: "CompareValidator" };
        _ = _ || {};
        $.extend(A, _);
        return this.each(function() {
            $.formValidator.appendValid(this.id, A);
        });
    };
    $.fn.regexValidator = function(_) {
        var A = { isvalid: false, regexp: "", param: "i", datatype: "string", onerror: "\u8f93\u5165\u7684\u683c\u5f0f\u4e0d\u6b63\u786e", validatetype: "RegexValidator" };
        _ = _ || {};
        $.extend(A, _);
        return this.each(function() {
            $.formValidator.appendValid(this.id, A);
        });
    };
    $.fn.functionValidator = function(_) {
        var A = { isvalid: true, fun: function() {
            this.isvalid = true;
        }, validatetype: "FunctionValidator", onerror: "\u8f93\u5165\u9519\u8bef"
        };
        _ = _ || {};
        $.extend(A, _);
        return this.each(function() {
            $.formValidator.appendValid(this.id, A);
        });
    };
    $.fn.ajaxValidator = function(_) {
        var A = { isvalid: false, lastValid: "", type: "GET", url: "", addidvalue: true, datatype: "html", data: "", async: true, cache: false, beforesend: function() {
            return true;
        }, success: function() {
            return true;
        }, complete: function() {
        }, processdata: false, error: function() {
        }, buttons: null, onerror: "\u670d\u52a1\u5668\u6821\u9a8c\u6ca1\u6709\u901a\u8fc7", onwait: "\u6b63\u5728\u7b49\u5f85\u670d\u52a1\u5668\u8fd4\u56de\u6570\u636e", validatetype: "AjaxValidator"
        };
        _ = _ || {};
        $.extend(A, _);
        return this.each(function() {
            $.formValidator.appendValid(this.id, A);
        });
    };
    $.fn.defaultPassed = function(_) {
        return this.each(function() {
            var B = this.settings;
            for (var C = 1; C < B.length; C++) {
                B[C].isvalid = true;
                if (!$.formValidator.getInitConfig(B[0].validatorgroup).alertmessage) {
                    var A = "onSuccess";
                    if (_) {
                        A = "onShow";
                    }
                    $.formValidator.setTipState(B[0].tipid, A, B[0].oncorrect);
                }
            }
        });
    };
    $.fn.unFormValidator = function(_) {
        return this.each(function() {
            this.settings[0].bind = !_;
            if (_) {
                $("#" + this.settings[0].tipid).hide();
            } else {
                $("#" + this.settings[0].tipid).show();
            }
        });
    };
})(jQuery);
