//####################################################### FUNÇÂO PARA FORMULÁRIOS #################################################
//Desenvolvido por: Vitor Stevolo Moreno - Desenvolvedor WEB
//E-mail:vmoreno@usinadacriacao.com.br
//Versão:1.0
//Data de finalização: 29/10/2007
//Visivel em: Internet Exploer 6 | Mozila FireFox 2.0.0.8 | Opera 9.22 | Safari 3.0.3 (mascara não) | Netscape 8.1
//#################################################################################################################################

//Função De verificação dinâmica
function verificacao(nomeForm)
/*1*/{

//Configuração das Mensagens Padrão
msgBranco = document.getElementById('men_branco').innerHTML;//Mensagem para campos vacios
msgBrancoRadio = document.getElementById('men_branco_radio').innerHTML;//Mensagem para campos vacios - para radio button
msgEmail = document.getElementById('men_email').innerHTML;//Mensagem para e-mails inválidos
//Mensagem para campos que so aceita números
msgNumero = document.getElementById('men_numero_a').innerHTML;/*Começo da Mensagem*/
msgNumero2 = document.getElementById('men_numero_b').innerHTML;/*Fim da Mensagem*/
//Mensagens de erro para CPF
msgCPF1 = document.getElementById('men_cpf_a').innerHTML;
msgCPF2 = document.getElementById('men_cpf_b').innerHTML;
//Mensagens de erro para CEP
msgCEP1 = document.getElementById('men_cep_a').innerHTML;
msgCEP2 = document.getElementById('men_cep_b').innerHTML;
msgCEP3 = document.getElementById('men_cep_c').innerHTML;
//Mensagens de erro para CNPJ
msgCNPJ1 = document.getElementById('men_cnpj_a').innerHTML;
msgCNPJ2 = document.getElementById('men_cnpj_b').innerHTML;
//Mensagens de erro para Telefone
msgFone = document.getElementById('men_fone').innerHTML;
//Mensagem para minino de caracteres
msgCaracteres = document.getElementById('men_caracteres_a').innerHTML;
msgCaracteres2 = document.getElementById('men_caracteres_b').innerHTML;
msgCaracteres3 = document.getElementById('men_caracteres_c').innerHTML;
//Mensagem de erro para Link
msgLink = document.getElementById('men_link').innerHTML;
msgLink2 = document.getElementById('men_link_a').innerHTML;
//Mensagem de erro para Data
msgData = document.getElementById('men_data').innerHTML;
//Mensagem de erro para ckecked
msgCkecked = document.getElementById('men_ckecked').innerHTML;
//Mesagem de erro para Hora
msgHora = document.getElementById('men_hora').innerHTML;

//Capiturar o id do campo do formulário e transforma em objeto
form = document.getElementById(nomeForm);

//Varre o formulario em busca de campos para verificação
/*2*/for(q=0;q<form.length;q++){

//Verificação se o campo vacios
/*4*/if(form[q].getAttribute("verificar")!='' && form[q].getAttribute("verificar")!=undefined ){

//Verifica se o campo esta vacio, se sim, mostra mensagem para preencher o campo
/*5*/if(form[q].value==''){//Verifica se o campo esta vacio
alert(msgBranco+' "'+form[q].getAttribute("verificar")+'".');//Mensagem de erro
form[q].focus();//Retorna o foco para o campo que necessita ser preenchido
return false;//Não envia o formulário até que o campo seja preenchido
/*5*/}

//Verificação especifica para ckeckedbox e para radio button
/*51*/if(form[q].getAttribute("type")=='checkbox' || form[q].getAttribute("type")=='radio'){

h=0; //identificador
//Executa um for com a quantidade de campos
/*52*/for(y=1;y<=form[q].getAttribute("quantCampos");y++){

//Se o campo não estiver selecionado, acrescenta mais 1 para o identificador
/*53*/if(form[q+y-1].checked==false){
h++
/*54*/}
/*52*/}

//Se o identificador for igual a quantidade de campos, aparece a mensagem de erro
/*53*/if(h==form[q].getAttribute("quantCampos")){
if(form[q].getAttribute("type")=='checkbox'){
alert(msgCkecked+' "'+form[q].getAttribute("verificar")+'".');//Mensagem de erro
}else{
alert(msgBrancoRadio+' "'+form[q].getAttribute("verificar")+'".');//Mensagem de erro
}
form[q].focus();//Retorna o foco para o campo que necessita ser preenchido
return false;//Não envia o formulário até que o campo seja preenchido	
/*53*/}

/*51*/}

/*4*/}

//Verificação para campos de e-mails
/*6*/if(form[q].getAttribute("email")!=undefined && form[q].value!=""){//Verifica se o campo necessita de verificação de e-mail

formatoEmail = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(form[q].value)//Condição para formato de e-mail

/*7*/if(formatoEmail==false ){//Verifica se o e-mail é válido
alert(msgEmail+'.');//Mensagem de erro
form[q].focus();//Retorna o foco para o campo que necessita ser preenchido
return false;//Não envia o formulário até que o campo seja preenchido corretamente
/*7*/}

/*6*/}

//Verificação para somente números
/*8*/if (form[q].getAttribute("numero")!=undefined && form[q].value!=""){//Verifica se o campo necessita de verificação de números

//Verificação para conferir se foi digitado somente números	
/*9*/if((form[q].value * 0)!=0){					
alert(msgNumero+'"'+form[q].getAttribute("numero")+'" '+msgNumero2+'.');//Mensagem de erro
form[q].focus();//Retorna o foco para o campo que necessita ser preenchido
return false;//Não envia o formulário até que o campo seja preenchido corretamente
/*9*/}

/*8*/}

//Verificação de CPF
/*10*/if(form[q].getAttribute("cpf")!=undefined && form[q].value!=""){

//Expressão para formatar o CPF - deixar somente números
valorCPF = String(form[q].value).replace(/\D/g,"");

//Verifica se o número tem somente 11 números
/*11*/if(valorCPF.length!=11){
alert(msgCPF1+'.');//Mensagem de erro
form[q].focus();//Retorna o foco para o campo que necessita ser preenchido
return false;//Não envia o formulário até que o campo seja preenchido corretamente
/*11*/}

//Verifica formatos inválidos
/*12*/if(
valorCPF == "00000000000" ||
valorCPF == "11111111111" ||
valorCPF == "22222222222" ||
valorCPF == "33333333333" ||
valorCPF == "44444444444" ||
valorCPF == "55555555555" ||
valorCPF == "66666666666" ||
valorCPF == "77777777777" ||
valorCPF == "88888888888" ||
valorCPF == "99999999999"	 
){
alert(msgCPF2+'.');//Mensagem de erro
form[q].focus();//Retorna o foco para o campo que necessita ser preenchido
return false;//Não envia o formulário até que o campo seja preenchido corretamente
/*12*/}

//Verificação de CPF Válido - verificar o penultimo número
nCPF_a = valorCPF.charAt(0)*10;//Multiplica o primeiro valor do CPF por 10
nCPF_a += valorCPF.charAt(1)*9;//Multiplica o segundo valor do CPF por 9
nCPF_a += valorCPF.charAt(2)*8;//Multiplica o terceiro valor do CPF por 8
nCPF_a += valorCPF.charAt(3)*7;//Multiplica o quarto valor do CPF por 7
nCPF_a += valorCPF.charAt(4)*6;//Multiplica o quinto valor do CPF por 6
nCPF_a += valorCPF.charAt(5)*5;//Multiplica o sexto valor do CPF por 5
nCPF_a += valorCPF.charAt(6)*4;//Multiplica o setimo valor do CPF por 4
nCPF_a += valorCPF.charAt(7)*3;//Multiplica o oitavo valor do CPF por 3
nCPF_a += valorCPF.charAt(8)*2;//Multiplica o nono valor do CPF por 2
//Depois que multiplicou os valor soma-se tudo

valorVerCPF_a = nCPF_a%11;//Divide por 11 e pega o resto da divisão
/*13*/if(valorVerCPF_a < 3){//Verificação no caso que o resto da divisão for menor que 3 - com isso o valor se torna 0
valorTotalCPF_a = 0;
/*13*/}
/*14*/else{//Se o valor da divisão for maior que 3, pega-se o resto e subtrai por 11
valorTotalCPF_a = 11-valorVerCPF_a;	
/*14*/}

//Verificação de CPF Válido - verificar o último número
nCPF_b = valorCPF.charAt(0)*11;//Multiplica o primeiro valor do CPF por 11
nCPF_b += valorCPF.charAt(1)*10;//Multiplica o segundo valor do CPF por 10
nCPF_b += valorCPF.charAt(2)*9;//Multiplica o terceiro valor do CPF por 9
nCPF_b += valorCPF.charAt(3)*8;//Multiplica o quarto valor do CPF por 8
nCPF_b += valorCPF.charAt(4)*7;//Multiplica o quinto valor do CPF por 7
nCPF_b += valorCPF.charAt(5)*6;//Multiplica o sexto valor do CPF por 6
nCPF_b += valorCPF.charAt(6)*5;//Multiplica o setimo valor do CPF por 5
nCPF_b += valorCPF.charAt(7)*4;//Multiplica o oitavo valor do CPF por 4
nCPF_b += valorCPF.charAt(8)*3;//Multiplica o nono valor do CPF por 3
nCPF_b += valorCPF.charAt(9)*2;//Multiplica o decimo valor do CPF por 2
//Depois que multiplicou os valor soma-se tudo

valorVerCPF_b = nCPF_b%11;//Divide por 11 e pega o resto da divisão
/*15*/if(valorVerCPF_b < 3){//Verificação no caso que o resto da divisão for menor que 3 - com isso o valor se torna 0
valorTotalCPF_b = 0;
/*15*/}
/*16*/else{//Se o valor da divisão for maior que 3, pega-se o resto e subtrai por 11
valorTotalCPF_b = 11-valorVerCPF_b;	
/*16*/}

//Verifica se os dois últimos numeros do CPF são válidos
if(valorCPF.charAt(9)!=valorTotalCPF_a || valorCPF.charAt(10)!=valorTotalCPF_b){
alert(msgCPF2+'.');//Mensagem de erro
form[q].focus();//Retorna o foco para o campo que necessita ser preenchido
return false;//Não envia o formulário até que o campo seja preenchido corretamente
}

/*10*/}

//Verificação de CEP
/*17*/if(form[q].getAttribute("cep")!=undefined && form[q].value!=""){

//Expressão para formatar o CEP - deixar somente números
valorCEP = String(form[q].value).replace(/[.-]/g,"");


//Verifica se o CEP tem somente 8 números
/*18*/if(valorCEP.length!=8){
alert(msgBranco+' "'+form[q].getAttribute("cep")+'" '+msgCEP1+'.');//Mensagem de erro
form[q].focus();//Retorna o foco para o campo que necessita ser preenchido
return false;//Não envia o formulário até que o campo seja preenchido corretamente
/*18*/}

//Verifica se o CEP possui letras
/*19*/if((/[a-z]/g).test(valorCEP)==true){
alert(msgBranco+' "'+form[q].getAttribute("cep")+'" '+msgCEP3+'.');//Mensagem de erro
form[q].focus();//Retorna o foco para o campo que necessita ser preenchido
return false;//Não envia o formulário até que o campo seja preenchido corretamente	
/*19*/}

//Verificação de formatos inválidos
/*20*/if(
valorCEP == "00000000" ||
valorCEP == "11111111" ||
valorCEP == "22222222" ||
valorCEP == "33333333" ||
valorCEP == "44444444" ||
valorCEP == "55555555" ||
valorCEP == "66666666" ||
valorCEP == "77777777" ||
valorCEP == "88888888" ||
valorCEP == "99999999"	   
){
alert(msgBranco+' "'+form[q].getAttribute("cep")+'" '+msgCEP2+'.');//Mensagem de erro
form[q].focus();//Retorna o foco para o campo que necessita ser preenchido
return false;//Não envia o formulário até que o campo seja preenchido corretamente	
/*20*/}

//Verificação de sequências inválidas
/*22*/if(
(valorCEP.charAt(0)==valorCEP.charAt(2) && 
valorCEP.charAt(1)==valorCEP.charAt(3) && 
valorCEP.charAt(2)==valorCEP.charAt(4))
){
alert(msgBranco+' "'+form[q].getAttribute("cep")+'" '+msgCEP2+'.');//Mensagem de erro
form[q].focus();//Retorna o foco para o campo que necessita ser preenchido
return false;//Não envia o formulário até que o campo seja preenchido corretamente	
/*22*/}

/*17*/}

//Verificação de CNPJ
/*23*/if(form[q].getAttribute("cnpj")!=undefined && form[q].value!=""){

//Expressão para formatar o CNPJ - deixar somente números
valorCNPJ = String(form[q].value).replace(/\D/g,"");

//Verifica se o número tem somente 11 números
/*24*/if(valorCNPJ.length!=14){
alert(msgBranco+' "'+form[q].getAttribute("cnpj")+'" '+msgCNPJ1+'.');//Mensagem de erro
form[q].focus();//Retorna o foco para o campo que necessita ser preenchido
return false;//Não envia o formulário até que o campo seja preenchido corretamente
/*24*/}

//Verifica formatos inválidos
/*25*/if(
valorCNPJ == "00000000000000" ||
valorCNPJ == "11111111111111" ||
valorCNPJ == "22222222222222" ||
valorCNPJ == "33333333333333" ||
valorCNPJ == "44444444444444" ||
valorCNPJ == "55555555555555" ||
valorCNPJ == "66666666666666" ||
valorCNPJ == "77777777777777" ||
valorCNPJ == "88888888888888" ||
valorCNPJ == "99999999999999"	 
){
alert(msgCNPJ2+'.');//Mensagem de erro
form[q].focus();//Retorna o foco para o campo que necessita ser preenchido
return false;//Não envia o formulário até que o campo seja preenchido corretamente
/*25*/}

//Verificação dos digitos verificadores
a = [];
b = new Number;
c = [6,5,4,3,2,9,8,7,6,5,4,3,2];

//Verificação do primeiro digito verificador
/*28*/for (i=0; i<12; i++){

a[i] = valorCNPJ.charAt(i);
b += a[i] * c[i+1];

/*28*/}

/*29*/if ((x = b % 11) < 2){
a[12] = 0 }
else{ 
a[12] = 11-x 
/*29*/}

//Verificação do segundo digito verificador
b = 0;

/*30*/for (y=0; y<13; y++){

b += (a[y] * c[y]);

/*30*/}

/*31*/if ((x = b % 11) < 2){ 
a[13] = 0; 
/*31*/}
/*32*/else { 
a[13] = 11-x; 
/*32*/}

//Verificar se os digitos verificadores estão corretos
/*33*/if (
(valorCNPJ.charAt(12) != a[12]) ||
(valorCNPJ.charAt(13) != a[13])
){
alert(msgBranco+' "'+form[q].getAttribute("cnpj")+'" '+msgCNPJ2+'.');//Mensagem de erro
form[q].focus();//Retorna o foco para o campo que necessita ser preenchido
return false;//Não envia o formulário até que o campo seja preenchido corretamente
/*33*/}

/*23*/}

//Verificação de Telefone
/*36*/if(form[q].getAttribute("fone")!=undefined && form[q].value!=""){

//Expressão para formatar o Telefone - deixar somente números
valorFone = String(form[q].value).replace(/\D/g,"");

//Verifica se o Telefone possui letras
/*38*/if((/[a-z]/g).test(valorFone)==true){
alert(msgBranco+' "'+form[q].getAttribute("fone")+'" '+msgFone+'.');//Mensagem de erro
form[q].focus();//Retorna o foco para o campo que necessita ser preenchido
return false;//Não envia o formulário até que o campo seja preenchido corretamente	
/*38*/}

//Verificação de formatos inválidos
/*39*/if(
valorFone == "0000000000" ||
valorFone == "1111111111" ||
valorFone == "2222222222"||
valorFone == "3333333333" ||
valorFone == "4444444444" ||
valorFone == "5555555555" ||
valorFone == "6666666666" ||
valorFone == "7777777777" ||
valorFone == "8888888888" ||
valorFone == "9999999999"	   
){
alert(msgFone+'.');//Mensagem de erro
form[q].focus();//Retorna o foco para o campo que necessita ser preenchido
return false;//Não envia o formulário até que o campo seja preenchido corretamente	
/*39*/}

//Verificação de sequências inválidas
/*40*/if(
(valorFone.charAt(0)==valorFone.charAt(2) && 
valorFone.charAt(1)==valorFone.charAt(3) && 
valorFone.charAt(2)==valorFone.charAt(4) && 
valorFone.charAt(3)==valorFone.charAt(5)&& 
valorFone.charAt(4)==valorFone.charAt(6))
){
alert(msgBranco+' "'+form[q].getAttribute("fone")+'" '+msgFone+'.');//Mensagem de erro
form[q].focus();//Retorna o foco para o campo que necessita ser preenchido
return false;//Não envia o formulário até que o campo seja preenchido corretamente	
/*40*/}

/*36*/}

//Verificação de quantidade de caracteres minimos
/*41*/if(form[q].getAttribute("caracteres")!=undefined && form[q].value!=""){//Verifica se o campo necessita de verificação de caractere

//Pega a quantidade minima de caracteres
numeroCaractere = form[q].getAttribute("quantCaracteres");

//Desconsidera os espaços vacios
valorCaractere = String(form[q].value).replace(/[ ]/g,"");

/*42*/if(valorCaractere.length<numeroCaractere){//Verifica se foi digitado a quantidade minima de caracteres
alert(msgCaracteres+' "'+form[q].getAttribute("caracteres")+'" '+msgCaracteres2+' "'+form[q].getAttribute("quantCaracteres")+'" '+msgCaracteres3+'.');//Mensagem de erro
form[q].focus();//Retorna o foco para o campo que necessita ser preenchido
return false;//Não envia o formulário até que o campo seja preenchido corretamente
/*42*/}

/*41*/}

//Verificação de link
testeURL_a = /^http:\/\//;
testeURL_b = /^https:\/\//;
testeURL_c = /[^a-z:\/\/]/g;

/*43*/if(form[q].getAttribute("link")!=undefined && form[q].value!=""){//Verifica se o campo necessita de verificação de link

/*44*/if(testeURL_a.test(form[q].value)==false || testeURL_b.test(form[q].value)==false && testeURL_c.test(form[q].value)==true){
alert(msgLink+' "'+form[q].getAttribute("link")+'" '+msgLink2+'.');//Mensagem de erro
form[q].focus();//Retorna o foco para o campo que necessita ser preenchido
return false;//Não envia o formulário até que o campo seja preenchido corretamente
/*44*/}

/*43*/}

//Verificação de data
/*45*/if(form[q].getAttribute("data")!=undefined && form[q].value!=""){//Verifica se o campo necessita de verificação de data

valorData = String(form[q].value).replace(/\D/g,"");

dataTeste_a = valorData.charAt(0) + valorData.charAt(1);
dataTeste_b = valorData.charAt(2) + valorData.charAt(3);
dataTeste_c = valorData.charAt(4) + valorData.charAt(5) + valorData.charAt(6) + valorData.charAt(7);

dataTesteBi = dataTeste_c / 4;

/*46*/if(dataTeste_b>12){
alert(msgBranco+' "'+form[q].getAttribute("data")+'" '+msgData+'.');//Mensagem de erro
form[q].focus();//Retorna o foco para o campo que necessita ser preenchido
return false;//Não envia o formulário até que o campo seja preenchido corretamente
/*46*/}

/*47*/if(
dataTeste_b==01 || 
dataTeste_b==03 ||
dataTeste_b==05 ||
dataTeste_b==07 ||
dataTeste_b==08 ||
dataTeste_b==10 ||
dataTeste_b==12
/*47*/){valorMes=31}

/*48*/if(
dataTeste_b==04 ||
dataTeste_b==06 ||
dataTeste_b==09 ||
dataTeste_b==11
/*48*/){valorMes=30}

/*49*/if(dataTeste_b==02){
if((/\D/g).test(dataTesteBi)==false){
valorMes=29;
}else{
valorMes=28;
}
/*49*/}

dataTeste_c = /-/g;

/*50*/if(dataTeste_a>valorMes || dataTeste_c.test(form[q].value)==true){
alert(msgBranco+' "'+form[q].getAttribute("data")+'" '+msgData+'.');//Mensagem de erro
form[q].focus();//Retorna o foco para o campo que necessita ser preenchido
return false;//Não envia o formulário até que o campo seja preenchido corretamente
/*50*/}

/*45*/}

//Verificação de hora
/*54*/if(form[q].getAttribute("hora")!=undefined && form[q].value!=""){//Verifica se o campo necessita de verificação de hora

valorHora = String(form[q].value).replace(/\D/g,"");

horaTeste_a = valorHora.charAt(0) + valorHora.charAt(1);
horaTeste_b = valorHora.charAt(2) + valorHora.charAt(3);

horaTeste_c = /-/g;

//Verifica se os valores digitados são válidos
/*55*/if(horaTeste_a>24 || horaTeste_b>59 || horaTeste_c.test(form[q].value)==true){
alert(msgBranco+' "'+form[q].getAttribute("hora")+'" '+msgHora+'.');//Mensagem de erro
form[q].focus();//Retorna o foco para o campo que necessita ser preenchido
return false;//Não envia o formulário até que o campo seja preenchido corretamente
/*55*/}

/*54*/}

/*2*/}

/*1*/}

