
/*
 * XMLComponents - Rotinas para validação de formulários
 * Componente: Makaseru
 * http://www.webconsult.com.br
 *
 * Version: 1.0.2.00
 * Date:    2002/03/21
 * 
 * 2002/03/21 - Formalizacao das rotinas 
 * 2001/08/21 - Implementado recurso de campo "opcional" ou vazio
 * 2001/08/15 - Primeira versão
 */

// ** Traditional implementation ***********************************************

// ** Rotina Valida ***********************************************
// Varre todos os campos do formulario a procura de um atribuido chamado requerido
// Caso haja tal atributo em um dos campos ele verifica se eh um dos valores:
// text - verifica se o texto é maior que zero
// int - verifica se o dado é inteiro
// float - verifica se é ponto flutuante
// date - verifica se eh uma data "valida"
// code - executa uma rotina Javascript passando o valor do campo, requer um parametro chamado rotina
// regexp - executa uma procura usando RegExp, requer um atributo chamado expressao
// Se o formulario estiver "certo" ele irah proceder com o Submit


function validaCampo(e){
	var erro = 0;
		if (e.requerido){
			switch (e.requerido) {
				case "text":
						if (e.value.length == 0) {
							erro = 1;
							alert("Campo obrigatório.");
						} else {
							if ((e.min) && (e.max) && (e.value.length==0  && !e.vazio)) {
								if ((e.value.length < e.min) && (e.value.length > e.max)){
									erro = 1;
									alert("Campo fora da faixa permitida.");
								}
							}
						}
						break;

				case "int":
						if (isNaN(e.value) || (e.value.length == 0 && !e.vazio)) {
							erro = 1;
							alert("Entre com um valor númerico.");
						} else {
							if (((e.min) && (e.max)) && !(e.value.length==0  && e.vazio)) {
								if ((e.value < e.min) || (e.value > e.max)){
									erro = 1;
									alert("Campo fora da faixa permitida.");
								}
							}
						}
						break;

				case "float":
						aux = e.value;
						pPos = aux.indexOf(".");
						vPos = aux.indexOf(",");
						aux = aux.replace( ".", "" );
						aux = aux.replace( ",", "." );
						if (isNaN(aux) || (e.value.length == 0 && !e.vazio) || pPos > vPos) {
							erro = 1;
							alert("Entre com um valor númerico, em formato brasileiro.");
						}
						break;
						
				case "date":
						if ((!chkdate(e.value) && e.value.length != 0) || (e.value.length == 0 && !e.vazio)) {
							erro = 1;
							alert("Data Invalida. Tente novamente. \n Formato correto: dd/mm/aaaa.");
						}
						break;

				case "select":
								if ((e.selectedIndex < e.min) || (e.selectedIndex > e.max)){
									erro = 1;
									alert("Você não selecionou uma opção válida.");
								}
						break;

				case "code":
						
						if (e.rotina) {
							rotina = "var retorno = " + e.rotina + "(e);"
							eval(rotina);
							if (retorno != "" || (e.value.length == 0 && !e.vazio)) {
								erro = 1;
							}
						} else {
							alert("Erro no codigo HTML. Falta rotina. Campo:" + e.name);
							erro = 1;
							break;
						}
						break;

				case "regexp":
						
						if (e.expressao) {
							var re = new RegExp(e.expressao,"g");
							if (re.test(e.value) || (e.value.length == 0 && !e.vazio)) {	
								break;
							} else {
								erro = 1;
								alert("Erro no dado fornecido.");
							}
						} else {
							erro = 1;
							alert("Erro no codigo HTML. Falta expressao. Campo:" + e.name);
							break;
						}
						break;
			}
			
			if (erro > 0 ){
				if (e.disabled != true && e.type != "hidden")
					e.focus();
				return false;	
			}
		}
	return true;
}

function ValidaDados(form)
{
	var i;
	var el;
	var e;
	var erro;
	var aux;
	// A rotina varre TODOS os campos do formulario verifcando se ele eh requerido e se
   // for ele executa a rotina de validacao por Regular Expression ou
	// Faz o teste usando uma rotina "externa"
	
	el = form.elements;
	erro = 0;
	for(i=0; i < el.length; i++){
		e = el.item(i);
		if (!validaCampo(e)) 
		  return false;
	}
	return true;
} 

function ValidaDadosAbertos(colecao)
{
	var i;
	var el;
	var e;
	var erro;
	var aux;

	// A rotina varre TODOS os campos do formulario verifcando se ele eh requerido e se
   // for ele executa a rotina de validacao por Regular Expression ou
	// Faz o teste usando uma rotina "externa"
	
	el = colecao.all.tags('INPUT');
	erro = 0;
	for(i=0; i < el.length-1; i++){
		e = el.item(i);
		if (!validaCampo(e))
		  return false;
	}

	el = colecao.all.tags('SELECT');
	erro = 0;
	for(i=0; i < el.length-1; i++){
		e = el.item(i);
		validaCampo(e);
	}

	return true;
} 

