// // SCORM 1.2 API Implementation // function AICCapi() { // Standard Data Type Definition CMIString256 = '^.{0,255}$'; CMIString4096 = '^.{0,4096}$'; CMITime = '^([0-2]{1}[0-9]{1}):([0-5]{1}[0-9]{1}):([0-5]{1}[0-9]{1})(\.[0-9]{1,2})?$'; CMITimespan = '^([0-9]{2,4}):([0-9]{2}):([0-9]{2})(\.[0-9]{1,2})?$'; CMIInteger = '^\\d+$'; CMISInteger = '^-?([0-9]+)$'; CMIDecimal = '^-?([0-9]{0,3})(\.[0-9]{1,2})?$'; CMIIdentifier = '^\\w{1,255}$'; CMIFeedback = CMIString256; // This must be redefined CMIIndex = '[._](\\d+).'; // Vocabulary Data Type Definition CMIStatus = '^passed$|^completed$|^failed$|^incomplete$|^browsed$'; CMIStatus2 = '^passed$|^completed$|^failed$|^incomplete$|^browsed$|^not attempted$'; CMIExit = '^time-out$|^suspend$|^logout$|^$'; CMIType = '^true-false$|^choice$|^fill-in$|^matching$|^performance$|^sequencing$|^likert$|^numeric$'; CMIResult = '^correct$|^wrong$|^unanticipated$|^neutral$|^([0-9]{0,3})?(\.[0-9]{1,2})?$'; NAVEvent = '^previous$|^continue$'; // Children lists cmi_children = 'core, suspend_data, launch_data, comments, objectives, student_data, student_preference, interactions'; core_children = 'student_id, student_name, lesson_location, credit, lesson_status, entry, score, total_time, lesson_mode, exit, session_time'; score_children = 'raw, min, max'; comments_children = 'content, location, time'; objectives_children = 'id, score, status'; student_data_children = 'attempt_number, tries, mastery_score, max_time_allowed, time_limit_action'; student_preference_children = 'audio, language, speed, text'; interactions_children = 'id, objectives, time, type, correct_responses, weighting, student_response, result, latency'; // Data ranges score_range = '0#100'; audio_range = '-1#100'; speed_range = '-100#100'; weighting_range = '-100#100'; text_range = '-1#1'; // The AICC data model var datamodel = { 'cmi._children':{'defaultvalue':cmi_children, 'mod':'r', 'writeerror':'402'}, 'cmi._version':{'defaultvalue':'3.4', 'mod':'r', 'writeerror':'402'}, 'cmi.core._children':{'defaultvalue':core_children, 'mod':'r', 'writeerror':'402'}, 'cmi.core.student_id':{'defaultvalue':'', 'mod':'r', 'writeerror':'403'}, 'cmi.core.student_name':{'defaultvalue':'', 'mod':'r', 'writeerror':'403'}, 'cmi.core.lesson_location':{'defaultvalue':'', 'format':CMIString256, 'mod':'rw', 'writeerror':'405'}, 'cmi.core.credit':{'defaultvalue':'', 'mod':'r', 'writeerror':'403'}, 'cmi.core.lesson_status':{'defaultvalue':'', 'format':CMIStatus, 'mod':'rw', 'writeerror':'405'}, 'cmi.core.exit':{'defaultvalue':'', 'format':CMIExit, 'mod':'w', 'readerror':'404', 'writeerror':'405'}, 'cmi.core.entry':{'defaultvalue':'', 'mod':'r', 'writeerror':'403'}, 'cmi.core.score._children':{'defaultvalue':score_children, 'mod':'r', 'writeerror':'402'}, 'cmi.core.score.raw':{'defaultvalue':'', 'format':CMIDecimal, 'range':score_range, 'mod':'rw', 'writeerror':'405'}, 'cmi.core.score.max':{'defaultvalue':'', 'format':CMIDecimal, 'range':score_range, 'mod':'rw', 'writeerror':'405'}, 'cmi.core.score.min':{'defaultvalue':'', 'format':CMIDecimal, 'range':score_range, 'mod':'rw', 'writeerror':'405'}, 'cmi.core.session_time':{'format':CMITimespan, 'mod':'w', 'defaultvalue':'00:00:00', 'readerror':'404', 'writeerror':'405'}, 'cmi.core.total_time':{'defaultvalue':'00:00:00', 'mod':'r', 'writeerror':'403'}, 'cmi.core.lesson_mode':{'defaultvalue':'', 'mod':'r', 'writeerror':'403'}, 'cmi.suspend_data':{'defaultvalue':'', 'format':CMIString4096, 'mod':'rw', 'writeerror':'405'}, 'cmi.launch_data':{'defaultvalue':'', 'mod':'r', 'writeerror':'403'}, 'cmi.comments':{'defaultvalue':'', 'format':CMIString4096, 'mod':'rw', 'writeerror':'405'}, // deprecated evaluation attributes 'cmi.evaluation.comments._count':{'defaultvalue':'0', 'mod':'r', 'writeerror':'402'}, 'cmi.evaluation.comments._children':{'defaultvalue':comments_children, 'mod':'r', 'writeerror':'402'}, 'cmi.evaluation.comments.n.content':{'defaultvalue':'', 'pattern':CMIIndex, 'format':CMIString256, 'mod':'rw', 'writeerror':'405'}, 'cmi.evaluation.comments.n.location':{'defaultvalue':'', 'pattern':CMIIndex, 'format':CMIString256, 'mod':'rw', 'writeerror':'405'}, 'cmi.evaluation.comments.n.time':{'defaultvalue':'', 'pattern':CMIIndex, 'format':CMITime, 'mod':'rw', 'writeerror':'405'}, 'cmi.comments_from_lms':{'mod':'r', 'writeerror':'403'}, 'cmi.objectives._children':{'defaultvalue':objectives_children, 'mod':'r', 'writeerror':'402'}, 'cmi.objectives._count':{'mod':'r', 'defaultvalue':'0', 'writeerror':'402'}, 'cmi.objectives.n.id':{'pattern':CMIIndex, 'format':CMIIdentifier, 'mod':'rw', 'writeerror':'405'}, 'cmi.objectives.n.score._children':{'pattern':CMIIndex, 'mod':'r', 'writeerror':'402'}, 'cmi.objectives.n.score.raw':{'defaultvalue':'', 'pattern':CMIIndex, 'format':CMIDecimal, 'range':score_range, 'mod':'rw', 'writeerror':'405'}, 'cmi.objectives.n.score.min':{'defaultvalue':'', 'pattern':CMIIndex, 'format':CMIDecimal, 'range':score_range, 'mod':'rw', 'writeerror':'405'}, 'cmi.objectives.n.score.max':{'defaultvalue':'', 'pattern':CMIIndex, 'format':CMIDecimal, 'range':score_range, 'mod':'rw', 'writeerror':'405'}, 'cmi.objectives.n.status':{'pattern':CMIIndex, 'format':CMIStatus2, 'mod':'rw', 'writeerror':'405'}, 'cmi.student_data._children':{'defaultvalue':student_data_children, 'mod':'r', 'writeerror':'402'}, 'cmi.student_data.attempt_number':{'defaultvalue':'', 'mod':'r', 'writeerror':'402'}, 'cmi.student_data.tries.n.score.raw':{'defaultvalue':'', 'pattern':CMIIndex, 'format':CMIDecimal, 'range':score_range, 'mod':'rw', 'writeerror':'405'}, 'cmi.student_data.tries.n.score.min':{'defaultvalue':'', 'pattern':CMIIndex, 'format':CMIDecimal, 'range':score_range, 'mod':'rw', 'writeerror':'405'}, 'cmi.student_data.tries.n.score.max':{'defaultvalue':'', 'pattern':CMIIndex, 'format':CMIDecimal, 'range':score_range, 'mod':'rw', 'writeerror':'405'}, 'cmi.student_data.tries.n.status':{'pattern':CMIIndex, 'format':CMIStatus2, 'mod':'rw', 'writeerror':'405'}, 'cmi.student_data.tries.n.time':{'pattern':CMIIndex, 'format':CMITime, 'mod':'rw', 'writeerror':'405'}, 'cmi.student_data.mastery_score':{'defaultvalue':'', 'mod':'r', 'writeerror':'403'}, 'cmi.student_data.max_time_allowed':{'defaultvalue':'', 'mod':'r', 'writeerror':'403'}, 'cmi.student_data.time_limit_action':{'defaultvalue':'', 'mod':'r', 'writeerror':'403'}, 'cmi.student_data.tries_during_lesson':{'defaultvalue':'', 'mod':'r', 'writeerror':'402'}, 'cmi.student_preference._children':{'defaultvalue':student_preference_children, 'mod':'r', 'writeerror':'402'}, 'cmi.student_preference.audio':{'defaultvalue':'0', 'format':CMISInteger, 'range':audio_range, 'mod':'rw', 'writeerror':'405'}, 'cmi.student_preference.language':{'defaultvalue':'', 'format':CMIString256, 'mod':'rw', 'writeerror':'405'}, 'cmi.student_preference.speed':{'defaultvalue':'0', 'format':CMISInteger, 'range':speed_range, 'mod':'rw', 'writeerror':'405'}, 'cmi.student_preference.text':{'defaultvalue':'0', 'format':CMISInteger, 'range':text_range, 'mod':'rw', 'writeerror':'405'}, 'cmi.interactions._children':{'defaultvalue':interactions_children, 'mod':'r', 'writeerror':'402'}, 'cmi.interactions._count':{'mod':'r', 'defaultvalue':'0', 'writeerror':'402'}, 'cmi.interactions.n.id':{'pattern':CMIIndex, 'format':CMIIdentifier, 'mod':'w', 'readerror':'404', 'writeerror':'405'}, 'cmi.interactions.n.objectives._count':{'pattern':CMIIndex, 'mod':'r', 'defaultvalue':'0', 'writeerror':'402'}, 'cmi.interactions.n.objectives.n.id':{'pattern':CMIIndex, 'format':CMIIdentifier, 'mod':'w', 'readerror':'404', 'writeerror':'405'}, 'cmi.interactions.n.time':{'pattern':CMIIndex, 'format':CMITime, 'mod':'w', 'readerror':'404', 'writeerror':'405'}, 'cmi.interactions.n.type':{'pattern':CMIIndex, 'format':CMIType, 'mod':'w', 'readerror':'404', 'writeerror':'405'}, 'cmi.interactions.n.correct_responses._count':{'pattern':CMIIndex, 'mod':'r', 'defaultvalue':'0', 'writeerror':'402'}, 'cmi.interactions.n.correct_responses.n.pattern':{'pattern':CMIIndex, 'format':CMIFeedback, 'mod':'w', 'readerror':'404', 'writeerror':'405'}, 'cmi.interactions.n.weighting':{'pattern':CMIIndex, 'format':CMIDecimal, 'range':weighting_range, 'mod':'w', 'readerror':'404', 'writeerror':'405'}, 'cmi.interactions.n.student_response':{'pattern':CMIIndex, 'format':CMIFeedback, 'mod':'w', 'readerror':'404', 'writeerror':'405'}, 'cmi.interactions.n.result':{'pattern':CMIIndex, 'format':CMIResult, 'mod':'w', 'readerror':'404', 'writeerror':'405'}, 'cmi.interactions.n.latency':{'pattern':CMIIndex, 'format':CMITimespan, 'mod':'w', 'readerror':'404', 'writeerror':'405'}, 'nav.event':{'defaultvalue':'', 'format':NAVEvent, 'mod':'w', 'readerror':'404', 'writeerror':'405'} }; // // Datamodel inizialization // var cmi = new Object(); cmi.core = new Object(); cmi.core.score = new Object(); cmi.objectives = new Object(); cmi.student_data = new Object(); cmi.student_preference = new Object(); cmi.interactions = new Object(); // deprecated evaluation attributes cmi.evaluation = new Object(); cmi.evaluation.comments = new Object(); // Navigation Object var nav = new Object(); for (element in datamodel) { if (element.match(/\.n\./) == null) { if ((typeof eval('datamodel["'+element+'"].defaultvalue')) != 'undefined') { eval(element+' = datamodel["'+element+'"].defaultvalue;'); } else { eval(element+' = "";'); } } } if (cmi.core.lesson_status == '') { cmi.core.lesson_status = 'not attempted'; } // // API Methods definition // var Initialized = false; function LMSInitialize (param) { errorCode = "0"; if (param == "") { if (!Initialized) { Initialized = true; errorCode = "0"; return "true"; } else { errorCode = "101"; } } else { errorCode = "201"; } return "false"; } function LMSFinish (param) { errorCode = "0"; if (param == "") { if (Initialized) { Initialized = false; result = StoreData(cmi,true); if (nav.event != '') { if (nav.event == 'continue') { setTimeout('mod_scorm_launch_next_sco();',500); } else { setTimeout('mod_scorm_launch_prev_sco();',500); } } else { if ( == 1) { setTimeout('mod_scorm_launch_next_sco();',500); } } // trigger TOC update var sURL = "" + "/mod/scorm/prereqs.php?a=&scoid=&attempt=&mode=¤torg=&sesskey=