//------------------------------------------------------------------//
//													 				//
//					 		Playlist Manager			 			//
//													 				//
//------------------------------------------------------------------//
// version							: 1.2.1							//
// Date de création					: 22/10/2008					//
// Dernière modification 			: 16/01/2009					//
// Auteur 							: Johan Leche					//
// Propriétaire						: Keyrio SARL					//
// Contact							: j.leche@keyrio.fr				//
// Web								: http://www.keyrio.fr			//
//------------------------------------------------------------------//
//																	//
// Dépendances :			- prototype.js 			version 1.6		//
// 							- ajaxpopup.css 						//
//------------------------------------------------------------------//

var asMediaItem				= new Array();
var asMediaType				= new Array();
var asMediaRedirection		= new Array();
var asMediaTitle			= new Array();
var asMediaItemNumber		= new Array();
var asChapterList 			= new Array();
var asChapterItemNumber 	= new Array();
var asChapterItemId 		= new Array();
var asChapterTime 			= new Array();

var nCurrentMedia 			= 0;
var nCurrentChapter 		= 0;
var oPlayer 				= null;

if (typeof(window["bRedirect"]) == "undefined")
	var bRedirect = false;

var sText;

function playerReady(thePlayer) 
{
	oPlayer = document.getElementById(thePlayer.id);
//	printPlaylistData();
	oPlayer.addModelListener('TIME', 		'timeMonitor'); 
	oPlayer.addControllerListener('ITEM', 	'itemMonitor');
	oPlayer.addModelListener('STATE', 		'stateMonitor'); 
}


function registerMediaItem(pnMediaNumber, psMediaId, psTitle, psUrl)
{
	asMediaItem[pnMediaNumber] 			= psMediaId;
	asMediaItemNumber[psMediaId] 		= pnMediaNumber;
	asMediaTitle[psMediaId] 			= psTitle;
	
	// contien les infos pour la redirection
	asMediaRedirection[pnMediaNumber] 	= psUrl;
	
	Event.observe
	(
		psMediaId,
		'click',
		function()
		{
			selectMedia(pnMediaNumber);
		}
	);
}


function registerChapterList(psMediaId, psChapterListId, pnChapterNumber)
{
	asChapterList[psMediaId] 				= psChapterListId;
	asChapterItemNumber[psChapterListId] 	= pnChapterNumber;
}


function registerChapterItem(psMediaId, pnChapterNumber, psChapterId, pnSecond)
{
	asChapterTime[psChapterId] 	= pnSecond;
	
	Event.observe
	(
		psChapterId,
		'click',
		function()
		{
			selectChapter(pnChapterNumber);
		}
	);
}


/**
 * Selectionne un média dans la playlist et le joue dans le player
 *
 * @var Integer	pnMediaNumber
 * @var String 	psMediaId
 */
function selectMedia(pnMediaNumber)
{
	var sUrl = asMediaRedirection[pnMediaNumber];
	
	// on teste la valeur de redirection
	if (sUrl != null)
	{
			window.location.href = sUrl;
	}
	else
	{
		if (sMode == 'vod')
		{
			// on change le media courant
			nCurrentMedia = pnMediaNumber;
			
			// on indique au player de jouer cet élément
			oPlayer.sendEvent('ITEM', nCurrentMedia);
			
			// on récupère l'ID du media
			var sMediaId = getMediaId();
			
			// UI : on selectionne l'élément cliqué
			ui_selectMedia(sMediaId);
			
			// On charge la bonne liste de chapitres
			loadChapterList(sMediaId);
		}	
	}	
}


/**
 * Met en valeur graphiquement l'élément de la media liste selectonné, 
 * et désactive les autres
 *
 * @var String 	psMediaId
 */
