<!--
/*

Validador de Formulário
Elder Pimenta
Criação: 25/02/2003

USO:
No botão SUBMIT use o seguinte parâmetro
onClick = "ValidaForm(campo1,alias1,teste1,campo2,alias2,teste2,campoN,aliasN,testeN);return document.returnValue"
campo = campos do formulário. Ex: nome, email, numero
alias = nome que aparecerá na mensagem. Ex: Nome, E-Mail, Número
teste = começando com "R" é requerido. Ex: RisNum, RisCPF, RisCPF
	    começando com "N" não é requerido. Ex: NisNum, NisCPF, NisCPF
		isNum = tem que ser numérioco
		isEmail  = tem que ser um e-mail
		isCPF = tem que ser um valor válido de CPF
		isCNPJ = tem que ser um valor válido de CNPJ

EXEMPLO:
<input name="Submit" type="submit" onClick="ValidaForm('nome','Nome','R','cpf','CPF','RisCPF','cnpj','CNPJ','RisCNPJ','email','E-mail','RisEmail','numero','Número','RisNum');return document.returnValue" value="Submit">

*/

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}



function ValidaForm () {
//alert(document.getElementById('nome').value)
	
	var errors='', p, nm, alias, test, args=ValidaForm.arguments
	for (i=0; i<=(args.length-3); i+=3) {
		nm = args[i]; 
		alias = args[i+1]; 
		test = args[i+2];
		val=MM_findObj(args[i])
		if (val) { 
			nm=val.name;
			if ((val=val.value)!="") {
				if (test.indexOf('isEmail')!=-1) {
					p=val.indexOf('@');
        			if (p<1 || p==(val.length-1)) errors+='- "'+alias+'" contém um e-mail inválido.\n';
				} else if (test.indexOf('isNum')!=-1) {
					if (isNaN(val)) errors+='- "'+alias+'" deve conter um valor numérico.\n';
				} else if (test.indexOf('isCPF')!=-1) {
					if (validCPF(val)==false) errors+='- "'+alias+'" não é um CPF válido.\n';
				} else if (test.indexOf('isCNPJ')!=-1) {
					if (validCNPJ(val)==false) errors+='- "'+alias+'" não é um CNPJ válido.\n';
				}
			} else if (test.charAt(0) == 'R') errors += '- "'+alias+'" não foi preenchido.\n'; 
		}
	}
if (errors) alert('Os seguintes erros ocorreram:\n'+errors);
document.returnValue = (errors == '');
}






//VALIDA CPF

function validCPF(campo) {
var CPF = campo; // Recebe o valor digitado no campo

// Aqui começa a checagem do CPF
var posicao, I, soma, dv, dv_informado;
var digito = new Array(10);
dv_informado = CPF.substr(9, 2); // Retira os dois últimos dígitos do número informado

// Desemembra o número do CPF na array digito
for (I=0; I<=8; I++) {
  digito[I] = CPF.substr( I, 1);
}

// Calcula o valor do 10º dígito da verificação
posicao = 10;
soma = 0;
   for (I=0; I<=8; I++) {
      soma = soma + digito[I] * posicao;
      posicao = posicao - 1;
   }
digito[9] = soma % 11;
   if (digito[9] < 2) {
        digito[9] = 0;
}
   else{
       digito[9] = 11 - digito[9];
}

// Calcula o valor do 11º dígito da verificação
posicao = 11;
soma = 0;
   for (I=0; I<=9; I++) {
      soma = soma + digito[I] * posicao;
      posicao = posicao - 1;
   }
digito[10] = soma % 11;
   if (digito[10] < 2) {
        digito[10] = 0;
   }
   else {
        digito[10] = 11 - digito[10];
   }

// Verifica se os valores dos dígitos verificadores conferem
dv = digito[9] * 10 + digito[10];
   if (dv != dv_informado) {
      return false;
   } 
}











// VALIDA CNPJ
function validCNPJ(campo)
	{
	if(VerifyCNPJ(campo) != 1 && campo!="")
		{
		return false
		}
	return true;
	}

// Aqui inicia as funções de teste do CNPJ


function isNUMB(c)
	{
	if((cx=c.indexOf(","))!=-1)
		{		
		c = c.substring(0,cx)+"."+c.substring(cx+1);
		}
	if((parseFloat(c) / c != 1))
		{
		if(parseFloat(c) * c == 0)
			{
			return(1);
			}
		else
			{
			return(0);
			}
		}
	else
		{
		return(1);
		}
	}

function LIMP(c)
	{
	while((cx=c.indexOf("-"))!=-1)
		{		
		c = c.substring(0,cx)+c.substring(cx+1);
		}
	while((cx=c.indexOf("/"))!=-1)
		{		
		c = c.substring(0,cx)+c.substring(cx+1);
		}
	while((cx=c.indexOf(","))!=-1)
		{		
		c = c.substring(0,cx)+c.substring(cx+1);
		}
	while((cx=c.indexOf("."))!=-1)
		{		
		c = c.substring(0,cx)+c.substring(cx+1);
		}
	while((cx=c.indexOf("("))!=-1)
		{		
		c = c.substring(0,cx)+c.substring(cx+1);
		}
	while((cx=c.indexOf(")"))!=-1)
		{		
		c = c.substring(0,cx)+c.substring(cx+1);
		}
	while((cx=c.indexOf(" "))!=-1)
		{		
		c = c.substring(0,cx)+c.substring(cx+1);
		}
	return(c);
	}

function VerifyCNPJ(CNPJ)
	{
	CNPJ = LIMP(CNPJ);
	if(isNUMB(CNPJ) != 1)
		{
		return(0);
		}
	else
		{
		if(CNPJ == 0)
			{
			return(0);
			}
		else
			{
			g=CNPJ.length-2;
			if(RealTestaCNPJ(CNPJ,g) == 1)
				{
				g=CNPJ.length-1;
				if(RealTestaCNPJ(CNPJ,g) == 1)
					{	
					return(1);
					}
				else
					{
					return(0);
					}
				}
			else
				{
				return(0);
				}
			}
		}
	}
function RealTestaCNPJ(CNPJ,g)
	{
	var VerCNPJ=0;
	var ind=2;
	var tam;
	for(f=g;f>0;f--)
		{
		VerCNPJ+=parseInt(CNPJ.charAt(f-1))*ind;
		if(ind>8)
			{
			ind=2;
			}
		else
			{
			ind++;
			}
		}
		VerCNPJ%=11;
		if(VerCNPJ==0 || VerCNPJ==1)
			{
			VerCNPJ=0;
			}
		else
			{
			VerCNPJ=11-VerCNPJ;
			}
	if(VerCNPJ!=parseInt(CNPJ.charAt(g)))
		{
		return(0);
		}
	else
		{
		return(1);
		}
	}

//-->

