// JavaScript Document

function strtrim(str) {
   //Match spaces at beginning and end of text and replace
   //with null strings
   return str.replace(/^\s+/,'').replace(/\s+$/,'');
}

/** 
 * Função fg_bln_validar_obrigatorio
 *
 * Checa se um campo obrigatorio possui algum valor. Caso não possua, avisa o usuário e seta o foco naquele campo.
 * Os parâmetros passados são:
 * vl_obj_campo_formulario               => Campo do formulario para checagem. Ex.: form1.field1
 * vl_str_titulo_campo                          => Nome do campo na interface para o retorno da função. Ex.: "Nome"
 *
 * @access public
 * @author Gianfranco Zucoloto <zucoloto@casetecnologia.com.br>
 * @copyright Copyright&copy; 2003, CASE Tecnologia
 * @param object vl_obj_campo_formulario Campo do formulario html a ser checado. Ex.: form1.field1
 * @param string vl_str_titulo_campo Título do campo na interface para o retorno da função. Ex.: "Nome"
 * @version 0.1
 * @return boolean Retorna true caso o campo esteja preenchido. Senão, um popup o avisará.
 * @todo
 */
function fg_bln_validar_obrigatorio(vl_obj_campo_formulario,vl_str_titulo_campo)
{
  var vg_bln_resultado = true;

  if (strtrim(vl_obj_campo_formulario.value) == "")
  {
    alert('Por favor informe um valor para o campo "' + vl_str_titulo_campo +'".');
    vl_obj_campo_formulario.focus();
    vg_bln_resultado = false;
  }
  
  return vg_bln_resultado;
}

/*
 * funcao fecharAviso
 
 * verifica se ha alguma id com o valor e oculta a mesma
 * autor: Renato Medina
 * data: 11/01/2006
*/
// fecha o alerta da execucao
function fecharAviso()
{
	if(null != $id("acerto"))
		$id("acerto").style.display = 'none';
	else if(null != $id("alerta"))
		$id("alerta").style.display = 'none';
	else if(null != $id("erro"))
		$id("erro").style.display = 'none';
}

/*
 * funcao fg_bln_validar_campos_iguais
 
 * verifica se os campos estao preenchidos e, caso sim, se sao iguais
 * autor: Renato Medina
 * data: 13/01/2006
*/
function fg_bln_validar_campos_iguais(vl_obj_campo_1,vl_obj_campo_2,vl_obj_titulo_campo_1, vl_obj_titulo_campo_2)
{
	var vg_bln_resultado = true;
	
	// verifica antes se os campos estao preenchidos
	if(!fg_bln_validar_obrigatorio(vl_obj_campo_1, vl_obj_titulo_campo_1))
		return false;
	else if(!fg_bln_validar_obrigatorio(vl_obj_campo_2, vl_obj_titulo_campo_2))
		return false;
		
	else {
		if(vl_obj_campo_1.value != vl_obj_campo_2.value) {
			alert('Os valores dos campos "'+vl_obj_titulo_campo_1+'" e "'+vl_obj_titulo_campo_2+'" não correspondem');
			vl_obj_campo_1.value = ""; // limpa o campo 1
			vl_obj_campo_2.value = ""; // limpa o campo 2
			vl_obj_campo_1.focus(); // coloca em foco
			
			vg_bln_resultado = false;
		}
	}
	return vg_bln_resultado; // retorna o resultado
}

/*
 *	Eu num vo explicar nada naum.. se vc num entender isso ai de baixo vai 
 * estudar js q vc num sabe nada.... seu burro
 * POR RENATO MEDINA 09/2006
*/
function fg_bln_validar_acao(e)
{
	if(confirm("Tem certeza que deseja executar essa ação?"))
		return true;
	else
		return cancelEvent(e);
}

/**
 * function mask(_mask, val)
 *
 * _mask = Mascara Exemplo: ##/##/#### ou ###.###.###-##
 * val   = Valor a ser formatado.
 *
 * Formata um valor  para a mascara definida.
 *
 */
function mask(_mask, val, maximo) {
	var i, mki;
	var aux="";
	for(i=mki=0; i<val.length; i++, mki++) {
		if(_mask.charAt(mki)=='' || _mask.charAt(mki)=='#' || _mask.charAt(i)==val.charAt(i)) {
						aux+=val.charAt(i);
		} else {
						aux+=_mask.charAt(mki)+val.charAt(i);
						mki++;
		}
	}
	return aux;
}

