|
// set document.domain property here, if it works for your environment/SCORM implementation |
|
// document.domain=""; |
|
var g_intAPIType = 0, |
|
strURLFile = "sample.swf", // Name of the flash file |
|
intIntervalSecs = 1, // Number of seconds to wait for SCORM API to load |
|
g_intAPIOrder = 0, // Way to search for API object (0 - starts with bottom up; 1 - starts top down) |
|
strURLBase = "", |
|
strURLParams = "", |
|
strURLFull = document.location + "", |
|
intTemp = strURLFull.indexOf("#"), |
|
strTemp = location.protocol.toUpperCase(), |
|
timeCurrent_int = new Date().getTime(), |
|
timeLimit_int = new Date().getTime() + (intIntervalSecs * 1000), |
|
g_bIsInternetExplorer, |
|
flashvars = {}, |
|
params = { bgcolor: "#f5f4f1", menu: "false" }, |
|
attributes = { id: "Captivate", name: "Captivate" }; |
|
|
|
|
|
if(g_intAPIType==0){ |
|
|
|
// Detect Internet Explorer |
|
g_bIsInternetExplorer = navigator.appName.indexOf("Microsoft") != -1; |
|
|
|
} |
|
|
|
function callbackFn(e){ |
|
//e.ref is the <object> aka SWF file. No need for getElementById |
|
if(e.success && e.ref){ |
|
e.ref.tabIndex = -1; //Set tabIndex to enable focus on non-form elements |
|
e.ref.focus(); |
|
} |
|
} |
|
|
|
function Finish(){ |
|
|
|
if((isAPI()) && (g_bFinishDone == false)){ |
|
(g_zAPIVersion=="0.2"?g_objAPI.LMSCommit(""):g_objAPI.Commit("")); |
|
g_bFinishDone = (g_zAPIVersion=="0.2"?g_objAPI.LMSFinish("") == "true":g_objAPI.Terminate("") == "true"); |
|
} |
|
return (g_bFinishDone + ""); // Force type to string |
|
|
|
} |
|
|
|
// Handle fscommand messages from a Flash movie |
|
function Captivate_DoFSCommand(command, args){ |
|
|
|
var CaptivateObj = g_bIsInternetExplorer ? Captivate : document.Captivate, |
|
strFSArgs = new String(args), |
|
strFSCmd = new String(command), |
|
strErr = "true", |
|
strFSArg1, |
|
strFSArg2, |
|
strFSArg3, |
|
intFSDelimiter = strFSArgs.indexOf("|"), |
|
strFSTemp; |
|
|
|
if(intFSDelimiter > -1){ |
|
|
|
strFSArg1 = strFSArgs.substr(0, intFSDelimiter); // Name of data element to get from API |
|
|
|
strFSTemp = strFSArgs.substr(intFSDelimiter + 1); |
|
|
|
intFSDelimiter = strFSTemp.indexOf("|"); |
|
|
|
if(intFSDelimiter > -1){ |
|
strFSArg2 = strFSTemp.substr(0, intFSDelimiter); // Value |
|
strFSArg3 = strFSTemp.substr(intFSDelimiter + 1); // Variable |
|
} else { |
|
strFSArg2 = strFSTemp; |
|
} |
|
|
|
} else { |
|
strFSArg1 = strFSArgs; |
|
} |
|
|
|
// do nothing, if SCORM API is not available |
|
if(!isAPI()){ return; } |
|
|
|
if(strFSCmd == "LMSInitialize" || strFSCmd=="Initialize"){ |
|
|
|
CaptivateObj.SetVariable(strFSArg3, eval('g_objAPI.' + strFSCmd + '(\"\");')); |
|
|
|
} else if(strFSCmd == "LMSSetValue" || strFSCmd=="SetValue"){ |
|
|
|
strErr = eval('g_objAPI.' + strFSCmd + '(\"' + strFSArg1 + '\",\"' + strFSArg2 + '\");'); |
|
CaptivateObj.SetVariable(strFSArg3, strErr); |
|
|
|
} else if(strFSCmd == "LMSFinish" || strFSCmd=="Terminate"){ |
|
|
|
g_bFinishDone = eval('g_objAPI.' + strFSCmd + '(\"\");'); |
|
strErr = g_bFinishDone; |
|
CaptivateObj.SetVariable(strFSArg3, g_bFinishDone); |
|
|
|
} else if(strFSCmd == "LMSCommit" || strFSCmd=="Commit"){ |
|
|
|
strErr = eval('g_objAPI.' + strFSCmd + '(\"\");'); |
|
CaptivateObj.SetVariable(strFSArg3, strErr); |
|
|
|
} else if((strFSArg2) && (strFSArg2.length > 0)){ |
|
|
|
if(strFSCmd=="LMSGetLastError" || strFSCmd=="GetLastError"){ |
|
|
|
strErr = eval('g_objAPI.' + strFSCmd + '();'); |
|
CaptivateObj.SetVariable(strFSArg3, strErr); |
|
|
|
} else { |
|
|
|
strErr = eval('g_objAPI.' + strFSCmd + '(\"' + strFSArg1 + '\");'); |
|
CaptivateObj.SetVariable(strFSArg3, strErr); |
|
} |
|
|
|
} else if(strFSCmd.substring(0,3) == "LMSGet"){ |
|
strErr = "-2: No Flash variable specified"; |
|
} |
|
|
|
return strErr; |
|
} |
|
|
|
function Captivate_DoExternalInterface(command, parameter, value, variable){ |
|
|
|
var CaptivateObj = g_bIsInternetExplorer ? Captivate : document.Captivate, |
|
strFSCmd = new String(command), |
|
strErr = "true", |
|
strFSArg1 = parameter, |
|
strFSArg2 = value, |
|
strFSArg3 = variable, |
|
courseStatus; |
|
|
|
//alert("command " + command + " ;parameter " +parameter+ " ;value " + value + " ;variable " + variable); |
|
//var strFSArgs = new String(args); |
|
|
|
/*var intFSDelimiter = strFSArgs.indexOf("|"); |
|
if(intFSDelimiter > -1) |
|
{ |
|
strFSArg1 = strFSArgs.substr(0, intFSDelimiter); // Name of data element to get from API |
|
var strFSTemp = strFSArgs.substr(intFSDelimiter + 1); |
|
intFSDelimiter = strFSTemp.indexOf("|"); |
|
if(intFSDelimiter > -1) |
|
{ |
|
strFSArg2 = strFSTemp.substr(0, intFSDelimiter); // Value |
|
strFSArg3 = strFSTemp.substr(intFSDelimiter + 1); // Variable |
|
} else { |
|
strFSArg2 = strFSTemp; |
|
} |
|
} else { |
|
strFSArg1 = strFSArgs; |
|
}*/ |
|
|
|
// do nothing, if SCORM API is not available |
|
if(!isAPI()){ return; } |
|
|
|
if(strFSCmd == "LMSInitialize" || strFSCmd=="Initialize"){ |
|
|
|
//CaptivateObj.SetVariable(strFSArg3, eval('g_objAPI.' + strFSCmd + '(\"\");')); |
|
CaptivateObj.SetScormVariable(strFSArg3,eval('g_objAPI.' + strFSCmd + '(\"\");')); |
|
|
|
courseStatus = eval('g_objAPI.' + 'GetValue' + '(\"' + "cmi.completion_status" + '\");'); |
|
|
|
if(courseStatus == 'not attempted'){ |
|
eval('g_objAPI.' + 'SetValue' + '(\"' + "cmi.completion_status" + '\",\"' + 'incomplete' + '\");'); |
|
} |
|
|
|
} else if(strFSCmd == "LMSSetValue" || strFSCmd == "SetValue"){ |
|
|
|
strErr = eval('g_objAPI.' + strFSCmd + '(\"' + strFSArg1 + '\",\"' + strFSArg2 + '\");'); |
|
//CaptivateObj.SetVariable(strFSArg3, strErr); |
|
CaptivateObj.SetScormVariable(strFSArg3, strErr); |
|
|
|
} else if(strFSCmd == "LMSFinish" || strFSCmd=="Terminate"){ |
|
|
|
g_bFinishDone = eval('g_objAPI.' + strFSCmd + '(\"\");'); |
|
strErr = g_bFinishDone; |
|
//CaptivateObj.SetVariable(strFSArg3, g_bFinishDone); |
|
CaptivateObj.SetScormVariable(strFSArg3, g_bFinishDone); |
|
|
|
} else if(strFSCmd == "LMSCommit" || strFSCmd=="Commit"){ |
|
|
|
strErr = eval('g_objAPI.' + strFSCmd + '(\"\");'); |
|
//CaptivateObj.SetVariable(strFSArg3, strErr); |
|
CaptivateObj.SetScormVariable(strFSArg3, strErr); |
|
|
|
} else if((strFSArg2) && (strFSArg2.length > 0)){ |
|
|
|
if(strFSCmd=="LMSGetLastError" || strFSCmd=="GetLastError"){ |
|
|
|
strErr = eval('g_objAPI.' + strFSCmd + '();'); |
|
//CaptivateObj.SetVariable(strFSArg3, strErr); |
|
CaptivateObj.SetScormVariable(strFSArg3, strErr); |
|
|
|
} else { |
|
|
|
strErr = eval('g_objAPI.' + strFSCmd + '(\"' + strFSArg1 + '\");'); |
|
//CaptivateObj.SetVariable(strFSArg3, strErr); |
|
CaptivateObj.SetScormVariable(strFSArg3, strErr); |
|
|
|
} |
|
|
|
} else if(strFSCmd.substring(0,3) == "LMSGet"){ |
|
strErr = "-2: No Flash variable specified"; |
|
} |
|
|
|
return strErr; |
|
} |
|
|
|
// Hook for Internet Explorer |
|
if((navigator.appName && navigator.appName.indexOf("Microsoft") != -1 && navigator.userAgent.indexOf("Windows") != -1 && navigator.userAgent.indexOf("Windows 3.1") == -1) || g_intAPIType == -1){ |
|
g_intAPIType = 0; |
|
document.write('<script language=\"VBScript\"\>\n'); |
|
document.write('On Error Resume Next\n'); |
|
document.write('Sub Captivate_FSCommand(ByVal command, ByVal args)\n'); |
|
document.write('Call Captivate_DoFSCommand(command, args)\n'); |
|
document.write('End Sub\n'); |
|
document.write('</script\>\n'); |
|
document.write('<script language=\"VBScript\"\>\n'); |
|
document.write('On Error Resume Next\n'); |
|
document.write('Sub Captivate_DoExternalInterface(ByVal command, ByVal parameter, ByVal value, ByVal variable)\n'); |
|
document.write('Call Captivate_DoExternalInterface(command, parameter, value, variable)\n'); |
|
document.write('End Sub\n'); |
|
document.write('</script\>\n'); |
|
} else { |
|
g_intAPIType = 0; |
|
} |
|
|
|
if(intTemp == -1){ |
|
intTemp = strURLFull.indexOf("?"); |
|
} |
|
|
|
if(intTemp > 0){ |
|
strURLParams = strURLFull.substring(intTemp + 1, strURLFull.length); |
|
} |
|
|
|
if(strTemp.indexOf("FILE") == -1){ |
|
intTemp = location.pathname.lastIndexOf("/"); |
|
} else { |
|
intTemp = location.pathname.lastIndexOf("\\"); |
|
} |
|
|
|
if(intTemp != -1){ |
|
strURLBase = location.protocol + "//" + location.host + location.pathname.substring(0, intTemp + 1); |
|
} else { |
|
strURLBase = location.protocol + "//" + location.host + location.pathname; |
|
} |
|
|
|
strURLParams = (strURLParams==unescape(strURLParams)?escape(strURLParams):strURLParams); |
|
strURLParams = (strURLParams==""?"":"?") + strURLParams; |
|
|
|
|
|
// This simply loops for a set period of time, waiting for the API to |
|
// load and/or be found. A better solution would be to use setInterval |
|
// and on the timeout, redirect or load the resulting Captivate file. |
|
|
|
while((g_objAPI == null) && timeCurrent_int < timeLimit_int){ |
|
g_objAPI = getAPI(g_intAPIOrder); |
|
timeCurrent_int = new Date().getTime(); |
|
} |
|
|
|
if(g_objAPI != null){ |
|
strURLParams = "?SCORM_API=" + g_zAPIVersion + "&SCORM_TYPE=" + g_intAPIType; |
|
} |
|
|
|
//swfobject.embedSWF has a built-in domready call, |
|
//so it doesn't need to be wrapped in a window.onload event. |
|
swfobject.embedSWF(strURLFile + strURLParams, "CaptivateContent", "641", "512", "10", false, flashvars, params, attributes, callbackFn); |
|
|
|
window.onunload = Finish; |