var lang = new Object();

lang = {
  lang: 'de',
  more: 'mehr',
  cancel: 'Abbrechen',
  play: 'Start',
  pause: 'Pause',
  stop: 'Stop',
  forward: 'Vor',
  backward: 'Zurück',
  volume: 'Lautstärke',
  louder: 'Lauter',
  quieter: 'Leiser',
  silent: 'Lautlos',
  mute: 'Ton ausschalten', 
  unmute: 'Ton einschalten',
  enlarge: 'Vergrößern',
  shrink: 'Verkleinern',
  captionsOff: 'Untertitel aussschalten',
  captionsOn: 'Untertitel einschalten',
  currentPosition: 'Aktuelle Position', 
  duration: 'Gesamtdauer'
};

var playerIds = new Array();
var controls = new Array(), duration = new Array(), currentVolume = new Array(), currentMuteState = new Array(), currentPlayState = new Array();
var currentPosition = new Array(), oldPosition = new Array(), type = new Array();
var playerHeight = new Array(), playerWidth = new Array(), originalplayerHeight = new Array(), originalplayerWidth = new Array();

var player = null, timer;
var playerId;

// Initialize. Called when player ready.
function playerReady(obj) {
	playerId = obj['id'];
	player = jQuery('#' + playerId).get(0);
	
	playerIds.push(playerId);
	
	//make the player not focusable by keyboard
	jQuery(player).attr('tabindex','-1');

	type[playerId] = player.getConfig().type != 'undefined' ? player.getConfig().type : 'video';
	
	currentVolume[playerId] = player.getConfig().volume;
	currentMuteState[playerId] = false;
	currentPosition[playerId] = player.getConfig().start;

	oldPosition[playerId] = currentPosition[playerId];
	//flashvars.duration=15
	duration[playerId] = player.getPlaylist()[0].duration;
	playerHeight[playerId] = player.getConfig().height;
	playerWidth[playerId] = player.getConfig().width;
	
	if(typeof(originalplayerHeight[playerId])=='undefined') {
		originalplayerHeight[playerId] = playerHeight[playerId];
		originalplayerWidth[playerId] = playerWidth[playerId];
	}
	
	if(jQuery('#mediaControlPanel-' + playerId).length > 0) {
		jQuery('#mediaControlPanel-' + playerId).remove();
	}
	playerControls = createControls(playerId);
	
	controls[playerId] = playerControls;

	timer = createTimer(playerId);
	timer.current.find('strong').text(formatTime(currentPosition[playerId]));
	timer.duration.find('strong').text(formatTime(duration[playerId]));
  
	updateVolume(playerId);
  
	var myPlayer = player;
	var myPlayerId = playerId;
	
	addListeners(myPlayer);
  
	//setInterval(updateTimer, 500);
	setInterval( function() { updateTimer(myPlayerId); }, 500 );

	// Timeprogress
	timer.progress.click(function(e) {
		// relative click position inside the div
		var x = e.pageX - Math.ceil(jQuery(this).offset().left);
		var calcpos = duration[myPlayerId] * ( x / jQuery(this).innerWidth() );
		myPlayer.sendEvent("SEEK", calcpos);
	});  

	
	// Play
	playerControls.play.click(function() {
		myPlayer.sendEvent("PLAY");
		return false;
	});
  
	// Stop
	playerControls.stop.click(function() {
		myPlayer.sendEvent("STOP");
		if ( type[myPlayerId] != 'sound' && !playerControls.resize.hasClass('smallSize') )
			playerControls.resize.trigger('click');
		return false;
	});
  
	// Go back by 5% of length, unless that is less than 10 seconds
	playerControls.leapBack.click(function() {
		var skiptime = 10;
		if (duration[myPlayerId] / 20 > 10) {
			skiptime = Math.floor(eval(duration[myPlayerId] / 20));
		} 
		var calcpos = currentPosition[myPlayerId] - skiptime;
		myPlayer.sendEvent("SEEK", calcpos);
		return false;
	});
  
	// Go forward by 5% of length, unless that is less than 10 seconds
	playerControls.leapForward.click(function() {
		var skiptime = 10;
		if (duration[myPlayerId] / 20 > 10) {
			skiptime = Math.floor(eval(duration[myPlayerId] / 20));
		} 
		var calcpos = currentPosition[myPlayerId] + skiptime;
		myPlayer.sendEvent("SEEK", calcpos);
		return false;
	});
  
	// Volume Bar
	playerControls.volume.click(function(e) {
		// relative click position inside the div
		var x = e.pageX - Math.ceil(jQuery(this).offset().left);
		var volume = Math.round(100 * ( x / jQuery(this).innerWidth() ));
		myPlayer.sendEvent("VOLUME", volume);
	});
  
	// Volume Down
	playerControls.lessLoud.click(function() {
		if(currentMuteState[myPlayerId] == false) { myPlayer.sendEvent("MUTE"); }
		var volume = currentVolume[myPlayerId] - 10;
		volume = ( volume <= 0 ) ? 0 : volume;
		myPlayer.sendEvent("VOLUME", volume);
		return false;
	});
  
	// Volume Up
	playerControls.moreLoud.click(function() {
		if(currentMuteState[myPlayerId] == false) { myPlayer.sendEvent("MUTE"); }
		var volume = currentVolume[myPlayerId] + 10;
		volume = ( volume >= 100 ) ? 100 : volume;
		myPlayer.sendEvent("VOLUME", volume);
		return false;
	});
  
	// Mute
	playerControls.mute.click(function() {
		myPlayer.sendEvent("MUTE");
		return false;
	});
  
	// Resize
	if ( type[myPlayerId] != 'sound' ) {
		playerControls.resize.click(function() {
			if ( jQuery('#video-' + myPlayerId + '-resize').hasClass('smallSize') ) {
				// before resizing sth, everything else should be made small again
				for(i = 0; i < playerIds.length; i++) {
					if (jQuery('#video-player-' + playerIds[i]).hasClass('bigSize')) {
						resizeToSmall(playerIds[i]);
					}
				}				
				resizeToBig(myPlayerId);
			} else {
				resizeToSmall(myPlayerId);
			}
			return false;
		});
	}
  
  
	function createControls (currPlayerId) {
	
		jQuery('#' + currPlayerId).after('<div id="mediaControlPanel-' + currPlayerId + '" class="mediaControlPanel"><span class="hidden">Videosteuerung</span><ul id="mediaControls-' + currPlayerId + '" class="mediaControls clear-both"></ul></div>');
	
	    if ( type[currPlayerId] == 'sound' ) {
	       jQuery('#' + currPlayerId).css( { height: playerHeight[currPlayerId]+'px', opacity: 0} );
	       jQuery('#mediaControlPanel-' + currPlayerId).css({marginTop: '-20px'}).find('span').text('Audiosteuerung');
	    }
	    jQuery('#mediaControlPanel-' + currPlayerId).width(playerWidth[currPlayerId]+'px');
	    var controls = jQuery('#mediaControls-' + currPlayerId);
	    var controlsObject = {};
	    var defineControls = {
	      play: 	'<li class="flv-player-control flv-player-control-' + currPlayerId + '"><a id="video-' + currPlayerId + '-play" title="'+lang['play']+'" href="#" class="video-play"><span class="hidden">'+lang['play']+'</span></a></li>',
	      stop: 	'<li class="flv-player-control flv-player-control-' + currPlayerId + '"><a id="video-' + currPlayerId + '-stop" title="'+lang['stop']+'" href="#" class="video-stop"><span class="hidden">'+lang['stop']+'</span></a></li>',
	      leapBack: '<li class="flv-player-control flv-player-control-' + currPlayerId + '"><a id="video-' + currPlayerId + '-leapBack" title="'+lang['backward']+'" href="#" class="video-leapBack"><span class="hidden">'+lang['backward']+'</span></a></li>',
	      leapForward: '<li class="flv-player-control flv-player-control-' + currPlayerId + '"><a id="video-' + currPlayerId + '-leapForward" title="'+lang['forward']+'" href="#" class="video-leapForward"><span class="hidden">'+lang['forward']+'</span></a></li>',
	
	      lessLoud: '<li class="flv-player-volume-control flv-player-volume-control-' + currPlayerId + '"><a id="video-' + currPlayerId + '-lessLoud" title="'+lang['quieter']+'" href="#" class="video-lessLoud"><span class="hidden">'+lang['quieter']+'</span></a></li>',
	      volume: 	'<li class="flv-player-volume-control flv-player-volume-control-' + currPlayerId + ' video-volume" id="video-' + currPlayerId + '-volume" class=><span class="hidden"></span><div id="mediavolumeInner-' + currPlayerId + '" class="mediavolumeInner" /></li>',
	      moreLoud: '<li class="flv-player-volume-control flv-player-volume-control-' + currPlayerId + '"><a id="video-' + currPlayerId + '-moreLoud" title="'+lang['louder']+'" href="#" class="video-moreLoud"><span class="hidden">'+lang['louder']+'</span></a></li>',
	      mute: 	'<li class="flv-player-volume-control flv-player-volume-control-' + currPlayerId + '"><a id="video-' + currPlayerId + '-mute" title="'+lang['mute']+'" href="#" class="video-mute"><span class="hidden">'+lang['mute']+'</span></a></li>'
	    };
	    
	    if ( type[currPlayerId] != 'sound' ) {
	    	var resizeClass = '';
	    	if(originalplayerHeight[currPlayerId] == playerHeight[currPlayerId]) {
	    		resizeClass = 'smallSize';
	    	}
	    	
	      defineControls['resize'] = '<li class="flv-player-additional-control flv-player-additional-control-' + currPlayerId + '"><a id="video-' + currPlayerId + '-resize" title="'+lang['enlarge']+'" href="#" class="video-resize '+resizeClass+'"><span class="hidden">'+lang['enlarge']+'</span></a></li>';
	    }
	    
	    jQuery.each(defineControls, function(key, value) {
	      controls.append(value);
	      controlsObject[key] = controls.find('#video-' + currPlayerId + '-' + key);
	    });
	    
	    
	    jQuery('.flv-player-control-' + currPlayerId).wrapAll('<ul id="flv-player-control' + currPlayerId + '" class="flv-player-control"></ul>');
	    jQuery('.flv-player-volume-control-' + currPlayerId).wrapAll('<ul id="flv-player-volume-control' + currPlayerId + '" class="flv-player-volume-control"></ul>');
	    jQuery('.flv-player-additional-control-' + currPlayerId).wrapAll('<ul id="flv-player-additional-control' + currPlayerId + '" class="flv-player-additional-control"></ul>');
	    jQuery('#flv-player-additional-control-' + currPlayerId).after('<br class="clear-both" />');
	
	    //jQuery('#copyright').remove().clone().appendTo('#mediaControlPanel-' + currPlayerId).show();
	    
	    return controlsObject;
	}
  
  function createTimer (playerId) {
    jQuery('#mediaControls-' + playerId).before('<div id="mediaTimer' + playerId + '" class="mediaTimer clear-both"></div>');
    var timer = jQuery('#mediaTimer' + playerId);
    var timerObject = {};
    
    jQuery.each({
      current: '<div id="timercurrent' + playerId + '" class="timercurrent"><span class="hidden">'+lang['currentPosition']+'</span> <strong></strong></div>',
      progress: '<div id="timerprogress' + playerId + '" class="timerprogress"><div id="timerinnerProgress' + playerId + '" class="timerinnerProgress"></div></div>',
      duration: '<div id="timerduration' + playerId + '" class="timerduration"><span class="hidden">'+lang['duration']+'</span> <strong></strong></div>'
    }, function(key, value) {
      timer.append(value);
      timerObject[key] = timer.find('#timer' + key + playerId);
    });
    
    return timerObject;
  }
  
  function createPlaylist () {
    jQuery('#mediaControlPanel-' + playerId).addClass('isPlaylist').prepend('<ol id="playlist' + playerId + '" class="playlist"></ol>');
    var playlist = jQuery('#playlist');
    
    jQuery.each(player.getPlaylist(), function(i, item) {
      playlist.append('<li class="clear-both"><a href="#" id="playlistItem'+i+'" class="playlistItem">'+item.title+'</a> <span>'+formatTime(item.duration)+'</span></li>');
    });
    
    playlist.find('li').each(function(i) {
      jQuery(this)
      .hover(
        function() {
          jQuery(this).addClass('hover');
        },
        function() {
          jQuery(this).removeClass('hover');
        }
      )
      .click(function() {
        playlist.find('li').removeClass('active');
        jQuery(this).addClass('active');
        player.sendEvent("ITEM", i);
        return false;
      });
      
      if ( i == 0 ) jQuery(this).addClass('active');
      
      if ( type[playerId] == 'sound' && jQuery('.audioDownload').length ) {
        updateAudioDownload(player.getPlaylist()[0]);
      }
    });
  }
  
  function updateTimer (myPlayerId) {
    if (currentPosition[myPlayerId] != oldPosition[myPlayerId]) {
      var percent = ((currentPosition[myPlayerId] / duration[myPlayerId])*100) + '%';
      jQuery('#timerinnerProgress' + myPlayerId).css('width', percent);
      //timer.current.find('strong').text(formatTime(currentPosition[myPlayerId])); < this is how it was done before
      jQuery('#timercurrent' + myPlayerId).find('strong').text(formatTime(currentPosition[myPlayerId]));
    }
    
    oldPosition[myPlayerId] = currentPosition[myPlayerId];
  }
}

