Mascaras = {
IsIE: navigator.appName.toLowerCase().indexOf('microsoft')!=-1,
AZ: /[A-Z]/i,
Acentos: /[À-ÿ]/i,
Num: /[0-9]/,
carregar: function(parte){
 var Tags = ['input','textarea'];
 if (typeof parte == "undefined") parte = document;
 for(var z=0;z<Tags.length;z++){
 Inputs=parte.getElementsByTagName(Tags[z]);
 for(var i=0;i<Inputs.length;i++)
  if(('button,image,hidden,submit,reset').indexOf(Inputs[i].type.toLowerCase())==-1)
   this.aplicar(Inputs[i]);
 }
},
aplicar: function(campo){
 tipo = campo.getAttribute('tipo');
 if (!tipo || campo.type == "select-one") return;
 orientacao = campo.getAttribute('orientacao');
 mascara = campo.getAttribute('mascara');
 if (tipo.toLowerCase() == "decimal"){
 orientacao = "esquerda";
 casasdecimais = campo.getAttribute('casasdecimais');
 tamanho = campo.getAttribute('maxLength');
 if (!tamanho || tamanho > 50)
  tamanho = 10;
 if (!casasdecimais)
  casasdecimais = 2;
 campo.setAttribute("mascara", this.geraMascaraDecimal(tamanho,
casasdecimais));
 campo.setAttribute("tipo", "numerico");
 campo.setAttribute("orientacao", orientacao);
 }
 if (orientacao && orientacao.toLowerCase() == "esquerda")
campo.style.textAlign = "right";
 if (mascara) campo.setAttribute("maxLength", mascara.length);
 if (tipo){
 campo.onkeypress = function(e){ return Mascaras.onkeypress(e?e:event); };
 campo.onkeyup = function(e){ Mascaras.onkeyup(e?e:event, campo) };
 }
 campo.setAttribute("snegativo", ((campo.value).substr(0,1) == "-" ?
"s" : "n"));
},
onkeypress: function(e){
 KeyCode = this.IsIE ? event.keyCode : e.which;
 campo =  this.IsIE ? event.srcElement : e.target;
 readonly = campo.getAttribute('readonly');
 if (readonly) return;
 maxlength = campo.getAttribute('maxlength');
 pt = campo.getAttribute('pt');
 selecao = this.selecao(campo);
 if (selecao.length > 0 && KeyCode != 0){
 campo.value = ""; return true;
 }
 if (KeyCode == 0) return true;
 Char = String.fromCharCode(KeyCode);
 valor = campo.value;
 mascara = campo.getAttribute('mascara');
 if (KeyCode != 8){
 tipo = campo.getAttribute('tipo').toLowerCase();
 negativo = campo.getAttribute('negativo');
 if(negativo && KeyCode == 45){
  snegativo = campo.getAttribute('snegativo');
  snegativo = (snegativo == "s" ? "n" : "s");
  campo.setAttribute("snegativo", snegativo);
 }else{
  valor += Char
  if (tipo == "numerico" && Char.search(this.Num) == -1) return false;
  if (KeyCode != 32 && tipo == "caracter" && Char.search(this.AZ) ==
-1 && Char.search(this.Acentos) == -1) return false;
 }
 }
 if (mascara){
 this.aplicarMascara(campo, valor);
 return false;
 }
 return true;
},
onkeyup: function(e, campo){
 KeyCode = this.IsIE ? event.keyCode : e.which;
 if (KeyCode != 9 && KeyCode != 16 && KeyCode != 109){
 valor = campo.value;
 if (KeyCode == 8 && !this.IsIE) valor = valor.substr(0,valor.length-1);
 this.aplicarMascara(campo, valor);
 }
},
aplicarMascara: function(campo, valor){
 mascara = campo.getAttribute('mascara');
 if (!mascara) return;
 negativo = campo.getAttribute('negativo');
 snegativo = campo.getAttribute('snegativo');
 if (negativo && valor.substr(0,1) == "-")
 valor = valor.substr(1,valor.length-1);
 orientacao = campo.getAttribute('orientacao');
 var i = 0;
 for(i=0;i<mascara.length;i++){
 caracter = mascara.substr(i,1);
 if (caracter != "#") valor = valor.replace(caracter, "");
 }
 retorno = "";
 if (orientacao != "esquerda"){
 contador = 0;
 for(i=0;i<mascara.length;i++){
  caracter = mascara.substr(i,1);
  if (caracter == "#"){
   retorno += valor.substr(contador,1);
   contador++;
  }else
   retorno += caracter;
  if(contador >= valor.length) break;
 }
 }else{
 contador = valor.length-1;
 for(i=mascara.length-1;i>=0;i--){
  if(contador < 0) break;
  caracter = mascara.substr(i,1);
  if (caracter == "#"){
   retorno = valor.substr(contador,1) + retorno;
   contador--;
  }else
   retorno = caracter + retorno;
 }
 }
 if (negativo && snegativo == "s")
 retorno = "-" + retorno;
 campo.value = retorno;
},
geraMascaraDecimal: function(tam, decimais){
 var retorno = ""; var contador = 0; var i = 0;
 decimais = parseInt(decimais);
 for (i=0;i<(tam-(decimais+1));i++){
 retorno = "#" + retorno;
 contador++;
 if (contador == 3){
  retorno = "." + retorno;
  contador=0;
 }
 }
 retorno = retorno + ",";
 for (i=0;i<decimais;i++) retorno += "#";
 return retorno;
},
selecao: function(campo){
 if (this.IsIE)
 return document.selection.createRange().text;
 else
 return (campo.value).substr(campo.selectionStart,
(campo.selectionEnd - campo.selectionStart));
},
formataValor: function (valor, decimais){
 valor = valor.split('.');
 if (valor.length == 1) valor[1] = "";
 for(var i=valor[1].length;i<decimais;i++)
 valor[1] += "0";
 valor[1] = valor[1].substr(0,2);
 return (valor[0] + "." + valor[1]);
}
};

