/***********************************
 === Músicas =======================
 ***********************************/
 
 var id_aberto; // Id da musica ou album (definido em categoria) abertos
var categoria = "musica";
var autoplay = false; // Se deve fazer play automático da música
var divs; // Prefixo dos divs de informação e de realce
var realce;
var estado = STATE.STOP; // Estado do leitor e musica a tocar
var musica_a_tocar;

var buts = new Buttons();

/**
 === Ouvir Discos ==================
*/

 var ouvirDiscos = {
	/**
	 * Mostra informação da música ou álbum especifico
	 *  id - id da musica 
	 *  cat - categoria a mostrar ("musica"|"album")
	 */
	mostraInfoMusica : function ( id ) { this.mostraInfo ( 'musica', id ); },
	mostraInfoAlbum : function ( id ) { this.mostraInfo ( 'album', id ); },
	mostraInfo : function ( cat, id )
	{
		// Divs de informação
		for ( i = 0 ; i < divs.length ; i ++ )
		{
			$( divs[i] + '_' + categoria + '_' + id_aberto ).style.display = "none";
			$( divs[i] + '_' + cat + '_' + id ).style.display = "block";
		}
		// Realce
		for ( i = 0 ; i < realce.length ; i ++ )
		{
			$( realce[i] + '_' + categoria + '_' + id_aberto ).style.color = "black";
			$( realce[i] + '_' + cat + '_' + id ).style.color = "red";
		}
		categoria = cat;
		id_aberto = id;
		
		// Se autoplay se estiver escolhido,
		// e se não tiver a tocar nada, 
		// então toca a música
		if ( autoplay && cat == 'musica' && estado == STATE.STOP )
			this.ouvirMusica( id );
	},
	ouvirMusica : function ( id )
	{
		ouvirMusica( id, $("ouvir_" + id), buts.TYPE.GRAPHICAL);
	}
}

/**
 === Ouvir Na Berra ==================
*/
var ouvirNaBerra = {
	ouvirMusica : function ( id )
	{
		ouvirMusica( id, $("ouvir_" + id), buts.TYPE.TEXTUAL);
	}
}

/**
 === Ouvir À Borla ==================
*/
var ouvirABorla = {
	ouvirMusica : function ( id )
	{
		ouvirMusica( id, $("ouvir_" + id), buts.TYPE.TEXTUAL);
	}
}

/**
 === Geral ==================
*/

/**
 * Ouvir a música com o id aberto
 *  id_musica - id da musica a ouvir
 *  button - objecto que foi usado para fazer play
 *  graphical - se o botao é grafico ou textual (default = true)
 */
function ouvirMusica( music_id, button, graphical )
{
	// console.debug('Vou ouvir a música: '+music_id+', o botão é: '+button+', e o botão é gráfico?: ' + graphical);
	
	// Se a música anterior estava a tocar então mudar o estado da música anterior para parada
	if ( musica_a_tocar != null ) {
		//window.alert('estava a musica '+musica_a_tocar+' a tocar');
		_flashStop( );
	}
	// Não actualizar "musica_a_tocar", flash actualiza automaticamente
	
	// Se a categoria visual escolhida fôr uma música,
	// então começar a tocar
	if ( categoria == 'musica' )
	{
		_flashPlay(music_id);
	}
	
	// Guarda a informação relativa ao botao
	buts.insert(music_id, null, button, graphical);
}
/**
 * Parar de se ouvir a música
 */
function pararMusica( )
{
	_flashStop( );
}
/** 
 * Define novo estado do leitor
 *  new_state: (Disparado automáticamente pelo flash) - ver STATE
 *   0 - NOTSTARTED
 *   2 - STOP
 *   3 - LOADING
 *   4 - PLAYING
 *  music_id - o id da musica a tocar
 */
function novoEstado( new_state, music_id )
{
	// console.debug('Vou definir a musica '+music_id+' com o estado '+new_state);
	buts.setState( music_id, new_state );

	switch ( new_state ) {
	case STATE.STOP:
		musica_a_tocar = null;
		break;
	case STATE.LOADING:
		musica_a_tocar = music_id;
		break;
	}
	
	estado = new_state;
}

// Mensagens a serem enviadas para o flash
var FLASH = {
	MUSICID: 'fmi',
	COMMAND: "mensagem",
	PLAY: "play",
	STOP: "stop"
};

/**
 * Faz play da musica no leitor de MP3
 */
function _flashPlay( music_id )
{
	if (document.leitor) {
		document.leitor.SetVariable( FLASH.MUSICID, music_id );
		document.leitor.SetVariable( FLASH.COMMAND, FLASH.PLAY );
	}
}

