/**
 * jquery.meiomask.js
 * @version 1.0.1
 * The MIT License
 * Copyright (c) 2008 Fabio M. Costa http://www.meiocodigo.com
 */
(function(A){A.extend({mask:{rules:{"z":/[a-z]/,"Z":/[A-Z]/,"a":/[a-zA-Z]/,"*":/[0-9a-zA-Z]/,"@":/[0-9a-zA-ZçÇáàãéèíìóòõúùü]/},fixedChars:"[(),.:/ -]",keys:{BKSPACE:8,TAB:9,ENTER:13,SHIFT:16,CTRL:17,ALT:18,SPACE:32,PGUP:33,PGDOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,INSERT:45,DELETE:46,METAKEY:91,F5:116},options:{attr:"alt"},masks:{"phone":{mask:"(99) 9999-9999"},"phone-us":{mask:"(999) 9999-9999"},"cpf":{mask:"999.999.999-99"},"cnpj":{mask:"99.999.999/9999-99"},"date":{mask:"39/19/9999"},"date-us":{mask:"19/39/9999"},"cep":{mask:"99999-999"},"time":{mask:"29:69"},"cc":{mask:"9999 9999 9999 9999"},"integer":{mask:"999.999.999.999",type:"reverse"},"decimal":{mask:"99,999.999.999.999",type:"reverse"},"decimal-us":{mask:"99.999,999,999,999",type:"reverse"}},init:function(B){var C;this.ignore=false;this.fixedCharsReg=new RegExp(this.fixedChars);this.fixedCharsRegG=new RegExp(this.fixedChars,"g");this.ignoreArray=new Array();this.setOptions(B);for(C=0;C<=9;C++){this.rules[C]=new RegExp("[0-"+C+"]")}for(C in this.keys){this.ignoreArray.push(this.keys[C])}this.hasInit=true},setOptions:function(B){this.options=A.extend({},this.options,B)},set:function(F,C){var B=this,D=A(F),E="maxlength";if(this.hasInit){this.setOptions(C)}else{this.init(C)}return D.each(function(){var K=A(this),J=K.attr(B.options.attr),G="",I,L={mask:null,type:"fixed"};G=(typeof C=="string")?C:(J!="")?J:null;L.mask=G;if((B.masks[G])){L=A.extend(L,B.masks[G])}if((A.metadata)){L=A.extend(L,K.metadata())}var H=L.mask;if(H!=null){B.unset(K);K.data("mask",{maxlength:K.attr(E),mask:H,maskArray:H.split(""),maskNonFixedCharsArray:H.replace(B.fixedCharsRegG,"").split(""),type:L.type});if(A.browser.safari){if(K.attr(E)<524288){K.removeAttr(E)}}else{if(A.browser.msie){if(K.attr(E)<2147483647){K.attr(E,2147483647)}}else{if(K.attr(E)>-1){K.removeAttr(E)}}}if(L.type=="reverse"){K.css("text-align","right")}K.bind("keydown",{funcFixed:B._keyDown,funcReverse:B._keyDown,thisObj:B},B._onMask);K.bind("keyup",{funcFixed:B._keyUp,funcReverse:B._keyUp,thisObj:B},B._onMask);K.bind("keypress",{funcFixed:B._keyPressFixed,funcReverse:B._keyPressReverse,thisObj:B},B._onMask);I=(A.browser.opera||(A.browser.mozilla&&A.browser.version.substr(0,3)=="1.8"))?"input":"paste";K.bind(I,{funcFixed:B._paste,funcReverse:B._paste,thisObj:B},B._delayedOnMask)}})},unset:function(C){var B=A(C),D=this;return B.each(function(){var F=A(this);if(F.data("mask")){var E=F.data("mask").maxlength;if(E==-1){F.removeAttr("maxlength")}else{F.attr("maxlength",E)}F.unbind("keydown",D._onMask).unbind("keypress",D._onMask).unbind("keyup",D._onMask);if(A.browser.opera||(A.browser.mozilla&&A.browser.version.substr(0,3)=="1.8")){F.unbind("input",D._delayedOnMask)}else{F.unbind("paste",D._delayedOnMask)}F.removeData("mask")}})},_onMask:function(B){var D=B.data.thisObj,C={};C._this=B.target;C.$this=A(C._this);C.value=C.$this.val();C.valueArray=C.value.split("");C.data=C.$this.data("mask");C.nKey=D.__getKeyNumber(B);C.caret=D.__getRangePosition(C._this);C.reverse=(C.data.type=="reverse");if(C.reverse){return B.data.funcReverse.call(D,B,C)}else{return B.data.funcFixed.call(D,B,C)}return true},_delayedOnMask:function(B){setTimeout(function(){B.data.thisObj._onMask(B)},1)},_keyDown:function(B,C){if(A.inArray(C.nKey,this.ignoreArray)>-1){this.ignore=true}else{this.ignore=false}return true},_keyUp:function(B,C){switch(C.data.type){case"reverse":if(C.nKey==this.keys.BKSPACE||C.nKey==this.keys.DELETE){this.ignore=false;this._keyPressReverse(B,C)}else{this._paste(B,C)}break;case"fixed":this._paste(B,C);break}return true},_paste:function(C,D){var B=D.valueArray;B=this.__removeInvalidChars(B,D.data.maskNonFixedCharsArray);if(D.reverse){B.reverse()}B=this.__applyMask(B,D.data.maskArray);if(D.reverse){B.reverse();B=B.join("").substring(B.length-D.data.mask.length)}else{B=B.join("").substring(0,D.data.mask.length)}D.$this.val(B);this.__setRange(D._this,D.caret.start,D.caret.end);return true},_keyPressReverse:function(H,B){if(this.ignore){return true}if(H.ctrlKey||H.metaKey||H.altKey){return true}var I=String.fromCharCode(B.nKey),G=B.caret.start,E=B.value,D=E.substr(0,G),F=E.substr(B.caret.end,E.length),K=(D+I+F).replace(this.fixedCharsRegG,""),J=K.split(""),C=this.__extraPositionsTill(G,B.data.maskArray);if(!this.rules[B.data.maskArray[G+C]]||!this.rules[B.data.maskArray[G+C]].test(I)&&(B.nKey!=this.keys.BKSPACE&&B.nKey!=this.keys.DELETE)){return false}J=this.__removeInvalidChars(J,B.data.maskNonFixedCharsArray);J.reverse();J=this.__applyMask(J,B.data.maskArray);J.reverse();B.$this.val(J.join("").substring(J.length-B.data.mask.length));return false},_keyPressFixed:function(G,H){if(this.ignore){return true}if(G.ctrlKey||G.metaKey||G.altKey){return true}var I=String.fromCharCode(H.nKey),F=H.value,E=F.replace(this.fixedCharsRegG,""),C=E.split(""),D=H.caret.start,B=this.__extraPositionsTill(D,H.data.maskArray);if(!this.rules[H.data.maskArray[D+B]]||!this.rules[H.data.maskArray[D+B]].test(I)){return false}C=this.__removeInvalidChars(C,H.data.maskNonFixedCharsArray);C=this.__applyMask(C,H.data.maskArray,B);H.$this.val(C.join("").substr(0,H.data.mask.length));if(D==H.caret.end){if(D+B<F.length){this.__setRange(H._this,D+B,D+B+1)}}else{this.__setRange(H._this,D,H.caret.end)}return true},__getKeyNumber:function(B){return(B.charCode||B.keyCode||B.which)},__removeInvalidChars:function(D,C){for(var B=0;B<D.length;B++){if(this.rules[C[B]]&&!this.rules[C[B]].test(D[B])){D.splice(B,1);B--}}return D},__applyMask:function(D,B,E){if(typeof E=="undefined"){E=0}for(var C=0;C<D.length+E;C++){if(this.fixedCharsReg.test(B[C])){D.splice(C,0,B[C])}}return D},__extraPositionsTill:function(D,B){var C=0;while(this.fixedCharsReg.test(B[D])){D++;C++}return C},__setRange:function(D,E,B){if(typeof B=="undefined"){B=E}if(D.setSelectionRange){D.setSelectionRange(E,B)}else{var C=D.createTextRange();C.collapse();C.moveStart("character",E);C.moveEnd("character",B-E);C.select()}},__getRangePosition:function(E){var B={start:0,end:0};if(E.setSelectionRange){B.start=E.selectionStart;B.end=E.selectionEnd}else{if(document.selection&&document.selection.createRange){var D=document.selection.createRange();var C=D.duplicate();B.start=0-C.moveStart("character",-100000);B.end=B.start+D.text.length}}return B}}});A.fn.setMask=function(B){return A.mask.set(this,B)};A.fn.unsetMask=function(){return A.mask.unset(this)}})(jQuery)