
/*INICIO IDENTIFICAÇÃO DE BROWSER--------------------------------------------------------------
	Identificação de browser
	Autor: - Marcelo Campos   data - 27/06/02-----------------------------------------------*/

var isNav4, isNav, isIE;
if (parseInt(navigator.appVersion.charAt(0)) >= 4) {
  isNav = (navigator.appName=="Netscape") ? true : false;
  isIE = (navigator.appName.indexOf("Microsoft") != -1) ? true : false;
}

if (navigator.appName=="Netscape") {
	isNav4 = (parseInt(navigator.appVersion.charAt(0))==4);
}
/*FIM IDENTIFICAÇÃO DE BROWSER------------------------------------------------------------*/

/*----------------------------------------------------------------------------------------
	aplicacarFormatacaoCampos - Encarregado do comportamento dos campos num formulário
	Autor: - Antonio Carlos   data - 27/06/02
	
	Descrição:
		Formata os campos de um formulário HTML de acordo com o texto das primeiras três letras
		do nome do campo.
		
		O valores possíveis são:
			* num - Numérico
			* vlr - Valor
			* aln - alphanumérico
			* alp - alpha	
			* cpf - Campo CPF
			* cpj - Campo CNPJ
			* pfj - campo CPFCNPJ
			* eml - campo de email
----------------------------------------------------------------------------------------*/
function aplicacarFormatacaoCampos(objForm){
	var i, numEl;
	numEl = objForm.elements.length; 
	for (i=0; i<numEl; i++){
		var tipo, prefixo;
		prefixo = objForm.elements[i].name.substring(0,3);
		switch (prefixo) {
			case "num" :  //campo numérico
				objForm.elements[i].onkeypress	= soNumero;
			break;
			
			case "aln" : //campo alfanumerico - nao permite a insercao de letras acentuadas
				objForm.elements[i].onkeypress	= soAlfaNumerico;
			break;
			
			case "vlr" :  //campo valor
				objForm.elements[i].onkeypress					= exibirValorFormatado;
				objForm.elements[i].onkeydown					= capturaCodTecla;
				
				if ((objForm.elements[i].maxLength == -1)||(objForm.elements[i].maxLength == 2147483647)||(objForm.elements[i].maxLength == "undefined")){
					objForm.elements[i].maxLength				= 17								
				}
				if (navigator.appName != "Netscape"){
					objForm.elements[i].style.textAlign			= "right";
				}
			break; 
			
			case "dtt" :  //campo data
				objForm.elements[i].onkeypress					= exibirDataFormatada;
				objForm.elements[i].onkeydown					= capturaCodTeclaCPData;
				objForm.elements[i].maxLength					= 10
			break;
			
			case "dtm" :  //campo data
				objForm.elements[i].onkeypress					= exibirDataFormatadaMenor;
				objForm.elements[i].onkeydown					= capturaCodTeclaCPData;
				objForm.elements[i].maxLength					= 5
			break;

			case "alf" :  //campo alfa - só permite a ditação de letras sem acento
				objForm.elements[i].onkeypress	= soAlfa;
			break;
			
			case "eml" :  //campo email - só permite a ditação de letras sem acento, números e os caracteres (@ _ - . /)
				objForm.elements[i].onkeypress	= soEmail;
			break;
		}
	}	
}

/*INICIO - FORMATAÇÃO DE CAMPOS------------------------------------------------------------------*/
/* -----------------------------------------------------------------------------------------------
  variável que armazena a tecla que foi digita pelo usuário
	Essa variável é usa na função: "exibirValorFormatado"-----------------------------------------*/
var codTeclaKeyDown;

/* -----------------------------------------------------------------------------------------------
	exibirValorFormatado - Encarregada de exibir uma string com formatação de valor num campo text
	Autor: - Antonio Carlos   data - 27/06/02-----------------------------------------------------*/
	
