/********************************************************
 * 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 numerocnj(v){
	//NNNNNNN-DD.AAAA.J.TR.OOOO
	if (v.match(/^\d{1,7}-/)) {
		while (v.length < 8)
			v='0'+v;
	}
	v=v.substring(0,25)
	v=v.replace(/\D/g,"")
	v=v.replace(/^(\d{7})(\d)/,"$1-$2")
	v=v.replace(/^(\d{7}-\d{2})(\d)/ ,"$1.$2")
	v=v.replace(/^(\d{7}-\d{2}\.\d{4})(\d)/ ,"$1.$2")
	v=v.replace(/^(\d{7}-\d{2}\.\d{4}\.\d{1})(\d)/ ,"$1.$2")
	v=v.replace(/^(\d{7}-\d{2}\.\d{4}\.\d{1}\.\d{2})(\d)/ ,"$1.$2")
	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 = 0;

function setProcessoGrauMask(opt) {
	document.getElementById("nuProcesso").value='';
	document.getElementById("nuProcesso").focus();
	processoGrauMask = opt;	
}

function maskProcessoGrau(obj) {
	if (processoGrauMask > 0) {
		if (processoGrauMask == 'cnj' || processoGrauMask == 9) {
			mascara(obj, numerocnj)
		} else if (processoGrauMask == 'pg' || processoGrauMask == 1) {
			mascara(obj, pgrau)
		} else {
			mascara(obj, sgrau)
		}
	}
}


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

var processoPreparoMask = 0;
    
function setProcessoPreparoMask(opt) {
	document.getElementById("nuProcesso").value='';
	document.getElementById("nuProcesso").focus();
	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);
	} else if (processoPreparoMask == 9) {
		mascara(obj, numerocnj);
	}

}


/* 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);
//	}
//}

