!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("underscore"),require("backbone")):"function"==typeof define&&define.amd?define(["underscore","backbone"],e):(t.Backbone=t.Backbone||{},t.Backbone.Validation=e(t._,t.Backbone))}(this,function(t,e){"use strict";t=t&&t.hasOwnProperty("default")?t.default:t,e=e&&e.hasOwnProperty("default")?e.default:e;var i=function(e,n,u){return n=n||{},u=u||"",t.each(e,function(t,a){e.hasOwnProperty(a)&&(t&&"object"==typeof t&&t.constructor===Object&&i(t,n,u+a+"."),n[u+a]=t)}),n},n=function(e){return!(t.isNull(e)||t.isUndefined(e)||t.isString(e)&&""===u(e)||t.isArray(e)&&t.isEmpty(e))},u=String.prototype.trim?function(t){return t.trim()}:function(t){return t.toString().replace(/^\s+/,"").replace(/\s+$/,"")},a={forceUpdate:!1,setInvalidAttrs:!1,selector:"name",labelFormatter:"sentenceCase",valid:Function.prototype,invalid:Function.prototype};var r={none:function(t){return t},sentenceCase:function(t){return t.replace(/(?:^\w|[A-Z]|\b\w)/g,function(t,e){return 0===e?t.toUpperCase():" "+t.toLowerCase()}).replace(/_/g," ")},label:function(t,e){return e.labels&&e.labels[t]||r.sentenceCase(t,e)}},F={digits:/^\d+$/,number:/^-?(?:\d+|\d{1,3}(?:,\d{3})+)?(?:\.\d*)?$/,email:/^((([a-z]|\d|[\[\]()!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[\[\]()!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))$/i,url:/^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i},o={required:"{0} is required",acceptance:"{0} must be accepted",min:"{0} must be greater than or equal to {1}",max:"{0} must be less than or equal to {1}",range:"{0} must be between {1} and {2}",length:"{0} must be {1} characters",minLength:"{0} must be at least {1} characters",maxLength:"{0} must be at most {1} characters",rangeLength:"{0} must be between {1} and {2} characters",oneOf:"{0} must be one of: {1}",equalTo:"{0} must be the same as {1}",digits:"{0} must only contain digits",number:"{0} must be a number",email:"{0} must be a valid email",url:"{0} must be a valid url",inlinePattern:"{0} is invalid"},s=function(e){return t.isNumber(e)||t.isString(e)&&e.match(F.number)},d={fn:function(e,i,n,u,a){return t.isString(n)&&(n=u[n]),n.call(u,e,i,a)},required:function(e,i,u,a,r){var F=t.isFunction(u)?u.call(a,e,i,r):u;return!(!F&&!n(e))&&(F&&!n(e)?this.format(o.required,this.formatLabel(i,a)):void 0)},acceptance:function(e,i,n,u){if("true"!==e&&(!t.isBoolean(e)||!1===e))return this.format(o.acceptance,this.formatLabel(i,u))},min:function(t,e,i,n){if(!s(t)||ti)return this.format(o.max,this.formatLabel(e,n),i)},range:function(t,e,i,n){if(!s(t)||ti[1])return this.format(o.range,this.formatLabel(e,n),i[0],i[1])},length:function(e,i,n,u){if(!t.isString(e)||e.length!==n)return this.format(o.length,this.formatLabel(i,u),n)},minLength:function(e,i,n,u){if(!t.isString(e)||e.lengthn)return this.format(o.maxLength,this.formatLabel(i,u),n)},rangeLength:function(e,i,n,u){if(!t.isString(e)||e.lengthn[1])return this.format(o.rangeLength,this.formatLabel(i,u),n[0],n[1])},oneOf:function(e,i,n,u){if(!t.include(n,e))return this.format(o.oneOf,this.formatLabel(i,u),n.join(", "))},equalTo:function(t,e,i,n,u){if(t!==u[i])return this.format(o.equalTo,this.formatLabel(e,n),this.formatLabel(i,n))},pattern:function(t,e,i,u){if(!n(t)||!t.toString().match(F[i]||i))return this.format(o[i]||o.inlinePattern,this.formatLabel(e,u),i)}};Object.defineProperty(d,"format",{value:function(){var t=Array.prototype.slice.call(arguments);return t.shift().replace(/{(\d+)}/g,function(e,i){return void 0!==t[i]?t[i]:e})}}),Object.defineProperty(d,"formatLabel",{value:function(t,e){return r[a.labelFormatter](t,e)}});var c=function(e,i){var n=e.attributes;if(t.isFunction(n)?n=n(i):t.isString(n)&&t.isFunction(p[n])&&(n=p[n](i)),t.isArray(n))return n},l=function(e,i,n,u){return t.reduce(function(e,i){var n=e.validation&&t.result(e,"validation")[i]||{};return t.isArray(n)||(n=[n]),t.reduce(n,function(e,i){return(t.isFunction(i)||t.isString(i))&&(i={fn:i}),t.each(t.keys(i),function(t){"msg"!==t&&e.push({fn:d[t],val:i[t],msg:i.msg})}),e},[])}(e,i),function(a,r){var F=r.fn.call(d,n,i,r.val,e,u);return!1!==F&&!1!==a&&(F&&!a?t.result(r,"msg")||F:a)},"")},f=function(e,n){return{preValidate:function(e,i){var n,u=this,a={},r=t.extend({},this.attributes);return t.isObject(e)?(t.extend(r,e),t.each(e,function(t,e){(n=l(u,e,t,r))&&(a[e]=n)}),t.isEmpty(a)?void 0:a):l(this,e,i,r)},isValid:function(u){var a,r,F,o,s=this;return u=u||c(n,e),t.isString(u)?r=[u]:t.isArray(u)&&(r=u),r&&(a=i(s.attributes),t.each(r,function(e){(F=l(s,e,a[e],t.extend({},s.attributes)))&&((o=o||{})[e]=F),t.each(s.associatedViews,function(t){F?n.invalid(t,e,F,n.selector,s):n.valid(t,e,n.selector,s)})})),!0===u&&(o=this.validate()),o&&this.trigger("invalid",this,o,{validationError:o}),r?!o:!this.validation||this._isValid},validate:function(u,a){var r=this,F=!u,o=t.extend({},n,a),s=function(e,i){return i=i||t.keys(t.result(e,"validation")||{}),t.reduce(i,function(t,e){return t[e]=void 0,t},{})}(r,c(n,e)),d=t.extend({},s,r.attributes,u),f=i(d),m=u?i(u):f,h=function(e,i,n){var u,a={},r=!0;return t.each(n,function(t,n){(u=l(e,n,t,i))&&(a[n]=u,r=!1)}),{invalidAttrs:a,isValid:r}}(r,d,t.pick(f,t.keys(s)));if(r._isValid=h.isValid,t.each(r.associatedViews,function(e){t.each(s,function(t,i){var n=h.invalidAttrs.hasOwnProperty(i),u=m.hasOwnProperty(i);n||o.valid(e,i,o.selector,r),n&&(u||F)&&o.invalid(e,i,h.invalidAttrs[i],o.selector,r)})}),n.setInvalidAttrs&&(r.invalidAttrs=h.invalidAttrs),t.defer(function(){r.trigger("validated",r._isValid,r,h.invalidAttrs),r.trigger("validated:"+(r._isValid?"valid":"invalid"),r,h.invalidAttrs)}),!o.forceUpdate&&t.intersection(t.keys(h.invalidAttrs),t.keys(m)).length>0)return h.invalidAttrs}}},m=function(e,i,n){i.associatedViews?i.associatedViews.push(e):i.associatedViews=[e],t.extend(i,f(e,n))},h=function(e,i){i&&e.associatedViews&&e.associatedViews.length>1?e.associatedViews=t.without(e.associatedViews,i):(delete e.validate,delete e.preValidate,delete e.isValid,delete e.associatedViews)},b=function(t){m(this.view,t,this.options)},v=function(t){h(t)},D={version:"0.14.0",configure:function(e){t.extend(a,e)},bind:function(e,i){var n=(i=t.extend({},a,g,i)).model||e.model,u=i.collection||e.collection;if(void 0===n&&void 0===u)throw"Before you execute the binding your view must have a model or a collection.\nSee http://thedersen.com/projects/backbone-validation/#using-form-model-validation for more information.";n?m(e,n,i):u&&(u.each(function(t){m(e,t,i)}),u.bind("add",b,{view:e,options:i}),u.bind("remove",v))},unbind:function(e,i){var n=(i=t.extend({},i)).model||e.model,u=i.collection||e.collection;n?h(n,e):u&&(u.each(function(t){h(t,e)}),u.unbind("add",b),u.unbind("remove",v))},mixin:f(null,a)},g=D.callbacks={valid:function(t,e,i){t.$("["+i+'~="'+e+'"]').removeClass("invalid").removeAttr("data-error")},invalid:function(t,e,i,n){t.$("["+n+'~="'+e+'"]').addClass("invalid").attr("data-error",i)}},p=D.attributeLoaders={inputNames:function(t){var e=[];return t&&t.$("form [name]").each(function(){/^(?:input|select|textarea)$/i.test(this.nodeName)&&this.name&&"submit"!==this.type&&-1===e.indexOf(this.name)&&e.push(this.name)}),e}};return D.labelFormatters=r,D.messages=o,D.validators=d,D.patterns=F,e.Validation=D,D}); //# sourceMappingURL=backbone.validation.min.js.map