//Função para validar datas
function ValidaData(parData){
  var l_js_Dia = 0;
  var l_js_Mes = 0;
  var l_js_Ano = 0;
  var l_js_Now = new Date();
     
  if (parData.length != 10)
    return false;
     
  l_js_Dia = parData.substring(0, 2)
  if (ValidaNumero(l_js_Dia) == false)
		return false;

  l_js_Mes = parData.substring(3, 5)
  if (ValidaNumero(l_js_Mes) == false)
		return false;

  l_js_Ano = parData.substring(6, 10);
  if (ValidaNumero(l_js_Ano) == false)
		return false;

  if (parseInt(l_js_Ano) >= parseInt(l_js_Now.getFullYear())-8)
		return false;        
        
  if (parseInt(l_js_Ano) < 1906)
		return false;        

  if (l_js_Mes == 0 || l_js_Mes > 12 || l_js_Dia == 0) {
    return false;
  }
  else {
    if (l_js_Mes == 4 || l_js_Mes == 6 || l_js_Mes == 9 || l_js_Mes == 11) {
      if (l_js_Dia > 30) {
  		  return false;
  		}
    }
    else {
      if (l_js_Mes == 2) {
        if (Bissexto(l_js_Ano)) {
          if (l_js_Dia > 29) {
  					return false;
  				}
  			}
        else {
          if (l_js_Dia > 28) {
  					return false;
  				}
  			}
  		}  
      else {
  			if (l_js_Dia > 31) {
  				return false;
  			}
  		}
    }
  }
  return true;
}

//Valida ano Bisexto
function Bissexto(parAno) {
  if (parAno % 4 == 0) 
    return true;
  else
    return false;
}


// Compara as datas
function ComparaDatas(DataInicial,DataFinal){

  var Dia = 0;
  var Mes = 0;
  var Ano = 0;
     
  Dia = DataInicial.substring(0, 2)
  Mes = DataInicial.substring(3, 5)
  Ano = DataInicial.substring(6, 10);

  DataInicial = Ano + Mes + Dia
  
  Dia = DataFinal.substring(0, 2)
  Mes = DataFinal.substring(3, 5)
  Ano = DataFinal.substring(6, 10);

  DataFinal = Ano + Mes + Dia

  if (Math.abs(DataFinal) < Math.abs(DataInicial)) {
     return false; }
  return true;	 
} 
 
//Valida Numero
function ValidaNumero(parNumero) {
  var l_js_Contador; 
  var l_js_Retorno = true;
  for (l_js_Contador = 0; l_js_Contador < parNumero.length; l_js_Contador++) {
  	var l_js_Char = parNumero.charAt(l_js_Contador);
  	if (!((l_js_Char >= "0") && (l_js_Char <= "9"))) {
	  if ((l_js_Char != ".") && (l_js_Char != ",") && (l_js_Char != "$")) {
  		l_js_Retorno = false;
  	  }
  	}
  }
  return l_js_Retorno;
}



//Função para Cálculo do Digito do CPF/CNPJ
function DigitoCPFCNPJ(numCIC) {
var numDois = numCIC.substring(numCIC.length-2, numCIC.length);
var novoCIC = numCIC.substring(0, numCIC.length-2);
switch (numCIC.length){
 case 11 :
  numLim = 11;
  break;
 case 14 :
  numLim = 9;
  break;
 default : return false;
}
var numSoma = 0;
var Fator = 1;
for (var i=novoCIC.length-1; i>=0 ; i--) {
 Fator = Fator + 1;
 if (Fator > numLim) {
  Fator = 2;
 }
 numSoma = numSoma + (Fator * Number(novoCIC.substring(i, i+1)));
}
numSoma = numSoma/11;
var numResto = Math.round( 11 * (numSoma - Math.floor(numSoma)));
   if (numResto > 1) {
 numResto = 11 - numResto;
   }
   else {
 numResto = 0;
   }
   //-- Primeiro dígito calculado.  Fará parte do novo cálculo.
   
   var numDigito = String(numResto);
   novoCIC = novoCIC.concat(numResto);
   //--
numSoma = 0;
Fator = 1;
for (var i=novoCIC.length-1; i>=0 ; i--) {
 Fator = Fator + 1;
 if (Fator > numLim) {
  Fator = 2;
 }
 numSoma = numSoma + (Fator * Number(novoCIC.substring(i, i+1)));
}
numSoma = numSoma/11;
numResto = numResto = Math.round( 11 * (numSoma - Math.floor(numSoma)));
   if (numResto > 1) {
 numResto = 11 - numResto;
   }
   else {
 numResto = 0;
   }
//-- Segundo dígito calculado.
numDigito = numDigito.concat(numResto);
if (numDigito == numDois) {
 return true;
}
else {
 return false;
}
}
//--< Fim da Função >--

