/*
 * JavaScript API f�r JW FLV Player 4.x
 * 
 * Author: Timotheus Israel
 */

/**
 * Pr�ft, ob die erforderliche Flash-Version installiert ist.
 * @return Boolean Flash-Version 9 verf�gbar?
 */
function checkFlashPlayer() {
	return swfobject.hasFlashPlayerVersion("9");
}


/**
 * Bindet den Flash-Player ein.
 * @param String elm
 * @param String item
 */
function showFlashPlayer(elm, item) {
	
	var plfile = 'ondemand/3492iptv/41_Joe_Max_TV/'+playlistName+'_'+param+'_'+bandwidth+'kb.'+type+'';
	if (debug) console.log(plfile);
	var flashvars = {
//		config: "js/iptv/flashplayer/default.xml",
		file: plfile,
//		image: 'image_'+pictureID+'_560_315.jpg',
        image: pictureID,
		streamer: "rtmpt://c14000-o.f.core.cdn.streamfarm.net/14000cina",
		type: 'rtmp',
		autostart: "false",
      controlbar: "over"
	}
	
	var params = {
		allowfullscreen:"true",
		allowscriptaccess:"always"
	}
	var attributes = {
		id:playerID,
		name:playerID
	}
	
	// Aktuellen Player entfernen
	swfobject.removeSWF(playerID);
	resetFlashPlayerVars();
	
	if ($('#'+elm).length == 0) {
		$('#'+elm+'Outer').html("<div id='"+elm+"'></div>");
	}
	
    swfobject.embedSWF("js/iptv/mediaplayer-5.8/player.swf", elm, "560", "315", "9", "js/iptv/flashplayer/expressinstall.swf", flashvars, params, attributes);

//	swfobject.embedSWF("js/iptv/flashplayer/jw_flv_player.swf", elm, "560", "315", "9", "js/iptv/flashplayer/expressinstall.swf", flashvars, params, attributes);
	currentPlayerState = "IDLE";
}

/**
 * Werte im Player setzen
 * @param int item
 * @param Boolean stop[optional] Item nur anfeaturen und nicht abspielen
 */
function setItem(item) {
	if(player && plyReady) {
		try {
			player.sendEvent("ITEM", item);
		}
		catch(e) {}
		if (setItem.arguments[1] === true) {
			try {
				setTimeout("player.sendEvent('STOP')", 500);
			} 
			catch (e) {}
		}
		checkPlayerItem(item, (setItem.arguments[1] === true));
	}
	else {
		setTimeout("setItem("+item+")", 500);
	}
}

/**
 * Pr�ft, ob die Vorauswahl der Playlist erfolgreich war
 * @param int item
 * @param Boolean stop[optional] Item nur anfeaturen und nicht abspielen
 */
function checkPlayerItem(item) {
	if(plyFirstLoad && currentItem!=currentPlayerItem) {
		setTimeout("setItem("+item+((setItem.arguments[1] === true)?",true":"")+")", 600);
	}
	else {
		plyFirstLoad = false;
	}
}

/**
 * Im Flash-Player an eine bestimmte Stelle springen
 * @param int pos Position, an die hingesprungen werden soll
 */
function setPosition(pos) {
	if(currentPlayerState=="PLAYING" || currentPlayerState=="PAUSED") {
		try {
			player.sendEvent("SEEK", Math.round(pos));
		}
		catch(e) {}
	}
	else {
		setTimeout("setPosition("+pos+")", 500);
	}
}

/**
 * Sprungmarken ansteuern
 * @param int time
 */
function jumpLabel(time) {
	if(typeof time == "undefined" || time == null) time=0;
	setItemAndTime(currentItem, time);
}

/**
 * Aktuelles Item und aktuelle Position neu setzen.
 */
function setCurrentItemAndTime() {
	setItemAndTime(currentItem, currentPosition);
}

/**
 * Setzt Item in der Playlist und Position des Beitrags.
 * @param int item[optional] Item in der Playlist (0-basiert)
 * @param float time[optional] Start-Position f�r das item
 */
function setItemAndTime(item, time) {
	if(plyReady) {
		if(item!=null && item!=currentPlayerItem || currentPlayerState!="BUFFERING" && currentPlayerState!="PLAYING" && currentPlayerState!="PAUSED") {
			setTimeout("setItem("+item+")", 500);	// Leichte Verz�gerung, um Sicherzustellen, dass Player verf�gbar ist, falls er neu eingebunden wird
		}
		if(time!=null) {
			setPosition(time);
		}
	}
	else {
		if(debug) console.log("setTimeout: setItemAndTime("+item+", "+time+")");
		setTimeout("setItemAndTime("+item+", "+time+")", 500);
	}
}

/**
 * Erstellt verschiedene Listener f�r den Flash-Player
 */
