/**
 * 	@author:
 *	2010 Eric Mantoani <eu@eric.com.br>
 * 	
 * 	@description:
 * 	Esta classe permite criar e manipular playlists baseadas no plugin jquery.jplayer.js 
 * 	// www.happyworm.com/jquery/jplayer
 * 	
 * 	Ela opera junto com a classe Player.class.js
 * 	
 * 	Ao contrário do que fazia o jPlayer inicialmente, tornei "Playlist" e "Player" independentes.
 * 	O principal objetivo é poder manipular a playlist (objeto desta classe) sem precisar reiniciar o player.
 * 	Quando ocorre algum evento no player que depende da playlist (por exemplo, ao terminar uma música e ir 
 * 	pra próxima), esta classe lê o DOM pra saber como a playlist está naquele exato momento, e pega a próxima
 * 	faixa.
 * 
 * 	É importante lembrar que essas adaptações foram feitas pro projeto Rádio Cultura Brasil, na plataforma
 * 	CMS Cultura (www.tvcultura.com.br). Portanto, estou usando de elementos concretos desse framework, 
 *  como media_id para selecionar faixas, em vez de iteração automática.
 * 	
 * 	Se tiver alguma dúvida, me pergunte.
 *
 * 	Date: 02/02/2010
 * 	Revision: 0.1
 */

/*
		Preciso fazer uma coisa ficar independente da outra
	OK	1. Iniciar o Player
	OK	2. Iniciar a Playlist
	OK	3. Tocar a primeira faixa da playlist
	OK	- funcionar botão next
	OK	- funcionar botão prev
	OK	4. Manipular a playlist com o player tocando na moral
		- addItem
			:: falta fazer
			- a função deve receber um array semelhante ao var myPlaylist e dar um append
			- if(ajax != null){ requisição ajax que devolve array, com 1 ou + }
	OK	- removeItem
	OK	5. Ao final da faixa, ir pra próxima da playlist, no estado em que estiver a playlist após a
		manipulação feita pelo usuário 
*/

