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