/*********************************************************************
--- flashcommand : fscommand handler functions ---
version 5.0.0
This is the general fscommand handler for ALL output formats
*********************************************************************/

///////////////////////////////////////////////////////////////////////////
// Global Vars
///////////////////////////////////////////////////////////////////////////
var DATA_PATH = "data/swf/";
var FLASH_WND_WIDTH = 40;
var FLASH_WND_HEIGHT = 30;

var SWF_BASE_WIDTH		= 980;	
var SWF_BASE_HEIGHT		= 640;
var WEBOBJ_LEFT			= 254;
var WEBOBJ_TOP			= 36;

if (FF1 || NS6plus)
{
	WEBOBJ_LEFT = 253;
	WEBOBJ_TOP = 34;
}

if (!g_bScaleSwf)
{
	WEBOBJ_LEFT -= 8;
	WEBOBJ_TOP -= 4;
	strSwfWidth = 992;
	strSwfHeight = 652;
}

var WEBOBJ_DISPLAY3_XPOS_ADJUST	= 150;
var WEBOBJ_DISPLAY3_YPOS_ADJUST	= 20;

var WEBOBJ_DISPLAY2_XPOS_ADJUST	= 119;

// Browser Resize
var g_ResizeTimeout;
var g_strQMPath = "";

///////////////////////////////////////////////////////////////////////////
// Utility Functions
///////////////////////////////////////////////////////////////////////////

function Click()
{
	alert("Test");
}

function WriteSwfObject(strFileName, strSwfWidth, strSwfHeight, strFlashVars, bWebObject, strTransparent, strScale)
{
	document.write("<OBJECT classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' ");
	document.write("codebase='https://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,79,0' ");
	document.write("WIDTH='" + strSwfWidth + "' HEIGHT='" + strSwfHeight + "' ID='player' ALIGN=''> ");
	document.write("<PARAM NAME=movie VALUE='" + strFileName + "'> ");
	document.write("<PARAM NAME=quality VALUE='best'> ");
	if (bWebObject)
	{
		document.write("<PARAM NAME=WMODE VALUE='transparent'> ");
	}
	document.write("<PARAM NAME=scale VALUE='" + strScale + "'> ");
	document.write("<PARAM NAME=menu VALUE='false'>");
	document.write("<PARAM NAME=FlashVars VALUE='" + strFlashVars + "'>");
	document.write("<EM"+"BED WIDTH='"+ strSwfWidth +"' HEIGHT='"+ strSwfHeight +"' src='" + strFileName + "' NAME='player' quality='best' " + strTransparent + " scale='" + strScale + "'  ALIGN='' ");
	document.write("FlashVars='" + strFlashVars + "'");
	document.write(" TYPE='application/x-shockwave-flash' PLUGINSPAGE='https://www.macromedia.com/go/getflashplayer' swLiveConnect='true' menu='false'></EM"+"BED>");
	document.write("</OBJECT>");
}


function CreateBookmark(args, bSlide)
{
	if (!Opera7plus && IE4plus)
	{
		var nSlideNum = args.substring(0,args.indexOf("|"));
		var strTitle = args.substring((args.indexOf("|")+1),args.length);

		var _proto 	= document.location.protocol;
		var _host 	= document.location.host;
		var _pathname	= document.location.pathname;
		var _search = document.location.search;
		var newpath  = "";
		var newUrl  = "";
		var nPos = 0;

		nPos = _pathname.lastIndexOf("/");

		if (nPos <= 0) 
		{
			nPos = _pathname.lastIndexOf("\\"); 
		}
		if ( nPos < _pathname.length) 
		{    
			// if / is not the last char grab the trailing "/"
			nPos++;
		}
		
		if (_search.indexOf("akpDocumentID",0) < 0) 
		{
			newpath = _pathname.substr(0, nPos) + "player.html";
			newUrl = _proto + "//" + _host + newpath +"?slide=" + nSlideNum;
		} 
		else 
		{
			did = _search.substring((_search.lastIndexOf("akpDocumentID") + ("akpDocumentID").length+1), _search.length);
			newpath = "/Portal/Storage/DownloadDocument.aspx?DocumentID=" + did;
			newUrl = _proto+"//"+ _host + newpath + "?slide="+ nSlideNum;
		}

		if (bSlide)
		{
			strTitle = strTitle + " - Powered by Articulate ";
		}
		else
		{
			strTitle = strTitle + " Slide "+ nSlideNum +" - Powered by Articulate ";
		}

		window.external.AddFavorite(newUrl, strTitle);
	}
	else
	{
		var strErr = "Your browser does not support automatic bookmarking.\nTo bookmark this presentation, please create a bookmark \non the web page that launched this window.";
		alert(strErr);
	}
}


