function FLVPlayer(movieName, isSoundOn){
	this.movieName = movieName;
	this.isForwarding = false;
	this.isReversing = false;
	this.muteState = ($defined(isSoundOn) && (isSoundOn == true || isSoundOn == "true")) ? "on" : "off";
	this.browser = "";
}

function flvPlayerSetBrowser(browser){
	this.browser = browser;
}

/*
	############ setter functions #############
*/


function flvPlayerPlay() {
	try{
		if(!getFlashMovieObject(this.movieName, this.browser).onJsPlay){
			return;
		}
		getFlashMovieObject(this.movieName, this.browser).onJsPlay();
	}
	catch(e){}
}

function flvPlayerPause() {
	try{
		if(!getFlashMovieObject(this.movieName, this.browser).onJsPause){
			return;
		}
		getFlashMovieObject(this.movieName, this.browser).onJsPause();
	}
	catch(e){}
}

function flvPlayerStop() {
	if(!getFlashMovieObject(this.movieName, this.browser).onJsStop){
		return;
	}
	getFlashMovieObject(this.movieName, this.browser).onJsStop();
}

function flvPlayerStartFastForward() {
	try{
		if(!getFlashMovieObject(this.movieName, this.browser).onJsStartFFwd){
			return;
		}
		if(!this.isForwarding){
			this.isForwarding = true;
			getFlashMovieObject(this.movieName, this.browser).onJsStartFFwd();
		}
	}
	catch(e){}
}

function flvPlayerStopFastForward() {
	try{
		if(!getFlashMovieObject(this.movieName, this.browser).onJsStopFFwd){
			return;
		}
		if(this.isForwarding){
			this.isForwarding = false;
			getFlashMovieObject(this.movieName, this.browser).onJsStopFFwd();
		}
	}
	catch(e){};
}

function flvPlayerStartFastReverse() {
	try{
		if(!getFlashMovieObject(this.movieName, this.browser).onJsStartFRew){
			return;
		}
		if(!this.isReversing){
			this.isReversing = true;
			getFlashMovieObject(this.movieName, this.browser).onJsStartFRew();
		}
	}
	catch(e){}
}

function flvPlayerStopFastReverse() {
	try{
		if(!getFlashMovieObject(this.movieName, this.browser).onJsStopFRew){
			return;
		}
		if(this.isReversing){
			this.isReversing = false;
			getFlashMovieObject(this.movieName, this.browser).onJsStopFRew();
		}
	}
	catch(e){}
}

function flvPlayerIncVolume(delta){
	if(!getFlashMovieObject(this.movieName, this.browser).onJsIncVolume){
		return;
	}
	getFlashMovieObject(this.movieName, this.browser).onJsIncVolume(delta);
}

function flvPlayerDecVolume(delta){
	if(!getFlashMovieObject(this.movieName, this.browser).onJsDecVolume){
		return;
	}
	getFlashMovieObject(this.movieName, this.browser).onJsDecVolume(delta);
}

function flvPlayerChangeVolume(delta) {
	var deltaNum = 5* parseInt(delta);
	if(deltaNum > 0){
		this.incVolume(Math.abs(deltaNum));
	}
	else{
		this.decVolume(Math.abs(deltaNum));
	}
}

function flvPlayerMuteOn(){
	if(!getFlashMovieObject(this.movieName, this.browser).onJsMuteOn){
		return;
	}
	getFlashMovieObject(this.movieName, this.browser).onJsMuteOn();
}

function flvPlayerMuteOff(){
	if(!getFlashMovieObject(this.movieName, this.browser).onJsMuteOff){
		return;
	}
	getFlashMovieObject(this.movieName, this.browser).onJsMuteOff();
}

function flvPlayerChangeMute(toggle) {
	if(this.muteState == "on"){
		this.muteState = "off";
		this.muteOff();
	}
	else{
		this.muteState = "on";
		this.muteOn();
	}
}

function flvPlayerGetMute() {
	if(this.muteState == "on"){
		return false;
	} else{
		return true;
	}
}

function flvPlayerChangeClip(index){
	if(!getFlashMovieObject(this.movieName, this.browser).onJsChangeClip){
		return;
	}
	getFlashMovieObject(this.movieName, this.browser).onJsChangeClip(index);
}

function flvPlayerNextClip(){
	if(!getFlashMovieObject(this.movieName, this.browser).onJsNextClip){
		return;
	}
	getFlashMovieObject(this.movieName, this.browser).onJsNextClip();
}

function flvPlayerPreviousClip(){
	if(!getFlashMovieObject(this.movieName, this.browser).onJsPreviousClip){
		return;
	}
	getFlashMovieObject(this.movieName, this.browser).onJsPreviousClip();
}

