(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(l,f){if(!l&&this.length>0){var j=c(this[0]);var d=j.data("tests");return c.map(j.data("buffer"),function(n,m){return d[m]?n:null}).join("")}f=c.extend({placeholder:"_",completed:null},f);var h=c.mask.definitions;var d=[];var e=l.length;var g=l.length;var k=null;var i=l.length;c.each(l.split(""),function(m,n){if(n=="?"){i--;e=m}else{if(n=="|"){i--;g=m}else{if(h[n]){d.push(new RegExp(h[n]));if(k==null){k=d.length-1}}else{d.push(null)}}}});return this.each(function(){var v=c(this);var q=c.map(l.split(""),function(z,y){if(z!="?"&&z!="|"){return h[z]?f.placeholder:z}});var t=false;var x=v.val();v.data("buffer",q).data("tests",d);function u(y){while(++y<=i&&!d[y]){}return y}function p(A){while(!d[A]&&--A>=0){}for(var z=A;z<i;z++){if(d[z]){q[z]=f.placeholder;var y=u(z);if(y<i&&d[z].test(q[y])){q[z]=q[y]}else{break}}}s();v.caret(Math.max(k,A))}function m(C){for(var A=C,B=f.placeholder;A<i;A++){if(d[A]){var y=u(A);var z=q[A];q[A]=B;if(y<i&&d[y].test(z)){B=z}else{break}}}}function r(z){var A=c(this).caret();var y=z.keyCode;t=(y<16||(y>16&&y<32)||(y>32&&y<41));if((A.begin-A.end)!=0&&(!t||y==8||y==46)){n(A.begin,A.end)}if(y==8||y==46||(b&&y==127)){p(A.begin+(y==46?0:-1));return false}else{if(y==27){v.val(x);v.caret(0,o());return false}}}function w(B){if(t){t=false;return(B.keyCode==8)?false:null}B=B||window.event;var y=B.charCode||B.keyCode||B.which;var D=c(this).caret();if(B.ctrlKey||B.altKey||B.metaKey){return true}else{if((y>=32&&y<=125)||y>186){var A=u(D.begin-1);if(A<i){var C=String.fromCharCode(y);if(d[A].test(C)){m(A);q[A]=C;s();var z=u(A);c(this).caret(z);if(f.completed&&z==i){f.completed.call(v)}}}}}return false}function n(A,y){for(var z=A;z<y&&z<i;z++){if(d[z]){q[z]=f.placeholder}}}function s(){return v.val(q.join("")).val()}function o(z){var D=v.val();var C=-1;for(var y=0,B=0;y<i;y++){if(d[y]){q[y]=f.placeholder;while(B++<D.length){var A=D.charAt(B-1);if(d[y].test(A)){q[y]=A;C=y;break}}if(B>D.length){break}}else{if(q[y]==D[B]&&y!=e){B++;C=y}}}if(!z&&C+1<e){v.val("");n(0,i)}else{if(z||C+1>=e){s();if(!z){v.val(v.val().substring(0,C+1)+(C+1>=g||C+1==e?"":v.val().substring(g-1)))}}}return(e?y:k)}if(!v.attr("readonly")){v.one("unmask",function(){v.unbind(".mask").removeData("buffer").removeData("tests")}).bind("focus.mask",function(){x=v.val();var y=o();s();setTimeout(function(){if(y==l.length){v.caret(0,y)}else{v.caret(y)}},0)}).bind("blur.mask",function(){o();if(v.val()!=x){v.change()}}).bind("keydown.mask",r).bind("keypress.mask",w).bind(a,function(){setTimeout(function(){v.caret(o(true))},0)})}o()})}})})(jQuery);
