
/*
	Web Player
*/

// Initialise Variables

var slider;
var totalTime = 0;
var startTime = 0;
var playerLoaded = false;

// Player Variables
PlayerWidth = 450;
PlayerHeight = 338;

var totalFrames = 0;
var currentTotalFrames = 0;
var frameRate = 0;
var frameIndex = 0;
var forceTracking = true;
var previousPlaybackStatus = "";
var defaultVolume = 100;

/*
   Initialise -
   sets up all the 'cool' player ui elements then continues the
   standard player loading process
*/

function initialiseWebPlayer()
{
	// Initialise Sliders
	initialiseVolume(100);
	initialiseTracker();

	// Set Player Status Controller
	setInterval('stateActions()', 500);

	// Set Times
	document.getElementById('wpCurrentTime').innerHTML = buildTime(startTime);
	document.getElementById('wpTotalTime').innerHTML = buildTime(totalTime);

	addEvent('mouseout', document.getElementById('wpFullScreen'), mouseoutHandler, true);
	addEvent('mouseover', document.getElementById('wpFullScreen'), mouseoverHandler, true);
	addEvent('mousemove', document.getElementById('wpFullScreen'), mouseoverHandler, true);
}

// does similar prep-work to insertVideoPlayer in api.js - basically
// writes player div and helper applet tags to html body then attaches
// event handlers to be invoked when the page has finished loading

function insertWebPlayer(immediatePlayerLoad)
{
	insertInspectorAppletTag();

	// create the dom element the player will be put into

	document.write("<DIV id = VideoPlayerSection></DIV>");

	addEvent("load", window, initialiseWebPlayer, true);

	if(immediatePlayerLoad)
		addEvent("load", window, videoPlayerLoader, true);

	addEvent("unLoad", window, videoPlayerUnloader, true);
}

function initialiseTracker()
{
	// Initialise Tracking Slider
	tracker = new Slider("wpTrackerSlider", "horizontal", 100, 244, 23);

	// Set Slider Handle
	tracker.setHandle('images/wp/handle.gif', 23, 23);
	tracker.setBackground('images/wp/trackerBackground.png');

	// Set tracker Handlers
	tracker.onChange = setTrackerPosition;
	tracker.onSet = moveTo;

	// Initialise Value
	tracker.setPosition(0);

	// Show Tracker Slider
	tracker.showDisabled();
}

// Initialise Volume Slider
function initialiseVolume(defaultVolume)
{

	// Initialise Volume Slider
	volume = new Slider("wpVolumeSlider", "vertical", 100, 23, 70, -1);

	// Set Slider Handle
	volume.setHandle('images/wp/handle.gif', 23, 23);

	// Set Change Handler
	volume.onChange = setVolume;

	// Initialise Value
	volume.setPosition(100);

	// Show Slider
	volume.showEnabled();
	setTimeout("hideVolume()", 0);
}

// Start Video
function startVideo(videoURL)
{
	var instanceOptions = new PlayerInstanceOptions();

	instanceOptions._url = videoURL;
	instanceOptions._seekable = true;
	instanceOptions._pauseBarDisplay = 1;
	instanceOptions._showSplash = false;
	instanceOptions._backgroundColour = "0x000000";
	instanceOptions._backgroundURL = BasePath + "/images/wp/wpbackground.jpeg";

	if(playerLoaded)
		instanceOptions.playStream();
	else {
		instanceOptions.playerLoaderAutoPlay();
		getRefToDiv("PreloadMessage").style.display = "block";
	}

	tracker.showEnabled();
}

function setTrackerPosition(value)
{
	if (playerLoaded) {

		// Pause
		pausePressed();

		// Calculate, update Time Index
		timeIndex = totalTime * value;
		document.getElementById('wpCurrentTime').innerHTML = buildTime(timeIndex);
	}
}

function moveTo(value)
{
	if (playerLoaded) {
		// Calculate Frame Index
		frameIndex = totalFrames * value;

		// allow for start frame offset
		frameIndex += getPlayerObject().getStartFrame();

		// Set Current Frame
		getPlayerObject().setCurrentFrame(frameIndex);

		if (!realPause) {
			document.getElementById('wpPlayButton').style.backgroundImage = "url(images/wp/pauseButton_enabled.jpg)";

			// Resume
			resumePressed();
		}
		else {
			document.getElementById('wpPlayButton').style.backgroundImage = "url(images/wp/playButton_enabled.jpg)";
		}
	}
}

