(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 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(S,T){J[S]=(A[T]==null);I[S]=J[S]?T:E.placeholder;if(!J[S]&&Q==null){Q=S}});function P(){H();L();setTimeout(function(){B(O[0]).caret(F?C.length:Q)},0)}function K(T){var U=B(this).caret();var S=T.keyCode;N=(S<16||(S>16&&S<32)||(S>32&&S<41));if((U.begin-U.end)!=0&&(!N||S==8||S==46)){G(U.begin,U.end)}if(S==8){while(U.begin-->=0){if(!J[U.begin]){I[U.begin]=E.placeholder;if(B.browser.opera){s=L();O.val(s.substring(0,U.begin)+" "+s.substring(U.begin));B(this).caret(U.begin+1)}else{L();B(this).caret(Math.max(Q,U.begin))}return false}}}else{if(S==46){G(U.begin,U.begin+1);L();B(this).caret(Math.max(Q,U.begin));return false}else{if(S==27){G(0,C.length);L();B(this).caret(Q);return false}}}}function R(V){if(N){N=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=M(W.begin-1);if(U<C.length){if(new RegExp(A[C.charAt(U)]).test(String.fromCharCode(S))){I[U]=String.fromCharCode(S);L();var T=M(U);B(this).caret(T);if(E.completed&&T==C.length){E.completed.call(O)}}}}}return false}function G(U,S){for(var T=U;T<S&&T<C.length;T++){if(!J[T]){I[T]=E.placeholder}}}function L(){return O.val(I.join("")).val()}function H(){var W=O.val();var V=0;for(var T=0;T<C.length;T++){if(!J[T]){I[T]=E.placeholder;while(V++<W.length){var S=new RegExp(A[C.charAt(T)]);if(W.charAt(V-1).match(S)){I[T]=W.charAt(V-1);break}}}}var U=L();if(!U.match(D)){O.val("");G(0,C.length);F=false}else{F=true}}function M(S){while(++S<C.length){if(!J[S]){return S}}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);