function exibirValorFormatado(e) {
		var obj,tecla;
		//verificando se o que foi digitado é um número
		if (!soNumero(e)){
			return false;
		}
		obj   = (isNav) ? e.target : event.srcElement;
		codTecla = (isNav) ? e.which : event.keyCode;
		switch (codTecla) {
			case 8:
				obj.value = formatarValor(obj.value.substring(0,obj.value.length-1));
				break;
			case 9:
				return true;
				break;
			case 46:
				obj.value = formatarValor(obj.value.substring(0,obj.value.length-1));	
				break;
			default :
					if ((codTecla>47)&&(codTecla<58)) {
						if (obj.maxLength>obj.value.length) {
							obj.value = formatarValor(obj.value + String.fromCharCode(codTecla));
						}
					}	
		}
		return false;
}


/* -----------------------------------------------------------------------------------------------
	exibirDataFormatadaMenor - Encarregada de exibir uma string com formatação de data num campo text
	Autor: - Ivan BRQ   data - 16/02/05-----------------------------------------------------*/

function exibirDataFormatadaMenor(e) {
		var obj,tecla;
		//verificando se o que foi digitado é um número
		if (!soNumero(e)){
			return false;
		}
		obj   = (isNav) ? e.target : event.srcElement;
		codTecla = (isNav) ? e.which : event.keyCode;
		switch (codTeclaKeyDown) {
			case 8:
				obj.value = formatarDataMenor(obj.value.substring(0,obj.value.length-1));
				break;
			case 9:
				return true;
				break;
			case 46:
				obj.value = formatarDataMenor(obj.value.substring(0,obj.value.length-1));	
				break;
			default :
					if ((codTecla>47)&&(codTecla<58)) {
						if (obj.maxLength>obj.value.length){
						obj.value = formatarDataMenor(obj.value + String.fromCharCode(codTecla));
						}
					}	
		}
		return false;
}

/* -----------------------------------------------------------------------------------------------
	exibirDataFormatada - Encarregada de exibir uma string com formatação de data num campo text
	Autor: - Antonio Carlos   data - 09/05/03-----------------------------------------------------*/

function exibirDataFormatada(e) {
				
		var obj,tecla;
		//verificando se o que foi digitado é um número
		if (!soNumero(e)){
			return false;
		}
		obj   = (isNav) ? e.target : event.srcElement;
		codTecla = (isNav) ? e.which : event.keyCode;
		switch (codTeclaKeyDown) {
			case 8:
				obj.value = formatarData(obj.value.substring(0,obj.value.length-1));
				break;
			case 9:
				return true;
				break;
			case 46:
				obj.value = formatarData(obj.value.substring(0,obj.value.length-1));	
				break;
			default :
					if ((codTecla>47)&&(codTecla<58)) {
						if (obj.maxLength>obj.value.length){
						obj.value = formatarData(obj.value + String.fromCharCode(codTecla));
						}
					}	
		}
		return false;
}


/* -----------------------------------------------------------------------------------------------
	capturaCodTecla - Função encarregada obter a tecla digitada pelo usuário
	apresentando comportamento distinto para o netScape e IE.
	Autor: - Antonio Carlos   data - 27/06/02-----------------------------------------------------*/

function capturaCodTecla(e){
	codTeclaKeyDown = (isNav) ? e.which : event.keyCode;
	if (isIE) {
		switch (codTeclaKeyDown) {
			case 8:
				event.srcElement.value = formatarValor(event.srcElement.value.substring(0,event.srcElement.value.length-1));
				return false;
			break;
			case 46:
				event.srcElement.value = formatarValor(event.srcElement.value.substring(0,event.srcElement.value.length-1));
				return false;
			break;
		}
	}
}


/* -----------------------------------------------------------------------------------------------
	capturaCodTeclaCPData - Função encarregada obter a tecla digitada pelo usuário
	apresentando comportamento distinto para o netScape e IE.
	Autor: - Antonio Carlos   data - 15/05/03-----------------------------------------------------*/

function capturaCodTeclaCPData(e){
	codTeclaKeyDown = (isNav) ? e.which : event.keyCode;
	if (isIE) {
		switch (codTeclaKeyDown) {
			case 8:
				event.srcElement.value = formatarData(event.srcElement.value.substring(0,event.srcElement.value.length-1));
				return false;
			break;
			case 46:
				event.srcElement.value = formatarData(event.srcElement.value.substring(0,event.srcElement.value.length-1));
				return false;
			break;
		}
	}
}


