// Autor: Fabio Ruela
// Data : 17/08/1999
// Conta dentro de uma string a quantidade de caracteres "/"
function fJSContaBarra(strdata)
{
	var count = 0;
	
	for (var i=0; i<=strdata.length; i++)
	{
		if (strdata.substr(i, 1) == '/')
		{
			count += 1;
		}
	}
	return count;
}




// Autor: Fabio Ruela
// Data : 17/08/1999
// Valida uma string data no formato dd/mm/aaaa
function fJSValidaData( lData )
{

	if ( fJSContaBarra(lData) != 2 ) { return false; }

	var npos = fJSRetornaPosCaracter(lData, '/');
	
	if ( npos > 0  ){
	
		var dia = lData.substr(0, npos);
		
		if (dia.length > 2){
			return false;
		}
		else{
			if (dia.length < 2){
				dia = '0' + dia;
			}
		}
		
		var lResto = lData.substr(npos+1, lData.length-npos-1);
		npos = fJSRetornaPosCaracter(lResto,'/');
		
		if (npos > 0){
			var mes = lResto.substr(0, npos);
		
			if (mes.length > 2){
				return false;
			}
			else{
				if (mes.length < 2){
				mes = '0' + mes
				}
			}

			var ano = lResto.substr(npos+1, lResto.length-npos-1)
			if (ano.length < 4){
				return false;
			}
		}
		else{
			return false;
		}
	}
	else{
		return false;
	}
	
    if ( !(fJSIsNumber(dia)) && !(fJSIsNumber(mes)) && !(fJSIsNumber(ano)) ) { return false;	}   
    
	if (fJSInRange(dia,1,31) && fJSInRange(mes,1,12) && fJSInRange(ano,1900,3000)){
	
	   if (!fJSChecaTamanhoMes(mes, dia)) return false
	   if (!fJSChecaAnoBissexto( mes, dia, ano )) return false 
	   
       var aux = new Date( mes + '/' + dia + '/' + ano );
       
	   if (aux.toString() == 'NaN'){
		   return false;
	   } 
    }
	else{
          return false;
		}
		
    return true
		
}

// Autor: Gabriel Guedes
// Data : 04/02/2000
// Valida entrada de dados numérica para objetos text
// Obs: passar como parâmetro o objeto
function fJSTestaNumero(objText)
{
  var lRetorno
  
  if (fJSIsNull(objText.value))
	{
	 return true
	}
  else
	{
	 lRetorno = fJSIsNumber(objText.value);
	}

  if (!(lRetorno))
    {
      alert('Valor inválido!') 
      objText.focus()
      return false
    }
  return true
  
}


// Autor: Fabio Ruela
// Data : 17/08/1999
// Checa ano bissexto
function fJSChecaAnoBissexto( mm, dd, yyyy ){
   if ( mm == 2 ){
      if ( yyyy % 4 > 0 && dd > 28 ) return false
      else if ( dd > 29 ) return false
   }
   return true;
}

// Autor: Fabio Ruela
// Data : 17/08/1999
// Checa o tamanho do mes
function fJSChecaTamanhoMes( mm, dd )
{
  var Mes = Number(mm);
  var Dia = Number(dd);
  
  if ( ( Mes == 4 || Mes == 6 || Mes == 9 || Mes == 11 ) && 
       ( Dia > 30 ) ) return false
  return true;     
}

// Autor: Fabio Ruela
// Data : 17/08/1999
// Verifica se o numero informado está entre os parâmetros ini e fim incluse.
function fJSInRange( inputStr, ini, fim ){
  var num = parseInt(inputStr, 10)
  if ( num < ini || num > fim ) {
     return false
  }
  return true
}


// Autor: Fabio Ruela
// Data : 17/08/1999
// Retorna a posicao do caracter na string
function fJSRetornaPosCaracterPaulo( string, caracter )
{
	for (var i=0; i<=string.length; i++)
	{
		if (string.substr(i, 1) == caracter)
		{
			return i;
		}
	}
	return -1;
}

function fJSRetornaPosCaracter( string, caracter )
{
	for (var i=0; i<=string.length; i++)
	{
		if (string.substr(i, 1) == caracter)
		{
			return i;
		}
	}
	return 0;
}


