var timer;
var count = 0;

var startTime = 0;
var bufferPeriod = 3000;

function calcTimings() {

	var transcript = document.getElementById('transcript');
	var sections = transcript.getElementsByTagName('div');

	for ( var i=0; i<sections.length; i++ ) {
		var s = sections[i];

		var timeCode = s.id;
		var timeParts = timeCode.split(':');

		var timeMillis = (timeParts[2] + (timeParts[1]*60) + (timeParts[0]*3600)) * 1000;

		s.setAttribute('millis', timeMillis)
	}
}

function getTranscriptByTime(t) {

	var bestSection;
	var bestSectionMillis = -1;

	var transcript = document.getElementById('transcript');
	var sections = transcript.getElementsByTagName('div');

	var section;
	var millis;

	for ( var i=0; i<sections.length; i++ ) {

		section = sections[i];
		millis = section.getAttribute('millis');

		if ( (millis <= t) && (millis > bestSectionMillis) ) {
			bestSection = section;
		}
	}

	return bestSection;
}

function showSlide(section) {

	if ( section == null ) {
		return;
	}

	var frame = document.getElementById('slide');
	var frameSlide = frame.getAttribute('src');

	var sectionHref = section.getElementsByTagName('a');

	if ( sectionHref.length == 0 ) {
		return;
	}

	var sectionSlide = sectionHref[0].getAttribute('href');

	if ( frame.getAttribute('initialised') == null || frameSlide != sectionSlide ) {
		frame.setAttribute('src',sectionSlide);

		// Set this so Firefox is forced to load frame content on page load!
		frame.setAttribute('initialised',true);
	}
}

var activeX = true;
var mediaPlayerPosition;

function tick() {

	count ++;

	var t = new Date() - startTime - bufferPeriod;

	if ( activeX ) {

		// This may generate a javascript warning in Firefox ... but is ok.
		var mediaPlayer = document.getElementsByName('mediaPlayer')[0];

		try {
			var mediaPlayerPosition = mediaPlayer.controls.currentPosition;
			t = mediaPlayerPosition * 1000;
		}
		catch (e) {
			activeX = false;
		}
	}

	var section = getTranscriptByTime(t);
	showSlide(section);

	var sectionInfo = "section == NULL";
	if ( section != null ) {
		sectionInfo = section.id;
	}

	if ( timer != null ) {
		clearTimeout(timer);
	}

	timer = setTimeout("tick()", 1000);
}

function initTimings() {

	startTime = new Date();

	calcTimings();

	tick();
}

function param(name,value,tag) {

	if ( tag ) {
		return "<param name='" + name + "' value='" + value + "'>\n";
	}
	else {
		return name + "='" + value +"'\n";
	}
}

function mediaPlayer(filename, width, height) {

	// Allow 70 pixels height for video player controls
	height += 70;

	var s = "";

	s += "<OBJECT ";
	s += param('id','mediaPlayer');
	s += param('width', width);
	s += param('height', height);

	// http://www.w3schools.com/media/media_playerref.asp
	// http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmplay10/mmp_sdk/differencesbetweentheobjectmodels.asp

	// Windows Media Player 6.4
	s += param('classid','CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6');
	s += param('type','application/x-oleobject');
	s += ">\n";

	// MediaPlayer 6 Params
	s += param('animationatStart','true',true);
	s += param('transparentatStart','true',true);
	s += param('autoStart','true',true);
	s += param('showControls','true',true);
	s += param('loop','false',true);

	// MediaPlayer10 Params
	s += param('URL',filename,true);
	s += param('SendPlayStateChangeEvents','true',true);

	s += "<EMBED ";
	s += param('type','application/x-mplayer2');
	s += param('pluginspage','http://microsoft.com/windows/mediaplayer/en/download/');
	s += param('id','mediaPlayer');
	s += param('name','mediaPlayer');
	s += param('width',width);
	s += param('height',height);
	s += param('displaysize','4');
	s += param('autosize','-1');
	s += param('bgcolor','darkblue');
	s += param('showcontrols','false');
	s += param('showtracker','-1');
	s += param('showdisplay','0');
	s += param('showstatusbar','-1');
	s += param('videoborder3d','-1');
	s += param('src',filename);
	s += param('autostart','true');
	s += param('designtimesp','5311');
	s += param('loop','false');

	s += "</EMBED>\n";
	s += "</OBJECT>\n";

	return s;
}

function writeMediaPlayer(filename, width, height) {

	var s = mediaPlayer(filename, width, height);
	var e = document.getElementById('video');
	e.innerHTML = s;

	initTimings();
}
