ML	= {
	sortableListaExecucao : null,
	
	playlist : [],
	playlistOrder : [],
	playlistActualIndex	: null,
	uid : String(new Date().getTime()),
	flashMusic : null,
	flashProxy : null,
	initialized : false,
	scopePrefix : String(''),

	Tables	: {
		commonOptions : {search : 'top', paginate : 'bottom', pageCount:6},
		optionsMusicas : {search : 'top', paginate : 'bottom', pageCount:11,allowMultiselect : false},
		generos : null,
		artistas : null,
		albuns : null,
		musicas : null
	},
	
	Msgs : {
		initFaixas : '',
		initAlbuns : '',
		initExecucao :	''
	},
	
	init : function(){
		this.scopePrefix	= PhpVars.scopePrefix;
		this.createTables();
		this.flashProxy		= new FlashProxy(this.uid, ML.scopePrefix+'files/flash/JavaScriptFlashGTW.swf');
		this.flashMusic		= new FlashTag(ML.scopePrefix+'files/flash/ML/ControleMusica3.swf', 340, 70);
		this.flashMusic.setFlashvars('lcid='+this.uid);
		this.flashMusic.write($('flashMusicPlayerHolder'));
		
		Event.observe('listaGenerosHolder','mouseover'	, function(e){Tip.show(e,$('listaGenerosTip'));});
		Event.observe('listaGenerosHolder','mouseout'	, function(e){Tip.hide(e,$('listaGenerosTip'));});
		
		Event.observe('listaArtistasHolder','mouseover'	, function(e){Tip.show(e,$('listaArtistasTip'));});
		Event.observe('listaArtistasHolder','mouseout'	, function(e){Tip.hide(e,$('listaArtistasTip'));});
		
		this.initialized	= true;
	},
	
	createTables : function(){
		this.Tables.generos		= new TableOrdererGeneros('listaGeneros', Object.extend({url: ML.scopePrefix+'aspects/generos.php'},this.Tables.commonOptions) );
		this.Tables.artistas	= new TableOrdererArtistas('listaArtistas', Object.extend({url: ML.scopePrefix+'aspects/artistas.php'},this.Tables.commonOptions) );
		
		$('listaAlbuns').innerHTML		= this.Msgs.initAlbuns;
		$('listaFaixas').innerHTML		= this.Msgs.initFaixas;
		$('listaExecucao').innerHTML	= this.Msgs.initExecucao;
	},
	
	mostrarTodasMusicas : function(){
		new TableOrdererMusicas('todasMusicasHolder', Object.extend({url: ML.scopePrefix+'aspects/musicasTodas.php'},{paginate : 'bottom', search : 'top', pageCount:22, allowMultiselect : false}) );
	},
	
	changeGenero : function(genero){
		this.Tables.artistas		= new TableOrdererArtistas('listaArtistas',Object.extend({url: ML.scopePrefix+'aspects/artistas.php?genero='+genero.nome},this.Tables.commonOptions));
		$('listaAlbuns').innerHTML	= this.Msgs.initAlbuns;
		$('listaFaixas').innerHTML	= this.Msgs.initFaixas;
	},
	
	changeArtista : function(artista){
		var artistName			= encodeURIComponent(artista.nome);
		this.Tables.albuns		= new TableOrdererAlbuns('listaAlbuns',Object.extend({url: ML.scopePrefix+'aspects/albuns.php?genero='+artista.genero+'&artista='+artistName},this.Tables.commonOptions));
		$('listaFaixas').innerHTML	= this.Msgs.initFaixas;
	},
	
	changeAlbum : function(album){
		var albumName			= encodeURIComponent(album.nome);
		var artistName			= encodeURIComponent(this.Tables.artistas.selected.nome);
		Element.hide('sugestoes');
		this.Tables.musicas		= new TableOrdererMusicas('listaFaixas', Object.extend({url: ML.scopePrefix+'aspects/musicas.php?genero='+this.Tables.generos.selected.nome+'&artista='+artistName+'&album='+albumName},
			this.Tables.optionsMusicas) );
	},
	
	clickMusica : function(musica){
		if(!this.initialized){return;}
		
//		if(this.playlist.length >=9 ){
//			// @TODO
//			return;
//		}
		
		this.playlist.push(musica);
		this.playlistOrder.push(this.playlistOrder.length);
		this.makeListaExecucao();
		
		if(this.playlist.length > 0){
			Element.show('mlMainOptions');
			
			if(this.playlist.length == 1){
				this.Controle.play(0);
			}
		}
	},
	
	removeMusica : function(indice){
		var playlistTmp			= [];
		var playlistOrderTmp	= [];
		
		ML.playlistOrder.each(function(s,i){
			if(i == indice) return;
			
			indiceNovo	= i < indice ? i : i-1;
			playlistOrderTmp.push(indiceNovo);
			playlistTmp.push(ML.playlist[i]);
		});
		
		if(ML.playlistActualIndex > indice){
			ML.playlistActualIndex--;
		}
		
		ML.playlist			= playlistTmp;
		ML.playlistOrder	= playlistOrderTmp;
				
		if(ML.playlist.length == 0){
			Element.hide('mlMainOptions');
		}

		ML.makeListaExecucao();
	},
	
	marcaMusica : function(indice){
		ML.desmarcaMusicas();
		Element.addClassName($('a_'+indice), 'playing');
	},
	
	desmarcaMusicas : function(){
		ML.playlistOrder.each(function(s,i){
			if(!$('a_'+i))	return;
			Element.removeClassName($('a_'+i), 'playing');
		});
	},
	
	makeListaExecucao : function(){
		var playlistTmp					= [];
		var playlistOrderTmp			= [];
		$('listaExecucao').innerHTML	= '';
		
		this.playlistOrder.each(function(s,i){
			if(!ML.playlist[s])	return;
			
			playlistTmp.push(ML.playlist[s]);
			playlistOrderTmp.push(i);
			
			$('listaExecucao').innerHTML	+= '<li id="a_'+i+'" class="'+(i == ML.playlistActualIndex ? 'playing' : '')+'"><div class="title"><strong>'+ML.playlist[s].nome+'</strong><br />'+ML.playlist[s].artista+'</div>'+
			   '     <div class="icons">'+
			   '         <a alt="play" href="javascript:ML.Controle.play('+i+');"><img src="'+ML.scopePrefix+'files/images/icons/play.jpg" alt="play" class="play" /></a>'+
			   '         <a alt="excluir" href="javascript:ML.removeMusica('+i+');"><img src="'+ML.scopePrefix+'files/images/icons/remove.jpg" alt="excluir" class="excluir" /></a>'+
			   '    </div>'+
			   '</li>';
		});
		
		ML.playlist				= playlistTmp;
		ML.playlistOrder		= playlistOrderTmp;
	},
	
	Controle : {
		isPaused : false,
	
		play : function(indice){
			var info	= ML.playlist[ML.playlistOrder[indice]];
			
			ML.Controle.isPaused	= false;
			if(info){
				ML.playlistActualIndex	= indice;
				ML.flashProxy.call('_play',info.genero, encodeURIComponent(info.artista), encodeURIComponent(info.album), info.faixa, encodeURIComponent(info.nome), ML.playlistOrder[indice]);
			}
			else{
				ML.flashProxy.call('_play');
			}
		},
		
		next : function(){
			if(ML.playlist[ML.playlistActualIndex+1]){
				ML.Controle.play(ML.playlistActualIndex+1);
			}
			else if(ML.playlist[0]){
				ML.Controle.play(0);
			}
		},
		
		prev : function(){
			if(ML.playlist[ML.playlistActualIndex-1]){
				ML.Controle.play(ML.playlistActualIndex-1);
			}
			else if(ML.playlist[ML.playlist.length-1]){
				ML.Controle.play(ML.playlist.length-1);
			}
		},
		
		pause : function(){
			if(ML.Controle.isPaused){
				ML.Controle.play();
				return;
			};
			ML.Controle.isPaused	= true;
			ML.flashProxy.call('_pause');
		},
		
		stop : function(){
			ML.desmarcaMusicas();
			ML.flashProxy.call('_stop');
			ML.playlistActualIndex	= null;
		}
	}
}

Navegacao = {
	inicio : function(){
		Element.hide('ultimasNovidades');
		Element.hide('pesquisa');
	},
	

	novidades : function(){
		Element.show('ultimasNovidades');
		Element.hide('pesquisa');
	},
	

	pesquisar : function(){
		Element.hide('ultimasNovidades');
		Element.show('pesquisa');
	}
}


var Tip = {
	show : function(e,target){
		Element.show(target);
		target.style.left	= (Event.pointerX(e))+'px';
		target.style.top	= (Event.pointerY(e)+20)+'px';
	},
	
	hide : function(e,target){
		Element.hide(target);
	}
}