Playlist = function(){
	
	// public vars
	var nowPlaying;
	var realPlaylistMediaId = new Array();
	var realPlaylistMp3 = new Array();
	
	
	// sets
	var _setNowPlaying = function(media_id){
		nowPlaying = media_id;
	}
	this.setNowPlaying = _setNowPlaying;
	
	var _setRealPlaylistMediaId = function(resultArray){
		realPlaylistMediaId = resultArray;
	}
	this.setRealPlaylistMediaId = _setRealPlaylistMediaId;
	
	var _setRealPlaylistMp3 = function(resultArray){
		realPlaylistMp3 = resultArray;
	}
	this.setRealPlaylistMp3 = _setRealPlaylistMp3;
	
	
	
	// gets
	var _getNowPlaying = function(){
		return nowPlaying;
	}
	this.getNowPlaying = _getNowPlaying;
	
	var _getRealPlaylistMediaId = function(){
		return realPlaylistMediaId;
	}
	this.getRealPlaylistMediaId = _getRealPlaylistMediaId;
	
	var _getRealPlaylistMp3 = function(){
		return realPlaylistMp3;
	}
	this.getRealPlaylistMp3 = _getRealPlaylistMp3;
	
	
	
	// playlist
	var _setPlaylist = function(myPlaylist){
		for(i=0; i<myPlaylist.length; i++){
			$('#culturaPlaylist').append(
				'<ul id="media_id_'+myPlaylist[i].media_id+'"><input type="hidden" value="'+myPlaylist[i].media_id+'" /><input type="hidden" value="'+myPlaylist[i].mp3+'" /><li class="nome-musica" onclick="Player.playNow('+myPlaylist[i].media_id+', \''+myPlaylist[i].mp3+'\')">'+myPlaylist[i].name+'</li><li class="fechar-musica" onclick="Playlist.removeItem('+myPlaylist[i].media_id+')"> [x] </li></ul><div class="divisor"></div>'
			);
		}
	}
	this.setPlaylist = _setPlaylist;
	
	var _cleanPlaylist = function(){
		$('#culturaPlaylist').html('');
	}
	this.cleanPlaylist = _cleanPlaylist;
	
	
	// local functions
	function getDOMRealPlaylist(){
		
		// array de HTMLULListElement
		var DOMRealPlaylist = $('ul[id^="media_id_"]');
		
		var total = DOMRealPlaylist.length;
		var tempRealPlaylistMediaId = new Array();
		var tempRealPlaylistMp3 = new Array();
		
		for(i=0; i<total; i++){
			var realPlaylistChildNodes = $(DOMRealPlaylist[i].childNodes);
			tempRealPlaylistMediaId[i] = $(realPlaylistChildNodes[0]).val();
			tempRealPlaylistMp3[i] = $(realPlaylistChildNodes[1]).val();
		}
		
		_setRealPlaylistMediaId(tempRealPlaylistMediaId);
		_setRealPlaylistMp3(tempRealPlaylistMp3); 
	}
	
	
	// public functions
	var _removeItem = function(media_id){
		$('#media_id_'+media_id).remove();
	}
	this.removeItem = _removeItem;
	
	
	
	var _playPrev = function(){
		getDOMRealPlaylist();
		realPlaylistMediaId = _getRealPlaylistMediaId();
		realPlaylistMp3 = _getRealPlaylistMp3();
		
		var total = realPlaylistMediaId.length;
		
		for(i=0; i<realPlaylistMediaId.length; i++){
			if(realPlaylistMediaId[i] == _getNowPlaying()){
				if(i == 0){
					// é o primeiro, tocar o último
					Player.playNow(realPlaylistMediaId[total-1], realPlaylistMp3[total-1]);
				} else {
					// tocar o anterior
					Player.playNow(realPlaylistMediaId[i-1], realPlaylistMp3[i-1]);
				}
				return true;
			}
		}
		
	}
	this.playPrev = _playPrev;
	
	
	
	var _playNext = function(){
		getDOMRealPlaylist();
		realPlaylistMediaId = _getRealPlaylistMediaId();
		realPlaylistMp3 = _getRealPlaylistMp3();
		
		var total = realPlaylistMediaId.length;
		
		for(i=0; i<realPlaylistMediaId.length; i++){
			if(realPlaylistMediaId[i] == _getNowPlaying()){
				if(i == total-1){
					// é o último, tocar o primeiro
					Player.playNow(realPlaylistMediaId[0], realPlaylistMp3[0]);
				} else {
					// tocar o próximo
					Player.playNow(realPlaylistMediaId[i+1], realPlaylistMp3[i+1]);
				}
				return true;
			}
		}
		
	}
	this.playNext = _playNext;
	
	var _culturaPlaylistToggle = function(){
		$('#culturaPlaylist').toggle();
	}
	this.culturaPlaylistToggle = _culturaPlaylistToggle;
	
	
	/** Go Horse:
	 * 	Estou copiando a função de PlaylistControle.class.js na moral e vamos ver no que é que dá; 
	 * 
	 */
	
	var _add = function(content_id, tipo, markunStart){ // homenagem ao chefe que ora se despede
		$('#culturaPlaylist').show();
		
		switch(tipo){
			case "mp3":
				tempUrl = URL+'webservice.php?file=getPlaylistByContentId&module=section&folder=controle-remoto&content='+content_id+'&site=controle';
				break;
			
			case "youtube":
				tempUrl = URL+'webservice.php?file=getVideoByContentId&module=section&folder=controle-remoto&content='+content_id;
				break;
		}
		
		$.ajax({
			url: tempUrl,
			data: '',
			success: function(response){
				var myPlaylist = eval(response);
				_setPlaylist(myPlaylist, tipo);
				if(markunStart != null){
					_playNow(myPlaylist[0].tipo, myPlaylist[0].id, myPlaylist[0].size, myPlaylist[0].name);
					
					//myPlaylist[0].id, 
					Player.playNow(realPlaylistMediaId[0], realPlaylistMp3[0]);
				}
			}
		});
	}
	this.add = _add;
}