// Convert to Float
function toFloat(val)
{
	return parseFloat(val + "");
}

// Play Handler
function playHandler(object, url)
{
	// Get Current Status
	if (playerLoaded) {
		playbackStatus = getPlayerObject().getPlaybackStatus();

		// Switch Based on Status
		switch(playbackStatus) {
			// Playing
			case 1:
				realPause = true;
				pausePressed();
				break;

			// Paused
			case 2:
				realPause = false;
				resumePressed();
				break;

			// Buffering
			case 3:
				break;

			// Default
			default:
				startVideo(url);
				initialiseTracker();
				forceTracking = true;
				tracker.enable();
			}
	}
	else {
		// player not loaded, start the player object
		startVideo(url);
		forceTracking = true;
	}
}

// Stop Handler
function stopHandler(object)
{
	if (playerLoaded) {
		document.getElementById('wpPlayButton').style.backgroundImage = "url(images/wp/playButton_enabled.jpg)";
		forceTracking = false;
		stopPressed();
		resetPlayer();
	}
}

// Calculate Time
function buildTime(seconds)
{
	if(!isNaN(seconds)) {
		seconds = parseInt(seconds);

		hours = Math.floor(seconds / 3600);
		seconds %= (60 * 60);
		minutes = Math.floor(seconds / 60);
		seconds %= 60;
		seconds = parseInt(seconds);
		(hours < 10) 	? hps = '0' : hps = '';
		(minutes < 10) 	? mps = '0' : mps = '';
		(seconds < 10) 	? sps = '0' : sps = '';
		return hps+hours+':'+mps+minutes+':'+sps+seconds;
	}
}

function setVolume(value)
{
	if (playerLoaded) {
		getPlayerObject().setVolume(value * 100);
	}
}

function customEOSHandler()
{
	resetPlayer();
}


// Perform Actions Based on Player State
function stateActions()
{
	playbackStatus = -1;

	// Get Current Playback Status
	if (playerLoaded) {
		try {
			playbackStatus = getPlayerObject().getPlaybackStatus();
		}
		catch(e) {
		}
	}
	else {
		return;
	}

	// Has Change Occurred
	if (previousPlaybackStatus != playbackStatus) {

		// Switch Based on Status
		switch(playbackStatus) {
			// Initializing
			case -1:
				break;

			// Idle
			case 0:
				resetPlayer();
				break;

			// Playing
			case 1:

				getPlayerObject().setShowSplashScreen(false);
				getPlayerObject().setSeekable(true);
				getPlayerObject().setPauseBarDisplay(1);

				currentTotalFrames = getTotalActiveFrames();

				if (totalFrames != currentTotalFrames) {
					// Get Total Frames
					totalFrames = currentTotalFrames;
					// Get Current Frame Rate
					frameRate = toFloat(getPlayerObject().getFrameRate());
					// Get Total Time
					totalTime = toFloat(totalFrames) / frameRate;

					// Update Div
					document.getElementById('wpTotalTime').innerHTML = buildTime(totalTime);
					// Enable Tracker
					tracker.enable();
				}

				// Set Image
				document.getElementById('wpPlayButton').style.backgroundImage = "url(images/wp/playButton_enabled.jpg)";

				// Calculate Current Time
				currentTime = toFloat(getCurrentActiveFrame()) / frameRate;

				// Update Div
				document.getElementById('wpCurrentTime').innerHTML = buildTime(currentTime);
				// Hide Buffering Message
				hideBuffering();
				break;

			// Paused
			case 2:
				document.getElementById('wpPlayButton').style.backgroundImage = "url(images/wp/playButton_enabled.jpg)";
				hideBuffering();
				break;

			// Buffering
			case 3:
				// Show Buffering Message
				showBuffering();
				break;

			// Loading
			case 4:
				break;

			// Unknown
			case 5:
				break;
			// Default
			default:
				break;
		}

		// Set Previous Status
		previousPlaybackStatus = playbackStatus;
		return;
	}

	// Interval
	switch(playbackStatus)	{

		// Playing
		case 1:
			// Update Tracker Position / Time

			// total frames can change while playing, eg live stream
			currentTotalFrames = getTotalActiveFrames();

			if (totalFrames != currentTotalFrames) {
				// Get Total Frames
				totalFrames = currentTotalFrames;
				// Get Current Frame Rate
				frameRate = toFloat(getPlayerObject().getFrameRate());
				// Get Total Time
				totalTime = toFloat(totalFrames) / frameRate;

				// Update Div
				document.getElementById('wpTotalTime').innerHTML = buildTime(totalTime);
			}

			// Calculate Current Time
			currentTime = toFloat(getCurrentActiveFrame()) / frameRate;

			document.getElementById('wpCurrentTime').innerHTML = buildTime(currentTime);
			if (document.getElementById('wpPlayButton').style.backgroundImage  != "url(images/wp/pauseButton_enabled.jpg)") {
				document.getElementById('wpPlayButton').style.backgroundImage = "url(images/wp/pauseButton_enabled.jpg)";
			}

			realPause = false;
			// Tracking Enabled
			if (forceTracking && totalFrames>0) {
				// Move Tracker
				tracker.s.style.left = (parseInt(tracker.width) - parseInt(tracker.handleWidth)) * getCurrentActiveFrame() / totalFrames + "px";
			}
			break;

		case 2:
			if (document.getElementById('wpPlayButton').style.backgroundImage  != "url(images/wp/playButton_enabled.jpg)") {
				document.getElementById('wpPlayButton').style.backgroundImage = "url(images/wp/playButton_enabled.jpg)";
			}
			break;
	}
}

