/********************************************************
 * Validações adicionais e mascaras
 * Este script deve ser incluído depois dos scripts:
 * - validation.js
 * - cpfcnpj.js
 *********************************************************/


/* -----------------------------------------------------
 * Extensões customizadas para o Dexagogo
 * URL: http://tetlaw.id.au/view/javascript/really-easy-field-validation
 */

Validation.add('validate-size150', 'O tamanho m&aacute;ximo &eacute; de 150 caracteres', {
	maxLength : 150
});

Validation.add('validate-cpfcnpj', 'O n&uacute;mero &eacute; inv&aacute;lido', function(v) {
	if(v != '') return isCpfCnpj(v);
	return true;
});


/* -----------------------------------------------------
 * Mascaras para campos de formulario:
 * - soNumeros [0-9]
 * - telefone  [(##) ####-####]
 * - cpf       [###.###.###-##]
 * - cnpj      [##.###.###/####-##]
 * - cep       [#####-###]
 * - romanos   (aceita apenas números romanos. ex: I, II, MC, XVII)
 * - site      (aceita apenas url/uri)
 * - pgrau     [###.##.######-#/###]   (número de processo primeiro grau)
 * - sgrau     [####.######-#/####-##] (número de processo segundo grau)
 * - data      [##/##/####]
 * - dolar     [#.##]
 * Exemplo: onkeypress="mascara(this,telefone)" 
 */

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
}

function soNumeros(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 cpf(v){
    v=v.substring(0,14)
    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 pgrau(v){
	//111.11.111111-1/111 
	v=v.substring(0,19)
    v=v.replace(/\D/g,"")                                //Remove tudo o que não é dígito
    v=v.replace(/^(\d{3})(\d)/,"$1.$2")                  //primeiro ponto
    v=v.replace(/^(\d{3})\.(\d{2})(\d)/,"$1.$2.$3")      //primeiro e segundo pontos       
	v=v.replace(/\.(\d{6})(\d)/,".$1-$2")	             //adiciona o traco depois do ultimo ponto
	v=v.replace(/-(\d{1})(\d)/,"-$1/$2")                 //adiciona a barra depois do traco
    return v
}

function sgrau(v){
	//2222.222222-2/2222-22
	v=v.substring(0,21)
    v=v.replace(/\D/g,"")                                //Remove tudo o que não é dígito
    v=v.replace(/^(\d{4})(\d)/,"$1.$2")                  //primeiro ponto
    v=v.replace(/\.(\d{6})(\d)/,".$1-$2")                 //primeiro traco	
	v=v.replace(/-(\d{1})(\d)/,"-$1/$2")                 //adiciona a barra depois do primeiro traco
    v=v.replace(/\/(\d{4})(\d)/,"/$1-$2")	             //adiciona o traco depois da barra
    return v
}

function cep(v){
	v=v.substring(0,8)	
    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 cnpj(v){
    v=v.substring(0,18)
    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 site(v){
    //Esse sem comentarios para que você entenda sozinho ;-)
    v=v.replace(/^http:\/\/?/,"")
    dominio=v
    caminho=""
    if(v.indexOf("/")>-1)
        dominio=v.split("/")[0]
        caminho=v.replace(/[^\/]*/,"")
    dominio=dominio.replace(/[^\w\.\+-:@]/g,"")
    caminho=caminho.replace(/[^\w\d\+-@:\?&=%\(\)\.]/g,"")
    caminho=caminho.replace(/([\?&])=/,"$1")
    if(caminho!="")dominio=dominio.replace(/\.+$/,"")
    v="http://"+dominio+caminho
    return v
}

function data(v){
    v=v.substring(0,10)
    v=v.replace(/\D/g,"")                    //Remove tudo o que nao é digito
    v=v.replace(/(\d{2})(\d)/,"$1/$2")       //Coloca uma barra entre o segundo e o terceiro digitos
    v=v.replace(/(\d{2})(\d)/,"$1/$2")       //Coloca uma barra entre o quinto e sexto digitos 
    return v
}

function dolar(v){    
    v=v.replace(/\D/g,"")                    //Remove tudo o que nao é digito
    v=v.replace(/(\d*)(\d{2})/,"$1.$2")       //Coloca um ponto antes dos dois ultimos digitos
    return v
}


/* mascara de cpf/cnpj
 * ---------------------------------------------------- 
 */

var cpfCnpjMask = 'cpf';
function setCpfCnpjMask(opt) {
	cpfCnpjMask = opt;	
}

function maskCpfCnpj(obj) {
	if (cpfCnpjMask == 'cnpj') {
		mascara(obj, cnpj)
	} else {
		mascara(obj, cpf)
	}	
}


/* mascara de numero de processo do protocolo
 * ---------------------------------------------------- 
 */

var processoGrauMask = 'pg';

function setProcessoGrauMask(opt) {
	processoGrauMask = opt;	
}

function maskProcessoGrau(obj) {
	if (processoGrauMask == 'pg' || processoGrauMask == 1) {
		mascara(obj, pgrau)
	} else {
		mascara(obj, sgrau)
	}	
}


/* mascara de numero de processo para tipo de preparo
 * ---------------------------------------------------- 
 */

var processoPreparoMask = 1;
    
function setProcessoPreparoMask(opt) {
	processoPreparoMask = opt;
}

function maskProcessoPreparo(obj) {	
	if (processoPreparoMask == 1) {
	    mascara(obj, pgrau); 	
	} else if (processoPreparoMask == 2) {
	    mascara(obj, sgrau); 
	} else if (processoPreparoMask == 3) {
	    mascara(obj, pgrau);
	} else if (processoPreparoMask == 4) {
	    mascara(obj, sgrau); 
	} else if (processoPreparoMask == 5) {
	    mascara(obj, pgrau); 
	} else if (processoPreparoMask == 6) {
	    mascara(obj, pgrau);
	} else if (processoPreparoMask == 7) {
	    mascara(obj, pgrau);
	} else if (processoPreparoMask == 8) {
	    mascara(obj, sgrau);
	}
}


/* mascara de numero de processo para recurso STF
 * --------------------------------------------------- 
 */

var processoRecursoMask = 0;

function setProcessoRecursoMask(opt) {
	processoRecursoMask = opt;	
}

function maskProcessoRecurso(obj) {
	// mascara apenas para opcao 1 - tribunal de justica
	if (processoRecursoMask == 1) {
		mascara(obj, sgrau); 
	} 
}
