//alert('validacao.js');

function validaCPF(cpf) {
		cpf = cpf.replace(/\D+/g, '')
		valor = true;
		erro = "";
		//cpf = cpf.replace(" ","")
		//cpf = cpf.replace(".","")
		//cpf = cpf.replace("-","")

		if (cpf.length < 11) erro += "Sao necessarios 11 digitos para verificacao do CPF! \n\n"; 
		var nonNumbers = /\D/;
		if (nonNumbers.test(cpf)) erro += "A verificacao de CPF suporta apenas numeros! \n\n";	
		if (cpf == "00000000000" || cpf == "11111111111" || cpf == "22222222222" || cpf == "33333333333" || cpf == "44444444444" || cpf == "55555555555" || cpf == "66666666666" || cpf == "77777777777" || cpf == "88888888888" || cpf == "99999999999"){
			  erro += "Numero de CPF invalido!"
		}
		var a = [];
		var b = new Number;
		var c = 11;
		for (z=0; z<11; z++){
			a[z] = cpf.charAt(z);
			if (z < 9) b += (a[z] *  --c);
		}
		if ((x = b % 11) < 2) { a[9] = 0 } else { a[9] = 11-x }
		b = 0;
		c = 11;
		for (y=0; y<10; y++) b += (a[y] *  c--); 
		if ((x = b % 11) < 2) { a[10] = 0; } else { a[10] = 11-x; }
		if ((cpf.charAt(9) != a[9]) || (cpf.charAt(10) != a[10])){
			erro +="Digito verificador com problema!";
		}

		return erro;
	}


function  validaCNPJ( cnpj ) { 

	//alert(cnpj)
 
     var numeros, digitos, soma, i, resultado, pos, tamanho, digitos_iguais, cnpj = cnpj.replace(/\D+/g, ''); 
     digitos_iguais = 1; 
    if (cnpj.length != 14) 
            { 
                 //alert('CNPJ inválido'); 
                 return false; 
                 } 
 
     for (i = 0; i < cnpj.length - 1; i++) 
           if (cnpj.charAt(i) != cnpj.charAt(i + 1)) 
                 { 
                 digitos_iguais = 0; 
                 break; 
                 } 
     if (!digitos_iguais) 
           { 
           tamanho = cnpj.length - 2 
           numeros = cnpj.substring(0,tamanho); 
           digitos = cnpj.substring(tamanho); 
           soma = 0; 
           pos = tamanho - 7; 
           for (i = tamanho; i >= 1; i--) 
                 { 
                 soma += numeros.charAt(tamanho - i) * pos--; 
                 if (pos < 2) 
                       pos = 9; 
                 } 
           resultado = soma % 11 < 2 ? 0 : 11 - soma % 11; 
           if (resultado != digitos.charAt(0)) 
				{ 
                 //alert('CNPJ inválido'); 
                 return false; 
                 } 
 
           tamanho = tamanho + 1; 
           numeros = cnpj.substring(0,tamanho); 
           soma = 0; 
           pos = tamanho - 7; 
           for (i = tamanho; i >= 1; i--) 
                 { 
                 soma += numeros.charAt(tamanho - i) * pos--; 
                 if (pos < 2) 
                       pos = 9; 
                 } 
           resultado = soma % 11 < 2 ? 0 : 11 - soma % 11; 
           if (resultado != digitos.charAt(1)){ 
                 //alert('CNPJ inválido'); 
                 return false; 
                 } 
           else { 
				 // alert('CNPJ  OK !'); 
				return true; 
				} 
           } 
     else{ 
           //alert('CNPJ inválido'); 
           return false; 
           } 
     }  




function validaCEP(CEP)	{
	erro = new String;
	
	CEP = CEP.replace(" ","")
	CEP = CEP.replace(".","")
	CEP = CEP.replace("-","")
	
	if (CEP.length < 8) erro += "CEP inválido. 11 dígitos"; 

	var nonNumbers = /\D/;
	if (nonNumbers.test(CEP)) erro += "CEP inválido. Apenas numeros";	
	
	return erro;

}


