//*****************************************************************************//
//**** Biblioteca de validação de preenchimento de campos de um formulário ****//
// Por convenção os nomes padrão para os campos do formulário devem ser:
// nome				
// endereco
// cidade
// telefone
// cep
// complemento
// bairro
// cpf
// cnpj
// rg
// ie
// fax
// numero
// celular
// mensagem
// estado
// sexo
// email
// site
// custom (Colocar o nome do campo logo após a palavra "custom", exemplo: customdata)
// Para informar que um campo é requerido basta colocar "_" no final do nome do campo, exemplo: nome_
//*****************************************************************************//
function enviaForm( formulario ) {
	if(!formulario) formulario = event.target || event.srcElement;
	var validou = true;
	for(var i=0; i < formulario.elements.length; i++){
	  nome = formulario.elements[i].name.split('_');
	  switch(nome[0]){
		case 'cpf':
			if(!valida_cpf(formulario.elements[i].value) && nome.length==2){
				alert( "Número de CPF inválido!" );
				formulario.elements[i].focus();
				return false;
			}
			break;
		case 'cnpj':
			if(!valida_cnpj(formulario.elements[i].value && nome.length==2)){
				alert( "Número de CNPJ inválido!" );
				formulario.elements[i].focus();
				return false;
			}
			break;
		case 'email':
			if (!valida_email(formulario.elements[i].value) && nome.length==2){
			  alert( "Por favor informe um endereço de E-mail válido no formato: seu@email.com" );
			  formulario.elements[i].focus();
			  return false;
		  	}
			break;
		case 'cep':
			if (!valida_cep(formulario.elements[i].value) && nome.length==2){
			  alert( "Por favor informe um número de CEP válido." );
			  formulario.elements[i].focus();
			  return false;
		  	}
			break;
		case 'nome':
		case 'endereco':
		case 'cidade':
		case 'telefone':
		case 'complemento':
		case 'bairro':
		case 'site':
		case 'rg':
		case 'ie':
		case 'fax':
		case 'numero':
		case 'celular':
		case 'mensagem':
		case 'estado':
		case 'sexo':
		default:
			if(nome.length==2 && formulario.elements[i].value==""){
				alert( "Por favor preencha todos os campos obrigatórios!" );
				formulario.elements[i].focus();
				return false;
			}
			break;
	  }
	}
	formulario.submit();
	return true;
}

// Função para validação de Email
function valida_email(mail)
{
	var reMail = /^[\w!#$%&'*+\/=?^`{|}~-]+(\.[\w!#$%&'*+\/=?^`{|}~-]+)*@(([\w-]+\.)+[A-Za-z]{2,6}|\[\d{1,3}(\.\d{1,3}){3}\])$/; 
	return reMail.test(mail);
}

// Função para validação de CEP.
function valida_cep(cep)
{
	// Caso o CEP não esteja nesse formato ele é inválido!
	var reCep = /^[0-9]{2}\.[0-9]{3}-[0-9]{3}$/;
	return reCep.test(cep);
}

// Função para validação de CPF
function valida_cpf(tmpcpf)
{
var numeros, digitos, soma, i, resultado, digitos_iguais, cpf;
digitos_iguais = 1;

cpf = tmpcpf.replace(".", "");
cpf = cpf.replace(".", "");
cpf = cpf.replace("-", "");

if (cpf.length < 11)
	  return false;
for (i = 0; i < cpf.length - 1; i++)
	  if (cpf.charAt(i) != cpf.charAt(i + 1))
			{
			digitos_iguais = 0;
			break;
			}
if (!digitos_iguais)
	  {
	  numeros = cpf.substring(0,9);
	  digitos = cpf.substring(9);
	  soma = 0;
	  for (i = 10; i > 1; i--)
			soma += numeros.charAt(10 - i) * i;
	  resultado = soma % 11 < 2 ? 0 : 11 - soma % 11;
	  if (resultado != digitos.charAt(0))
			return false;
	  numeros = cpf.substring(0,10);
	  soma = 0;
	  for (i = 11; i > 1; i--)
			soma += numeros.charAt(11 - i) * i;
	  resultado = soma % 11 < 2 ? 0 : 11 - soma % 11;
	  if (resultado != digitos.charAt(1))
			return false;
	  return true;
	  }
else
	  return false;
}

// Função para validação de CNPJ
function valida_cnpj(tmpcnpj)
{
var numeros, digitos, soma, i, resultado, pos, tamanho, digitos_iguais, cnpj;
digitos_iguais = 1;

cnpj = tmpcnpj.replace(".", "");
cnpj = cnpj.replace(".", "");
cnpj = cnpj.replace("/", "");
cnpj = cnpj.replace("-", "");

if (cnpj.length < 14 && cnpj.length < 15)
	  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))
			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))
			return false;
	  return true;
	  }
