//<!-- Inicio 

/*
** Validação de Campos de Formulários
** By Equipe PROMETA (ICI - 
** Versão 3.0
** Data: OUT/2001
**
** Para usar:
** 1. Crie o formuário com o nome dos campos seguindo a seguinte estrutura:
**				 strR_ - para campos requeridos alfanuméricos
**           selR_ - para campos select requiridos
**           intR_ - para campos requiridos somente números
**           curR_ - para campos requiridos moedas  
**           dtaR_ - para campos requiridos data
**           horR_ - para campos requiridos hora
**           emlR_ - para campos requiridos e-mail
**			    cnpR_ - para campos requeridos de CNPF/CNPJ
**           intX_ - para campos somente números
**           curX_ - para campos moedas  
**           dtaX_ - para campos data
**           horX_ - para campos hora
**           emlX_ - para campos e-mail
**			    cnpX_ - para campos de CNPF/CNPJ
**
**    Por exemplo: strR_txtNomeCliente
**
** 3. Use este script como arquivo include, de preferência no cabeçalho.
** 4. Chame a função ("vericica")no evento onSubmit do formulário (onsubmit="return validaCampos(this)")
** 5. As mensagens de erro podem ser configuradas para cada campo. Basta alterar o código.
**    Ou usar a mensagem padrão.
**
*/

/******** VARIÁVEIS GLOBAIS ********/
var msgStrR = "Verifique o preenchimento do Campo Texto Requerido."; 
var msgSelR = "Escolha uma opção do Combo.";
var msgCurR = "O Campo Moeda Requerido.";
var msgIntR = "O Campo Número Requerido é de preenchimento obrigatório.";
var msgDtaR = "Data Inválida!";
var msgHorR = "Hora Inválida!";
var msgEmlR = "Verifique o preenchimento do Campo E-mail Requerido.";
var msgCnpR = "Verifique o preenchimento do Campo CIC Requerido.";
var msgIntX = "Verifique o preenchimento do Campo Número.";
var msgCurX = "Verifique o preenchimento do Campo Moeda.";
var msgDtaX = "Verifique o preenchimento do Campo Data.";
var msgHorX = "Verifique o preenchimento do Campo Hora.";
var msgEmlX = "Verifique o preenchimento do Campo E-mail.";
var msgRadR = "Verifique o preenchimento do Campo Radio button.";
var msgChkR = "Verifique o preenchimento do Campo checkbox.";
var msgCNPR = "Verifique o preenchimento do Campo CIC.";
var msgTxaR = "Verifique o preenchimento do Campo TextArea.";
var msgDefault = "Verifique se os campos estão preenchidos corretamente.";

var radChecked = false;
var chkChecked = false;


//********************************************************************
// Função    		: validaCNP
// Objetivo  		: Validar o Cadastro Nacional de Pessoa ...(Física ou Jurídica)
// Parâmetro		: CNPJ ou CNPF (Cadastro de Pessoa Física ou Jurídica)
// Retorno 			: Verdadeiro para CNP válido e Falso para CNP inválido
// Pré-Requisito 	: Função validaCNPF e validaCNPJ
//********************************************************************
function validaCNP(strCNP){
	var len = strCNP.length;

	//se é CNPJ - Cadastro Nacional de Pessoa Jurídica
	if(len == 14){
		if ( validaCNPJ(strCNP) ){
			return true;
		}
		return false
	}
	else{
		//se é CNPJ - Cadastro Nacional de Pessoa Física
		if (len == 11){
	   	if ( validaCNPF(strCNP) ){
				return true;
			}
			return false
		}
		return false;
  	}
}

