/**
 * Arquivo de funções javascript auxiliares
 */

/**
  * Função usada para verificar se um valor passado é vazio ou não
  *
  * Autor: Bruno Oliveira
  *
  * param: pCampo      Campo que será testado
  *
  * return: true/false   Retorna true se o valor for vazio
  *
  * Exemplo: emBranco(pCampo);
  */
  function emBranco(valor){
      var valorAux = valor;
      while(valorAux.indexOf(" ")>=0){
         valorAux = valorAux.replace(" ","");
      }
      if (valorAux == ""){
         return true;
      } else {
         return false;
      }
  }

/**
 * Verifica se o objewto existe
 */
 function existe( obj ){
	 if( obj == undefined || obj == null ){
		 return false;
	 }
	 return true;
 }
 
 /**
  * Verifica se algum checkBox foi marcado
  */
 function algumMarcado(box) {
   var i=0;
   if (box == null) {
      return false;
   }
   if (box.length>1) {
      for (i=0; i<box.length; i++) {
         if (box[i].checked) {
            return true;
         }
      }
      return false;
   } else {
      return box.checked;
   }
 }
 
/**
 * Função usada para desabilitar os campos de um formulários
 * Autor: Bruno Barros
 *
 * Parametros:
 *
 * nomeForm   Nome do formulário
 *
 * Exemplo: desabilitaForm(nomeForm)
 */
 function desabilitaForm(formulario){
   for(i=0; i < formulario.elements.length; i++){
     formulario.elements[i].disabled = true;
   }
 }

/**
 * Função usada para habilitar os campos de um formulários
 * Autor: Bruno Barros
 *
 * Parametros:
 *
 * nomeForm   Nome do formulário
 *
 * Exemplo: habilitaForm(nomeForm)
 */
 function habilitaForm(formulario){
   for(i=0; i < formulario.elements.length; i++){
     formulario.elements[i].disabled = false;
   }
 }
 
/**
 * Função usada para chamar uma lov
 * Autor: Bruno Barros
 * 
 * Parametros:
 * acao				Ação que o servlet irá executar
 * subAcao			Parâmetro interno do servlet 
 * formulario		Nome do formulario de retorno
 * camposRetorno	Campos que irão receber os valores retornados
 * proximoCampo		Campo que receberá o foco após serem retornados os valores
 * idLov			Id da janela da lov
 *
 * Exemplo: noClick="lov( 'telaCadastroObra','lovGenero','form1','cd_genero;txt_genero','bt_gravar','LOV_GENERO' )"
 */
 function lov(servlet,acao, subAcao, formulario, camposRetorno, idLov){
	 window.open(servlet+"?acao="+acao+"&subAcao="+subAcao+"&formulario="+formulario+"&camposRetorno="+camposRetorno,
                        idLov,"width=500,height=300,top=50,left=50,menubar=no,location=no,scrollbars=no,status=no,resizable");
 }
 
 /**
 * Autor : Bruno Barros
 *
 * Função que é utilizada na validação da data. A data passada deve estar num
 * formato com '/' para separar o dia , mês e o ano.
 *
 * Parâmetro : objeto, campo do objeto que deve ser validado.
 * retorno : retorna TRUE caso a String passada uma Data válida, FALSO caso
 *           contrário e seta o focus no objeto e exibe uma mensagem de alerta.
 *
 * Exemplo : OnBlur="validaData(this)"
 */
function validaData(objeto) {
	var valor = objeto.value;
	var mValores = "312831303130313130313031"
	var retorno = false;
	var lastDate = 0

	if (valor == "") return true;
	if (valor.length < 10) retorno = false;
	if (valor.substr(6, 4) < 1800) {
		alert("O sistema não trabalha com ano inferior a 1800.");
		objeto.focus();
		objeto.select();
		return false;
	}

    dia  = parseInt(valor.substring(0,2),10)		// pega o dia
	mes  = parseInt(valor.substring(3,5),10)  		// pega o mês
	ano  = parseInt(valor.substring(6,10),10)		// pega o ano

	if (mes == 2){
		if (anobissexto(ano)) {
			lastDate = 29
		} else {
			lastDate = 28
		}
	} else {
		lastDate = mValores.substring((mes-1)*2, (mes-1)*2+2)
	}

	if (valor.length < 8){
		retorno = false
	} else if ((valor.substring(2,3) != "/" ) || (valor.substring(5,6) != "/") ) {
		retorno = false
	} else if ( (isNaN(dia)) || (isNaN(mes)) || ( isNaN(ano)) ) {
		retorno = false
	} else if ( (mes > 12) || (mes <= 0) ){
		retorno = false
	} else if ( (dia > lastDate) || (dia <=0) ){
		retorno = false
	} else if (valor.substring(6,10) < 4){
		retorno = false
	} else {
		retorno = true
	}

	if (!retorno){
		objeto.focus();
		objeto.select();
		alert("Data Inválida!");
	}

	return retorno;
}

