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++){
		
		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) == "_") )
		{
		//alert((form.elements[i].name));
			//campo = eval('document.all.' + form.elements[i].id + '_msg');
			campo = document.getElementById(form.elements[i].id + '_msg')
			try{
			campo.innerHTML = '';
			}
			catch(excep)
			{
				//alert(type+' -- '+id);
			}
		}
	}
	
	//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 = 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(",",".").replace(".","").replace(".","")) == true){
								msg.innerHTML = 'O Valor deve ser monetário';
								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;
					}
				}
			}
		////////////////////////////////////////////////////////////////////////////////////////////////
		////////////					MUDA O ESTILO DO CAMPO CASO HAJA ERRO					////////
		////////////////////////////////////////////////////////////////////////////////////////////////
			if(errocampo != null)																////////
			{																					////////
			x(id_erro_campo);
				erroGeral = 1;																	////////
				campo.className = 'form_erro';													////////
				if(id_erro_campo == null)														////////
				{																				////////
					id_erro_campo = errocampo;													////////
				}																				////////
			}																					////////
			else																				////////
			{																					////////
				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;
	} 
} 
function x(texto){
	if(navigator.appVersion.toString().indexOf("MSIE 9")!=-1)
	{
		alert(texto);
	}
}