function flvPlayerHalt(){
	if(this.browser == "msie"){
		if(!getFlashMovieObject(this.movieName, this.browser)){
			return;
		}
		var container = getFlashMovieObject(this.movieName, this.browser).parentNode;
		container.style.display="none";
		container.style.visibility="hidden";
		var object = getFlashMovieObject(this.movieName, this.browser);
	  	var killed = container.removeChild(object);
	}
}

function flvPlayerStop(){
	//TODO
}

function flvPlayerSetPosition(position){
	if(!getFlashMovieObject(this.movieName, this.browser)){
		return;
	}
	getFlashMovieObject(this.movieName, this.browser).onJsSetPosition(position);
}


/*
	############ end setter functions #############
*/

/*
	############ getter functions #############
*/

function flvPlayerGetCurrentClipIndex() {
	try{
		if(!getFlashMovieObject(this.movieName, this.browser)){
			return -1;
		}
		if(!getFlashMovieObject(this.movieName, this.browser).getCurrentClipIndex){
			return -1;
		}
		var res = getFlashMovieObject(this.movieName, this.browser).getCurrentClipIndex();
		
		return (res != undefined)?res : -1;
		}
	catch(e){
		return -1;
	}
}

function flvPlayerIsStopped(){
	try{
		if(!getFlashMovieObject(this.movieName, this.browser)){
			return false;
		}
		if(!getFlashMovieObject(this.movieName, this.browser).getPlayerStatus){
			return false;
		}
		var status = getFlashMovieObject(this.movieName, this.browser).getPlayerStatus();
		return status == -1;
	}
	catch(e){
		return false;
	}
}

function flvPlayerIsPlaying(){
	try{
		if(!getFlashMovieObject(this.movieName, this.browser)){
			return false;
		}
		if(!getFlashMovieObject(this.movieName, this.browser).getPlayerStatus){
			return false;
		}
		var status = getFlashMovieObject(this.movieName, this.browser).getPlayerStatus();
		return status == 1;
	}
	catch(e){
		return false;
	}
}

function flvPlayerIsPaused(){
	if(!getFlashMovieObject(this.movieName, this.browser).getPlayerStatus){
		return false;
	}
	var status = getFlashMovieObject(this.movieName, this.browser).getPlayerStatus();
	return status == 0;
}

function flvPlayerPlayerStatus(aStatus) {
	if(!getFlashMovieObject(this.movieName, this.browser).getPlayerStatus){
		return false;
	}
	var playerStatus = getFlashMovieObject(this.movieName, this.browser).getPlayerStatus();
	if (playerStatus != undefined) {
		return (playerStatus == aStatus);
	}   
	return playerStatus;
}

function flvPlayerGetNumClips() {
	try{
		if(!getFlashMovieObject(this.movieName, this.browser).getClipCount){
			return -1;
		}
		var res = getFlashMovieObject(this.movieName, this.browser).getClipCount();
		return (res != undefined)?res:-1;
	}
	catch(e){
		return -1;
	}
}

function flvPlayerGetPosition() {
	try{
		if(!getFlashMovieObject(this.movieName, this.browser).getClipPosition){
			return -1;
		}
		var res = getFlashMovieObject(this.movieName, this.browser).getClipPosition();
		return (res != undefined)?res:-1;
	}
	catch(e){
		return -1;
	}
}

function flvPlayerGetVolume(){
	if(!getFlashMovieObject(this.movieName, this.browser).getVolume){
		return -1;
	}
	var res = getFlashMovieObject(this.movieName, this.browser).getVolume();
	return (res != undefined)?res:-1;
}

function flvPlayerGetBytesLoaded(){
	if(!getFlashMovieObject(this.movieName, this.browser).getBytesLoaded){
		return -1;
	}
	var res = getFlashMovieObject(this.movieName, this.browser).getBytesLoaded();
	return (res != undefined)?res:-1;
}

function flvPlayerGetBytesTotal(){
	if(!getFlashMovieObject(this.movieName, this.browser).getBytesTotal){
		return -1;
	}
	var res = getFlashMovieObject(this.movieName, this.browser).getBytesTotal();
	return (res != undefined)?res:-1;
}

function flvPlayerGo(){
}
function flvPlayerDoIt(){
}
function flvPlayerInit(){
}
function flvPlayerLoop(){
}
function flvPlayerSetDoubleSize(){
}
function flvPlayerSetFullScreen(){
}
function flvPlayerSetEnableDoubleSize(){
}
function flvPlayerSetEnableFullScreen(){
}
function flvPlayerSetMultiClipIvod(){
}
function flvPlayerSetVariable(){
}
function flvPlayerGetVariable(){
	return "not set";
}
function flvPlayerGetLength(){
	return 0;
}

