\n'); } // FS SCORM - fscommand adapter for ADL SCORM // version 1.1.1 11/25/01 // Copyright 2002 Pathlore Software Corporation All Rights Reserved // Copyright 2002 Macromedia Inc. All rights reserved. // Developed by Tom King, Macromedia and Leonard Greenberg, Pathlore // Modified by Jeff Burton and Andrew Chemey, Macromedia (01/09/02) // ----------------------------------------------------------------- var InternetExplorer = navigator.appName.indexOf("Microsoft") != -1; var findAPITries = 0; var mm_API = null; var _debug = true; typescorm = "scorm12"; function findAPI(win) { win_saved = win; //check scorm 1.2 while ( (win.API == null) && (win.parent != null) && (win.parent != win) ) { findAPITries++; if ( findAPITries > 500 ) { alert( "Error finding API 1.2 -- too deeply nested." ); //return null; break; } win = win.parent; } //on a détecté le SCORM 1.2 if (win.API!=null && win.API!=undefined) { typescorm = "scorm12"; return win.API; } else { findAPITries = 0; win = win_saved; // Check to see if the window (win) contains the API // if the window (win) does not contain the API and // the window (win) has a parent window and the parent window // is not the same as the window (win) while ( (win.API_1484_11 == null) && (win.parent != null) && (win.parent != win) ) { // increment the number of findAPITries findAPITries++; // Note: 7 is an arbitrary number, but should be more than sufficient if (findAPITries > 7) { alert("Error finding API -- too deeply nested."); return null; } // set the variable that represents the window being // being searched to be the parent of the current window // then search for the API again win = win.parent; } typescorm = "scorm2004"; return win.API_1484_11; } } function getAPI() { var Quiz1Obj = getFlashMovieObject("Quiz1"); // start by looking for the API in the current window var theAPI = findAPI(window); // if the API is null (could not be found in the current window) // and the current window has an opener window if ( (theAPI == null) && (window.opener != null) && (typeof(window.opener) != "undefined") ) { // try to find the API in the current window's opener theAPI = findAPI(window.opener); } // if the API has not been found if (theAPI == null) { // Alert the user that the API Adapter could not be found //alert('aicc') window.status = "Unable to find an API adapter"; Quiz1Obj.SetVariable("communication_mode","aicc"); } else { window.status = "API found"; Quiz1Obj.SetVariable("communication_mode","scorm") } return theAPI; } // make sure status conforms to scorm standards function normalizeStatus(status) { if (typescorm == "scorm12") { switch (status.toUpperCase().charAt(0)) { case 'C': return Array("completed"); case 'I': return Array("incomplete"); case 'N': return Array("not attempted"); case 'F': return Array("failed"); case 'P': return Array("passed"); } } if (typescorm == "scorm2004") { switch (status.toUpperCase().charAt(0)) { case 'C': return Array("completed","passed"); case 'I': return Array("incomplete","failed"); case 'N': return Array("not attempted","failed"); case 'F': return Array("completed","failed"); case 'P': return Array("completed","passed"); } } return status; } // make sure the question type conforms to scorm standards function normalizeType(theType) { switch (theType.toUpperCase().charAt(0)) { case 'T': return "true-false"; case 'C': return "choice"; case 'F': return "fill-in"; case 'M': return "matching"; case 'P': return "peformance"; case 'S': return "sequencing"; case 'L': return "likert"; case 'N': return "numeric"; } return theType; } function normalizeTime(theTime) { if (typescorm == "scorm12") { time = theTime; } if (typescorm == "scorm2004") { tmp = theTime.split(":"); time = "PT"+tmp[0]+"H"+tmp[1]+"M"+tmp[2]+"S"; } return time } // make sure the question result conforms to scorm standards function normalizeResult(result) { switch (result.toUpperCase().charAt(0)) { case 'C': return "correct"; case 'W': return "wrong"; case 'U': return "unanticipated"; case 'N': return "neutral"; } return result; } var InternetExplorer = navigator.appName.indexOf("Microsoft") != -1; // Handle all the the FSCommand messages in a Flash movie function Quiz1_DoFSCommand(command, args) { var Quiz1Obj = getFlashMovieObject("Quiz1"); scorm_data = []; scorm_function = []; if (typescorm =="scorm12") { //on est en scorm 1.2 scorm_data["cmi.core.student_id"] = "cmi.core.student_id"; scorm_data["cmi.student_data.mastery_score"] = "cmi.student_data.mastery_score"; scorm_data["cmi.core.lesson_status"] = "cmi.core.lesson_status"; scorm_data["cmi.core.session_time"] = "cmi.core.session_time"; scorm_data["cmi.core.score.raw"] = "cmi.core.score.raw"; scorm_data["cmi.suspend_data"] = "cmi.suspend_data"; scorm_data["cmi.core.exit"] = "cmi.core.exit"; scorm_data["cmi.interactions._count"] = "cmi.interactions._count"; scorm_data["cmi.interactions.time"] = "time"; scorm_data["cmi.objective.status"] = "status"; scorm_data["cmi.interactions.student_response"] = "student_response" scorm_function["LMSGetValue"] = "LMSGetValue"; scorm_function["LMSSetValue"] = "LMSSetValue"; scorm_function["LMSCommit"] = "LMSCommit"; scorm_function["cmi.core.lesson_status"] = "LMSSetValue"; scorm_function["CMISetTime"] = "LMSSetValue"; scorm_function["cmi.core.score.raw"] = "LMSSetValue"; scorm_function["CMIInitialize"] = "LMSInitialize"; scorm_function["success_status"] = "LMSSetValue"; scorm_function["CMIExitAU"] = "LMSFinish"; ratioscore = 1; } if (typescorm =="scorm2004") { //on est en scorm 2004 //scorm_data["cmi.core.student_id"] = "cmi.learner_name"; scorm_data["cmi.core.student_id"] = "cmi.learner_id"; scorm_data["cmi.student_data.mastery_score"] = "cmi.scaled_passing_score"; scorm_data["cmi.core.lesson_status"] = "cmi.completion_status"; scorm_data["cmi.core.session_time"] = "cmi.session_time"; scorm_data["cmi.core.score.raw"] = "cmi.score.scaled"; scorm_data["cmi.suspend_data"] = "cmi.suspend_data"; scorm_data["cmi.core.exit"] = "cmi.exit"; scorm_data["success_status"] = "cmi.success_status"; scorm_data["cmi.objectives._count"] = "cmi.objectives._count"; scorm_data["cmi.interactions._count"] = "cmi.interactions._count"; scorm_data["cmi.interactions.time"] = "timestamp"; scorm_data["cmi.objective.status"] = "success_status"; scorm_data["cmi.interactions.student_response"] = "learner_response" scorm_function["LMSGetValue"] = "GetValue"; scorm_function["LMSSetValue"] = "SetValue"; scorm_function["LMSCommit"] = "Commit"; scorm_function["cmi.core.lesson_status"] = "SetValue"; scorm_function["CMISetTime"] = "SetValue"; scorm_function["cmi.core.score.raw"] = "SetValue"; scorm_function["CMIInitialize"] = "Initialize"; scorm_function["success_status"] = "SetValue"; scorm_function["CMIExitAU"] = "Terminate"; ratioscore = 0.01; } args = String(args); command = String(command); var F_intData = args.split(";"); // check for existence of scorm api if (mm_API == null) return; switch (command) { case "MM_StartSession" : break; case "MM_cmiSendInteractionInfo" : //MM_cmiSendInteractionInfo(date, time, intid, objid, intrtype, correct, student, result, weight, latency) //var n = mm_API.LMSGetValue("cmi.interactions._count"); var n = eval('mm_API.' + scorm_function["LMSGetValue"] + '(\"'+scorm_data["cmi.interactions._count"]+'\")') err = eval('mm_API.' + scorm_function["LMSSetValue"] + '(\"cmi.interactions.'+ n +'.id\",\"'+F_intData[2]+'\")') err = eval('mm_API.' + scorm_function["LMSSetValue"] + '(\"cmi.interactions.'+ n +'.objectives.0.id\",\"'+F_intData[3]+'\")') //si on est en scorm le format est différent if (typescorm == "scorm2004") { d = new Date(); m = ((Number(d.getMonth())+1)>=10) ? (Number(d.getMonth())+1) : "0"+(Number(d.getMonth())+1) j = (Number(d.getDate())>=10) ? (d.getDate()) : "0"+(d.getDate()) timeToSend = d.getFullYear()+"-"+m+"-"+j+"T"+F_intData[1]; } else { timeToSend = F_intData[1]; } err = eval('mm_API.' + scorm_function["LMSSetValue"] + '(\"cmi.interactions.'+ n +'.'+scorm_data["cmi.interactions.time"]+'\",\"'+timeToSend+'\")') err = eval('mm_API.' + scorm_function["LMSSetValue"] + '(\"cmi.interactions.'+ n +'.type\",\"'+F_intData[4]+'\")') err = eval('mm_API.' + scorm_function["LMSSetValue"] + '(\"cmi.interactions.'+ n +'.correct_responses.0.pattern\",\"'+F_intData[5]+'\")') err = eval('mm_API.' + scorm_function["LMSSetValue"] + '(\"cmi.interactions.'+ n +'.weighting\",\"'+F_intData[8]+'\")') err = eval('mm_API.' + scorm_function["LMSSetValue"] + '(\"cmi.interactions.'+ n +'.'+scorm_data["cmi.interactions.student_response"]+'\",\"'+F_intData[6]+'\")') err = eval('mm_API.' + scorm_function["LMSSetValue"] + '(\"cmi.interactions.'+ n +'.result\",\"'+F_intData[7]+'\")') err = eval('mm_API.' + scorm_function["LMSSetValue"] + '(\"cmi.interactions.'+ n +'.latency\",\"'+normalizeTime(F_intData[9])+'\")') break; case "MM_cmiSendObjectiveInfo" : //MM_cmiSendObjectiveInfo(index, objid, result, status) //var n = mm_API.LMSGetValue("cmi.objectives._count"); var n = eval('mm_API.' + scorm_function["LMSGetValue"] + '(\"'+scorm_data["cmi.objectives._count"]+'\")') err = eval('mm_API.' + scorm_function["LMSSetValue"] + '(\"cmi.objectives.'+ n +'.id\",\"'+F_intData[1]+'\")') //alert("MM_cmiSendObjectiveInfo id:"+err) err = eval('mm_API.' + scorm_function["LMSSetValue"] + '(\"cmi.objectives.'+ n +'.'+scorm_data["cmi.objective.status"]+'\",\"'+F_intData[2]+'\")') break; case "CMISetScore": case "MM_cmiSendScore" : //MM_cmiSendScore(theScore) //utilisé par QM err = eval('mm_API.' + scorm_function["cmi.core.score.raw"] + '(\"'+scorm_data["cmi.core.score.raw"]+'\",\"'+F_intData[0]*ratioscore+'\")') break; case "CMISetStatus": case "MM_cmiSetLessonStatus" : //MM_cmiSetLessonStatus(theStatus) //utlisé par QM err = eval('mm_API.' + scorm_function["cmi.core.lesson_status"] + '(\"'+scorm_data["cmi.core.lesson_status"]+'\",\"'+ normalizeStatus(F_intData[0])[0]+'\")') if (typescorm == "scorm2004") { err = eval('mm_API.' + scorm_function["success_status"] + '(\"'+scorm_data["success_status"]+'\",\"'+normalizeStatus(F_intData[0])[1]+'\")') } err = eval('mm_API.' + scorm_function["LMSCommit"] + '(\"\")') break; case "CMISetTime" : //CMISetTime(t) //utlisé par QM err = eval('mm_API.' + scorm_function[command] + '(\"'+scorm_data["cmi.core.session_time"]+'\",\"'+normalizeTime(F_intData[0])+'\")') break; case "CMISetCompleted" : //CMISetCompleted() mm_API.LMSSetValue("cmi.core.lesson_status", "completed"); break; case "CMISetStarted" : //CMISetCompleted() mm_API.LMSSetValue("cmi.core.lesson_status", "incomplete"); break; case "CMISetPassed": //CMISetCompleted() mm_API.LMSSetValue("cmi.core.lesson_status", "passed"); break; case "CMISetFailed": //CMISetCompleted() mm_API.LMSSetValue("cmi.core.lesson_status", "failed"); break; case "CMISetData": //CMISetData(data) mm_API.LMSSetValue("cmi.suspend_data", F_intData[0]); break; case "CMISetLocation": //CMISetLocation(loc) mm_API.LMSSetValue(scorm["cmi.core.lesson_location"], F_intData[0]); break; case "CMISetTimedOut": //CMISetTimedOut() mm_API.LMSSetValue(scorm_data["cmi.core.exit"], "time-out"); break; case "CMIInitialize": //CMIInitialize() //alert("toto") //mm_API.LMSInitialize(""); eval('mm_API.' + scorm_function[command] + '(\"\")') break; case "CMIFinish": break; case "CMIExitAU": //mm_API.LMSFinish(args); err = eval('mm_API.' + scorm_function[command] + '(\"\")') if (err) { //window.top.close(); } break; default: //utilisé pour les get sep = args.indexOf(","); arg1 = args.substr(0, sep); arg2 = args.substr(sep+1); value = eval('mm_API.' + scorm_function[command] + '(\"' + scorm_data[arg1] + '\")'); if (command == "cmi.student_data.mastery_score") { //cas particilier du score de passage en score 2004 (range entre -1 et 1) value = value / ratioscore } var err; if (sep != 0 && arg2 != "") { Quiz1Obj.SetVariable(arg2,value); } else { err = "-2: No Flash variable specified"; } // handle LMS error returns if ((err == 0 || err == "false") && showLmsWarn) { if (! confirm('LMS API adapter returns error code: ' + err + '\rWhen calling API.' + command + 'with ' + args + '\r\rSelect cancel to disable future warnings')) { showLmsWarn = false; } } break; } // END OF CMI FUNCTION MAPPING } //-->