/* MediaboxControl.js version 0.5

   Steuerung Mediaplayer - Mediathek und Positionierung

   history: 07.11.2007	v0.1	Initialstand fuer Versionierung CMS
   			    13.12.2007	v0.2	Bug-Fix beim initialen Oeffnen der Mediathek mit leerer Playliste
            19.11.2008  v0.3  Playlist-Funktionalitaet entfernt
            09.12.2008  v0.4  Mediathek Aufruf um FlashURL Parameter erweitert
            17.12.2008	v0.5  strolzm  Umzug des PeriodicalExecutor aus diesem Script in die window.onload Funktion in der Rahmen-Seite (rasterPageDefault) 
   
   copyright 2006-2008, cyne GmbH   
*/

var oldDeltaY = 0;

positionMediabox = function() {
	var deltaY =  window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;

	// check, wether page was scrolled
  	if (deltaY != oldDeltaY) {
		var moveX = 773;
		if (deltaY < 31) {
			var moveY = 31;
		} else {		    
			var moveY = deltaY + 1;
		}
		oldDeltaY = deltaY;
		return new Effect.Move('mediabox', { x: moveX, y: moveY, mode: 'absolute', duration: 0.5 });
	}
}

var playlistItems = new Array();
var updateVar = 0;
var mtCuePoint = 0;
var mtPlayStatus = 0;
var mtActPlay = 0;
var mtFlashURL = "";

setPlaylist = function(URLArray, PlayStatus, ActPlay, updateVar){
	window.document.myFlash.SetVariable("URLArray", URLArray);    // Array mit Links zu jeweiligen Movie Infos
	window.document.myFlash.SetVariable("PlayStatus", PlayStatus);// 1= abspielen 0= nicht abspielen
	window.document.myFlash.SetVariable("ActPlay", ActPlay);      // Welcher Film in der Liste soll abgespielt werden 
	window.document.myFlash.SetVariable("updateVar", updateVar);  // dieser Wert muss immer ein anderer sein, also einfach einen Wert hochzählen i++
	
	// scrool to top
	window.scrollTo(0, 0);
}

updatePlaylist = function(indexVar){
	for (i = 0; i < playlistItems.length; i++) {
		if (playlistItems[i].hasClassName('Playing') && i != indexVar) {
			playlistItems[i].removeClassName('Playing');
			if (playlistItems[i].hasClassName('AudioItem')) {		// bug-fix fuer ie 6 - kann keine 2 klassen auf einem objekt managen
				playlistItems[i].removeClassName('AudioActive');
			} else if (playlistItems[i].hasClassName('VideoItem')) {
				playlistItems[i].removeClassName('VideoActive');
			}
		} else if (i == indexVar) {
			playlistItems[i].addClassName('Playing');
			if (playlistItems[i].hasClassName('AudioItem')) {
				playlistItems[i].addClassName('AudioActive');
			} else if (playlistItems[i].hasClassName('VideoItem')) {
				playlistItems[i].addClassName('VideoActive');
			}
		}
	}
}

stopPlaylist = function(stopVar){
	// nothing to do
}

showMediathek = function(ListItem, CuePoint, PlayStatus, FlashURL){
	// variablen fuer die funktion getPlaylist fuer die mediathek setzen
	mtCuePoint = CuePoint;
	mtPlayStatus = PlayStatus;
	mtActPlay = ListItem;	
	mtFlashURL = FlashURL;

	m = new Control.Modal(false,{  
		contents: function(){
			new Ajax.Request(dingMediathekURL,{
				onComplete: function(request){  
					this.update(request.responseText);  
				}.bind(this)  
			});
			return '<br />&nbsp;&nbsp;Wird geladen. Bitte warten..&nbsp;&nbsp;<br /><br />';  
		}
	});  
	m.open();
}

openFullscreen = function(ActPlay, CuePoint){
	var myWidth = screen.width;
	var myHeight = screen.height;
	
	myWindow = window.open('fullscreenPlayer.php?URLArray='+URLArray+'&CuePoint='+CuePoint+'&ActPlay='+ActPlay, 'fullscreen',"location=no,menubar=no,resizable=no,scrollbars=no,toolbar=no,status=no, width="+myWidth+",height="+myHeight);
	myWindow.moveTo(0,0);
	myWindow.focus();
}