// Autor: Juliana Borges Ribeiro
// Data: 01/05/2000
// Formata CNPJ


function fFormataCNPJ(objText)
{  
  var strRet;
  var strCNPJFormatado;
  
  
  //Flag para contornar a rechamado do evento OnBlur no NetScape
	if (objText.FlagErroNE)
	  {
	  objText.FlagErroNE = false
	  return
	  }
	
	strCNPJ = objText.value
	npos = fJSRetornaPosCaracter(strCNPJ,"/")
  if (strCNPJ.length > 0 )
  {
    while( npos > 0 )
    {
      strCNPJ  = strCNPJ.substr(0,npos) + strCNPJ.substr(npos+1,strCNPJ.length ) 
      npos = fJSRetornaPosCaracter(strCNPJ,"/")
  
    }
    npos = fJSRetornaPosCaracter(strCNPJ,".")
    while( npos > 0 )
    {
      strCNPJ  = strCNPJ.substr(0,npos) + strCNPJ.substr(npos+1,strCNPJ.length ) 
      npos = fJSRetornaPosCaracter(strCNPJ,".")
    }
    npos = fJSRetornaPosCaracter(strCNPJ,"-")
    while( npos > 0 )
    {
      strCNPJ  = strCNPJ.substr(0,npos) + strCNPJ.substr(npos+1,strCNPJ.length ) 
      npos = fJSRetornaPosCaracter(strCNPJ,"-")
    }
    
    strCNPJFormatado =  strCNPJ
    
    if (!fJSIsNumber(strCNPJ))
    {
        alert("CPF inválido")
        objText.focus();
        return false;
  
    }
    else
    {
      if ( strCNPJ.length == 14 )
      {
          strRet = strCNPJ.substr(0,8) + "/" + strCNPJ.substr(8,strCNPJ.length)
          strRet = strRet.substr(0,13) + "-" + strRet.substr(13,strRet.length)
      }  
      else
      {
        alert("CNPJ inválido")
        objText.focus();
        return false;
      }
      
      if ( fVerificaCNPJ(strCNPJFormatado))
      {
        objText.value = strRet
      }
      else
      {
        objText.focus();
        return false;
      }
      
    }  
  }
}


// Autor: Juliana Borges Ribeiro
// Data: 01/05/2000
// Formata CPF
// Recebe um objeto com conteúdo do CPF sem traço ou barra 
// e Valida o conteúdo do CPF, essa funçao é chamada da funcao fFormataCPF

function fVerificaCNPJ (Numero_CNPJ)
{

  var Parcela;
  var Quociente;
  var Resto;
  var Soma;
  var Fator;
  var I;
  var C1;
  var C2;
  var dv1;
  var dv2;

  //Verificação dos dois digitos finais em relação ao número completo

//Flag para contornar a rechamado do evento OnBlur no NetScape
 if (Numero_CNPJ.FlagErroNE)
 {
  Numero_CNPJ.FlagErroNE = false
  return
 }

 if (Numero_CNPJ.length == 14) 
 {
 
    C1 = parseInt(Numero_CNPJ.substring(12, 13)); //13º caracter = primeiro dígito verificador
    C2 = parseInt(Numero_CNPJ.substring(13, 14)); //14º caracter = segundo dígito verificador

    //Verificação do primeiro dígito (C1)

    Soma = 0;
    Parcela = 0;
    Fator = 0;

    for(I=1; I<=12; I++)
    {
      if(I < 9)
      {
        Fator = I + 1;
      }
      else
      {
        Fator = I - 7;
      }

      Parcela = Fator * parseInt(Numero_CNPJ.substring(12 - I, 12 - I + 1));
      Soma = Soma + Parcela;

    } //fechando o "for".

    dv1 = (Soma % 11);
    dv1 = 11 - dv1;
 
    if(dv1 > 9)
    {
      dv1 = 0;
    }
 
    if(C1 != dv1)
    {
      alert ("Número do CNPJ inválido.");
      return false;
    }

    //Verificação do segundo dígito (C2)

    Soma = 0;
    Parcela = 0;
    Fator = 0;

    for(I=1; I<=13; I++)
    {
      if(I < 9)
      {
        Fator = I + 1;
      }
      else
      {
        Fator = I - 7;
      }

      Parcela = Fator * parseInt(Numero_CNPJ.substring(13 - I, 13 - I + 1));
      Soma = Soma + Parcela;
    }

    dv2 = (Soma % 11);
    dv2 = 11 - dv2;
 
    if(dv2 > 9)
    {
      dv2 = 0;
    }
 
    if(C2 != dv2)
    {
      alert ("Número do CNPJ inválido.");
      return false;
    }

    return true;
  }  
 return true;
}