function CGC_CPF(campo){
  var r, valor;
	valor = campo.value;
	valor = valor.replace( ".", "" );
  valor = valor.replace( ".", "" );
  valor = valor.replace( "/", "" );
	valor = valor.replace( "-", "" );
	
	if (valor.length < 12)
		r = VerificaCPF(valor)
	else
		r = VerificaCGC(valor);	
   return r;

}

function VerificaCPF(valor) {
	var wVr, wTam, wSoma, wSoma2, i, j, wDig1, wDig2,
   wVETOR_CC = new Array(9),
   wVETOR_PESO = new Array(9);

	wVr = valor;
	wTam = wVr.length + 1;

    if (wTam < 11) {
		alert("Nº de dígitos do CPF ou CNPJ menor que o normal. Redigite !!!");
	  return "Nº de dígitos do CPF ou CNPJ menor que o normal. Redigite !!!";
	}
    
	for (i = 0; i < wVr.length; i++) {
	   if (isNaN(parseInt(wVr.charAt(i))) ) {
			 alert("O CPF ou CNPJ contém dígitos inválidos. Corrija-o !!!");
	     return "O CPF ou CNPJ contém dígitos inválidos. Corrija-o !!!";
	   }
	}
	
	if (wVr == '11111111111' || wVr == '22222222222' || wVr == '33333333333' || wVr == '44444444444' || wVr == '55555555555' || 
	    wVr == '66666666666' || wVr == '77777777777' || wVr == '88888888888' || wVr == '99999999999') {
			 alert("CPF ou CNPJ inválido. Redigite-o !!!");
	     return "CPF ou CNPJ inválido. Redigite-o !!!";
	}
   wSoma = 0;
	wSoma2 = 0;
    j = 2;
    for (i = 0; i < 11; i++) {
	   wVETOR_CC[i] = wVr.charAt(i);
	   wVETOR_PESO[i] = j;
	   j++; 
	 } 
    i = 0;	  
    while (i < 9){
	   i++;
	   if (i < 10) {
          wSoma += wVETOR_CC[9 - i] * wVETOR_PESO[i - 1]; 
      }
	   wSoma2 += wVETOR_CC[10 - i] * wVETOR_PESO[i - 1];
	}
	wDig1 = (wSoma * 10) % 11;
	wDig2 = (wSoma2 * 10) % 11;
	if (wDig1 == 10) { 
	    wDig1 = 0;
	}	
	if (wDig2 == 10) { 
	    wDig2 = 0;
	}		
    if (parseInt(wVr.charAt(9)) != wDig1 || parseInt(wVr.charAt(10)) != wDig2) {
  		 alert("CPF ou CNPJ com Dígito Verificador inválido. Redigite-o !!!");
	     return "CPF ou CNPJ com Dígito Verificador inválido. Redigite-o !!!";
    }	

	return "";
}