//-- Retorna uma string apenas com os números da string enviada
function ApenasNum(strParm) {
strParm = String(strParm);
var chrPrt = "0";
var strRet = "";
var j=0;
for (var i=0; i < strParm.length; i++) {
 chrPrt = strParm.substring(i, i+1);
 if ( chrPrt.match(/\d/) ) {
  if (j==0) {
   strRet = chrPrt;
   j=1;
  }
  else {
   strRet = strRet.concat(chrPrt);
  }
 }
}
return strRet;
}
//--< Fim da Função >--

//-- Somente aceita os caracteres válidos para CPF e CNPJ.
function PreencheCIC(objCIC) {
var chrP = objCIC.value.substring(objCIC.value.length-1, objCIC.value.length);

if ( !chrP.match(/[0-9]/) && !chrP.match(/[\/.-]/) ) {
 objCIC.value = objCIC.value.substring(0, objCIC.value.length-1);
 return false;
}
return true;
}
//--< Fim da Função >--

function FormataCIC (numCIC) {
numCIC = String(numCIC);
switch (numCIC.length){
case 11 :
 return numCIC.substring(0,3) + "." + numCIC.substring(3,6) + "." + numCIC.substring(6,9) + "-" + numCIC.substring(9,11);
case 14 :
 return numCIC.substring(0,2) + "." + numCIC.substring(2,5) + "." + numCIC.substring(5,8) + "/" + numCIC.substring(8,12) + "-" + numCIC.substring(12,14);
default : 
 alert("Tamanho incorreto do CPF ou CNPJ!");
 return "";
}
}

//-- Remove os sinais, deixando apenas os números e reconstroi o CPF ou CNPJ, verificando a validade
//-- Recebe como parâmetros o número do CPF ou CNPJ, com ou sem sinais e o atualiza com sinais é validado.
function ConfereCIC(objCIC) {
if (objCIC.value == null) {
 alert("Preenchimento obrigatório do CPF ou CNPJ");
 return false;
}
var strCPFPat  = /^\d{3}\.\d{3}\.\d{3}-\d{2}$/;
var strCNPJPat = /^\d{2}\.\d{3}\.\d{3}\/\d{4}-\d{2}$/;

numCPFCNPJ = ApenasNum(objCIC.value);

if (!DigitoCPFCNPJ(numCPFCNPJ)) {
 alert("Atenção o Dígito verificador do CPF ou CNPJ é inválido!");
 return false;
}

objCIC.value = FormataCIC(numCPFCNPJ);

if (objCIC.value.match(strCNPJPat)) {
 return true;
}
else if (objCIC.value.match(strCPFPat)) {
 return true;
}
else {
 alert("Digite um CPF ou CNPJ válido!");
 return false;
}
}


/*
Função de Validação de Formulários
parametros a serem acrescentados nos inputs, checkboxes, textareas, selects...
tipo -> no caso dos inputs para formatações específicas:
      DDD
      TELEFONE
      TELEFONEEMERGENCIA
      TEXTO (texto livre)
      NOME
      EMAIL
      LISTAEMAIL
titulo -> para ser usado nas mensagens para o usuário (alerts)
obrigatorio -> se o campo for obrigatório deve ser setado com o valor "1"
               OBS: No caso de radio button e checkbox só é necessário colocar 
               esse valor no último elemento

Função de Dependência de Campos
chamar a função no método onchange (onblur nos radios e checks claro, pq eles nao tem onchange) dos dois campos relacionados.
OBS: no caso do campo2 ser do tipo checkbox ou radio, chamar a função em todos os elementos
     mas mantendo o indice do elemento que condiciona o preenchimento

campo1 -> campo que é necessário se campo2 for preenchido ou marcado
campo2
telrel -> indica se o relacionamento é do tipo ddd - telefone
obrigatorio1 -> indica se o campo1 era inicialmente obrigatório
obrigatorio2 -> indica se o campo2 era inicialmente obrigatório
*/

function Mensagem(campo){
alert('O campo '+campo+' é obrigatório');
}

function NormalizaEspacos(obj){
   obj.value = obj.value.replace(/\s+/g," ");
   obj.value = obj.value.replace(/^\s+/,"");
   obj.value = obj.value.replace(/\s+$/,"");
}

