(function(d){var e=(d.browser.msie?"paste":"input")+".mask";var f=(window.orientation!=undefined);d.mask={definitions:{"9":"[0-9]",a:"[A-Za-z]","*":"[A-Za-z0-9]"}};d.fn.extend({caret:function(c,b){if(this.length==0){return}if(typeof c=="number"){b=(typeof b=="number")?b:c;return this.each(function(){if(this.setSelectionRange){this.focus();this.setSelectionRange(c,b)}else{if(this.createTextRange){var h=this.createTextRange();h.collapse(true);h.moveEnd("character",b);h.moveStart("character",c);h.select()}}})}else{if(this[0].setSelectionRange){c=this[0].selectionStart;b=this[0].selectionEnd}else{if(document.selection&&document.selection.createRange){var a=document.selection.createRange();c=0-a.duplicate().moveStart("character",-100000);b=c+a.text.length}}return{begin:c,end:b}}},unmask:function(){return this.trigger("unmask")},mask:function(o,l){if(!o&&this.length>0){var a=d(this[0]);var p=a.data("tests");return d.map(a.data("buffer"),function(h,g){return p[g]?h:null}).join("")}l=d.extend({placeholder:"_",completed:null},l);var m=d.mask.definitions;var p=[];var c=o.length;var b=null;var n=o.length;d.each(o.split(""),function(g,h){if(h=="?"){n--;c=g}else{if(m[h]){p.push(new RegExp(m[h]));if(b==null){b=p.length-1}}else{p.push(null)}}});return this.each(function(){var C=d(this);var z=d.map(o.split(""),function(r,q){if(r!="?"){return m[r]?l.placeholder:r}});var i=false;var D=C.val();C.data("buffer",z).data("tests",p);function j(q){while(++q<=n&&!p[q]){}return q}function x(r){while(!p[r]&&--r>=0){}for(var q=r;q<n;q++){if(p[q]){z[q]=l.placeholder;var s=j(q);if(s<n&&p[q].test(z[s])){z[q]=z[s]}else{break}}}y();C.caret(Math.max(b,r))}function k(r){for(var q=r,s=l.placeholder;q<n;q++){if(p[q]){var u=j(q);var t=z[q];z[q]=s;if(u<n&&p[u].test(t)){s=t}else{break}}}}function A(q){var r=d(this).caret();var s=q.keyCode;i=(s<16||(s>16&&s<32)||(s>32&&s<41));if((r.begin-r.end)!=0&&(!i||s==8||s==46)){B(r.begin,r.end)}if(s==8||s==46||(f&&s==127)){x(r.begin+(s==46?0:-1));return false}else{if(s==27){C.val(D);C.caret(0,g());return false}}}function h(r){if(i){i=false;return(r.keyCode==8)?false:null}r=r||window.event;var t=r.charCode||r.keyCode||r.which;var q=d(this).caret();if(r.ctrlKey||r.altKey||r.metaKey){return true}else{if((t>=32&&t<=125)||t>186){var v=j(q.begin-1);if(v<n){var s=String.fromCharCode(t);if(p[v].test(s)){k(v);z[v]=s;y();var u=j(v);d(this).caret(u);if(l.completed&&u==n){l.completed.call(C)}}}}}return false}function B(r,q){for(var s=r;s<q&&s<n;s++){if(p[s]){z[s]=l.placeholder}}}function y(){return C.val(z.join("")).val()}function g(r){var t=C.val();var q=-1;for(var v=0,u=0;v<n;v++){if(p[v]){z[v]=l.placeholder;while(u++<t.length){var s=t.charAt(u-1);if(p[v].test(s)){z[v]=s;q=v;break}}if(u>t.length){break}}else{if(z[v]==t[u]&&v!=c){u++;q=v}}}if(!r&&q+1<c){C.val("");B(0,n)}else{if(r||q+1>=c){y();if(!r){C.val(C.val().substring(0,q+1))}}}return(c?v:b)}if(!C.attr("readonly")){C.one("unmask",function(){C.unbind(".mask").removeData("buffer").removeData("tests")}).bind("focus.mask",function(){D=C.val();var q=g();y();setTimeout(function(){if(q==o.length){C.caret(0,q)}else{C.caret(q)}},0)}).bind("blur.mask",function(){g();if(C.val()!=D){C.change()}}).bind("keydown.mask",A).bind("keypress.mask",h).bind(e,function(){setTimeout(function(){C.caret(g(true))},0)})}g()})}})})(jQuery);