(function (e) { function g(a, b, c) { a.rules[b] = c; if (a.message) a.messages[b] = a.message } function i(a, b) { a.indexOf("*.") === 0 && (a = a.replace("*.", b)); return a } function m(a, b) { var c = e(this).find("[data-valmsg-for='" + b[0].name + "']"), h = e.parseJSON(c.attr("data-valmsg-replace")) !== !1; c.removeClass("field-validation-valid").addClass("field-validation-error"); a.data("unobtrusiveContainer", c); h ? (c.empty(), a.removeClass("input-validation-error").appendTo(c)) : a.hide() } function n(a, b) { var c = e(this).find("[data-valmsg-summary=true]"), h = c.find("ul"); h && h.length && b.errorList.length && (h.empty(), c.addClass("validation-summary-errors").removeClass("validation-summary-valid"), e.each(b.errorList, function () { e("<li />").html(this.message).appendTo(h) })) } function o(a) { var b = a.data("unobtrusiveContainer"), c = e.parseJSON(b.attr("data-valmsg-replace")); b && (b.addClass("field-validation-valid").removeClass("field-validation-error"), a.removeData("unobtrusiveContainer"), c && b.empty()) } function j(a) { var b = e(a), c = b.data(k); c || (c = { options: { errorClass: "input-validation-error", errorElement: "span", errorPlacement: e.proxy(m, a), invalidHandler: e.proxy(n, a), messages: {}, rules: {}, success: e.proxy(o, a) }, attachValidation: function () { b.validate(this.options) }, validate: function () { b.validate(); return b.valid() } }, b.data(k, c)); return c } var f = e.validator, d, k = "unobtrusiveValidation"; f.unobtrusive = { adapters: [], parseElement: function (a, b) { var c = e(a), h = c.parents("form")[0], d, g, l; h && (d = j(h), d.options.rules[a.name] = g = {}, d.options.messages[a.name] = l = {}, e.each(this.adapters, function () { var b = "data-val-" + this.name, d = c.attr(b), f = {}; d !== void 0 && (b += "-", e.each(this.params, function () { f[this] = c.attr(b + this) }), this.adapt({ element: a, form: h, message: d, params: f, rules: g, messages: l })) }), jQuery.extend(g, { __dummy__: !0 }), b || d.attachValidation()) }, parse: function (a) { e(a).find(":input[data-val=true]").each(function () { f.unobtrusive.parseElement(this, !0) }); e("form").each(function () { var a = j(this); a && a.attachValidation() }) } }; d = f.unobtrusive.adapters; d.add = function (a, b, c) { c || (c = b, b = []); this.push({ name: a, params: b, adapt: c }); return this }; d.addBool = function (a, b) { return this.add(a, function (c) { g(c, b || a, !0) }) }; d.addMinMax = function (a, b, c, e, d, f) { return this.add(a, [d || "min", f || "max"], function (a) { var d = a.params.min, f = a.params.max; d && f ? g(a, e, [d, f]) : d ? g(a, b, d) : f && g(a, c, f) }) }; d.addSingleVal = function (a, b, c) { return this.add(a, [b || "val"], function (d) { g(d, c || a, d.params[b]) }) }; f.addMethod("__dummy__", function () { return !0 }); f.addMethod("regex", function (a, b, c) { if (this.optional(b)) return !0; return (b = RegExp(c).exec(a)) && b.index === 0 && b[0].length === a.length }); d.addSingleVal("accept", "exts").addSingleVal("regex", "pattern"); d.addBool("creditcard").addBool("date").addBool("digits").addBool("email").addBool("number").addBool("url"); d.addMinMax("length", "minlength", "maxlength", "rangelength").addMinMax("range", "min", "max", "range"); d.add("equalto", ["other"], function (a) { var b = a.element.name.substr(0, a.element.name.lastIndexOf(".") + 1), b = i(a.params.other, b), b = e(a.form).find(":input[name=" + b.replace(".", "\\.") + "]")[0]; g(a, "equalTo", b) }); d.add("required", function (a) { (a.element.tagName.toUpperCase() !== "INPUT" || a.element.type.toUpperCase() !== "CHECKBOX") && g(a, "required", !0) }); d.add("remote", ["url", "type", "additionalfields"], function (a) { var b = { url: a.params.url, type: a.params.type || "GET", data: {} }, c = a.element.name.substr(0, a.element.name.lastIndexOf(".") + 1); e.each((a.params.additionalfields || a.element.name).replace(/^\s+|\s+$/g, "").split(/\s*,\s*/g), function (d, f) { var g = i(f, c); b.data[g] = function () { return e(a.form).find(":input[name='" + g.replace(".", "\\.") + "']").val() } }); g(a, "remote", b) }); e(function () { f.unobtrusive.parse(document) }) })(jQuery);