/**
 * Autor : Bruno Barros
 *
 * Função que é utilizada na formatação de datas, está função acrescenta na data
 * o caracter para separar o dia, mes e ano com '/'.
 *
 * Parâmetro : obj, objeto a ser formatado.
 *
 * Exemplo : OnKeyDown="formataData(this)"
 */
function formataData(objeto) {
	var tecla, tamanho;
	tecla = event.keyCode;

	if (tecla != 8) {
		tamanho = objeto.value.length;
		if (tamanho == 2 || tamanho == 5) {


			objeto.value = objeto.value + "/";
		}
	}

}

/**
 * Função auxiliar da função formatarMoeda
 * usada para retirar caracteres inválidos
 *
 * Autor: Bruno Barros
 *
 * Parametros:
 *
 * valor   Valor a ser filtrado
 * validos Lista de caracteres válidos
 *
 * Uso : limpar(campo.value,"0123456789")
 */
function limpar(valor, validos) {
	// retira caracteres invalidos da string
	var result = "";
	var aux;
	for (var i=0; i < valor.length; i++) {
		aux = validos.indexOf(valor.substring(i, i+1));
		if (aux>=0) {
			result += aux;
		}
	}
	return result;
}

/**
 * Função que formata número tipo moeda usando o evento onKeyDown
 *
 * Autor: Bruno Barros
 *
 * Parametros:
 *
 * campo      Campo a ser formatado
 * tammax     Tamanho máximo do valor digitado
 * teclapress Tecla pressionada pelo usuário
 * decimal	  Quantidade de casas decimais desejadas
 *
 * Uso : formataMoeda(this,10,event,2)
 */
function formataMoeda(campo,tammax,teclapres,decimal) {
	var tecla = teclapres.keyCode;

	//Aceita somente números	
	if ((tecla < 48 || tecla > 57) && tecla != 9 && tecla != 8) {		
	  window.event.keyCode = 0;
    }
	vr = limpar(campo.value,"0123456789");
	tam = vr.length;
	dec=decimal

	if(tam >= tammax && tecla != 9 && tecla != 8){
		window.event.keyCode = 0;
	} else {

		if (tam < tammax && tecla != 8){
			tam = vr.length + 1 ;
		}
		if (tecla == 8 ){
			tam = tam - 1 ;
		}

		if ( tecla == 8 || tecla >= 48 && tecla <= 57 || tecla >= 96 && tecla <= 105 ){

			if ( tam <= dec ){
				campo.value = vr ;
			}

			if ( (tam > dec) && (tam <= 5) ){
				campo.value = vr.substr( 0, tam - 2 ) + "," + vr.substr( tam - dec, tam ) ;
			}
			if ( (tam >= 6) && (tam <= 8) ){
				campo.value = vr.substr( 0, tam - 5 ) + "." + vr.substr( tam - 5, 3 ) + "," + vr.substr( tam - dec, tam ) ;
			}
			if ( (tam >= 9) && (tam <= 11) ){
				campo.value = vr.substr( 0, tam - 8 ) + "." + vr.substr( tam - 8, 3 ) + "." + vr.substr( tam - 5, 3 ) + "," + vr.substr( tam - dec, tam ) ;
			}
			if ( (tam >= 12) && (tam <= 14) ){
				campo.value = vr.substr( 0, tam - 11 ) + "." + vr.substr( tam - 11, 3 ) + "." + vr.substr( tam - 8, 3 ) + "." + vr.substr( tam - 5, 3 ) + "," + vr.substr( tam - dec, tam ) ;
			}
			if ( (tam >= 15) && (tam <= 17) ){
				campo.value = vr.substr( 0, tam - 14 ) + "." + vr.substr( tam - 14, 3 ) + "." + vr.substr( tam - 11, 3 ) + "." + vr.substr( tam - 8, 3 ) + "." + vr.substr( tam - 5, 3 ) + "," + vr.substr( tam - 2, tam ) ;
			}
		}

	}

}

/**
 * Função que formata número tipo moeda para exibição ao usuário
 *
 * Autor: Bruno Barros
 *
 * Parametros:
 *
 * campo      Campo a ser formatado
 * tammax     Tamanho máximo do valor digitado
 * decimal	  Quantidade de casas decimais desejadas
 *
 * Uso : formataMoeda(this,10,event,2)
 */
