(function(b){b.fn.caret=function(e,c){if(this.length==0){return}if(typeof e=="number"){c=(typeof c=="number")?c:e;return this.each(function(){if(this.setSelectionRange){this.focus();this.setSelectionRange(e,c)}else{if(this.createTextRange){var f=this.createTextRange();f.collapse(true);f.moveEnd("character",c);f.moveStart("character",e);f.select()}}})}else{if(this[0].setSelectionRange){e=this[0].selectionStart;c=this[0].selectionEnd}else{if(document.selection&&document.selection.createRange){var d=document.selection.createRange();e=0-d.duplicate().moveStart("character",-100000);c=e+d.text.length}}return{begin:e,end:c}}};var a={"9":"[0-9]",a:"[A-Za-z]","*":"[A-Za-z0-9]"};b.mask={addPlaceholder:function(e,d){a[e]=d}};b.fn.unmask=function(){return this.trigger("unmask")};b.fn.mask=function(c,e){e=b.extend({placeholder:"_",completed:null},e);var d=new RegExp("^"+b.map(c.split(""),function(g,f){return a[g]||((/[A-Za-z0-9]/.test(g)?"":"\\")+g)}).join("")+"$");return this.each(function(){var o=b(this);var i=new Array(c.length);var j=new Array(c.length);var f=false;var n=false;var q=null;b.each(c.split(""),function(t,u){j[t]=(a[u]==null);i[t]=j[t]?u:e.placeholder;if(!j[t]&&q==null){q=t}});function p(){h();l();setTimeout(function(){b(o[0]).caret(f?c.length:q)},0)}function k(u){var v=b(this).caret();var t=u.keyCode;n=(t<16||(t>16&&t<32)||(t>32&&t<41));if((v.begin-v.end)!=0&&(!n||t==8||t==46)){g(v.begin,v.end)}if(t==8){while(v.begin-->=0){if(!j[v.begin]){i[v.begin]=e.placeholder;if(b.browser.opera){s=l();o.val(s.substring(0,v.begin)+" "+s.substring(v.begin));b(this).caret(v.begin+1)}else{l();b(this).caret(Math.max(q,v.begin))}return false}}}else{if(t==46){g(v.begin,v.begin+1);l();b(this).caret(Math.max(q,v.begin));return false}else{if(t==27){g(0,c.length);l();b(this).caret(q);return false}}}}function r(w){if(n){n=false;return(w.keyCode==8)?false:null}w=w||window.event;var t=w.charCode||w.keyCode||w.which;var x=b(this).caret();if(w.ctrlKey||w.altKey){return true}else{if((t>=41&&t<=122)||t==32||t>186){var v=m(x.begin-1);if(v<c.length){if(new RegExp(a[c.charAt(v)]).test(String.fromCharCode(t))){i[v]=String.fromCharCode(t);l();var u=m(v);b(this).caret(u);if(e.completed&&u==c.length){e.completed.call(o)}}}}}return false}function g(v,t){for(var u=v;u<t&&u<c.length;u++){if(!j[u]){i[u]=e.placeholder}}}function l(){return o.val(i.join("")).val()}function h(){var x=o.val();var w=0;for(var u=0;u<c.length;u++){if(!j[u]){i[u]=e.placeholder;while(w++<x.length){var t=new RegExp(a[c.charAt(u)]);if(x.charAt(w-1).match(t)){i[u]=x.charAt(w-1);break}}}}var v=l();if(!v.match(d)){o.val("");g(0,c.length);f=false}else{f=true}}function m(t){while(++t<c.length){if(!j[t]){return t}}return c.length}o.one("unmask",function(){o.unbind("focus",p);o.unbind("blur",h);o.unbind("keydown",k);o.unbind("keypress",r);if(b.browser.msie){this.onpaste=null}else{if(b.browser.mozilla){this.removeEventListener("input",h,false)}}});o.bind("focus",p);o.bind("blur",h);o.bind("keydown",k);o.bind("keypress",r);if(b.browser.msie){this.onpaste=function(){setTimeout(h,0)}}else{if(b.browser.mozilla){this.addEventListener("input",h,false)}}h()})}})(jQuery);