// Autor: Juliana Borges Ribeiro
// Data: 01/05/2000
// Formata CPF
// Recebe um objeto do tipo "Text" com conteúdo do CPF num formato 
// qualquer e converte para o formato padrao. 
// Deve ser usada no evento "OnBlur" do objeto Text. 


function fFormataCPF(objText)
{  
  var strRet
  var strCPF
  var strCPFFormatado
  
  //Flag para contornar a rechamado do evento OnBlur no NetScape
	if (objText.FlagErroNE)
	{
	objText.FlagErroNE = false
	return
	}
	
	strCPF = objText.value
	npos = fJSRetornaPosCaracter(strCPF,"/")
  
  if (strCPF.length > 0 )
  {
    while( npos > 0 )
    {
      strCPF  = strCPF.substr(0,npos) + strCPF.substr(npos+1,strCPF.length ) 
      npos = fJSRetornaPosCaracter(strCPF,"/")
  
    }
    npos = fJSRetornaPosCaracter(strCPF,".")
    while( npos > 0 )
    {
      strCPF  = strCPF.substr(0,npos) + strCPF.substr(npos+1,strCPF.length ) 
      npos = fJSRetornaPosCaracter(strCPF,".")
    }
    npos = fJSRetornaPosCaracter(strCPF,"-")
    while( npos > 0 )
    {
      strCPF  = strCPF.substr(0,npos) + strCPF.substr(npos+1,strCPF.length ) 
      npos = fJSRetornaPosCaracter(strCPF,"-")
    }
    
    strCPFFormatado =  strCPF
    
    if (!fJSIsNumber(strCPF))
    {
        alert("CPF inválido")
        objText.focus();
        return false;
  
    }
    else
    {
  
      if ( strCPF.length == 11 )
      {
          strRet = strCPF.substr(0,9) + "-" + strCPF.substr(9,strCPF.length)
      }  
      else
      {
        alert("CPF inválido")
        objText.focus();
        return false;
      }
      if ( fVerificaCPF(strCPFFormatado))
      {
        objText.value = strRet
      }
      else
      {
        objText.focus();
        return false;
      }
        
    }
  }
}

// Autor: Juliana Borges Ribeiro
// Data: 01/05/2000
// Formata CPF
// Recebe um objeto com conteúdo do CPF sem traço ou barra 
// e Valida o conteúdo do CPF, essa funçao é chamada da funcao fFormataCPF