function VerificaCGC(valor){ 
  var CGC = valor; 
  
  var Numero = CGC.substr(0, 12);
  var Digito = CGC.substr(12, 2);
  
  var peso1 = '543298765432';
  var peso2 = '654329876543';
  var soma1 = 0;
  var soma2 = 0;
  var digito1 = 0;
  var digito2 = 0;

  if (CGC == '00000000000000'){
		  alert("CPF ou CNPJ Inválido. Redigite!");	
    	return "CPF ou CNPJ Inválido. Redigite!";
  } 
	 
  if ((Numero.length + Digito.length + 1 > 1) && (Numero.length + Digito.length + 1 < 14)) {
		alert("Nº de dígitos do CPF ou CNPJ menor que o normal. Redigite !!!");
    return "Nº de dígitos do CPF ou CNPJ menor que o normal. Redigite !!!";
  }	
 
    if (Numero.length + Digito.length + 1 > 1){
    	 for (i = 1; i < 12 - Numero.length + 1; i++) {
    	   Numero = eval("'" + 0 + Numero + "'")
    	 }
    		    
    	 for (i = 1; i < Numero.length+1; i++) {
    	   soma1 += Numero.substring(i, i-1) * peso1.substring(i, i-1);
    	 } 
    		
    	 soma1 %= 11;
    		
    	 if (soma1  < 2) {
    	   digito1 = 0;
    	 } else {
    	   digito1 = 11 - soma1; 
    	 }
    		
    	 for (i = 1; i < Numero.length+1; i++) {
    	   soma2 += Numero.substring(i, i-1) * peso2.substring(i, i-1);
    	 } 
    		 
    	 soma2 += digito1 * 2 
    	 soma2 %= 11;
    		
    	 if (soma2  < 2) {
    	   digito2 = 0;
    	 } else  {
    	   digito2 = 11 - soma2; 
    	 }
    		
    	 if (eval("'" + digito1 + digito2 + "'") != Digito) {
    	   return "CPF ou CNPJ inválido. Redigite !!!";
    	 } else {
    	   return "";
    	 }
    }
   return "";
}



	
function comparedate(mDataMaior, mpDataMenor) 
	{	
	var datefield = mDataMaior;
	if (chkdate(mDataMaior) == false) 	   {   
	   alert("Data Invalida. Tente novamente. \n Formato correto: dd/mm/aaaa.");
	   datefield.value="";
	   datefield.focus();
	   return false;
	   }
	else
	   {
	   datefield = mpDataMenor;  
  	   if (chkdate(mpDataMenor) == false) 	   {   
	      alert("Data Invalida. Tente novamente. \n Formato correto: dd/mm/aaaa.");
	      datefield.value="";
	      datefield.focus();
	      return false;
	      } 
	   else
	     	{
	   	if ((mDataMaior.value == '') && (mpDataMenor.value != ''))
	   		{
	   		if (confirm('Deseja manter a data em branco? \nCaso deseje click em OK caso contrário click em CANCELAR !'))
	   			return true;
	   		else
	   			{
	   	    	mDataMaior.value="";
	      	   mDataMaior.focus();
		    		return false;
		    		}
	   		}
	   	else
	   		{
		   	dataMenor = mpDataMenor.value.split("/");
		   	dataMaior = mDataMaior.value.split("/");
	   		data1 = new Date(dataMenor[2],dataMenor[1],dataMenor[0]);
	   		data2 = new Date(dataMaior[2],dataMaior[1],dataMaior[0]);
			   if (data1 > data2) {
		      	alert("Essa data precisa ser maior que a anterior. \n Formato correto: dd/mm/aaaa.");
	   	    	mDataMaior.value="";
	      	   mDataMaior.focus();
		    		return false;
			 		} 
			 	else 
			    	return true;
	      	}
	      }	
	   }
	}


function chkdate(valor){
   var strDatestyle = "BR";  //Data No Formato Brasil dd/mm/aaaa
   var strDate;
   var strDateArray;
   var strDay;
   var strMonth;
   var strYear;
   var intday;
   var intMonth;
   var intYear;
   var booFound = false;
   var intElementNr;
   var err = 0;

   strDate = valor;
	   
  	strDateArray = strDate.split("/");
  	if (strDateArray.length != 3)	{	
		return false;
	} else {	
  		strDay = strDateArray[0];
		strMonth = strDateArray[1];
		strYear = strDateArray[2];
  	}

  	if (strYear.length == 2)
  		strYear = '20' + strYear;
	  		
  	intday = parseInt(strDay, 10);
	  	
  	if (isNaN(intday))
      return false;
	      
  	intMonth = parseInt(strMonth, 10);
  	if (isNaN(intMonth))
      return false;

	intYear = parseInt(strYear, 10);
	if (isNaN(intYear))
		return false;

	if (intMonth>12 || intMonth<1)
		return false;

	if ((intMonth == 1 || intMonth == 3 || intMonth == 5 || intMonth == 7 || intMonth == 8 || intMonth == 10 || intMonth == 12) && (intday > 31 || intday < 1)) 
		return false;

	if ((intMonth == 4 || intMonth == 6 || intMonth == 9 || intMonth == 11) && (intday > 30 || intday < 1)) 
		return false;

	if (intMonth == 2){	
		if (intday < 1) 
			return false;

		if (intYear % 4 == 0){	
			if (intday > 29) 
				return false;
		} else {	
			if (intday > 28) 
				return false;
		}
	}
 		
	return true;
}
		
function Hora(valor){
	var HORA = valor
	if (HORA != ""){	
		try{
			var data= new Date('01/01/1901 ' + HORA)
			if (isNaN(data)) {
				return "Hora em formato inválido";
			} else {
				return "";
			}
		}
	catch (e) {
		return "Hora em formato inválido";
		}
	}			
}

function monta_campo_selecao(campo,seletor)
	{
	var oOption;
	var i=0;
	var texto = '';
	for (i=0;i<=campo.length;i++)
		{
		if (campo.substr(i,1) == '|')
			{
			oOption = document.createElement("OPTION");
			oOption.text = texto;
			oOption.value = texto;
			seletor.add(oOption);
			texto='';
			}
		else	
			{
			texto= texto + campo.substr(i,1);
			}
		}	
	}
	
function confirma(){
if (confirm("Esse registro será excluido!") == 1)
	{
		return true;
    }
   else
    {
      return false;
    }
}

function Valida_Email(campo){
	email = campo.value;
	if (email != ""){  
  		if (email.indexOf('@', 0) == -1 || email.indexOf('.', 0) == -1){
  			alert("E-mail invalido!");
  		} else{
  			return ""; 
  		}	
  	}		
  	else{ 
			alert("Campo vazio!");
  		return ""; 
	}
}