/* -----------------------------------------------------------------------------------------------
	formatarValor - Formata uma string no padrão de valor: xx.xxx.xxx,xx
	Autor: - Antonio Carlos   data - 27/06/02-----------------------------------------------------*/
	
function formatarValor(str){
  var decimal,inteiro;
  var i,count;
  STR = new String(str);
  STR = tirarZerosEsquerda(STR);
  inteiro='';
		if (STR.length == 1){
			  inteiro  = '0';
			  decimal = '0' + STR;
			}
			else { 
			  if (STR.length == 2){
				  inteiro  = '0';
				  decimal = STR;
				}
				else{
				  decimal = STR.substring(STR.length-2,STR.length);
				  i=3;
				  count=0;
				  while (i<=STR.length){
			 		if (count==3) {
					  inteiro = '.' + inteiro;
					  count = 0;
					}
				    inteiro = STR.charAt(STR.length-i) + inteiro;
					count++;
					i++;
				  }
				}
			}
		if (inteiro == '') {
		  inteiro = '0';
		}
		if (decimal == '') {
		  decimal = '00';
		}
		return inteiro+','+decimal;
}

/* -----------------------------------------------------------------------------------------------
	formatarData - Formata uma string no padrão de data: DD/MM/AAAA
	Autor: - Antonio Carlos   data - 09/05/03-----------------------------------------------------*/
	function formatarData(str){
		  var data,re,T;
		  re = /\//g;
		  data = new String(str);
		  data = data.replace(re,"");
		  data = data.substr(0,8);
		  T = data.length;
		  if (T>2 && T<5) {
			data = data.substr(0,2) + "/" + data.substr(2,2);
		  }
		  if (T>4) {
			data = data.substr(0,2) +"/"+ data.substr(2,2) +"/"+ data.substr(4,4);
		  }
		  return data;
	}

/* -----------------------------------------------------------------------------------------------
	formatarDataMenor - Formata uma string no padrão de data: MM/AA
	Autor: - Antonio Carlos   data - 16/02/05-----------------------------------------------------*/
	function formatarDataMenor(str){
		  var data,re,T;
		  re = /\//g;
		  data = new String(str);
		  data = data.replace(re,"");
		  data = data.substr(0,4);
		  T = data.length;
		  if (T>2 && T<5) {
			data = data.substr(0,2) + "/" + data.substr(2,2);
		  }
		  if (T<3) {
			data = data;
		  }
		  return data;
	}
/* -----------------------------------------------------------------------------------------------
	tirarZerosEsquerda - função que tira todos os "0", "," e "." da string
	passada como argumento
	Autor: - Antonio Carlos   data - 27/06/02-----------------------------------------------------*/

function tirarZerosEsquerda(STR){
	var sAux = '';
	STR = new String(STR);  
	var i = 0;
	while (i < STR.length ){
		if ((STR.charAt(i)!='.') && (STR.charAt(i)!=',')){
			sAux += STR.charAt(i);
		}
		i++
	}
  STR = new String(sAux);
  sAux = '';
  i = 0;
  while (i < STR.length ){
    if (STR.charAt(i) != '0'){
      sAux = STR.substring(i,STR.length)
	  i = STR.length;
	}
    i++;
  }
  return  sAux;
}

/* -----------------------------------------------------------------------------------------------
	tirarZerosEsquerda - função que tira todos os "0", "," e "." da string
	passada como argumento
	Autor: - Marcelo Campos / Antonio Carlos  data - 27/06/02------------------------------------------------------*/
function soNumero(e) {
	var keyNumber = (isIE) ? event.keyCode : e.which;
	if (((keyNumber<48)||(keyNumber>57)) && (keyNumber!=13) && (keyNumber!="0") && (keyNumber!=8)) {
		if (isIE) {
			event.keyCode=0
		}
		return false;
	}
	return true;
}
/*FIM - FORMATAÇÃO DE VALOR---------------------------------------------------------------------*/


/* -----------------------------------------------------------------------------------------------
	validarData - Verifica se a data passada é valida
	o retorno da função é booleano, se data válida retorna true senão retorna false
	Autor: - Antonio Carlos  data - 21/08/02------------------------------------------------------*/
	function validarData(DIA,MES,ANO){
		MES = MES-1;
		data = new Date(ANO,MES,DIA);
		if ( (data.getDate()!=DIA) || (data.getMonth()!=MES) || (data.getFullYear()!=ANO) ){
				return false;
		}
		return true;
	}