function addListeners() {
	if (player) {
		if(debug) player.addModelListener("ERROR", "errorListener");	// {message,id,client,version}.
		player.addControllerListener("PLAY", "playListener");			// {state,id,client,version}.
		player.addControllerListener("ITEM", "itemListener");			// Item-Eigenschaften abfangen {index,id,client,version}.
		player.addControllerListener("SEEK", "seekListener");			// {position,id,client,version}.
		player.addModelListener("TIME", "timeListener");				// {duration,position,id,client,version}.
		player.addModelListener("STATE", "stateListener");				// {oldstate,newstate,id,client,version}.
		player.addModelListener("META", "metaListener");				// Meta-Data
	}
	else {
		setTimeout("addListeners()", 100);
	}
}
function timeListener(obj) {
	currentPosition = obj.position;
	// if(debug) console.log("Aktuelle Position: "+currentPosition);
	if(currentPlayerItem==-1) {
		currentPlayerItem = 0;
		if(debug) console.log("Aktuelles Item: "+currentPlayerItem+" (positionListener)");
	}
	
}
function stateListener(obj) {
	currentPlayerState = obj.newstate;
	if(debug) console.log("State: "+currentPlayerState+" (stateListener)");
}
function playListener(obj) {
	// 1x auf Play -> currentPlayerItem setzen
	if(currentPlayerItem==-1) currentPlayerItem = 0;
	
	// Pr�fe, ob in diesem Beitrag an eine spezielle Position gesprungen werden soll 
	if(tmpItemPosition!=-1) {
		try {
			player.sendEvent("SEEK", tmpItemPosition);
		}
		catch(e) {}
		tmpItemPosition = -1;
	}
	
	if(debug) console.log("Aktuelles Item: "+currentPlayerItem+" (playListener)");
}
function itemListener(obj) { 
	if (obj.index != currentPlayerItem) {
 		previousPlayerItem = currentPlayerItem;
		currentPlayerItem = obj.index;
		if(debug) console.log("Aktuelles Item: "+currentPlayerItem+" (itemListener)");
		// Coverflow aktualisieren
		setActiveItem(currentPlayerItem);
	}
}
function errorListener(obj) {
	if(debug) console.log(obj);
}
function seekListener(obj) {
	if(debug) console.log("SEEK");
	if(debug) console.log(obj);
}
function metaListener(obj) {
	if(debug) console.log("META");
	if(debug) console.log(obj);
}
// Automatisches Ready-Event abfangen
function playerReady(thePlayer) {
	player = document.getElementById(thePlayer.id);
	addListeners();
	plyReady = true;
}

// Automatische Bandbreitenerkennung f�r Flash
function bandwidthDetection() {
	
	if(!checkFlash) return;
	
	var force = (bandwidthDetection.arguments.length >= 1) ? bandwidthDetection.arguments[0] : false;
	if (bandwidth == null || force) {
		var elm = "bwCheck";
		var flashvars = {
			server: "rtmpt://c14000-o.f.core.cdn.streamfarm.net/14000cina",
			jsFunction: "saveBwFlash"
		}
		var params = {
			allowfullscreen: "true",
			allowscriptaccess: "always"
		}
		var attributes = {
			id: 'bwTV1',
			name: 'bwTV1'
		}
		
		// Aktuellen Player entfernen
		swfobject.removeSWF('bwTV1');
		if ($("#"+elm).length == 0) {
			$("body").append("<div id='"+elm+"'></div>");
		}
		bwTV1 = null
		$('#'+playerName).text("Automatische Bandbreitenerkennung...");
		swfobject.embedSWF("js/iptv/flashplayer/bwDetection.swf", elm, "0", "0", "9", "js/iptv/flashplayer/expressinstall.swf", flashvars, params, attributes);
	}
}

/**
 * Result-Funktion vom BW-Detection-Flash
 * @param int bw Ermittelte Bandbreite des Flash-Files
 */
function saveBwFlash(bw) {
	var elm = "bwCheck";
	if(debug) console.log(bw);
	if(bw>0) {
		for(var i=arrBandwidth.length-1; i>=0; i--) {
			if(arrBandwidth[i]<bw) {
				bandwidth = arrBandwidth[i];
				if(debug) console.log("Bandbreite: "+bandwidth);
				break;
			}
		}
	}
	else {
		bandwidth = 750;
	}
	try {
		bandwidth = bandwidth.toString();
	}
	catch(e) { }
	$("input[name='bw']").val([ bandwidth ]);
	swfobject.removeSWF('bwTV1');
	showFlashPlayer(playerName, playlistName);
}

/**
 * Wenn der Flash-Player ins DOM neu eingebunden wird, m�ssen JS-Variablen des Flash-Players zur�ckgesetzt werden.
 */
function resetFlashPlayerVars() {
	player = null;
	plyReady = false;
	plyFirstLoad = true;
	
	currentPlayerItem = -1;
	previousPlayerItem = -1;
	currentPlayerState = "IDLE";
}

// Allgemeine Variablen setzen
var debug = false && (typeof console != "undefined");
var playerName = 'flashPlayer';				// HTML-Element dem der Flash-Player hinzugef�gt werden soll
var playerID = "tvplayer";					// ID des Player-Objektes im DOM
var player = null;							// JS-Instanz des Flash-Player (Event-Handling)

var plyReady = false;						// Player instanziiert und JS-Listener erstellt
var plyFirstLoad = true;					// Wenn Player noch nicht geladen, dann verz�gertes Ausw�hlen aus der Playlist erm�glichen

var arrBandwidth = [ 200, 750, 1500 ];		// Auswahl der verf�gbaren Bandbreiten
var bandwidth = null;						// Aktuelle Bandbreite
var checkFlash = checkFlashPlayer();		// Pr�ft die Voraussetzungen f�r den TV-Bereich

// Default-Einstellungen der Flash-Player-Variablen
var currentPlayerItem = -1;
var previousPlayerItem = -1;
var currentPlayerState = "IDLE";
var currentPosition = -1;
var tmpItemPosition = -1;
