+function(n){"use strict";function i(t){return t.is('[type="checkbox"]')?t.prop("checked"):t.is('[type="radio"]')?!!n('[name="'+t.attr("name")+'"]:checked').length:n.trim(t.val())}function r(i){return this.each(function(){var u=n(this),f=n.extend({},t.DEFAULTS,u.data(),"object"==typeof i&&i),r=u.data("bs.validator");(r||"destroy"!=i)&&(r||u.data("bs.validator",r=new t(this,f)),"string"==typeof i&&r[i]())})}var t=function(r,u){this.options=u;this.$element=n(r);this.$inputs=this.$element.find(t.INPUT_SELECTOR);this.$btn=n('button[type="submit"], input[type="submit"]').filter('[form="'+this.$element.attr("id")+'"]').add(this.$element.find('input[type="submit"], button[type="submit"]'));u.errors=n.extend({},t.DEFAULTS.errors,u.errors);for(var f in u.custom)if(!u.errors[f])throw new Error("Missing default error message for custom validator: "+f);n.extend(t.VALIDATORS,u.custom);this.$element.attr("novalidate",!0);this.toggleSubmit();this.$element.on("input.bs.validator change.bs.validator focusout.bs.validator",t.INPUT_SELECTOR,n.proxy(this.onInput,this));this.$element.on("submit.bs.validator",n.proxy(this.onSubmit,this));this.$element.find("[data-match]").each(function(){var t=n(this),r=t.data("match");n(r).on("input.bs.validator",function(){i(t)&&t.trigger("input.bs.validator")})})},u;t.INPUT_SELECTOR=':input:not([type="submit"], button):enabled:visible';t.FOCUS_OFFSET=20;t.DEFAULTS={delay:500,html:!1,disable:!0,focus:!0,custom:{},errors:{match:"Does not match",minlength:"Not long enough"},feedback:{success:"glyphicon-ok",error:"glyphicon-remove"}};t.VALIDATORS={"native":function(n){var t=n[0];return t.checkValidity?t.checkValidity():!0},match:function(t){var i=t.data("match");return!t.val()||t.val()===n(i).val()},minlength:function(n){var t=n.data("minlength");return!n.val()||n.val().length>=t}};t.prototype.onInput=function(t){var i=this,r=n(t.target),u="focusout"!==t.type;this.validateInput(r,u).done(function(){i.toggleSubmit()})};t.prototype.validateInput=function(t,r){var o=i(t),s=t.data("bs.validator.previous"),e=t.data("bs.validator.errors"),f,u;return s===o?n.Deferred().resolve():(t.data("bs.validator.previous",o),t.is('[type="radio"]')&&(t=this.$element.find('input[name="'+t.attr("name")+'"]')),f=n.Event("validate.bs.validator",{relatedTarget:t[0]}),(this.$element.trigger(f),!f.isDefaultPrevented())?(u=this,this.runValidators(t).done(function(i){t.data("bs.validator.errors",i);i.length?r?u.defer(t,u.showErrors):u.showErrors(t):u.clearErrors(t);e&&i.toString()===e.toString()||(f=i.length?n.Event("invalid.bs.validator",{relatedTarget:t[0],detail:i}):n.Event("valid.bs.validator",{relatedTarget:t[0],detail:e}),u.$element.trigger(f));u.toggleSubmit();u.$element.trigger(n.Event("validated.bs.validator",{relatedTarget:t[0]}))})):void 0)};t.prototype.runValidators=function(r){function e(n){return r.data(n+"-error")||r.data("error")||"native"==n&&r[0].validationMessage||o.errors[n]}var u=[],f=n.Deferred(),o=this.options;return r.data("bs.validator.deferred")&&r.data("bs.validator.deferred").reject(),r.data("bs.validator.deferred",f),n.each(t.VALIDATORS,n.proxy(function(n,t){if((i(r)||r.attr("required"))&&(r.data(n)||"native"==n)&&!t.call(this,r)){var f=e(n);~u.indexOf(f)||u.push(f)}},this)),!u.length&&i(r)&&r.data("remote")?this.defer(r,function(){var t={};t[r.attr("name")]=i(r);n.get(r.data("remote"),t).fail(function(n,t,i){u.push(e("remote")||i)}).always(function(){f.resolve(u)})}):f.resolve(u),f.promise()};t.prototype.validate=function(){var t=this;return n.when(this.$inputs.map(function(){return t.validateInput(n(this),!1)})).then(function(){t.toggleSubmit();t.focusError()}),this};t.prototype.focusError=function(){if(this.options.focus){var i=n(".has-error:first :input");0!==i.length&&(n(document.body).animate({scrollTop:i.offset().top-t.FOCUS_OFFSET},250),i.focus())}};t.prototype.showErrors=function(t){var e=this.options.html?"html":"text",r=t.data("bs.validator.errors"),i=t.closest(".form-group"),u=i.find(".help-block.with-errors"),f=i.find(".form-control-feedback");r.length&&(r=n("<ul/>").addClass("list-unstyled").append(n.map(r,function(t){return n("<li/>")[e](t)})),void 0===u.data("bs.validator.originalContent")&&u.data("bs.validator.originalContent",u.html()),u.empty().append(r),i.addClass("has-error has-danger"),i.hasClass("has-feedback")&&f.removeClass(this.options.feedback.success)&&f.addClass(this.options.feedback.error)&&i.removeClass("has-success"))};t.prototype.clearErrors=function(n){var t=n.closest(".form-group"),r=t.find(".help-block.with-errors"),u=t.find(".form-control-feedback");r.html(r.data("bs.validator.originalContent"));t.removeClass("has-error has-danger");t.hasClass("has-feedback")&&u.removeClass(this.options.feedback.error)&&i(n)&&u.addClass(this.options.feedback.success)&&t.addClass("has-success")};t.prototype.hasErrors=function(){function t(){return!!(n(this).data("bs.validator.errors")||[]).length}return!!this.$inputs.filter(t).length};t.prototype.isIncomplete=function(){function t(){return!i(n(this))}return!!this.$inputs.filter("[required]").filter(t).length};t.prototype.onSubmit=function(n){this.validate();(this.isIncomplete()||this.hasErrors())&&n.preventDefault()};t.prototype.toggleSubmit=function(){this.options.disable&&this.$btn.toggleClass("disabled",this.isIncomplete()||this.hasErrors())};t.prototype.defer=function(t,i){return i=n.proxy(i,this,t),this.options.delay?(window.clearTimeout(t.data("bs.validator.timeout")),void t.data("bs.validator.timeout",window.setTimeout(i,this.options.delay))):i()};t.prototype.destroy=function(){return this.$element.removeAttr("novalidate").removeData("bs.validator").off(".bs.validator").find(".form-control-feedback").removeClass([this.options.feedback.error,this.options.feedback.success].join(" ")),this.$inputs.off(".bs.validator").removeData(["bs.validator.errors","bs.validator.deferred","bs.validator.previous"]).each(function(){var t=n(this),i=t.data("bs.validator.timeout");window.clearTimeout(i)&&t.removeData("bs.validator.timeout")}),this.$element.find(".help-block.with-errors").each(function(){var t=n(this),i=t.data("bs.validator.originalContent");t.removeData("bs.validator.originalContent").html(i)}),this.$element.find('input[type="submit"], button[type="submit"]').removeClass("disabled"),this.$element.find(".has-error, .has-danger").removeClass("has-error has-danger"),this};u=n.fn.validator;n.fn.validator=r;n.fn.validator.Constructor=t;n.fn.validator.noConflict=function(){return n.fn.validator=u,this};n(window).on("load",function(){n('form[data-toggle="validator"]').each(function(){var t=n(this);r.call(t,t.data())})})}(jQuery)