/** 
 * Inject a specific player on the site
 * @access public
 * @param string Id of the div
 * @param number Format 0 - flash, 1 - silverlight, 3 - windows media
 * @param number Quality of the stream 0 - small, 1 - medium or 2 - large
 * @param object PlayerConfiguration
 * @param object MediaCollection
 * @param int Layer 0 - in window, 1 - hq layer, 2 - xq layer
 * @return void
 */
jQuery.fn.injectPlayer = function(id, format, quality, pc, mc, layer) {	
	
	switch (layer) {
	// If seleceted stream is not hq and not xq
	case 0:	
		//"Save" the current playback prefs
		pc.setCurrentPlaybackPrefs(format, quality);
		// Inject the player with the format selected
		$j().emptyPlayerDiv(id);
	break;
	case 1:
	case 2:
		// Inject the hq player with the format selected
		$j().emptyHqPlayerDiv(id);
		$j().emptyPlayerDiv(id);
	break;
	}
	
	switch (format) {
	case 0:
		$j().injectFlashPlayer(id, format, quality, pc, mc, layer);
		//alert("Starte FlashPlayer. Stream: " + mc.getMediaArray()[format].getMediaStreamArray()[quality].getStream());
	break;
	case 1:
		//$j().injectSilverlightPlayer(id, format, quality, pc, mc, layer);
		$j("#" + id + " ." + playerClass).html("Starte SilverlightPlayer. Stream: " + mc.getMediaArray()[format].getMediaStreamArray()[quality].getStream() + "<br /><br />");
	break;
	case 2:
		$j().injectWmPlayer(id, format, quality, pc, mc, layer);
		//alert("Starte WmPlayer. Stream: " + mc.getMediaArray()[format].getMediaStreamArray()[quality].getStream());
	break;
	}
};
	
/** 
 * Show the format buttons available and
 * add the click functions
 * @access public
 * @param string Id of the div
 * @param object MediaCollection
 * @return void
 */
jQuery.fn.showFormatButtonsAvailable = function(id, pc, mc) {
	var mediaAndPluginAvailableArray = mc.getMediaAndPluginAvailableArray();
	for (i in mediaAndPluginAvailableArray) {
		if (mediaAndPluginAvailableArray[i] != false) {
			$j().showFormatButton(id, i);
			$j()._addFormatClickFunctions(id, Number(i), pc, mc);
		}
	}
};

/** 
 * Add the click functions to the format buttons
 * @access public
 * @param string Id of the div
 * @param number Format 0 - flash, 1 - silverlight, 3 - windows media
 * @param object MediaCollection
 * @return void
 */
jQuery.fn._addFormatClickFunctions = function(id, format, pc, mc) {
	var media = mc.getMediaArray()[format];
	var streamServer = false;
	var streamSource = false;

	$j("#" + id + " .format .f" + format).click(function(event) {
		event.preventDefault();
		$j().selectFormatButton(id, format);
		$j().hideQualityButtons(id);
		$j().emptyHqPlayerDiv(id);
		$j("#" + id + hqVideoId).hide();
		$j().showQualityButtonsAvailable(id, format, pc, mc);
		if($j().checkCookiePrefAvailable(mc)) {
			currentStream = $j().getCookieQuality();
		}
		else {
			currentStream = mc.getBestStreamNumber(format);
		}
		$j().selectQualityButton(id, currentStream);
		$j().injectPlayer(id, format, currentStream, pc, mc, 0);
	});
};

/** 
 * Show the quality buttons available and
 * add the click functions
 * @access public
 * @param string Id of the div
 * @parma number Format 0 - flash, 1 - silverlight, 3 - windows media
 * @param object MediaCollection
 * @return void
 */
jQuery.fn.showQualityButtonsAvailable = function(id, format, pc, mc) {
	var mediaStreamArray = mc.getMediaArray()[format].getMediaStreamArray();
	for (i in mediaStreamArray) {
		if(mediaStreamArray[i] != false) {
			$j().showQualityButton(id, i, format);
			$j()._addQualityClickFunctions(id, Number(i), format, pc, mc);
		}
	}
};

/** 
 * Add the click functions to the quality buttons
 * @access public
 * @param string Id of the div
 * @param number Quality of the stream 0 - small, 1 - medium or 2 - large
 * @param number Format 0 - flash, 1 - silverlight, 3 - windows media
 * @param object MediaCollection
 * @return void
 */