function ui_selectMedia(psMediaId)
{
	// UI : on déselectionne la précédente selection
	$$('.media_selected').each(function(psName, pnIndex){psName.removeClassName('media_selected'); });
	
	// UI : on selectionne l'élément cliqué
	$(psMediaId).addClassName('media_selected');
	$(psMediaId + "_left").addClassName('media_selected');
	$(psMediaId + "_right").addClassName('media_selected');
	
	ui_scrollToElement('playlist_container', psMediaId);
	
	var nMediaNumber 	= getMediaNumber(psMediaId);
	var sUrl 			= asMediaRedirection[nMediaNumber];
	
	if ($('media_player_title') != undefined)
		$('media_player_title').update(asMediaTitle[psMediaId]);
	
	if (sUrl != null)
	{
		if (sMode == 'vod')
			window.location.href = sUrl;
	}	
	
}


/**
 * Affiche la liste des chapitres correspondant au média selectionné,
 * et masque les autres
 *
 * @var String 	psMediaId
 */
function loadChapterList(psMediaId)
{
	// on change le chapitre courant
	nCurrentChapter = 0;
	
	// on masque toutes les listes de chapitre
	$$('.chapter_list').each(function(psName, pnIndex){psName.style.display = "none" });
	
	var sChapterListId = asChapterList[psMediaId];
	
	// On affiche la liste de chapitre correspondant a sChapterListId
	$(psMediaId + "_chapter_list").style.display = "block";
}


/**
 * Selectionne un média dans la playlist et le joue dans le player
 *
 * @var Integer	pnMediaNumber
 * @var String 	psMediaId
 */
function selectChapter(pnChapterNumber)
{
	// on change le media courant
	nCurrentChapter = pnChapterNumber;
	
	// on récupère l'id du chapitre
	var sChapterId 	= getChapterId();
	
	// on récupère la valeur du seek correspondant au chapitre
	var nSeekTo 	= asChapterTime[sChapterId];
	
	// on indique au player de jouer cet élément
	oPlayer.sendEvent('SEEK', nSeekTo);
	
	// UI : on selectionne l'élément cliqué
	ui_selectChapter(sChapterId);
}


/**
 * Met en valeur graphiquement l'élément de la media liste selectonné, 
 * et désactive les autres
 *
 * @var String 	psMediaId
 */
function ui_selectChapter(psChapterId)
{
	// UI : on déselectionne la précédente selection
	$$('.chapter_selected').each(function(psName, pnIndex){psName.removeClassname('chapter_selected');});
	
	// UI : on selectionne l'élément cliqué
	$(psChapterId).addClassName('chapter_selected');
	
	ui_scrollToElement('chapter_container', psChapterId);
}


function ui_scrollToElement(psContainerId, psElementId)
{
	var nContainerHeight 	= $(psContainerId).getDimensions().height;
	var nElementHeight 		= $(psElementId).getDimensions().height;
	
	var nContainerTop 		= $(psContainerId).cumulativeOffset().top;
	var nElementXCoord		= $(psElementId).cumulativeOffset().top;
	
	var nScroll 			=  $(psContainerId).cumulativeScrollOffset().top;
	
	var nElementTop			= nElementXCoord - nScroll;
	var nElementBottom		= nElementTop + nElementHeight;
	var nContainerBottom 	= nContainerTop + nContainerHeight;
	
//	alert(nContainerTop + "vs" + nElementXCoord + "| scroll : " + nScroll);
	
//	alert("if (!(nElementBottom <= nContainerBottom && nElementTop >= nContainerTop))  \nl if (!((" + nElementBottom + ") <= " +nContainerBottom + " && (" + nElementTop + ") >= " +nContainerTop + "))");
	
	
	if (!(nElementBottom <= nContainerBottom && nElementTop >= nContainerTop))
		myScrollTo($(psContainerId), $(psElementId));
//	else
//		alert(nContainerTop + ' < ' + (nElementTop + nElementHeight + nScroll) );
}


/**
 *	raccourci pour obtenir l'ID du média courrant
 */
function getMediaId()
{
	return asMediaItem[nCurrentMedia];
}


/**
 *	raccourci pour obtenir l'ID du média courrant
 */
function getMediaNumber(psMediaId)
{
	return asMediaItemNumber[psMediaId];
}


