// Browser Sniffing var IE = ((document.all)&&(navigator.appVersion.indexOf("MSIE")!=-1)) ? true : false; var IE6 = ((document.all)&&(navigator.appVersion.indexOf("MSIE 6.")!=-1)) ? true : false; var FF = (navigator.userAgent.indexOf("Firefox")!=-1) ? true : false; var Safari3 = (navigator.appVersion.indexOf("Safari") && navigator.appVersion.indexOf("Version/3")); // Message Delimitors var g_strDelim = "|~|"; var g_strInteractionDelim = "|#|"; var g_oContentResults = new ContentResults(); var g_listQuizzes = new Object(); var g_oPrintOptions = new Object(); // LMS Support var g_bLMSPresent = false; if (g_bLMS) { document.write("<\/SCR" + "IPT>"); } if (g_bAOSupport) { document.write("<\/SCR" + "IPT>"); } var g_strQuery = document.location.search.substr(1); // Write the swf object function WriteSwfObject(strSwfFile, nWidth, nHeight, strScale, strAlign, strQuality, strBgColor, bCaptureRC, strWMode, strFlashVars) { var strHtml = ""; if (strScale == "show all") { nWidth = "100%"; nHeight = "100%"; } // If there are flashvars defined append a delimitor if (strFlashVars != "") { strFlashVars += "&"; } strFlashVars += "vHtmlContainer=true"; strFlashVars += "&TinCan=" + (g_bTinCan ? "true" : "false"); if (navigator.userAgent.toLowerCase().indexOf("chrome") >= 0) { strWMode = "opaque"; } if (bCaptureRC && strWMode == "window") { strFlashVars += "&vCaptureRC=true"; strWMode = "opaque"; } // Whether or not we are loaded by an LMS strFlashVars += "&vLMSPresent=" + g_bLMSPresent; // Whether or not we are loaded by AO strFlashVars += "&vAOSupport=" + g_bAOSupport; // Set the LMS Resume data if (g_bLMSPresent) { RetrieveStateData(); strFlashVars += "&vResumeData=" + encodeURI(g_strResumeData); } var strLocProtocol = location.protocol; if (strLocProtocol.indexOf("file") >= 0) { strLocProtocol = "http:"; } strHtml += "
"; strHtml += ""; strHtml += ""; strHtml += ""; strHtml += ""; strHtml += ""; strHtml += ""; strHtml += ""; strHtml += ""; strHtml += ""; strHtml += ""; strHtml += ""; strHtml += ""; strHtml += "
"; document.write(strHtml); if (bCaptureRC) { AddRightClickListener(); } } //////////////////////////////////////////////////////////////////////////////// // Flash Comm //////////////////////////////////////////////////////////////////////////////// function onBWEvent(command, args) { args = unescape(args); command = String(command); var arrArgs = args.split(g_strDelim); switch(command) { case "BW_UpdateViewStatus": g_oContentResults.strStatus = arrArgs[0]; g_oContentResults.strType = arrArgs[1]; break; case "BW_UpdateStatus": g_oContentResults.strStatus = arrArgs[0]; g_oContentResults.nScore = arrArgs[1]; // Min Score - arrArgs[2] // Max Score - arrArgs[3] g_oContentResults.nPassingScore = arrArgs[4]; g_oContentResults.strType = arrArgs[5]; g_oContentResults.dtmFinished = new Date(); break; case "BW_StoreQuestionResult": var strQuizId = arrArgs[0]; var strId = arrArgs[1]; var strLMSId = arrArgs[2]; var strType = arrArgs[3]; var strCorrectResponse = arrArgs[4]; var strUserResponse = arrArgs[5]; var nLatency = arrArgs[6]; var strStatus = arrArgs[7]; var nPoints = arrArgs[8]; var strCompletedTime = arrArgs[9]; var nWeight = arrArgs[10]; var nQuestionNumber = arrArgs[11]; var strDescription = arrArgs[12]; var strQuizName = arrArgs[13]; var bTracked = (arrArgs[14] == "true"); if (g_listQuizzes[strQuizId] == null) { g_listQuizzes[strQuizId] = new QuizData(strQuizId, strQuizName); } var oResult = new QuestionResults(strId, strLMSId, strType, strCorrectResponse, strUserResponse, nLatency, strStatus, nPoints, strCompletedTime, nWeight, nQuestionNumber, strDescription, bTracked); g_listQuizzes[strQuizId].AddQuestionResult(oResult); break; case "BW_UpdateQuizResults": var strQuizId = arrArgs[0]; var strQuizName = arrArgs[1]; var nPassScore = arrArgs[2]; var nPassPercent = arrArgs[3]; var nScore = arrArgs[4]; var nPercentScore = arrArgs[5]; if (g_listQuizzes[strQuizId] == null) { g_listQuizzes[strQuizId] = new QuizData(strQuizId, strQuizName); } g_listQuizzes[strQuizId].nPassingScore = nPassPercent; g_listQuizzes[strQuizId].nPtScore = nPercentScore; g_listQuizzes[strQuizId].dtmFinished = new Date(); break; case "BW_PrintResults": g_oPrintOptions.bShowUserScore = (arrArgs[0] == "true"); g_oPrintOptions.bShowPassingScore = (arrArgs[1] == "true"); g_oPrintOptions.bShowShowPassFail = (arrArgs[2] == "true"); g_oPrintOptions.bShowQuizReview = (arrArgs[3] == "true"); g_oPrintOptions.strName = arrArgs[4]; g_oPrintOptions.strMainQuizId = arrArgs[5]; g_oPrintOptions.arrQuizzes = arrArgs[6].split(","); window.open(GetBasePath() + g_strContentFolder + "/report.html", "Reports") break; case "BW_EmailResults": EmailResults(arrArgs[0] == "true", arrArgs[1] == "true", arrArgs[2] == "true", arrArgs[3] == "true", arrArgs[4], arrArgs[5], arrArgs[6].split(",")); break; case "BW_UpdateWebObjects": UpdateWebObjects(parseInt(arrArgs[0]), parseInt(arrArgs[1])); break; case "BW_OpenWebObject": OpenWebObject(arrArgs[0], arrArgs[1], parseInt(arrArgs[2]), parseInt(arrArgs[3]), parseInt(arrArgs[4]), parseInt(arrArgs[5]), parseInt(arrArgs[6]), parseInt(arrArgs[7])) break; case "BW_CloseWebObject": CloseWebObject(arrArgs[0]); break; case "BW_MailTo": MailTo(arrArgs[0]); break; case "BW_OpenUrl": OpenUrl(arrArgs[0], arrArgs[1], arrArgs[2], arrArgs[3], arrArgs[4], arrArgs[5], arrArgs[6], arrArgs[7], arrArgs[8], arrArgs[9], arrArgs[10], arrArgs[11]); break; case "BW_CloseAllWebObjects": CloseAllWebObjects(arrArgs[0]); break; case "BW_RestoreWebObjects": RestoreWebObjects(); break; case "BW_ExecuteJavascript": ExecuteScript(arrArgs[0]); break; case "BW_OpenSwf": OpenSwfWindow(arrArgs[0], arrArgs[1], arrArgs[2], arrArgs[3], arrArgs[4], arrArgs[5], arrArgs[6], arrArgs[7], arrArgs[8]); break; case "BW_ResizeSwf": ResizeSwf(arrArgs[0], arrArgs[1]); break; case "BW_ClosePlayer": if (!g_bLMS) { if (FF) { setTimeout("CloseWindow()", 100); } else { CloseWindow(); } } break; case "BW_OpenVideo": OpenVideo(arrArgs[0], arrArgs[1], arrArgs[2], arrArgs[3], arrArgs[4], arrArgs[5], arrArgs[6], arrArgs[7], arrArgs[8], arrArgs[9], arrArgs[10], arrArgs[11], arrArgs[12], arrArgs[13], arrArgs[14], arrArgs[15], arrArgs[16]) break; case "BW_RestoreFocus": var oPlayer = GetPlayer(); try { oPlayer.tabIndex = 0; oPlayer.focus(); } catch (e) { } break; case "BW_TincanConfigError": TinCanConfigError(); break; } if (g_bLMS) { lms_DoFSCommand(command, args); } if (g_bAOSupport) { AO_DoFSCommand(command, args); } } //////////////////////////////////////////////////////////////////////////////// // Retrieve the player object //////////////////////////////////////////////////////////////////////////////// function GetPlayer() { var player = null; if (IE) { player = document.getElementById("player"); } else { player = document.getElementById("eplayer"); } return player; } //////////////////////////////////////////////////////////////////////////////// // Close the player //////////////////////////////////////////////////////////////////////////////// function CloseWindow() { top.window.close(); } //////////////////////////////////////////////////////////////////////////////// // Browser Resize //////////////////////////////////////////////////////////////////////////////// var g_nWindowWidth = 0; var g_nWindowHeight = 0; var g_nSizeInterval = null; var g_nIntervalCount = 0; function ResizeBrowser(strBrowserSize) { switch (strBrowserSize) { case "fullscreen": ResizeFullScreen(); break; case "optimal": ResizeOptimal(); break; } } function ResizeFullScreen() { top.moveTo(0, 0); top.window.resizeTo(screen.availWidth, screen.availHeight); } function ResizeOptimal() { var nFrameWidth = 0; var nFrameHeight = 0; var nXPos = GetXPos(); var nYPos = GetYPos(); var bMove = false; g_nWindowWidth = g_nWidth + 30; g_nWindowHeight = g_nHeight + 30; if (screen.availWidth > g_nWindowWidth && screen.availHeight > g_nWindowHeight) { if (GetContentWidth() != g_nWidth || GetContentHeight() != g_nHeight) { // First we need to reposition the browser so that it can actually grow to the appropiate size. // When positioning, we will overestimate the browser height by 160 if possible to accomadate the toolbar and statusbar if (nXPos + g_nWindowWidth > screen.availWidth) { bMove = true; nXPos = screen.availWidth - g_nWindowWidth - 5; } if (nYPos + g_nWindowHeight + 160 > screen.availHeight) { bMove = true; nYPos = screen.availHeight - g_nWindowHeight - 165; } if (nXPos < 0) { nXPos = 0; } if (nYPos < 0) { nYPos = 0; } if (bMove) { top.window.moveTo(nXPos, nYPos); } // Resize the window so we know what the actual size is top.window.resizeTo(g_nWindowWidth, g_nWindowHeight); // Since we know the actual browser size, and we can query the cliet dim, lets get the frame dim nFrameWidth = (g_nWindowWidth) - GetContentWidth(); nFrameHeight = (g_nWindowHeight) - GetContentHeight(); // Not lets resize it to the correct size g_nWindowWidth = g_nWidth + nFrameWidth; g_nWindowHeight = g_nHeight + nFrameHeight; top.window.resizeTo(g_nWindowWidth, g_nWindowHeight); if (IE) { // ok, sometimes there is a third party toolbar that doesn't load until after we have finish resizing everything, so we will do a check for this (this only seems to effect IE, FF behaves correctly) g_nSizeInterval = setInterval(CheckSize, 500); } } } else { // If the screen isn't big enough, we are bailing and defaulting to Full Screen ResizeFullScreen(); } } function CheckSize() { var nContentWidth = GetContentWidth(); var nContentHeight = GetContentHeight(); var nFrameWidth = 0; var nFrameHeight = 0; g_nIntervalCount++; if (nContentWidth != g_nWidth || nContentHeight != g_nHeight) { nFrameWidth = g_nWindowWidth - nContentWidth; nFrameHeight = g_nWindowHeight - nContentHeight; g_nWindowWidth = g_nWidth + nFrameWidth; g_nWindowHeight = g_nHeight + nFrameHeight; top.window.resizeTo(g_nWindowWidth, g_nWindowHeight); clearInterval(g_nSizeInterval); } if (g_nIntervalCount > 4) { clearInterval(g_nSizeInterval); } } function GetContentWidth() { var nResult = 0; if (IE || Safari3) { nResult = document.body.clientWidth; } else { nResult = window.innerWidth; } return nResult; } function GetContentHeight() { var nResult = 0; if (IE || Safari3) { nResult = nContentHeight = document.body.clientHeight; } else { nResult = nContentHeight = window.innerHeight; } return nResult } function GetXPos() { var nResult = 0; if (IE) { nResult = window.screenLeft; } else { nResult = window.screenX; } return nResult; } function GetYPos() { var nResult = 0; if (IE) { nResult = window.screenTop; } else { nResult = window.screenX; } return nResult; } function ResizeSwf(nWidth, nHeight) { var oPlayer = GetPlayer(); oPlayer.width = nWidth; oPlayer.height = nHeight; var divPlayer = document.getElementById("divSwf"); divPlayer.style.width = nWidth; divPlayer.style.height = nHeight } //////////////////////////////////////////////////////////////////////////////// // On Close Handling //////////////////////////////////////////////////////////////////////////////// var g_bCloseExecuted = false; function DoOnClose(evt) { if (!g_bCloseExecuted) { g_bCloseExecuted = true; if (g_bLMS) { LMSUnload(); } if (g_bAOSupport) { DoAOOnUnload(); } if (g_bTinCan) { CheckTinCanComplete(); } } } //////////////////////////////////////////////////////////////////////////////// // WebObject support //////////////////////////////////////////////////////////////////////////////// var g_oWebObjects = new Object(); var g_arrStoredWebObjects = new Array(); function UpdateWebObjects(nSlideXOffset, nSlideYOffset) { for (var items in g_oWebObjects) { var oWebObject = g_oWebObjects[items]; oWebObject.Position.SlideXOffset = nSlideXOffset; oWebObject.Position.SlideYOffset = nSlideYOffset; } // setTimeout("RepositionDivs()", 100); RepositionDivs(); } function OpenWebObject(strId, strUrl, nXPos, nYPos, nWidth, nHeight, nSlideXOffset, nSlideYOffset) { var oWebObject = g_oWebObjects[strId]; if (!oWebObject) { oWebObject = new Object(); oWebObject.strId = strId; oWebObject.strInitUrl = strUrl; // Create the DIV oWebObject.Div = document.createElement('div'); oWebObject.Div.style.position = "absolute"; // Create the iframe var oIFrame = document.createElement('iframe'); oIFrame.frameBorder = "0"; oIFrame.id = "div" + strId; oIFrame.style.border = "0"; oIFrame.style.width = "100%"; oIFrame.style.height = "100%"; oIFrame.allowtransparency = "true"; oWebObject.Div.appendChild(oIFrame); oWebObject.IFrame = oIFrame; // Append Child var oTarget = document.getElementById('divWebObjects'); oTarget.appendChild(oWebObject.Div); g_oWebObjects[strId] = oWebObject; oIFrame.src = strUrl; setTimeout("RepositionDivs()", 100); } else { var oTarget = document.getElementById('divWebObjects'); oTarget.removeChild(oWebObject.Div); oTarget.appendChild(oWebObject.Div); } oWebObject.Open = true; if (oWebObject.strUrl != strUrl || oWebObject.Div.style.visibility != "visible") { oWebObject.IFrame.src = strUrl; oWebObject.strUrl = strUrl; var oPosition = new Object(); oPosition.XPos = nXPos; oPosition.YPos = nYPos; oPosition.Width = nWidth; oPosition.Height = nHeight; oPosition.SlideXOffset = nSlideXOffset; oPosition.SlideYOffset = nSlideYOffset; oWebObject.Position = oPosition; var oRect = GetDivRect(oPosition); oWebObject.Div.style.left = oRect.left + "px"; oWebObject.Div.style.top = oRect.top + "px"; oWebObject.Div.style.width = oRect.width + "px"; oWebObject.Div.style.height = oRect.height + "px"; oWebObject.Div.style.visibility = "visible"; } } function RestoreWebObjects() { var oWebObject = null; for (var i = 0; i < g_arrStoredWebObjects.length; i++) { oWebObject = g_oWebObjects[g_arrStoredWebObjects[i]]; OpenWebObject(oWebObject.strId, oWebObject.strInitUrl, oWebObject.Position.XPos, oWebObject.Position.YPos, oWebObject.Position.Width, oWebObject.Position.Height, oWebObject.Position.SlideXOffset, oWebObject.Position.SlideYOffset) } g_arrStoredWebObjects = new Array(); } function CloseAllWebObjects(strStore) { var bStore = (strStore == "true"); for (var items in g_oWebObjects) { var oWebObject = g_oWebObjects[items]; if (bStore && oWebObject.Open) { g_arrStoredWebObjects.push(items); } CloseWebObject(items); } } function CloseWebObject(strId) { var oWebObject = g_oWebObjects[strId]; oWebObject.Div.style.visibility = "hidden"; oWebObject.IFrame.src = g_strContentFolder + "/blank.html"; oWebObject.strUrl = ""; oWebObject.Open = false; } function GetDivRect(oPosition) { var oRect = new Object(); var nClientWidth = GetContentWidth(); var nClientHeight = GetContentHeight(); var nLeftMargin = 0; var nSwfWidth = parseInt(g_nWidth); var nSwfHeight = parseInt(g_nHeight); if (g_strScale == "noscale") { nLeftMargin = (nClientWidth - nSwfWidth) / 2; nTopMargin = (nClientHeight - nSwfHeight) / 2; if (nLeftMargin < 0) { nLeftMargin = 0; } if (nTopMargin < 0) { nTopMargin = 0; } oRect.left = nLeftMargin + oPosition.SlideXOffset + oPosition.XPos; oRect.top = nTopMargin + oPosition.SlideYOffset + oPosition.YPos; oRect.width = oPosition.Width; oRect.height = oPosition.Height; } else { var nXScale = nClientWidth / nSwfWidth; var nYScale = nClientHeight / nSwfHeight; var nScale = nXScale; var bXScale = true; var nTopMargin = 0; var nLeftMargin = 0; if (nYScale < nScale) { nScale = nYScale; } nTopMargin = (nClientHeight - nSwfHeight * nScale) / 2; nLeftMargin = (nClientWidth - nSwfWidth * nScale) / 2; oRect.left = nLeftMargin + (oPosition.SlideXOffset + oPosition.XPos) * nScale; oRect.top = nTopMargin + (oPosition.SlideYOffset + oPosition.YPos) * nScale; oRect.width = Math.floor(oPosition.Width * nScale); oRect.height = Math.floor(oPosition.Height * nScale); } return oRect; } function RepositionDivs() { for (items in g_oWebObjects) { var oWebObject = g_oWebObjects[items]; var oRect = GetDivRect(oWebObject.Position); oWebObject.Div.style.left = oRect.left + "px"; oWebObject.Div.style.top = oRect.top + "px"; oWebObject.Div.style.width = oRect.width + "px"; oWebObject.Div.style.height = oRect.height + "px"; } } window.onresize = RepositionDivs; //////////////////////////////////////////////////////////////////////////////// // Open Url //////////////////////////////////////////////////////////////////////////////// function OpenUrl(strUrl, strWindow, strWindowSize, strWidth, strHeight, strUseDefaultControls, strStatus, strToolbar, strLocation, strMenubar, strScrollbars, strResizable) { var nWndWidth = parseInt(strWidth); var nWndHeight = parseInt(strHeight); var bUseDefaultSize = (strWindowSize.toLowerCase() == "default"); var bUseDefaultControls = (strUseDefaultControls.toLowerCase() == "true"); var bFullScreen = (strWindowSize.toLowerCase() == "fullscreen"); strUrl = ReplaceAll(strUrl, "%25", "?"); if (bFullScreen) { nWndWidth = screen.availWidth; nWndHeight = screen.availHeight; } else { if (nWndWidth > screen.availWidth) { nWndWidth = screen.availWidth; } if (nWndHeight > screen.availHeight) { nWndHeight = screen.availHeight; } } var strOptions = ""; if (!bUseDefaultControls) { if (!bUseDefaultSize) { strOptions += "width=" + nWndWidth + ", "; strOptions += "height=" + nWndHeight + ", "; } strOptions += "status=" + ((strStatus.toLowerCase() == "true") ? 1 : 0); strOptions += ", toolbar=" + ((strToolbar.toLowerCase() == "true") ? 1 : 0); strOptions += ", scrollbars=" + ((strScrollbars.toLowerCase() == "true") ? 1 : 0); strOptions += ", resizable=" + ((strResizable.toLowerCase() == "true") ? 1 : 0); strOptions += ", alwaysRaised=1"; } else { strOptions += "status=1"; strOptions += ", toolbar=1"; strOptions += ", scrollbars=1"; strOptions += ", resizable=1"; strOptions += ", alwaysRaised=1"; } var oNewWnd; if (bUseDefaultSize && bUseDefaultControls) { g_wndLast = window.open(strUrl, strWindow, strOptions); } else if (bUseDefaultControls) { if (IE) { oNewWnd = window.open(GetBasePath() + g_strContentFolder + "/blank.html", strWindow, "alwaysRaised=true"); if (bFullScreen) { oNewWnd.moveTo(0, 0); } oNewWnd.resizeTo(nWndWidth, nWndHeight); oNewWnd.document.location = strUrl; } else { oNewWnd = window.open(strUrl, strWindow, "alwaysRaised=true"); oNewWnd.resizeTo(nWndWidth, nWndHeight); } g_wndLast = oNewWnd; } else { oNewWnd = window.open(strUrl, strWindow, strOptions); g_wndLast = oNewWnd; } if (bFullScreen && !(bUseDefaultControls && IE)) { oNewWnd.moveTo(0, 0); } } function ReplaceAll(strTarget, strChar, strNew) { var arrRemoved = strTarget.split(strChar); return arrRemoved.join(strNew); } //////////////////////////////////////////////////////////////////////////////// // Open Swf Window //////////////////////////////////////////////////////////////////////////////// var g_oSwfInfo = new Object(); var g_wndSwf; var g_wndLast; function OpenSwfWindow(strFileName, nWidth, nHeight, strStatus, strToolbar, strLocation, strMenubar, strScrollbars, strResizable) { var strScroll = "0"; g_oSwfInfo.strContentFolder = g_strContentFolder; g_oSwfInfo.strFileName = strFileName; g_oSwfInfo.nWidth = parseInt(nWidth); g_oSwfInfo.nHeight = parseInt(nHeight); if (g_oSwfInfo.nWidth > screen.availWidth) { g_oSwfInfo.nWidth = screen.availWidth; strScroll = "1"; } if (g_oSwfInfo.nHeight > screen.availHeight) { g_oSwfInfo.nHeight = screen.availHeight; strScroll = "1"; } var strSearch = ""; strSearch += "path=" + g_strContentFolder + "&"; strSearch += "file=" + strFileName + "&"; strSearch += "w=" + nWidth + "&"; strSearch += "h=" + nHeight; var strOptions = ""; strOptions += "width=" + g_oSwfInfo.nWidth; strOptions += ", height=" + g_oSwfInfo.nHeight; strOptions += ", status=" + ((strStatus.toLowerCase() == "true") || true ? 1 : 0); strOptions += ", toolbar=" + ((strToolbar.toLowerCase() == "true") || true ? 1 : 0); strOptions += ", location=" + ((strLocation.toLowerCase() == "true") || true ? 1 : 0); strOptions += ", menubar=" + ((strMenubar.toLowerCase() == "true") || true ? 1 : 0); strOptions += ", scrollbars=" + ((strScrollbars.toLowerCase() == "true") || true ? 1 : 0); strOptions += ", resizable=" + ((strResizable.toLowerCase() == "true") || true ? 1 : 0); if (g_wndSwf) { try { g_wndSwf.close() } catch (e) { } } g_wndSwf = window.open(GetBasePath() + g_strContentFolder + "/swf.html?" + strSearch, "SwfWnd", strOptions); g_wndLast = g_wndSwf; } function GetBasePath() { var strFullPath = document.location.href; var nPosHash = strFullPath.indexOf("#"); if (nPosHash > 0) { strFullPath = strFullPath.substring(0, nPosHash); } 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); } //////////////////////////////////////////////////////////////////////////////// // Video //////////////////////////////////////////////////////////////////////////////// function OpenVideo(strUrl, strWndWidth, strWndHeight, strVidWidth, strVidHeight, strDuration, strPlaybar, strVolume, strAutoPlay, strStatus, strToolbar, strLocation, strMenubar, strScrollbars, strResizable, strType, strASVersion) { var nWndWidth = parseInt(strWndWidth); var nWndHeight = parseInt(strWndHeight); var strSearch = "exUrl=" + strUrl + "&exWndWidth=" + strWndWidth + "&exWndHeight=" + strWndHeight + "&exWidth=" + strVidWidth + "&exHeight=" + strVidHeight + "&exDuration=" + strDuration + "&exPlaybar=" + strPlaybar + "&exVolume=" + strVolume + "&exAutoPlay=" + strAutoPlay + "&exType=" + strType + "&exASVersion=" + strASVersion; if (nWndWidth > screen.availWidth) { nWndWidth = screen.availWidth; } if (nWndHeight > screen.availHeight) { nWndHeight = screen.availHeight; } var strOptions = ""; strOptions += "width=" + nWndWidth; strOptions += ", height=" + nWndHeight; strOptions += ", status=" + ((strStatus.toLowerCase() == "true") ? 1 : 0); strOptions += ", toolbar=" + ((strToolbar.toLowerCase() == "true") ? 1 : 0); strOptions += ", location=" + ((strLocation.toLowerCase() == "true") ? 1 : 0); strOptions += ", menubar=" + ((strMenubar.toLowerCase() == "true") ? 1 : 0); strOptions += ", scrollbars=" + ((strScrollbars.toLowerCase() == "true") ? 1 : 0); strOptions += ", resizable=" + ((strResizable.toLowerCase() == "true") ? 1 : 0); if (g_wndSwf) { try { g_wndSwf.close() } catch (e) { } } var nXPos = 0; var nYPos = 0; var nWidth = screen.availWidth; var nHeight = screen.availHeight; if (window.screenX != undefined) { nXPos = window.screenX; nYPos = window.screenY; nWidth = window.innerWidth; nHeight = window.innerHeight; } else if (window.screenLeft != undefined) { nXPos = window.screenLeft; nYPos = window.screenTop; nWidth = document.body.offsetWidth; nHeight = document.body.offsetHeight; } strOptions += ", left=" + (nXPos + (nWidth - nWndWidth)/2); strOptions += ", screenX=" + (nXPos + (nWidth - nWndWidth)/2); strOptions += ", top=" + (nYPos + (nHeight - nWndHeight)/2); strOptions += ", screenY=" + (nYPos + (nHeight - nWndHeight)/2); g_wndSwf = window.open(GetBasePath() + g_strContentFolder + "/VideoPlayer.html?" + strSearch, "Video", strOptions); g_wndLast = g_wndSwf; } //////////////////////////////////////////////////////////////////////////////// // Right click support //////////////////////////////////////////////////////////////////////////////// var g_bSetCapture = false; function AddRightClickListener() { if (IE) { divSwf.onmousedown = IEMouseDown; divSwf.onmouseup = IEMouseUp divSwf.oncontextmenu = DivContextMenu; } else { window.addEventListener('mousedown', NSMouseDown(), true); window.addEventListener('mouseup', NSMouseUp(), true); } } function IEMouseDown(evt) { if (event.button == 2) { if (NotifyRightDown("player")) { divSwf.setCapture(); g_bSetCapture = true; } } } function IEMouseUp() { if (event.button == 2) { NotifyRightUp("player"); } if (g_bSetCapture) { g_bSetCapture = false; divSwf.releaseCapture(); } } function DivContextMenu() { return false; } function NSMouseDown() { return function(evt) { if (evt.button == 2) { if (NotifyRightDown(evt.target.id)) { evt.stopPropagation(); evt.preventDefault(); } } } } function NSMouseUp() { return function(evt) { if (evt.button == 2) { if (NotifyRightUp(evt.target.id)) { evt.stopPropagation(); evt.preventDefault(); } } } } function NotifyRightDown(strId) { var bResult = false; if (strId == "player" || strId == "eplayer") { var oPlayer = GetPlayer(); bResult = oPlayer.NotifyRightMouseDown(); } return bResult; } function NotifyRightUp(strId) { var bResult = false; if (strId == "player" || strId == "eplayer") { var oPlayer = GetPlayer(); bReuslt = oPlayer.NotifyRightMouseUp(); } return bResult; } function MailTo(strAddress) { document.location = "mailto:" + strAddress; } function EmailResults(bShowUserScore, bShowPassingScore, bShowPassFail, bShowQuizReview, strAddress, strMainQuizId, arrQuizzes) { var strNewLine = "\n"; if (IE) { strNewLine = "%0D%0A"; } var strTitle = g_listQuizzes[strMainQuizId].strQuizName; var g_strSubject = "Quiz Results: " + strTitle; var strQuizResults = ""; var strMainHeader = " " + strTitle + strNewLine + "Status, Score, Passing Score, Max Score, Min Score, Time" + strNewLine; var strLineHeader = strNewLine + strNewLine + "Date, Time, Score, Quiz Name, Interaction ID, Interaction Type, Student Response, Result, Weight, Latency" + strNewLine; var strMainData = strNewLine; var strLineData = strNewLine; var oQuizResult = g_listQuizzes[strMainQuizId]; // Status var nPtScore = Number(oQuizResult.nPtScore); var nPassScore = Number(oQuizResult.nPassingScore); var strStatus = (nPtScore >= nPassScore) ? "Pass" : "Fail"; strMainData += strStatus strMainData += ","; // Score strMainData += nPtScore + ","; // Passing Score strMainData += nPassScore + ","; // Max Score strMainData += 100 + ","; // Min Score strMainData += 0 + ","; // Time strMainData += GetTime(oQuizResult.dtmFinished); // for (strQuizId in g_listQuizzes) for (var j = 0; j < arrQuizzes.length; j++) { strQuizId = arrQuizzes[j]; oQuizData = g_listQuizzes[strQuizId]; var arrQuestions = oQuizData.arrQuestions; for (var i = 0; i < arrQuestions.length; i++) { //Date strLineData += GetDate(new Date()) + ","; // Time strLineData += arrQuestions[i].strCompletedTime + ","; // Score strLineData += arrQuestions[i].nPoints + ","; // Quiz Name strLineData += oQuizData.strQuizName + ","; // Objective Id strLineData += arrQuestions[i].strLMSId + ","; // Interaction Type strLineData += arrQuestions[i].strType + ","; // Student Response var strResponse = arrQuestions[i].strUserResponse; strResponse = ReplaceAll(strResponse, "'", "%27"); strLineData += strResponse + ","; // Result strLineData += arrQuestions[i].strStatus + ","; // Weight strLineData += arrQuestions[i].nWeight + ","; // Latency strLineData += arrQuestions[i].nLatency; strLineData += strNewLine; } } strQuizResults = strMainHeader + strMainData + strLineHeader + strLineData; var sHTML = ""; if (IE) { sHTML += '
'; } else { sHTML += ''; sHTML += ''; } sHTML += '

