/**
 * Realiza a paginação de itens
 */

/**
 * Construtor
 * @param object objeto que controlará a apresentação
 * @param array dados array com os dados que deverão ser paginados
 * @param int nroMaximo número máximo de itens que devem ser exibidos em uma páginas
 */
function Paginador(objeto, dados, nroMaximo)
{
	this.objeto = objeto;
	this.dados = dados ;
	this.nroMaximo = nroMaximo ;
	this.indice = 0;
	this.paginaAtual = 1
	this.itemAtual = 0;
	this.proxima = false;
	this.anterior = false;
}

/**
 * Descobre o número de páginas que os dados ocuparão
 * 
 * @return int número total de páginas
 */
Paginador.prototype.calculaNroPaginas = function()
{
	return (Math.ceil(this.dados.length / this.nroMaximo));
}

Paginador.prototype.calculaNroItens = function()
{
	return this.dados.length;
}

/**
 * Descobre para a página atual qual o índice do último elemento a 
 * ser exibido
 *
 * @return int índice do array de dados
 */
Paginador.prototype.calculaFinal = function()
{
	if(this.indice >= this.dados.length) 
		return (false);										// Se já for a última posição
	var final = this.indice + this.nroMaximo ;				// Calculando a última posição a ser exibida
	if(final > this.dados.length) final = this.dados.length ; 	// Se com a paginação ultrapassarmos do final devemos
																// forçar final ser a última posição
	return(final);
}

/**
 * Exibe a próxima página dentro da lista de páginas.
 * Ele controla a posição atual para que a paginação não ultrapasse o limite
 *
 */
Paginador.prototype.exibeProximaPagina = function()
{
	if(this.paginaAtual < this.calculaNroPaginas())
	{
		this.paginaAtual++;
	}
	this.exibePagina(this.paginaAtual);
}

Paginador.prototype.exibeProximoItem = function()
{
			
	var setaAnterior = document.getElementById('setaAnterior');
	setaAnterior.style.cursor = 'pointer';

	if(this.itemAtual + this.nroMaximo < this.dados.length)
	{
		this.itemAtual++;
	}
	else
	{
		var setaProxima = document.getElementById('setaProxima');
		setaProxima.style.cursor = '';
	}

	this.moveItem();
}

Paginador.prototype.exibeAnteriorItem = function()
{
	var setaProxima = document.getElementById('setaProxima');
	setaProxima.style.cursor = 'pointer';

	if(this.itemAtual > 0)
	{
		this.itemAtual--;
	}
	else
	{
		var setaAnterior = document.getElementById('setaAnterior');
		setaAnterior.style.cursor = '';
	}

	this.moveItem();
}


/**
 * Exibe a página anterior dentro da lista de páginas.
 * Ele controla a posição atual para que a paginação não ultrapasse o limite
 *
 */
Paginador.prototype.exibeAnteriorPagina = function()
{
	if(this.paginaAtual > 1)
	{
		this.paginaAtual--;
	}
	this.exibePagina(this.paginaAtual);
}

/**
 * Exibe uma página específica
 *
 */
Paginador.prototype.exibePagina = function(nroDaPagina)
{
	if(nroDaPagina >0 && nroDaPagina <= this.calculaNroPaginas())
	{
		this.paginaAtual = nroDaPagina;
		this.indice = this.nroMaximo * ( nroDaPagina -1) ;		// Como o índice se inicia com 0, a 2 página faz com que
																// o índice relativo do array seja o 0 + nroMaximo.
																// Ex. Para uma paginação de 10 elementos a segunda página 
																// referencia a posição 10 do array de dados.
		var final = this.calculaFinal();
		if(final==false) return(false);
		this.objeto.exibePagina(this.dados,this.indice,final);		// Mando exibir a página em questão
		this.indice = final ;										// Atualizo o índice para a próxima página
	}
}

Paginador.prototype.moveItem = function()
{
	var final = (this.itemAtual + this.nroMaximo);
	this.objeto.exibePagina(this.dados,this.itemAtual,final);		// Mando exibir a página em questão
}

Paginador.prototype.liga = function(acao)
{
	/**** ATENCAO ******
	O objeto chamado no set interval é definido fora da funcao
	*/

	this.proxima = false;
	this.anterior = false;
	
	if(acao == 'proxima')
	{
		t = window.setInterval('paginador.exibeProximoItem()', 500);
	}
	
	if(acao == 'anterior')
	{
		this.anterior = true;
		t = window.setInterval('paginador.exibeAnteriorItem()', 500);
	}	
}

Paginador.prototype.desliga = function()
{
	clearInterval(t);
}



