/*! * Validator v0.8.1 for Bootstrap 3, by @1000hz * Copyright 2015 Cina Saffary * Licensed under http://opensource.org/licenses/MIT * * https://github.com/1000hz/bootstrap-validator */ +function (a) { "use strict"; function b(b) { return this.each(function () { var c = a(this), e = a.extend({}, d.DEFAULTS, c.data(), "object" == typeof b && b), f = c.data("bs.validator"); (f || "destroy" != b) && (f || c.data("bs.validator", f = new d(this, e)), "string" == typeof b && f[b]()) }) } var c = ':input:not([type="submit"], button):enabled:visible', d = function (b, c) { this.$element = a(b), this.options = c, c.errors = a.extend({}, d.DEFAULTS.errors, c.errors); for (var e in c.custom) if (!c.errors[e]) throw new Error("Missing default error message for custom validator: " + e); a.extend(d.VALIDATORS, c.custom), this.$element.attr("novalidate", !0), this.toggleSubmit(), this.$element.on("input.bs.validator change.bs.validator focusout.bs.validator", a.proxy(this.validateInput, this)), this.$element.on("submit.bs.validator", a.proxy(this.onSubmit, this)), this.$element.find("[data-match]").each(function () { var b = a(this), c = b.data("match"); a(c).on("input.bs.validator", function () { b.val() && b.trigger("input.bs.validator") }) }) }; d.DEFAULTS = { delay: 500, html: !1, disable: !0, custom: {}, errors: {match: "Does not match", minlength: "Not long enough"}, feedback: {success: "glyphicon-ok", error: "glyphicon-warning-sign"} }, d.VALIDATORS = { "native": function (a) { var b = a[0]; return b.checkValidity ? b.checkValidity() : !0 }, match: function (b) { var c = b.data("match"); return !b.val() || b.val() === a(c).val() }, minlength: function (a) { var b = a.data("minlength"); return !a.val() || a.val().length >= b } }, d.prototype.validateInput = function (b) { var c = a(b.target), d = c.data("bs.validator.errors"); if (c.is('[type="radio"]') && (c = this.$element.find('input[name="' + c.attr("name") + '"]')), this.$element.trigger(b = a.Event("validate.bs.validator", {relatedTarget: c[0]})), !b.isDefaultPrevented()) { var e = this; this.runValidators(c).done(function (f) { c.data("bs.validator.errors", f), f.length ? e.showErrors(c) : e.clearErrors(c), d && f.toString() === d.toString() || (b = f.length ? a.Event("invalid.bs.validator", { relatedTarget: c[0], detail: f }) : a.Event("valid.bs.validator", { relatedTarget: c[0], detail: d }), e.$element.trigger(b)), e.toggleSubmit(), e.$element.trigger(a.Event("validated.bs.validator", {relatedTarget: c[0]})) }) } }, d.prototype.runValidators = function (b) { function c(a) { return b.data(a + "-error") || b.data("error") || "native" == a && b[0].validationMessage || g.errors[a] } var e = [], f = a.Deferred(), g = this.options; return b.data("bs.validator.deferred") && b.data("bs.validator.deferred").reject(), b.data("bs.validator.deferred", f), a.each(d.VALIDATORS, a.proxy(function (a, d) { if ((b.data(a) || "native" == a) && !d.call(this, b)) { var f = c(a); !~e.indexOf(f) && e.push(f) } }, this)), !e.length && b.val() && b.data("remote") ? this.defer(b, function () { var d = {}; d[b.attr("name")] = b.val(), a.get(b.data("remote"), d).fail(function (a, b, d) { e.push(c("remote") || d) }).always(function () { f.resolve(e) }) }) : f.resolve(e), f.promise() }, d.prototype.validate = function () { var a = this.options.delay; return this.options.delay = 0, this.$element.find(c).trigger("input.bs.validator"), this.options.delay = a, this }, d.prototype.showErrors = function (b) { var c = this.options.html ? "html" : "text"; this.defer(b, function () { var d = b.closest(".form-group"), e = d.find(".help-block.with-errors"), f = d.find(".form-control-feedback"), g = b.data("bs.validator.errors"); g.length && (g = a("