function getCurrentActiveFrame()
{
	return getPlayerObject().getCurrentFrame() - getPlayerObject().getStartFrame();
}

function getTotalActiveFrames()
{
	return getPlayerObject().getEndFrame() - getPlayerObject().getStartFrame();
}

function resetPlayer()
{
	// Reinitialise Tracker
	initialiseTracker();

	// hide buffering
	setTimeout("hideBuffering()", 0);

	// Reset Timer
	document.getElementById('wpCurrentTime').innerHTML = buildTime(0)
}

function hideBuffering()
{
	document.getElementById('wpBuffering').style.visibility = "hidden";
}

function showBuffering()
{
	document.getElementById('wpBuffering').style.visibility = "visible";
}

function showVolume()
{
	document.getElementById('wpVolumeSlider').style.visibility = "visible";
	document.getElementById('wpVolumeControl').style.visibility = "hidden";
}

function hideVolume()
{
	document.getElementById('wpVolumeSlider').style.visibility = "hidden";
	document.getElementById('wpVolumeControl').style.visibility = "visible";
}

function mouseoverHandler(e) {

	if (!e) {
		e=window.event;
	}

	if (!e.target) {
		target = e.srcElement;
	} else {
		target = e.target;
	}

	if (target.className == "tooltip") {
		showTooltip(e, target);
	}
}

function mouseoutHandler(e) {

	if (!e) {
		e=window.event;
	}

	if (!e.target) {
		target = e.srcElement;
	} else {
		target = e.target;
	}

	if (target.className == "tooltip") {
		hideTooltip(e, target);
	}
}

function showTooltip(e, target) {

	if (target.getAttribute('tooltip')) {

		if (!document.getElementById('tooltip')) {
			tooltip = document.createElement('div');
			tooltip.id = "tooltip";
		}

		tooltip.innerHTML = target.getAttribute('tooltip');
		tooltip.style.position = "absolute";
		tooltip.style.left = e.clientX + 15 + "px";
		tooltip.style.top = e.clientY + 15 + "px";

		document.getElementsByTagName('body')[0].appendChild(tooltip);
	}
}

function hideTooltip(e, target) {

	if (document.getElementById('tooltip')) {
		document.getElementsByTagName('body')[0].removeChild(document.getElementById('tooltip'));
	}
}

function onPlayerLoadComplete()
{
	playerLoaded = true;
}

function customEOSHandler()
{
	document.getElementById('wpPlayButton').style.backgroundImage = "url(images/wp/playButton_enabled.jpg)";
}

function onPlayerExited()
{
	document.getElementById('wpPlayButton').style.backgroundImage = "url(images/wp/playButton_enabled.jpg)";
}

