function validaCPF(cpf) {
		valor = true;
		erro = "";
		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;
	}

/*
#############################################################################################################
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
c: cpf
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(NomeForm) {

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++){
	
	if((form.elements[i].type == 'text') || (form.elements[i].type == 'textarea') || (form.elements[i].type == 'password')){
	//alert((form.elements[i].name));
		//campo = eval('document.all.' + form.elements[i].id + '_msg');
		campo = document.getElementById(form.elements[i].id + '_msg')
		campo.innerHTML = '';
	}
}

//verifica cada campo
for(i=0; i< form.elements.length ; i++){

	
if((form.elements[i].type == 'text') || (form.elements[i].type == 'textarea') || (form.elements[i].type == 'password')){


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 = eval('document.all.' + campo.id + '_msg');

	
	//alert('valor = '+ valor + '\n r = ' + Requerido + '\n tipo = ' + TipoValidacao);
	
	//verifica caracteres inválidos
    //CaracteresInvalidos = '* < > | & %';
    CaracteresInvalidos = '* |';
	vCaracInv = CaracteresInvalidos.split(" ");
		//alert(valor);
		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 = eval('document.all.' + campo.id.substring(0,campo.id.length-4) + '1_P'+ Requerido.toUpperCase() + '_msg');
		}
		msg.innerHTML = 'Obrigatório';
		errocampo = campo.id;

}else if(valor !="" ) {
//alert(TipoValidacao);
		switch(TipoValidacao){
		case 't':
				break;
		case 'd':
				if(isNaN(valor.replace(",",".")) == true){
					msg.innerHTML = 'O Valor deve ser numérico';
					errocampo = campo.id;
				}
				break;
		case 'i':
				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 'c':
					if(validaCPF(valor) != ""){
						msg.innerHTML = 'CPF inválido, digite apenas números';
						errocampo = campo.id;
					}
					break;
		case 'p':
				Valor1 = eval('form1.' + campo.id.substring(0,campo.id.length-4) + '1_P'+ Requerido.toUpperCase() +'.value');
				Valor2 = eval('form1.' + campo.id.substring(0,campo.id.length-4) + '2_P'+ Requerido.toUpperCase() +'.value');
				
				msg = eval('document.all.' + campo.id.substring(0,campo.id.length-4) + '1_P'+ Requerido.toUpperCase() + '_msg');
				
				//alert(Valor1 + "!=" + Valor2);
				//alert("\n msg :" + msg);
								
				if((Valor1 == "" || Valor1 == null) || (Valor2 == "" || Valor2 == null)){
					msg.innerHTML = "Preenchimento Obrigatório de ambos os campos";
					errocampo = campo.id;
				}else{
					if(Valor1 != Valor2){
						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;
		}
	}
}
			//alert(campo.id + ' - ' +errocampo);
			if(errocampo != null){
				erroGeral = 1;
				campo.className = 'form_erro';
				if(id_erro_campo == null){
					id_erro_campo = errocampo;
					//alert(id_erro_campo);
				}
			}
			else{
				campo.className = 'form_campo'; 
			}
}
	//alert('Erro Geral: ' + erroGeral);
	if(erroGeral == 1){
		//alert(id_erro_campo);
		document.getElementById(id_erro_campo).select();
		return false; 
	}else{
		return true;
		} 
} 

