/*! * Validator v0.7.2 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 d = a(this), e = a.extend({}, c.DEFAULTS, d.data(), "object" == typeof b && b), f = d.data("bs.validator"); (f || "destroy" != b) && (f || d.data("bs.validator", f = new c(this, e)), "string" == typeof b && f[b]()) }) } var c = function (b, c) { this.$element = a(b), this.options = c, 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") }) }) }; c.DEFAULTS = { delay: 500, html: !1, disable: !0, errors: {match: "Does not match", minlength: "Not long enough"} }, c.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 } }, c.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]})) }) } }, c.prototype.runValidators = function (b) { function d(a) { return b.data(a + "-error") || b.data("error") || "native" == a && b[0].validationMessage || g.errors[a] } var e = [], f = ([c.VALIDATORS['native'] ], 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(c.VALIDATORS, a.proxy(function (a, c) { if ((b.data(a) || "native" == a) && !c.call(this, b)) { var f = d(a); !~e.indexOf(f) && e.push(f) } }, this)), !e.length && b.val() && b.data("remote") ? this.defer(b, function () { var c = {}; c[b.attr("name")] = b.val(), a.get(b.data("remote"), c).fail(function (a, b, c) { e.push(d("remote") || c) }).always(function () { f.resolve(e) }) }) : f.resolve(e), f.promise() }, c.prototype.validate = function () { var a = this.options.delay; return this.options.delay = 0, this.$element.find(":input").trigger("input.bs.validator"), this.options.delay = a, this }, c.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 = b.data("bs.validator.errors"); f.length && (f = a("