/*---------- Listeners ------------- */

// add Eventlisteners
function addListeners (myPlayer) {
  if (myPlayer) {
	  myPlayer.addModelListener('STATE', 'playListener');
	  myPlayer.addModelListener("TIME", "timeListener");
	  myPlayer.addControllerListener("VOLUME", "volumeListener"); 
	  myPlayer.addControllerListener("MUTE", "muteListener");
  } else {
    setTimeout(addListeners, 100);
  }
}

// Listen to Play
function playListener (obj) {
  currentPlayState[playerId] = obj.newstate;
  var playerId = obj['id'];
  var myControls = controls[playerId];
  var isPlay = ( currentPlayState[playerId] == 'PLAYING' || currentPlayState[playerId] == 'BUFFERING' ) ? true : false;
  
  if ( isPlay ) {
	  myControls.play
      .addClass('pause')
      .attr('title', lang['pause'])
      .html('<span class="hidden">'+lang['pause']+'</span>');
  } else {
	myControls.play
      .removeClass('pause')
      .attr('title', lang['play'])
      .html('<span class="hidden">'+lang['play']+'</span>');
  }
}

// Listen to Volumechanges
function volumeListener (obj) {
 var playerId = obj['id'];
  currentVolume[playerId] = obj.percentage;
  updateVolume(playerId);
}