function fVerificaCPF (numcpf)
{
 var npos;
 var chrDigitoCPF;
 var blnRepetido;
 x = 0;
 soma = 0;
 dig1 = 0;
 dig2 = 0;
 texto = "";
 numcpf1="";
 
 //Flag para contornar a rechamado do evento OnBlur no NetScape
 if (numcpf.FlagErroNE)
 {
  numcpf.FlagErroNE = false
  return
 }
	
 if (numcpf.length == 11) 
 {  
    npos = fJSRetornaPosCaracter(numcpf,"-")
    while( npos > 0 )
    {
      numcpf  = numcpf.substr(0,npos) + numcpf.substr(npos+1,numcpf.length ) 
      npos = fJSRetornaPosCaracter(numcpf,"-")
    }
    
 
    len = numcpf.length; 

    x = len -1;
    // var numcpf = "12345678909";

    // Verificacao de digitos repetidos no numero do CPF
    chrDigitoCPF = numcpf.substring(0,1);
    blnRepetido = true;
    for(var i=1; i < len; i++){
      if(numcpf.substring(i,i+1) != chrDigitoCPF){
        blnRepetido = false; break;
      }
    }

    if(!blnRepetido){

    for (var i=0; i <= len - 3; i++) 
    {
     y = numcpf.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 ;
 
    numcpf1 = numcpf.substring(0,len - 2) + dig1 ;
    x = 11; 
    soma=0;
 
    for (var i=0; i <= len - 2; i++) 
    {
     soma = soma + (numcpf1.substring(i,i+1) * x);
     x = x - 1;
    }
    dig2 = 11 - (soma % 11);
    if (dig2 == 10) dig2=0;
 
    if (dig2 == 11) dig2=0;
    //alert ("Digito Verificador : " + dig1 + "" + dig2);
    if ((dig1 + "" + dig2) == numcpf.substring(len,len-2)) 
    {
     return true;
     
    }
    }
    
    alert ("Número do CPF inválido.");
    
    return false;
  }
  
}




// Autor: Juliana Borges Ribeiro
// Data: 01/05/2000
// Formata CEP
// Recebe um objeto do tipo "Text" com conteúdo do CEP em um formato 
// qualquer e converte para o formato padrao. 
// Deve ser usada no evento "OnBlur" do objeto Text. 


function fFormataCEP(objText)
{  
  var strRet
  var strCEP
  
  //Flag para contornar a rechamado do evento OnBlur no NetScape
	if (objText.FlagErroNE)
	  {
	  objText.FlagErroNE = false
	  return
	  }
	
	strCEP = objText.value
	npos = fJSRetornaPosCaracter(strCEP,"/")
  
  if (strCEP.length > 0 )
  {
    while( npos > 0 )
    {
      strCEP  = strCEP.substr(0,npos) + strCEP.substr(npos+1,strCEP.length ) 
      npos = fJSRetornaPosCaracter(strCEP,"/")
  
    }
    npos = fJSRetornaPosCaracter(strCEP,".")
    while( npos > 0 )
    {
      strCEP  = strCPF.substr(0,npos) + strCEP.substr(npos+1,strCEP.length ) 
      npos = fJSRetornaPosCaracter(strCEP,".")
    }
    npos = fJSRetornaPosCaracter(strCEP,"-")
    while( npos > 0 )
    {
      strCEP  = strCEP.substr(0,npos) + strCEP.substr(npos+1,strCEP.length ) 
      npos = fJSRetornaPosCaracter(strCEP,"-")
    }
  
    if (!fJSIsNumber(strCEP))
    {
        alert("CEP inválido")
        objText.focus();
        return false;
  
    }
    else
    {
  
      if ( strCEP.length == 8 )
      {
          strRet = strCEP.substr(0,5) + "-" + strCEP.substr(5,strCEP.length)
         
      }  
      else
      {
        alert("CEP inválido")
        objText.focus();
        return false;
      }
      objText.value = strRet
    }
  }
}


// Autor: Leonardo Neves
// Data: 22/03/2000
// Procura padrão dentro de uma String

function fJSInStr(lString, lPadrao)
{
	
	if (lPadrao.length <= lString.length)
	{
		for (i = 0; i <= lString.length - lPadrao.length; i++)
		{		
			if (lString.substr(i, lPadrao.length) == lPadrao)
			{
				return true
			}		
		}
	}
	return false
}

function fJSTestaData(strDate)
{
  var lRetorno

  if (fJSIsNull(strDate))
	{
	 return true
	}
  else
	{
	 lRetorno = fJSValidaData(strDate);
	}

  if (!(lRetorno))
    {
      return false
    }
  return true
}


// Autor: Fabio Ruela
// Data : 17/08/1999
// Compara duas datas de acordo com o operador informado
function fJSComparaData(data1, data2, operador)
{
//	var dt1_aux =  ( (data1.getYear()*100000000) + (data1.getMonth()*1000000) + (data1.getDate()*10000) + (data1.getHours()*100) + data1.getMinutes()); 
//	var dt2_aux =  ( (data2.getYear()*100000000) + (data2.getMonth()*1000000) + (data2.getDate()*10000) + (data2.getHours()*100) + data2.getMinutes()); 

	data1 = fJSInverteDiaMes(data1);
	data2 = fJSInverteDiaMes(data2);
	
	var dt1_aux =  new Date( data1 ); 
	var dt2_aux =  new Date( data2 );

	dt1_aux =  ( (dt1_aux.getYear()*100000000) + (dt1_aux.getMonth()*1000000) + (dt1_aux.getDate()*10000) + (dt1_aux.getHours()*100) + dt1_aux.getMinutes()); 
	dt2_aux =  ( (dt2_aux.getYear()*100000000) + (dt2_aux.getMonth()*1000000) + (dt2_aux.getDate()*10000) + (dt2_aux.getHours()*100) + dt2_aux.getMinutes()); 

	if ( operador == '=' ) {
	   if ( dt1_aux == dt2_aux)
	   {
          return true;
       }
	   return false;
	}

	if ( operador == '>=' ) {
	   if ( dt1_aux >= dt2_aux)
	   {
          return true;
       }
	   return false;
	}
	
	if ( operador == '<=' ) {
	   if ( dt1_aux <= dt2_aux)
	   {
          return true;
       }
	   return false;
	}

	if ( operador == '>' ) {
	   if ( dt1_aux > dt2_aux)
	   {
          return true;
       }
	   return false;
	}
	if ( operador == '<' ) {
	   if ( dt1_aux < dt2_aux)
	   {
          return true;
       }
	   return false;
	}

	if ( operador == '!=' ) {
	   if ( dt1_aux != dt2_aux)
	   {
          return true;
       }
	   return false;
	}
	   
}

// Autor: Fabio Ruela
// Data : 17/08/1999
// Verifica se o parametro passado é 

function fJSIsNull( strNull )
{
   if ( strNull == "" || strNull == null ) {
      return true
   }
   return false
}

// Autor: Fabio Ruela
// Data : 17/08/1999
// Verifica se é um número válido
function fJSIsNumber( num )
{
  var numeros = '0123456789,.-';
  var valor = num.toString();
  var lCount = 0;
  
  for ( var i=0; i < valor.length; i++ )
  {
      if ( numeros.indexOf( valor.substr(i,1) ) == -1 ) 
      {
          return false
      }
      
      if ( valor.substr(i,1) == ',' ) {
         lCount += 1
         if ( lCount > 1 ) { return false }
      }
  }
  return true
}

// Autor: Gabriel
// Data : 25/04/2000
// Verifica se é um número válido
function fJSTestaNumeroPuro( num )
{
  var numeros = '0123456789';
  var valor = num.toString();
  var lCount = 0;
  
  for ( var i=0; i < valor.length; i++ )
  {
      if ( numeros.indexOf( valor.substr(i,1) ) == -1 ) 
      {
          return false
      }
  }
  return true
}

// Autor: Paulo Henrique
// Data : 03/07/2000
// Valida tamanho de um campo TEXTAREA, enquanto o usuário estiver 
// digitando
function TamanhoDesc(obj,intTamanho)
{
var str, strLen

	str = obj.value		
	strLen = str.length
	if (strLen > intTamanho)
	{ obj.blur(); }
	
	return true
}




// Autor: Paulo Henrique Loureiro
// Data : 09/01/2001
// Valida uma string data no formato mm/aaaa
function fJSValidaDataMesAno( lData )
{

	if ( fJSContaBarra(lData) != 1 ) 
	{ 
		alert('Mês/Ano foi informado fora do padrão, (mm/aaaa).')
		return false; 
	}

	var npos = fJSRetornaPosCaracter(lData, '/');
	
	if ( npos > 0  ){
	
		var mes = lData.substr(0, npos);
		
		if (mes.length > 2){
			alert('Data inválida!')
			return false;
		}
		else{
			if (mes.length < 2){
				mes = '0' + mes;
			}
		}
		
		var ano = lData.substr(npos+1, lData.length-npos-1);

		if (ano.length < 4){
			alert('Mês/Ano foi informado fora do padrão, (mm/aaaa).')
			return false;
		}
	}
	else{
		return false;
	}
	
  if ( !(fJSIsNumber(mes)) || !(fJSIsNumber(ano)) ) { 
		alert('Data inválida!') 
		return false;	
	}   

	if (!(fJSInRange(mes,1,12)) || !(fJSInRange(ano,1900,3000)))
	{
		alert('Data inválida!')
		return false;
	}
    return true
}
