﻿
/* Variables */
var ScriptBus_Values = new Array();
var ScriptBus_Debug = false;

/* Utility */

function ScriptBus_TestFunction()
{
	ScriptBus_Trace("ScriptBus Test Successful");
}

function ScriptBus_Trace(message)
{
	if(!ScriptBus_Debug)
		return;

	var traceWindow = $get('ScriptBusTrace');
	
	if(traceWindow != null)
		traceWindow.innerHTML = String.format("<div style='padding:4px;'><i><b>{0}</b></i>&nbsp;{1}</div>", new Date().format("hh:mm tt"), message) + traceWindow.innerHTML;
	else
		alert(message);
}

function ScriptBus_ClearTrace()
{
	if(!ScriptBus_Debug)
		return;

	var traceWindow = $get('ScriptBusTrace');
	
	if(traceWindow != null)
		traceWindow.innerHTML = "";
}

/* Generic Command */

function ScriptBus_Command(commandName, commandArgument)
{
	ScriptBus_Trace("Command: " + commandName + ", " + commandArgument);
	ScriptBus_Postback("Command|" + commandName + "|" + commandArgument);
}

/* Play Request */

function ScriptBus_PlayRequest(asset)
{
	ScriptBus_Trace("Play Request: " + asset);
	ScriptBus_Postback("PlayRequest|" + asset);
}

/* Playback */

function ScriptBus_PlayStart(token, asset)
{
	ScriptBus_Trace("PlayStart: " + token + ", " + asset);
	ScriptBus_PlayStatus(token, asset, 0);
}

function ScriptBus_PlayError(token, asset, error)
{
	ScriptBus_Trace("PlayError: " + token + ", " + asset + ", " + error);
	ScriptBus_Postback("PlayError|" + token + "|" + asset + "|" + error);
}

function ScriptBus_PlayStatus(token, asset, timeCode)
{
	var maxTimeCodeKey = token + '_' + asset + '_maxtimecode';
	var maxTimeCode = (ScriptBus_Values[maxTimeCodeKey] != null) ? ScriptBus_Values[maxTimeCodeKey] : -1.0;
	if(maxTimeCode < timeCode)
	{
		ScriptBus_Values[maxTimeCodeKey] = timeCode;
		ScriptBus_Trace("PlayStatus: " + token + ", " + asset + ", " + timeCode + ", Modded");
		
		ExternalClientService.RecordAssetViewing(token, asset, timeCode, ScriptBus_OnServiceSuccess, ScriptBus_OnServiceFailed);
	}
}

function ScriptBus_PlayComplete(token, asset, duration)
{
	ScriptBus_Trace("PlayComplete: " + token + ", " + asset + ", " + duration);
	ScriptBus_PlayStatus(token, asset, duration);
	ScriptBus_Postback("PlayComplete|" + token + "|" + asset);
}

function ScriptBus_OnServiceSuccess(result, eventArgs)
{
	ScriptBus_Trace("Service Success: " + result);
}

function ScriptBus_OnServiceFailed(error)
{
	ScriptBus_Trace("Service Error: " + error.get_message());
}

/* Timed Play */

function ScriptBus_TimedPlayStart(token, asset, duration)
{
	ScriptBus_PlayStart(token, asset);
	
	ScriptBus_Values[token + '_' + asset + '_timecode'] = 0.0;
	var statusFunction = 'ScriptBus_TimedPlayStatus(\'' + token + '\', \'' + asset + '\')';
	ScriptBus_Values[token + '_' + asset  + '_status'] = setInterval(statusFunction, 5000); 
	
	var completeFunction = 'ScriptBus_TimedAssetComplete(\'' + token + '\', \'' + asset + '\', ' + duration + ')';
	ScriptBus_Values[token + '_' + asset  + '_complete'] = setTimeout(completeFunction, duration * 1000); 
}

function ScriptBus_TimedPlayStatus(token, asset)
{
	var timecode = ScriptBus_Values[token + '_' + asset + '_timecode'] + 5.0;
	ScriptBus_Values[token + '_' + asset + '_timecode'] = timecode;
	ScriptBus_PlayStatus(token, asset, timecode)
}

function ScriptBus_TimedAssetComplete(token, asset, duration)
{
	clearInterval(ScriptBus_Values[token + '_' + asset  + '_status']);
	clearTimeout(ScriptBus_Values[token + '_' + asset  + '_complete']);
	
	ScriptBus_PlayComplete(token, asset, duration)
}

// Notify the ScriptManager that this is the end of the script.
if (typeof(Sys) !== 'undefined') Sys.Application.notifyScriptLoaded();



if(typeof(Sys)!=='undefined')Sys.Application.notifyScriptLoaded();