/**
 * 	@author:
 *	2010 Eric Mantoani <eu@eric.com.br>
 * 	
 * 	@description:
 * 	mó fita, juro que documento isso no dia seguinte da inauguração :D // que mentira!
 * 	
 *
 * 	Date: 02/02/2010
 * 	Revision: 0.1
 */



Playlist = function(){
	
	// public vars
	var nowPlayingId;
	var nowPlayingTipo;
	var realPlaylistId = new Array();
	var realPlaylistTipo = new Array();
	var realPlaylistSize = new Array();
	var realPlaylistNome = new Array();
	
	
	// sets
	var _setNowPlayingId = function(id){
		nowPlayingId = id;
	}
	this.setNowPlayingId = _setNowPlayingId;
	
	var _setNowPlayingTipo = function(tipo){
		nowPlayingTipo = tipo;
	}
	this.setNowPlayingTipo = _setNowPlayingTipo;
	
	var _setRealPlaylistId = function(resultArray){
		realPlaylistId = resultArray;
	}
	this.setRealPlaylistId = _setRealPlaylistId;
	
	var _setRealPlaylistTipo = function(resultArray){
		realPlaylistTipo = resultArray;
	}
	this.setRealPlaylistTipo = _setRealPlaylistTipo;
	
	var _setRealPlaylistSize = function(resultArray){
		realPlaylistSize = resultArray;
	}
	this.setRealPlaylistSize = _setRealPlaylistSize;
	
	var _setRealPlaylistNome = function(resultArray){
		realPlaylistNome = resultArray;
	}
	this.setRealPlaylistNome = _setRealPlaylistNome;
	
	
	// gets
	var _getNowPlayingId = function(){
		return nowPlayingId;
	}
	this.getNowPlaying = _getNowPlayingId;
	
	var _getNowPlayingTipo = function(){
		return nowPlayingTipo;
	}
	this.getNowPlayingTipo = _getNowPlayingTipo;
	
	var _getRealPlaylistId = function(){
		return realPlaylistId;
	}
	this.getRealPlaylistId = _getRealPlaylistId;
	
	var _getRealPlaylistTipo = function(){
		return realPlaylistTipo;
	}
	this.getRealPlaylistTipo = _getRealPlaylistTipo;
	
	var _getRealPlaylistSize = function(){
		return realPlaylistSize;
	}
	this.getRealPlaylistSize = _getRealPlaylistSize;
	
	var _getRealPlaylistNome = function(){
		return realPlaylistNome;
	}
	this.getRealPlaylistNome = _getRealPlaylistNome;
	
	// playlist
	/**
	 * @param {Object} myPlaylist :: itens a serem adicionados na "lista do cara"
	 * @param string tipo :: cada vez que manda é um tipo -> mp3, streamingAudio, streamingVideo, youtube, video (flv, no futuro)
	 */
	var _setPlaylist = function(myPlaylist, tipo){
		
		switch(tipo){
			case "mp3":
				for(i=0; i<myPlaylist.length; i++){
					$('#culturaPlaylist').append(
						'<ul id="media_id_mp3_'+myPlaylist[i].id+'">'
						+
						'<input type="hidden" value="mp3" />'
						+
						'<input type="hidden" value="'+myPlaylist[i].id+'" />'
						+
						'<input type="hidden" value="'+myPlaylist[i].size+'" />'
						+
						'<input type="hidden" value="'+myPlaylist[i].name+'" />'
						+
						'<li class="nome-musica" onclick="Playlist.playNow(\'mp3\', '+myPlaylist[i].id+', '+myPlaylist[i].size+', \''+myPlaylist[i].name+'\')">'+myPlaylist[i].name+'</li>'
						+
						'<li class="fechar-musica" onclick="removeItem(\'media_id_mp3_'+myPlaylist[i].id+'\')"> [x] </li>'
						+
						'</ul><div class="divisor" id="divisor_media_id_mp3_'+myPlaylist[i].id+'"></div>'
					);
				}
				
				break;
				
			
			case "youtube":
				$('#culturaPlaylist').append(
					'<ul id="media_id_youtube_'+myPlaylist[0].id+'">'
					+
					'<input type="hidden" value="youtube" />'
					+
					'<input type="hidden" value="'+myPlaylist[0].id+'" />'
					+
					'<input type="hidden" value="'+myPlaylist[0].size+'" />'
					+
					'<input type="hidden" value="'+myPlaylist[0].name+'" />'
					+
					'<li class="nome-musica" onclick="Playlist.playNow(\'youtube\', \''+myPlaylist[0].id+'\', '+myPlaylist[0].size+', \''+myPlaylist[0].name+'\')">'+myPlaylist[0].name+'</li>'
					+
					'<li class="fechar-musica" onclick="removeItem(\'media_id_youtube_'+myPlaylist[0].id+'\')"> [x] </li>'
					+
					'</ul><div class="divisor" id="divisor_media_id_youtube_'+myPlaylist[0].id+'"></div>'
				);
				
				break;
				
		}
		
	}
	this.setPlaylist = _setPlaylist;
	
	var _cleanPlaylist = function(){
		$('#culturaPlaylist').html('');
	}
	this.cleanPlaylist = _cleanPlaylist;
	
	/*
	var _removeItem = function(media_id){
		$('#media_id_'+media_id).remove();
	}
	this.removeItem = _removeItem;
	*/
	
	// local functions
	function getDOMRealPlaylist(){
		
		// array de HTMLULListElement
		var DOMRealPlaylist = $('ul[id^="media_id_"]');
		
		var total = DOMRealPlaylist.length;
		var tempRealPlaylistTipo = new Array();
		var tempRealPlaylistId = new Array();
		var tempRealPlaylistSize = new Array();
		var tempRealPlaylistNome = new Array();
		
		for(i=0; i<total; i++){
			var realPlaylistChildNodes = $(DOMRealPlaylist[i].childNodes);
			tempRealPlaylistTipo[i] = $(realPlaylistChildNodes[0]).val();
			tempRealPlaylistId[i] = $(realPlaylistChildNodes[1]).val();
			tempRealPlaylistSize[i] = $(realPlaylistChildNodes[2]).val();
			tempRealPlaylistNome[i] = $(realPlaylistChildNodes[3]).val();
		}
		
		_setRealPlaylistTipo(tempRealPlaylistTipo);
		_setRealPlaylistId(tempRealPlaylistId);
		_setRealPlaylistSize(tempRealPlaylistSize);
		_setRealPlaylistNome(tempRealPlaylistNome);
		
	}
	
	
	// public functions
	var _removeItem = function(media_id){
		$('#media_id_'+media_id).remove();
	}
	this.removeItem = _removeItem;
	
	
	// Canta Negão!
	var _playNow = function(tipo, id, size, nome){
		var temp = {tipo:tipo, id:id, size:size, nome:nome}
		$('ul[id^="media_id_"] li').removeClass('nowPlaying');
		$('#media_id_'+tipo+'_'+id+' li').addClass('nowPlaying');
		_setNowPlayingId(id);
		_setNowPlayingTipo(tipo);
		swfobject.getObjectById("playerControleRemoto").playNow(temp);
	}
	this.playNow = _playNow;
	
	
	var _playPrev = function(){
		getDOMRealPlaylist();
		realPlaylistTipo = _getRealPlaylistTipo();
		realPlaylistId = _getRealPlaylistId();
		realPlaylistSize = _getRealPlaylistSize();
		realPlaylistNome = _getRealPlaylistNome();
		
		var total = realPlaylistId.length;
		
		for(i=0; i<realPlaylistId.length; i++){
			if(realPlaylistId[i] == _getNowPlayingId() && realPlaylistTipo[i] == _getNowPlayingTipo()){
				if(i == total-1){
					// é o último, tocar o primeiro
					_playNow(realPlaylistTipo[0], realPlaylistId[0], realPlaylistSize[0], realPlaylistNome[0]);
				} else {
					// tocar o próximo
					_playNow(realPlaylistTipo[i-1], realPlaylistId[i-1], realPlaylistSize[i-1], realPlaylistNome[i-1]);
				}
				return true;
			}
		}
		
	}
	this.playPrev = _playPrev;
	
	
	
	var _playNext = function(){
		
		getDOMRealPlaylist();
		realPlaylistTipo = _getRealPlaylistTipo();
		realPlaylistId = _getRealPlaylistId();
		realPlaylistSize = _getRealPlaylistSize();
		realPlaylistNome = _getRealPlaylistNome();
		
		var total = realPlaylistId.length;
		
		for(i=0; i<realPlaylistId.length; i++){
			if(realPlaylistId[i] == _getNowPlayingId() && realPlaylistTipo[i] == _getNowPlayingTipo()){
				if(i == total-1){
					// é o último, tocar o primeiro
					_playNow(realPlaylistTipo[0], realPlaylistId[0], realPlaylistSize[0], realPlaylistNome[0]);
				} else {
					// tocar o próximo
					_playNow(realPlaylistTipo[i+1], realPlaylistId[i+1], realPlaylistSize[i+1], realPlaylistNome[i+1]);
				}
				return true;
			}
		}
		
	}
	this.playNext = _playNext;
	
	
	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);
				}
			}
		});
	}
	this.add = _add;
	
	
	
	var _culturaPlaylistToggle = function(){
		$('#culturaPlaylist').toggle();
	}
	this.culturaPlaylistToggle = _culturaPlaylistToggle;
}