// Listen to Mutechanges
function muteListener (obj) {
	var playerId = obj['id'];
	currentMuteState[playerId] = obj.state;
	var myControls = controls[playerId];
	var volumeElement = jQuery('#video-' + playerId + '-volume');
	if ( currentMuteState[playerId] == true ) {
		myControls.mute
			.addClass('unmute')
				.attr('title', lang['unmute'])
					.html('<span class="hidden">'+lang['unmute']+'</span>');
		volumeElement.attr('title', lang['volume']+': '+lang['silent']).children().addClass('muted');
	} else {
		myControls.mute
			.removeClass('unmute')
				.attr('title', lang['mute'])
					.html('<span class="hidden">'+lang['mute']+'</span>');
		volumeElement.children().removeClass('muted');
		updateVolume(playerId);
  }
}

// Listen to Timechanges
function timeListener (obj) {
  var playerId = obj['id'];
  currentPosition[playerId] = obj.position;
  // update er richtig!
  //alert('pos' + playerId + ' ' + obj.position);
}

/*---------- Helper Functions ------------- */

// Format a time in seconds
function formatTime (seconds) {
  var pos = Math.floor(seconds);
  
  var curSec = Math.floor(pos%60)+'';
  curSec = curSec.length == 1 ? '0'+curSec : curSec;
  var curMin = Math.floor(pos/60)+'';
  curMin = curMin.length == 1 ? '0'+curMin : curMin;
  
  return ( curMin + ':' + curSec );
}

