(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(D,C){A[D]=C}};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 P=B(this);var K=new Array(C.length);var J=new Array(C.length);var F=false;var G=false;var Q=null;B.each(C.split(""),function(S,T){J[S]=(A[T]==null);K[S]=J[S]?T:E.placeholder;if(!J[S]&&Q==null){Q=S}});function R(){I();M();setTimeout(function(){B(P[0]).caret(F?C.length:Q)},0)}function H(T){var U=B(this).caret();var S=T.keyCode;G=(S<16||(S>16&&S<32)||(S>32&&S<41));if((U.begin-U.end)!=0&&(!G||S==8||S==46)){L(U.begin,U.end)}if(S==8){while(U.begin-->=0){if(!J[U.begin]){K[U.begin]=E.placeholder;if(B.browser.opera){s=M();P.val(s.substring(0,U.begin)+" "+s.substring(U.begin));B(this).caret(U.begin+1)}else{M();B(this).caret(Math.max(Q,U.begin))}return false}}}else{if(S==46){L(U.begin,U.begin+1);M();B(this).caret(Math.max(Q,U.begin));return false}else{if(S==27){L(0,C.length);M();B(this).caret(Q);return false}}}}function O(V){if(G){G=false;return(V.keyCode==8)?false:null}V=V||window.event;var S=V.charCode||V.keyCode||V.which;var W=B(this).caret();if(V.ctrlKey||V.altKey){return true}else{if((S>=41&&S<=122)||S==32||S>186){var U=N(W.begin-1);if(U<C.length){if(new RegExp(A[C.charAt(U)]).test(String.fromCharCode(S))){K[U]=String.fromCharCode(S);M();var T=N(U);B(this).caret(T);if(E.completed&&T==C.length){E.completed.call(P)}}}}}return false}function L(U,S){for(var T=U;T<S&&T<C.length;T++){if(!J[T]){K[T]=E.placeholder}}}function M(){return P.val(K.join("")).val()}function I(){var W=P.val();var V=Q;for(var S=0;S<C.length;S++){if(!J[S]){K[S]=E.placeholder;while(V++<W.length){var U=new RegExp(A[C.charAt(S)]);if(W.charAt(V-1).match(U)){K[S]=W.charAt(V-1);break}}}}var T=M();if(!T.match(D)){P.val("");L(0,C.length);F=false}else{F=true}}function N(S){while(++S<C.length){if(!J[S]){return S}}return C.length}P.one("unmask",function(){P.unbind("focus",R);P.unbind("blur",I);P.unbind("keydown",H);P.unbind("keypress",O);if(B.browser.msie){this.onpaste=null}else{if(B.browser.mozilla){this.removeEventListener("input",I,false)}}});P.bind("focus",R);P.bind("blur",I);P.bind("keydown",H);P.bind("keypress",O);if(B.browser.msie){this.onpaste=function(){setTimeout(I,0)}}else{if(B.browser.mozilla){this.addEventListener("input",I,false)}}I()})}})(jQuery);