//verifica se o browser é netscape/mozilla
var isNS4 = (navigator.appName=="Netscape")?1:0;
function pegaTecla(tecla){
if (isNS4) 
	digito = tecla.which;
else
 digito = tecla.keyCode;
return digito;
}

function caracterControle(digito){
if (digito == 0 || digito == 8 || digito == 13 || digito == 9 || digito == 37 || digito == 38 || digito == 39 || digito == 40 || digito == 16 || digito == 17 || digito == 18)
  return true;
else
  return false;
}

/*============================================================================================
   Funções para validação dos valores dos campos presentes em uma página HTML:
	- ValorData: Verifica se o valor de um campo de uma página HTML é uma data válida. 
	             Exibe uma mensagem de erro caso o valor do campo não seja uma data válida
	- VerificaData: Verifica se um valor é uma data válida.
	- DataMenorIgual: Verifica se uma data (objDataInicial) é menor ou igual a uma 
			          outra data (objDataFinal).
	- VerificaDataMenorIgual: Verifica se a data (string) é menor ou igual a uma outra data (string)
	- ValorHoraMinuto: Verifica se um string está no formato hh:mm:ss, onde hh é a hora,
		  	           mm indica os minutos, e ss indica os segundos.
 - FormataMesAno(ConteudoCampo): formata o campo input passado como 00/0000 >> maxlength=7 onKeyPress="if (!(FormataMesAno(this))) return false;"
 - FormataData(ConteudoCampo): formata data no formato DD/MM/YYYY >> maxlength=10 onKeyPress="if (!(FormataData(this))) return false;"

 - CalculaData(data_DD/MM/YYYY, dias, adicao): retorna a nova data.
==============================================================================================*/


/*==============================================================================================
Verifica se o valor de um campo de uma página HTML é uma data válida. Exibe uma mensagem
de erro caso o valor do campo não seja uma data válida
Entradas:
   objCampo: campo presente em uma página HTML cujo valor deve ser verificado. 
             Se o valor do campo não for uma data, o campo permanecerá com o foco.
   sMensagem: mensagem a ser exibida se o valor do campo não for uma data.
              Parâmetro Opcional.
Retorna True se o valor do campo presente na página HTML for uma data e false caso contrário
*/
function ValorData(objCampo, sMensagem)
{
   //Verifica se os valores passados para os parâmetros da função são válidos
   if (typeof(objCampo) != "object")
   {
      alert("Erro na chamada da funçao ValorData." +
            " O tipo do valor passado para o parâmetro objCampo não é o esperado." +
            " Deve ser um campo de uma página HTML, ou seja, um objeto")
      return false;
   }
   if (!VerificaData(objCampo.value))
   {
      if (Trim(sMensagem) == "" || typeof(sMensagem) == "undefined")
      {
         sMensagem = "O valor informado para o campo " + objCampo.dataFld + 
                     " não é uma data válida.";
      }
      alert(sMensagem);
      SetFocus(objCampo);
      return false;
   }
   return true;
}

/*==============================================================================================
Verifica se um campo é uma data vazia.
Entradas:
   sData: valor a ser verificado
Retorna true se o valor for uma data válida e false caso contrário
*/
function CampoDataVazio(sData)
{
 if (Trim(sData.value.replace("/","").replace("/","")) == '') {
 	return true;
 }
 return false;
}
		