/*-----------------------------------------------------------------------------------------------*/

/* -----------------------------------------------------------------------------------------------
	verifDataSelMenorDataAtual - Verifica se a data selecionada é menor que a data atual
	o retorno da função é booleano, se data selecionada for menor que data atual retorna true senão 
	retorna false
	Autor: - Antonio Carlos  data - 21/08/02------------------------------------------------------*/
	function verifDataSelMenorDataAtual(diaAtual,mesAtual,anoAtual,diaSelecionado,mesSelecionado,anoSelecionado){
		var dataAtual = anoAtual + mesAtual + diaAtual;
		var dataSelec = anoSelecionado + mesSelecionado + diaSelecionado;
		dataAtual = parseInt(dataAtual);
		dataSelec = parseInt(dataSelec);
		if (dataSelec<dataAtual){
			return true;
		}
		return false;
	}

/* -----------------------------------------------------------------------------------------------
	dataDifDias - Retorna a diferenca entre duas datas, todos os parametros são strings
	Autor: - Antonio Carlos  data - 21/08/02------------------------------------------------------*/	
	function dataDifDias(diaSelecionado,mesSelecionado,anoSelecionado,diaAtual,mesAtual,anoAtual){
		data1= new Date(anoAtual, mesAtual-1, diaAtual);
		data2= new Date(anoSelecionado, mesSelecionado-1, diaSelecionado);
		var difDias = data2-data1;
		difDias /= 86400000;
		return difDias;
	}

/* -----------------------------------------------------------------------------------------------
	validarAgCta - Verifica se a agencia conta digita é válida
	o retorno da função é booleano, se a AG/CTA for válida retorna true senão retorna false
	Autor: - Antonio Carlos  data - 21/08/02------------------------------------------------------*/	
	function validarAgCta(ag,cta){
		ag = new String(ag);
		cta = new String(cta);

		if ((ag.length4)||(cta.length7)){
			return false;
		}

		var AG_CTA_AUX = new String(ag + cta);
		var i=0;
		strRes = '';
		peso = 1;
		for (i=0;i<10;i++)  {
			strRes +=  (AG_CTA_AUX.charAt(i) * peso);
			peso = ( peso == 1 )? 2 : 1;
		}
		soma = 0;
		for (i=0; i<strRes.length ;i++)  {
			soma += parseInt(strRes.charAt(i));
		}
		dv = 10 - (soma % 10);
		if (dv == 10){ 
			dv = 0;
		}
		if (cta.charAt(6)== dv){
			return true;
		}
		return false;
		
	}
	
/* -----------------------------------------------------------------------------------------------
	soAlfaNumerico - só permite a digitação de letras não acentuadas e números
	Autor: - Fabio Castilho / Antonio Carlos  data - 07/10/02------------------------------------------------------*/
function soAlfaNumerico(e) {
	var keyNumber = (isIE) ? event.keyCode : e.which;
	if 	(
			!( 
				( 	
					((keyNumber > 47) && (keyNumber<58))  ||
					((keyNumber > 64) && (keyNumber<91))  ||
					((keyNumber > 96) && (keyNumber<123)) ||
					(keyNumber==32) || 
					(keyNumber==8)   
				) && 
				(keyNumber!=168)
			)
		)
	{
		if (isIE) {
			event.keyCode=0
		}
		return false;
	}
	return true;
}

/* -----------------------------------------------------------------------------------------------
	soAlfa - só permite a digitação de letras não acentuadas 
	Autor: - Antonio Carlos  data - 12/05/03------------------------------------------------------*/
function soAlfa(e) {
	var keyNumber = (isIE) ? event.keyCode : e.which;
	if 	(
			!( 
				( 	
					((keyNumber > 64) && (keyNumber<91))  ||
					((keyNumber > 96) && (keyNumber<123)) ||
					(keyNumber==32) || 
					(keyNumber==8)   
				) && 
				(keyNumber!=168)
			)
		)
	{
		if (isIE) {
			event.keyCode=0
		}
		return false;
	}
	return true;
}


