// vim: ts=4 sw=4 ai ft=javascript

	// MooTools version
	window.addEvent('domready', init);
	
	var playlist = { };

	var vid = new Object();
	var video_width  = 394;

	var fetchPrograms, fetchAltPrograms;
	var playbar_slider, volumebar_slider;
	var player;
	var restricted = false;
	var enabled = false;

	function init() {

		// Depending on session show the appropriate advert
		if(restricted) {
			$$('#ad_noniinet').setStyle('display','block');
			$$('#ad_iinet').setStyle('display','none');
		}	

		//$$("#current_play_holder").setHTML('');

		player = new Player();

		fetch_stream("INTRO");
		fetchPrograms    = new Json.Remote("/cgi-bin/games.cgi", { method: "get", onComplete : reload_programs } ).send();
	}
	
	function reload_programs(data)
	{
		playlist.main_programs = data;
		var list = $$('#mainprograms');
		
		var str = "";
		var showtop;

		for(var idx=0; idx < data.length; idx++)
		{
			var item = playlist.main_programs[idx];
			if(!item)
				continue;
			
			if(!showtop && item.media_found)
				showtop = item;

			var rowclass = (idx % 2 ? 'odd' : 'even');
			if(player && player.stream_id == idx)
				rowclass += " active";

			var click = " onclick=\"return false\"";
			if(!item.restricted && item.media_found)
				click = " onclick=\"fetch_stream('" + playlist.main_programs[idx].id + "'); return false\" ondblclick=\"void(0)\"";

			str  += "<li id=\"video_" + idx + "\" class=\"" + rowclass + "\">" +
        			"<a href=\"#\"" + click + ">" +
        			"<img src=\"/team_icons/sml/" + item.icon + "\" class=\"thumb\" height=\"39\" width=\"39\" />" +
        			"<p class=\"title\">" + item.title + "</p>" +
        			"<p class=\"meta\">" +
        			"<span>" + item.date + " " + item.kickoff + "</span>Kick off at:<br>" +
        			"<span>" + (item.media_found ? "<span class=\"available\">NOW</span>" : item.date) + "</span>Available:</p>" +
        			"</a>" +
        			"</li>\n"; 
		}

		if(showtop && !restricted)
			populateHeader(showtop);

		list.setHTML( str );

		// Refresh list every 5 mins
		//setTimeout("fetchPrograms.send()", 5 * 60000);
	}
	
	function fetch_stream(id)
	{
		var ts = new Date();
		if(playlist.main_programs && playlist.main_programs[id]) {
			populateHeader(playlist.main_programs[id]);
			$$('#player_action').setHTML("Connecting");
		}
		player.stop();
		fetchGame = new Json.Remote("/cgi-bin/games.cgi?play=" + id + "&_ts=" + ts.valueOf(), { method: "get", onComplete: get_play_stream } ).send();
	}
	
	function get_play_stream(data)
	{
		if(data) {

			// Enable player controls
			if(player.isControllable && !enabled) {
				enabled = true;
				// Create and set triggers for the player controler's slider bars and buttons
				$('ctrl_stop').addEvent('click',  function() { player.stop() });
				$('ctrl_pause').addEvent('click', function() { player.playPause() });
				$('ctrl_ffwd').addEvent('click',  function() { player.ffwd() });
				$('ctrl_rewind').addEvent('click',  function() { player.rewind() });
				$('ctrl_screen').addEvent('click',  function() { player.fullscreen() });
				$('ctrl_mute').addEvent('click',  function() { player.mute() });

				// Create and set triggers for the player controler's slider bars
				playbar_slider   = new Slider($('ctrl_playbar'),$('play_knob'), { steps: 100, offset: 0, onComplete: function(pos) { player.setPosition(pos); } });
				volumebar_slider = new Slider($('ctrl_volume'),$('volume_knob'), { steps: 100, offset: 0, onChange: function(vol) { player.volume(vol); } });
			}

			populateHeader(data);

			$$("#video_" + player.stream_id).removeClass("active");
			$$("#video_" + data.id).addClass("active");

	    	render_player(data);
	    }
	}

	function populateHeader(data)
	{
		$$("#top_play_title").setHTML( data.title );
		if(data.icon) {
			$$("#current_play_holder").setStyle('display','none');
			$$("#current_playbox").setStyle('display','block');
			$$("#playbox_title").setHTML(data.title);
			$$("#playbox_date").setHTML(data.date);
			$$("#playbox_time").setHTML(data.kickoff);
			$$("#playbox_place").setHTML(data.place);
			$$("#current_playbox img").setProperty("src", "/team_icons/" + data.icon);
		}
	}

	function render_player( data )
	{

		var ts = new Date();
		var stream = data.src
		var title  = data.title;

		var type_attr   = window.ActiveXObject ? 'application/x-oleobject' : 'video/x-ms-wmv';
		var stream_attr = window.ActiveXObject ? 'url' : 'src';
		var classid     = window.ActiveXObject ? 'classid="CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6" ' : '';
		var ui_mode     = window.ActiveXObject ? 'none' : 'full';
		video_height    = window.ActiveXObject ? 298 : 375;
		if(data.loop) 
			video_height    = window.ActiveXObject ? 288 : 357;

		var player_plugin = '<object id="video" width="' + video_width + '" ' +
							'height="' + video_height + '" ' +
							classid + 
							'type="' + type_attr + '">\n'+
							'<param name="' + stream_attr + '" value="' + stream + '">\n'+
							'<param name="title" value="'+title+'">\n'+
							'<param name="SendPlayStateChangeEvents" value="True">\n'+
							'<param name="AutoStart" value="True">\n'+
							'<param name="uiMode" value="' + ui_mode +'">\n'+
							'<param name="PlayCount" value="' + (data.loop ? 999 : 1) + '">\n'+
							'<param name="ShowControls" value="1">\n'+
							'<param name="ShowStatusBar" value="1">\n'+
							'<param name="ShowDisplay" value="0">\n'+
							'<param name="StretchToFit" value="true">\n'+
							'<param name="AutoSize" value="0">\n'+
							'<param name="enableContextMenu" value="true">\n'+
							'<embed width="' + video_width + '" height="' + video_height + '" '+
							'	enablejavascript="true" '+
							'	scretchtofit="true" '+
							'	enablecontextmenu="false" '+
							'	showcontrols="1" '+
							'   showstatusbar="0" '+
							'	showdisplay="0" '+
							'	autoplay="true" '+
							'	name="video" '+
							'	src="' + stream + '" '+
							'	pluginspage="http://www.microsoft.com/Windows/MediaPlayer/" '+
							'	type="application/x-mplayer2" />'+
							'</object>\n';

		$$('#player_container').setHTML( player_plugin )
		player.play(data.id, document.getElementById('video'));

		if(!player.isControllable) {
			$$('#player_action').setStyle('display','none');
			$$('#player_controls').setStyle('display','none');
		}
	}

	var Player = new Class({
		play:	function(id, plugin)
				{
					this.playing = true;
					this.stream_id = id;
					
					this.setMediaPlugin(plugin);
					
					this._setStatus('playing');
				},

		setMediaPlugin:
				function(plugin)
				{
					if(plugin && plugin.settings) {
						if(this.plugin)
							this.stop();

						$$('#player_action').setHTML("Loading");
						this.plugin = plugin;
						this.volume(plugin.settings.volume);
						
						$$('#ctrl_playbar').setStyle('display','block');
						$$('#player_action').setHTML("Playing");
						
						this.displayPosition.periodical(500,this);
						this.updatePlaySliderPosition.periodical(1000,this);
					}
				},

		/* Display the current play position time information */
		displayPosition:
				function()
				{
					/* Formats the currentPosition value in hh::mm:ss, dropping hh if hh is 0 */
					$('player_setting').setHTML(this._convertSecsToTime(this.plugin.controls.currentPosition) + " / " + 
												this._convertSecsToTime(this.plugin.currentMedia.duration));
				},

		/* Unlike displayPosition this sets the slider position based on current position, but should not trigger the slider set event */
		updatePlaySliderPosition:
				function()
				{
					if(this.plugin && this.isControllable && this.plugin.currentMedia.duration > 0) {
						this._ignoreSetPosition = true;
						playbar_slider.set(parseInt(this.plugin.controls.currentPosition / this.plugin.currentMedia.duration * 100));
						this._ignoreSetPosition = false;
					}
				},

		/* Format param seconds into hh::mm:ss, drops hh if hh is 0 */
		_convertSecsToTime:
				function(ss)
				{
					var hh = parseInt(ss / 3600);
					ss = ss - (hh * 3600);
					var mm = parseInt(ss / 60);
					ss = parseInt(ss - (mm * 60));
					
					if(hh == 0) hh = ""; 
					else if(hh < 10) hh = "0" + hh + ":";
					if(mm < 10) mm = "0" + mm;
					if(ss < 10) ss = "0" + ss;
					return hh + mm + ":" + ss;
				},

		/* Triggered events by the slider knob to set the new play stream position */
		setPosition: 
				function (step)
				{
					//alert("volume plugin[" + this.plugin + "] isControllable[" + this.isControllable + "]");
					if(this.plugin && this.isControllable && ! this._ignoreSetPosition) {
						this.plugin.controls.currentPosition = this.plugin.currentMedia.duration * step / 100;
						this.displayPosition();
					}
				},

		/* Triggered events by the slider knob to set the new volume level */
		volume: 
				function (volume)
				{
					if(this.plugin && this.isControllable) {
						volumebar_slider.set(this.plugin.settings.volume);

						// If its muted, unmute
						if(this.plugin.settings.mute)
							this.mute();

						this.plugin.settings.volume = volume;
						$('volsetting').setHTML(this.plugin.settings.volume + "%");
					}
				},

		/* Triggered events by the slider knob to set the new volume level */
		mute: 
				function ()
				{
					if(this.plugin && this.isControllable) {
						this.plugin.settings.mute = !this.plugin.settings.mute;
						if(this.plugin.settings.mute) {
							$('volsetting').setHTML("");
							//$('ctrl_mute').setStyle("background","url(images/ctrl-volume-mute.png) no-repeat");
							$('volume_items').addClass('muted');
						}
						else {
							$('volsetting').setHTML(this.plugin.settings.volume + "%");
							//$('ctrl_mute').setStyle("background","url(images/ctrl-volume.png) no-repeat");
							$('volume_items').removeClass('muted');
						}
					}
				},

		_setStatus:
				function(status)
				{
					$$("#player_controls").removeClass(this.status);
					$$("#player_controls").addClass(status);
					this.status = status;
				},

		stop:
				function()
				{
					if(this.isControllable && this.plugin) {
						this.playing = false;
						this._setStatus('stopped');
						this.plugin.controls.stop();
						$$('#player_action').setHTML(this.plugin.status);
					}
				},

		playPause:
				function ()
				{
					if(this.status) {

						if(!this.playing) {
							this.playing = true;
							this._setStatus('playing');
							this.plugin.controls.play();
							$$('#player_action').setHTML("Playing");
						}
						else {
							this.playing = false;
							this._setStatus('paused');
							this.plugin.controls.pause();
							$$('#player_action').setHTML(this.plugin.status);
						}

					}
				},

		ffwd:
				function ()
				{
					if(this.status && this.isControllable) {
						this.playing = false;
						this._setStatus("ffwd");
						$$('#player_action').setHTML('Fast Forward');
						this.plugin.controls.fastForward();
						$$('#player_action').setHTML(this.plugin.status);
					}
						
				},

		rewind:
				function ()
				{
					if(this.status && this.isControllable) {
						this.playing = false;
						this._setStatus("rewind");
						$$('#player_action').setHTML('Rewind');
						this.plugin.controls.fastReverse();
						$$('#player_action').setHTML(this.plugin.status);
					}
				},

		fullscreen:
				function ()
				{
					if(this.isControllable) {
						if(!this.playing) 
							this.playPause();

						alert("Switching to Fullscreen.\nHit 'Escape' to exit fullscreen");
						this.plugin.fullScreen = true;
					}
				},

		playing: false,
		stream_id: null,
		plugin: null,
		isControllable: ($type(window.ActiveXObject) != false),
		_ignoreSetPosition: false,
		status: null
	});