/*==============================================================================================
Verifica se um valor é uma data válida.
Entradas:
   sData: valor a ser verificado
Retorna true se o valor for uma data válida e false caso contrário
*/
function VerificaData(sData)
{
   //Objeto data utilizado para verificar se o valor está em um formato correto de data
   var objData;
   //Dia da Data
   var sDia;
   //Mês da Data
   var sMes;
   //Ano da Data
   var sAno;
   //Objeto do tipo String para receber a data
   var objStringData;

   objStringData = new String(sData);

	// se estiver '  /  /  ' não considera preenchido
	if(Trim(objStringData.replace('/', '').replace('/', '')) == '') {
		return true;
	}

//TODO - PESQUISAR UM MODO DA FUNCAO TRIM FUNCIONAR NO MOZILLA - NAO ESTA FUNCIONANDO!   
	
//  if (Trim(objStringData.replace(/\//gi, '')) == '' || Trim(objStringData).replace(/\//gi, '').length == 0) 
   if (objStringData.replace(/\//gi, '') == '' || objStringData.replace(/\//gi, '').length == 0) 
      return true;
   objData = new Date(sData);
   if (isNaN(objData))
      return false;
   else
   {
      //O valor está no formato correto de data. Deve-se verificar se os dias e meses estão válidos
      sDia = objStringData.substring(0,2);
      sMes = objStringData.substring(3,5);
	  if(objStringData.length != 10) {
	      return false;
	  } else {
		  sAno = objStringData.substring(6,10);
	  }
//      if (objStringData.length > 8)
//         //Recupera o ano com 4 dígitos		
//         sAno = objStringData.substring(6,10);
//      else
//         //Recupera o ano com 2 dígitos
//         sAno = objStringData.substring(6,8);
      //Verifica se o mes e o dia são válidos
      if (sMes < 1 || sMes > 12)
         return false;
      if (sDia < 1 || sDia > 31) 
         return false;
      //Verifica os meses com 30 dias
      if (sMes == 4 || sMes == 6 || sMes == 9 || sMes == 11)
      {
         if (sDia == 31) 
            return false;
      }
      // fevereiro, ano bissexto
      if (sMes == 2)
      {
         if (sDia > 29) 
            return false;
         if (sDia == 29 && ((sAno/4) != parseInt(sAno/4))) 
            return false;
      }
   }  
   return true;
}   
/*==============================================================================================
Verifica se uma data (objDataInicial) é menor ou igual a uma outra data (objDataFinal).
*/
function DataMenorIgual(objDataInicial, objDataFinal, sMensagem, bExibirMensagem)
{
   //Verifica se os valores passados para os parâmetros da função são válidos
   if (typeof(objDataInicial) != "object")
   {
      alert("Erro na chamada da funçao DataMenor." +
            " O tipo do valor passado para o parâmetro objDataInicial não é o esperado." +
            " Deve ser um campo de uma página HTML, ou seja, um objeto")
      return false;
   }

   if (typeof(objDataFinal) != "object")
   {
      alert("Erro na chamada da funçao DataMenor." +
            " O tipo do valor passado para o parâmetro objDataFinal não é o esperado." +
            " Deve ser um campo de uma página HTML, ou seja, um objeto")
      return false;
   }

   if (typeof(bExibirMensagem) == "undefined")
      bExibirMensagem = true;
      

   if (typeof(bExibirMensagem) != "boolean")
   {
      alert("Erro na chamada da funçao DataMenorIgual." +
            " O tipo do valor passado para o parâmetro bExibirMensagem não é o esperado." +
            " Deve ser true ou false.");
      return false;
   }      
   
   if (!VerificaData(objDataInicial.value))
   {   	  
      alert("A Data Inicial está inválida!");
      return false;
   }      

   if (!VerificaData(objDataFinal.value))
   {
      alert("A Data Final está inválida!");
      return false;
   }      

   if (VerificaDataMenorIgual(objDataInicial.value,objDataFinal.value)) 
      return true; 
   else
   {
      if (bExibirMensagem)
      {
         if (typeof(sMensagem) == "undefined")
            alert("A data " + objDataInicial.dataFld + " deve ser menor que a data " + objDataFinal.dataFld);
         else
            alert(sMensagem);
      }
   }
   return false;
}
/*=============================================================================================
Verifica se a data é menor ou igual a uma outra data
*/
function VerificaDataMenorIgual(sDataInicial,sDataFinal)
{
   //Dia da Data
   var sDiaInicial;
   //Mês da Data
   var sMesInicial;
   //Ano da Data
   var sAnoInicial;
   //Dia da Data
   var sDiaFinal;
   //Mês da Data
   var sMesFinal;
   //Ano da Data
   var sAnoFinal;

   if (!VerificaData(sDataInicial) || !VerificaData(sDataFinal))
      return false;

   sDiaInicial = sDataInicial.substring(0,2);
   sMesInicial = sDataInicial.substring(3,5);
   if (sDataInicial.length > 8)
      //Recupera o ano com 4 dígitos		
      sAnoInicial = sDataInicial.substring(6,10);
   else
      //Recupera o ano com 2 dígitos
      sAnoInicial = sDataInicial.substring(6,8);

   sDiaFinal = sDataFinal.substring(0,2);
   sMesFinal = sDataFinal.substring(3,5);
   if (sDataFinal.length > 8)
      //Recupera o ano com 4 dígitos		
      sAnoFinal = sDataFinal.substring(6,10);
   else
      //Recupera o ano com 2 dígitos
      sAnoFinal = sDataFinal.substring(6,8);
   
   sDataInicial = sAnoInicial + sMesInicial + sDiaInicial;
   sDataFinal = sAnoFinal + sMesFinal + sDiaFinal;  

   if (sDataInicial <= sDataFinal)
      return true;
   return false;
}
function VerificaDataMenor(sDataInicial,sDataFinal)
{
   //Dia da Data
   var sDiaInicial;
   //Mês da Data
   var sMesInicial;
   //Ano da Data
   var sAnoInicial;
   //Dia da Data
   var sDiaFinal;
   //Mês da Data
   var sMesFinal;
   //Ano da Data
   var sAnoFinal;

   if (!VerificaData(sDataInicial) || !VerificaData(sDataFinal))
      return false;

   sDiaInicial = sDataInicial.substring(0,2);
   sMesInicial = sDataInicial.substring(3,5);
   if (sDataInicial.length > 8)
      //Recupera o ano com 4 dígitos		
      sAnoInicial = sDataInicial.substring(6,10);
   else
      //Recupera o ano com 2 dígitos
      sAnoInicial = sDataInicial.substring(6,8);

   sDiaFinal = sDataFinal.substring(0,2);
   sMesFinal = sDataFinal.substring(3,5);
   if (sDataFinal.length > 8)
      //Recupera o ano com 4 dígitos		
      sAnoFinal = sDataFinal.substring(6,10);
   else
      //Recupera o ano com 2 dígitos
      sAnoFinal = sDataFinal.substring(6,8);
   
   sDataInicial = sAnoInicial + sMesInicial + sDiaInicial;
   sDataFinal = sAnoFinal + sMesFinal + sDiaFinal;  

   if (sDataInicial < sDataFinal)
      return true;
   return false;
}
/*==============================================================================================
Verifica se um string está no format hh:mm:ss. Retorna true se o string estiver no formato
adequado e false caso contrário
*/
function ValorHoraMinuto(objCampo, bSegundoObrigatorio, sMensagem, bVerificarHoraMaxima)
{
   var sHoraMinuto;
   var sHora;
   var sMinuto;
   var sSegundo;

   //Verifica se os valores passados para os parâmetros da função são válidos
   if (typeof(objCampo) != "object")
   {
      alert("Erro na chamada da funçao ValorHoraMinuto." +
            " O tipo do valor passado para o parâmetro objCampo não é o esperado." +
            " Deve ser um campo de uma página HTML, ou seja, um objeto")
      return false;
   }
   if (typeof(bSegundoObrigatorio) == "undefined")
      bSegundoObrigatorio = false;

   if (typeof(bVerificarHoraMaxima) == "undefined")
      bVerificarHoraMaxima = true;

   if (typeof(bSegundoObrigatorio) != "boolean")
   {
      alert("Erro na chamada da funçao ValorHoraMinuto." +
            " O tipo do valor passado para o parâmetro bSegundoObrigatorio não é o esperado." +
            " Deve ser true ou false.");
      return false;
   }      

   if (typeof(bVerificarHoraMaxima) != "boolean")
   {
      alert("Erro na chamada da funçao ValorHoraMinuto." +
            " O tipo do valor passado para o parâmetro bVerificarHoraMaxima não é o esperado." +
            " Deve ser true ou false.");
      return false;
   }      

   sHoraMinuto = objCampo.value;
   if (sHoraMinuto == "")
      return true;

   if (Trim(sMensagem) == "" || typeof(sMensagem) == "undefined")
   {
      sMensagem = "O valor informado para o campo " + objCampo.dataFld + 
                  " não não está no formato hh:mm:ss.";
   }

   if ((sHoraMinuto.length < 5) || (sHoraMinuto.length > 8) || 
       ((sHoraMinuto.length > 5) && (sHoraMinuto.length < 8)) || 
       ((sHoraMinuto.length < 8) && bSegundoObrigatorio))
   {
      alert(sMensagem);
      SetFocus(objCampo);
      return false;
   }      
   if (sHoraMinuto.substring(2,3) != ":")
   {
      alert(sMensagem);
      SetFocus(objCampo);
      return false;
   }      
   sHora = sHoraMinuto.substring(0,2);
   sMinuto = sHoraMinuto.substring(3,5);
   sSegundo = "";
   if (sHoraMinuto.length > 5)
      sSegundo = sHoraMinuto.substring(6,8);

   if ((!VerificaNumero(sHora)) || (sHora > 24 && bVerificarHoraMaxima) || (!VerificaNumero(sMinuto)) || 
       (sMinuto > 60))
   {
      alert(sMensagem);
      SetFocus(objCampo);
      return false;
   }      

   if (Trim(sSegundo) != "")
      if ((!VerificaNumero(sSegundo)) || (sSegundo > 60) || (sHoraMinuto.substring(5,6) != ":"))
      {
         alert(sMensagem);
         SetFocus(objCampo);
         return false;
      }      
   return true;
}


function FormataMesAno(ConteudoCampo,tecla)
{
var digito = pegaTecla(tecla);
  if (((digito) > 47) && ((digito) < 58)) {
     if (ConteudoCampo.value.length == 2)
        ConteudoCampo.value = ConteudoCampo.value.substr(0,2)+"/";
     return(true);
  }
  else return(caracterControle(digito))
}

function FormataData(ConteudoCampo,tecla)
{
var digito = pegaTecla(tecla);
if (((digito) > 47) && ((digito) < 58))
  {
   NumDig = ConteudoCampo.value;
   TamDig = NumDig.length;
   if (TamDig == 2)
      ConteudoCampo.value = NumDig.substr(0,2)+"/";
   else if (TamDig == 5)	  
      ConteudoCampo.value = NumDig.substr(0,5)+"/";
   else if (TamDig == 9)
       ConteudoCampo.value = NumDig.substr(0,10);
   return(true);}
else return(caracterControle(digito))
}

function Dia(Data_DDMMYYYY)
{
	string_data = Data_DDMMYYYY.toString();
	posicao_barra = string_data.indexOf("/");
	if (posicao_barra!= -1)
	{
		dia = string_data.substring(0,posicao_barra);
		return dia;
	}
	else
	{
		return false;
	}
}

function Mes(Data_DDMMYYYY)
{
	string_data = Data_DDMMYYYY.toString();
	posicao_barra = string_data.indexOf("/");
	if (posicao_barra!= -1)
	{
		dia = string_data.substring(0,posicao_barra);
		string_mes = string_data.substring(posicao_barra+1,string_data.length);
		posicao_barra = string_mes.indexOf("/");
		if (posicao_barra!= -1)
		{
			mes = string_mes.substring(0,posicao_barra);
			mes = Math.floor(mes);
			return mes;
		}
		else
		{
			return false;
		}
	}
	else
	{
		return false;
	}
}

function Ano(Data_DDMMYYYY)
{
	string_data = Data_DDMMYYYY.toString();
	posicao_barra = string_data.indexOf("/");
	if (posicao_barra!= -1)
	{
		dia = string_data.substring(0,posicao_barra);
		string_mes = string_data.substring(posicao_barra+1,string_data.length);
		posicao_barra = string_mes.indexOf("/");
		if (posicao_barra!= -1)
		{
			mes = string_mes.substring(0,posicao_barra);
			mes = Math.floor(mes);
			ano = string_mes.substring(posicao_barra+1,string_mes.length);
			return ano;
		}
		else
		{
			return false;
		}
	}
	else
	{
		return false;
	}
}

function Calcula_Data(data_DDMMYYYY,dias,adicao)
{
	Var_Dia=Dia(data_DDMMYYYY);
	Var_Mes=Mes(data_DDMMYYYY);
	Var_Mes=Math.floor(Var_Mes)-1;
	Var_Ano=Ano(data_DDMMYYYY);
	var data = new Date(Var_Ano,Var_Mes,Var_Dia);
	if (adicao == true)
	{
		operacao = '+';
		var diferenca = data.getTime() + (dias * 1000 * 60 * 60 * 24);
	}
	else
	{
		operacao = '-';
		var diferenca = data.getTime() - (dias * 1000 * 60 * 60 * 24);
	}
	var diferenca = new Date(diferenca);
	var dia = ((diferenca.getDate() < 10) ? '0' : '') + diferenca.getDate();
	var mes = ((parseInt(diferenca.getMonth())+1 < 10) ? '0' : '') + parseInt(parseInt(diferenca.getMonth())+1);
	var ano = diferenca.getFullYear();
	var novaData = dia + '/' + mes + '/' + ano;
	return novaData;
}


/**********************************************************************
 * Format Hour: ##:##                                                 *
 * Tested: Mozilla 1.2, explorer 6.0                                  *
 * Autor: Alisson Gomes Cerqueira                                     *
 * e-mail: alisson.gomes@ibest.com.br                                 *
 *                                                                    *
 * usage:                                                             *
 * onKeyPress="return formataHora(event,this);"                       *
 **********************************************************************/
function formataHora(evt,campo)
{
    var retorno = false;

    if(evt.keyCode)
    {
        if (((evt.keyCode) > 47) && ((evt.keyCode) < 58))
        {
            NumDig = campo.value;
            TamDig = NumDig.length;
            if (TamDig == 2)
                campo.value = NumDig.substr(0,2) + ":";
            
            retorno = true;
        //} else if( evt.keyCode == 8 )
        } else if( evt.keyCode == 8 || evt.keyCode == 9 || evt.keyCode == 37 || evt.keyCode == 39 ) 
        {
            retorno = true;
        }
    }    
    
    if (evt.charCode) 
    {			
        if (((evt.charCode) > 47) && ((evt.charCode) < 58))
        {
            NumDig = campo.value;
            TamDig = NumDig.length;
            if (TamDig == 2)
                campo.value = NumDig.substr(0,2) + ":";
            
            retorno = true;
        } else if( evt.keyCode == 47 )
        {
            retorno = true;
        }
    }
    
    if( retorno == true ) return true;
	else return false;
}