'; sHTML += '
'; document.getElementById("divEmail").innerHTML = sHTML; document.getElementById("formQuiz").submit(); } //////////////////////////////////////////////////////////////////////////////// // Get Time //////////////////////////////////////////////////////////////////////////////// function GetTime(dtmDate) { var strResult = ""; var nHours = dtmDate.getHours(); var strAM = "am"; var nMinutes = dtmDate.getMinutes(); var strMinutes = "" + nMinutes; var nSeconds = dtmDate.getSeconds(); var strSeconds = "" + nSeconds; if (nMinutes < 10) { strMinutes = "0" + nMinutes; } if (nSeconds < 10) { strSeconds = "0" + nSeconds; } strResult = nHours + ":" + strMinutes + ":" + strSeconds; return strResult; } function GetDate(dtmDate) { var strResult = ""; strResult = (dtmDate.getMonth() + 1) + "/" + dtmDate.getDate() + "/" + dtmDate.getFullYear(); return strResult; } //////////////////////////////////////////////////////////////////////////////// // Results data //////////////////////////////////////////////////////////////////////////////// function QuizData(strQuizId, strQuizName) { this.strQuizId = strQuizId; this.strQuizName = strQuizName; this.arrQuestions = new Array(); this.dtmFinished = new Date(); this.strStatus = ""; this.nScore = 0; this.nPassingScore = 80; this.nMinScore = 0; this.nMaxScore = 100; this.nPtScore = 0; this.nPtMax = 100; this.AddQuestionResult = function(oQuestionResult) { var bFound = false; for (var i = 0; i < this.arrQuestions.length; i++) { if (this.arrQuestions[i].nQuestionNumber == oQuestionResult.nQuestionNumber) { this.arrQuestions[i] = oQuestionResult; bFound = true; } } if (!bFound) { this.arrQuestions.push(oQuestionResult); } } } function ContentResults() { this.dtmFinished = new Date(); this.nPassingScore = 80; this.nScore = 0; this.strStatus = "incomplete"; this.strType = "quiz"; } function QuestionResults(strId, strLMSId, strType, strCorrectResponse, strUserResponse, nLatency, strStatus, nPoints, strCompletedTime, nWeight, nQuestionNumber, strDescription, bTracked) { this.strId = strId; this.strLMSId = strLMSId; this.strType = strType; this.strCorrectResponse = strCorrectResponse; this.strUserResponse = strUserResponse; this.nLatency = nLatency; this.strStatus = strStatus; this.nPoints = nPoints; this.strCompletedTime = strCompletedTime; this.nWeight = nWeight; this.nQuestionNumber = nQuestionNumber; this.strDescription = strDescription; this.bTracked = bTracked; /* this.AlertResults = function() { var strTemp = "Id: " + strId + "\nType: " + strType + "\nCorrectResponse: " + strCorrectResponse + "\nUserResponse: " + strUserResponse + "\nLatency: " + nLatency + "\nStatus: " + strStatus + "\nPoints: " + nPoints + "\nCompletedTime: " + strCompletedTime + "\nWeight: " + nWeight + "\nQuestionNumber: " + nQuestionNumber + "\nDescription: " + strDescription; alert(strTemp); }*/ } /****************************************************/ // Tin Can /****************************************************/ var TYPE_RESUME_SAVE = 1; var TYPE_RESUME_RESTORE = 2; var TYPE_TRACKING = 3; var g_bWaitingTinCanResponse = false; var g_arrTinCanMsgQueue = new Array(); var g_oCurrentRequest = null; var g_bStopPosting = false; var g_bFatalError = false; function GetTinCanData() { return decodeURIComponent(g_strQuery); } function SendTinCanRequest(nMessageType, strMethod, strData, strUrl, arrHeaders) { var oTinCanRequest = new Object(); oTinCanRequest.MessageType = nMessageType; oTinCanRequest.Method = strMethod; oTinCanRequest.Data = unescape(strData); oTinCanRequest.Url = strUrl; oTinCanRequest.Headers = arrHeaders; SendRequest(oTinCanRequest) } function SendRequest(oTinCanRequest) { if (g_bWaitingTinCanResponse || g_bStopPosting) { g_arrTinCanMsgQueue.push(oTinCanRequest); } else { g_oCurrentRequest = oTinCanRequest; PostAsyncRequest(oTinCanRequest.MessageType, oTinCanRequest.Method, oTinCanRequest.Data, oTinCanRequest.Url, oTinCanRequest.Headers) } } function PostAsyncRequest(nMessageType, strMethod, strData, strUrl, arrHeaders) { try { if (UseXDomainRequest(strUrl)) { PostXDomainRequest(nMessageType, strMethod, strData, strUrl, arrHeaders, false); } else { PostXmlHttp(nMessageType, strMethod, strData, strUrl, arrHeaders); } } catch (error) { if (confirm("Unable to connect to server. Please verify that you are connected to the internet. Retry?")) { g_bWaitingTinCanResponse = false; SendRequest(g_oCurrentRequest); return; } else { g_bStopPosting = true; g_bFatalError = true; GetPlayer().FatalTinCanError(0); } } } function PostXDomainRequest(nMessageType, strMethod, strData, strUrl, arrHeaders, bSync) { var xDomain = new XDomainRequest(); xDomain.open(strMethod, strUrl); xDomain.MessageType = nMessageType; xDomain.status = 0; xDomain.onload = function() { xDomain.status = 200; if (!bSync) { OnSendComplete(xDomain); } } xDomain.onerror = function() { xDomain.status = -1; if (!bSync) { OnSendError(xDomain); } } xDomain.send(strData); if (bSync) { var nStartTime = (new Date).getTime(); while ((new Date).getTime() - nStartTime < 5000 && xDomain.status == 0) { var xmlHttp = new XMLHttpRequest(); xmlHttp.open("GET", window.location + "?" + (new Date).getTime(), false); xmlHttp.send(null); } } return xDomain.status; } function PostXmlHttp(nMessageType, strMethod, strData, strUrl, arrHeaders) { var xmlHttp = CreateXmlHttp(); if (xmlHttp != null) { g_bWaitingTinCanResponse = true; xmlHttp.MessageType = nMessageType; xmlHttp.onreadystatechange = function() { if (xmlHttp.readyState == 4) { if (xmlHttp.status >= 400 && !(IE && xmlHttp.status == 1223)) { OnSendError(xmlHttp); } else { OnSendComplete(xmlHttp); } } } xmlHttp.open(strMethod, strUrl, true); if (arrHeaders != null && arrHeaders.length > 0) { for (var i = 0; i < arrHeaders.length; i++) { xmlHttp.setRequestHeader(arrHeaders[i].name, arrHeaders[i].value); } } xmlHttp.send(strData); } } function OnSendComplete(commObj) { if (commObj.MessageType == TYPE_RESUME_RESTORE) { GetPlayer().SetTinCanResume(commObj.responseText); } g_bWaitingTinCanResponse = false; g_oCurrentRequest = null; if (g_arrTinCanMsgQueue.length > 0 && !g_bStopPosting) { SendRequest(g_arrTinCanMsgQueue.shift()); } } function OnSendError(commObj) { if (commObj.MessageType == TYPE_RESUME_RESTORE) { GetPlayer().SetTinCanResume(""); g_bWaitingTinCanResponse = false; g_oCurrentRequest = null; if (g_arrTinCanMsgQueue.length > 0 && !g_bStopPosting) { SendRequest(g_arrTinCanMsgQueue.shift()); } } else { if (confirm("Unable to connect to server. Please verify that you are connected to the internet. Retry? ")) { g_bWaitingTinCanResponse = false; SendRequest(g_oCurrentRequest); } else { g_bStopPosting = true; g_bFatalError = true; if (commObj.status) { GetPlayer().FatalTinCanError(commObj.status); } } } } function CheckTinCanComplete() { g_bStopPosting = true; while (g_arrTinCanMsgQueue.length > 0) { var oRequest = g_arrTinCanMsgQueue.shift(); PostSyncRequest(oRequest.Method, oRequest.Data, oRequest.Url, oRequest.Headers) } } function CreateXmlHttp() { var xmlHttp = null; var arrCtrlName = new Array("MSXML2.XMLHttp.5.0", "MSXML2.XMLHttp.4.0", "MSXML2.XMLHttp.3.0", "MSXML2.XMLHttp", "Microsoft.XMLHttp"); var nIndex = 0; if (window.XMLHttpRequest) { try { xmlHttp = new XMLHttpRequest(); } catch (e) { xmlHttp = null; } } if (xmlHttp == null && window.ActiveXObject) { // Use the ActiveX Control while (xmlHttp == null && nIndex < arrCtrlName.length) { try { xmlHttp = new ActiveXObject(arrCtrlName[nIndex]); } catch (e) { xmlHttp = null; } nIndex++; } } return xmlHttp; } function PostSyncRequest(strMethod, strData, strUrl, arrHeaders) { try { var nStatus = 0; if (UseXDomainRequest(strUrl)) { nStatus = PostXDomainRequest(0, strMethod, strData, strUrl, arrHeaders, true); } else { nStatus = PostSyncXmlHttp(strMethod, strData, strUrl, arrHeaders); } if (nStatus != 200) { if(confirm("Could not save the result data. You may need to login again. Retry?")) { PostSyncRequest(strMethod, strData, strUrl, arrHeaders); return; } else { g_bFatalError = true; } } } catch (error) { if (confirm("Unable to connect to server. Please verify that you are connected to the internet. Retry?")) { PostSyncRequest(strMethod, strData, strUrl, arrHeaders); return; } else { g_bFatalError = true; } } } function PostSyncXmlHttp(strMethod, strData, strUrl, arrHeaders) { var xmlHttp = CreateXmlHttp(); var nStatus = 200; if (xmlHttp != null) { xmlHttp.open(strMethod, strUrl, false); for (var i = 0; i < arrHeaders.length; i++) { xmlHttp.setRequestHeader(arrHeaders[i].name, arrHeaders[i].value); } xmlHttp.send(strData); if(xmlHttp.status >= 400 && !(IE && xmlHttp.status == 1223)) { nStatus = -1; } } return nStatus; } function UseXDomainRequest(strUrl) { var bResult = false; if (IE) { var xmlHttp = CreateXmlHttp(); var anchorDest = (document.createElement("a")); var anchorSource = (document.createElement("a")); anchorDest.href = strUrl; anchorSource.href = window.location; bResult = (anchorDest.hostname != anchorSource.hostname || anchorDest.protocol != anchorSource.protocol || anchorDest.port != anchorSource.port); } return bResult; }