/**
 * function fg_bln_format(field, _mask, event)
 *
 * field = Objeto que esta enviando o evendo onKeyPress()
 * _mask = Mascara Exemplo: ##/##/#### ou ###.###.###-##
 * event = Evento a ser observado.
 *
 * Formata um valor para a mascara definida conforma o valor vai sendo digitado.
 *
 */
function fg_bln_formata(e) {
	var field = getSource(e); // campo
	var _mask = field.title; // mascara
	var maximo = parseInt(field.title.length); // tamanho maximo para exibicao 
	var strCheck = '0123456789';
	var rcode = getKeyCode(e);
	var aux = '';
	
	if(rcode<20 || rcode==37 || rcode==39 || rcode==46)
		return true;
	
	if(rcode == 9)
		field.form[(getIndex(field)+1) % field.form.length].focus();

	key=String.fromCharCode(rcode);

	if(strCheck.indexOf(key)==-1)
		return cancelEvent(e);

	if(field.value.length < maximo)
		aux = field.value+key;
	else
		return cancelEvent(e);

	aux = mask(_mask,aux,maximo);
	field.value = aux;

	return cancelEvent(e);
}

/**
 * function fg_bln_formata_cpf_cnpj(field, _mask, event)
 *
 * field = Objeto que esta enviando o evendo onKeyPress()
 * _mask = Mascara Exemplo: ##/##/#### ou ###.###.###-##
 * event = Evento a ser observado.
 *
 * Formata um valor para a mascara definida conforma o valor vai sendo digitado.
 *
 */
function fg_bln_formata_cpf_cnpj(e) {
	var field = getSource(e); // campo
	if(field.value.length <15)
		var _mask = '###.###.###-##'; // mascara
	else if(field.value.length >=15)
		var _mask = '##.###.###/####-##'; // mascara

	// limpa o campo para aplicar novamente a mascara
	while(field.value.indexOf('.') != -1 || field.value.indexOf('-') != -1 || field.value.indexOf('/') != -1) {
		field.value = field.value.replace('.','');
		field.value = field.value.replace('-','');
		field.value = field.value.replace('/','');
	}
	var maximo = 18; // tamanho maximo para exibicao 
	var strCheck = '0123456789';
	var rcode = getKeyCode(e);
	var aux = '';
	// limpa valor para formatar
	field.value.replace('.','');
	field.value.replace('-','');

	if(rcode<20 || rcode==37 || rcode==39)
		return true;
	
	if(rcode == 9)
		field.form[(getIndex(field)+1) % field.form.length].focus();

	key=String.fromCharCode(rcode);

	if(strCheck.indexOf(key)==-1)
		return cancelEvent(e);

	if(field.value.length < maximo)
		aux = field.value+key;
	else
		return cancelEvent(e);

	aux = mask(_mask,aux,maximo);
	field.value = aux;

	return cancelEvent(e);
}

/**
 * Função fg_bln_validar_data
 *
 * Checa se o valor de um campo é uma data escrita no formato DD/MM/AAAA. Caso não seja, avisa o usuário e seta o foco naquele campo.
 * Como opcional, também pode checar se o campo é obrigatório. Verifica dias de acordo com meses e se o ano é bissexto para o dia mes.
 * Os parâmetros passados são:
 * vl_obj_campo_formulario 	=> Campo do formulario para checagem. Ex.: form1.field1
 * vl_str_titulo_campo 		=> Nome do campo na interface para o retorno da função. Ex.: "Data"
 * vl_bln_obrigatorio 		=> Diz se o campo também é obrigatório ou não.
 * bissexto			 		=> Variavel do bissexto, determina o dia de fevereiro. 
 *
 * @access public
 * @author Gianfranco Zucoloto <zucoloto@casetecnologia.com.br>
 * @copyright Copyright&copy; 2003, CASE Tecnologia
 * @param object vl_obj_campo_formulario Campo do formulario html a ser checado. Ex.: form1.field1
 * @param string vl_str_titulo_campo Título do campo na interface para o retorno da função. Ex.: "Data"
 * @param boolean vl_bln_obrigatorio True para campo obrigatorio e False para opcional
 * @param string vg_str_resultado Caso haja erro ele é preenchido e cria mensagem de retorno.
 * @version 0.1
 * @uses function fg_bln_validar_obrigatorio
 * @return boolean Retorna true caso o campo esteja preenchido e válido. Senão, um popup o avisará.
 * @todo
 */