//********************************************************************
// Função    		: validaCNPF
// Objetivo  		: Validar o Cadastro Nacional de Pessoa Física 
// Parâmetro 		: strCNPF
// Retorno   		: Verdadeiro para CNPF válido e Falso para CNPF inválido
// Pré-Requisito 	: nenhum
//********************************************************************
function validaCNPF (strCNPF){
	var x = 0;
	var soma = 0;
	var dig1 = 0;
	var dig2 = 0;
	var texto = "";
	var strCNPF1="";
	var invalido = /^(11111111111|22222222222|33333333333|44444444444|55555555555|66666666666|77777777777|88888888888|99999999999)$/;

	if  (strCNPF.search(invalido)!=-1){
		return false;
	}

	len = strCNPF.length;
	x = len -1;

	for (var i=0; i <= len - 3; i++){
		y = strCNPF.substring(i,i+1);
		soma = soma + ( y * x);
		x = x - 1;
		texto = texto + y;
	}
	dig1 = 11 - (soma % 11);
	if (dig1 == 10)
		dig1=0 ;
	if (dig1 == 11)
		dig1=0 ;
	strCNPF1 = strCNPF.substring(0,len - 2) + dig1 ;
	x = 11; soma=0;

	for (var i=0; i <= len - 2; i++){
		soma = soma + (strCNPF1.substring(i,i+1) * x);
		x = x - 1;
	}
	dig2= 11 - (soma % 11);
	if (dig2 == 10) 
		dig2=0;
	if (dig2 == 11) 
		dig2=0;
	if ((dig1 + "" + dig2) == strCNPF.substring(len,len-2)){
		return true;
	}
	return false;
}

//********************************************************************
// Função    		: validaCNPJ
// Objetivo  		: Validar o Cadastro Nacional de Pessoa Jurídica
// Parâmetro 		: strCNPJ
// Retorno   		: Verdadeiro para CNPJ válido e Falso para CNPJ inválido
// Pré-Requisito 	: nenhum
//********************************************************************
function validaCNPJ (strCNPJ){
	var varFirstChr = strCNPJ.charAt(0);
	var vlMult,vlControle,s1, s2 = "";
	var i,j,vlDgito,vlSoma = 0;
	
	for ( var i=0; i<=13; i++ ){
		var c = strCNPJ.charAt(i);
		if( ! (c>="0")&&(c<="9") ){
			return false; 
		}
		if( c!=varFirstChr ){
			vaCharCNPJ = true; 
		}
	}
	if( ! vaCharCNPJ ){
		return false ;
	}

	s1 = strCNPJ.substring(0,12);
	s2 = strCNPJ.substring(12,15);
	vlMult = "543298765432";
	vlControle = "";
	for ( j=1; j<3; j++ ) {
		vlSoma = 0;
		for ( i=0; i<12; i++ ){ 
			vlSoma += eval( s1.charAt(i) )* eval( vlMult.charAt(i) );
		}
		if( j == 2 ){ 
			vlSoma += (2 * vlDgito); 
		}
		vlDgito = ((vlSoma*10) % 11);
		if( vlDgito == 10 ){ 
			vlDgito = 0; 
		}
		vlControle = vlControle + vlDgito;
		vlMult = "654329876543";
	}
	if( vlControle != s2 ) {
		return false;
	}
	else {
		return true;
	}
}

//********************************************************************
// Função    		: validaEmail
// Objetivo  		: Validar o EMAIL
// Parâmetro 		: strEmail
// Retorno   		: Verdadeiro para EMAIL válido e Falso para EMAIL inválido
// Pré-Requisito 	: 
//********************************************************************
function validaEmail(strEmail){
	var checkTLD=1;
	var knownDomsPat=/^(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum)$/;
	var emailPat=/^(.+)@(.+)$/;
	var specialChars="\\(\\)><@,;:\\\\\\\"\\.\\[\\]";
	var validChars="\[^\\s" + specialChars + "\]";
	var quotedUser="(\"[^\"]*\")";
	var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;
	var atom=validChars + '+';
	var word="(" + atom + "|" + quotedUser + ")";
	var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
	var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$");
	var matchArray=strEmail.match(emailPat);
	if (matchArray==null) {
		return false;
	}
	var user=matchArray[1];
	var domain=matchArray[2];
	for (i=0; i<user.length; i++) {
		if (user.charCodeAt(i)>127) {
			return false;
	   }
	}
	for (i=0; i<domain.length; i++) {
		if (domain.charCodeAt(i)>127) {
			return false;
	   }
	}
	if (user.match(userPat)==null) {
		return false;
	}
	var IPArray=domain.match(ipDomainPat);
	if (IPArray!=null) {
		for (var i=1;i<=4;i++) {
			if (IPArray[i]>255) {
				return false;
		   }
		}
		return true;
	}
	var atomPat=new RegExp("^" + atom + "$");
	var domArr=domain.split(".");
	var len=domArr.length;
	for (i=0;i<len;i++) {
		if (domArr[i].search(atomPat)==-1) {
			return false;
	   }
	}
	if (checkTLD && domArr[domArr.length-1].length!=2 && domArr[domArr.length-1].search(knownDomsPat)==-1) {
		return false;
	}
	if (len<2) {
		return false;
	}
	return true;
}