function OpenFlashObjectWnd(args)
{
	str = args;
	params = str.split("|");

	var strContainerType = params[0];	// Unused
	var strFilename = params[1];
	var nXPos = parseInt(params[2]);	// Unused
	var nYPos = parseInt(params[3]);	// Unused
	var nWidth = parseInt(params[4]);
	var nHeight = parseInt(params[5]);
	var strBrowserOptions = params[6];

	var  re = /width=0/gi;
	ww = strBrowserOptions.search(re);
	re = /height=0/gi;
	wh = strBrowserOptions.search(re);

	// If the width and height are 0 set to Full screen
	if ((ww >= 0 && wh >= 0) || (nWidth ==0 && nHeight==0))
	{
		nWidth = window.screen.availWidth;
		nHeight = window.screen.availHeight;
	}
	
	PopFlashObj(DATA_PATH + strFilename, nWidth, nHeight)
}


////////////////////////////////////////////////////////////////////////////////
// Gets the base path
////////////////////////////////////////////////////////////////////////////////

function GetBasePath()
{
	var strFullPath = document.location.href;
	var nPos1 = -1;
	var nPos2 = -1;

	nPos1 = strFullPath.lastIndexOf("\\");
	nPos2 = strFullPath.lastIndexOf("/");

	if (nPos2 > nPos1)
	{
		nPos1 = nPos2;
	}

	if (nPos1 >= 0)
	{
		strFullPath = strFullPath.substring(0, nPos1 + 1);
	}

	return(strFullPath);
}

////////////////////////////////////////////////////////////////////////////////
// Zoom code
////////////////////////////////////////////////////////////////////////////////

var g_oZoomInfo = new Object();
var g_wndZoom;

function PopFlashObj(strFileName, nWidth, nHeight)
{
	var strScroll = "0";

	g_oZoomInfo.strFileName = GetBasePath() + strFileName;
	g_oZoomInfo.nWidth = parseInt(nWidth);
	g_oZoomInfo.nHeight = parseInt(nHeight);

	if (g_oZoomInfo.nWidth > screen.availWidth)
	{
		g_oZoomInfo.nWidth = screen.availWidth;
		strScroll = "1";
	}

	if (g_oZoomInfo.nHeight > screen.availHeight)
	{
		g_oZoomInfo.nHeight = screen.availHeight;
		strScroll = "1";
	}


	var strOptions = "width=" + g_oZoomInfo.nWidth +",height=" + g_oZoomInfo.nHeight + ", status=0, toolbar=0, location=0, menubar=0, scrollbars=" + strScroll;

	if (g_wndZoom)
	{
		try
		{
			g_wndZoom.close()
		}
		catch (e)
		{
		}
	}

	g_wndZoom = window.open("player/zoom.html", "", strOptions);
}

////////////////////////////////////////////////////////////////////////////////
// End Zoom code
////////////////////////////////////////////////////////////////////////////////

