$(document).ready(function()
{
	// adiciona efeitos as imagens
	$("#categories-gallery img")
		.mouseenter(function() {
			$(this).fadeTo("fast", 0.5);
		})
		.mouseleave(function() {
			$(this).fadeTo("fast", 1);
		});
		
	// verifica e carrega uma galeria da query string
	if (document.location.href.indexOf("?") > -1)
	{
		var partes = document.location.href.split("?");
		var xml = partes[1];
		
		galeria(xml);
	}
});

var _galeria_fotos = null; // armazena o endereço das fotos
var _galeria_indice = 0; // armazena o índice da primeira foto dos seletores
var _galeria_selecionado = 0; // armazena o índice da foto atualmente selecionada

function galeria(id)
{
	if (id == undefined)
	{
		// se não foi definido um id, a galeria deve ser reiniciada
		galeria_reiniciar();
		return;
	}
	else if (id == -1 || id == 1)
	{
		// para -1 e 1, movimentar as fotos
		galeria_movimenta(id);
		return;
	}
	else
	{
		// para qualquer outro valor, exibir a galeria selecionada
		$("#gallery-loading").show();
		$("#categories-gallery").hide();
		
		// carregando o XML
		var urlXml = "xml/" + id + ".xml";	
		$.ajax({type: "GET", url: urlXml, contentType: "text/xml; charset=utf-8", dataType: "xml", success: galeria_carregar, error: galeria_erro});
	}
}

function foto(id)
{
	// seleciona uma foto, dado o índice do seletor clicado
	var indice = _galeria_indice + id;
	if (indice > _galeria_fotos.length - 1) indice = indice - _galeria_fotos.length;		
	_galeria_selecionado = indice;
	
	galeria_exibe();
}

function galeria_carregar(xml)
{
	var nome = null;	
	
	// identificando os principais elementos do XML
	$(xml).find("galeria").each(function () {
		nome = $(this).find("nome").text();
		_galeria_fotos = $(this).find("fotos").find("foto");
	});	
	
	if (nome == null || fotos.length == 0)
	{
		// se não há nome ou fotos, existe um erro no XML
		erro_galeria();
		return;
	}
	
	$("#gallery-loading").hide();
	$("#gallery-title").append(nome);
	$("#gallery").show()

	$(_galeria_fotos).each(function() {
		var url = $(this).text();
		$("#gallery-image-loader").append("<img src=\"" + url + "\" />");
	});
	
	// removendo seletores não utilizados
	if (_galeria_fotos.length < 3)	$("#selector2").hide();
	if (_galeria_fotos.length < 2)	$("#selector1").hide();
	
	$(".photo-selector")
		.mouseenter(function() {
			$(this).stop(true, true).fadeTo("fast", 0.8);
		})
		.mouseleave(function() {
			$(this).stop(true, true).fadeTo("fast", 1);
		});
	
	_galeria_indice = 0;
	_galeria_selecionado = 0;
	galeria_exibe();
}

function galeria_erro()
{
	alert("Ocorreu um erro ao carregar a galeria. Por favor, tente novamente.");	
	location.reload();
}

function galeria_exibe()
{
	var fotoSelecionada = $(_galeria_fotos[_galeria_selecionado]).text();
	galeria_trocaImagem("#gallery-current-photo", fotoSelecionada);
	
	// define os atributos das miniaturas
	var atributosMini = {width: "100", height: "100"};
	
	var miniatura1 = $(_galeria_fotos[_galeria_indice]).text();
	galeria_trocaImagem("#selector0", miniatura1, atributosMini);
	
	if (_galeria_fotos.length > 1)
	{
		var indice2 = _galeria_indice + 1;		
		// se a miniatura ultrapassar a quantidade de fotos, mostrar a primeira
		if (indice2 > _galeria_fotos.length - 1) indice2 = indice2 - _galeria_fotos.length;		
		
		var miniatura2 = $(_galeria_fotos[indice2]).text();
		galeria_trocaImagem("#selector1", miniatura2, atributosMini);
	}
	
	if (_galeria_fotos.length > 2)
	{
		var indice3 = _galeria_indice + 2;		
		// se a miniatura ultrapassar a quantidade de fotos, mostrar a primeira
		if (indice3 > _galeria_fotos.length - 1) indice3 = indice3 - _galeria_fotos.length;	
	
		var miniatura3 = $(_galeria_fotos[indice3]).text();
		galeria_trocaImagem("#selector2", miniatura3, atributosMini);
	}
}

function galeria_trocaImagem(div, src, atributos)
{
	/*
	 * troca uma imagem contida em uma div por outra, adicionando os atributos
	 * 'div' é um seletor jQuery
	 * 'src' é a url da imagem
	 * 'atributos' é um objeto anônimo com as chaves e os valores das propriedades HTML
	 */
	$(div).empty();
	$(div).append("<img src=\"" + src + "\" />");	

	if (atributos != undefined)
	{
		$(div).find("img").attr(atributos);
	}
}

function galeria_movimenta(direcao)
{
	_galeria_indice += direcao;
	
	// limitar os índices, para não haver números negativos ou que extrapolem a quantidade de fotos
	if (_galeria_indice < 0) _galeria_indice = _galeria_fotos.length - 1;
	if (_galeria_indice == _galeria_fotos.length) _galeria_indice = 0;
	
	galeria_exibe();
}

function galeria_reiniciar()
{
	// retornando a visibilidade aos itens normais
	$("#gallery-loading").hide();
	$("#gallery").hide();
	$("#categories-gallery").show();
	
	// os seletores podem ter sido desabilitados
	$("#selector1").show();
	$("#selector2").show();
	
	// removendo conteúdos antigos
	$("#gallery-title").empty();
	$("#gallery-current-photo").empty();
	$("#selector0").empty();
	$("#selector1").empty();
	$("#selector2").empty();
	
	_galeria_fotos = null;
}