//********************************************************************
// Função    		: validaHorario
// Objetivo  		: Validar a HORA e MINUTO
// Parâmetro 		: strHorario (Formato: HH:MM)
// Retorno   		: Verdadeiro para HORÁRIO válido e Falso para HORÁRIO inválido
// Pré-Requisito 	: 
//********************************************************************
function validaHorario(strHorario){
	var hora, minuto, doispontos;

	hora = strHorario.substring(0,2);
	minuto = strHorario.substring(3,5);
	doispontos = strHorario.substring(2,3);

	if (doispontos != ":") {
		return false;
	}
	if ((hora == "") || (minuto == "")){
		return false;
	}
	if ( isNaN(hora) || (hora < 0) || (hora > 23)) {
		return false;
	}
	if (isNaN(minuto) || (minuto < 0) || (minuto > 59) ) {
		return false;
	}
	return true;
}

//********************************************************************
// Função    		: validaData
// Objetivo  		: Validar a DATA
// Parâmetro 		: strData (Formato: DD/MM/AAAA)
// Retorno   		: Verdadeiro para DATA válida e Falso para DATA inválida
// Pré-Requisito 	: Função anoBissexto
//********************************************************************
function validaData(strData){
	var dia, mes, ano, barra1, barra2;

	dia = strData.substring(0,2);
	mes = strData.substring(3,5);
	ano = strData.substring(6,10);
	barra1 = strData.substring(2,3);
	barra2 = strData.substring(5,6);

	if ((barra1 != "/") || (barra2 != "/")) {
		return false;
	}
	if ( isNaN(dia) || isNaN(mes) || isNaN(ano)){
		return false;
	}
	if ( (ano < 1900) || (ano > 2020) ) {
		return false;
	}
	if ( (mes<1) || (mes>12) ) {
		return false;
	}
	if (mes == 2) {
		if ((dia == 29) && (anoBissexto(ano) == false)){
			return false;
		}
		else
			if ((dia == 30) || (dia == 31)){
				return false;
			}
	}
	else
		if ((mes == 1 || mes == 3 || mes == 5 || mes == 7 || mes == 8 || mes == 10 || mes == 12) && (dia > 31 || dia< 1)){
			return false;
		}
		else if ((mes == 4 || mes == 6 || mes == 9 || mes == 11) && (dia > 30 || dia < 1)) {
			return false;
		}
	return true;
} 

//********************************************************************
// Função    		: anoBissexto
// Objetivo  		: Verifica se o ano é bissexto
// Parâmetro 		: strAno
// Retorno   		: Verdadeiro para ANO BISSEXTO e Falso para ANO NORMAL
// Pré-Requisito 	: nenhum
//********************************************************************
function anoBissexto(strAno){
	if ((strAno%100) == 0) {
		if ( (strAno%400) == 0) {
			return true;
		}
	}
	else { 
		if ((strAno%4) == 0){
			return true;
		}
	}
	return false;
}

//********************************************************************
// Função    		: validaMoeda
// Objetivo  		: Verifica se a moeda é valida
// Parâmetro 		: strMoeda (Formato: 100,00)
// Retorno   		: Verdadeiro para MOEDA no formato e Falso para MOEDA fora do formato
// Pré-Requisito 	: nenhum
//********************************************************************
function validaMoeda(strMoeda){
	var moeda="0123456789,";
	var virgula = false;
	for (var i=0;i<strMoeda.length;i++){
		temp=strMoeda.substring(i,i+1);
		if ((virgula) && (temp==",")){
			return false;
		}
		if (temp==","){
			virgula=true;	
		}
		if (moeda.indexOf(temp)==-1){
			return false;
		}
	}
	return true;
}

