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