var tamanhoPagina = 20;
var paginaAtual = 1;

function Foto(numero, direcao, anterior, proximo)
{
	this.Numero = numero;
	this.Direcao = direcao;
	this.Anterior = anterior;
	this.Proximo = proximo;

	this.Padding = function()
	{
		if (this.Direcao == "V") return "0px";
		else return "85px";
	}

	this.TemAnterior = function()
	{
		return this.Anterior != "";
	}

	this.TemProximo = function()
	{
		return this.Proximo != null;
	}
}

function cria()
{
	var numeros = document.getElementById("_numeros");
	var thumbs = document.getElementById("_thumbs");
	var nome = document.getElementById("_nome");

	nome.innerHTML = nomeGaleria;
	document.title = nomeGaleria;
	
	var quantos = listaFotos.length;
	for (var i = 0; i < quantos; i++) {
		fotoAtual = listaFotos[i];

		// Cria link
		var lnk = document.createElement("a");
		lnk.appendChild(document.createTextNode(fotoAtual.Numero));
		lnk.foto = fotoAtual;
		lnk.foto.link = lnk;
		lnk.setAttribute("href", "#");
		lnk.onclick = function() { mostraFoto(this.foto); }

		numeros.appendChild(lnk);
		numeros.appendChild(document.createElement("br"));

		// Cria thumb
		if (i < tamanhoPagina)
			thumbs.appendChild(criaThumb(fotoAtual));
	}

	ajustaAnteriorProximoThumbs();
	document.getElementById("_carregando").style.display = "none";
}

function criaThumb(foto)
{
	var thumb = document.createElement("span");
	thumb.className = "thumb";
	thumb.foto = foto;
	thumb.onclick = function() { mostraFoto(this.foto); }

	var img = document.createElement("img");
	img.setAttribute("src", foto.Numero + "t.jpg");
	img.setAttribute("alt", foto.Numero);
	img.setAttribute("title", foto.Numero);

	thumb.appendChild(img);
	return thumb;
}

function trocaPaginaThumb()
{
	var thumbs = document.getElementById("_thumbs");

	var numPaginas = descobreNumPaginas();
	var total = listaFotos.length;
	var inicio = tamanhoPagina * (paginaAtual - 1);
	var fim = ((tamanhoPagina * paginaAtual) >= total) ? total : tamanhoPagina * paginaAtual;

	apaga(thumbs);
	for (var i = inicio; i < fim; i++) {
		var fotoAtual = listaFotos[i];
		thumbs.appendChild(criaThumb(fotoAtual));
	}

	ajustaAnteriorProximoThumbs();
}

function apaga(div)
{
	while (div.firstChild) 
		div.removeChild(div.firstChild);
}

function limpaNegrito()
{
	var numeros = document.getElementById("_numeros");
	links = numeros.getElementsByTagName("a");
	for (i = 0; i < links.length; i++) links[i].className = "";
}

function mostraFoto(foto)
{
	var divThumbs = document.getElementById("_thumbs");
	var divFoto = document.getElementById("_foto");
	var linkThumbs = document.getElementById("_home");
	var img = document.getElementById("_principal");

	limpaNegrito();
	foto.link.className = "ativo";

	divThumbs.style.display = "none";
	divFoto.style.display = "block";
	linkThumbs.style.display = "inline";
	img.setAttribute("alt", foto.Numero);
	img.setAttribute("title", foto.Numero);
	preload(foto);

	ajustaAnteriorProximoFoto(foto);
}

function mostraThumbs()
{
	limpaNegrito();
	ajustaAnteriorProximoThumbs();
	document.getElementById("_thumbs").style.display = "block";
	document.getElementById("_foto").style.display = "none";
	document.getElementById("_home").style.display = "none";
}

function ajustaAnteriorProximoFoto(foto)
{
	lnkAnterior = document.getElementById("_anterior");
	lnkProximo = document.getElementById("_proximo");

	lnkAnterior.style.visibility = foto.TemAnterior() ? "visible" : "hidden";
	lnkProximo.style.visibility = foto.TemProximo() ? "visible" : "hidden";

	if (foto.TemAnterior()) {
		lnkAnterior.foto = procuraFoto(foto.Anterior);
		lnkAnterior.onclick = function() { mostraFoto(this.foto); }
	}

	if (foto.TemProximo()) {
		lnkProximo.foto = procuraFoto(foto.Proximo);
		lnkProximo.onclick = function() { mostraFoto(this.foto); }
	}
}

function ajustaAnteriorProximoThumbs()
{
	lnkAnterior = document.getElementById("_anterior");
	lnkProximo = document.getElementById("_proximo");
	numPaginas = descobreNumPaginas();

	lnkAnterior.style.visibility = (paginaAtual > 1) ? "visible" : "hidden";
	lnkProximo.style.visibility = (paginaAtual < numPaginas) ? "visible" : "hidden";

	if (paginaAtual > 1)  {
		lnkAnterior.onclick = function() { paginaAtual--; trocaPaginaThumb(); }
	}
	if (paginaAtual < numPaginas) {
		lnkProximo.onclick = function() { paginaAtual++; trocaPaginaThumb(); }
	}
}

function descobreNumPaginas()
{
	var numPaginas = (listaFotos.length - (listaFotos.length % tamanhoPagina)) / tamanhoPagina;
	numPaginas += (listaFotos.length % tamanhoPagina == 0) ? 0 : 1;

	return numPaginas;
}

function procuraFoto(numero)
{
	var lenFotos = listaFotos.length;
	var foto = null;
	for (var i = 0; i < lenFotos; i++) {
		if (listaFotos[i].Numero == numero) {
			foto = listaFotos[i];
			break;
		}
	}

	return foto;
}

function preload(foto)
{
	var principal = document.getElementById("_principal")
	var imgSrc = foto.Numero + "g.jpg";
	var loading = document.getElementById("_carregando");

	loading.style.display = "";
	// Posiciona o "Carregando..." no meio da imagem atual.
	/*
	if (principal.style.width && principal.style.height) {
		var loadingWidth = loading.style.width.substring(0, loading.style.width.length - 2);
		var mainHeight = principal.style.height.substring(0, principal.style.height.length - 2);
		var mainWidth = principal.style.width.substring(0, principal.style.width.length - 2);
		loading.style.left = (0.5 * (mainWidth - loadingWidth)) + 'px';
		loading.style.top = (mainHeight / 2) + 'px';
	}
	*/
	setOpacity(principal, 2);

	// preload
	var img = new Image();
	img.onload = function() {
		setOpacity(principal, 10);
		principal.src = imgSrc;
		principal.style.width = img.width + 'px';
		principal.style.height = img.height + 'px';

		// Pausa pra evitar flicker no IE.
		if (navigator.appVersion.indexOf("MSIE") != -1){
			pause(250);
		}

		// alert("Vai desaparecer");
		document.getElementById("_carregando").style.display = "none";
		document.getElementById("_foto").style.paddingTop = foto.Padding();

		return false;
	}

	img.src = imgSrc;
}

function pause(numberMillis) {
	var now = new Date();
	var exitTime = now.getTime() + numberMillis;
	while (true) {
		now = new Date();
		if (now.getTime() > exitTime)
			return;
	}
}

function setOpacity(object, value)
{
	object.style.opacity = value/10;
	object.style.filter = 'alpha(opacity=' + value*10 + ')';
}