function OpenWebObjectWnd(args)
{
	str = args;
	params = str.split("|");

	var strContainerType = params[0]; 	// Unused
	var strObjectType = params[1];		// Unused
	var nXPos = params[2];			// Unused
	var nYPos = params[3];			// Unused
	var nWidth = params[4];
	var nHeight = params[5];
	var strBrowserOptions = params[6];
	var strMode = params[7];  		// Unused
	var strUrl = params[8];
	  
	//Check for repository:
	if (strUrl.toLowerCase().indexOf("repository://") == 0) 
	{
		strUrl = "/Portal/Storage/Viewers/ArtPlayer/FollowLink.aspx?file=" + strUrl;
	}

	var  re = /width=0/gi;
	ww = strBrowserOptions.search(re);
	re = /height=0/gi;
	wh = strBrowserOptions.search(re);

	// If the width and height are 0 set to Full screen
	if ((ww >= 0 && wh >= 0) || (nWidth ==0 && nHeight==0))
	{
		nWidth = window.screen.availWidth;
		nHeight = window.screen.availHeight;
		strBrowserOptions += ",width="+nWidth+",height="+nHeight+",left=0,top=0,screenX=0,screenY=0";
	}
	else 
	{
		strBrowserOptions += ",width=" + nWidth + ",height=" +nHeight;
	}
	  
	//--Setup the Window.open Target Url to popup and populate:
	var wndWebObj = window.open(strUrl, "mediaobjectwin", strBrowserOptions);
	wndWebObj.focus();
}

function ShowWebObjectDiv(args)
{
	str = args;
	params = str.split("|");
	var strContainerType = params[0]; 	// Unused
	var strObjectType = params[1];		// Unused
	var nXPos = parseInt(params[2]);
	var nYPos = parseInt(params[3]);
	var nWidth = parseInt(params[4]);
	var nHeight = parseInt(params[5]);
	var strBrowserOptions = params[6];
	var strMode = params[7]; 		// scale modes
	var strUrl = params[8];

	//Check for repository:// string//
	if (strUrl.toLowerCase().indexOf("repository://") == 0)
	{
		strUrl = "/Portal/Storage/Viewers/ArtPlayer/FollowLink.aspx?file=" + strUrl;
	}

	//- (iframe) -//
	if (g_bWebObject) 
	{
		// Set the global values
		g_bWebObjDisplay = true;
		g_nWebXPos = nXPos;
		g_nWebYPos = nYPos;
		g_nWebWidth = nWidth;
		g_nWebHeight = nHeight;
		g_strWebMode = strMode;

		// Set the URL
		var myIFrame = document.getElementById("eIFContent");
		myIFrame.src = strUrl;

		// Adjust the Size and position
		ResizeWebObject();

	} 
	else 
	{
		//alert("Can't find a media layer. Opening in a new window instead.");
		window.open(strUrl,   "webobjectwin",   "width=700,height=500,"+strBrowserOptions);
	}

}

function HideWebObjectDiv(args)
{
	//clear the iframe
	if (g_bWebObject) 
	{
		g_bWebObjDisplay = false;

		// Make the WebObject Small for Firefox
		g_nWebWidth = 5;
		g_nWebHeight = 5;

		ResizeWebObject();

		// Set the layer to be invisible
		var layerWebObject = document.getElementById("eLayer1");
		layerWebObject.style.visibility = 'hidden';

		// Fill with blank page
		var myIFrame = document.getElementById("eIFContent");
		myIFrame.src = "player/blank.html";

	}
}

function SetDisplayMode(args)
{
	var params = args.split("|");

	currentDisplayMode = params[0];

	if (g_bWebObjDisplay)
	{
		ResizeWebObject();
	}
}

function ShowMediaObject(args)
{
	//rightclick insert webobject, display in new window//
	str = args;
	params = str.split("|");
	var _url = params[0];
	var _options = params[1];

	//--Launch a new window with the specifed parameters and content:
	window.open(_url,   "mediaobjectwin",   _options);
}

