function mascara(o,f){
  v_obj=o
  v_fun=f
  setTimeout("execmascara()",1)
}

function execmascara(){
  v_obj.value=v_fun(v_obj.value)
}

function leech(v){
  v=v.replace(/o/gi,"0")
  v=v.replace(/i/gi,"1")
  v=v.replace(/z/gi,"2")
  v=v.replace(/e/gi,"3")
  v=v.replace(/a/gi,"4")
  v=v.replace(/s/gi,"5")
  v=v.replace(/t/gi,"7")
  return v
}

String.prototype.normalize = function()
   {
      try{return    this.match(/[a-zA-Z0-9]/g).join('');}
      catch(err){return this}
   }


   function monetaryMask(e)
   {
      if(e.keyCode == 9 || e.keyCode == 116) return true; // TAB
      var ISIE = /MSIE/.test(navigator.userAgent);
      
      switch(String.fromCharCode(e.keyCode)) // IE LIXO
      {
         case 'a':case '1': key = 1; break;
         case 'b':case '2': key = 2; break;
         case 'c':case '3': key = 3; break;
         case 'd':case '4': key = 4; break;
         case 'e':case '5': key = 5; break;
         case 'f':case '6': key = 6; break;
         case 'g':case '7': key = 7; break;
         case 'h':case '8': key = 8; break;
         case 'i':case '9': key = 9; break;
         case '`':case '0': key = 0; break;
         default : String.fromCharCode(e.keyCode);
      }
      
      t = (!ISIE) ? e.currentTarget : e.srcElement;

      if(!parseInt(t.value.normalize())) // adiciona só no lenght 0, não há necessidade de repetição
      {
         t.onclick = function()
         {   
            if(!ISIE)
            {
               t.selectionStart = t.value.length;
               t.selectionEnd  = t.value.length;
            }
            else
            {
               var range = t.createTextRange();
               range.moveStart("character", t.value.length);
               range.moveEnd("character", 1);
               range.select();
            }   
         }
         t.onselect = t.onfocus;
      }

      if((e.keyCode > 105 || e.keyCode < 48 || (e.keyCode > 57 && e.keyCode < 96)) && e.keyCode != 8)
         try{e.preventDefault();}catch(err){e.returnValue = false}
      else
      {
         str = (e.keyCode == 8) ? t.value.substr(0,t.value.length-1) : t.value+key.toString();
         var x = parseFloat(str.normalize()).toString();
         
         //document.title = str;
         if(parseFloat(str.normalize()) < 10)
            t.value = "0,0"+x;
         else if(parseFloat(str.normalize()) >= 10 && parseFloat(str.normalize()) < 100)
            t.value = '0,'+x;
         else if(parseFloat(str.normalize()) >= 100 && parseFloat(str.normalize()) < 1000)
            t.value = x.charAt(0)+','+x.substr(1,x.length);
         else if(parseFloat(str.normalize()) >= 1000 && parseFloat(str.normalize()) < 10000)
            t.value = x.substr(0,2)+','+x.substr(2,2);
         else if(parseFloat(str.normalize()) >= 10000 && parseFloat(str.normalize()) < 100000)
            t.value = x.substr(0,3)+','+x.substr(3,2);
         else if(parseFloat(str.normalize()) >= 100000 && parseFloat(str.normalize()) < 1000000)
            t.value = x.charAt(0)+'.'+x.substr(1,3)+','+x.substr(4,2);
         else if(parseFloat(str.normalize()) >= 1000000 && parseFloat(str.normalize()) < 10000000)
            t.value = x.substr(0,2)+'.'+x.substr(2,3)+','+x.substr(5,2);
         else if(parseFloat(str.normalize()) >= 10000000 && parseFloat(str.normalize()) < 100000000)
            t.value = x.substr(0,3)+'.'+x.substr(3,3)+','+x.substr(6,2);
         else if(parseFloat(str.normalize()) >= 100000000 && parseFloat(str.normalize()) < 1000000000)
            t.value = x.charAt(0)+'.'+x.substr(1,3)+'.'+x.substr(4,3)+','+x.substr(7,2);
         else if(parseFloat(str.normalize()) >= 1000000000 && parseFloat(str.normalize()) < 10000000000)
            t.value = x.substr(0,2)+'.'+x.substr(2,3)+'.'+x.substr(5,3)+','+x.substr(8,2);
         
         try{e.preventDefault();}catch(err){e.returnValue = false}
      }
   } 
