var pipwerks={};pipwerks.UTILS={},pipwerks.debug={isActive:!0},pipwerks.SCORM={version:null,handleCompletionStatus:!0,handleExitMode:!0,API:{handle:null,isFound:!1},connection:{isActive:!1},data:{completionStatus:null,exitStatus:null},debug:{}},pipwerks.SCORM.isAvailable=function(){return!0},pipwerks.SCORM.API.find=function(a){for(var b=null,c=0,d=500,e="SCORM.API.find",f=pipwerks.UTILS.trace,g=pipwerks.SCORM;!a.API&&!a.API_1484_11&&a.parent&&a.parent!=a&&c<=d;)c++,a=a.parent;if(g.version)switch(g.version){case"2004":a.API_1484_11?b=a.API_1484_11:f(e+": SCORM version 2004 was specified by user, but API_1484_11 cannot be found.");break;case"1.2":a.API?b=a.API:f(e+": SCORM version 1.2 was specified by user, but API cannot be found.")}else a.API_1484_11?(g.version="2004",b=a.API_1484_11):a.API&&(g.version="1.2",b=a.API);return b?(f(e+": API found. Version: "+g.version),f("API: "+b)):f(e+": Error finding API. \nFind attempts: "+c+". \nFind attempt limit: "+d),b},pipwerks.SCORM.API.get=function(){var a=null,b=window,c=pipwerks.SCORM,d=c.API.find,e=pipwerks.UTILS.trace;return a=d(b),!a&&b.parent&&b.parent!=b&&(a=d(b.parent)),!a&&b.top&&b.top.opener&&(a=d(b.top.opener)),!a&&b.top&&b.top.opener&&b.top.opener.document&&(a=d(b.top.opener.document)),a?c.API.isFound=!0:e("API.get failed: Can't find the API!"),a},pipwerks.SCORM.API.getHandle=function(){var a=pipwerks.SCORM.API;return a.handle||a.isFound||(a.handle=a.get()),a.handle},pipwerks.SCORM.connection.initialize=function(){var a=!1,b=pipwerks.SCORM,c=b.data.completionStatus,d=pipwerks.UTILS.trace,e=pipwerks.UTILS.StringToBoolean,f=b.debug,g="SCORM.connection.initialize ";if(d("connection.initialize called."),b.connection.isActive)d(g+"aborted: Connection already active.");else{var h=b.API.getHandle(),i=0;if(h){switch(b.version){case"1.2":a=e(h.LMSInitialize(""));break;case"2004":a=e(h.Initialize(""))}if(a)if(i=f.getCode(),null!==i&&0===i){if(b.connection.isActive=!0,b.handleCompletionStatus&&(c=b.status("get"))){switch(c){case"not attempted":b.status("set","incomplete");break;case"unknown":b.status("set","incomplete")}b.save()}}else a=!1,d(g+"failed. \nError code: "+i+" \nError info: "+f.getInfo(i));else i=f.getCode(),d(null!==i&&0!==i?g+"failed. \nError code: "+i+" \nError info: "+f.getInfo(i):g+"failed: No response from server.")}else d(g+"failed: API is null.")}return a},pipwerks.SCORM.connection.terminate=function(){var a=!1,b=pipwerks.SCORM,c=b.data.exitStatus,d=b.data.completionStatus,e=pipwerks.UTILS.trace,f=pipwerks.UTILS.StringToBoolean,g=b.debug,h="SCORM.connection.terminate ";if(b.connection.isActive){var i=b.API.getHandle(),j=0;if(i){if(b.handleExitMode&&!c)if("completed"!==d&&"passed"!==d)switch(b.version){case"1.2":a=b.set("cmi.core.exit","suspend");break;case"2004":a=b.set("cmi.exit","suspend")}else switch(b.version){case"1.2":a=b.set("cmi.core.exit","logout");break;case"2004":a=b.set("cmi.exit","normal")}if(a=b.save()){switch(b.version){case"1.2":a=f(i.LMSFinish(""));break;case"2004":a=f(i.Terminate(""))}a?b.connection.isActive=!1:(j=g.getCode(),e(h+"failed. \nError code: "+j+" \nError info: "+g.getInfo(j)))}}else e(h+"failed: API is null.")}else e(h+"aborted: Connection already terminated.");return a},pipwerks.SCORM.data.get=function(a){var b=null,c=pipwerks.SCORM,d=pipwerks.UTILS.trace,e=c.debug,f="SCORM.data.get('"+a+"') ";if(c.connection.isActive){var g=c.API.getHandle(),h=0;if(g){switch(c.version){case"1.2":b=g.LMSGetValue(a);break;case"2004":b=g.GetValue(a)}if(h=e.getCode(),""!==b||0===h)switch(a){case"cmi.core.lesson_status":case"cmi.completion_status":c.data.completionStatus=b;break;case"cmi.core.exit":case"cmi.exit":c.data.exitStatus=b}else d(f+"failed. \nError code: "+h+"\nError info: "+e.getInfo(h))}else d(f+"failed: API is null.")}else d(f+"failed: API connection is inactive.");return d(f+" value: "+b),String(b)},pipwerks.SCORM.data.set=function(a,b){var c=!1,d=pipwerks.SCORM,e=pipwerks.UTILS.trace,f=pipwerks.UTILS.StringToBoolean,g=d.debug,h="SCORM.data.set('"+a+"') ";if(d.connection.isActive){var i=d.API.getHandle(),j=0;if(i){switch(d.version){case"1.2":c=f(i.LMSSetValue(a,b));break;case"2004":c=f(i.SetValue(a,b))}c?"cmi.core.lesson_status"!==a&&"cmi.completion_status"!==a||(d.data.completionStatus=b):(j=g.getCode(),e(h+"failed. \nError code: "+j+". \nError info: "+g.getInfo(j)))}else e(h+"failed: API is null.")}else e(h+"failed: API connection is inactive.");return e(h+" value: "+b),c},pipwerks.SCORM.data.save=function(){var a=!1,b=pipwerks.SCORM,c=pipwerks.UTILS.trace,d=pipwerks.UTILS.StringToBoolean,e="SCORM.data.save failed";if(b.connection.isActive){var f=b.API.getHandle();if(f)switch(b.version){case"1.2":a=d(f.LMSCommit(""));break;case"2004":a=d(f.Commit(""))}else c(e+": API is null.")}else c(e+": API connection is inactive.");return a},pipwerks.SCORM.status=function(a,b){var c=!1,d=pipwerks.SCORM,e=pipwerks.UTILS.trace,f="SCORM.getStatus failed",g="";if(null!==a){switch(d.version){case"1.2":g="cmi.core.lesson_status";break;case"2004":g="cmi.completion_status"}switch(a){case"get":c=d.data.get(g);break;case"set":null!==b?c=d.data.set(g,b):(c=!1,e(f+": status was not specified."));break;default:c=!1,e(f+": no valid action was specified.")}}else e(f+": action was not specified.");return c},pipwerks.SCORM.debug.getCode=function(){var a=pipwerks.SCORM,b=a.API.getHandle(),c=pipwerks.UTILS.trace,d=0;if(b)switch(a.version){case"1.2":d=parseInt(b.LMSGetLastError(),10);break;case"2004":d=parseInt(b.GetLastError(),10)}else c("SCORM.debug.getCode failed: API is null.");return d},pipwerks.SCORM.debug.getInfo=function(a){var b=pipwerks.SCORM,c=b.API.getHandle(),d=pipwerks.UTILS.trace,e="";if(c)switch(b.version){case"1.2":e=c.LMSGetErrorString(a.toString());break;case"2004":e=c.GetErrorString(a.toString())}else d("SCORM.debug.getInfo failed: API is null.");return String(e)},pipwerks.SCORM.debug.getDiagnosticInfo=function(a){var b=pipwerks.SCORM,c=b.API.getHandle(),d=pipwerks.UTILS.trace,e="";if(c)switch(b.version){case"1.2":e=c.LMSGetDiagnostic(a);break;case"2004":e=c.GetDiagnostic(a)}else d("SCORM.debug.getDiagnosticInfo failed: API is null.");return String(e)},pipwerks.SCORM.init=pipwerks.SCORM.connection.initialize,pipwerks.SCORM.get=pipwerks.SCORM.data.get,pipwerks.SCORM.set=pipwerks.SCORM.data.set,pipwerks.SCORM.save=pipwerks.SCORM.data.save,pipwerks.SCORM.quit=pipwerks.SCORM.connection.terminate,pipwerks.UTILS.StringToBoolean=function(a){var b=typeof a;switch(b){case"object":case"string":return/(true|1)/i.test(a);case"number":return!!a;case"boolean":return a;case"undefined":return null;default:return!1}},pipwerks.UTILS.trace=function(a){pipwerks.debug.isActive&&window.console&&window.console.log&&window.console.log(a)};