// Esse array global controla o estado de cada letra no menu.
// Cada item do array contem um objeto do tipo MenuItem, que guarda se o item 
// de menu está Aberto/Fechado e se já foi ou não preenchido.
var arrayLetras = new Array();

// Classe MenuItem.
function MenuItem(aberto, preenchido) {
	this.mbAberto = aberto;
	this.mbPreenchido = preenchido;
}

// Função chamada no OnLoad do <body>. Serve pra inicializar o array
// de letras com seus estados inicias, ou seja, todos estão fechados
// e tb nunca foram preenchidos.
function CriaMenuItens() {
	var a;
	
	// Vou da 'A' a 'Z'
	for (var i = 48; i <= 90; i++) {

		// Crio novo MenuItem
		var menuItem = new MenuItem(false, false);

		a = String.fromCharCode(i);
		arrayLetras[a] = menuItem;
	}
}

// Funcao q mostra ou esconde o item do menu.
// Se o item de menu ainda nao foi preenchido nenhuma vez, irá
// chamar um Ajax pra preencher SOMENTE UMA VEZ. ;)
function Toggle(letra) {

	
	// Se tava aberto, fecho a bagaça
	if (EstaAberta(letra)) {                
		FechaMenu(letra);
	}
	else {

		// Tava fechado, então abro a bagaça
		AbreMenu(letra);

		// Verifico se o menu já foi preenchido com os artistas
		if (!EstaPreenchido(letra)) {

			// Mostra a DIV de carregamento ... 
 	        divArtista = $('div_letra_' + letra);
			divArtista.innerHTML = "<div align='center'><br/><img src='layout/ajax-loader.gif'/><br/><br/></div>";			

			// Chamo o ajax maldito
			var url = 'principal/get_lista_artistas.php';
			var pars = 'LETRA_ART=' + letra;
			pars += '&sid=' + Math.random();					

			// Requisição Ajax, usando a biblioteca prototype.
			var myAjax = new Ajax.Request(url, { method: 'get', parameters: pars, onComplete: MostraArtistas });
		}
		else {
			// Ja tava preenchido, nao faço nada...
			//letraTemp = null;
		}                
	}
}

// Funcao de callback que recebe o resultado da chamada do Ajax
function MostraArtistas(req) {

	// Pego o XML de retorno
	var obj = req.responseXML;					

	// Pego de dentro do XML a letra a qual este se refere
	var letra = pegaValor(obj.getElementsByTagName("header_letra")[0]);					

	// Pega a div do menu certinha...
	var divArtista = $('div_letra_' + letra);

	// Pega todos os artistas
	var artistasArray = obj.getElementsByTagName("artista");

	if (artistasArray.length == 0) {

		str  = "<li>nenhum item encontrado...</li>\n";

	}            
	else {
		
		// Variavel q irá conter todos os itens <li>
		var str = '';
		
		// Percorre o arquivo XML para extrair os dados
		for (var i = 0; i < artistasArray.length; i++) {
			
			var item = artistasArray[i];

			// Pego a porra da descrição do artista
			var desc = pegaValor(item.getElementsByTagName("descricao")[0]);

			// Crio um item <li> pro artista e concateno na string...
			str += "<li><a href='album/lista_album.php?ARTISTA="+desc+"' target='frm_post'>" + desc + "</a></li>\n";
			
		}

		// Por fim, entoxo os <li> dentro da DIV...
		divArtista.innerHTML = str;

		// ... e marco o item como preenchido, pra não ter perigo de preencher
		// mais de uma vez (desnecessário)
		SetPreenchido(letra);
	}
}

// Verifica se o item de menu tá aberto
function EstaAberta(letra) {
	return (arrayLetras[letra].mbAberto == true);
}

// Verifica se o item de menu tá preenchido
function EstaPreenchido(letra) {
	return (arrayLetras[letra].mbPreenchido == true);
}

// Marca um item de menu como preenchido
function SetPreenchido(letra) {
	arrayLetras[letra].mbPreenchido = true;
}

// Fecha um item de menu tanto visualmente (DIV) quanto logicamente
// no array de controle
function FechaMenu(letra) {
	var divLetra = document.getElementById('div_letra_' + letra);
	divLetra.style.display = 'none';
	arrayLetras[letra].mbAberto = false;
}

// Abre um item de menu tanto visualmente (DIV) quanto logicamente
// no array de controle
function AbreMenu(letra) {
	var divLetra = document.getElementById('div_letra_' + letra);
	divLetra.style.display = '';
	arrayLetras[letra].mbAberto = true;
}

// Pega um item do XML
function pegaValor(no) {
	if (no.childNodes.length > 0) {
		return no.firstChild.nodeValue; //Tem filho
	}
	else {
		try {
			return no.nodeValue;
		}
		catch (e) {
			return "";
		}
	}
}