function fg_bln_validar_data(vl_obj_campo_formulario,vl_str_titulo_campo,vl_bln_obrigatorio)
{
	var vg_bln_resultado = true;
	var vg_str_resultado = false;
	var bissexto;
	
	if (vl_bln_obrigatorio)
	{
		if (!fg_bln_validar_obrigatorio(vl_obj_campo_formulario,vl_str_titulo_campo))
			vg_bln_resultado = false;
	}
	
	if (vl_bln_obrigatorio==true && vg_bln_resultado==true)
	{
		var elems = vl_obj_campo_formulario.value;
	
		if (elems.length == 10)
		{
			elems = elems.split('/');
			
			var day = parseInt(elems[0],10);
			var month = parseInt(elems[1],10);
			var year = parseInt(elems[2],10);
			bissexto=(((year%4)==0&&(year%100)!=0)||(year%400)==0)?29:28; // data fevereiro
	
			if(month==4 || month==6 || month==9 || month==11)
			{
				if(day>30)
					vg_str_resultado = 'Data inválida. Verifique os valores digitados.';
			}
			// caso fevereiro
			if(month==02 && day>bissexto)
				vg_str_resultado = 'Data inválida para o mes de fevereiro, digite até 28.';
			
			// caso uma data inválida
			if(month>12 || day>31 || month<1 || day<1)
				vg_str_resultado = 'Data inválida. Verifique os valores digitados.';	
		}
		else
		{
			vg_str_resultado = 'Data inválida. Preencha no formato dd/mm/aaaa.';
		}	  
		
		if (!vl_bln_obrigatorio && vl_obj_campo_formulario.value == "") 
		{ 
			vg_bln_resultado = true;
		}
	
		if (vg_str_resultado)
		{
			alert(vg_str_resultado);
			vl_obj_campo_formulario.focus();
			vg_bln_resultado = false;
		}
		else
			vg_bln_resultado = true;
	}
	
	return vg_bln_resultado;
}

// function soNumsInt
// Função que permite apenas teclas numéricas
// Se o código for menor que 20 é porque deve ser caracteres de controle
// ex.: <ENTER>, <TAB>, <BACKSPACE> portanto devemos permitir
// as teclas numéricas vão de 48 a 57
function soNumsInt(e)
{       
	var field = getSource(e); // campo
	var aux = '';
	
	var rcode = getKeyCode(e);
	key=String.fromCharCode(rcode);

	if (rcode <20 || rcode==37 || rcode==39 || (rcode >47 && rcode<58))
		aux = field.value+key;
	else
		return cancelEvent(e);
} 

// function soNumsInt
// Função que permite apenas teclas numéricas e 
// todos os caracteres que estiverem na lista
// de argumentos.
// Se o código for menor que 20 é porque deve ser caracteres de controle
// ex.: <ENTER>, <TAB>, <BACKSPACE> portanto devemos permitir
// as teclas numéricas vão de 48 a 57
function soNumsFlt(e)
{       
	var field = getSource(e); // campo
	var args = ',.';
	var aux = '';

	var rcode = getKeyCode(e);
	key=String.fromCharCode(rcode);

	if (rcode <20 || rcode==37 || rcode==39 || (rcode >47 && rcode<58) || (args.indexOf(key)>-1 ) )
		aux = field.value+key;
	else
		return cancelEvent(e);
} 

/*
* catado na net por Renato Medina 09/11/2006
* FormatoMoeda(d)
* d - valor a ser convertido
*/
function FormatoMoeda(d) {
	if(typeof(d) == "string" && d == "")
		return "";

	if(d == null)
		return "";
		
    if(typeof(d) == "string" && d.indexOf(',') > 0)
		return d;

    var neg = d < 0.00;
    d = d < 0.0 ? -d : d;
    var c = d + "";
    
    var index = c.indexOf('.');
    var cInt = index >  0 ? c.substring(0, index)  : c; 
    var cDec = index >= 0 ? c.substring(index + 1) : "00";

    var cInt2 = "";
    var count = 0;
    for(i = cInt.length - 1; i >= 0; i--) {
        count++;
        if(count == 4) {
            count = 1;
            cInt2 = cInt.charAt(i) + (i != cInt.length ? "." : "") + cInt2;
        }
        else
            cInt2 = cInt.charAt(i) + cInt2;
    }
    
    if(cDec.length == 1)
        cDec += "0";
    if(cDec.length > 2)
        cDec = cDec.substring(0, 2);

    return (neg ? "-" : "") + cInt2 + "," + cDec;
}

