//=============================================================================
// Descrição:	Bibliotecas javascript relacionadas a biblioteca de interface.
// Criação: 	Rodrigo Azevedo - 04/07/2009
//=============================================================================

//# Área: funções

//=============================================================================
// Descrição: 	Criar máscara de preenchimento em caixas de texto. O caractere "#" representa as posições onde entram os caracteres numéricos.
//				Esta função não valida os dados, somente cria as máscaras.
// Criação: 	Rodrigo Azevedo - 04/07/2009
// Parâmetros:	- evento: Objeto que representa o evento do pressionamento de uma tecla, ou seja.
//				- elemento: Objeto que representa a caixa de texto onde a máscara será criada.
//				- mascara: Formato da máscara. Ex: CEP "##.###-###" e Data "##/##/####".
//				- funcaoEnter: Nome da função javascript a ser chamada quando o Enter é pressionado.
// Retorno:		Boleano indicando se o pressionamento da tecla será cancelado.
function sysAplicarMascara(evento, elemento, mascara, funcaoEnter)
{
    //obter valores iniciais para aplicação da máscara
    var tecla = sysObterCaractereTeclado(evento);
    var teclaPermitida = sysVerificarCaractere(tecla, '1234567890');
    
    //se a tecla não for permitida cancelar o pressionamento da mesma.
    if (!teclaPermitida) return false;

    //se a função enter foi pressionada, cancelar o pressionamento da mesma.
    if (sysExecutarFuncaoEnter(evento, funcaoEnter)) return false;

    //iniciar a aplicação da máscara
    var re = new RegExp('[^0-9]', 'g');
    var valorLimpo = elemento.value.replace(re, '') + tecla;
    var valorPosicao = 0;
    var valorFinal = '';
    
    for (var i = 0; i < mascara.length && valorPosicao < valorLimpo.length ; i++)
    {
        if (mascara.substring(i, i + 1) == '#')
        {
            valorFinal += valorLimpo.substring(valorPosicao, valorPosicao + 1);
            valorPosicao++;
        }
        else
        {
            valorFinal += mascara.substring(i, i + 1);
        }
    }
    elemento.value = valorFinal;
    
    return tecla == '';
}

//=============================================================================
// Descrição: 	Executa a função especificada, caso a tecla Enter tenha sido pressionada.
// Criação: 	Rodrigo Azevedo - 04/07/2009
// Parâmetros:	- evento: Objeto javascript que representa os eventos do teclado.
//				- funcaoEnter: Nome da função javascript a ser chamada quando o Enter é pressionado.
// Retorno:		Boleano indicando se a função Enter foi executada.
function sysExecutarFuncaoEnter(evento, funcaoEnter)
{
	if (evento.keyCode == 13 && funcaoEnter != '')
	{
        eval(funcaoEnter + '();');
		return true;
	}
    return false;
}

//=============================================================================
// Descrição: 	Retorna se há alguma checkbox, com o nome especificado, selecionada.
// Criação: 	Rodrigo Azevedo - 04/07/2009
// Parâmetros:	- nome: Nome das checkboxs a serem verificadas.
// Retorno:		Retorna booleano indicando se há ou não checkbox marcada.
function sysExisteCheckBoxMarcado(nome)
{
	var colElemento = document.getElementsByTagName('input');
	for (var i = 0; i < colElemento.length; i++)
		if (colElemento[i].name == nome & colElemento[i].checked) return true;
	return false;
}

//=============================================================================
// Descrição: 	Limitar o tamanho de uma caixa de texto ou text area ao tamanho de caracteres especificado. Utilizado no evento onKeyUp.
// Criação: 	Rodrigo Azevedo - 04/07/2009
// Parâmetros:	- elemento: Objeto que representa a caixa de texto ou text area a ser limitada.
//				- limiteCaractere: Limite de caracteres.
//				- elementoInformativo: Id do elemento que informará quantos caracteres já foram digitados e o limite da caixa.
function sysLimitarQuantidadeCaractere(elemento, limiteCaractere, elementoInformativo)
{
    var excesso = (elemento.value.length > limiteCaractere);
    
    if (excesso) elemento.value = elemento.value.substring(0, limiteCaractere);
    if (elementoInformativo != '' && $$(elementoInformativo))
        $$(elementoInformativo).innerHTML = '(' + elemento.value.length + '/' + limiteCaractere + ')';
        
    return excesso;
}

//=============================================================================
// Descrição: 	Retornar o caractere que representa a tecla pressionada. 
//				Se pressionada alguma tecla especial (F1, End, Setas, Shift, etc.) é retornada uma string vazia.
// Criação: 	Rodrigo Azevedo - 04/07/2009
// Parâmetros:	- evento: Objeto que representa o evento do pressionamento da tecla.
// Retorno:		String com o caractere que representa a tecla pressionada.
function sysObterCaractereTeclado(evento)
{
	if (sysVerificarIE())
	{
	    return evento.keyCode != 13 ? String.fromCharCode(evento.keyCode) : '';
	}
	else
	{
	    return evento.keyCode == 0 ? String.fromCharCode(evento.charCode) : '';
	}
}

//=============================================================================
// Descrição: 	Verificar se o caractere é permitido. Os caracteres Enter, Backspace e Del sempre são permitidas.
// Criação: 	Rodrigo Azevedo - 04/07/2009
// Parâmetros:	- caractere: String a ser verificada.
//				- caracterePermitido: String contendo os caracteres permitidos.
// Retorno:		Boleano indicando se a String é permitida.
function sysVerificarCaractere(caractere, caracterePermitido)
{
    for (var i = 0; i < caractere.length; i++)
    {
        if (caracterePermitido.indexOf(caractere.substring(i, i + 1)) == -1)
        {
            return false;
        }
    }
	return true;
}