/* -----------------------------------------------------------------------------------------------
	abrirCalendario - Abre calendário pop up para escolha de data de agendamento.
	Parametro HTodos:
	se parametro passado for = 0 habilita todos os links.  
	se parametro passado for = 1 desabilita os links para os feriados e fins de semana.
	Autor: - Antonio Carlos / Leonardo Grecco data - 09/01/03------------------------------------------------------*/
function abrirCalendario (comboDia, comboMes, comboAno, HTodos){
		var cbDiaName = comboDia.name;
		var cbMesName = comboMes.name;
		var cbAnoName = comboAno.name;
		var diaSelecionado = comboDia.options[comboDia.selectedIndex].value;
		var mesSelecionado = comboMes.options[comboMes.selectedIndex].value;
		var anoSelecionado = comboAno.options[comboAno.selectedIndex].value;
		var url = '/calendar.asp?cpDia=' +cbDiaName+ '&cpMes=' +cbMesName+ '&cpAno=' +cbAnoName+ '&valorDia=' +diaSelecionado+ '&valorMes=' +mesSelecionado+ '&valorAno=' + anoSelecionado + '&HTodos=' + HTodos;
		window.open(url,'calendar','top=70,left=115,width=132,height=140', 0);
}

	
	
	
/* -----------------------------------------------------------------------------------------------
	abrirCalendario1 - Abre calendário pop up para escolha de data de agendamento.
	Parametro HTodos:
	se parametro passado for = 0 habilita todos os links.  
	se parametro passado for = 1 desabilita os links para os feriados e fins de semana.
	Autor: - Antonio Carlos / Leonardo Grecco data - 09/05/03------------------------------------------------------*/
function abrirCalendario1 (campoTextoData,dataAtualDDMMAAAA, HTodos){
		var data,re,cpDataName,diaSel,mesSel,anoSel, dataAtual;
		cpDataName = campoTextoData.name;
	    re = /\//g;
	    data = new String(campoTextoData.value);
		data = data.replace(re,"");
		dataAtual = new String(dataAtualDDMMAAAA);
		dataAtual = dataAtual.replace(re,"");
		diaSel = "";
		mesSel = "";
		anoSel = "";
		if (campoTextoData.length=8){
			diaSel = data.substr(0,2);
			mesSel = data.substr(2,2);
			anoSel = data.substr(4,4);
			
			if ((!validarData(diaSel,mesSel,anoSel))||(anoSel<1970)) {
				diaSel = dataAtual.substr(0,2);
				mesSel = dataAtual.substr(2,2);
				anoSel = dataAtual.substr(4,4);
			}
		}
		var url = '/IBPF/JavaScript/calendario/calendar1.asp?cpData=' +cpDataName+ '&vDia=' +diaSel+ '&vMes=' +mesSel+ '&vAno=' + anoSel + '&HTodos=' + HTodos;
		if (validarData(diaSel,mesSel,anoSel)) {
		window.open(url,'calendar','top=70,left=115,width=132,height=140', 0);
	}
}

/* -----------------------------------------------------------------------------------------------------------------
	soEmail - Validacao de campo e-mail.
	Autor: - Fabio Castilho 02/09/05------------------------------------------------------------------------------*/
	
function soEmail(e) {
	var keyNumber = (isIE) ? event.keyCode : e.which;
	if 	(
			!( 
				( 	
					((keyNumber > 43) && (keyNumber<58))  ||
					((keyNumber > 63) && (keyNumber<91))  ||
					((keyNumber > 96) && (keyNumber<123)) ||
					((keyNumber > 191) && (keyNumber<221)) ||
					((keyNumber > 223) && (keyNumber<253)) ||
					(keyNumber==32) || 
					(keyNumber==8) ||
					(keyNumber==95)
				) && 
				(keyNumber!=168)
			)
		)
	{
		if (isIE) {
			event.keyCode=0
		}
		return false;
	}
	return true;
}

function validarEmail(email){
	if (window.RegExp){
		var reg1str = "(@.*@)|(\\.\\.)|(@\\.)|(\\.@)|(^\\.)";
		var reg2str = "^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$";
		var reg1 = new RegExp(reg1str);
		var reg2 = new RegExp(reg2str);

		if (!reg1.test(email) && reg2.test(email)){
			return true;
		}
		else
		{
			return false;
		}
	}
}