//********************************************************************
// Função    		: validaNumero
// Objetivo  		: Verifica se o valor passado é apenas número
// Parâmetro 		: strNumero
// Retorno   		: Verdadeiro para MÚMERO e Falso quando tiver caracter
// Pré-Requisito 	: nenhum
//********************************************************************
function validaNumero(strNumero){
	var temp;
	var digito="0123456789";

	for (var i=0;i<strNumero.length;i++){
		temp= strNumero.substring(i,i+1);
		if (digito.indexOf(temp)== "-1"){
			return false;
		}
	}
	return true;
}

//********************************************************************
// Função    		: validaCampos
// Objetivo  		: Valida todos os campos de um formulário
// Parâmetro 		: formulario
// Retorno   		: Verdadeiro para MÚMERO e Falso quando tiver caracter
// Pré-Requisito 	: variaveis globais
//						  funções validaNumero, validaMoeda, validaData, validaHorario, validaCNP, validaEmail
//********************************************************************
function validaCampos(formulario) {
	var pass=true;
	var chkChecked=false;
	var radChecked=false;		

	if (document.images) {
		for (i=0;i<formulario.length;i++) {
			var tempobj=formulario.elements[i];

			if (tempobj.name.substring(3,4)=="R") {
				if (((tempobj.type=="text"||tempobj.type=="textarea")&& tempobj.value=='')||(tempobj.selectedIndex==0)) {
					pass=false;
					break;
				}
			}

			if (tempobj.name.substring(0,3)=="int") {
				if (validaNumero(tempobj.value) == false){
					pass=false;
					break;
				}       
			}    

			if (tempobj.name.substring(0,3)=="cur") {
				if (validaMoeda(tempobj.value) == false){
					pass=false;
					break;
				}
			}
 
			if (tempobj.name.substring(0,3)=="dta") {
				if (validaData(tempobj.value) == false){
					pass=false;
					break;
				}
			}    

			if (tempobj.name.substring(0,3)=="hor") {
				if (validaHorario(tempobj.value) == false){
					pass=false;
					break;
				}
			}    

			if (tempobj.name.substring(0,3)=="cnp") {
				if (validaCNP(tempobj.value) == false){
					pass=false;
					break;
				}
			}   

			if (tempobj.name.substring(0,3)=="eml") {
				if (tempobj.value != '') {
   				if (validaEmail(tempobj.value) == false){
   					pass=false;
   					break;
   				}
   			}
			}    

   		if (tempobj.name.substring(0,4)=="chkR") {
      		if ( !chkChecked ){
      			for(var j=0;j<formulario.elements.length;j++){
      				if( formulario.elements[j].name.substring(0,4)=="chkR" ){
   						if (formulario.elements[j].checked){   					
   							chkChecked=true;
   						}
      				}
      			}
     				if ( !chkChecked ){
           			pass=false;
           			break;
     				}
      		}
      	}


   		if (tempobj.name.substring(0,4)=="radR") {
      		if ( !radChecked ){
      			for(k=0;k<formulario.elements.length;k++){
      				if( formulario.elements[k].name.substring(0,4)=="radR" ){
   						if (formulario.elements[k].checked){   					
   							radChecked=true;
   						}
      				}
      			}
     				if ( !radChecked ){
           			pass=false;
           			break;
     				}
      		}
      	}
		}
	}

	if (!pass) {
		switch (tempobj.name.substring(0,4)) {
   		case "strR":
   			mensagem = msgStrR;
   			break;

   		case "selR" :
   			mensagem = msgSelR;
   			break;

   		case "curR":
   			mensagem = msgCurR;
   			break;
    
   		case "intR":
   			mensagem = msgIntR;
   			break;
   
   		case "dtaR":
   			mensagem = msgDtaR;
   			break;
   
   		case "horR":
   			mensagem = msgHorR;
   			break;
   
   		case "emlR":
   			mensagem = msgEmlR;
   			break;
   
   		case "cnpR":
   			mensagem = msgCnpR;
   			break;

   		case "radR":
   			mensagem = msgRadR;
   			break;
   
   		case "intX":
   			mensagem = msgIntX;
   			break;
   
   		case "curX":
   			mensagem = msgCurX;
   			break;
   
   		case "dtaX":
   			mensagem = msgDtaX;
   			break;
   
   		case "horX":
   			mensagem = msgHorX;
   			break;
   
   		case "emlX":
   			mensagem = msgEmlX;
   			break;
   
   		case "cicX":
   			mensagem = msgCNPX;
   			break;

   		case "radR":
   			mensagem = msgRadR;
   			break;
   		case "chkR":
   			mensagem = msgChkR;
   			break;

   		case "txaR":
   			mensagem = msgTxaR;
   			break;

   		default:
   			mensagem = msgDefault;
		}

		alert (mensagem);

		tempobj.focus();
		return false;
	}
	return true;
}