function exibeMoeda(campo,tammax,decimal) {
	vr = limpar(campo.value,"0123456789");
	tam = vr.length;
	dec=decimal

	if ( tam <= dec ){
		campo.value = vr ;
	}

	if ( (tam > dec) && (tam <= 5) ){
		campo.value = vr.substr( 0, tam - 2 ) + "," + vr.substr( tam - dec, tam ) ;
	}
	if ( (tam >= 6) && (tam <= 8) ){
		campo.value = vr.substr( 0, tam - 5 ) + "." + vr.substr( tam - 5, 3 ) + "," + vr.substr( tam - dec, tam ) ;
	}
	if ( (tam >= 9) && (tam <= 11) ){
		campo.value = vr.substr( 0, tam - 8 ) + "." + vr.substr( tam - 8, 3 ) + "." + vr.substr( tam - 5, 3 ) + "," + vr.substr( tam - dec, tam ) ;
	}
	if ( (tam >= 12) && (tam <= 14) ){
		campo.value = vr.substr( 0, tam - 11 ) + "." + vr.substr( tam - 11, 3 ) + "." + vr.substr( tam - 8, 3 ) + "." + vr.substr( tam - 5, 3 ) + "," + vr.substr( tam - dec, tam ) ;
	}
	if ( (tam >= 15) && (tam <= 17) ){
		campo.value = vr.substr( 0, tam - 14 ) + "." + vr.substr( tam - 14, 3 ) + "." + vr.substr( tam - 11, 3 ) + "." + vr.substr( tam - 8, 3 ) + "." + vr.substr( tam - 5, 3 ) + "," + vr.substr( tam - 2, tam ) ;
	}

	
}

/******************************************************************************
 * Autor : Bruno Barros
 *
 * Essa função somente deve ser usada para limpar os compoentes de um form
 *
 *
 ******************************************************************************/

function limparFormulario(window){
  window.document.body.style.cursor="wait";
  var form = window.document.forms[0];
  for (var i = 0; i < form.elements.length; i++) {
    // Pega o componente Text
    if( form.elements[i].type == "text" || form.elements[i].type == "textarea" )
      form.elements[i].value= "";
    // Pega o componente Select
    if(form.elements[i].type.indexOf("select") != -1)
      form.elements[i].selectedIndex = -1;
    // Pega o componente Radio
    if(form.elements[i].type == "radio")
      form.elements[i].checked = false;
  }
  window.document.body.style.cursor="pointer";
}

/*****************************************
* Exibe ou oculta a div de 'processando' *
*										 *
*****************************************/
  function exibeDivProcessando(exibir){
	  if( exibir ){
		parent.mainFrame.Layer1.style.visibility = 'visible';  
	  } else {
		parent.mainFrame.Layer1.style.visibility = 'hidden';  
		  
	  }
  }

/*** 
* Descri??o.: formata um campo do formul?rio de acordo com a m?scara informada... 
* Par?metros: - objForm (o Objeto Form) - strField (string contendo o nome  do textbox) 
* - sMask (mascara que define o formato que o dado ser? apresentado, usando o algarismo "9" para 
* definir n?meros e o s?mbolo "!" para * qualquer caracter... 
* - evtKeyPress (evento) 
* Uso.......: <input type="textbox" 
* name="xxx"..... 
* onkeypress="return txtBoxFormat(document.rcfDownload, 'str_cep', '99999-999', event);"> 
* Observa??o: As m?scaras podem ser representadas como os exemplos abaixo: 
* CEP -> 99.999-999 
* CPF -> 999.999.999-99 
* CNPJ -> 99.999.999/9999-99 
* Data -> 99/99/9999 
* Tel Resid -> (99) 999-9999 
* Tel Cel -> (99) 9999-9999 
* Processo -> 99.999999999/999-99 
* C/C -> 999999-! 
***/

function txtBoxFormat(objForm, 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;
	}

	sValue = objForm.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( " ", "" );
	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) == "/"));
		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++;
	}

	objForm.value = sCod;	
	
	if (nTecla != 8) { // backspace	
		if (sMask.charAt(i-1) == "9") { // apenas n?meros...
			positionCursorAtEnd(objForm);	
			return ((nTecla > 47) && (nTecla < 58)); // n?meros de 0 a 9
		}else { // qualquer caracter...
			return true;
		}
	}else {
		return true;
	}
}

/**
* Exibe detalhes de um imóvel selecionado
*
*/
 function exibeDetalhes(cod, idioma){
	 window.open("detalhe.php?cod="+cod+"&idioma="+idioma,
                        "TELA_DETALHES","width=500,height=450,top=50,left=50,menubar=no,location=no,scrollbars=yes,status=no,resizable=no");
 }
 function limitaTamanho(obj,tamMax){
	var tam = obj.value.length;
	if( tam >= tamMax ){
	  window.event.keyCode = 0;
      obj.value = obj.value.substring(0,tamMax);
	}
 }

 function soNumeros(campo,teclapres){
	 var tecla = teclapres.keyCode;
 	//Aceita somente números	
	if ((tecla < 48 || tecla > 57) && tecla != 9 && tecla != 8) {		
	  window.event.keyCode = 0;
    }
 }