function validacpf(cdCpf){ 
	var i; 
	s = cdCpf.value; 
  
	var c = s.substr(0,9); 
	var dv = s.substr(9,2); 
  
	var d1 = 0; 
	  
	for (i = 0; i < 9; i++) { 
	  
		d1 += c.charAt(i)*(10-i); 
	  
	} 
	  
	if (d1 == 0){ 
	  
		cdCpf.focus();
		return false; 
	  
	} 
	  
	d1 = 11 - (d1 % 11); 
	  
	if (d1 > 9) d1 = 0; 
	  
	if (dv.charAt(0) != d1) 
	  
	{ 
	  
		cdCpf.focus();
		return false; 
	  
	} 
	  
	  
	d1 *= 2; 
	  
	for (i = 0; i < 9; i++) 
	  
	{ 
	  
		d1 += c.charAt(i)*(11-i); 
	  
	} 
	  
	d1 = 11 - (d1 % 11); 
	  
	if (d1 > 9) d1 = 0; 
	  
	if (dv.charAt(1) != d1) 
	  
	{ 
	  
		cdCpf.focus();
		return false; 
	  
	} 
	  
	return true; 
	  
} 

function txtBoxFormat(objeto, sMask, evtKeyPress) {

    var i, nCount, sValue, fldLen, mskLen,bolMask, sCod, nTecla;

	if(document.all) { // Internet Explorer
	    nTecla = evtKeyPress.keyCode;
	} else if(document.layers) { // Nestcape
	    nTecla = evtKeyPress.which;
	} else {
    	nTecla = evtKeyPress.which;
    	if (nTecla == 8) {
        	return true;
	    }
	}

    sValue = objeto.value;

    // Limpa todos os caracteres de formatação que
    // já estiverem no campo.
    sValue = sValue.toString().replace( "-", "" );
    sValue = sValue.toString().replace( "-", "" );
    sValue = sValue.toString().replace( ".", "" );
    sValue = sValue.toString().replace( ".", "" );
    sValue = sValue.toString().replace( "/", "" );
    sValue = sValue.toString().replace( "/", "" );
    sValue = sValue.toString().replace( ":", "" );
    sValue = sValue.toString().replace( ":", "" );
    sValue = sValue.toString().replace( "(", "" );
    sValue = sValue.toString().replace( "(", "" );
    sValue = sValue.toString().replace( ")", "" );
    sValue = sValue.toString().replace( ")", "" );
    sValue = sValue.toString().replace( " ", "" );
    sValue = sValue.toString().replace( " ", "" );
    fldLen = sValue.length;
    mskLen = sMask.length;

    i = 0;
    nCount = 0;
    sCod = "";
    mskLen = fldLen;

    while (i <= mskLen) {
      bolMask = ((sMask.charAt(i) == "-") || (sMask.charAt(i) == ".") || (sMask.charAt(i) == "/") || (sMask.charAt(i) == ":"))
      bolMask = bolMask || ((sMask.charAt(i) == "(") || (sMask.charAt(i) == ")") || (sMask.charAt(i) == " "))

      if (bolMask) {
        sCod += sMask.charAt(i);
        mskLen++; }
      else {
        sCod += sValue.charAt(nCount);
        nCount++;
      }

      i++;
    }

    objeto.value = sCod;

    if (nTecla != 8) { // backspace
      if (sMask.charAt(i-1) == "9") { // apenas números...
        return ((nTecla > 47) && (nTecla < 58)); }
      else { // qualquer caracter...
        return true;
      }
    }
    else {
      return true;
    }
}
/** Utilização
Data:<input type="text" size="20" onkeypress="return txtBoxFormat(this, '99/99/9999', event);">
RG:<input type="text" size="20" onkeypress="return txtBoxFormat(this, '99.999.999-9', event);">
Telefone:<input type="text" size="20" onkeypress="return txtBoxFormat(this, '(99)9999-9999', event);">
Código:<input type="text" size="20" onkeypress="return txtBoxFormat(this, '99-999', event);">
**/