/*
#############################################################################################################
Padrão de Preenchimento

Os campos que serão validados devem ter o id com a seguinte estrutura

id="campo_validaXY"

X =  tipo de dados a ser validado, este que pode ser:
t: texto qualquer
d: numérico decimal
i: numérico inteiro
e: e-mail
f: cpf
j: cnpj
c: cep
p: senha
a: data

Y = tipo de dados obrigatório ou não obrigatório, este que pode ser:
R: obrigatorio
N: não obrigatorio

Cada campo deve ter sua respectiva DIV, onde será apresentada a mensagem de erro daquele campo
deve ter o id igual ao nome do campo mais "_msg"
<div id="campo_validaXY_msg">

padrão de preenchimento do campo senha (seguindo letras maiúsculas e minúsculas)
senha1_PR
senha2_PR
ou
senha1_PN
senha2_PN



#############################################################################################################
*/

 
function verifica(form) 
{

	var campo;
	var form;
	var errocampo;
	var id;
	var id_erro_campo;
	
	//form = eval('document.' + NomeForm);
	erroGeral = 0;
	
	//alert(form.name);
	
	//alert(form.elements.length);
	
	
	//alert('ver6');
	
	//limpa todas a div´s de mensagem
	for(i=0; i< form.elements.length ; i++){
		id = form.elements[i].id
		type = form.elements[i].type
		if(((type == 'text') || (type == 'textarea') || (type == 'password')) && (id!="") && (  id.substring(id.length-3,id.length-2) == "_"  ) )
		{
			//campo = eval('document.all.' + form.elements[i].id + '_msg');

			campo = document.getElementById(form.elements[i].id + '_msg');
			if (campo != null) {
				campo.innerHTML = '';
			}
		}
	}
	//verifica cada campo
	for(i=0; i< form.elements.length ; i++)
	{
		id = form.elements[i].id
		type = form.elements[i].type
		if(((type == 'text') || (type == 'textarea') || (type == 'password')) && (id!="") && (  id.substring(id.length-3,id.length-2) == "_"  ) )
		{
			errocampo = null;
		
			valor = form.elements[i].id
			
			Requerido = valor.substring(valor.length - 1,valor.length);
			Requerido = Requerido.toLowerCase();
			TipoValidacao = valor.substring(valor.length - 2,valor.length - 1);
			TipoValidacao = TipoValidacao.toLowerCase();
		
			campo = form.elements[i]
			valor = campo.value;
			msg = document.getElementById(campo.id + '_msg');
			
			//verifica caracteres inválidos
			//CaracteresInvalidos = '* < > | & %';
			CaracteresInvalidos = "' * < > |";
			vCaracInv = CaracteresInvalidos.split(" ");
			
			for(q=0;q < vCaracInv.length ; q++)
			{
				//alert(vCaracInv[i] + '---C');
				for(j=0;j<valor.length;j++)
				{
					//alert( vCaracInv[q] + " = " + valor.substring(j,j+1));
					if(vCaracInv[q] == valor.substring(j,j+1))
					{
						msg.innerHTML = "Caractere Inválido: "+CaracteresInvalidos+" ";
						errocampo = campo.id;
					}
				}
			}
		
			if((Requerido=='r') && (valor =="" || valor == null))
			{
				//caso seja campo do tipo senha exibir apenas uma mensagem
				if(TipoValidacao == 'p')
				{
					msg=document.getElementById(campo.id.substring(0,campo.id.length-4) + '1_P'+ Requerido.toUpperCase() + '_msg');
//					msg = eval('document.all.' + );
				}
				msg.innerHTML = 'Obrigatório';
				errocampo = campo.id;
			}
			else
			{
				if(valor !="" )
				{
					//alert(TipoValidacao);
					switch(TipoValidacao)
					{
						case 't':
							break;
						case 'd':
							valor = valor.replace(".","")
							valor = valor.replace(",",".")
							if(isNaN(valor) == true){
								msg.innerHTML = 'O Valor deve ser numérico';
								errocampo = campo.id;
							}
							break;
						case 'i':
							valor = valor.replace(".","")
							valor = valor.replace(",",".")
							if(isNaN(valor.replace(",",".")) != true){
								if(valor.search(/,/g) > -1){
									msg.innerHTML = 'O Valor deve ser numérico Inteiro';
									errocampo = campo.id;
								}
							}else{
								msg.innerHTML = 'O Valor deve ser numérico';
								errocampo = campo.id;
							}
							break;
						case 'e':
							if((valor.search(/@/g) == -1) || (valor.search(/./g) == -1) || (valor.length < 5)){
								msg.innerHTML = 'Email inválido';
								errocampo = campo.id;
							}
							break;
						case 'f':
							if(validaCPF(valor) != ""){
								msg.innerHTML = 'CPF inválido.';
								errocampo = campo.id;
							}
							break;
						case 'j':
							if(!validaCNPJ(valor)){
								msg.innerHTML = "CNPJ inválido.";
								errocampo = campo.id;
							}
							break;
						case 'c':
							if(validaCEP(valor) != ""){
								msg.innerHTML = 'CEP inválido';
								errocampo = campo.id;
							}
							break;
						case 'p':
							Valor1 = document.getElementById(campo.id.substring(0,campo.id.length-4) + '1_P'+ Requerido.toUpperCase());
							Valor2 = document.getElementById(campo.id.substring(0,campo.id.length-4) + '2_P'+ Requerido.toUpperCase());
							
							msg = document.getElementById(campo.id.substring(0,campo.id.length-4) + '1_P'+ Requerido.toUpperCase() + '_msg')
							
							//alert(Valor1 + "!=" + Valor2);
							//alert("\n msg :" + msg);
											
							if((Valor1.value == "" || Valor1.value == null) || (Valor2.value == "" || Valor2.value == null)){
								msg.innerHTML = "Preenchimento Obrigatório de ambos os campos";
								errocampo = campo.id;
							}else{
								if(Valor1.value != Valor2.value){
									msg.innerHTML = "As senhas não são iguais";
									errocampo = campo.id;
								}
								else{
									msg.innerHTML = "";
									}
							}
							break;
						
						case 'a':
							barras = valor.split("/");
							if (barras.length == 3){
								dia = barras[0];
								mes = barras[1];
								ano = barras[2];
								resultado = (!isNaN(dia) && (dia > 0) && (dia < 32)) && (!isNaN(mes) && (mes > 0) && (mes < 13)) && (!isNaN(ano) && (ano.length == 4));
								if (!resultado) {
									msg.innerHTML = "Formato de data inválido (dd/mm/aaaa)";
									errocampo = campo.id;
								}
							} else {
								msg.innerHTML = "Formato de data inválido (dd/mm/aaaa)";
								errocampo = campo.id;
							}
							break;
					}
				}
			}
	////////////////////////////////////////////////////////////////////////////////////////
	////					MUDA O ESTILO DO CAMPO CASO HAJA ERRO				
	////////////////////////////////////////////////////////////////////////////////////////
			if(errocampo != null)															
			{																				
				erroGeral = 1;																
				campo.className = 'form_erro';												
				if(id_erro_campo == null)													
				{																			
					id_erro_campo = errocampo;												
				}																			
			}																				
			else																			
			{	
				
				if ( !campo.readOnly ) {
					campo.className = 'form_campo';											
				}
			}																				
	////////////////////////////////////////////////////////////////////////////////////////
	////	ESTE TRECHO DE CODIGO ESTAVA DEPOIS DO FECHAMENTO DA PRÓXIMA CHAVE	
	////   OCASIONAVA O ERRO DA MENSAGEM DO ULTIMO CAMPO APARECER COMO UM INPUT	
	////////////////////////////////////////////////////////////////////////////////////////
		}
	}
		//alert('Erro Geral: ' + erroGeral);
	if(erroGeral == 1)
	{
		//alert(id_erro_campo);
		document.getElementById(id_erro_campo).select();
		document.getElementById(id_erro_campo).focus();
		return false; 
	}
	else
	{
		return true;
	} 
} 