function ValidaForm(form){
var checado = false;
var validar = true;
var nomecampo;

for(i=0;i<form.elements.length;i++){
   if((form.elements[i].type == 'text') || (form.elements[i].type == 'textarea')){
      NormalizaEspacos(form.elements[i]);
   }
   if (form.elements[i].obrigatorio == "1"){
      /*Verifica os controles existentes na tela*/
      nomecampo = form.elements[i].name;
      if((form.elements[i].type == 'radio') || (form.elements[i].type == 'checkbox') || (form.elements[i].type == 'text') || (form.elements[i].type == 'select-one') || (form.elements[i].type == 'textarea')){
         /* Validação dos campos do tipo RADIO 1º IF*/
         if((form.elements[i].type == 'radio')){
            checado=false; 
            for(k=0;k<form.elements.length;k++){
               if (form.elements[k].type == 'radio' && form.elements[k].name == nomecampo && form.elements[k].checked == true){
                  checado = true;
                  break;
               }
            }
            if (!checado){
               Mensagem(form.elements[i].titulo);
               validar=false;
               break;
            }
         }
         /* Validação dos campos do tipo CHECKBOX 2º IF*/
         else if((form.elements[i].type == 'checkbox')){
            checado = false;
            for(k=0;k<form.elements.length;k++){
               if (form.elements[k].type == 'checkbox' && form.elements[k].name == nomecampo && form.elements[k].checked == true){
                  checado = true;
                  break;
               }
            }
            if (!checado){
               Mensagem(form.elements[i].titulo);
               validar=false;
               break;
            }
         }
         /* Validação dos campos do tipo TEXT ou TEXTAREA 3º IF*/
         else if((form.elements[i].type == 'text') || (form.elements[i].type == 'textarea')){
            //Chama a função para validar o campo Text, passando o valor do Id,o valor digitado e o nome do campo
            if (!ValidaText(form.elements[i].tipo,form.elements[i].value,form.elements[i].titulo)){
               validar = false;
               form.elements[i].select();
               break;
            }
            //validação OK
            else{
               validar = true;
            }
         }
         /* Validação dos campos do tipo ListBox 4º IF*/
         else if(form.elements[i].type == 'select-one'){
            if(form.elements[i].selectedIndex != 0){
               validar = true;
            }
            else{
               Mensagem(form.elements[i].titulo);
               validar = false;
               form.elements[i].focus();
               break;
            }
         }
      }//Fim do if Verifica controles
   }
}//Fim For
return validar;
}//Fim da Função

