// JavaScript Document

/*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
----------------------------------------------------------------------------------------*/
function aplicacarFormatacaoCampos(objForm){
	var i, numEl;
	numEl = objForm.elements.length; 
		
	for (i=0; i<numEl; i++){
		var tipo, prefixo
		if (objForm.elements[i].name != undefined){
			prefixo = objForm.elements[i].name.substring(0,3);
		}
		else{
			prefixo = "indefinido";
		}
		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;
				//objForm.elements[i].value						= "0,00"
				objForm.elements[i].value						= formatarValor(objForm.elements[i].value);
				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].value						= ""
				objForm.elements[i].value						= formatarData(objForm.elements[i].value);
				objForm.elements[i].maxLength					= 10
			break;
			
			case "alf" :  //campo alfa - só permite a ditação de letras sem acento
				objForm.elements[i].onkeypress	= soAlfa;
			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 (codTeclaKeyDown) {
			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;
}


/* -----------------------------------------------------------------------------------------------
	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;
	}

/* -----------------------------------------------------------------------------------------------
	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;
	}

	
/* -----------------------------------------------------------------------------------------------
	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;
}