function initFlashPlayer(params) {
  	var so;
  	var aStartIdx = params.get('startClip');
  	var aDivId = params.get('div');
  	var width = $pick(params.get('width'), "384");
  	var height = $pick(params.get('height'), "288");
  	var keepFormat = $pick(params.get('keepFormat'), "true");
  	var soundOn	= $pick(params.get('soundOn'), true);
  	var configPath = $pick(params.get('configPath'), "");
  	var version = $pick(params.get('version'), "");
  	var playerHeight = $pick(params.get('playerHeight'), height);
  	var playerWidth = $pick(params.get('playerWidth'), width);
  	var wmode = $pick(params.get('wmode'), 'window');
  	var bgColor = $pick(params.get('bgColor'), '#000000');
  	var aStartTime = $pick(params.get('startTime'), 0);
  	if(bgColor == "transparent"){
  		bgColor = "#000000";
  	}
  	
  	if(version == "AS3"){
  		var skin = $pick(params.get('skin'), null);
  		var controlsClip = $pick(params.get('controlsClip'), null);
  		var language = $pick(params.get('language'), "de");
  		var primaryColor = $pick(params.get('primaryColor'), null);
  		var secondaryColor = $pick(params.get('secondaryColor'), null);
  		var textColor = $pick(params.get('textColor'), null);
  		var overColor = $pick(params.get('overColor'), null);
  		var borderColor = $pick(params.get('borderColor'), null);
  		so = new SWFObject("/iptv/swf/iptv3.swf", "video", width, height, "9.0", bgColor, true);
  		so.addVariable("autoPlay",$pick(params.get('autoPlay'), "true"));
		so.addVariable("autoChangePlay",$pick(params.get('autoChangePlay'), "true"));
		so.addVariable("autoChangePlaylist", $pick(params.get('autoChangePlaylist'), "false"));
		so.addVariable("asf",  $pick(params.get('url'), ""));
		so.addVariable("startIndex", aStartIdx);
		so.addVariable("width", width);
		so.addVariable("height", height);
		so.addVariable("playerHeight", playerHeight);
		so.addVariable("playerWidth", playerWidth);
		so.addVariable("keepVideoAspectRatio", !keepFormat);
		if(aStartTime > 0){
			so.addVariable("clipPosition", aStartTime);
		}
		
		if(primaryColor != null){
			so.addVariable("primaryColor", primaryColor);
		}
		if(secondaryColor != null){
			so.addVariable("secondaryColor", secondaryColor);
		}
		if(textColor != null){
			so.addVariable("textColor", textColor);
		}
		if(overColor != null){
			so.addVariable("overColor", overColor);
		}
		if(borderColor != null){
			so.addVariable("borderColor", borderColor);
		}
		if(controlsClip != null){
			so.addVariable("defaultSkin", controlsClip);
		}
		else if(skin != null){
			so.addVariable("language", language);
			so.addVariable("skin", skin);
		}
		//so.addVariable("debug", "true");
  	}
  	else{
  		so = new SWFObject("/iptv/swf/iptv.swf", "video", width, height, "9.0", bgColor, true);
  		if(configPath){
			if (/\$skin/.test(configPath)) {
				if(configPath.indexOf("?") > 0){
					configPath = configPath + "$forcedWidth=";
				} else{
					configPath = configPath + "?forcedWidth=";
				}
				configPath = configPath + width + "$forcedHeight=" + height + "$keepFormat=" + keepFormat;
				so.addVariable("configXml",configPath);
			} else {
				so.addVariable("autoPlay",$pick(params.get('autoPlay'), "true"));
				so.addVariable("autoChangePlay",$pick(params.get('autoChangePlay'), "true"));
				so.addVariable("autoChangePlaylist", $pick(params.get('autoChangePlaylist'), "false"));
				so.addVariable("asf",  $pick(params.get('url'), ""));
				so.addVariable("startIndex", aStartIdx);
				so.addVariable("width", width);
				so.addVariable("height", height);
				so.addVariable("keepFormat", keepFormat);
			}
		}
  	}
  	
  	so.addParam("menu","true");
	so.addParam("wmode",wmode);
	so.addParam("quality","high");
	so.addParam("swLiveConnect","true");
	so.addParam("allowFullScreen",$pick(params.get('allowFullScreen'), "true"));
	so.addParam("allowScriptAccess","sameDomain");
	so.addParam("scaleMode", "showall");
	so.addVariable("domain", document.domain);
	so.addVariable("soundOn", new String(soundOn));
	
	so.addVariable("debug", "true");
	so.useExpressInstall("/iptv/swf/expressinstall.swf");
	so.setAttribute("style","");
	if ( $defined(aDivId) ) {
		so.write(aDivId);
	}
	system.player = new FLVPlayer("video",soundOn);
}