//Função que faz a validação do textbox de acordo com o id passado
function ValidaText(codigo,valor,campo){
 switch (codigo){
	case 'EMAIL':
		if (!valor.match(/^([\w\.\_\-]+)@([\w\_\-]+)((\.(\w+))+)$/)){
		  alert (valor + ' não é um e-mail válido.');
		  return false;
		}
		else{
		  return true;
		}
	break;
	case 'LISTAEMAIL':
		if (!valor.match(/^([\w\.\_\-]+)@([\w\_\-]+)((\.(\w+))+)((,([\w\.\_\-]+)@([\w\_\-]+)((\.(\w+))+))*)$/)){
		  alert ('Preencha os e-mails corretamente. Separe-os por vírgula.');
		  return false;
		}
		else{
		  return true;
		}
	break;
	case 'DDD':
		if (!valor.match(/^\d\d$/)){
		  alert ('DDD Incorreto.');
		  return false;
		}
		else{
		  return true;
		}
	break;
	case 'TELEFONE':
                if (valor.match(/^(0800|\d{3,4})\-*\d\d\d\d$/) || valor.match(/^0(3|8)00\-*\d{6,9}$/)){
		  return true;
		}
		else{
		  alert ('Telefone Incorreto.');
		  return false;
		}
	break;
	case 'TELEFONEEMERGENCIA':
                if (valor.match(/^\d\d\d$/)){
		  return true;
		}
		else{
		  alert ('Telefone de Emergência Incorreto. Deve possuir somente 3 dígitos.');
		  return false;
		}
	break;
	case 'NOME':
		if (!valor.match(/^[A-Za-z\s-'´]+$/)){
		  alert ('Preencha o Campo '+campo+' corretamente.');
		  return false;
		}
		else{
		  return true;
		}
	break;
	case 'TEXTO':
		if (valor.length == 0){
		  alert ('O Campo '+campo+' é obrigatório.');
		  return false;
		}
		else{
		  return true;
		}
	break;
	case 'CEP':
		if (!valor.match(/^\d\d\d\d\d\-?\d\d\d$/)){
		  alert ('Preencha o Campo '+campo+' corretamente.');
		  return false;
		}
		else{
		  return true;
		}
	break;
	case 'CPF/CNPJ':
		if (!valor.match(/^\d\d\d\d\d\-?\d\d\d$/)){
		  alert ('Preencha o Campo '+campo+' corretamente.');
		  return false;
		}
		else{
		  return true;
		}
	break;
	default: return true;
  }
}//Fim da Função

//Verifica preenchimento de campo1 se campo2 for preenchido. Se for relacionamento
//de telefone, retira ddd se for um 0800. 
function ChecaRelacionado(campo1,campo2,telrel,obrigatorio1,obrigatorio2){
if ((campo2.type == 'radio') || (campo2.type == 'checkbox')){
    if (campo2.checked){
        campo1.obrigatorio="1";
    }
    else if (!obrigatorio2){
        campo2.obrigatorio = "";
        campo1.obrigatorio = "";
        campo1.value = "";
    }
    else{
        campo1.obrigatorio = "";
        campo1.value = "";
    }
}
else{
    if (campo2.value != ""){
        if (telrel && campo2.value.match(/^0800/)){
            campo1.obrigatorio="";
            campo1.value=""; 
        }
        else{
            if (obrigatorio1){
                campo1.obrigatorio="1";
            }
        }
        campo2.obrigatorio="1";
    }
    else{
        if (campo1.value == ""){
            if (!obrigatorio2){
                campo2.obrigatorio="";
                campo1.obrigatorio="";
                campo1.value=""; 
            }
            else{
                campo1.obrigatorio="";
                campo1.value=""; 
            }
        }
        else{
            if (obrigatorio2){
                campo1.obrigatorio = "";
            }
            else{
                campo1.obrigatorio = "1";
                campo2.obrigatorio = "";
            }
        }
    }
}
}


//Validando os campos datas---------------------------------------------------------------------
//Essa função faz referência a algumas funções que estão no arquivo de script("/html/funcoes.js")

function ChecaData(){	
var datavalida = true;
var dataini = document.forms[0].diaani.value + "/" + document.forms[0].mesani.value + "/" + document.forms[0].anoani.value;

    if (document.forms[0].email.value != document.forms[0].confemail.value){
        alert("O campo e-mail e confirmação de e-mail não conferem!");
        document.forms[0].confemail.focus();
        return false;
    }
        
	// Verifica se a data foi preenchida corretamente.
    if (dataini != "//") 
    {
	if (ValidaData(dataini) == false)
	{
	alert("A data informada não é válida.");
	document.forms[0].diaani.focus();
	datavalida = false;
	return datavalida;
	}
    }				 
    
    // Verifica se a data foi preenchida corretamente.
    now = new Date();
    dia = now.getDate();
    mes = now.getMonth()+1;
    ano = now.getYear();
      
    if (dia < 10)
        dia = "0" + dia;
    if (mes < 10)
        mes = "0" + mes;
    if (ano < 2000)
        ano = "19" + ano;

    if (ComparaDatas(dataini,dia+"/"+mes+"/"+ano)==false){
         alert("A data de aniversario deve ser menor que a data atual. ("+dia+"/"+mes+"/"+ano+")");
         document.forms[0].diaini.focus();
         return false;
      }

	//Setando as datas inicial e final depois de validadas.
	document.forms[0].dataaniversario.value = dataini;
        
        if (document.forms[0].cpf.value != ""){
            datavalida= ConfereCIC(document.forms[0].cpf);
        }

        if (!((document.forms[0].amigos.checked) || (document.forms[0].telelistas.checked) || (document.forms[0].emailcheck.checked) || (document.forms[0].google.checked) || (document.forms[0].radiocheck.checked) || (document.forms[0].banners.checked) || (document.forms[0].outroscheck.checked))){
            alert("Informe como você tomou conhecimento da Promoção!");
            datavalida = false;
        }

	return datavalida;
}//Fim da Função ChecaData----------------------------------------------------------------------------------
	
//Função para a tabulação automática  dos campos de Data
function autotab(original,destino){
	if(original.getAttribute&&original.value.length==original.getAttribute("maxlength"))
	destino.focus()
}


function enviar(){
    var ok;
    ok = ValidaForm(document.forms[0]);
    if (ok){
        ok = ChecaData();
    }
    if (ok){
        document.promocao.submit();
    }
}