function soNumeros(v){
  return v.replace(/\D/g,"")
}

function datapt(v){
  v=v.replace(/\D/g,"")                 //Remove tudo o que não é dígito
  v=v.replace(/(\d{2})(\d)/,"$1/$2")    //Coloca hífen entre o quarto e o quinto dígitos
  v=v.replace(/(\d{2})(\d)/,"$1/$2")    //Coloca hífen entre o quarto e o quinto dígitos
  return v
}

function mCpf(v){
    v=v.replace(/\D/g,"")                    //Remove tudo o que não é dígito
    v=v.replace(/(\d{3})(\d)/,"$1.$2")       //Coloca um ponto entre o terceiro e o quarto dígitos
    v=v.replace(/(\d{3})(\d)/,"$1.$2")       //Coloca um ponto entre o terceiro e o quarto dígitos
                                             //de novo (para o segundo bloco de números)
    v=v.replace(/(\d{3})(\d{1,2})$/,"$1-$2") //Coloca um hífen entre o terceiro e o quarto dígitos
    return v
}

function mConta(v){
    v=v.replace(/\D/g,"")                    //Remove tudo o que não é dígito
    v=v.replace(/(\d{1})(\d)/,"$1.$2")       
    v=v.replace(/(\d{2})(\d)/,"$1.$2")       
    v=v.replace(/(\d{2})(\d)/,"$1.$2")       
    v=v.replace(/(\d{2})(\d)/,"$1.$2")       
    v=v.replace(/(\d{2})(\d)/,"$1.$2")       
    v=v.replace(/(\d{2})(\d)/,"$1.$2")       
    v=v.replace(/(\d{2})(\d)/,"$1.$2")       
                                             
    
    return v
}

function mCep(v){
    v=v.replace(/\D/g,"")                           //Remove tudo o que não é dígito
    v=v.replace(/^(\d{5})(\d)/,"$1-$2") //Esse é tão fácil que não merece explicações
    return v
}

function mCnpj(v){
    v=v.replace(/\D/g,"")                           //Remove tudo o que não é dígito
    v=v.replace(/^(\d{2})(\d)/,"$1.$2")             //Coloca ponto entre o segundo e o terceiro dígitos
    v=v.replace(/^(\d{2})\.(\d{3})(\d)/,"$1.$2.$3") //Coloca ponto entre o quinto e o sexto dígitos
    v=v.replace(/\.(\d{3})(\d)/,".$1/$2")           //Coloca uma barra entre o oitavo e o nono dígitos
    v=v.replace(/(\d{4})(\d)/,"$1-$2")              //Coloca um hífen depois do bloco de quatro dígitos
    return v
}

function romanos(v){
    v=v.toUpperCase()             //Maiúsculas
    v=v.replace(/[^IVXLCDM]/g,"") //Remove tudo o que não for I, V, X, L, C, D ou M
    //Essa é complicada! Copiei daqui: http://www.diveintopython.org/refactoring/refactoring.html
    while(v.replace(/^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$/,"")!="")
        v=v.replace(/.$/,"")
    return v
}

function mTelefone(v){
  v=v.replace(/\D/g,"")                 //Remove tudo o que não é dígito
  v=v.replace(/^(\d\d)(\d)/g,"($1) $2") //Coloca parênteses em volta dos dois primeiros dígitos
    v=v.replace(/(\d{4})(\d)/,"$1-$2")    //Coloca hífen entre o quarto e o quinto dígitos
    return v
}