function SendQuiz()  
{
	g_strQuizResults = g_strQuizResults.replace(/'/g,"&#39;");

	var sHTML = "";
	sHTML += '<FORM id="formQuiz" method="POST" action="mailto:' + g_strEmail + '?subject=' + g_strSubject + '" enctype="text/plain">';
	sHTML += '<INPUT TYPE="hidden" NAME="Quiz Results" VALUE=\'' + g_strQuizResults.replace(/\\n/g,"\n") + '\'>';
	sHTML += '<br><input type="submit"><br>';
	sHTML += '</FORM>';
	document.getElementById("divQuiz").innerHTML = sHTML;
	document.getElementById("divQuiz").document.getElementById("formQuiz").submit();
}

function GetBasePath()
{
	var strFullPath = document.location.href;
	var nPos1 = -1;
	var nPos2 = -1;

	nPos1 = strFullPath.lastIndexOf("\\");
	nPos2 = strFullPath.lastIndexOf("/");

	if (nPos2 > nPos1)
	{
		nPos1 = nPos2;
	}

	if (nPos1 >= 0)
	{
		strFullPath = strFullPath.substring(0, nPos1 + 1);
	}

	return(strFullPath);
}


///////////////////////////////////////////////////////////////////////////
// Resize Event
///////////////////////////////////////////////////////////////////////////

var g_resizeTimer;
var g_nWebXPos = 0;
var g_nWebYPos = 0;
var g_nWebWidth = 0;
var g_nWebHeight = 0;
var g_bWebObjDisplay = false;
var g_strWebMode = "scaleall";

function ResizeWebObject()
{
	var layerWebObject = document.getElementById("eLayer1");
	var myIFrame = document.getElementById("eIFContent");

	var nWidth = g_nWebWidth;
	var nHeight = g_nWebHeight;
	var nXPos = g_nWebXPos;
	var nYPos = g_nWebYPos;

	// Calculate the Ratio and Offsets
	var swfMovie = thisMovie('player');

	if (!swfMovie.clientHeight)
	{
		swfMovie = document.getElementById("player");
	}

	var nSwfXPos = swfMovie.offsetLeft;
	var nSwfYPos = swfMovie.offsetTop;
	var nSwfHeight = swfMovie.clientHeight;
	var nSwfWidth = swfMovie.clientWidth;

	if (isMac && IE5)
	{
		nSwfWidth = swfMovie.width;
		if (swfMovie.width == "100%")
		{
			nSwfWidth = document.body.clientWidth;
			
		}
		
		nSwfHeight = swfMovie.height;
		if (swfMovie.height == "100%")
		{
			nSwfHeight = document.body.clientHeight;
		}
	}

	var nWRatio = nSwfWidth / SWF_BASE_WIDTH;
	var nHRatio = nSwfHeight / SWF_BASE_HEIGHT;
	var nRatio = 1;
	var nLeftOffset = 0;
	var nTopOffset = 0;

	// Adjust the Width and the height for firefox
	if (FF1 || NS6plus)
	{
		nWidth -= 5;
		nHeight -= 5;
	}

	//Handle special Mode 2 and 3 cases:
	if (currentDisplayMode == 3) 
	{
		nXPos -= WEBOBJ_DISPLAY3_XPOS_ADJUST;
		nYPos -= WEBOBJ_DISPLAY3_YPOS_ADJUST;
		nXPos *= 1.13;
		nYPos *= 1.13;
		nWidth *= 1.13;
		nHeight *= 1.13;
	}
	else if (currentDisplayMode == 2) 
	{
		nXPos -= WEBOBJ_DISPLAY2_XPOS_ADJUST;

	}

	if (nHRatio < nWRatio)
	{
		nRatio = nHRatio;
		nLeftOffset = (nSwfWidth - (SWF_BASE_WIDTH * nRatio)) / 2;
	}
	else
	{
		nRatio = nWRatio;
		nTopOffset = (nSwfHeight - (SWF_BASE_HEIGHT * nRatio)) / 2;
	}

	strMode = "scaleall";

	if ((g_strWebMode == "") || (g_strWebMode == "scaleall")) 
	{
		factorSize = nRatio;  
		factorPosition = nRatio;
	}
	if (g_strWebMode =="scaleposition")
	{
		factorSize = 1;  
		factorPosition = nRatio;
	}
	if (g_strWebMode == "scalesize")  
	{
		factorSize = nRatio;  
		factorPosition = 1;
	}
	if (g_strWebMode == "absolute") 
	{
		factorSize = 1;  
		factorPosition = 1;
	}

		
	iLeft = (WEBOBJ_LEFT + nXPos) * factorPosition + nLeftOffset;
	iTop = (WEBOBJ_TOP + nYPos) * factorPosition + nTopOffset;
	iWidth = nWidth * factorSize;
	iHeight = nHeight * factorSize;

	//Resize the layer
	layerWebObject.style.left = nSwfXPos + iLeft;
	layerWebObject.style.top = nSwfYPos + iTop;
	layerWebObject.style.width = iWidth;
	layerWebObject.style.height = iHeight;
	layerWebObject.style.visibility = 'visible';

	// Resize the IFrame
	myIFrame.style.width = iWidth;
	myIFrame.style.height = iHeight;

}

function WindowResize()
{
	// Notify the swf that we have resized.  This is for 
	// text that does not scale properly
	if (g_bScaleSwf)
	{
		// Make sure that we don't send 100 resize messages in a row
		clearTimeout(g_ResizeTimeout);
		g_ResizeTimeout = setTimeout("NotifySwfResize()", 200);
		
	}

	// Resize the Web Object
	if (g_bWebObjDisplay)
	{
		ResizeWebObject();
	}
}

function NotifySwfResize()
{
	var swfMovie = thisMovie('player');
	swfMovie.SetVariable("g_Resize.Trigger", "1");
}

function SetBgColor(strColor)
{
	var strTemp = "";

	if (IE4 && !Opera && !isMac)
	{
		strTemp = "0x" + strColor;
		document.bgColor = parseInt(strTemp);
	}
	else
	{
		strTemp = "#" + strColor;
		document.bgColor = strTemp;
	}	
}

window.onresize = WindowResize;

var g_strAttachment = "";

function OpenAttachment()
{
	if (IESP2 || IE7)
	{
		try
		{
			window.open('player/attach.html?' + GetBasePath() + g_strAttachment,"attach")
		}
		catch (e)
		{
			if (e.number == -2147024891)
			{
				alert("For viewing attachments when presentation is not playing from a website, view the Knowledge Base article located at http://kb.articulate.com/kb/000669.php")
			}
		}
	}
	else
	{
		window.open(GetBasePath() + g_strAttachment);
	}
}

////////////////////////////////////////////////////////////////////////////////
// Results Screen Code
////////////////////////////////////////////////////////////////////////////////

var g_arrResults = new Array();
var g_oQuizResults = new Object();

function QuestionResult(nQuestionNum, strQuestion, strResult, strCorrectResponse, strStudentResponse, nPoints)
{
	if (nPoints < 0)
	{
		nPoints = 0;
	}
	if (strCorrectResponse == "")
	{
		strCorrectResponse = "&nbsp;";
	}

	this.nQuestionNum = nQuestionNum
	this.strQuestion = strQuestion;
	this.strCorrectResponse = strCorrectResponse;
	this.strStudentResponse = strStudentResponse;
	this.strResult = strResult;
	this.nPoints = nPoints;
	this.bFound = false;
}

function StoreResult(args)
{
	args = args.replace(/\|\$s\$\|/g,";")
	var arrParams = args.split("|$:$|");
	var oQuestionResult = new QuestionResult(parseInt(arrParams[0]) + 1, arrParams[1], arrParams[2], arrParams[3], arrParams[4] ,arrParams[5]);
	var nIndex = g_arrResults.length;

	// Lets see if we have answered the question before

	for (var i = 0; i < g_arrResults.length; i++)
	{
		if (g_arrResults[i].nQuestionNum == oQuestionResult.nQuestionNum)
		{
			nIndex = i;
			break;
		}
	}

	g_arrResults[nIndex] = oQuestionResult;

}

function StoreQuizResult(args)
{
	var arrParams = args.split("|$:$|");

	g_oQuizResults.dtmFinished = new Date();
	g_oQuizResults.strResult = arrParams[0];
	g_oQuizResults.strScore = arrParams[1];
	g_oQuizResults.strPassingScore = arrParams[2];
}

function ShowResult(args)
{
	var arrData = args.split("|$s$|");
	
	if (!g_oQuizResults.oOptions)
	{
		g_oQuizResults.oOptions = new Object();
	}

	g_oQuizResults.oOptions.bShowUserScore = (arrData[0] == "1");
	g_oQuizResults.oOptions.bShowPassingScore = (arrData[1] == "1");
	g_oQuizResults.oOptions.bShowShowPassFail = (arrData[2] == "1");
	g_oQuizResults.oOptions.bShowQuizReview = (arrData[3] == "1");
	g_oQuizResults.oOptions.strResult = arrData[4];
	g_oQuizResults.oOptions.strName = arrData[5];

	window.open(GetBasePath() + g_strQMPath + "report.html", "Reports")
}

////////////////////////////////////////////////////////////////////////////////
// Zoom code
////////////////////////////////////////////////////////////////////////////////

var g_oZoomInfo = new Object();
var g_wndZoom;

function PopZoomImage(strFileName, nWidth, nHeight, strZoomPath)
{
	var strScroll = "0";
	g_oZoomInfo.strFileName = strFileName;
	g_oZoomInfo.nWidth = parseInt(nWidth);
	g_oZoomInfo.nHeight = parseInt(nHeight);

	if (g_oZoomInfo.nWidth > screen.availWidth)
	{
		g_oZoomInfo.nWidth = screen.availWidth;
		strScroll = "1";
	}

	if (g_oZoomInfo.nHeight > screen.availHeight)
	{
		g_oZoomInfo.nHeight = screen.availHeight;
		strScroll = "1";
	}


	var strOptions = "width=" + g_oZoomInfo.nWidth +",height=" + g_oZoomInfo.nHeight + ", status=0, toolbar=0, location=0, menubar=0, scrollbars=" + strScroll;

	if (g_wndZoom)
	{
		try
		{
			g_wndZoom.close()
		}
		catch (e)
		{
		}
	}

	var strRelPath = g_strQMPath;
	if (strZoomPath != "" && strZoomPath != undefined && strZoomPath != null)
	{
		strRelPath = strZoomPath;
	}


	g_wndZoom = window.open(GetBasePath() + strRelPath + "zoom.html", "Zoom", strOptions);
}

///////////////////////////////////////////////////////////////////////////
// Flash Command Handler
///////////////////////////////////////////////////////////////////////////

function player_DoFSCommand(command, args) 
{
	args = String(args);

	args = args.replace(/%_q_%/g,"\"")
	args = args.replace(/;/g,"|$s$|")
	args = args.replace(/%_s_%/g,";")

	switch (command)
	{
		case "bookmark_presentation":
			CreateBookmark(args, false);
			break;

		case "bookmark_slide":
			CreateBookmark(args, true);
			break;

		case "hyper_flashobject":
			OpenFlashObjectWnd(args);
			break;

		case "hyper_webobject_newwindow":
			OpenWebObjectWnd(args);
			break;

		case "hyper_webobject_inplayer":
			ShowWebObjectDiv(args);
			break;

		case "hyper_webobject_inplayer_hide":
			HideWebObjectDiv(args);
			break;

		case "ART_displaymode":
			SetDisplayMode(args);
			break;

		case "hyper_mediaobject":
			ShowMediaObject(args);
			break;

		case "ART_CloseAndExit":
			if (!g_bLMS)
			{
				top.window.close();
	 		}
			break;
		case "ART_SetBgBolor":
				SetBgColor(args);
			break;

		case "ART_Attachment":
			g_strAttachment = args;
			if (IESP2)
			{
				OpenAttachment()
			}
			else
			{
				setTimeout("OpenAttachment()", 100)
			}
			break;

		// Email Handlers
		case "emailEmail":
			g_strEmail = args;
			break;

		case "QuizResults":
		case "Quiz Results":
			var strTemp = args.replace(/\|\$s\$\|/g,";");
			g_strQuizResults = args;
			break;

		case "emailSubject":
			g_strSubject = args;
			break;

		case "emailSubmit":
			SendQuiz();
			break;

		// QM Handlers
		case "SetQMPath":
			g_strQMPath = args;
			break;

		case "StoreQuestionResult":
			StoreResult(args);
			break;

		case "StoreQuizResult":
			StoreQuizResult(args);
			break;

		case "DisplayPrintScreen":
			ShowResult(args);
			break;

		case "ART_QMAttachment":
			g_strAttachment = g_strQMPath + args;

			if (IESP2)
			{
				OpenAttachment()
			}
			else
			{
				setTimeout("OpenAttachment()", 100)
			}

			break;

		case "QM_ZoomImage":
			var arrData = args.split("|$s$|");
			PopZoomImage(arrData[0], arrData[1], arrData[2], arrData[3]);
			break;

	}

	if (g_bLMS)
	{
		customFScommandHandler(command, args);   //found in Lms.js
	}
}
