!function(n){"function"==typeof define&&define.amd?define(["jquery"],n):n("object"==typeof exports?require("jquery"):jQuery)}(function(n){var i,t=navigator.userAgent,u=/iphone/i.test(t),f=/chrome/i.test(t),r=/android/i.test(t);n.mask={definitions:{9:"[0-9]",a:"[A-Za-z]","*":"[A-Za-z0-9]"},autoclear:!0,dataName:"rawMaskFn",placeholder:"_"};n.fn.extend({caret:function(n,t){var i;if(0!==this.length&&!this.is(":hidden"))return"number"==typeof n?(t="number"==typeof t?t:n,this.each(function(){this.setSelectionRange?this.setSelectionRange(n,t):this.createTextRange&&(i=this.createTextRange(),i.collapse(!0),i.moveEnd("character",t),i.moveStart("character",n),i.select())})):(this[0].setSelectionRange?(n=this[0].selectionStart,t=this[0].selectionEnd):document.selection&&document.selection.createRange&&(i=document.selection.createRange(),n=0-i.duplicate().moveStart("character",-1e5),t=n+i.text.length),{begin:n,end:t})},unmask:function(){return this.trigger("unmask")},mask:function(t,e){var p,l,o,c,h,v,s,a,y;return!t&&this.length>0?(p=n(this[0]),y=p.data(n.mask.dataName),y?y():void 0):(e=n.extend({autoclear:n.mask.autoclear,placeholder:n.mask.placeholder,completed:null},e),l=n.mask.definitions,o=[],c=s=t.length,h=null,n.each(t.split(""),function(n,t){"?"==t?(s--,c=n):l[t]?(o.push(new RegExp(l[t])),null===h&&(h=o.length-1),c>n&&(v=o.length-1)):o.push(null)}),this.trigger("unmask").each(function(){function nt(){if(e.completed){for(var n=h;v>=n;n++)if(o[n]&&p[n]===w(n))return;e.completed.call(y)}}function w(n){return e.placeholder.charAt(n<e.placeholder.length?n:0)}function b(n){for(;++n<s&&!o[n];);return n}function ut(n){for(;--n>=0&&!o[n];);return n}function it(n,t){var r,i;if(!(0>n)){for(r=n,i=b(t);s>r;r++)if(o[r]){if(!(s>i&&o[r].test(p[i])))break;p[r]=p[i];p[i]=w(i);i=b(i)}d();y.caret(Math.max(h,n))}}function ft(n){for(var r,u,t=n,i=w(n);s>t;t++)if(o[t]){if(r=b(t),u=p[t],p[t]=i,!(s>r&&o[r].test(u)))break;i=u}}function et(){var t=y.val(),n=y.caret();if(a&&a.length&&a.length>t.length){for(k(!0);n.begin>0&&!o[n.begin-1];)n.begin--;if(0===n.begin)for(;n.begin<h&&!o[n.begin];)n.begin++;y.caret(n.begin,n.begin)}else{for(k(!0);n.begin<s&&!o[n.begin];)n.begin++;y.caret(n.begin,n.begin)}nt()}function rt(){k();y.val()!=tt&&y.change()}function ot(n){if(!y.prop("readonly")){var f,i,t,r=n.which||n.keyCode;a=y.val();8===r||46===r||u&&127===r?(f=y.caret(),i=f.begin,t=f.end,t-i==0&&(i=46!==r?ut(i):t=b(i-1),t=46===r?b(t):t),g(i,t),it(i,t-1),n.preventDefault()):13===r?rt.call(this,n):27===r&&(y.val(tt),y.caret(0,k()),n.preventDefault())}}function st(t){var u,e,h,f,i,c;y.prop("readonly")||(f=t.which||t.keyCode,i=y.caret(),t.ctrlKey||t.altKey||t.metaKey||32>f||!f||13===f||((i.end-i.begin!=0&&(g(i.begin,i.end),it(i.begin,i.end-1)),u=b(i.begin-1),s>u&&(e=String.fromCharCode(f),o[u].test(e)))&&((ft(u),p[u]=e,d(),h=b(u),r)?(c=function(){n.proxy(n.fn.caret,y,h)()},setTimeout(c,0)):y.caret(h),i.begin<=v&&nt()),t.preventDefault()))}function g(n,t){for(var i=n;t>i&&s>i;i++)o[i]&&(p[i]=w(i))}function d(){y.val(p.join(""))}function k(n){for(var f,r=y.val(),u=-1,t=0,i=0;s>t;t++)if(o[t]){for(p[t]=w(t);i++<r.length;)if(f=r.charAt(i-1),o[t].test(f)){p[t]=f;u=t;break}if(i>r.length){g(t+1,s);break}}else p[t]===r.charAt(i)&&i++,c>t&&(u=t);return n?d():c>u+1?e.autoclear||p.join("")===ht?(y.val()&&y.val(""),g(0,s)):d():(d(),y.val(y.val().substring(0,u+1))),c?t:h}var y=n(this),p=n.map(t.split(""),function(n,t){if("?"!=n)return l[n]?w(t):n}),ht=p.join(""),tt=y.val();y.data(n.mask.dataName,function(){return n.map(p,function(n,t){return o[t]&&n!=w(t)?n:null}).join("")});y.one("unmask",function(){y.off(".mask").removeData(n.mask.dataName)}).on("focus.mask",function(){if(!y.prop("readonly")){clearTimeout(i);var n;tt=y.val();n=k();i=setTimeout(function(){y.get(0)===document.activeElement&&(d(),n==t.replace("?","").length?y.caret(0,n):y.caret(n))},10)}}).on("blur.mask",rt).on("keydown.mask",ot).on("keypress.mask",st).on("input.mask paste.mask",function(){y.prop("readonly")||setTimeout(function(){var n=k(!0);y.caret(n);nt()},0)});f&&r&&y.off("input.mask").on("input.mask",et);k()}))}})})