
// Copyright (c) 2003 Sonic Foundry, Inc. and Sonic Foundry 
// Media Systems, Inc. Neither this code nor any portion 
// thereof may be reproduced, altered, or otherwise changed, 
// distributed or copied, without the express written 
// permission of Sonic Foundry.  
// All rights reserved.

WM64LitePlayerArea.prototype = new PlayerArea();

function WM64LitePlayerArea(container, containingWindow, ID)
{
	this.m_debugLevel = SfDebug.Verbose;
//  	this.m_debugLevel = SfDebug.Information;

	this.PlayerType = PlayerType.WM64Lite;
	this.IsSetupComplete = false;
	this.OverridePort25PluginInstall = false;
	this.ShowPort25PluginControlLoadOption = true;
	var m_this = this;
	
	if (container && containingWindow && ID)
	{
		this.InitializeArea(container, containingWindow, ID);
		SfOnLoad.AddHandler(this.Container + ".DoOnLoad()", AreaNames.Global);
	}

	// can not call onload because of dependency between frames
	this.OnLoad = function()
	{
		// do nothing
	}
	
	this.SetupPlayer = function()
	{
		this.Debug("Setup Player called");

		this.evScriptHandler = new SfEventHandler("Player");
		this.evScriptHandler.MethodName = "LocalOnScriptEvent";
		this.evScriptHandler.Container = "PlayerAreaInstance";
		MainHelper.EventScript.AddHandler(this.evScriptHandler);

		this.evCommandHandler = new SfEventHandler("Player");
		this.evCommandHandler.MethodName = "LocalOnCommandEvent";
		this.evCommandHandler.Container = "PlayerAreaInstance";
		MainHelper.EventCommand.AddHandler(this.evCommandHandler);
		
		this.LoadVideo(0, false, true);
		
		if (this.StartTime != -1)
		{
			this.SetStartTime(Number(this.StartTime));
		}
		
		this.IsSetupComplete = true;
		
		//!! hack
		if (typeof(ThumbNailsAreaInstance) != 'undefined')
		{
			ThumbNailsAreaInstance.Hide();
		}
	}
	
	this.ShowPlayerDivWhenReady = function()
	{
		var embeddedPlayer = this.GetDivToHideWhenNotReady();
		if (embeddedPlayer)
		{
			embeddedPlayer.style.left = "0";
		}
		else
		{
			this.Debug("!!EmbeddedPlayer not found");
		}
	}
	
	this.HidePlayerDivWhenNotReady = function()
	{
		var embeddedPlayer = this.GetDivToHideWhenNotReady();
		if (embeddedPlayer)
		{
			embeddedPlayer.style.left = "-5000px";
		}
		else
		{
			this.Debug("!!EmbeddedPlayer not found");
		}
	}

	this.GetDivToHideWhenNotReady = function()
	{
		return SfDOM.FindElementFromID(document, "MacPlayer");
	}

	this.SetStartTime = function(startTime)
	{
		startTime = Number(startTime);
		
		this.Debug("SetStartTime(): " + startTime);
		
		var macPlayerFrame = frames["FrameMacPlayer"];
		if (!macPlayerFrame)
		{
			SfDebug.DPF(SfDebug.ErrMsgCritical, "Could not find Mac frame");
			return;
		}

		var	playerFrameSrc = Util.GetDocumentBase() + "/Mac/FrameMacPlayer.aspx?" +
			SfRequestVariables.PresentationID + "=" + MainHelper.Presentation.PresentationID +
			"&" + SfRequestVariables.PlayFrom + "=" + Math.floor(startTime) + 
			"&" + SfRequestVariables.EventID + "=" + MainHelper.Presentation.EventID +
			"&" + SfRequestVariables.MediaTicketId + "=" + MainHelper.Presentation.MediaTicketId +
			"&" + SfRequestVariables.ViewerMode + "=Default";

		if (MainHelper.Presentation.UserTicketId != null)
		{
			playerFrameSrc += "&" + SfRequestVariables.UserTicketId + "=" + MainHelper.Presentation.UserTicketId;
		}

		this.Debug("Loading: " + playerFrameSrc);
		macPlayerFrame.location = playerFrameSrc;
		
		var slideNumber = this.CalculateSlideNumberToShow(startTime/1000);
		
		if (slideNumber == 0)
		{
			this.Debug("no need to change slide");
			return;
		}
		
		this.Debug("switching to slide: " + slideNumber);
		var args =  MainHelper.CreateShowSlideEventArgs(slideNumber);
		MainHelper.CurrentSlideNumber = slideNumber;
		MainHelper.EventScript.Post(args);	
	}
	
	this.SetStartTimeForStandAlone = function(chapterNumber, startTime)
	{
		this.Debug("SetStartTimeForStandAlone(): " + chapterNumber);
		
		var macPlayerFrame = frames["FrameMacPlayer"];
		if (!macPlayerFrame)
		{
			SfDebug.DPF(SfDebug.ErrMsgCritical, "Could not find Mac frame");
			return;
		}

		var	playerFrameSrc = "video/Chapter_Frame_" + chapterNumber + ".htm";

		this.Debug("Loading: " + playerFrameSrc);
		macPlayerFrame.location = playerFrameSrc;
		
		var slideNumber = this.CalculateSlideNumberToShow(startTime/1000);
		
		if (slideNumber == 0)
		{
			this.Debug("no need to change slide");
			return;
		}
		
		this.Debug("switching to slide: " + slideNumber);
		var args =  MainHelper.CreateShowSlideEventArgs(slideNumber);
		MainHelper.CurrentSlideNumber = slideNumber;
		MainHelper.EventScript.Post(args);	
	}

	this.OnUnLoad = function()
	{
		if (this.evScriptHandler)
		{
		    if (MainHelper && MainHelper.EventScript)
		    {
			    MainHelper.EventScript.RemoveHandler(this.evScriptHandler);
			}
		}
		this.evScriptHandler=null;
		if (this.evCommandHandler)
		{
		    if (MainHelper && MainHelper.EventCommand)
		    {
			    MainHelper.EventCommand.RemoveHandler(this.evCommandHandler);
			}
		}
		this.evCommandHandler=null;
    }

	this.LoadVideo = function(slideNumber, endVideo, isFirstTime)
	{
		this.Debug("load video called, slideNumber: " + slideNumber);
		

		var ShouldDownloadPort25Plugin = function()
		{
			var GetNoInstallOptionFromCookie = function()
			{
				var cookie = new SfCookie("Port25PluginNoInstall");
				cookie.Path = '/';
				var val = cookie.Get();
				if (val && val == "true")
				{
					return true;
				}
				else
				{
					return false;
				}
			}
			
			if (m_this.ShowPort25PluginControlLoadOption == false)
			{
				return false;
			}

			if (isFirstTime == false)
			{
				return false;
			}
			
			if (m_this.OverridePort25PluginInstall == true)
			{
				return false;
			}

			if (GetNoInstallOptionFromCookie() == true)
			{
				return false;
			}
			
			if (MainHelper.PlayerDetect.SystemInfo.Browser.Type == BrowserType.Mozilla
				&&
				MainHelper.PlayerDetect.SystemInfo.Browser.OSGeneric == OSTypeGeneric.Windows
				)
			{
				return true;
			}
			return false;
			
		}

		var GetFrameSrc = function()
		{
			if (MainHelper.Presentation.IsStandAlone == true)
			{
				return "video/Frame_" + slideNumber + ".htm";
			}
			
			if (ShouldDownloadPort25Plugin() == true)
			{
				MainHelper.Presentation.DoReporting = false;
				return Util.GetDocumentBase() + "/Mac/FrameDownloadPort25Plugin.aspx?" + SfRequestVariables.WindowLoc + "=" + escape(window.location);
			}

			var playerFrameSrc = Util.GetDocumentBase() + "/Mac/FrameMacPlayer.aspx?" +
					SfRequestVariables.PresentationID + "=" + MainHelper.Presentation.PresentationID +
					"&" + SfRequestVariables.EventID + "=" + MainHelper.Presentation.EventID +
					"&" + SfRequestVariables.MediaTicketId + "=" + MainHelper.Presentation.MediaTicketId +
					"&" + SfRequestVariables.SlideNumber + "=" + slideNumber + "&" + SfRequestVariables.EndVideo + "=" + endVideo + "&" + SfRequestVariables.ViewerMode + "=Default";

			if (MainHelper.Presentation.UserTicketId != null)
			{
				playerFrameSrc += "&" + SfRequestVariables.UserTicketId + "=" + MainHelper.Presentation.UserTicketId;
			}

			return playerFrameSrc;					
		}

		var macPlayerFrame = frames["FrameMacPlayer"];
		if (!macPlayerFrame)
		{
			SfDebug.DPF(SfDebug.ErrMsgCritical, "Could not find Mac frame");
			return;
		}

		var playerFrameSrc = GetFrameSrc();
		this.Debug("Loading: " + playerFrameSrc);
		macPlayerFrame.location = playerFrameSrc;
		
	}
	
	this.LocalOnScriptEvent = function(args)
	{
		switch(args.Command)
		{
			case SfScriptCommandType.EndPresentation:
				MainHelper.PresentationEnded = true;

				if ( MainHelper.Presentation.Status == PresentationStatus.CaptureInProgress ) 
				{
					// only force reload with no URL for live, otherwise just let it play out to the end.
					this.LoadVideo(0, true, false);
				}
				
				MainHelper.CurrentSlideNumber = MainHelper.MaxSlideTimings;
				break;
		}
	}

	this.LocalOnCommandEvent = function(args)
	{
		switch(args.Command)
		{
			case SfCommandType.NavigateToSlide:
				var slideNumber = args.SlideNumber;
				if (!slideNumber)
				{
					SfDebug.DPF(SfDebug.ErrMsgCritical, "Navigate to Slide no SlideNumber present");
					return;
				}
				this.NavigateToSlide(Number(slideNumber));
				break;
			case SfCommandType.NavigateToChapter:
				this.NavigateToChapter(Number(args.Number), Number(args.Time));
				break;
				
		}
	}
	
	this.NavigateToChapter = function(number, timeInMilliSeconds)
	{
		this.Debug("NavigateToChapter(): " + number);
		
		if (MainHelper.Presentation.IsStandAlone == true)
		{
			this.SetStartTimeForStandAlone(number, timeInMilliSeconds);
		}
		else
		{
			this.SetStartTime(Number(timeInMilliSeconds));
		}
		
		MainHelper.EventCommand.Post(new CommandArgs(SfCommandType.Play));
	}

	this.NavigateToSlide = function(slideNumber)
	{
		this.Debug("NavigateToSlide with slideNumber: " + slideNumber + " called");
		
		if (MainHelper.Presentation.Status != PresentationStatus.ReplayReady)
		{
			this.Debug("can not navigate when presentation is not on demand");
			return;
		}
		
		if (slideNumber < 0)
		{
			this.Debug("SlideNumber is less than 0");
			return;
		}
		if (MainHelper.MaxSlideTimings < slideNumber)
		{
			SfDebug.DPF(SfDebug.ErrMsgCritical, "slidetimings not known for slideNumber: " + slideNumber);
			return;
		}
		
		this.LoadVideo(slideNumber, false, false);
		
		// event is not automatically getting fired
		// so do it manually
		var args = MainHelper.CreateShowSlideEventArgs(slideNumber);
		MainHelper.CurrentSlideNumber = slideNumber;
		this.ScriptParser.NotifyScriptEvent(args);
		
		MainHelper.PresentationEnded = false;
	}
}