/*Função para mascaras*/
function mascaras(id,tipo,parametro)
/*0*/{

//Capitura o id do campo
campo = document.getElementById(id);
//Pega somente os números digitados do campo
valorCampoSomenteNumeros = String(campo.value).replace(/\D/g,"");

//Mascara somente para digitar somente números
/*1*/if(tipo=='numeros'){

//Verifica se foi digitado somente números
/*2*/if((/\D/g).test(campo.value)==true){
campo.value = valorCampoSomenteNumeros;
/*2*/}
/*1*/}

//Mascara para não digitar letras
if(tipo=='naoLetras'){

valorLetras = String(campo.value).replace(/[a-zA-Z]/g,"")

if(window.event){
/*2*/if((/[a-z]/gi).test(campo.value)==true){
campo.value = valorLetras;
/*2*/}
}

}

//Mascara para CEP
/*3*/if(tipo=='cep'){

//verifica se já foi digitado 5 caracteres, depois acrescenta o '-'
/*4*/if(campo.value.length==5){
campo.value = campo.value+'-';
/*4*/}
   
/*3*/}

//Mascara para CPF
/*5*/if(tipo=='cpf'){

//formatação do CPF
if(campo.value.length==3){campo.value = campo.value+'.';}
if(campo.value.length==7 && campo.value.charAt(3)=='.'){campo.value = campo.value+'.';}
if(campo.value.length==11 && campo.value.charAt(3)=='.' && campo.value.charAt(7)=='.'){campo.value = campo.value+'-';}

/*5*/}

//Mascara para CNPJ
/*6*/if(tipo=='cnpj'){

//formatação do CNPJ
if(campo.value.length==2){campo.value = campo.value+'.';}
if(campo.value.length==6 && campo.value.charAt(2)=='.'){campo.value = campo.value+'.';}
if(campo.value.length==10 && campo.value.charAt(2)=='.' && campo.value.charAt(6)=='.'){campo.value = campo.value+'/';}
if(campo.value.length==15 && campo.value.charAt(2)=='.' && campo.value.charAt(6)=='.' && campo.value.charAt(10)=='/'){campo.value = campo.value+'-';}

/*6*/}

//Mascara para Telefone
/*8*/if(tipo=='fone'){

//formatação do Telefone

if(campo.value.length==4){campo.value = campo.value+'-';}

/*8*/}

//Mascara para Data
/*10*/if(tipo=='data'){

//formatação da Data
if(campo.value.length==2){campo.value = campo.value+'/';}
if(campo.value.length==5 && campo.value.charAt(2)=='/'){campo.value = campo.value+'/';}

/*10*/}

//Mascara para Hora
/*11*/if(tipo=='hora'){

//formatação da Hora
if(campo.value.length==2){campo.value = campo.value+':';}

/*11*/}

//Mascara para pular campo
/*9*/if(tipo=='pular'){
	
if(campo.value.length==campo.getAttribute('maxlength')){
document.getElementById(parametro).focus();
}

/*9*/}

/*0*/}

//Função para mascara dinâmica
function formatada(src, mascara)
/*12*/{
	
//Variaveis necessárias
var campo = src.value.length; //pega a quantidade de caracteres digitados
var saida = mascara.substring(0,1);
var texto = mascara.substring(campo);

/*13*/if(texto.substring(0,1) != saida) {
src.value += texto.substring(0,1);
/*13*/}

/*12*/}