function getFlashMovieObject(movieName, browser)
{
  if (window.document[movieName]) 
  {
      return window.document[movieName];
  }
  if (browser != 'msie')
  {
    if (document.embeds && document.embeds[movieName])
      return document.embeds[movieName]; 
  }
  else
  {	
  	try{
    	return document.getElementById(movieName);
    }
    catch(e){
    	return undefined;
    }
  }
}

function debug(message){
	if(top.document.getElementById("debugger")){
		top.document.getElementById("debugger").innerHTML += message;
		top.document.getElementById("debugger").innerHTML += '<br/>';
	} else {
		if (window.console) window.console.log(message);
	}
}

function FlashPlayerGetBufferingProgress() {
  if (!this.playerObj)
    return;
  
  // TODO: if there is a way to check buffering progress - implement here
  return 100;
}


FLVPlayer.prototype.setBrowser			= flvPlayerSetBrowser;
FLVPlayer.prototype.isStopped 			= flvPlayerIsStopped;
FLVPlayer.prototype.isPlaying 			= flvPlayerIsPlaying;
FLVPlayer.prototype.isPaused 			= flvPlayerIsPaused;
FLVPlayer.prototype.play         		= flvPlayerPlay;
FLVPlayer.prototype.pause        		= flvPlayerPause;
FLVPlayer.prototype.stop         		= flvPlayerStop;
FLVPlayer.prototype.startFastForward    = flvPlayerStartFastForward;
FLVPlayer.prototype.stopFastForward     = flvPlayerStopFastForward;
FLVPlayer.prototype.startFastReverse    = flvPlayerStartFastReverse;
FLVPlayer.prototype.stopFastReverse     = flvPlayerStopFastReverse;

FLVPlayer.prototype.incVolume        	= flvPlayerIncVolume;
FLVPlayer.prototype.decVolume        	= flvPlayerDecVolume;
FLVPlayer.prototype.changeVolume        = flvPlayerChangeVolume;
FLVPlayer.prototype.muteOn	        	= flvPlayerMuteOn;
FLVPlayer.prototype.muteOff        		= flvPlayerMuteOff;
FLVPlayer.prototype.changeMute			= flvPlayerChangeMute;
FLVPlayer.prototype.getMute      		= flvPlayerGetMute;

FLVPlayer.prototype.nextClip        	= flvPlayerNextClip;
FLVPlayer.prototype.previousClip        = flvPlayerPreviousClip;
FLVPlayer.prototype.prevClip        	= flvPlayerPreviousClip;
FLVPlayer.prototype.setCurrentClip      = flvPlayerChangeClip;
FLVPlayer.prototype.getNumClips        	= flvPlayerGetNumClips;
FLVPlayer.prototype.getCurrentClip      = flvPlayerGetCurrentClipIndex;
FLVPlayer.prototype.getPosition       	= flvPlayerGetPosition;
FLVPlayer.prototype.getVolume		    = flvPlayerGetVolume;
FLVPlayer.prototype.getBytesLoaded		= flvPlayerGetBytesLoaded;
FLVPlayer.prototype.getBytesTotal		= flvPlayerGetBytesTotal;
FLVPlayer.prototype.halt				= flvPlayerHalt;
FLVPlayer.prototype.playerStatus 		= flvPlayerPlayerStatus;


//unused
FLVPlayer.prototype.go          		= flvPlayerGo;
FLVPlayer.prototype.doIt        		= flvPlayerDoIt;
FLVPlayer.prototype.init       			= flvPlayerInit;
FLVPlayer.prototype.loop				= flvPlayerLoop;

FLVPlayer.prototype.setDoubleSize 		= flvPlayerSetDoubleSize; // TODO
FLVPlayer.prototype.setFullScreen 		= flvPlayerSetFullScreen;
FLVPlayer.prototype.setEnableDoubleSize = flvPlayerSetEnableDoubleSize; // TODO
FLVPlayer.prototype.setEnableFullScreen = flvPlayerSetEnableFullScreen; // TODO
FLVPlayer.prototype.setMultiClipIvod 	= flvPlayerSetMultiClipIvod; // TODO
FLVPlayer.prototype.setVariable			= flvPlayerSetVariable;
FLVPlayer.prototype.getVariable			= flvPlayerGetVariable;
FLVPlayer.prototype.getLength       	= flvPlayerGetLength;
FLVPlayer.prototype.fastForward    		= flvPlayerStartFastForward;
FLVPlayer.prototype.fastReverse    		= flvPlayerStartFastReverse;
FLVPlayer.prototype.setPosition			= flvPlayerSetPosition;

FLVPlayer.prototype.getBufferingProgress = FlashPlayerGetBufferingProgress; // TODO (returning 100)
