// JavaScript Document
/*
 Padawan's JavaScript-Mega-Validator 3000+
 Todos os direitos reservados para Diego Pires Plentz
 Você pode usar esse código nas suas páginas desde que mantenha os créditos ;-)
 */
 /* Modificado por Sandro Alencar Fernandes
 /* Data: 16/05/2006
 /* Permitindo dados decimais, com virgula e sinal.*/
 
 //Verifica qual o browser do visitante e armazena na variável púbica clientNavigator,
 //Caso Internet Explorer(IE) outros (Other)
 if (navigator.appName.indexOf('Microsoft') != -1){
 	clientNavigator = "IE";
 }else{
 	clientNavigator = "Other";
 }
 
  //valida campos de formulario, utilizar class="[vazio]"
  function jValida_Campos(formulario) {
  	retorno = true;
    for (i = 0; i <= formulario.elements.length-1; i++) {
  		//alert(formulario.elements[i].name +" -> "+ formulario.elements[i].className);
      if (formulario.elements[i].className == '[vazio]') {
      	if (formulario.elements[i].value == '') {
      		formulario.elements[i].style.border = '1px solid #f00';
      		retorno = false;
      	}else{
      		formulario.elements[i].style.border = '';
        }      
  		}else
  		if (formulario.elements[i].className == '[data_obrigatorio]') {
        if (!Verifica_Data(formulario.elements[i], 1)) {
      		formulario.elements[i].style.border = '1px solid #f00';
      		retorno = false;
      	}else{
      		formulario.elements[i].style.border = '';
      	}
  		}else
  		if (formulario.elements[i].className == '[data]') {
    	  if (!Verifica_Data(formulario.elements[i], 0)) {
    		  formulario.elements[i].style.border = '1px solid #f00';
    		  retorno = false;
    	  }else{
    		  formulario.elements[i].style.border = '';
    	  }
  		}else
  		if (formulario.elements[i].className == '[email_obrigatorio]') {
      	if (!Verifica_Email(formulario.elements[i], 1)) {
      		formulario.elements[i].style.border = '1px solid #f00';
      		retorno = false;
      	}else{
      		formulario.elements[i].style.border = '';
      	}
  		}else
  		if (formulario.elements[i].className == '[email]') {
      	if (!Verifica_Email(formulario.elements[i], 0)) {
      		formulario.elements[i].style.border = '1px solid #f00';
      		retorno = false;
      	}else{
      		formulario.elements[i].style.border = '';
      	}
  		}else
  		if (formulario.elements[i].className == '[cpf_obrigatorio]') {
      	if (!Verifica_CPF(formulario.elements[i], 1)) {
      		formulario.elements[i].style.border = '1px solid #f00';
      		retorno = false;
      	}else{
      		formulario.elements[i].style.border = '';
      	}
  		}else
  		if (formulario.elements[i].className == '[cpf]') {
      	if (!Verifica_CPF(formulario.elements[i], 0)) {
      		formulario.elements[i].style.border = '1px solid #f00';
      		retorno = false;
      	}else{
      		formulario.elements[i].style.border = '';
      	}
  		}else
  		if (formulario.elements[i].className == '[cnpj_obrigatorio]') {
      	if (!Verifica_CNPJ(formulario.elements[i], 1)) {
      		formulario.elements[i].style.border = '1px solid #f00';
      		retorno = false;
      	}else{
      		formulario.elements[i].style.border = '';
      	}
  		}else
  		if (formulario.elements[i].className == '[cnpj]') {
      	if (!Verifica_CNPJ(formulario.elements[i], 0)) {
      		formulario.elements[i].style.border = '1px solid #f00';
      		retorno = false;
      	}else{
      		formulario.elements[i].style.border = '';
      	}
  
      }		
  		
  	}
  	if (retorno == false) {
      alert('Por favor, preencha os campos obrigatórios.');
    }
    return retorno;
  }


 function Verifica_Data(data, obrigatorio){
 //Se o parâmetro obrigatório for igual à zero, significa que ele pode estar vazio, caso contrário, não
  //var data = document.getElementById(data);
 	var strdata = data.value;
 	if((obrigatorio == 1) || (obrigatorio == 0 && strdata != "")){
     //Verifica a quantidade de digitos informada esta correta.
 		if (strdata.length != 10) {
 			alert("Formato da data não é válido. Formato correto: - dd/mm/aaaa.");
 			return false
 		}
 		//Verifica máscara da data
 		if ("/" != strdata.substr(2,1) || "/" != strdata.substr(5,1)){
 			alert("Formato da data não é válido. Formato correto:  - dd/mm/aaaa.");
 			return false
 		}
 		dia = strdata.substr(0,2)
 		mes = strdata.substr(3,2);
 		ano = strdata.substr(6,4);
 		//Verifica o dia
 		if (isNaN(dia) || dia > 31 || dia < 1){
 			alert("Formato do dia não é válido.");
 			return false
 		}
 		if (mes == 4 || mes == 6 || mes == 9 || mes == 11){
 			if (dia == "31"){
 				alert("O mês informado não possui 31 dias.");
 				return false
 			}
 		}
 		if (mes == "02"){
 			bissexto = ano % 4;
 			if (bissexto == 0){
 				if (dia > 29){
 					alert("O mês informado possui somente 29 dias.");
 					return false
 				}
 			}else{
 				if (dia > 28){
 					alert("O mês informado possui somente 28 dias.");
 					return false
 				}
 			}
 		}
 	//Verifica o mês
 		if (isNaN(mes) || mes > 12 || mes < 1){
 			alert("Formato do mês não é válido.");
 			return false
 		}
 		//Verifica o ano
 		if (isNaN(ano)){
 			alert("Formato do ano não é válido.");
 			return false
 		}
 		return true;
 	}else{
    return true; 
  }
 }

 
 function Compara_Datas(data_inicial, data_final){
 	//Verifica se a data inicial é maior que a data final
 	//var data_inicial = document.getElementById(data_inicial);
 	//var data_final   = document.getElementById(data_final);
 	str_data_inicial = data_inicial.value;
 	str_data_final   = data_final.value;
 	dia_inicial      = data_inicial.value.substr(0,2);
 	dia_final        = data_final.value.substr(0,2);
 	mes_inicial      = data_inicial.value.substr(3,2);
 	mes_final        = data_final.value.substr(3,2);
 	ano_inicial      = data_inicial.value.substr(6,4);
 	ano_final        = data_final.value.substr(6,4);
 	if(ano_inicial > ano_final){
 		alert("A data inicial deve ser menor que a data final."); 
 		//data_inicial.focus();
 		return false
 	}else{
  	if(ano_inicial == ano_final){
   	if(mes_inicial > mes_final){
    	alert("A data inicial deve ser menor que a data final.");
 				//data_final.focus();
 				return false
 			}else{
 				if(mes_inicial == mes_final){
 					if(dia_inicial > dia_final){
 						alert("A data inicial deve ser menor que a data final.");
 						//data_final.focus();
 						return false
 					}
 				}
 			}
 		}
 	}
 }
 
 function Verifica_Hora(hora, obrigatorio){
 //Se o parâmetro obrigatório for igual à zero, significa que elepode estar vazio, caso contrário, não
 	//var hora = document.getElementById(hora);
 	if((obrigatorio == 1) || (obrigatorio == 0 && hora.value != "")){
 		if(hora.value.length < 5){
 			alert("Formato da hora inválido. Por favor, informe a hora no formato correto: hh:mm");
 			//hora.focus();
 			return false
 		}
 		if(hora.value.substr(0,2) > 23 || isNaN(hora.value.substr(0,2))){
 			alert("Formato da hora inválido.");
 			//hora.focus();
 			return false
 		}
 		if(hora.value.substr(3,2) > 59 || isNaN(hora.value.substr(3,2))){

 			alert("Formato do minuto inválido.");
 			//hora.focus();
 			return false
 		}
 	}
 }
 
 function Verifica_Email(email, obrigatorio){
 //Se o parâmetro obrigatório for igual à zero, significa que elepode estar vazio, caso contrário, não
 	//var email = document.getElementById(email);
 	if((obrigatorio == 1) || (obrigatorio == 0 && email.value != "")){
 		if(!email.value.match(/([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+.[a-zA-Z0-9._-]+)/gi)){
 			alert("Informe um e-mail válido");
 			return false
 		}else{
 		 return true;
 		}
 	}else{
    return true; 
  }
 }
 
 function Verifica_Tamanho(campo, tamanho, evento){
 //usado para campos textarea onde não se tem o atributo maxlenght
 //var campo = document.getElementById(campo);
	if ((clientNavigator == 'Other' && evento.keyCode==0) || clientNavigator == 'IE'){
		if(campo.value.length > tamanho){
			alert("O campo suporta no máximo " + tamanho + " caracteres.");
			//campo.focus();
			return false;
		} else {
			return true;
		}
	} else {
		return true; 
	}
 }
 
 function Verifica_Cep(cep, obrigatorio){
 //Se o parâmetro obrigatório for igual à zero, significa que elepode estar vazio, caso contrário, não
 	//var cep    = document.getElementById(cep);
 	var strcep = cep.value;
 	if((obrigatorio == 1) || (obrigatorio == 0 && strcep != "")){
 		if (strcep.length != 9){
 			alert("CEP informado inválido.");
 			//cep.focus();
 			return false
 		}else{
 			if (strcep.indexOf("-") != 5){
 				alert("Formato de CEP informado inválido.");
 				//cep.focus();
 				return false
 			}else{
 				if (isNaN(strcep.replace("-","0"))){
 					alert("CEP informado inválido.");
 					//cep.focus();
 					return false
 				}
 			}
 		}
 	}	  
 }
 
 function Bloqueia_Caracteres(evnt, decimal){
 //Função permite digitação de números, virgula e sinal
  if (decimal == ''){
		decimal = 0;
	}
  if (clientNavigator == "IE"){
 		if (evnt.keyCode < 48 || evnt.keyCode > 57){
			if (decimal) {
				if (evnt.keyCode != 44 && evnt.keyCode != 45){
   			   return false;
			  }else{
				   return true;
				}
			}else{
			  return false;	
			}
 		}else{
			return true;
		}
 	}else{
 		if ((evnt.charCode < 48 || evnt.charCode > 57) && evnt.keyCode == 0){
			if (decimal) {
				if (evnt.charCode != 44 && evnt.charCode != 45){
   			   return false;
			  }else{
				   return true;
				}
			}else{
			  return false;	
			}
 		}else{
			return true;
		}
 	}
 }
 
 function Bloqueia_Virgula(evnt){
  if (clientNavigator == "IE"){
 		if (evnt.keyCode == 44){
			return false;	
 		}else{
			return true;
		}
 	}else{
 		if ((evnt.charCode == 44) && (evnt.keyCode == 0)) {
			return false;	
 		}else{
			return true;
		}
 	}
 } 
 
 function Ajusta_Data(input, evnt){
 //Ajusta máscara de Data e só permite digitação de números
 	if (input.value.length == 2 || input.value.length == 5){
 		if(clientNavigator == "IE"){
 			input.value += "/";
 		}else{
 			if(evnt.keyCode == 0){
 				input.value += "/";
 			}
 		}
 	}
 //Chama a função Bloqueia_Caracteres para só permitir a digitação de números
 	return Bloqueia_Caracteres(evnt);
 }
 
function Ajusta_Hora(input, evnt){
 //Ajusta máscara de Hora e só permite digitação de números
 	if (input.value.length == 2){
 		if(clientNavigator == "IE"){
 			input.value += ":";
 		}else{
 			if(evnt.keyCode == 0){
 				input.value += ":";
 			}
 		}
 	}
 //Chama a função Bloqueia_Caracteres para só permitir a digitação de números
 	return Bloqueia_Caracteres(evnt);
 }
 
 function Ajusta_Cep(input, evnt){
 //Ajusta máscara de CEP e só permite digitação de números
 	if (input.value.length == 5){
 		if(clientNavigator == "IE"){
 			input.value += "-";
 		}else{
 			if(evnt.keyCode == 0){
 				input.value += "-";
 			}
 		}
 	}
 //Chama a função Bloqueia_Caracteres para só permitir a digitação de números
 	return Bloqueia_Caracteres(evnt);
 }

function Ajusta_Numero(input, evnt)
{
	 informadoVirgula = 0;
   if (clientNavigator == "IE"){
		  if (evnt.keyCode == 44){
				 informadoVirgula = 1; 
			}
	 }else{
		  if (evnt.keyCode == 0 && evnt.charCode == 44){
				 informadoVirgula = 1;
			}
	 }

	 informadoMenos = 0;
   if (clientNavigator == "IE"){
		  if (evnt.keyCode == 45){
				 informadoMenos = 1; 
			}
	 }else{
		  if (evnt.keyCode == 0 && evnt.charCode == 45){
				 informadoMenos = 1;
			}
	 }

   //Verifica se foi informada a Virgula e já não existe uma
   if ((input.value.indexOf(',') >= 0) && informadoVirgula ){
	  	return false;
	 }else{
		  //Verifica se foi informado um Menos e este está na posição inicial
			if ((input.value.length > 0) && informadoMenos){
				 return false; 
			}else{
	  	   //Chama a função Bloqueia_Caracteres para só permitir a digitação de números
 	       return Bloqueia_Caracteres(evnt,1);
			}
	 }
}

function Atualiza_Opener(){
 //Atualiza a página opener da popup que chamar a função
 	window.opener.location.reload();
}


/* Verifica CPF e CNPJ */
function Verifica_CPF(CNUMB,obrigatorio) {
 	if((obrigatorio == 1) || (obrigatorio == 0 && CNUMB.value != "")){
    return Verify(CNUMB, 'CPF');
  }else{
    return true;
  }
}

function Verifica_CNPJ(CNUMB,obrigatorio) {
 	if((obrigatorio == 1) || (obrigatorio == 0 && CNUMB.value != "")){
    return Verify(CNUMB, 'CNPJ');
  }else{
    return true;
  }
}

function ClearStr(str, char) {
  while ((cx=str.indexOf(char))!=-1) {		
    str = str.substring(0,cx)+str.substring(cx+1);
  }
  return(str);
}

function ParseNumb(c) {
  c=ClearStr(c,'-');
  c=ClearStr(c,'/');
  c=ClearStr(c,',');
  c=ClearStr(c,'.');
  c=ClearStr(c,'(');
  c=ClearStr(c,')');
  c=ClearStr(c,' ');
  if((parseFloat(c) / c != 1)) {
    if(parseFloat(c) * c == 0) {
      return(c);
    } else {
      return(0);
    }
  } else {
    return(c);
  }
}

/* Parametros Numero e type (CPF ou CNPJ)*/
function Verify(CNUMB,CTYPE) {
  CNUMB=ParseNumb(CNUMB.value)
  if(CNUMB == 0) {
    return(false);
  }else{
    g=CNUMB.length-2;
    if(TestDigit(CNUMB,CTYPE,g)) {
      g=CNUMB.length-1;
      if(TestDigit(CNUMB,CTYPE,g)) {	
        return(true);
      }else{
        return(false);
      }
    }else{
      return(false);
    }
  }
}

function TestDigit(CNUMB,CTYPE,g) {
  var dig=0;
  var ind=2;
  for(f=g;f>0;f--) {
    dig+=parseInt(CNUMB.charAt(f-1))*ind;
    if (CTYPE=='CNPJ') { if(ind>8) {ind=2} else {ind++} }
    else { ind++ }
  }
  dig%=11;
  if(dig<2) {
    dig=0;
  }else{
    dig=11-dig;
  }
  if(dig!=parseInt(CNUMB.charAt(g))) {
    return(false);
  }else{
    return(true);
  }
}
