/**
 * Project: Helpdesk
 * File: misc.js
 *
 * Funções de miscelânea.
 *
 * @author Frederico Galvão <fredgalvao@gmail.com>
 * @Last-Modified: 09/10/2008 09:15
 * @Version: 2.1
 */





/**
 * Inclusão de protótipos de funções clássicas em classes de objetos.
 * -------------------------------------------------------------------
 */


/**
 * Adiciona método lpad() a classe String.
 * Preenche a String à esquerda com o caractere 
 * fornecido, até que ela atinja o tamanho especificado.
 *
 * @param  int pSize:      número de caracteres a serem preenchidos
 * @param  char pCharPad:  caracter de preenchimento
 * @return string
 */
String.prototype.lpad = function( pSize, pCharPad )
{
	var str = this;
	var dif = pSize - str.length;
	var ch  = String( pCharPad ).charAt(0);

	for ( ; dif > 0; dif-- ) {
		str = ch + str;
	}

	return (str);
} //String.lpad


/**
 * Adiciona método trim() à classe String.
 * Elimina brancos no início e fim da String.
 *
 * @return string
 */
String.prototype.trim = function() {
	return this.replace(/^\s*/, '').replace(/\s*$/, '');
} //String.trim


/**
 * Adiciona método search() à classe Array.
 * Procura por um valor em um array e retorna 
 * sua chave correspondente caso seja encontrado
 * e FALSE em caso contrário.
 *
 * @param   mixed valor: valor a ser procurado
 * @return  mixed
 */
Array.prototype.search = function( valor )
{
	var elemtArr = this;

	for ( var i = 0; i < elemtArr.length; i++ ) {
		if ( elemtArr[i] == valor ) {
			return i;
		}
	}

	return -1;
} //Array.search










/**
 * Funções para janelas
 * ----------------------
 */


/**
 * Abre uma janela parametrizada no centro da tela.
 *
 * @param  string mypage:  arquivo a ser aberto na janela
 * @param  string myname:  nome da janela
 * @param  int largura:    seta o atributo width da janela (valor em pixel)
 * @param  int altura:     seta o atributo da janela (valor em pixel)
 * @param  bool local:     seta o atributo location da janela
 * @param  bool menu:      seta o atributo menubar da janela
 * @param  bool resize:    seta o atributo resizable da janela
 * @param  bool scroll:    seta o atributo scrollbars da janela
 * @param  bool stat:      seta o atributo statusbar da janela
 * @param  bool tool:      seta o atributo toolbar da janela
 */
function PopUp( mypage, myname, largura, altura, local, menu, resize, scroll, stat, tool )
{
	var prop = '';

	var winl = ( screen.width - largura ) / 2;
	var wint = ( screen.height - altura ) / 2;

	prop  = 'height=' + altura + ', width=' + largura + ', top=' + wint + ', left=' + winl;
	prop += ', scrollbars=' + scroll + ', resizable=' + resize + ', location=' + local;
	prop += ', menubar=' + menu + ', statusbar=' + stat + ', toolbar=' + tool;

	if ( !window.onerror ) {
		win = window.open( mypage, myname, prop );
		win.window.focus();
	}
}


/**
 * Fecha janela no tempo especificado.
 *
 * @param  int sec:  tempo em segundos
 */
function winAutoClose( sec )
{
	var time = sec * 1000;

	setTimeout( 'window.close();' , time);
}










/**
 * DHTML
 * -------
 */


/**
 * Apresenta/Oculta o layer.
 *
 * @param  string layerId:  identificador do layer
 * @param  bool show:       flag que indica se o layer deve ou não ser apresentado.
 */
function setLayerVisibility ( layerId, show )
{
	var layerObj = document.getElementById( layerId );

	layerObj.style.visibility = ( show ) ? 'visible' : 'hidden';
}


/**
 * Seta o texto do layer. dos elementos do formulário.
 *
 * @param  string layerId:  identificador do layer
 * @param  string msg:      mensagem a ser apresentada.
 */
function setLayerTxt ( layerId, msg )
{
	var layerObj = document.getElementById( layerId );

	for ( var i = 0; i < layerObj.childNodes.length; i++ ) {
		layerObj.removeChild ( layerObj.childNodes[i] );
	}

	layerObj.innerHTML = msg;
}