function updateVolume (myPlayerId) {
  var volumeElement = jQuery('#video-' + myPlayerId + '-volume');
  var volumeText = lang['volume']+': '+ currentVolume[myPlayerId] + '%';
  volumeElement
    .attr('title', volumeText)
    .children('span').text(volumeText)
    .next('#mediavolumeInner-' + myPlayerId).css('width', currentVolume[myPlayerId] + '%');
}

// update Download Link of Audio Playlists
function updateAudioDownload (item) {
  jQuery('.audioDownload a').attr('href', item.file);
}

function resizeToBig (myPlayerId) {
	jQuery('#video-' + myPlayerId + '-resize')
		.removeClass('smallSize')
		.attr('title', lang['shrink'])
		.html('<span class="hidden">'+lang['shrink']+'</span>');
	jQuery('#video-player-' + myPlayerId).addClass('bigSize');
	var bigHeight = Math.floor(960 / (originalplayerWidth[myPlayerId] / originalplayerHeight[myPlayerId]));
	jQuery('#' + myPlayerId).css( { width: '960px', height: bigHeight+'px', verticalAlign: 'middle'} );
	var appendixHeight = originalplayerHeight[myPlayerId] + 36;
	jQuery('#video-appendix-' + myPlayerId).show().css({ width: originalplayerWidth[myPlayerId]+'px', height: appendixHeight+'px'});
	jQuery('#mediaControlPanel-' + myPlayerId).remove();
}

function resizeToSmall (myPlayerId) {
	jQuery('#video-' + myPlayerId + '-resize')
		.addClass('smallSize')
		.attr('title', lang['enlarge'])
		.html('<span class="hidden">'+lang['enlarge']+'</span>');
	jQuery('#video-player-' + myPlayerId).removeClass('bigSize');
	jQuery('#' + myPlayerId).css( { width: originalplayerWidth[myPlayerId]+'px', height: originalplayerHeight[myPlayerId]+'px'} );
	jQuery('#video-appendix-' + myPlayerId).hide();
	jQuery('#mediaControlPanel-' + myPlayerId).remove();
}

