(function (t) {
    t.extend(t.fn, {
        validate: function (e) {
            if (this.length) {
                var i = t.data(this[0], "validator");
                return (
                    i ||
                    (this.attr("novalidate", "novalidate"),
                    (i = new t.validator(e, this[0])),
                    t.data(this[0], "validator", i),
                    i.settings.onsubmit &&
                        (this.validateDelegate(":submit", "click", function (e) {
                            i.settings.submitHandler && (i.submitButton = e.target), t(e.target).hasClass("cancel") && (i.cancelSubmit = !0), void 0 !== t(e.target).attr("formnovalidate") && (i.cancelSubmit = !0);
                        }),
                        this.submit(function (e) {
                            function s() {
                                var s;
                                return (
                                    !i.settings.submitHandler ||
                                    (i.submitButton && (s = t("<input type='hidden'/>").attr("name", i.submitButton.name).val(t(i.submitButton).val()).appendTo(i.currentForm)),
                                    i.settings.submitHandler.call(i, i.currentForm, e),
                                    i.submitButton && s.remove(),
                                    !1)
                                );
                            }
                            return i.settings.debug && e.preventDefault(), i.cancelSubmit ? ((i.cancelSubmit = !1), s()) : i.form() ? (i.pendingRequest ? ((i.formSubmitted = !0), !1) : s()) : (i.focusInvalid(), !1);
                        })),
                    i)
                );
            }
            e && e.debug && window.console && console.warn("Nothing selected, can't validate, returning nothing.");
        },
        valid: function () {
            if (t(this[0]).is("form")) return this.validate().form();
            var e = !0,
                i = t(this[0].form).validate();
            return (
                this.each(function () {
                    e = e && i.element(this);
                }),
                e
            );
        },
        removeAttrs: function (e) {
            var i = {},
                s = this;
            return (
                t.each(e.split(/\s/), function (t, e) {
                    (i[e] = s.attr(e)), s.removeAttr(e);
                }),
                i
            );
        },
        rules: function (e, i) {
            var s = this[0];
            if (e) {
                var r = t.data(s.form, "validator").settings,
                    n = r.rules,
                    a = t.validator.staticRules(s);
                switch (e) {
                    case "add":
                        t.extend(a, t.validator.normalizeRule(i)), delete a.messages, (n[s.name] = a), i.messages && (r.messages[s.name] = t.extend(r.messages[s.name], i.messages));
                        break;
                    case "remove":
                        if (!i) return delete n[s.name], a;
                        var o = {};
                        return (
                            t.each(i.split(/\s/), function (t, e) {
                                (o[e] = a[e]), delete a[e];
                            }),
                            o
                        );
                }
            }
            var u = t.validator.normalizeRules(t.extend({}, t.validator.classRules(s), t.validator.attributeRules(s), t.validator.dataRules(s), t.validator.staticRules(s)), s);
            if (u.required) {
                var l = u.required;
                delete u.required, (u = t.extend({ required: l }, u));
            }
            return u;
        },
    }),
        t.extend(t.expr[":"], {
            blank: function (e) {
                return !t.trim("" + t(e).val());
            },
            filled: function (e) {
                return !!t.trim("" + t(e).val());
            },
            unchecked: function (e) {
                return !t(e).prop("checked");
            },
        }),
        (t.validator = function (e, i) {
            (this.settings = t.extend(!0, {}, t.validator.defaults, e)), (this.currentForm = i), this.init();
        }),
        (t.validator.format = function (e, i) {
            return 1 === arguments.length
                ? function () {
                      var i = t.makeArray(arguments);
                      return i.unshift(e), t.validator.format.apply(this, i);
                  }
                : (arguments.length > 2 && i.constructor !== Array && (i = t.makeArray(arguments).slice(1)),
                  i.constructor !== Array && (i = [i]),
                  t.each(i, function (t, i) {
                      e = e.replace(RegExp("\\{" + t + "\\}", "g"), function () {
                          return i;
                      });
                  }),
                  e);
        }),
        t.extend(t.validator, {
            defaults: {
                messages: {},
                groups: {},
                rules: {},
                errorClass: "error",
                validClass: "valid",
                errorElement: "label",
                focusInvalid: !0,
                errorContainer: t([]),
                errorLabelContainer: t([]),
                onsubmit: !0,
                ignore: ":hidden",
                ignoreTitle: !1,
                onfocusin: function (t) {
                    (this.lastActive = t),
                        this.settings.focusCleanup &&
                            !this.blockFocusCleanup &&
                            (this.settings.unhighlight && this.settings.unhighlight.call(this, t, this.settings.errorClass, this.settings.validClass), this.addWrapper(this.errorsFor(t)).hide());
                },
                onfocusout: function (t) {
                    this.checkable(t) || (!(t.name in this.submitted) && this.optional(t)) || this.element(t);
                },
                onkeyup: function (t, e) {
                    (9 !== e.which || "" !== this.elementValue(t)) && (t.name in this.submitted || t === this.lastElement) && this.element(t);
                },
                onclick: function (t) {
                    t.name in this.submitted ? this.element(t) : t.parentNode.name in this.submitted && this.element(t.parentNode);
                },
                highlight: function (e, i, s) {
                    "radio" === e.type ? this.findByName(e.name).addClass(i).removeClass(s) : t(e).addClass(i).removeClass(s);
                },
                unhighlight: function (e, i, s) {
                    "radio" === e.type ? this.findByName(e.name).removeClass(i).addClass(s) : t(e).removeClass(i).addClass(s);
                },
            },
            setDefaults: function (e) {
                t.extend(t.validator.defaults, e);
            },
            messages: {
                required: "",
                remote: "Please fix this field.",
                email: "Please enter a valid email address.",
                url: "Please enter a valid URL.",
                date: "Please enter a valid date.",
                dateISO: "Please enter a valid date (ISO).",
                number: "Please enter a valid number.",
                digits: "Please enter only digits.",
                creditcard: "Please enter a valid credit card number.",
                equalTo: "Please enter the same value again.",
                maxlength: t.validator.format("Please enter no more than {0} characters."),
                minlength: t.validator.format("Please enter at least {0} characters."),
                rangelength: t.validator.format("Please enter a value between {0} and {1} characters long."),
                range: t.validator.format("Please enter a value between {0} and {1}."),
                max: t.validator.format("Please enter a value less than or equal to {0}."),
                min: t.validator.format("Please enter a value greater than or equal to {0}."),
            },
            autoCreateRanges: !1,
            prototype: {
                init: function () {
                    function e(e) {
                        var i = t.data(this[0].form, "validator"),
                            s = "on" + e.type.replace(/^validate/, "");
                        i.settings[s] && i.settings[s].call(i, this[0], e);
                    }
                    (this.labelContainer = t(this.settings.errorLabelContainer)),
                        (this.errorContext = (this.labelContainer.length && this.labelContainer) || t(this.currentForm)),
                        (this.containers = t(this.settings.errorContainer).add(this.settings.errorLabelContainer)),
                        (this.submitted = {}),
                        (this.valueCache = {}),
                        (this.pendingRequest = 0),
                        (this.pending = {}),
                        (this.invalid = {}),
                        this.reset();
                    var i = (this.groups = {});
                    t.each(this.settings.groups, function (e, s) {
                        "string" == typeof s && (s = s.split(/\s/)),
                            t.each(s, function (t, s) {
                                i[s] = e;
                            });
                    });
                    var s = this.settings.rules;
                    t.each(s, function (e, i) {
                        s[e] = t.validator.normalizeRule(i);
                    }),
                        t(this.currentForm)
                            .validateDelegate(
                                ":text, [type='password'], [type='file'], select, textarea, [type='number'], [type='search'] ,[type='tel'], [type='url'], [type='email'], [type='datetime'], [type='date'], [type='month'], [type='week'], [type='time'], [type='datetime-local'], [type='range'], [type='color'] ",
                                "focusin focusout keyup",
                                e
                            )
                            .validateDelegate("[type='radio'], [type='checkbox'], select, option", "click", e),
                        this.settings.invalidHandler && t(this.currentForm).bind("invalid-form.validate", this.settings.invalidHandler);
                },
                form: function () {
                    return this.checkForm(), t.extend(this.submitted, this.errorMap), (this.invalid = t.extend({}, this.errorMap)), this.valid() || t(this.currentForm).triggerHandler("invalid-form", [this]), this.showErrors(), this.valid();
                },
                checkForm: function () {
                    this.prepareForm();
                    for (var t = 0, e = (this.currentElements = this.elements()); e[t]; t++) this.check(e[t]);
                    return this.valid();
                },
                element: function (e) {
                    (e = this.validationTargetFor(this.clean(e))), (this.lastElement = e), this.prepareElement(e), (this.currentElements = t(e));
                    var i = !1 !== this.check(e);
                    return i ? delete this.invalid[e.name] : (this.invalid[e.name] = !0), this.numberOfInvalids() || (this.toHide = this.toHide.add(this.containers)), this.showErrors(), i;
                },
                showErrors: function (e) {
                    if (e) {
                        t.extend(this.errorMap, e), (this.errorList = []);
                        for (var i in e) this.errorList.push({ message: e[i], element: this.findByName(i)[0] });
                        this.successList = t.grep(this.successList, function (t) {
                            return !(t.name in e);
                        });
                    }
                    this.settings.showErrors ? this.settings.showErrors.call(this, this.errorMap, this.errorList) : this.defaultShowErrors();
                },
                resetForm: function () {
                    t.fn.resetForm && t(this.currentForm).resetForm(),
                        (this.submitted = {}),
                        (this.lastElement = null),
                        this.prepareForm(),
                        this.hideErrors(),
                        this.elements().removeClass(this.settings.errorClass).removeData("previousValue");
                },
                numberOfInvalids: function () {
                    return this.objectLength(this.invalid);
                },
                objectLength: function (t) {
                    var e = 0;
                    for (var i in t) e++;
                    return e;
                },
                hideErrors: function () {
                    this.addWrapper(this.toHide).hide();
                },
                valid: function () {
                    return 0 === this.size();
                },
                size: function () {
                    return this.errorList.length;
                },
                focusInvalid: function () {
                    if (this.settings.focusInvalid)
                        try {
                            t(this.findLastActive() || (this.errorList.length && this.errorList[0].element) || [])
                                .filter(":visible")
                                .focus()
                                .trigger("focusin");
                        } catch (t) {}
                },
                findLastActive: function () {
                    var e = this.lastActive;
                    return (
                        e &&
                        1 ===
                            t.grep(this.errorList, function (t) {
                                return t.element.name === e.name;
                            }).length &&
                        e
                    );
                },
                elements: function () {
                    var e = this,
                        i = {};
                    return t(this.currentForm)
                        .find("input, select, textarea")
                        .not(":submit, :reset, :image, [disabled]")
                        .not(this.settings.ignore)
                        .filter(function () {
                            return !this.name && e.settings.debug && window.console && console.error("%o has no name assigned", this), !(this.name in i || !e.objectLength(t(this).rules())) && ((i[this.name] = !0), !0);
                        });
                },
                clean: function (e) {
                    return t(e)[0];
                },
                errors: function () {
                    var e = this.settings.errorClass.replace(" ", ".");
                    return t(this.settings.errorElement + "." + e, this.errorContext);
                },
                reset: function () {
                    (this.successList = []), (this.errorList = []), (this.errorMap = {}), (this.toShow = t([])), (this.toHide = t([])), (this.currentElements = t([]));
                },
                prepareForm: function () {
                    this.reset(), (this.toHide = this.errors().add(this.containers));
                },
                prepareElement: function (t) {
                    this.reset(), (this.toHide = this.errorsFor(t));
                },
                elementValue: function (e) {
                    var i = t(e).attr("type"),
                        s = t(e).val();
                    return "radio" === i || "checkbox" === i ? t("input[name='" + t(e).attr("name") + "']:checked").val() : "string" == typeof s ? s.replace(/\r/g, "") : s;
                },
                check: function (e) {
                    e = this.validationTargetFor(this.clean(e));
                    var i,
                        s = t(e).rules(),
                        r = !1,
                        n = this.elementValue(e);
                    for (var a in s) {
                        var o = { method: a, parameters: s[a] };
                        try {
                            if ("dependency-mismatch" === (i = t.validator.methods[a].call(this, n, e, o.parameters))) {
                                r = !0;
                                continue;
                            }
                            if (((r = !1), "pending" === i)) return void (this.toHide = this.toHide.not(this.errorsFor(e)));
                            if (!i) return this.formatAndAdd(e, o), !1;
                        } catch (t) {
                            throw (this.settings.debug && window.console && console.log("Exception occurred when checking element " + e.id + ", check the '" + o.method + "' method.", t), t);
                        }
                    }
                    return r ? void 0 : (this.objectLength(s) && this.successList.push(e), !0);
                },
                customDataMessage: function (e, i) {
                    return t(e).data("msg-" + i.toLowerCase()) || (e.attributes && t(e).attr("data-msg-" + i.toLowerCase()));
                },
                customMessage: function (t, e) {
                    var i = this.settings.messages[t];
                    return i && (i.constructor === String ? i : i[e]);
                },
                findDefined: function () {
                    for (var t = 0; arguments.length > t; t++) if (void 0 !== arguments[t]) return arguments[t];
                },
                defaultMessage: function (e, i) {
                    return this.findDefined(
                        this.customMessage(e.name, i),
                        this.customDataMessage(e, i),
                        (!this.settings.ignoreTitle && e.title) || void 0,
                        t.validator.messages[i],
                        "<strong>Warning: No message defined for " + e.name + "</strong>"
                    );
                },
                formatAndAdd: function (e, i) {
                    var s = this.defaultMessage(e, i.method),
                        r = /\$?\{(\d+)\}/g;
                    "function" == typeof s ? (s = s.call(this, i.parameters, e)) : r.test(s) && (s = t.validator.format(s.replace(r, "{$1}"), i.parameters)),
                        this.errorList.push({ message: s, element: e }),
                        (this.errorMap[e.name] = s),
                        (this.submitted[e.name] = s);
                },
                addWrapper: function (t) {
                    return this.settings.wrapper && (t = t.add(t.parent(this.settings.wrapper))), t;
                },
                defaultShowErrors: function () {
                    var t, e;
                    for (t = 0; this.errorList[t]; t++) {
                        var i = this.errorList[t];
                        this.settings.highlight && this.settings.highlight.call(this, i.element, this.settings.errorClass, this.settings.validClass), this.showLabel(i.element, i.message);
                    }
                    if ((this.errorList.length && (this.toShow = this.toShow.add(this.containers)), this.settings.success)) for (t = 0; this.successList[t]; t++) this.showLabel(this.successList[t]);
                    if (this.settings.unhighlight) for (t = 0, e = this.validElements(); e[t]; t++) this.settings.unhighlight.call(this, e[t], this.settings.errorClass, this.settings.validClass);
                    (this.toHide = this.toHide.not(this.toShow)), this.hideErrors(), this.addWrapper(this.toShow).show();
                },
                validElements: function () {
                    return this.currentElements.not(this.invalidElements());
                },
                invalidElements: function () {
                    return t(this.errorList).map(function () {
                        return this.element;
                    });
                },
                showLabel: function (e, i) {
                    var s = this.errorsFor(e);
                    s.length
                        ? (s.removeClass(this.settings.validClass).addClass(this.settings.errorClass), s.html(i))
                        : ((s = t("<" + this.settings.errorElement + ">")
                              .attr("for", this.idOrName(e))
                              .addClass(this.settings.errorClass)
                              .html(i || "")),
                          this.settings.wrapper &&
                              (s = s
                                  .hide()
                                  .show()
                                  .wrap("<" + this.settings.wrapper + "/>")
                                  .parent()),
                          this.labelContainer.append(s).length || (this.settings.errorPlacement ? this.settings.errorPlacement(s, t(e)) : s.insertAfter(e))),
                        !i && this.settings.success && (s.text(""), "string" == typeof this.settings.success ? s.addClass(this.settings.success) : this.settings.success(s, e)),
                        (this.toShow = this.toShow.add(s));
                },
                errorsFor: function (e) {
                    var i = this.idOrName(e);
                    return this.errors().filter(function () {
                        return t(this).attr("for") === i;
                    });
                },
                idOrName: function (t) {
                    return this.groups[t.name] || (this.checkable(t) ? t.name : t.id || t.name);
                },
                validationTargetFor: function (t) {
                    return this.checkable(t) && (t = this.findByName(t.name).not(this.settings.ignore)[0]), t;
                },
                checkable: function (t) {
                    return /radio|checkbox/i.test(t.type);
                },
                findByName: function (e) {
                    return t(this.currentForm).find("[name='" + e + "']");
                },
                getLength: function (e, i) {
                    switch (i.nodeName.toLowerCase()) {
                        case "select":
                            return t("option:selected", i).length;
                        case "input":
                            if (this.checkable(i)) return this.findByName(i.name).filter(":checked").length;
                    }
                    return e.length;
                },
                depend: function (t, e) {
                    return !this.dependTypes[typeof t] || this.dependTypes[typeof t](t, e);
                },
                dependTypes: {
                    boolean: function (t) {
                        return t;
                    },
                    string: function (e, i) {
                        return !!t(e, i.form).length;
                    },
                    function: function (t, e) {
                        return t(e);
                    },
                },
                optional: function (e) {
                    var i = this.elementValue(e);
                    return !t.validator.methods.required.call(this, i, e) && "dependency-mismatch";
                },
                startRequest: function (t) {
                    this.pending[t.name] || (this.pendingRequest++, (this.pending[t.name] = !0));
                },
                stopRequest: function (e, i) {
                    this.pendingRequest--,
                        0 > this.pendingRequest && (this.pendingRequest = 0),
                        delete this.pending[e.name],
                        i && 0 === this.pendingRequest && this.formSubmitted && this.form()
                            ? (t(this.currentForm).submit(), (this.formSubmitted = !1))
                            : !i && 0 === this.pendingRequest && this.formSubmitted && (t(this.currentForm).triggerHandler("invalid-form", [this]), (this.formSubmitted = !1));
                },
                previousValue: function (e) {
                    return t.data(e, "previousValue") || t.data(e, "previousValue", { old: null, valid: !0, message: this.defaultMessage(e, "remote") });
                },
            },
            classRuleSettings: { required: { required: !0 }, email: { email: !0 }, url: { url: !0 }, date: { date: !0 }, dateISO: { dateISO: !0 }, number: { number: !0 }, digits: { digits: !0 }, creditcard: { creditcard: !0 } },
            addClassRules: function (e, i) {
                e.constructor === String ? (this.classRuleSettings[e] = i) : t.extend(this.classRuleSettings, e);
            },
            classRules: function (e) {
                var i = {},
                    s = t(e).attr("class");
                return (
                    s &&
                        t.each(s.split(" "), function () {
                            this in t.validator.classRuleSettings && t.extend(i, t.validator.classRuleSettings[this]);
                        }),
                    i
                );
            },
            attributeRules: function (e) {
                var i = {},
                    s = t(e),
                    r = s[0].getAttribute("type");
                for (var n in t.validator.methods) {
                    var a;
                    "required" === n ? ("" === (a = s.get(0).getAttribute(n)) && (a = !0), (a = !!a)) : (a = s.attr(n)),
                        /min|max/.test(n) && (null === r || /number|range|text/.test(r)) && (a = Number(a)),
                        a ? (i[n] = a) : r === n && "range" !== r && (i[n] = !0);
                }
                return i.maxlength && /-1|2147483647|524288/.test(i.maxlength) && delete i.maxlength, i;
            },
            dataRules: function (e) {
                var i,
                    s,
                    r = {},
                    n = t(e);
                for (i in t.validator.methods) (s = n.data("rule-" + i.toLowerCase())), void 0 !== s && (r[i] = s);
                return r;
            },
            staticRules: function (e) {
                var i = {},
                    s = t.data(e.form, "validator");
                return s.settings.rules && (i = t.validator.normalizeRule(s.settings.rules[e.name]) || {}), i;
            },
            normalizeRules: function (e, i) {
                return (
                    t.each(e, function (s, r) {
                        if (!1 !== r) {
                            if (r.param || r.depends) {
                                var n = !0;
                                switch (typeof r.depends) {
                                    case "string":
                                        n = !!t(r.depends, i.form).length;
                                        break;
                                    case "function":
                                        n = r.depends.call(i, i);
                                }
                                n ? (e[s] = void 0 === r.param || r.param) : delete e[s];
                            }
                        } else delete e[s];
                    }),
                    t.each(e, function (s, r) {
                        e[s] = t.isFunction(r) ? r(i) : r;
                    }),
                    t.each(["minlength", "maxlength"], function () {
                        e[this] && (e[this] = Number(e[this]));
                    }),
                    t.each(["rangelength", "range"], function () {
                        var i;
                        e[this] && (t.isArray(e[this]) ? (e[this] = [Number(e[this][0]), Number(e[this][1])]) : "string" == typeof e[this] && ((i = e[this].split(/[\s,]+/)), (e[this] = [Number(i[0]), Number(i[1])])));
                    }),
                    t.validator.autoCreateRanges &&
                        (e.min && e.max && ((e.range = [e.min, e.max]), delete e.min, delete e.max), e.minlength && e.maxlength && ((e.rangelength = [e.minlength, e.maxlength]), delete e.minlength, delete e.maxlength)),
                    e
                );
            },
            normalizeRule: function (e) {
                if ("string" == typeof e) {
                    var i = {};
                    t.each(e.split(/\s/), function () {
                        i[this] = !0;
                    }),
                        (e = i);
                }
                return e;
            },
            addMethod: function (e, i, s) {
                (t.validator.methods[e] = i), (t.validator.messages[e] = void 0 !== s ? s : t.validator.messages[e]), 3 > i.length && t.validator.addClassRules(e, t.validator.normalizeRule(e));
            },
            methods: {
                required: function (e, i, s) {
                    if (!this.depend(s, i)) return "dependency-mismatch";
                    if ("select" === i.nodeName.toLowerCase()) {
                        var r = t(i).val();
                        return r && r.length > 0;
                    }
                    return this.checkable(i) ? this.getLength(e, i) > 0 : t.trim(e).length > 0;
                },
                email: function (t, e) {
                    return (
                        this.optional(e) ||
                        /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))$/i.test(
                            t
                        )
                    );
                },
                url: function (t, e) {
                    return (
                        this.optional(e) ||
                        /^(https?|s?ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(
                            t
                        )
                    );
                },
                date: function (t, e) {
                    return this.optional(e) || !/Invalid|NaN/.test("" + new Date(t));
                },
                dateISO: function (t, e) {
                    return this.optional(e) || /^\d{4}[\/\-]\d{1,2}[\/\-]\d{1,2}$/.test(t);
                },
                number: function (t, e) {
                    return this.optional(e) || /^-?(?:\d+|\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/.test(t);
                },
                digits: function (t, e) {
                    return this.optional(e) || /^\d+$/.test(t);
                },
                creditcard: function (t, e) {
                    if (this.optional(e)) return "dependency-mismatch";
                    if (/[^0-9 \-]+/.test(t)) return !1;
                    for (var i = 0, s = 0, r = !1, n = (t = t.replace(/\D/g, "")).length - 1; n >= 0; n--) {
                        var a = t.charAt(n);
                        (s = parseInt(a, 10)), r && (s *= 2) > 9 && (s -= 9), (i += s), (r = !r);
                    }
                    return 0 == i % 10;
                },
                minlength: function (e, i, s) {
                    var r = t.isArray(e) ? e.length : this.getLength(t.trim(e), i);
                    return this.optional(i) || r >= s;
                },
                maxlength: function (e, i, s) {
                    var r = t.isArray(e) ? e.length : this.getLength(t.trim(e), i);
                    return this.optional(i) || s >= r;
                },
                rangelength: function (e, i, s) {
                    var r = t.isArray(e) ? e.length : this.getLength(t.trim(e), i);
                    return this.optional(i) || (r >= s[0] && s[1] >= r);
                },
                min: function (t, e, i) {
                    return this.optional(e) || t >= i;
                },
                max: function (t, e, i) {
                    return this.optional(e) || i >= t;
                },
                range: function (t, e, i) {
                    return this.optional(e) || (t >= i[0] && i[1] >= t);
                },
                equalTo: function (e, i, s) {
                    var r = t(s);
                    return (
                        this.settings.onfocusout &&
                            r.unbind(".validate-equalTo").bind("blur.validate-equalTo", function () {
                                t(i).valid();
                            }),
                        e === r.val()
                    );
                },
                remote: function (e, i, s) {
                    if (this.optional(i)) return "dependency-mismatch";
                    var r = this.previousValue(i);
                    if (
                        (this.settings.messages[i.name] || (this.settings.messages[i.name] = {}),
                        (r.originalMessage = this.settings.messages[i.name].remote),
                        (this.settings.messages[i.name].remote = r.message),
                        (s = ("string" == typeof s && { url: s }) || s),
                        r.old === e)
                    )
                        return r.valid;
                    r.old = e;
                    var n = this;
                    this.startRequest(i);
                    var a = {};
                    return (
                        (a[i.name] = e),
                        t.ajax(
                            t.extend(
                                !0,
                                {
                                    url: s,
                                    mode: "abort",
                                    port: "validate" + i.name,
                                    dataType: "json",
                                    data: a,
                                    success: function (s) {
                                        n.settings.messages[i.name].remote = r.originalMessage;
                                        var a = !0 === s || "true" === s;
                                        if (a) {
                                            var o = n.formSubmitted;
                                            n.prepareElement(i), (n.formSubmitted = o), n.successList.push(i), delete n.invalid[i.name], n.showErrors();
                                        } else {
                                            var u = {},
                                                l = s || n.defaultMessage(i, "remote");
                                            (u[i.name] = r.message = t.isFunction(l) ? l(e) : l), (n.invalid[i.name] = !0), n.showErrors(u);
                                        }
                                        (r.valid = a), n.stopRequest(i, a);
                                    },
                                },
                                s
                            )
                        ),
                        "pending"
                    );
                },
            },
        }),
        (t.format = t.validator.format);
})(jQuery),
    (function (t) {
        var e = {};
        if (t.ajaxPrefilter)
            t.ajaxPrefilter(function (t, i, s) {
                var r = t.port;
                "abort" === t.mode && (e[r] && e[r].abort(), (e[r] = s));
            });
        else {
            var i = t.ajax;
            t.ajax = function (s) {
                var r = ("mode" in s ? s : t.ajaxSettings).mode,
                    n = ("port" in s ? s : t.ajaxSettings).port;
                return "abort" === r ? (e[n] && e[n].abort(), (e[n] = i.apply(this, arguments)), e[n]) : i.apply(this, arguments);
            };
        }
    })(jQuery),
    (function (t) {
        t.extend(t.fn, {
            validateDelegate: function (e, i, s) {
                return this.bind(i, function (i) {
                    var r = t(i.target);
                    return r.is(e) ? s.apply(r, arguments) : void 0;
                });
            },
        });
    })(jQuery);