// ABRE UMA POPUP CENTRALIZADA - IE 4+, NS 4+
// openPopup(event, 'about:mozilla', 'POP_NAME', 400, 300, 1, 0 );
function abrePopup(e) {
	
	var key = getSource(e);
	
	// conf padrao para centralizar janela
	iLeft = ( screen.width - 500 ) / 2;
	iTop = ( screen.height - 550 ) / 2;
	
	window.open(key.href, 
	'ajuda', 
	'location=no, toolbar=no, directories=no, status=no, menubar=no, scrollbars=yes, resizable=yes, copyhistory=yes, width=450,height=550,top='+iTop+',left='+iLeft);

	return cancelEvent(e);
}

// gera impressao da pg atal
function fg_bln_imprimir(e) {
	window.print();
	return cancelEvent(e);
}

/**
 * Função fg_bln_seleciona_checkboxs
 *
 * (Des)Marca os campos checkbox, de uma lista
 * O parâmetro a ser passado é:
 * vl_obj_campo_formulario => Caminho do campo a ser marcado
 *
 * O if serve para quando apenas existe uma opção no length e o js considera como um único arquivo
 * caso contrário, execulta o loop no array de arquivos
 * @access public
 * @author Renato Medina <medinadato@hotmail.com>
 * @version 0.1
 * @marca como selecionado ou nao os campos (busca por id).
 * @todo
 */

function fg_bln_seleciona_checkboxs(nome_campo) {

	var vl_obj_campo_formulario = $name(nome_campo);
	
	if(vl_obj_campo_formulario.length==null)
	{	
		if(vl_obj_campo_formulario.checked==true)
			vl_obj_campo_formulario.checked=false;
		else
			vl_obj_campo_formulario.checked=true;
	}
	
	for(var i=0; i<vl_obj_campo_formulario.length; i++)
	{
		if(vl_obj_campo_formulario[i].checked==true)
			vl_obj_campo_formulario[i].checked=false;
		else
			vl_obj_campo_formulario[i].checked=true;
	} 
}

/*
 * funcao g_bln_valida_acao_sobre_checkbox
 * pega o nome do campo em questao (checkbox) e verifica se algum esta selecionado
 * caso haja algum selecionado retorna true
 * caso contrario retorna false
 * @access public
 * @author Renato Medina <medinadato@hotmail.com>
 * @data 10/04/2007
*/
function g_bln_valida_acao_sobre_checkbox(nome_campo) {
	
	var vl_obj_campo_formulario = $name(nome_campo);
	var checado = false;
	 
	if(vl_obj_campo_formulario.length==null) {	
		if(vl_obj_campo_formulario.checked==true)
			checado = true;
	}
	for(var i=0; i<vl_obj_campo_formulario.length; i++) {
		if(vl_obj_campo_formulario[i].checked==true)
			checado = true;
	} 
	if(checado == true)
		return true;
	else
		return false;
}



// inicializacao padrao para todas as pgs
function inicializar_padrao()
{
	// botao fechar
	if(null != $id("fechar"))	addEvent($id("fechar"), "click", fecharAviso);

	// array com botoes excluir
	$l_arr_links = $tags('a');
	for(var i=0; i<$l_arr_links.length ; i++)
	{
		if($l_arr_links[i].title == 'excluir')
			addEvent($l_arr_links[i], "click", fg_bln_validar_acao); // ao clicar excluir pede confirmacao
			
		else if($l_arr_links[i].title == 'Imprimir')	// array com botoes imprimir
			addEvent($l_arr_links[i], "click", fg_bln_imprimir); // ao clicar excluir pede confirmacao
	}
	
	// botao ajuda
	if(null != $id("ajuda")) {
		addEvent($id("ajuda"), "click", abrePopup);
	}
}

addEvent(window, "load", inicializar_padrao); // inicializa os eventos da pag ao ser carregada
