var lastRequestedTime = 0;
var timeStampTimer = null;
var currentTimestampBase = 0;
var archiveTicker = 0;
var lastIndexExecuted = -1;
var playerFrame = null;
var activetimeStamp = 0;
var activeEndTimeStamp = 0;
var lastQATimePoint = 0;
var initialLoad = 0;
var initDiaryString = null;
var playerFrame = "";
var showSurvey = 0;
var surveyURL = null;
var hLinkWebcastObjName = "_hlinkWebcast";

//TODO: This has to be changed to value that come from the new IFrame
//sessionID = "{D732D4CD-993C-4CFE-9AE8-E160233B5E30}";
//ticketID =  "{D732D4CD-993C-4CFE-9AE8-E160233B5E30}";
window.onerror = scriptErrorHandler;
function scriptErrorHandler(evnt)
{
    return true;
}

function command(systemTimeStamp, aType, aSubType, aControlName, aControlValue, aDetail)
{
	this.sts = systemTimeStamp;
	this.type = aType;
	this.subType = aSubType;
	this.controlName = aControlName;
	this.controlValue = aControlValue;
	this.detail = aDetail;
	this.executed = false;
	return this;
}

var commandList = new Array(new command(-1,'none','none','none','none','none'));
commandList.shift();

function addCommandsToList( newCommands )
{
  newArray = commandList.concat(newCommands);
  commandList = newArray;
}

function interpolateTimestampEvent( timestamp )
{
	try
	{
		var timestamp = new Number(timestamp);

		if((timestamp == Number.NaN) || (timestamp < 0))
			return;

		if(!isNaN(timestamp)  && (timestamp > 0) )
		{
		  if(timeStampTimer != null)
			{
				clearInterval(timeStampTimer);
				timeStampTimer = null;
			}
		  // reset current
		  currentTimestampBase = timestamp;
		  archiveTicker = timestamp;
			timeStampTimer = setInterval('ExecuteTimeStamp()', 1000);
			ExecuteTimeStamp();
		}
	}
	catch(er)
	{
	}
}

function ClearTimer()
{
    if(timeStampTimer != null)
	{
		clearInterval(timeStampTimer);
		timeStampTimer = null;
	}
}

function ExecuteTelephoneCommands()
{
	try
	{
		for( var i = 0; i < commandList.length; i++)
		{
			if (i > lastIndexExecuted)
			{
				if(playerFrame == "loaded")
				{
					doPlayerAction(commandList[i]);
					lastIndexExecuted = i;				
				}
			}  									
		}
	}
	catch(er)
	{
	
	}		
}

function ExecuteArchiveTimeStamp()
{
	try
	{
		var timestamp = currentTimestampBase + new Number(archiveSlideOffset());
											
											
		for( var i = 0; i < commandList.length; i++)
		{
			if ((commandList[i].sts > activetimeStamp &&
				 (commandList[i].sts < activeEndTimeStamp || activeEndTimeStamp == 0)&& 
				 commandList[i].sts <= (timestamp - 5)) &&
				 currentTimestampBase < (archiveTicker + 4) &&
				 (i > lastIndexExecuted))
			{
				if(playerFrame == "loaded")
				{
					doPlayerAction(commandList[i]);
					lastIndexExecuted = i;
					//activetimeStamp = commandList[i].sts;
				}
			}  
		}									
		currentTimestampBase = currentTimestampBase + 1;
	}
	catch(er)
	{
	
	}			
}

function ExecuteTimeStamp()
{
	try
	{
		ExecuteArchiveTimeStamp();
	}
	catch(er)
	{
	
	}			
}

