/**
    Info: Pacote de formatações e validações JavaScript
    Desenvolvedor: Paulo de Souza Neto Maciel
    Site: www.paulodesouza.com.br
    E-mail: paulodesouza@gmail.com
    Versão 1.1
    Data: 19 de Dezembro de 2009
**/

/*alert("Arquivo psPackForm.js carregado! Atenção, remova a linha 7 do arquivo psPackForm.js para não aparecer mais esta mensagem.");*/

/**
Para usar as funções de formatação, carregue esse arquivo no <head> da página página HTML:
<script type="text/javascript" src="psPackForm.js"></script>

Para executar as formatações adicione as funções no campo desejado, exemplo:
Data: <input type="text" maxlength="10" onkeyup="formataData(this,event);">

**********

Funções de formatação:
Data:     formataData(this, event);       => maxlength="10"   => ##/##/####
CPF:      formataCpf(this, event);        => maxlength="12"   => ###.###.###-##
CNPJ:     formataCnpj(this, event);       => maxlength="18"   => ##.###.###/####-##
CEP:      formataCep(this, event);        => maxlength="9"    => #####-###
Horario:  formataHora(this, event);       => maxlength="5"    => ##:##
Telefone: formataTelefone(this, event);   => maxlength="9"   => ####-#### 
Telefone DDD: formataTelefoneDDD(this, event);   => maxlength="13"   => (##)####-#### 

**********

**/

//FUNÇÕES JAVASCRIPT PARA EXECUÇÃO DAS FORMATAÇÕES

function limpar(campo, key){ //limpo o campo

    //Pego a tecla pressionada
    var tecla = key.keyCode ? key.keyCode : key.which ? key.which : key.charCode;
    var valor = campo.value;

    //Removo tudo que nao seja numero
    var patt1 = /[0-9]/g;    
    valor_temp = valor.match(patt1);

    var tamanho = 0;

    if(valor_temp!= null){

        //Transformo o array cpf em string cpf
        var n_valor = "";
        for(var i=0; i<=(valor_temp.length-1); i++){
            n_valor += valor_temp[i];
        }
        valor = n_valor;
        
        //Pego a quantidade de numeros já inseridos
        tamanho = valor.length;
    }
    else{
    	valor = "";
    }

    return {'valor':valor, 'tamanho':tamanho, 'tecla':tecla}
    
}

function formataData(campo, key){

	
    var variaveis = limpar(campo, key);
    
    var valor = variaveis['valor'];
    var tamanho = variaveis['tamanho'];
    var tecla = variaveis['tecla'];
    
    valor = (tamanho > 8) ? valor.substr(0,8) : valor;
    
    if (tecla != 46 && tecla != 8){ //Se for diferente de backspace ou delete
    	
	    if(tamanho <= 2){
	        campo.value = valor;
	    }
	    
	    //Formata Data
	    if(tamanho >=2 && tecla != 36 && tecla != 37 && tecla != 39){
	        if (tamanho < 4){
	            campo.value = valor.substr(0, 2) + '/' + valor.substr(2, tamanho-2);
	        }
	        if (tamanho >= 4){
	            campo.value = valor.substr(0, 2) + '/' + valor.substr(2, 2) + '/' + valor.substr(4, tamanho-4);
	        }
	    }
	    
	}
}

function formataCpf(campo, key){

    var variaveis = limpar(campo, key);
    
    var valor = variaveis['valor'];
    var tamanho = variaveis['tamanho'];
    var tecla = variaveis['tecla'];

	valor = (tamanho > 11) ? valor.substr(0,11) : valor;

	if (tecla != 46 && tecla != 8){ //Se for diferente de backspace ou delete

	    if(tamanho <= 3){
	        campo.value = valor;
	    }
	    
	    //Formata CPF
	    if(tamanho >=3 && tecla != 36 && tecla != 37 && tecla != 39){
	        if (tamanho < 6){
	            campo.value = valor.substr(0, 3) + '.' + valor.substr(3, tamanho-3);
	        }
	        if (tamanho >= 6 && tamanho < 9){
	            campo.value = valor.substr(0, 3) + '.' + valor.substr(3, 3) + '.' + valor.substr(6, tamanho-6);
	        }
	        if (tamanho >= 9){
	            campo.value = valor.substr(0, 3) + '.' + valor.substr(3, 3) + '.' + valor.substr(6, 3) + '-' + valor.substr(9, tamanho-9);
	        }
	    }
	}
}