else
	  return false;
}
// Função de formatação de CEP
function formataCep(cep){
	if(!cep) cep = event.target || event.srcElement;
	if(cep.value.length==3 && cep.value.substr(2)!="."){
		cep.value = cep.value.substr(0,2)+"."+cep.value.substr(2);	
	} else if(cep.value.length==3 && cep.value.substr(2)=="."){
		cep.value = cep.value.substr(0,2);
	} else if(cep.value.length==7 && cep.value.substr(6)!="-"){
		cep.value = cep.value.substr(0,6)+"-"+cep.value.substr(6);	
	} else if(cep.value.length==7 && cep.value.substr(6)=="-"){
		cep.value = cep.value.substr(0,6);
	}
}

// Função de formatação de CPF
function formataCPF(cpf){
	if(!cpf) 
		cpf = event.target || event.srcElement;
	if( cpf.value.length==4 && cpf.value.substr(3)!="." ){
		cpf.value = cpf.value.substr(0,3)+"."+cpf.value.substr(3);
	} else if(cpf.value.length==4 && cpf.value.substr(3)==".") {
		cpf.value = cpf.value.substr(0,3);
	} else if( cpf.value.length==8 && cpf.value.substr(7)!="." ){
		cpf.value = cpf.value.substr(0,7)+"."+cpf.value.substr(7);
	} else if(cpf.value.length==8 && cpf.value.substr(7)==".") {
		cpf.value = cpf.value.substr(0,7);
	} else if( cpf.value.length==12 && cpf.value.substr(11)!="-" ){
		cpf.value = cpf.value.substr(0,11)+"-"+cpf.value.substr(11);
	} else if(cpf.value.length==12 && cpf.value.substr(11)=="-") {
		cpf.value = cpf.value.substr(0,11);
	}
}

// Função de formatação de CNPJ
function formataCNPJ(cnpj){
	if(!cnpj)
		cnpj = event.target || event.srcElement;
	var cnpj = this;
	if( cnpj.value.length==4 && cnpj.value.substr(3)!="." ){
		cnpj.value = cnpj.value.substr(0,3)+"."+cnpj.value.substr(3);
	} else if(cnpj.value.length==4 && cnpj.value.substr(3)==".") {
		cnpj.value = cnpj.value.substr(0,3);
	} else if( cnpj.value.length==8 && cnpj.value.substr(7)!="." ){
		cnpj.value = cnpj.value.substr(0,7)+"."+cnpj.value.substr(7);
	} else if(cnpj.value.length==8 && cnpj.value.substr(7)==".") {
		cnpj.value = cnpj.value.substr(0,7);
	} else if( cnpj.value.length==12 && cnpj.value.substr(11)!="/" ){
		cnpj.value = cnpj.value.substr(0,11)+"/"+cnpj.value.substr(11);
	} else if(cnpj.value.length==12 && cnpj.value.substr(11)=="/") {
		cnpj.value = cnpj.value.substr(0,11);
	} else if( cnpj.value.length==17 && cnpj.value.substr(16)!="-" ){
		cnpj.value = cnpj.value.substr(0,16)+"-"+cnpj.value.substr(16);
	} else if(cnpj.value.length==17 && cnpj.value.substr(16)=="-") {
		cnpj.value = cnpj.value.substr(0,16);
	}
}

// Função de formatação de telefone
function formataFone(fone){
	if(!fone)
		fone = event.target || event.srcElement;
	if( fone.value.length==1 && fone.value.substr(0)!="(" ){
		fone.value = "(" + fone.value;
	} else if(fone.value.length==1 && fone.value.substr(0)=="(") {
		fone.value = "";
	} else if( fone.value.length==4 && fone.value.substr(3)!=") " ){
		fone.value = fone.value.substr(0,3)+") "+fone.value.substr(3);
	} else if(fone.value.length==5 && fone.value.substr(3)==") ") {
		fone.value = fone.value.substr(0,3);
	} else if( fone.value.length==10 && fone.value.substr(9)!="-" ){
		fone.value = fone.value.substr(0,9)+"-"+fone.value.substr(9);
	} else if(fone.value.length==10 && fone.value.substr(9)=="-") {
		fone.value = fone.value.substr(0,9);
	} 	
}

function Inicia(){
	var forms = document.getElementsByTagName('form');
	for(i=0; i < forms.length; i++){
		forms[i].onsubmit = enviaForm;
		for(j=0; j < forms[i].elements.length; j++){
			if(forms[i].elements[j].name.indexOf("cpf") > -1){
				forms[i].elements[j].onkeypress = formataCPF;				
				forms[i].elements[j].setAttribute('maxLength', 14);
			}
			if(forms[i].elements[j].name.indexOf("cnpj") > -1){
				forms[i].elements[j].onkeypress = formataCNPJ;
				forms[i].elements[j].setAttribute('maxLength', 19);
			}
			if(forms[i].elements[j].name.indexOf("cep") > -1){
				forms[i].elements[j].onkeypress = formataCep;
				forms[i].elements[j].setAttribute('maxLength', 10);
			}
			if((forms[i].elements[j].name.indexOf("telefone") > -1) || (forms[i].elements[j].name.indexOf("fax") > -1) || (forms[i].elements[j].name.indexOf("celular") > -1) ){
				forms[i].elements[j].onkeypress = formataFone;
				forms[i].elements[j].setAttribute('maxLength', 15);
			}
		}
	}
}

if (window.attachEvent) window.attachEvent("onload", Inicia);