/**
 * Faz stop no leitor de MP3
 */
function _flashStop()
{
	if (document.leitor) {
		document.leitor.SetVariable( FLASH.COMMAND, FLASH.STOP );
	}
}

/***********************************
 === Ver ===========================
 ***********************************/

/**
 * Calcula o proximo indice, tendo em consideração o tamanho
 * de um array (array), qual a posição actual (actual) e 
 * quantos elementos se quer avançar (offset)
 **/
function proximoIndice(array, actual, proximo)
{
	tamanho = array.length;
	if ( actual + proximo >= tamanho)
		ret = tamanho - 1;
	else if ( actual + proximo < 0 )
		ret = 0;
	else
		ret = actual + proximo;
	//console.debug(ret);
	return ret;
}

/**
 * Vai para o pacote com o id indicado
 **/
function irParaPacote( id )
{
	for (var i=0; i<pacotes.length; i++)
	{
		if (pacotes[i].id == parseInt(id))
		{
			irParaNumPacote( i );
		}
	}
}

/**
 * Vai para o pacote nº num_pacote (zero-based)
 **/
function irParaNumPacote( num_pacote )
{
	navegarPacotes( num_pacote - pacote_actual );
}

/**
 * Navega nos pacotes, offset pacotes para a frente (pode
 * ser negativo) - default: 0
 **/
function navegarPacotes( offset )
{
	offset = (offset || 0);
	var img = $('imagem');
	var desc = $('descricao_imagem');

	// Loading image
	img.src = "templates/imagens/loading.gif";
	desc.innerHTML = "";
	// ..
	imagem_actual = 0;
	pacote_actual = proximoIndice(pacotes, pacote_actual, offset);
	if(pacotes[pacote_actual]['imagens'].length) {
		img.src = pacotes[pacote_actual].imagens[imagem_actual].ficheiro;
		desc.innerHTML = decodeURIComponent(pacotes[pacote_actual].imagens[imagem_actual].descricao);
	} else {
		img.src = "";
		desc.innerHTML = "Pacote sem imagens";
	}
	$('nome_pacote').innerHTML = pacotes[pacote_actual].nome;
	definirControlosImagem();
}

/**
 * Navega nas imagens de um pacote, offset pacotes para a
 * frente (pode ser negativo)
 **/ 
function navegarImagens( offset )
{
	var img = $('imagem');
	var desc = $('descricao_imagem');
	var pac = pacotes[pacote_actual];
	
	// Loading image
	img.src = "templates/imagens/loading.gif";
	desc.innerHTML = "";
	// ..
	imagem_anterior = proximoIndice(pac.imagens, imagem_actual, offset - 1);
	imagem_actual = proximoIndice(pac.imagens, imagem_actual, offset);
	imagem_proxima = proximoIndice(pac.imagens, imagem_actual, offset + 1);
	if(pac.imagens.length) {
		img.src = pac.imagens[imagem_actual].ficheiro;
		desc.innerHTML = decodeURIComponent(pac.imagens[imagem_actual].descricao);
		$('imagem_proxima').src = pac.imagens[imagem_proxima].ficheiro;
		$('imagem_anterior').src = pac.imagens[imagem_anterior].ficheiro;
	} else {
		img.src = "";
		desc.innerHTML = "Pacote sem imagens";
	}
	definirControlosImagem();
}

function definirControlosImagem()
{
	if ($('btn_apagar_imagem')) {
		var id = pacotes[pacote_actual]['imagens'][imagem_actual]['id_imagem'];
		$('btn_apagar_imagem').href = "javascript:abreJanela('admin/imagem.php?apagar=" + id + "')";
		$('btn_editar_imagem').href = "javascript:abreJanela('admin/imagem.php?editar=" + id + "')";
	}
}

/***********************************
 === Gerais ========================
 ***********************************/

/**
 * Abre uma nova janela com a URL indicada
 */
var open_window = null;
var window_width = 700;
var window_heigth = 500;
function abreJanela ( url )
{
	if (open_window)
		open_window.close();
	open_window = window.open(url,'','width='+window_width+',height='+window_heigth+',dependent=1,resizable=1,scrollbars=1');
	open_window.focus( );
}
/**
 * Oculta um dado elemento HTML
 */
function ocultar ( elem )
{
	$(elem).style.display = "none";
}
/**
 * Mostra uma confirmação de eliminação
 */
function confirmaEliminar ()
{
	return window.confirm('Tem a certeza que pretende eliminar o registo?');
}