/**
 *	raccourci pour obtenir l'ID du chapitre courrant
 */
function getChapterId()
{
	var sMediaId = getMediaId();
	
	return sMediaId + "_chapter_" + nCurrentChapter;
}


/**
 *
 * Ecoute les evenements envoyés par le player flash
 *
 */
function playerListener()
{
	
}


function switchTab(psTabId, psDivId)
{
	$$(".commons_media_list").each(function(psName, pnIndex){ psName.style.display = "none";});
	$$(".selected").each(function(psName, pnIndex){ psName.removeClassName('selected'); });
	
	$(psDivId).style.display = "block";
	$(psTabId).addClassName('selected');
}


function printPlaylistData() 
{
	var oPlaylist = null;
	
	oPlaylist = oPlayer.getPlaylist();
	if (oPlaylist)
	{
		var sHTML = '';
		for(var oItem in oPlaylist) 
		{ 
			sHTML += '<li>'+oItem+':</li>';
			sHTML += '<ul>';
			sHTML += '<li>'+oPlaylist[oItem].title+'</li>';
			sHTML += '<li>'+oPlaylist[oItem].author+'</li>';
			sHTML += '<li>'+oPlaylist[oItem].file+'</li>';
			sHTML += '</ul><br>';
		}
		
		var oNode = document.getElementById("display_api_call");
		
		if (oNode)
		{
			oNode.innerHTML = sHTML; 
		}
	}
	else 
	{
		setTimeout("printPlaylistData()", 100);
	}
}


function addControllerListener(obj)
{
	var oNode = document.getElementById("display_api_call");
	
	var oDate = new Date();
	
	if (oNode) 
		oNode.innerHTML = oDate;
	else 
		setTimeout("printPlaylistData()", 100);
}


function itemMonitor(obj)
{
	nCurrentMedia 	= obj.index;
	nCurrentChapter = 0;
}


function stateMonitor(obj)
{
	var tmp = document.getElementById("display_api_call");
	
	//...get title
	if(obj.newstate == 'PLAYING')
	{
		if (sMode == 'vod')
		{
			ui_selectMedia(getMediaId());
			loadChapterList(getMediaId());
		}	
	}	
}


function timeMonitor(obj)
{
	var nCurrentPosition 	=  obj.position; 
	
	var sDefault 			= '';
	var bAfter 				= false;
	var oRecipient 			= $('display_api_call');
	var sMediaId 			= getMediaId();
	
	var nNbChapter 			= asChapterItemNumber[sMediaId + "_chapter_list"];
		
	for (i=0; i<= nNbChapter; i++)
	{
		var sChapterId 	= sMediaId + "_chapter_" + i;
		var nSecond 	= asChapterTime[sChapterId];
		
		if(i == 0)
			sDefault 		= sChapterId;
			
		if (nSecond > nCurrentPosition)
			bAfter = true;
		else
		{
			sDefault 		= sChapterId;
		}
		
		if (bAfter)
		{
			break;
		}
	}

	
	if (nCurrentChapter != i)
	{
		nCurrentChapter = i;
		ui_selectChapter(sDefault);
	}
	
	
	if (nCurrentPosition > 177 && bRedirect == true)
	{
		location.href = 'actions.html';
	}
	

	if (nSeekFirst > 0)
	{
		oPlayer.sendEvent('SEEK', nSeekFirst);
		//setTimeout(function(){oPlayer.sendEvent('SEEK', nSeekFirst);}, 500);
		nSeekFirst = 0;
	}	
}	


function myScrollTo(container, element)
{
//	alert(container.inspect());
//	alert(element.inspect());
    container 	= $(container);
    element 	= $(element);
    
    var x = element.x ? element.x : element.offsetLeft,
            y = element.y ? element.y : element.offsetTop;
            
    container.scrollLeft	= x - (document.all ? 0 : container.offsetLeft);
    container.scrollTop		= y - (document.all ? 0 : container.offsetTop);
    
    return element;
}