// Funktion fuer die Mediathek
getPlaylist = function() { 
	  window.document.mediathekflash.SetVariable("URLArray", mtFlashURL); 	// Array mit Links zu jeweiligen Movie Infos
	  window.document.mediathekflash.SetVariable("AktPlayStatus", mtPlayStatus); // 1= abspielen 0= nicht abspielen
	  window.document.mediathekflash.SetVariable("ActPlay", mtActPlay); // Welcher Film in der Liste ist der aktuelle Film
	  window.document.mediathekflash.SetVariable("AktCuePoint", mtCuePoint); // Startzeit des Films
	//alert(mtFlashURL+" - "+mtPlayStatus+" - "+mtActPlay+" - "+mtCuePoint); 
} 

clearPlaylist = function() {
	for (i = 0; i < playlistItems.length; i++) {
		$('playlist').removeChild(playlistItems[i].up('li'));
	}
	initPlaylist();
}

insertElement = function( element ) {
	// ist ein element blau markiert
	var nextLiForInserting = null;

	for (i = 0; i < playlistItems.length; i++) {
		if (playlistItems[i].hasClassName('Playing') && i+1 < playlistItems.length) {
			// weil insertBefore verwendet wird
			nextLiForInserting = playlistItems[i+1].up('li');
			break;
		}
	}

	var newLi = document.createElement("li");
	Element.extend(newLi);	

	// neue id fuer serialize vergeben -> li bekommt die id
	newLi.writeAttribute('id', getIdToSerialize());
	
	newLi.appendChild(element);

	// element dahinter vorhanden
	if (nextLiForInserting != null) {
		
		// ja - element davor klemmen
		$('playlist').insertBefore(newLi, nextLiForInserting);
	} else {
		
		// ansonsten element ans ende anhaengen
		$('playlist').appendChild(newLi);
	}
	
	// nach dem einfuegen die liste neu erstellen
	var currentPlaylistContainment = Sortable.sortables.playlist.containment;
	Sortable.create('playlist', {constraint: false, containment: currentPlaylistContainment, dropOnEmpty:true, onUpdate:initPlaylist });
}

playElement = function(elementToPlay) {	
	// Kindelement (in diesem Fall div.text) wurde gedrueckt
	if (elementToPlay.readAttribute('dingUrl') == null) {
		// das playlistitem suchen
		elementToPlay = elementToPlay.up('.PlaylistItem');
	}
	
   // 19.11.2008 webert: Playliste auskommentiert, da aktuell nicht im Einsatz
	// ist das element bereits in der playliste	
/*	if (playlistItems.indexOf(elementToPlay) == -1) {
		elementToPlay = elementToPlay.cloneNode(true);
		Event.observe(elementToPlay, 'dblclick', function(event) {
			playElement(Event.element(event));
		});
		
		insertElement(elementToPlay);
	}*/
   
   /* initPlaylist umgehen, da ohne playlist nur ein element in der liste ist */
   //	initPlaylist(elementToPlay, true);

   // dafuer direkter Aufruf von SetPlaylist
   updateVar = updateVar +1; 
   var playURL = elementToPlay.readAttribute('dingUrl');
   setPlaylist(playURL, 1, 1, updateVar);
}

initPlaylist = function(elementToPlay, play) {
	playlistItems = $$('#playlist .PlaylistItem');
	playlistItemArray = new Array();
	var indexToPlay = -1;
	
	for (i = 0; i < playlistItems.length; i++) {
		playlistItemArray.push(playlistItems[i].readAttribute('dingUrl'));
		if (playlistItems[i] == elementToPlay) indexToPlay = i;
	}
	
	// aktives element suchen, falls kein neues element abgespielt wird
	if (indexToPlay == -1) {
		for (i = 0; i < playlistItems.length; i++) {
			if (playlistItems[i].hasClassName('Playing')) indexToPlay = i;
		}
	}

	var playItem;
	if (play == true) {
		playItem = 1;
	} else {
		playItem = 0;
	}
	updateVar = updateVar +1;	
	setPlaylist(playlistItemArray.join(","), playItem, indexToPlay, updateVar);
}