//********************************************************************
// Função    		: apenasNumeros
// Objetivo  		: Verifica se a tecla que foi digitada é um dígito numérico.
// Parâmetro 		: O objeto event do javascript.
// Retorno			: True se for tecla numérica, False se não for numérica.
// Pré-Requisito	: nenhum
//********************************************************************
function apenasNumeros(event)
{
	    var BACKSPACE=  8;
        var key;
        var tecla;

        if(navigator.appName.indexOf("Netscape")!= -1)  
          tecla= event.which;     
        else
          tecla= event.keyCode;

        key = String.fromCharCode( tecla);

        if ( (tecla == BACKSPACE) || (tecla == 13) )
          return true;
        return ( (key >= "0") && (key <= "9"));   
} 

//********************************************************************
// Função    		: validaNumero
// Objetivo  		: Verifica se um conjunto de caracteres são dígitos numéricos.
// Parâmetro 		: Conjunto de caracteres.
// Retorno   		: True se o conjunto for um número, False se o conjunto não for número. 
// Pré-Requisito 	: nenhum 
//********************************************************************  
function validaNumero (strNumero) {
    var i;

    for (i = 0; i < strNumero.length; i++)
    {   
        var c = strNumero.charAt(i);
        if (isNaN(c)) return false;
    }
    return true;
}

/*****************************
Função : FormataTelefone()
Objetivo : Formata o número do telefone
Criada em : 25/02/2002
Por : Rodrigo Bindo Paranhos
Parâmetros : Número do Telefone
******************************/
function FormataTelefone(strNumero)
{
	if ((strNumero != '') && (strNumero.indexOf('-') == -1))
	{
		var NumFormatado = '';
		var len = strNumero.length;
		
		NumFormatado = strNumero.substring(0,len-4) + '-' + strNumero.substring(len-4,len);
		return NumFormatado;
	}
	return strNumero;		
}
/*****************************
Função : ValidaTelefone()
Objetivo : Formata o número do telefone
Criada em : 25/02/2002
Por : Rodrigo Bindo Paranhos
Parâmetros : Número do Telefone
******************************/
function ValidaTelefone(strNumero)
{
	if ((strNumero.length < 8) && (strNumero.length > 0))
	{
		return false;
	}
	return true;
}

/*****************************
Função : FormataHora()
Objetivo : Formata a Hora
Criada em : 25/02/2002
Por : Rodrigo Bindo Paranhos
Parâmetros : Número da Hora
*****************************/
function FormataHora(strHora)
{
	if ((strHora != '') && (strHora.indexOf(':') == -1))
	{
		var HoraFormatada = '';
		var len = strHora.length;
		
		HoraFormatada = strHora.substring(0,len-2) + ':' + strHora.substring(len-2,len);
		return HoraFormatada;
	}
	return strHora;		
}

/*****************************
Função : FormataData()
Objetivo : Formata a Data
Criada em : 25/02/2002
Por : Rodrigo Bindo Paranhos
Parâmetros : Número da Data
*****************************/
function FormataData(strData)
{
	if ((strData != '') && (strData.indexOf('/') == -1))
	{
		var DataFormatada = '';
		var len = strData.length;
		
		DataFormatada = strData.substring(0,len-6) + '/' + strData.substring(len-6,len-4) + '/' + strData.substring(len-4,len);
		return DataFormatada;
	}
	return strData;		
}

/*****************************
Função : CaracteresInvalidos()
Objetivo : não permitir teclar determinadas teclas
Criada em : 19/08/2002
Por : Rodrigo Bindo Paranhos
Parâmetros : evento
*****************************/
function CaracteresInvalidos(event)
{
        var key;
        var tecla;

        tecla= event.keyCode;

      //  key = String.fromCharCode( tecla);
		
		// 39 caracter '
		// 59 caracter ;



        if ( (tecla == 39) || (tecla == 59) )
        {
			return 0;
		}
		return 1;
}

//  Fim -->
