var objeto;
var funcao;

//**
// * Função utilizada para formatação da máscara utilzando expressão regular.
// * Para utilizar esta função, deve ser passado o objeto a ser formatado e
// * a função de callback que utiliza a expressão regular para a formatação
// * (definidas neste mesmo arquivo).
// */
function mascara(o,f){
    objeto = o;
    funcao = f;
    setTimeout("execmascara()",1);
}

function execmascara(){
    objeto.value = funcao(objeto.value);
}

///***********************************************************************************
// * FUNÇÕES UTILIZADAS PARA A GERAÇÃO DE CADA TIPOD E MÁSCARA COM EXPRESSÃO REGULAR * 
 //***********************************************************************************/

function numeros(v){
    return v.replace(/\D/g,"");
}

function telefone(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;
}

function cep(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 mascaracpf(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 cnpj(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 numeroReds(v){
    v=v.replace(/\D/g,"");                 //Remove tudo o que não é dígito
    v=v.replace(/(\d{4})(\d)/,"$1-$2");    //Coloca hífen entre o quarto e o quinto dígitos
    v=v.replace(/(\d{9})(\d)/,"$1-$2");    //Coloca hífen entre o décimo quinto e décimo sexto dígitos
    return v;
}

//
// Função Responsável por validar um campo numérico, retirando todos os caracteres não numéricos.
// ex: onkeypress="return SomenteNumero(event)"
// @param e
// @return
//
function SomenteNumero(e){
    var tecla=(window.event)?event.keyCode:e.which;
    if((tecla > 47 && tecla < 58)) return true;
    else{
    if (tecla != 8) return false;
    else return true;
    }
}

//--->Função para a formatação dos campos...<---
function Mascara(tipo, campo, teclaPress) {
        if (window.event)
        {
                var tecla = teclaPress.keyCode;
        } else {
                tecla = teclaPress.which;
        }
 
        var s = new String(campo.value);
        // Remove todos os caracteres à seguir: ( ) / - . e espaço, para tratar a string denovo.
        s = s.replace(/(\.|\(|\)|\/|\-| )+/g,'');
 
        tam = s.length + 1;
 
        if ( tecla != 9 && tecla != 8 ) {
                switch (tipo)
                {
                case 'CPF' :
                        if (tam > 3 && tam < 7)
                                campo.value = s.substr(0,3) + '.' + s.substr(3, tam);
                        if (tam >= 7 && tam < 10)
                                campo.value = s.substr(0,3) + '.' + s.substr(3,3) + '.' + s.substr(6,tam-6);
                        if (tam >= 10 && tam < 12)
                                campo.value = s.substr(0,3) + '.' + s.substr(3,3) + '.' + s.substr(6,3) + '-' + s.substr(9,tam-9);
                break;
 
                case 'CNPJ' :
 
                        if (tam > 2 && tam < 6)
                                campo.value = s.substr(0,2) + '.' + s.substr(2, tam);
                        if (tam >= 6 && tam < 9)
                                campo.value = s.substr(0,2) + '.' + s.substr(2,3) + '.' + s.substr(5,tam-5);
                        if (tam >= 9 && tam < 13)
                                campo.value = s.substr(0,2) + '.' + s.substr(2,3) + '.' + s.substr(5,3) + '/' + s.substr(8,tam-8);
                        if (tam >= 13 && tam < 15)
                                campo.value = s.substr(0,2) + '.' + s.substr(2,3) + '.' + s.substr(5,3) + '/' + s.substr(8,4)+ '-' + s.substr(12,tam-12);
                break;
 
                case 'TEL' :
                        if (tam > 2 && tam < 4)
                                campo.value = '(' + s.substr(0,2) + ') ' + s.substr(2,tam);
                        if (tam >= 7 && tam < 11)
                                campo.value = '(' + s.substr(0,2) + ') ' + s.substr(2,4) + '-' + s.substr(6,tam-6);
                break;
 
                case 'DATA' :
                        if (tam > 2 && tam < 4)
                                campo.value = s.substr(0,2) + '/' + s.substr(2, tam);
                        if (tam > 4 && tam < 11)
                                campo.value = s.substr(0,2) + '/' + s.substr(2,2) + '/' + s.substr(4,tam-4);
                break;
                
                case 'CEP' :
                        if (tam > 5 && tam < 7)
                                campo.value = s.substr(0,5) + '-' + s.substr(5, tam);
                break;
                }
        }
}

//-----------------------------------------------------
//Funcao: MascaraMoeda
//Sinopse: Mascara de preenchimento de moeda
//Parametro:
// objTextBox : Objeto (TextBox)
// SeparadorMilesimo : Caracter separador de milésimos
// SeparadorDecimal : Caracter separador de decimais
// e : Evento
//Retorno: Booleano
// Exemplo: onKeyPress="return(MascaraMoeda(this,'.',',',event))"
//-----------------------------------------------------
function MascaraMoeda(objTextBox, SeparadorMilesimo, SeparadorDecimal, e){
  var sep = 0;
  var key = '';
  var i = j = 0;
  var len = len2 = 0;
  var strCheck = '0123456789';
  var aux = aux2 = '';
  var whichCode = (window.Event) ? e.which : e.keyCode;
  if(objTextBox.value.length < 15)
  {
	  if(whichCode == 8)
	  {
		  objTextBox.value = "";
	  }
	  else
	  {
		  if (whichCode == 13) return true;
		  
		  key = String.fromCharCode(whichCode); // Valor para o código da Chave
		  if (strCheck.indexOf(key) == -1) return false; // Chave inválida
		  
			  len = objTextBox.value.length;
			  for(i = 0; i < len; i++)
			      if ((objTextBox.value.charAt(i) != '0') && (objTextBox.value.charAt(i) != SeparadorDecimal)) break;
		  aux = '';
		  for(; i < len; i++)
		      if (strCheck.indexOf(objTextBox.value.charAt(i))!=-1) aux += objTextBox.value.charAt(i);
		  aux += key;
		  len = aux.length;
		  if (len == 0) objTextBox.value = '';
		  if (len == 1) objTextBox.value = '0'+ SeparadorDecimal + '0' + aux;
		  if (len == 2) objTextBox.value = '0'+ SeparadorDecimal + aux;
		  if (len > 2) {
		      aux2 = '';
		      for (j = 0, i = len - 3; i >= 0; i--) {
		          if (j == 3) {
		              aux2 += SeparadorMilesimo;
		              j = 0;
		          }
		          aux2 += aux.charAt(i);
		          j++;
		      }
		      objTextBox.value = '';
		      len2 = aux2.length;
		      for (i = len2 - 1; i >= 0; i--)
		      objTextBox.value += aux2.charAt(i);
		      objTextBox.value += SeparadorDecimal + aux.substr(len - 2, len);
		  }
		  return false;
	  }
  }
}
