(function(B){var C=(B.browser.msie?"paste":"input")+".mask";var A=(window.orientation!=undefined);B.mask={definitions:{"9":"[0-9]",a:"[A-Za-z]","*":"[A-Za-z0-9]"}};B.fn.extend({caret:function(E,D){if(this.length==0){return }if(typeof E=="number"){D=(typeof D=="number")?D:E;return this.each(function(){if(this.setSelectionRange){this.focus();this.setSelectionRange(E,D)}else{if(this.createTextRange){var G=this.createTextRange();G.collapse(true);G.moveEnd("character",D);G.moveStart("character",E);G.select()}}})}else{if(this[0].setSelectionRange){E=this[0].selectionStart;D=this[0].selectionEnd}else{if(document.selection&&document.selection.createRange){var F=document.selection.createRange();E=0-F.duplicate().moveStart("character",-100000);D=E+F.text.length}}return{begin:E,end:D}}},unmask:function(){return this.trigger("unmask")},mask:function(E,K){if(!E&&this.length>0){var I=B(this[0]);var H=I.data("tests");return B.map(I.data("buffer"),function(M,L){return H[L]?M:null}).join("")}K=B.extend({placeholder:"_",completed:null},K);var D=B.mask.definitions;var H=[];var J=E.length;var F=null;var G=E.length;B.each(E.split(""),function(L,M){if(M=="?"){G--;J=L}else{if(D[M]){H.push(new RegExp(D[M]));if(F==null){F=H.length-1}}else{H.push(null)}}});return this.each(function(){var L=B(this);var Q=B.map(E.split(""),function(X,Y){if(X!="?"){return D[X]?K.placeholder:X}});var P=false;var M=L.val();L.data("buffer",Q).data("tests",H);function T(X){while(++X<=G&&!H[X]){}return X}function V(X){while(!H[X]&&--X>=0){}for(var Z=X;Z<G;Z++){if(H[Z]){Q[Z]=K.placeholder;var Y=T(Z);if(Y<G&&H[Z].test(Q[Y])){Q[Z]=Q[Y]}else{break}}}W();L.caret(Math.max(F,X))}function U(b){for(var Y=b,Z=K.placeholder;Y<G;Y++){if(H[Y]){var a=T(Y);var X=Q[Y];Q[Y]=Z;if(a<G&&H[a].test(X)){Z=X}else{break}}}}function R(Z){var X=B(this).caret();var Y=Z.keyCode;P=(Y<16||(Y>16&&Y<32)||(Y>32&&Y<41));if((X.begin-X.end)!=0&&(!P||Y==8||Y==46)){S(X.begin,X.end)}if(Y==8||Y==46||(A&&Y==127)){V(X.begin+(Y==46?0:-1));return false}else{if(Y==27){L.val(M);L.caret(0,N());return false}}}function O(c){if(P){P=false;return(c.keyCode==8)?false:null}c=c||window.event;var a=c.charCode||c.keyCode||c.which;var Z=B(this).caret();if(c.ctrlKey||c.altKey||c.metaKey){return true}else{if((a>=32&&a<=125)||a>186){var Y=T(Z.begin-1);if(Y<G){var X=String.fromCharCode(a);if(H[Y].test(X)){U(Y);Q[Y]=X;W();var b=T(Y);B(this).caret(b);if(K.completed&&b==G){K.completed.call(L)}}}}}return false}function S(X,Z){for(var Y=X;Y<Z&&Y<G;Y++){if(H[Y]){Q[Y]=K.placeholder}}}function W(){return L.val(Q.join("")).val()}function N(c){var a=L.val();var Z=-1;for(var b=0,Y=0;b<G;b++){if(H[b]){Q[b]=K.placeholder;while(Y++<a.length){var X=a.charAt(Y-1);if(H[b].test(X)){Q[b]=X;Z=b;break}}if(Y>a.length){break}}else{if(Q[b]==a[Y]&&b!=J){Y++;Z=b}}}if(!c&&Z+1<J){L.val("");S(0,G)}else{if(c||Z+1>=J){W();if(!c){L.val(L.val().substring(0,Z+1))}}}return(J?b:F)}if(!L.attr("readonly")){L.one("unmask",function(){L.unbind(".mask").removeData("buffer").removeData("tests")}).bind("focus.mask",function(){M=L.val();var X=N();W();setTimeout(function(){if(X==E.length){L.caret(0,X)}else{L.caret(X)}},0)}).bind("blur.mask",function(){N();if(L.val()!=M){L.change()}}).bind("keydown.mask",R).bind("keypress.mask",O).bind(C,function(){setTimeout(function(){L.caret(N(true))},0)})}N()})}})})(jQuery);