function formataCep(campo, key){

    var variaveis = limpar(campo, key);
    
    var valor = variaveis['valor'];
    var tamanho = variaveis['tamanho'];
    var tecla = variaveis['tecla'];

	valor = (tamanho > 8) ? valor.substr(0,8) : valor;

	if (tecla != 46 && tecla != 8){ //Se for diferente de backspace ou delete

	    if(tamanho <= 5){
	        campo.value = valor;
	    }
	    
	    //Formata CEP
	    if(tecla != 8 && tamanho >=5 && tecla != 36 && tecla != 37 && tecla != 39){
	        campo.value = valor.substr(0, 5) + '-' + valor.substr(5, tamanho-5);
	    }
	}
}

function formataHorario(campo, key){

    var variaveis = limpar(campo, key);
    
    var valor = variaveis['valor'];
    var tamanho = variaveis['tamanho'];
    var tecla = variaveis['tecla'];

	valor = (tamanho > 4) ? valor.substr(0,4) : valor;

	if (tecla != 46 && tecla != 8){ //Se for diferente de backspace ou delete
	
	    if(tamanho <= 2){
	        campo.value = valor;
	    }
	    
	    //Formata Horario
	    if(tecla != 8 && tamanho >=2 && tecla != 36 && tecla != 37 && tecla != 39){
	        campo.value = valor.substr(0, 2) + ':' + valor.substr(2, tamanho-2);
	    }
    }
}

function formataCnpj(campo, key){

    var variaveis = limpar(campo, key);
    
    var valor = variaveis['valor'];
    var tamanho = variaveis['tamanho'];
    var tecla = variaveis['tecla'];

	valor = (tamanho > 14) ? valor.substr(0,14) : valor;

	if (tecla != 46 && tecla != 8){ //Se for diferente de backspace ou delete
	
	    if(tamanho <= 2){
	        campo.value = valor;
	    }
	    
	    //Formata CNPJ
	    if(tecla != 8 && tamanho >=2 && tecla != 36 && tecla != 37 && tecla != 39){
	        if (tamanho < 5){
	            campo.value = valor.substr(0, 2) + '.' + valor.substr(2, tamanho-2);
	        }
	        if (tamanho >= 5 && tamanho < 8){
	            campo.value = valor.substr(0, 2) + '.' + valor.substr(2, 3) + '.' + valor.substr(5, tamanho-5);
	        }
	        if (tamanho >= 8 && tamanho < 13){
	            campo.value = valor.substr(0, 2) + '.' + valor.substr(2, 3) + '.' + valor.substr(5, 3) + '/' + valor.substr(8, tamanho-8);
	        }
	        if (tamanho >= 13){
	            campo.value = valor.substr(0, 2) + '.' + valor.substr(2, 3) + '.' + valor.substr(5, 3) + '/' + valor.substr(8, 4) + '.' + valor.substr(12, 2);
	        }
	    }
    }
}

function formataTelefone(campo, key){

    var variaveis = limpar(campo, key);
    
    var valor = variaveis['valor'];
    var tamanho = variaveis['tamanho'];
    var tecla = variaveis['tecla'];

	valor = (tamanho > 8) ? valor.substr(0,8) : valor;

	if (tecla != 46 && tecla != 8){ //Se for diferente de backspace ou delete

	    if(tamanho <= 4){
	        campo.value = valor;
	    }
	    
	    //Formata CEP
	    if(tecla != 8 && tamanho >=4 && tecla != 36 && tecla != 37 && tecla != 39){
	        campo.value = valor.substr(0, 4) + '-' + valor.substr(4, tamanho-4);
	    }
	}
}

function formataTelefoneDDD(campo, key){

    var variaveis = limpar(campo, key);
    
    var valor = variaveis['valor'];
    var tamanho = variaveis['tamanho'];
    var tecla = variaveis['tecla'];

	valor = (tamanho > 10) ? valor.substr(0,10) : valor;

	if (tecla != 46 && tecla != 8){ //Se for diferente de backspace ou delete
	
	    //Formata Telefone
	    if(tecla != 8 && tecla != 36 && tecla != 37 && tecla != 39){
	        if (tamanho < 2){
	            campo.value = '(' + valor.substr(0, 2);
	        }
	        if (tamanho >= 2 && tamanho < 7){
	            campo.value = '(' + valor.substr(0, 2) + ')' + valor.substr(2, tamanho-2);
	        }
	        if (tamanho >= 6){
	            campo.value = '(' + valor.substr(0, 2) + ')' + valor.substr(2, 4) + '-' + valor.substr(6, tamanho-6);
	        }
	    }
    }
}