jQuery.fn._addQualityClickFunctions = function(id, quality, format, pc, mc) {
	var mediaStreamArray = mc.getMediaArray()[format].getMediaStreamArray();
	switch(quality) {
	case 0:
	case 1:		
		$j("#" + id + " .connection .q" + quality).unbind("click");
		$j("#" + id + " .connection .q" + quality).click(function(event) {
			event.preventDefault();
			$j().emptyHqPlayerDiv(id);
			$j("#" + id + hqVideoId).hide();
			$j().selectQualityButton(id, quality);
			$j().injectPlayer(id, format, quality, pc, mc, 0);
		});
		break;
	case 2:
		$j("#" + id + " ." + hqButtonId).unbind("click");
		$j("#" + id + " ." + hqButtonId).click(function(event) {
			event.preventDefault();
			$j("#" + id + hqVideoId).show();
			$j().injectPlayer(id, format, quality, pc, mc, 1);
		});
		break;
	case 3:
		$j("#" + id + " ." + xqButtonId).unbind("click");
		$j("#" + id + " ." + xqButtonId).click(function(event) {
			event.preventDefault();
			$j("#" + id + hqVideoId).show();
			$j().injectPlayer(id, format, quality, pc, mc, 2);
		});
		break;
	}
};

/** 
 * Add the click functions for the hq close button
 * @access public
 * @param string Id of the div
 * @param number Quality of the stream 0 - small, 1 - medium or 2 - large
 * @param number Format 0 - flash, 1 - silverlight, 3 - windows media
 * @param object MediaCollection
 * @return void
 */
jQuery.fn.addHqCloseClickFunctions = function(id, quality, format, pc, mc) {
	$j("#" + id + hqVideoId + " ." + hqCloseButtonId).click(function(event) { 
		event.preventDefault();
		$j().emptyHqPlayerDiv(id);
		$j("#" + id + hqVideoId).hide();
		$j().selectQualityButton(id, pc.getCurrentQuality());
		$j().injectPlayer(id, pc.getCurrentPlugin(), pc.getCurrentQuality(), pc, mc, 0);
	});
};

/** 
 * Add the click function to save the player prefs and
 * set a session cookie on click
 * @access public
 * @param string Id of the div
 * @param object MediaCollection
 * @return void
 */
jQuery.fn.addSaveFunction = function(id, pc) {
	$j("#" + id + " .save").click(function(event) {
		event.preventDefault();
		$j.cookie("player", pc.currentPlugin + "##" + pc.currentQuality + "##" + id);
	});
};

/** 
 * Add the click function to delete the saved player prefs and
 * delete the session cookie on click. Also reload the player with the automatic prefs
 * @access public
 * @param string Id of the div
 * @return void
 */
jQuery.fn.addDeleteSaveFunction = function(id, mc, pc) {
	$j("#" + id + " .deletesave").click(function(event) {
		event.preventDefault();
		$j.cookie("player", null);
		
		pc.setCurrentPlaybackPrefs(mc.getBestMediaNumber(), mc.getBestStreamNumber(mc.getBestMediaNumber()));	
		$j().selectFormatButton(id, pc.getCurrentPlugin());
		$j().hideQualityButtons(id);
		$j().emptyHqPlayerDiv(id);
		$j("#" + id + hqVideoId).hide();
		$j().showQualityButtonsAvailable(id, pc.getCurrentPlugin(), pc, mc);
		$j().selectQualityButton(id, pc.getCurrentQuality());
		$j().injectPlayer(id, pc.getCurrentPlugin(), pc.getCurrentQuality(), pc, mc, 0);
	});
};

/** 
 * Check if the cookie prefs are available as media
 * @access public
 * @param object MediaCollection
 * @return boolean
 */
jQuery.fn.checkCookiePrefAvailable = function(mc) {
	if($j.cookie("player") != null) {
		var plugin = $j().getCookiePlugin();
		var player = $j().getCookieQuality();
		if(mc.getMediaAndPluginAvailableArray()[plugin] != false) {
			if(mc.getMediaArray()[plugin].getMediaStreamArray()[player] != false) {
				return true;
			}
			else {
				return false;
			}
		} 
		else {
			return false;
		}
	} 
	else {
		return false;
	}
};

/** 
 * Get the plugin set in the cookie
 * @access public
 * @return string Plugin
 */
jQuery.fn.getCookiePlugin = function() {
	if($j.cookie("player") != null) {
		var cookie = $j.cookie("player");
		var cookieArray = cookie.split("##");
		return Number(cookieArray[0]);
	} 
};

/** 
 * Get the quality set in the cookie
 * @access public
 * @return string Quality
 */
jQuery.fn.getCookieQuality = function() {
	if($j.cookie("player") != null) {
		var cookie = $j.cookie("player");
		var cookieArray = cookie.split("##");
		return Number(cookieArray[1]);
	} 
};