function setPlayerInitialState(initDiary)
{
	try
	{
		if(initDiaryString == null)
		{
			initDiaryString = initDiary;
		}
		if(playerFrame == "loaded")
		{
			arrInitDiary = initDiaryString.split("~~");
			for( var i = 0; i < arrInitDiary.length - 1; i++)
			{
				var newList = new command(0,arrInitDiary[i].split("~")[0],arrInitDiary[i].split("~")[1],'none',arrInitDiary[i].split("~")[3],arrInitDiary[i].split("~")[2]);
				doPlayerAction(newList);
			}
			initialLoad = 1;
			lastRequestedTime = parseInt(arrInitDiary[arrInitDiary.length - 1]) + 1;
		}
		else
		{
			setTimeout('callPlayerInitialState()',500);
		}
	}
	catch(er){}
}

function callPlayerInitialState()
{
	setPlayerInitialState(initDiaryString);
}

function UpdateStatus(LayerName,hrefLink,txtStatus)
{
	var objBuffer = getHrefLink(LayerName,hrefLink);
	if (objBuffer)
	{
		objBuffer.href = txtStatus;
	}
}

function doPlayerAction(commandList)
{
	try
	{
        var subTypes = GetRegisterdControls(RegisteredClientType_Synchronization);
		switch(parseInt(commandList.type,10))
		{
			case PLAYERSTATECHANGE:
				switch(parseInt(commandList.subType,10))
				{
					case SLIDEFLIP_IMG:
						Slidechange(commandList.detail);
						break;
					case SPEAKER_IMG:
						var speakerImg = GetRegisterdControl(RegisteredClientSubType_SYNCH_Speaker_Img, subTypes);
						var objImg = getChildObject("audioPlayer_Speaker",speakerImg);
						if (objImg)
						{
							objImg.src = commandList.detail;
						}
						break;
					case SPEAKER_TEXT:
						var speakerImg = GetRegisterdControl(RegisteredClientSubType_SYNCH_Speaker_Img, subTypes);
						var objImg = getChildObject("audioPlayer_Speaker",speakerImg);
						if (objImg)
						{
							objImg.src = "Images/spacer.gif";
						}
						break;

					default:
				}
				break;
			default:
				break;
		}
	}
	catch(er){}
}

function dispText(data)
{
    self.status = data;
}

function Slidechange(slideGUID)
{
	try
	{
        //These variables are defined in Slide.js. These are global variables 
        subTypes = GetRegisterdControls(RegisteredClientType_Slide);
        slideImageNameDiv = GetRegisterdControl(RegisteredClientSubType_Slide_Image_Div, subTypes);
        slideImageName = GetRegisterdControl(RegisteredClientSubType_Slide_Image_ID, subTypes);
        
    	var oSlideImage = getChildObject(slideImageNameDiv,slideImageName);

		var SlideName = 'Slide' + slideGUID.substr(slideGUID.lastIndexOf(".")-3,3);
		if(oSlideImage)
		{
		    oSlideImage.src = slideGUID;
		    oSlideImage.alt = SlideName;
        }
	
		if (winLargeSlide && winLargeSlide.open && !winLargeSlide.closed)
		{
		    slideImageName = "slide_imgSlide";
			var LrgslidePath = slideGUID.substr(0,slideGUID.lastIndexOf("/")) + '/Lrg' + slideGUID.substr(slideGUID.lastIndexOf("/"));
			var enlargeSlide = winLargeSlide.document.getElementById(slideImageName);
			if(enlargeSlide)
			{
			    enlargeSlide.src = LrgslidePath;
			    enlargeSlide.alt = SlideName;
            }
		}
		//Get the slide path
		var slidePath = oSlideImage.src;
		//This variable is defined in Slide.js. This is a global variable 
        currSlide = parseInt(slidePath.substring((slidePath.lastIndexOf("/")+6),(slidePath.length-4)));
    
		ChangeDropDownIndex();
	}
	catch(er)
	{}
}

function SetArchiveCurrSpeaker()
{
	try
	{
		for( var i = 0; i < commandList.length; i++)
		{
			if (commandList[i].sts <= activetimeStamp)
			{
				if(parseInt(commandList[i].subType,10) == SPEAKER_IMG)
				{
					doPlayerAction(commandList[i]);
				}
			}
			if(commandList[i].sts > activetimeStamp)
			{
				break;
			}
		}
	}
	catch(er)
	{}
}
