{"version":3,"sources":["js/interactive.min.js","../src/js/_js/logger.js","../src/js/_js/helper.js","../src/js/_js/components/carousel.js","../src/js/data.js","../src/js/_js/components/audio.js","../src/js/_js/components/video.js","../src/js/_js/components/preloader.js","../src/js/_js/components/feedback.js","../src/js/_js/components/dnd.js","../src/js/_js/components/hotspot.js","../src/js/_js/components/menu.js","../src/js/_js/components/sortable.js","../src/js/_js/components/quiz.js","../src/js/_js/components/form.js","../src/js/_js/components/side_menu.js","../src/js/_js/interactive.js","../src/js/_js/components/navigation.js","../src/js/_js/interactive.scorm.js"],"names":["si","siLog","args","label","tag","arguments","emoji","action","key","value","mainMessage","length","pipwerksParser","apply","this","interactiveParser","indexOf","setTimeout","console","groupCollapsed","trace","groupEnd","logEntry","replace","split","pipwerks","SCORM","API","handle","isNaN","parseInt","log","push","nextSlide","Reveal","right","prevSlide","left","downSlide","down","upSlide","up","nextHide","$","hide","nextShow","show","backHide","backShow","jumpToSlide","n","slide","jumpToId","id","num","slides","lock","$element","addClass","attr","unlock","removeClass","removeAttr","completeSlide","globalVar","curSlide","slideCompletion","customNavStyle","navElem","styleClass","html","originalOnExit","elem","initialHTML","onExitAction","devMode","document","keyup","e","which","css","shiftKey","find","disableButtons","selector","enableButtons","threeDNavigationSetup","on","threeDMove","threeDButtons","items","clicks","cssSetup","threeDItems","numberOfItems","each","idx","item","rightOrLeft","turn","button","currentPosition","nextPosition","formatLog","window","table","UTILS","msg","debug","isActive","Start","type","navElements","backAction","onEnterAction","audio","onEnter","include","V1","nextAction","videoSeeking","videoLoaded","menu","visited","siAudio","Howl","src","hotspot","hotspotStyleClass","onClick","Howler","stop","onModalClose","1","2","3","V2","click","V3","V4","V5","trigger","V6","V7","V8","V9","V10","V11","initAudio","sfx","volume","wrong","nothing","Object","keys","track","undefined","hotspotAudio","hotspotTrack","audioGroup","sound","audioTrack","initialVolume","_volume","videoCheck","videoID","$curSlide","videojs","language","autoplay","controlBar","volumePanel","inline","html5","nativeTextTracks","plugins","videoJsResolutionSwitcher","default","dynamicLabel","hotkeys","enableNumbers","enableModifiersForNumbers","alwaysCaptureHotkeys","seekButtons","back","ready","video","progressControl","disable","textTracks","tracks_","textTrackSettings","setValues","backgroundOpacity","edgeStyle","color","backgroundColor","textOpacity","windowOpacity","fontFamily","windowColor","updateDisplay","play","muted","videoSeen","addEventListener","forEach","textTrack","setGlobalTextTrackSettings","mode","setGlobalVolume","fadeNavigation","paused","currentTime","pause","index","trackElement","srclang","getAllPlayers","volumeLevel","prop","mute","unlockerSound","initPreloader","onload","fadeOut","fadeIn","preventDefault","hidePreloader","playerId","initFeedbacks","feedbackContainers","feedbackModals","feedbackClosers","stopPropagation","feedback","resetDnD","revertTime","dndAnswers","resetSort","resetQuiz","resetHotspot","classList","closeFeedbackAction","off","closer","answerCorrect","FBKeyboard","once","onSuccessAction","answerIncorrect","trys","attempts","onFailureAction1","onFailureAction2","handleAnswer","bol","isNextAction","FBitems","children","hasClass","focus","event","keyCode","activeElement","blur","dndResetObject","OGPos","data","animate","top","dnd","dropCounter","dndFunctions","curDrag","curDrop","snapping","$dragElements","$dropElements","generateAnswerTemplate","events","dndActions","leftInit","parent","width","toString","topInit","height","curPos","prevPos","dropID","keyBoardAccess","dragElements","time","answers","draggable","droppable","start","ui","helper","onDragStart","drag","dragging","revert","stack","revertDuration","dragStop","accept","over","target","onDragOver","drop","dropped","dragTarget","onDrag","onDragEnd","dropTarget","pos","spaceAvailable","onDrop","dnd2Drop","dnd1Drop","swap","quiz","dropId","newArr","filter","dragId","updatePos","move","swapDragPos","swapDragId","pop","swapDrag","swapArr","removeData","dragItem","newPos","dragItemID","actions","i","str","stra","JSON","parse","dragElement","accessibility","drops","dropIdx","$drag","hotspotFunctions","selectedClass","$slideDOM","slideID","$hotspots","$modalBlocker","$modals","$modalClose","clickChecker","slideObj","settings","activeClass","correctClass","modalStyleClass","completeAction","customCompleteAction","indv","spot","mod","correctHotspots","seen","hasCorrectClass","linear","selectedAnswers","useModals","handleHotspot","hoSp","mainOnClick","indvOnClick","$thisModalClose","$thisModal","$thisHotspot","modalWarn","toggleClass","quizHotspot","allSeenBehavior","unlockNextHotspot","handleClose","mainOnModalClose","indvOnModalClose","add","hover","result","allSeen","nextHotspot","nextHotspotSettings","mainOnUnlock","onUnlock","indvOnUnlock","initMenu","number","buttons","defaultNav","completionIDs","menuFunctions","menuButtons","allComplete","sortFunctions","sortable","sortableElements","shuffleElements","sort","sortKeyboard","elements","shuffle","shuffleArr","Math","floor","random","some","el","lists","elementArr","shuffled","list","idx2","div","element","splice","shift","append","sortItem","sortList","connected","insertBefore","prev","insertAfter","next","prepend","parentIndex","newLists","initQuiz","quizzes","buttonType","choices","isRadio","choice","image","eq","quizFunction","formFunctions","$form","hasSubmit","fields","form","checkbox","checkboxes","class","field","checkboxSet","checkboxFunctionality","inputs","$this","characters","val","maxLength","lastInput","keydown","checkForm","answer","caseSensitive","toLowerCase","text","input","validForm","valid","curChapter","chapterNavigationSlides","chapterCompletionSlides","initSideMenu","$menu","$container","closeSideMenu","openSideMenu","handleSideButtons","checks","initNavigation","swapStyles","swapImages","nav","attachNavEventListeners","showNavElements","navButtons","iconClasses","$click","hideClickIcon","homeSlide","toggleFullscreen","close","thisSlide","checkQuestion","dndArgs","customReset","customSubmit","fadeToggle","requestMethod","documentElement","fullscreenElement","mozFullScreenElement","msFullscreenElement","webkitFullscreenElement","exitFullscreen","webkitExitFullscreen","webkitExitFullScreen","mozCancelFullScreen","msExitFullscreen","requestFullscreen","webkitRequestFullscreen","webkitRequestFullScreen","mozRequestFullScreen","msRequestFullscreen","bookmarkedSlide","chartProgressRecorded","firstTimeSetup","slideNumber","userAttempts","documentSetup","remove","chartInitiate","functionCalls","randomizeQuestionSlides","currentSlide","previousSlide","fontSize","fontSizeFactor","resize","actionsOnEverySlideEnter","$download","paths","0","playing","lmsConnected","saveLMS","useLocal","saveProgressLocally","elementsFadingOnSlide","chartProgress","correctAnswers","stringify","userAnswers","correctAnswer","userAnswer","multipleAnswers","included","listArray","sortables","answerArray","listId","possibleAnswer","unordered","jumpToShuffledSlide","part","shuffledSlides","pointer","resetShuffledSlide","randomizeSlides","useRandomize","x","ary","temp","sortArrayMatrixFunction","elementsFadeIn","elementsFadeOut","fadeTo","a","b","array","temporaryValue","randomIndex","currentIndex","scormSettings","useScorm","initCourse","mySVGsToInject","querySelectorAll","SVGInjector","Array","prototype","equals","l","defineProperty","enumerable","scorm","unloaded","courseURL","btoa","location","href","progressURL","bookmarkURL","bookmarkLocal","localData","storageAvailable","localStorage","getItem","init","bookmarkScorm","scormData","rawData","get","version","unloadHandler","setScormCompletion","success","set","save","quit","saveCourseProgress","saveBookmark","dataString","setItem","storage","removeItem","DOMException","code","name"],"mappings":"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","file":"../../js/interactive.min.js","sourcesContent":[null,"if (typeof si === 'undefined' || si === null) {\n\tvar si = {};\n}\n\nsi.log = [];\n\nsi.formatLog = function() {\n\tif (window.console.table) {\n\t\tconsole.table(si.log);\n\t} else {\n\t\tconsole.log(si.log);\n\t}\n};\n\nfunction siLog() {\n\tvar args = [];\n\tvar label = '[]';\n\tvar tag = arguments[0];\n\tvar emoji = '❌';\n\tvar action = '';\n\tvar key = '';\n\tvar value = '';\n\tvar mainMessage = arguments[1];\n\n\targs[0] = arguments[0] || '';\n\targs[1] = arguments[1] || '';\n\targs[2] = arguments[2] || '';\n\targs[3] = arguments[3] || '';\n\targs[4] = arguments[4] || '';\n\n\tif (arguments.length < 2) {\n\t\t// JUST A SUPER SIMPLE CONSOLE.LOG WITH STACK TRACE\n\t\tlabel = '[🤚SSI]';\n\t\tvar action = '💡SIMPLE';\n\t\tvar key = args[0];\n\t\tvar value = '';\n\t} else {\n\t\t// SOMETHING MORE INVOLVED, HOPEFULLY WITH TAG AND ALL\n\t\t// COMING EITHER FROM FRAMEWORK OR PIPWERKS SCORM API WRAPPER\n\t\t// console.error.apply(this, arguments);\n\n\t\tif (tag === 'pipwerks') {\n\t\t\t// DEALING WITH PIPWERKS DEBUG MESSAGES THAT WE HIJACKED\n\t\t\tpipwerksParser.apply(this, arguments);\n\t\t} else {\n\t\t\t// DEALING WITH OUR OWN MESSAGES, COMING FROM INSIDE THE FRAMEWORK\n\t\t\tinteractiveParser.apply(this, arguments);\n\t\t}\n\t}\n\n\t// Nasty hack to make sure that the SCORM API object is actually available\n\t// (which seems to take a few ticks after initialization) to log to console.\n\t// That's why we have that timeout here.\n\tif (action.indexOf('API:') > -1) {\n\t\tsetTimeout(function() {\n\t\t\tconsole.groupCollapsed(label, action, key, value);\n\t\t\tconsole.trace('Stack trace:');\n\t\t\tconsole.groupEnd();\n\t\t}, 1);\n\t} else {\n\t\tconsole.groupCollapsed(label, action, key, value);\n\t\tconsole.trace('Stack trace:');\n\t\tconsole.groupEnd();\n\t}\n\n\t// For situations where the console isn't enough, because it might not have been loggging\n\t// right from the start (looking at you internet explorer!), we also want to have all the\n\t// log worthy events in a neat array. That way we can look at it (or export it even!)\n\t// whenever we want!\n\tvar logEntry = {\n\t\tlabel: label,\n\t\taction: action,\n\t\tkey: key,\n\t\tvalue: value\n\t};\n\n\tsi.log.push(logEntry);\n\n\tfunction pipwerksParser() {\n\t\ttag = 'PIP:SCORM';\n\n\t\tif (typeof arguments[1] === 'string') {\n\t\t\t// traceMsgPrefix = \"SCORM.data.get('\" + parameter + \"') \";\n\t\t\t// traceMsgPrefix = \"SCORM.data.set('\" + parameter + \"') \";\n\t\t\tif (mainMessage.indexOf('SCORM.data') > -1) {\n\t\t\t\temoji = '💾';\n\t\t\t\tif (mainMessage.indexOf('.get') > -1) {\n\t\t\t\t\tmainMessage = mainMessage.replace(/SCORM.data.get\\(/gi, '');\n\t\t\t\t\taction = '⏪ GET';\n\t\t\t\t} else if (mainMessage.indexOf('.set') > -1) {\n\t\t\t\t\tmainMessage = mainMessage.replace(/SCORM.data.set\\(/gi, '');\n\t\t\t\t\taction = 'SET ⏩';\n\t\t\t\t}\n\t\t\t\tmainMessage = mainMessage.replace(/\\)/gi, ':');\n\t\t\t\tkey = mainMessage.split(' value: ')[0] || '';\n\t\t\t\tvalue = mainMessage.split(' value: ')[1] || '';\n\t\t\t}\n\n\t\t\t// traceMsgPrefix = 'SCORM.connection.initialize ';\n\t\t\t// traceMsgPrefix = 'SCORM.connection.terminate ';\n\t\t\tif (\n\t\t\t\tmainMessage.indexOf('SCORM.connection') > -1 ||\n\t\t\t\tmainMessage.indexOf('connection.initialize') > -1\n\t\t\t) {\n\t\t\t\temoji = '🔌';\n\t\t\t\tif (mainMessage.indexOf('.initialize') > -1) {\n\t\t\t\t\tmainMessage = mainMessage.replace(/SCORM.connection.initialize /gi, '');\n\t\t\t\t\taction = '🤝 INIT';\n\t\t\t\t\tif (mainMessage.indexOf('connection.initialize called.') > -1) {\n\t\t\t\t\t\tmainMessage = mainMessage.replace(/connection.initialize called./gi, '');\n\t\t\t\t\t\tkey = 'Initializing LMS connection...';\n\t\t\t\t\t}\n\t\t\t\t} else if (mainMessage.indexOf('.terminate') > -1) {\n\t\t\t\t\tmainMessage = mainMessage.replace(/SCORM.connection.terminate /gi, '');\n\t\t\t\t\taction = '💀 TERM';\n\t\t\t\t}\n\t\t\t\tif (mainMessage.indexOf('failed') > -1 || mainMessage.indexOf('aborted') > -1) {\n\t\t\t\t\tmainMessage = mainMessage.replace(/failed/gi, '❌ FAILED');\n\t\t\t\t\tmainMessage = mainMessage.replace(/aborted/gi, '❌ ABORTED');\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// traceMsgPrefix = 'SCORM.API.find',\n\t\t\tif (mainMessage.indexOf('API') > -1) {\n\t\t\t\temoji = '📖';\n\t\t\t\tif (mainMessage.indexOf('.find') > -1) {\n\t\t\t\t\tmainMessage = mainMessage.replace(/SCORM.API.find: /gi, '');\n\t\t\t\t\tmainMessage = mainMessage.replace(/. Version: /gi, ': v');\n\t\t\t\t\taction = '🔍 FIND';\n\t\t\t\t\tvalue = '(It will be available for inspection in a few ticks.)';\n\t\t\t\t}\n\t\t\t\tif (mainMessage.indexOf('API:') > -1) {\n\t\t\t\t\taction = '🔗 API';\n\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\tkey = pipwerks.SCORM.API.handle;\n\t\t\t\t\t}, 1);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tkey = key || mainMessage;\n\t\tvalue = isNaN(parseInt(value, 10)) ? value : parseInt(value, 10);\n\t\tlabel = '[' + emoji + tag + ']';\n\t}\n\n\tfunction interactiveParser() {\n\t\ttag = 'SSI:' + tag;\n\t\temoji = '🤚';\n\t\taction = args[1] || '';\n\t\tkey = args[2] || '';\n\t\tvalue = args[3] || '';\n\n\t\tif (typeof arguments[1] === 'string') {\n\t\t\tif (args[1] === 'SET') {\n\t\t\t\taction = 'SET ⏩';\n\t\t\t} else if (args[1] === 'GET') {\n\t\t\t\taction = '⏪ GET';\n\t\t\t} else if (args[1] === 'INIT') {\n\t\t\t\taction = '🤝 INIT';\n\t\t\t} else if (args[1] === 'COMPLETE') {\n\t\t\t\taction = '🏆 COMPLETE';\n\t\t\t}\n\n\t\t\tif (args[2].indexOf('SUCCESS') > -1) {\n\t\t\t\tkey = '✅ ' + args[2];\n\t\t\t}\n\t\t\tif (args[2].indexOf('ERROR') > -1) {\n\t\t\t\tkey = '❌ ' + args[2];\n\t\t\t}\n\n\t\t\t// key = mainMessage.split(\" value: \")[0];\n\t\t\t// value = mainMessage.split(\" value: \")[1] || \"\";\n\t\t}\n\n\t\tvalue = isNaN(parseInt(value, 10)) ? value : parseInt(value, 10);\n\t\tlabel = '[' + emoji + tag + ']';\n\t}\n}\npipwerks.UTILS.trace = function(msg) {\n\tif (pipwerks.debug.isActive) {\n\t\tif (window.console && window.console.log) {\n\t\t\tsiLog('pipwerks', msg);\n\t\t}\n\t}\n};\n\n// [💾SCORM] ⬅️GET ('cmi.core.student_name') value: interactive,\n\n// traceMsgPrefix = 'SCORM.data.save failed';\n// traceMsgPrefix = 'SCORM.getStatus failed',\n\n// args[0] = '[💡SCORM]';\n// args[0] = '[☝️SCORM]';\n// args[0] = '[👆SCORM]';\n// args[0] = '[🤞SCORM]';\n","//Some shortcuts for functions\nfunction nextSlide() {\n Reveal.right();\n}\n\nfunction prevSlide() {\n Reveal.left();\n}\n\nfunction downSlide() {\n Reveal.down();\n}\n\nfunction upSlide() {\n Reveal.up();\n}\n\nfunction nextHide() {\n $('#si-next').hide();\n}\n\nfunction nextShow() {\n $('#si-next').show();\n}\n\nfunction backHide() {\n $('#si-back').hide();\n}\n\nfunction backShow() {\n $('#si-back').show();\n}\n\nfunction jumpToSlide(n) {\n Reveal.slide(n - 1);\n}\n\nfunction jumpToId(id) {\n var num = slides[id]['slideNumber'];\n Reveal.slide(num - 1);\n}\n\nfunction lock($element) {\n $element.addClass('noEvents');\n $element.attr('disabled', 'disabled');\n}\n\nfunction unlock($element) {\n $element.removeClass('noEvents');\n $element.removeAttr('disabled');\n}\n\nfunction completeSlide() {\n if (slides[globalVar.curSlide]['include']) {\n slideCompletion[globalVar.curSlide] = 1;\n }\n // console.log(slideCompletion)\n}\n\nfunction customNavStyle(navElem, styleClass, html) {\n var elem = $('#si-' + navElem);\n var initialHTML = elem.html();\n var curSlide = slides[globalVar.curSlide];\n\n if (html) elem.html(html);\n\n elem.addClass(styleClass);\n\n curSlide.onExitAction = (function() {\n var originalOnExit = curSlide.onExitAction;\n return function() {\n if (originalOnExit) originalOnExit.apply(this);\n elem.html(initialHTML);\n elem.removeClass(styleClass);\n };\n })();\n}\n\n////////////*Feature:idebehold///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\n//the holy cheatfunction!!!\nfunction devMode() {\n // Cheat code. See Doom.\n\n $('body').addClass('dev-mode');\n console.log('GOD MODE!');\n $('#guidelines').show();\n\n $(document).keyup(function(e) {\n // 'g' key toggles grid lines\n if (e.which == 71) {\n if ($('#guidelines').css('display') != 'none') {\n $('#guidelines').hide();\n } else {\n $('#guidelines').show();\n }\n }\n\n // shift + arrow keys allow navigation through horizontal and vertical slides\n if (e.shiftKey && e.which == 37) {\n Reveal.left();\n }\n if (e.shiftKey && e.which == 39) {\n Reveal.right();\n }\n if (e.shiftKey && e.which == 38) {\n Reveal.up();\n }\n if (e.shiftKey && e.which == 40) {\n Reveal.down();\n }\n\n // 'j' key reveals positive feedback\n if (e.which == 74) {\n $('#' + globalVar.curSlide)\n .find('.si-positive')\n .addClass('si-current-modal')\n .show();\n $('#' + globalVar.curSlide)\n .find('.si-negative')\n .removeClass('si-current-modal')\n .hide();\n $('#' + globalVar.curSlide)\n .find('.si-negative-final')\n .removeClass('si-current-modal')\n .hide();\n }\n // 'k' key reveals negative feedback 1\n if (e.which == 75) {\n $('#' + globalVar.curSlide)\n .find('.si-positive')\n .removeClass('si-current-modal')\n .hide();\n $('#' + globalVar.curSlide)\n .find('.si-negative')\n .addClass('si-current-modal')\n .show();\n $('#' + globalVar.curSlide)\n .find('.si-negative-final')\n .removeClass('si-current-modal')\n .hide();\n }\n // 'l' key reveals negative feedback 2\n if (e.which == 76) {\n $('#' + globalVar.curSlide)\n .find('.si-positive')\n .removeClass('si-current-modal')\n .hide();\n $('#' + globalVar.curSlide)\n .find('.si-negative')\n .removeClass('si-current-modal')\n .hide();\n $('#' + globalVar.curSlide)\n .find('.si-negative-final')\n .addClass('si-current-modal')\n .show();\n }\n // ';' key hides all feedbacks\n if (e.which == 186) {\n $('#' + globalVar.curSlide)\n .find('.si-positive')\n .removeClass('si-current-modal')\n .hide();\n $('#' + globalVar.curSlide)\n .find('.si-negative')\n .removeClass('si-current-modal')\n .hide();\n $('#' + globalVar.curSlide)\n .find('.si-negative-final')\n .removeClass('si-current-modal')\n .hide();\n }\n });\n}\n","//3d carousel\nfunction disableButtons(selector) {\n $(selector).addClass('noEvents')\n $(selector).attr(\"disabled\", \"disabled\");\n}\n\n\nfunction enableButtons(selector) {\n $(selector).removeClass('noEvents')\n $(selector).removeAttr('disabled');\n}\n\nfunction threeDNavigationSetup() {\n $('.rightButton').on('click.threedcarousel', function () {\n threeDMove('right')\n })\n $('.leftButton').on('click.threedcarousel', function () {\n threeDMove('left')\n })\n\n //threeDButtons = rotating items/buttons\n threeDButtons = slides[globalVar.curSlide].items = $('.threedb')\n slides[globalVar.curSlide].clicks = 0;\n //Makes only the front button clickable\n disableButtons(threeDButtons)\n enableButtons(threeDButtons[0])\n\n //3d css setup\n cssSetup()\n}\n\nfunction cssSetup() {\n //html items to position\n var threeDItems = $('.threedb')\n\n //number of items\n var numberOfItems = threeDItems.length;\n\n //assign first positions\n threeDItems.each(function (idx, item) {\n $(item).addClass('item' + (idx + 1) + 'of' + numberOfItems + ' ' + numberOfItems + 'items')\n })\n}\n\n\nfunction threeDMove(rightOrLeft) {\n //threeDButtons = rotating items/buttons\n var threeDButtons = slides[globalVar.curSlide].items\n\n //clicks keeps track of the items's position\n var clicks = slides[globalVar.curSlide].clicks\n\n //number of items\n var numberOfItems = $('.threedb').length;\n\n //number for a left turn\n var turn;\n switch (rightOrLeft) {\n case \"right\":\n turn = numberOfItems - 1;\n break;\n case \"left\":\n turn = 1;\n }\n //change positions to the left\n threeDButtons.each(function (idx, button) {\n var currentPosition = ((idx + clicks) % numberOfItems) + 1;\n var nextPosition = ((idx + turn + clicks) % numberOfItems) + 1\n\n $(button).removeClass('item' + currentPosition + \"of\" + numberOfItems)\n $(button).addClass('item' + nextPosition + \"of\" + numberOfItems)\n\n //Makes only the new front button clickable\n if (nextPosition === 1) {\n disableButtons(threeDButtons)\n disableButtons(this)\n enableButtons(button)\n }\n })\n\n //prevent fast clicking\n // setTimeout(function () {\n // enableButtons('.leftButton .rightButton')\n // }, 300)\n\n //update current position\n clicks += turn\n slides[globalVar.curSlide].clicks = clicks\n}","/* global slides:writable prevSlide completeSlide nextSlide jumpToId globalVar siAudio Howler Howl */\n\n// do not use the id 'test' for a slide\n$(function () {\n\tslides = {\n\t\tStart: {\n\t\t\ttype: 'text',\n\t\t\tnavElements: ['start-slide'],\n\t\t\tbackAction: function () {}, //leave Start backAction as function to prevent IE9 errors\n\t\t\tonEnterAction: function () {},\n\t\t\taudio: {\n\t\t\t\tonEnter: 'media/audio/pacific-cycle/start-screen.mp3'\n\t\t\t},\n\t\t\tinclude: false\n\t\t},\n\t\tV1: {\n\t\t\ttype: 'video',\n\t\t\tnavElements: ['back', 'next'],\n\t\t\tbackAction: prevSlide,\n\t\t\tnextAction: function () {\n\t\t\t\tcompleteSlide();\n\t\t\t\tnextSlide();\n\t\t\t\t// playMenuAudio();\n\t\t\t},\n\t\t\tonEnterAction: function () {},\n\t\t\tvideoSeeking: true,\n\t\t\tvideoLoaded: false //don't edit\n\t\t},\n\t\tmenu: {\n\t\t\ttype: 'hotspot',\n\t\t\tnavElements: [],\n\t\t\tnextAction: function () {\n\t\t\t\tcompleteSlide();\n\t\t\t},\n\t\t\tbackAction: function () {\n\t\t\t\tjumpToId('Start');\n\t\t\t},\n\t\t\tonEnterAction: function () {\n\t\t\t\t$('#menu .hotspot-button').removeClass('clicked');\n\t\t\t\t$('#si-click-icon').addClass('menu-click-position');\n\t\t\t\tif (slides[globalVar.curSlide].visited) {\n\t\t\t\t\tsiAudio.menu.onEnter = new Howl({\n\t\t\t\t\t\tsrc: ['media/audio/sounds/nothing.mp3']\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t\tonExitAction: function () {\n\t\t\t\t$('#si-click-icon').removeClass('menu-click-position');\n\t\t\t},\n\t\t\taudio: {\n\t\t\t\tonEnter: 'media/audio/pacific-cycle/menu.mp3'\n\t\t\t},\n\t\t\thotspot: {\n\t\t\t\thotspotStyleClass: 'cogwheel',\n\t\t\t\t// modalStyleClass: 'i7-modals',\n\t\t\t\tonClick: function () {\n\t\t\t\t\tHowler.stop();\n\t\t\t\t\t$('#si-nav-container').addClass('feedback-open');\n\t\t\t\t},\n\t\t\t\tonModalClose: function (hotspot) {\n\t\t\t\t\t$('#si-nav-container').removeClass('feedback-open');\n\t\t\t\t},\n\t\t\t\taudio: {\n\t\t\t\t\t1: 'media/audio/pacific-cycle/handlebars-submenu.mp3',\n\t\t\t\t\t2: 'media/audio/pacific-cycle/front-wheel-submenu.mp3',\n\t\t\t\t\t3: 'media/audio/pacific-cycle/seat-submenu.mp3'\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tV2: {\n\t\t\ttype: 'video',\n\t\t\tnavElements: ['back'],\n\t\t\tbackAction: function () {\n\t\t\t\tjumpToId('menu');\n\t\t\t},\n\t\t\thotspot: {},\n\t\t\tnextAction: function () {\n\t\t\t\tcompleteSlide();\n\t\t\t\t$('#handlebars-start').removeClass('handlebars-start').addClass('handlebars-finish');\n\t\t\t\t$('#line-handlebar-start-id').hide();\n\t\t\t\t$('#line-handlebar-finish-id').show();\n\t\t\t\t$('.button1-background').hide();\n\t\t\t\t$('.button1-background-green').show();\n\t\t\t\t$('#bike-button1').addClass('white-text');\n\t\t\t\t$('.modal-close').click();\n\t\t\t\tvar showBrakesCable = $('.show-brakes-cable').length;\n\t\t\t\tif (showBrakesCable >= 2) {\n\t\t\t\t\t$('#brakes-cable-id').show();\n\t\t\t\t}\n\t\t\t\tjumpToId('menu');\n\t\t\t},\n\t\t\tonEnterAction: function () {},\n\t\t\tvideoSeeking: true,\n\t\t\tvideoLoaded: false //don't edit\n\t\t},\n\t\tV3: {\n\t\t\ttype: 'video',\n\t\t\tnavElements: ['back'],\n\t\t\tbackAction: function () {\n\t\t\t\tjumpToId('menu');\n\t\t\t},\n\t\t\tnextAction: function () {\n\t\t\t\tcompleteSlide();\n\t\t\t\t$('#handlebars-start').removeClass('handlebars-start').addClass('handlebars-finish');\n\t\t\t\t$('#line-handlebar-start-id').hide();\n\t\t\t\t$('#line-handlebar-finish-id').show();\n\t\t\t\t$('.button1-background').hide();\n\t\t\t\t$('.button1-background-green').show();\n\t\t\t\t$('#bike-button1').addClass('white-text');\n\t\t\t\t$('.modal-close').click();\n\t\t\t\tvar showBrakesCable = $('.show-brakes-cable').length;\n\t\t\t\tif (showBrakesCable >= 2) {\n\t\t\t\t\t$('#brakes-cable-id').show();\n\t\t\t\t}\n\t\t\t\tjumpToId('menu');\n\t\t\t},\n\t\t\tonEnterAction: function () {},\n\t\t\tvideoSeeking: true,\n\t\t\tvideoLoaded: false //don't edit\n\t\t},\n\t\tV4: {\n\t\t\ttype: 'video',\n\t\t\tnavElements: ['back'],\n\t\t\tbackAction: function () {\n\t\t\t\tjumpToId('menu');\n\t\t\t},\n\t\t\tnextAction: function () {\n\t\t\t\tcompleteSlide();\n\t\t\t\t$('#front-wheel-start').hide();\n\t\t\t\t$('#front-wheel-finish').show();\n\t\t\t\t$('#line-front-wheel-start-id').hide();\n\t\t\t\t$('#line-front-wheel-finish-id').show();\n\t\t\t\t$('.button2-background').hide();\n\t\t\t\t$('.button2-background-green').show();\n\t\t\t\t$('#bike-button2').addClass('white-text');\n\t\t\t\t$('.modal-close').click();\n\t\t\t\tjumpToId('menu');\n\t\t\t},\n\t\t\tonEnterAction: function () {},\n\t\t\tvideoSeeking: true,\n\t\t\tvideoLoaded: false //don't edit\n\t\t},\n\t\tV5: {\n\t\t\ttype: 'video',\n\t\t\tnavElements: ['back'],\n\t\t\tbackAction: function () {\n\t\t\t\tjumpToId('menu');\n\t\t\t},\n\t\t\tnextAction: function () {\n\t\t\t\tcompleteSlide();\n\t\t\t\t$('#front-wheel-start').hide();\n\t\t\t\t$('#front-wheel-finish').show();\n\t\t\t\t$('#line-front-wheel-start-id').hide();\n\t\t\t\t$('#line-front-wheel-finish-id').show();\n\t\t\t\t$('.modal-close').trigger('click');\n\t\t\t\t$('.button2-background').hide();\n\t\t\t\t$('.button2-background-green').show();\n\t\t\t\t$('#bike-button2').addClass('white-text');\n\t\t\t\t$('.modal-close').click();\n\t\t\t\tjumpToId('menu');\n\t\t\t},\n\t\t\tonEnterAction: function () {},\n\t\t\tvideoSeeking: true,\n\t\t\tvideoLoaded: false //don't edit\n\t\t},\n\t\tV6: {\n\t\t\ttype: 'video',\n\t\t\tnavElements: ['back'],\n\t\t\tbackAction: function () {\n\t\t\t\tjumpToId('menu');\n\t\t\t},\n\t\t\tnextAction: function () {\n\t\t\t\tcompleteSlide();\n\t\t\t\t$('#training-wheels-start').removeClass('training-wheels-start').addClass('training-wheels-finish');\n\t\t\t\t$('#line-training-wheels-start-id').hide();\n\t\t\t\t$('#line-training-wheels-finish-id').show();\n\t\t\t\t$('.button3-background').hide();\n\t\t\t\t$('.button3-background-green').show();\n\t\t\t\t$('#bike-button3').addClass('white-text');\n\t\t\t\tjumpToId('menu');\n\t\t\t},\n\t\t\tonEnterAction: function () {},\n\t\t\tvideoSeeking: true,\n\t\t\tvideoLoaded: false //don't edit\n\t\t},\n\t\tV7: {\n\t\t\ttype: 'video',\n\t\t\tnavElements: ['back'],\n\t\t\tbackAction: function () {\n\t\t\t\tjumpToId('menu');\n\t\t\t},\n\t\t\tnextAction: function () {\n\t\t\t\tcompleteSlide();\n\t\t\t\t$('#seat-start').hide();\n\t\t\t\t$('#seat-finish').show();\n\t\t\t\t$('.modal-close').trigger('click');\n\t\t\t\t$('#line-seat-start-id').hide();\n\t\t\t\t$('#line-seat-finish-id').show();\n\t\t\t\t$('.button4-background').hide();\n\t\t\t\t$('.button4-background-green').show();\n\t\t\t\t$('#bike-button4').addClass('white-text');\n\t\t\t\tjumpToId('menu');\n\t\t\t},\n\t\t\tonEnterAction: function () {},\n\t\t\tvideoSeeking: true,\n\t\t\tvideoLoaded: false //don't edit\n\t\t},\n\t\tV8: {\n\t\t\ttype: 'video',\n\t\t\tnavElements: ['back'],\n\t\t\tbackAction: function () {\n\t\t\t\tjumpToId('menu');\n\t\t\t},\n\t\t\tnextAction: function () {\n\t\t\t\tcompleteSlide();\n\t\t\t\t$('#seat-start').hide();\n\t\t\t\t$('#seat-finish').show();\n\t\t\t\t$('.modal-close').trigger('click');\n\t\t\t\t$('#line-seat-start-id').hide();\n\t\t\t\t$('#line-seat-finish-id').show();\n\t\t\t\t$('.button4-background').hide();\n\t\t\t\t$('.button4-background-green').show();\n\t\t\t\t$('#bike-button4').addClass('white-text');\n\t\t\t\tjumpToId('menu');\n\t\t\t},\n\t\t\tonEnterAction: function () {},\n\t\t\tvideoSeeking: true,\n\t\t\tvideoLoaded: false //don't edit\n\t\t},\n\t\tV9: {\n\t\t\ttype: 'video',\n\t\t\tnavElements: ['back'],\n\t\t\tbackAction: function () {\n\t\t\t\tjumpToId('menu');\n\t\t\t},\n\t\t\tnextAction: function () {\n\t\t\t\tcompleteSlide();\n\t\t\t\t$('#pedals-start').removeClass('pedals-start').addClass('pedals-finish');\n\t\t\t\t$('#line-pedals-start-id').hide();\n\t\t\t\t$('#pedals-start-second-pedal').hide();\n\t\t\t\t$('#line-pedals-finish-id').show();\n\t\t\t\t$('.button5-background').hide();\n\t\t\t\t$('.button5-background-green').show();\n\t\t\t\t$('#bike-button5').addClass('white-text');\n\t\t\t\tjumpToId('menu');\n\t\t\t},\n\t\t\tonEnterAction: function () {},\n\t\t\tvideoSeeking: true,\n\t\t\tvideoLoaded: false //don't edit\n\t\t},\n\t\tV10: {\n\t\t\ttype: 'video',\n\t\t\tnavElements: ['back'],\n\t\t\tbackAction: function () {\n\t\t\t\tjumpToId('menu');\n\t\t\t},\n\t\t\tnextAction: function () {\n\t\t\t\tcompleteSlide();\n\t\t\t\t$('#brakes-start').removeClass('brakes-start').addClass('brakes-finish').addClass('show-brakes-cable');\n\t\t\t\t$('#line-brakes-start-id').hide();\n\t\t\t\t$('#line-brakes-finish-id').show();\n\t\t\t\t$('.button6-background').hide();\n\t\t\t\t$('.button6-background-green').show();\n\t\t\t\t$('#bike-button6').addClass('white-text');\n\t\t\t\tvar showBrakesCable = $('.show-brakes-cable').length;\n\t\t\t\tif (showBrakesCable >= 2) {\n\t\t\t\t\t$('#brakes-cable-id').show();\n\t\t\t\t}\n\t\t\t\tjumpToId('menu');\n\t\t\t},\n\t\t\tonEnterAction: function () {},\n\t\t\tvideoSeeking: true,\n\t\t\tvideoLoaded: false //don't edit\n\t\t},\n\t\tV11: {\n\t\t\ttype: 'video',\n\t\t\tnavElements: ['back'],\n\t\t\tbackAction: function () {\n\t\t\t\tjumpToId('menu');\n\t\t\t},\n\t\t\tnextAction: function () {\n\t\t\t\tcompleteSlide();\n\t\t\t\t$('.button7-background').hide();\n\t\t\t\t$('.button7-background-green').show();\n\t\t\t\t$('#bike-button7').addClass('white-text');\n\t\t\t\tjumpToId('menu');\n\t\t\t},\n\t\t\tonEnterAction: function () {},\n\t\t\tvideoSeeking: true,\n\t\t\tvideoLoaded: false //don't edit\n\t\t}\n\t};\n});\n","/* global slides:writable prevSlide completeSlide nextSlide jumpToId globalVar Howler Howl */\nvar siAudio = {};\n\nfunction initAudio() {\n\tsiAudio.sfx = {};\n\tsiAudio.sfx.click = new Howl({\n\t\tsrc: ['media/audio/sounds/mouse_click.mp3'],\n\t\tvolume: 0.8\n\t});\n\n\tsiAudio.sfx.wrong = new Howl({\n\t\tsrc: ['media/audio/sounds/negative.mp3'],\n\t\tvolume: 0.5\n\t});\n\tsiAudio.sfx.right = new Howl({\n\t\tsrc: ['media/audio/sounds/positive.mp3'],\n\t\tvolume: 0.5\n\t});\n\tsiAudio.sfx.nothing = new Howl({\n\t\tsrc: ['media/audio/sounds/nothing.mp3']\n\t});\n\n\tfor (var key in slides) {\n\t\tif (slides[key].audio && Object.keys(slides[key].audio).length > 0) {\n\t\t\tsiAudio[key] = {};\n\t\t\tvar audio = slides[key].audio;\n\t\t\tfor (var track in audio) {\n\t\t\t\tsiAudio[key][track] = new Howl({\n\t\t\t\t\tsrc: audio[track]\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\tslides[key].audio = {};\n\t\t}\n\n\t\tif (slides[key].hotspot && slides[key].hotspot.audio && Object.keys(slides[key].hotspot.audio).length > 0) {\n\t\t\tif (siAudio[key] === undefined) {\n\t\t\t\tsiAudio[key] = {};\n\t\t\t}\n\t\t\tvar hotspotAudio = slides[key].hotspot.audio;\n\t\t\tfor (var hotspotTrack in hotspotAudio) {\n\t\t\t\tsiAudio[key][hotspotTrack] = new Howl({\n\t\t\t\t\tsrc: hotspotAudio[hotspotTrack]\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\tfor (var audioGroup in siAudio) {\n\t\tfor (var sound in siAudio[audioGroup]) {\n\t\t\tvar audioTrack = siAudio[audioGroup][sound];\n\t\t\taudioTrack.initialVolume = audioTrack._volume;\n\t\t}\n\t}\n}\n","/* global videojs slides globalVar siAudio */\n/* exported videoCheck */\n\nfunction videoCheck() {\n\tvar type = slides[globalVar.curSlide].type;\n\tif (type === 'video') {\n\t\t// var video = globalVar.$curSlide.find('video')[0];\n\t\t// eslint-disable-next-line es5/no-es6-methods\n\t\tvar videoID = globalVar.$curSlide.find('video')[0].id;\n\n\t\tif (slides[globalVar.curSlide].videoLoaded === false) {\n\t\t\tvideojs(videoID, {\n\t\t\t\tlanguage: 'en',\n\t\t\t\tautoplay: true,\n\t\t\t\tcontrolBar: {\n\t\t\t\t\tvolumePanel: {\n\t\t\t\t\t\tinline: true\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\thtml5: {\n\t\t\t\t\t// https://docs.videojs.com/docs/guides/text-tracks.html#emulated-text-tracks\n\t\t\t\t\t// prevents iPhone and safari from using their own subtitle system\n\t\t\t\t\tnativeTextTracks: false\n\t\t\t\t},\n\t\t\t\tplugins: {\n\t\t\t\t\t// https://github.com/kmoskwiak/videojs-resolution-switcher#plugin-options\n\t\t\t\t\tvideoJsResolutionSwitcher: {\n\t\t\t\t\t\tdefault: 'high',\n\t\t\t\t\t\tdynamicLabel: true\n\t\t\t\t\t},\n\t\t\t\t\t// https://github.com/ctd1500/videojs-hotkeys#options\n\t\t\t\t\thotkeys: {\n\t\t\t\t\t\tenableNumbers: false,\n\t\t\t\t\t\tenableModifiersForNumbers: false,\n\t\t\t\t\t\talwaysCaptureHotkeys: true\n\t\t\t\t\t},\n\t\t\t\t\tseekButtons: {\n\t\t\t\t\t\tback: 10\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}).ready(function () {\n\t\t\t\t// disable progress control (seeking) if globalVar or data.js is configured that way.\n\t\t\t\t// videoSeeking (data.js) is overruling progressControl (globalVar).\n\t\t\t\t// if devMode is on, seeking is always enabled.\n\n\t\t\t\tif (!globalVar.devMode) {\n\t\t\t\t\tif (!slides[globalVar.curSlide].videoSeeking) {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tslides[globalVar.curSlide].videoSeeking === false ||\n\t\t\t\t\t\t\tglobalVar.video.progressControl === false\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tvideojs(videoID).controlBar.progressControl.disable();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (videojs(videoID).textTracks().tracks_.length > 0) {\n\t\t\t\t\t// subtitle/captions style is set up here (defaults in comments)\n\t\t\t\t\t// NOTE: use #XXX hex style for colors! #xxx or #xxxxxx will not work!\n\t\t\t\t\tvar subtitleSettings = {\n\t\t\t\t\t\tbackgroundOpacity: '0.5', //\t\t\t\t\"1\"\n\t\t\t\t\t\tedgeStyle: 'dropshadow', //\t\t\t\t\tnot set (none, null, 0, '' doesn't work, only not setting it at all will set it to 'none')\n\t\t\t\t\t\tcolor: '#FFF', //\t\t\t\t\t\t\t\"#FFF\"\n\t\t\t\t\t\tbackgroundColor: '#000', //\t\t\t\t\t\"#000\"\n\t\t\t\t\t\ttextOpacity: '1', //\t\t\t\t\t\t\"1\"\n\t\t\t\t\t\twindowOpacity: '0', //\t\t\t\t\t\t\"0\"\n\t\t\t\t\t\tfontFamily: 'proportionalSansSerif', //\t\t\"proportionalSansSerif\"\n\t\t\t\t\t\twindowColor: '#FFF' //\t\t\t\t\t\t\"#000\"\n\t\t\t\t\t\t//fontPercent: 1 //\t\t\t\t\t\t\tnot set (1, 1.0, 1.00, etc doesn't work, only not setting it at all will set it to 100%)\n\t\t\t\t\t};\n\t\t\t\t\tvideojs(videoID).textTrackSettings.setValues(subtitleSettings);\n\t\t\t\t\tvideojs(videoID).textTrackSettings.updateDisplay();\n\n\t\t\t\t\t// this would show the first subtitle track\n\t\t\t\t\t// videojs(videoID).textTracks_[0].mode = \"showing\"\n\n\t\t\t\t\t// prints out a nice table of the current subtitle style settings\n\t\t\t\t\t// console.table(videojs(videoID).textTrackSettings.getValues());\n\t\t\t\t}\n\n\t\t\t\tslides[globalVar.curSlide].videoLoaded = true;\n\t\t\t\tvideojs(videoID).play();\n\t\t\t\tvideojs(videoID).volume(globalVar.video.volume);\n\t\t\t\tvideojs(videoID).muted(globalVar.video.muted);\n\t\t\t\tvideojs(videoID).trigger('volumechange');\n\t\t\t});\n\n\t\t\tvideojs(videoID).on('ended', function () {\n\t\t\t\tglobalVar.videoSeen[globalVar.curSlide] = true;\n\t\t\t\tslides[globalVar.curSlide].nextAction();\n\t\t\t});\n\n\t\t\tvideojs(videoID)\n\t\t\t\t.textTracks()\n\t\t\t\t.addEventListener('change', function () {\n\t\t\t\t\tthis.tracks_.forEach(function (textTrack) {\n\t\t\t\t\t\tsetGlobalTextTrackSettings(textTrack.language, textTrack.mode);\n\t\t\t\t\t});\n\t\t\t\t});\n\n\t\t\tvideojs(videoID).on('volumechange', function () {\n\t\t\t\tsetGlobalVolume(this.volume(), this.muted());\n\t\t\t});\n\n\t\t\tif (globalVar.fadeNavigation) {\n\t\t\t\tvideojs(videoID).on('useractive', function () {\n\t\t\t\t\t$('#si-nav-container').removeClass('vjs-fade-out');\n\t\t\t\t});\n\n\t\t\t\tvideojs(videoID).on('userinactive', function () {\n\t\t\t\t\tif (!videojs(videoID).paused()) {\n\t\t\t\t\t\t$('#si-nav-container').addClass('vjs-fade-out');\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\tvideojs(videoID).currentTime(0);\n\t\t\tvideojs(videoID).play();\n\t\t}\n\t} else {\n\t\tif ($('section').find('video').length > 0) {\n\t\t\t$('section').find('video')[0].pause();\n\t\t}\n\t}\n}\n\nfunction setGlobalTextTrackSettings(language, mode) {\n\t$('track').each(function (index, trackElement) {\n\t\tif (trackElement.srclang === language) {\n\t\t\tif (mode === 'showing') {\n\t\t\t\ttrackElement.default = true;\n\t\t\t\tvideojs.getAllPlayers().forEach(function (video) {\n\t\t\t\t\tvideo.textTracks().tracks_.forEach(function (track) {\n\t\t\t\t\t\tif (track.mode !== 'showing') {\n\t\t\t\t\t\t\ttrack.mode = 'showing';\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\ttrackElement.default = false;\n\t\t\t\tvideojs.getAllPlayers().forEach(function (video) {\n\t\t\t\t\tvideo.textTracks().tracks_.forEach(function (track) {\n\t\t\t\t\t\tif (track.mode === 'showing') {\n\t\t\t\t\t\t\ttrack.mode = 'disabled';\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction setGlobalVolume(volumeLevel, muted) {\n\tglobalVar.video.muted = muted;\n\tglobalVar.video.volume = volumeLevel;\n\t$('video').prop('volume', volumeLevel);\n\tvideojs.getAllPlayers().forEach(function (video) {\n\t\tif (video.muted() !== muted) {\n\t\t\tvideo.muted(muted);\n\t\t}\n\t\tif (video.volume() !== volumeLevel) {\n\t\t\tvideo.volume(volumeLevel);\n\t\t}\n\t});\n\n\tfor (var audioGroup in siAudio) {\n\t\tfor (var sound in siAudio[audioGroup]) {\n\t\t\tvar audioTrack = siAudio[audioGroup][sound];\n\t\t\taudioTrack.volume(audioTrack.initialVolume * volumeLevel);\n\t\t\taudioTrack.mute(muted);\n\t\t}\n\t}\n\n\t// for (var slideID in slides) {\n\t// \tconsole.log('slideID', slideID);\n\t// \tfor (var hotspotObj in slides[slideID]){}\n\t// \t// for (var sound in siAudio[audioGroup]) {\n\t// \t// \tvar audioTrack = siAudio[audioGroup][sound];\n\t// \t// \taudioTrack.volume(audioTrack.initialVolume * volumeLevel);\n\t// \t// \taudioTrack.mute(muted);\n\t// \t// }\n\t// \t// for (var hotspotSound in slides.menu.hotspot.audio[hotspotAudio]) {\n\t// \t// \tvar hotspotAudioTrack = slides.menu.hotspot.audio[hotspotSound];\n\t// \t// \tconsole.log(hotspotSound);\n\t// \t// }\n\t// }\n}\n","var unlockerSound = new Howl({\n\tsrc: ['media/audio/sounds/nothing.mp3']\n});\nunlockerSound.on('unlock', function () {\n\t// console.log('HOWLER: Audio unlocked.');\n\thidePreloader();\n\tunlockerSound.play();\n});\nunlockerSound.on('play', function () {\n\t// console.log('HOWLER: Audio playing.');\n\thidePreloader();\n});\nunlockerSound.play();\n\nfunction initPreloader() {\n\t// SETUP THE PRELOADER\n\twindow.onload = function () {\n\t\t$('#preloader_text_1').fadeOut('slow', function () {\n\t\t\t$('#preloader_text_2').fadeIn('slow');\n\t\t});\n\t\t$('#Preloader').on('click touch', function (e) {\n\t\t\te.preventDefault();\n\t\t\tsiAudio.sfx.click.play();\n\t\t\thidePreloader();\n\t\t});\n\t};\n\t// $('section.present').hide();\n}\n\nfunction hidePreloader() {\n\t$('#Preloader').fadeOut('slow', function () {\n\t\t$('section.present').fadeIn('slow', function () {\n\t\t\tif (slides[globalVar.curSlide] !== undefined && slides[globalVar.curSlide].type == 'video') {\n\t\t\t\tvar video = globalVar.$curSlide.find('video')[0];\n\t\t\t\tvideojs(video.playerId).play();\n\t\t\t}\n\t\t});\n\t});\n}\n\n// initPreloader()\n","////////////*Feature:Positive Feedback Function///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\nfunction initFeedbacks() {\n var feedbackContainers = $(\".si-modal-container__js\")\n var feedbackModals = $(\".si-modal__js\")\n var feedbackClosers = $(\".si-feedback-closer__js\")\n\n feedbackModals.on(\"click.prevent\", function (e) {\n e.preventDefault();\n e.stopPropagation();\n });\n feedbackContainers.each(function (idx, feedback) {\n $(feedback).on('click.close', function () {\n Howler.stop()\n siAudio.sfx.click.play()\n\n switch (slides[globalVar.curSlide].type) {\n case \"dnd\":\n resetDnD(slides[globalVar.curSlide].revertTime, globalVar.dndAnswers);\n break\n case \"sort\":\n resetSort();\n break\n case \"quiz\":\n resetQuiz();\n break\n case \"hotspot\":\n resetHotspot();\n break\n }\n\n var classList = $(this).attr(\"class\").split(/\\s+/);\n $.each(classList, function (index, item) {\n closeFeedbackAction(item);\n });\n $(\"body\").off(\"keydown.drag\");\n $(this).hide().removeClass(\"si-current-modal\");\n $(\"#si-nav-container\").removeClass(\"feedback-open\");\n })\n })\n feedbackClosers.each(function (idx, closer) {\n $(closer).on(\"click.close\", function () {\n Howler.stop();\n siAudio.sfx.click.play();\n\n switch (slides[globalVar.curSlide].type) {\n case \"dnd\":\n resetDnD(slides[globalVar.curSlide].revertTime, globalVar.dndAnswers);\n break\n case \"sort\":\n resetSort();\n break\n case \"quiz\":\n resetQuiz();\n break\n case \"hotspot\":\n resetHotspot();\n break\n }\n\n var classList = $(feedbackContainers[idx]).attr(\"class\").split(/\\s+/);\n $.each(classList, function (index, item) {\n closeFeedbackAction(item);\n });\n $(\"body\").off(\"keydown.drag\");\n $(feedbackContainers[idx]).hide().removeClass(\"si-current-modal\");\n $(\"#si-nav-container\").removeClass(\"feedback-open\");\n });\n });\n\n}\n\nfunction answerCorrect() {\n $('#' + globalVar.curSlide)\n .find('.si-positive')\n .fadeIn(FBKeyboard)\n .addClass('si-current-modal');\n\n var type = slides[globalVar.curSlide].type;\n slides[globalVar.curSlide][type]['trys'] = 0;\n\n if (siAudio[globalVar.curSlide][\"positive\"]) {\n siAudio.sfx.right.once(\"end\", function() {\n siAudio[globalVar.curSlide][\"positive\"].play();\n });\n siAudio.sfx.right.play();\n } else {\n siAudio.sfx.right.play();\n }\n \n if (typeof slides[globalVar.curSlide][\"onSuccessAction\"] === \"function\") {\n slides[globalVar.curSlide].onSuccessAction();\n }\n}\n\n////////////*Feature:Negative Feedback Functions///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\nfunction answerIncorrect() {\n var type = slides[globalVar.curSlide].type;\n var trys = slides[globalVar.curSlide][type]['trys'];\n var attempts = slides[globalVar.curSlide][type]['userAttempts'];\n\n if (attempts === 0) {\n trys = 0\n } else {\n trys++\n }\n slides[globalVar.curSlide][type]['trys'] = trys;\n\n if (trys < attempts || attempts === 0) {\n $('#' + globalVar.curSlide)\n .find('.si-negative')\n .fadeIn(FBKeyboard)\n .addClass('si-current-modal');\n\n if (siAudio[globalVar.curSlide][\"negative\"]) {\n siAudio.sfx.wrong.once('end',function(){\n siAudio[globalVar.curSlide][\"negative\"].play()\n })\n siAudio.sfx.wrong.play();\n }else{\n siAudio.sfx.wrong.play();\n }\n\n if (typeof slides[globalVar.curSlide]['onFailureAction1'] === 'function') {\n slides[globalVar.curSlide].onFailureAction1();\n }\n\n } else if (attempts !== 0 && trys === attempts) {\n $('#' + globalVar.curSlide)\n .find('.si-negative-final')\n .fadeIn(FBKeyboard)\n .addClass('si-current-modal');\n\n slides[globalVar.curSlide][type]['trys'] = 0;\n\n if (siAudio[globalVar.curSlide][\"negativeFinal\"]) {\n siAudio.sfx.wrong.once('end',function(){\n siAudio[globalVar.curSlide][\"negativeFinal\"].play();\n })\n siAudio.sfx.wrong.play()\n }else{\n siAudio.sfx.wrong.play();\n }\n\n if (typeof slides[globalVar.curSlide]['onFailureAction2'] === 'function') {\n slides[globalVar.curSlide].onFailureAction2();\n }\n }\n \n}\n////////////*Feature:Positive and Negative Feedback Handler & closeFeedbackAction///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\nfunction handleAnswer(bol) {\n Howler.stop()\n if (slides[globalVar.curSlide][\"noFeedback\"]) {\n var isNextAction = typeof slides[globalVar.curSlide][\"nextAction\"] === \"function\";\n if (bol) {\n if (typeof slides[globalVar.curSlide][\"onSuccessAction\"] === \"function\") {\n slides[globalVar.curSlide].onSuccessAction();\n }\n } else {\n if (typeof slides[globalVar.curSlide][\"onFailureAction1\"] === \"function\") {\n slides[globalVar.curSlide].onFailureAction1();\n }\n }\n if (isNextAction) {\n slides[globalVar.curSlide].nextAction();\n } else {\n nextSlide();\n }\n } else {\n $(\"#si-nav-container\").addClass(\"feedback-open\");\n if (bol == true) {\n answerCorrect();\n } else {\n answerIncorrect();\n }\n }\n}\n\nfunction closeFeedbackAction(item) {\n var bol = typeof slides[globalVar.curSlide]['nextAction'] === 'function';\n switch (item) {\n case 'si-positive':\n if (bol) {\n slides[globalVar.curSlide].nextAction();\n } else {\n nextSlide();\n }\n break;\n case 'si-negative':\n break;\n case 'si-negative-final':\n if (bol) {\n slides[globalVar.curSlide].nextAction();\n } else {\n nextSlide();\n }\n break;\n default:\n break;\n }\n}\n\nfunction FBKeyboard() {\n // var key = $(\"#FBKey\")\n var FBitems = $('.si-current-modal')\n .children()\n .children();\n var idx;\n if ($(FBitems[0]).hasClass('ie9hack')) {\n idx = 1;\n } else {\n idx = 0;\n }\n $(FBitems[idx]).focus();\n\n $('body').on('keydown.drag', function (event) {\n switch (event.keyCode) {\n case 9: //cycles through only FB elements while it is open\n event.preventDefault();\n if (idx < FBitems.length - 1) {\n idx += 1;\n } else {\n idx = 0;\n }\n $(FBitems[idx]).focus();\n break;\n case 27: // allows user to press escape key to return to normal and places focus on previous element\n $('.si-current-modal').trigger('click');\n $(document.activeElement).blur();\n break;\n case 13: // allows user to press enter key to return to normal and removes all focus (so that submit key is not clicked when FB closes)\n $('.si-current-modal').trigger('click');\n $(document.activeElement).blur();\n break;\n default:\n return true;\n }\n });\n}","////////////*Feature:Drag and Drop///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\nvar dndResetObject = {};\n/**\n * @param revertTime\n * @param dndAnswers\n */\nfunction resetDnD(revertTime, dndAnswers) {\n\tif (globalVar.curSlide === 'I1-B') {\n\t\t$('#forest').removeClass('blue-sky green-sky blue-plants green-plants');\n\t}\n\tglobalVar.$curSlide.find('.draggable').each(function () {\n\t\tvar OGPos = $(this).data('OGPos');\n\t\t$(this).animate(\n\t\t\t{\n\t\t\t\ttop: OGPos.top,\n\t\t\t\tleft: OGPos.left\n\t\t\t},\n\t\t\trevertTime\n\t\t);\n\t\t$(this).data('dropId', '');\n\t\t$(this).data('curPos', {\n\t\t\ttop: OGPos.top,\n\t\t\tleft: OGPos.left\n\t\t});\n\t\t$(this).data('prevPos', {\n\t\t\ttop: OGPos.top,\n\t\t\tleft: OGPos.left\n\t\t});\n\t});\n\tglobalVar.$curSlide.find('.droppable').each(function () {\n\t\t$(this).data('dragElements', []);\n\t\t$(this).data('dropCounter', slides[globalVar.curSlide].dnd.dropCounter[this.id]);\n\t});\n\t//reset dndAnswersect\n\tfor (key in dndAnswers) {\n\t\tdndAnswers[key] = [];\n\t}\n\n\tif (slides[globalVar.curSlide].dnd.type == 'dnd_2') {\n\t\tglobalVar.$curSlide.find('.draggable').fadeIn();\n\t\tglobalVar.$curSlide.find('.draggable').removeClass('shrink');\n\t}\n\n\tglobalVar.dndAnswers = dndAnswers;\n\treturn dndAnswers;\n}\n\n/**\n *\n */\nfunction dndFunctions() {\n\tvar curDrag;\n\tvar curDrop;\n\tvar $dragElements = globalVar.$curSlide.find('.draggable');\n\tvar $dropElements = globalVar.$curSlide.find('.droppable');\n\tvar revertTime;\n\tvar snapping;\n\tvar dndAnswers = generateAnswerTemplate();\n\n\t// assign custom or default values to revert and snapping\n\tif (slides[globalVar.curSlide].dnd.revertTime) {\n\t\trevertTime = slides[globalVar.curSlide].dnd.revertTime;\n\t} else {\n\t\trevertTime = 500;\n\t}\n\tif (slides[globalVar.curSlide].dnd.snapping) {\n\t\tsnapping = slides[globalVar.curSlide].dnd.snapping;\n\t} else {\n\t\tsnapping = true;\n\t}\n\n\t///////////////// First entrance setup/////////////////////////////////\n\tif (slides[globalVar.curSlide].visited == false) {\n\t\t// draggable setup: set position data, attaches dnd event functions, add keyboard access\n\t\t$dragElements.each(function () {\n\t\t\tvar events = dndActions(this.id);\n\t\t\tvar leftInit = ((parseInt($(this).css('left')) / $(this).parent().width()) * 100).toString() + '%';\n\t\t\tvar topInit = ((parseInt($(this).css('top')) / $(this).parent().height()) * 100).toString() + '%';\n\t\t\t$(this).data({\n\t\t\t\tOGPos: {\n\t\t\t\t\ttop: topInit,\n\t\t\t\t\tleft: leftInit\n\t\t\t\t},\n\t\t\t\tcurPos: {\n\t\t\t\t\ttop: topInit,\n\t\t\t\t\tleft: leftInit\n\t\t\t\t},\n\t\t\t\tprevPos: {\n\t\t\t\t\ttop: topInit,\n\t\t\t\t\tleft: leftInit\n\t\t\t\t},\n\t\t\t\tdropID: '',\n\t\t\t\tevents: events,\n\t\t\t\trevertTime: revertTime,\n\t\t\t\tsnapping: snapping\n\t\t\t});\n\n\t\t\t// makes dnd keyboard accessible\n\t\t\t$(this).attr('tabindex', '0');\n\t\t\tkeyBoardAccess(this);\n\t\t});\n\n\t\t// droppable setup: drag array, drop counter, keyboard access\n\t\t$dropElements.each(function () {\n\t\t\t$(this).data({\n\t\t\t\tdragElements: [],\n\t\t\t\tdropCounter: slides[globalVar.curSlide].dnd.dropCounter[this.id]\n\t\t\t});\n\n\t\t\t// necessary to make dnd keyboard accessible\n\t\t\t$(this).attr('tabindex', '-1');\n\t\t});\n\n\t\tdndResetObject[globalVar.curSlide] = {\n\t\t\ttime: revertTime,\n\t\t\tanswers: dndAnswers\n\t\t};\n\t\t// Subsequent Visits/////////////////////////////////////////\n\t} else {\n\t\t$dragElements.each(function () {\n\t\t\t$(this).draggable('disable');\n\t\t});\n\t\t$dropElements.each(function () {\n\t\t\t$(this).droppable('disable');\n\t\t});\n\t\tresetDnD(revertTime, dndAnswers);\n\t}\n\t// end setup\n\n\t// draggable options: add any additional needed keys from jQuery draggable API here\n\t$dragElements.draggable({\n\t\tstart: function (event, ui) {\n\t\t\tcurDrag = ui.helper[0];\n\t\t\t$(curDrag).data('events').onDragStart();\n\t\t},\n\t\tdrag: function (event, ui) {\n\t\t\tdragging(curDrag);\n\t\t},\n\t\trevert: 'invalid',\n\t\tstack: '.draggable',\n\t\trevertDuration: revertTime,\n\t\tstop: function (event, ui) {\n\t\t\tdragStop(curDrag);\n\t\t}\n\t});\n\n\t// droppable options: add any additional needed keys from jQuery droppable API here\n\t$dropElements.droppable({\n\t\taccept: '.draggable',\n\t\tover: function (event, ui) {\n\t\t\tcurDrop = event.target;\n\t\t\tif ($(curDrag).data('events').onDragOver[curDrop.id]) {\n\t\t\t\t$(curDrag).data('events').onDragOver[curDrop.id]();\n\t\t\t}\n\t\t},\n\t\tdrop: function (event, ui) {\n\t\t\tdropped(curDrop, curDrag);\n\t\t}\n\t});\n\n\t// activate both\n\t$dragElements.each(function () {\n\t\t$(this).draggable('enable');\n\t});\n\n\t$dropElements.each(function () {\n\t\t$(this).droppable('enable');\n\t});\n} //end dndFunctions\n\n// Dnd Event Functions///////////////////////////////\n\n// runs while dragging element;\n/**\n * @param dragTarget\n */\nfunction dragging(dragTarget) {\n\t$(dragTarget).data('events').onDrag();\n}\n\n// runs when drag element is released outside of valid drop area;\n/**\n * @param dragTarget\n */\nfunction dragStop(dragTarget) {\n\t$(dragTarget).data('events').onDragEnd();\n}\n\n//Important Function! Runs on drop into valid drop area///\n/**\n * @param dropTarget\n * @param dragTarget\n */\nfunction dropped(dropTarget, dragTarget) {\n\tvar pos = {\n\t\ttop: 0,\n\t\tleft: 0\n\t};\n\tvar snapping = $(dragTarget).data('snapping');\n\tvar spaceAvailable = $(dropTarget).data('dragElements').length < $(dropTarget).data('dropCounter');\n\n\t//get positioning\n\tif (snapping) {\n\t\tpos.top = ((parseInt($(dropTarget).css('top')) / $(dropTarget).parent().height()) * 100).toString() + '%';\n\t\tpos.left = ((parseInt($(dropTarget).css('left')) / $(dropTarget).parent().width()) * 100).toString() + '%';\n\t} else {\n\t\tpos.top = ((parseInt($(dragTarget).css('top')) / $('.reveal').height()) * 100).toString() + '%';\n\t\tpos.left = ((parseInt($(dragTarget).css('left')) / $('.reveal').width()) * 100).toString() + '%';\n\t}\n\n\t// run custom drop function\n\tif ($(dragTarget).data('events').onDrop[dropTarget.id]) {\n\t\t$(dragTarget).data('events').onDrop[dropTarget.id]();\n\t}\n\n\t// handle drop for each type\n\tif (slides[globalVar.curSlide].dnd.type == 'dnd_2') {\n\t\tif (spaceAvailable) {\n\t\t\tdnd2Drop(dragTarget, dropTarget);\n\t\t} else {\n\t\t\trevert(dragTarget);\n\t\t}\n\t} else if (slides[globalVar.curSlide].dnd.type == 'dnd_1') {\n\t\tif (spaceAvailable) {\n\t\t\tdnd1Drop(dragTarget, dropTarget, pos);\n\t\t} else {\n\t\t\tswap(dragTarget, dropTarget, pos);\n\t\t}\n\t}\n\n\tfor (key in slides[globalVar.curSlide].dnd.quiz) {\n\t\tglobalVar.dndAnswers[key] = $('#' + key).data('dragElements');\n\t}\n} //end dropped\n\n//////// Drops and Swap /////////////\n\n/**\n * @param drag\n * @param drop\n */\nfunction dnd2Drop(drag, drop) {\n\t$(drop).data('dragElements').push(drag.id);\n\t$(drag).addClass('shrink');\n\t$(drag).data('dropped', true);\n}\n\n/**\n * @param drag\n * @param drop\n * @param pos\n */\nfunction dnd1Drop(drag, drop, pos) {\n\tvar dropId = $(drag).data('dropId');\n\tif (dropId) {\n\t\tvar newArr = $('#' + dropId)\n\t\t\t.data('dragElements')\n\t\t\t.filter(function (dragId) {\n\t\t\t\tdragId !== drag.id;\n\t\t\t});\n\t\t$('#' + dropId).data('dragElements', newArr);\n\t}\n\tupdatePos(drag, pos);\n\t$(drag).data('dropId', drop.id);\n\t$(drop).data('dragElements').push(drag.id);\n\tmove(drag);\n}\n\n/**\n * @param drag\n * @param drop\n * @param pos\n */\nfunction swap(drag, drop, pos) {\n\tvar dropId = $(drag).data('dropId');\n\tvar swapDragId = $(drop).data('dragElements').pop();\n\tvar swapDrag = $('#' + swapDragId);\n\tvar swapDragPos;\n\tvar swapArr = [];\n\n\tif (dropId) {\n\t\tvar newArr = $('#' + dropId)\n\t\t\t.data('dragElements')\n\t\t\t.filter(function (dragId) {\n\t\t\t\tdragId !== drag.id;\n\t\t\t});\n\t\tnewArr.push(swapDragId);\n\t\t$('#' + dropId).data('dragElements', newArr);\n\t\tswapDragPos = $(drag).data('curPos');\n\t} else {\n\t\tswapDragPos = $(swapDrag).data('OGPos');\n\t\tswapDrag.removeData('dropId');\n\t}\n\tswapArr = $('#' + drop.id)\n\t\t.data('dragElements')\n\t\t.filter(function (dragId) {\n\t\t\tdragId !== swapDragId;\n\t\t});\n\tswapArr.push(drag.id);\n\t$('#' + drop.id).data('dragElements', swapArr);\n\n\t$(drag).data('dropId', drop.id);\n\t$(swapDrag).data('dropId', dropId);\n\n\tupdatePos(swapDrag, swapDragPos);\n\tupdatePos(drag, pos);\n\n\tmove(drag);\n\tmove(swapDrag);\n}\n\n/////////////////// DnD Helper Functions///////////////////////////////////////////////////\n/**\n * @param dragItem\n */\nfunction revert(dragItem) {\n\tvar revertTime = $(dragItem).data('revertTime');\n\t$(dragItem).animate(\n\t\t{\n\t\t\ttop: $(dragItem).data('prevPos').top,\n\t\t\tleft: $(dragItem).data('prevPos').left\n\t\t},\n\t\trevertTime\n\t);\n}\n\n/**\n * @param dragItem\n */\nfunction move(dragItem) {\n\tvar revertTime = 300;\n\t$(dragItem).animate(\n\t\t{\n\t\t\ttop: $(dragItem).data('curPos').top,\n\t\t\tleft: $(dragItem).data('curPos').left\n\t\t},\n\t\trevertTime\n\t);\n}\n\n/**\n * @param dragItem\n * @param newPos\n */\nfunction updatePos(dragItem, newPos) {\n\t$(dragItem).data('prevPos', $(dragItem).data('curPos'));\n\t$(dragItem).data('curPos', newPos);\n}\n\n// Grabs custom event actions or assigns default values to all action keys. Makes action key entirely optional\n/**\n * @param dragItemID\n */\nfunction dndActions(dragItemID) {\n\tvar actions = {\n\t\tonDragStart: function () {},\n\t\tonDrag: function () {},\n\t\tonDragOver: {},\n\t\tonDragEnd: function () {},\n\t\tonDrop: {}\n\t};\n\tif (slides[globalVar.curSlide].dnd.actions) {\n\t\tif (!slides[globalVar.curSlide].dnd.actions[dragItemID]) {\n\t\t\tslides[globalVar.curSlide].dnd.actions[dragItemID] = {};\n\t\t}\n\t\tfor (var key in actions) {\n\t\t\tif (slides[globalVar.curSlide].dnd.actions[dragItemID][key]) {\n\t\t\t\tactions[key] = slides[globalVar.curSlide].dnd.actions[dragItemID][key];\n\t\t\t}\n\t\t}\n\t} else {\n\t\tslides[globalVar.curSlide].dnd.actions = {};\n\t}\n\tslides[globalVar.curSlide].dnd.actions[dragItemID] = actions;\n\treturn actions;\n}\n\n/**\n *\n */\nfunction generateAnswerTemplate() {\n\tvar i = 0;\n\tvar str = '';\n\tvar dndAnswers;\n\t//write a blank object/answers into the globalVar\n\tglobalVar.dndAnswers = {};\n\tfor (key in slides[globalVar.curSlide].dnd.quiz) {\n\t\ti++;\n\n\t\tvar stra = '\"' + key + '\":' + '[]';\n\t\tif (Object.keys(slides[globalVar.curSlide].dnd.quiz).length >= 2) {\n\t\t\tif (i != Object.keys(slides[globalVar.curSlide].dnd.quiz).length) {\n\t\t\t\tstra = stra + ',';\n\t\t\t}\n\t\t}\n\t\tstr = str + stra;\n\t}\n\tstr = '{' + str + '}';\n\tdndAnswers = JSON.parse(str);\n\tglobalVar.dndAnswers = dndAnswers;\n\treturn dndAnswers;\n}\n\n/**\n * @param dragElement\n */\nfunction keyBoardAccess(dragElement) {\n\tvar accessibility = function (event) {\n\t\tvar drops = globalVar.$curSlide.find('.droppable');\n\t\tvar dropIdx = 0;\n\t\tvar $drag = $(this);\n\t\tif (event.which === 32) {\n\t\t\t//spacebar selects drag element\n\n\t\t\t$(drops[dropIdx]).focus(); //focuses on first drop area\n\t\t\t$drag.off('keydown.access'); //removes spacebar selector\n\t\t\tdragging($drag[0]); //takes care of drag events\n\n\t\t\t$('body').on('keydown.drag', function (event) {\n\t\t\t\tswitch (event.keyCode) {\n\t\t\t\t\tcase 9: //removes ability to tab while drag element is selected\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 27: // allows user to press escape key to return to normal and places focus on drag element\n\t\t\t\t\t\t$drag.animate(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttop: $drag.data('originalTop'),\n\t\t\t\t\t\t\t\tleft: $drag.data('originalLeft')\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\trevertTime\n\t\t\t\t\t\t);\n\t\t\t\t\t\t$drag.focus();\n\n\t\t\t\t\t\t$drag.on('keydown.access', accessibility);\n\t\t\t\t\t\t$('body').off('keydown.drag');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 38: //up arrow cycles through drop targets\n\t\t\t\t\t\tif (dropIdx < drops.length - 1) {\n\t\t\t\t\t\t\tdropIdx += 1;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tdropIdx = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$(drops[dropIdx]).focus();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 40: //down arrow cycles through drop targets\n\t\t\t\t\t\tif (dropIdx > 0) {\n\t\t\t\t\t\t\tdropIdx -= 1;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tdropIdx = drops.length - 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$(drops[dropIdx]).focus();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 13: //enter key drops selected drag element into currently focused drop area\n\t\t\t\t\t\tdropped(drops[dropIdx], $drag[0]);\n\t\t\t\t\t\tif (slides[globalVar.curSlide].dnd.type === 'dnd_2') {\n\t\t\t\t\t\t\t$drag.blur();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t$drag.focus();\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$drag.on('keydown.access', accessibility);\n\t\t\t\t\t\t$('body').off('keydown.drag');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t};\n\t$(dragElement).on('keydown.access', accessibility);\n}\n","function hotspotFunctions() {\n\t// variables\n\tvar $slideDOM = $('#' + globalVar.curSlide);\n\tvar slideID = globalVar.curSlide;\n\tvar $hotspots = $slideDOM.find(' .hotspot-button');\n\tvar $modalBlocker = $slideDOM.find('.hotspot-modal-blocker');\n\tvar $modals = $modalBlocker.find(' .hotspot-modal');\n\tvar $modalClose = $modalBlocker.find('.modal-close');\n\n\tvar clickChecker = {};\n\n\tvar slideObj = slides[globalVar.curSlide];\n\tvar settings = slideObj.hotspot || {};\n\n\tvar selectedClass;\n\tvar activeClass = settings.activeClass || 'active-hotspot';\n\tvar correctClass = settings.correctClass || 'correct';\n\tvar modalStyleClass = settings.modalStyleClass || 'modal-style';\n\tvar hotspotStyleClass = settings.hotspotStyleClass || 'hotspot-style';\n\tvar completeAction = settings.customCompleteAction || slideObj.nextAction;\n\n\tsettings.activeClass = activeClass;\n\tsettings.correctClass = correctClass;\n\tsettings.selectedClass = selectedClass;\n\tsettings.modalStyleClass = modalStyleClass;\n\tsettings.hotspotStyleClass = hotspotStyleClass;\n\n\tsettings.clickChecker = clickChecker;\n\tsettings.indv = settings.indv || {};\n\n\t$hotspots.addClass(hotspotStyleClass);\n\t$hotspots.each(function (i, spot) {\n\t\t$(spot).addClass(hotspotStyleClass + '-' + (i + 1));\n\t});\n\n\t$modals.addClass(modalStyleClass);\n\t$modals.each(function (i, mod) {\n\t\t$(mod).addClass(modalStyleClass + '-' + (i + 1));\n\t});\n\n\tif (settings.correctHotspots)\n\t\tsettings.correctHotspots.forEach(function (item) {\n\t\t\t$($hotspots[item - 1]).addClass(correctClass);\n\t\t});\n\n\t// build clickChecker object\n\tfor (var i = 0; i < $hotspots.length; i++) {\n\t\tclickChecker[i + 1] = clickChecker[i + 1] || {};\n\t\tclickChecker[i + 1].seen = false;\n\n\t\t//if correctClass specified add correctClass key\n\t\tif (settings.correctClass) {\n\t\t\tvar correctClass = settings.correctClass;\n\t\t\tclickChecker[i + 1].hasCorrectClass = $($hotspots[i]).hasClass(correctClass);\n\t\t} else {\n\t\t\tclickChecker[i + 1].hasCorrectClass = true;\n\t\t}\n\t}\n\n\t// if (!settings.audioSetup)\n\t// \tfor (var key in settings.audio) {\n\t// \t\tsettings.audio[key] = new Howl({\n\t// \t\t\tsrc: [settings.audio[key]]\n\t// \t\t});\n\t// \t\tsettings.audioSetup = true;\n\t// \t}\n\n\tif (settings.linear) {\n\t\tif (settings.quiz) throw '\\nHotspot Error:\\nyou cannot use \"linear\" and \"quiz\" together';\n\t\tif (settings.correctHotspots) throw '\\nHotspot Error:\\nyou cannot use \"linear\" and \"correctHotspots\" together';\n\t\t$hotspots.removeClass(activeClass);\n\t\tlock($hotspots);\n\t\tunlock($($hotspots[0]));\n\t\t$($hotspots[0]).addClass(activeClass);\n\t} else if (settings.quiz) {\n\t\tselectedClass = settings.quiz.selectedClass || 'selected-hotspot';\n\t\t$hotspots.removeClass(selectedClass);\n\t\tsettings.quiz.selectedAnswers = [];\n\t\tsettings.useModals = false;\n\t}\n\n\t$hotspots.each(function (i, hoSp) {\n\t\tvar $thisHotspot = $(hoSp);\n\t\t//event listener for hotspots\n\t\tif (settings.hover === true) {\n\t\t\t$thisHotspot.off('mouseover.hotspot');\n\t\t\t$thisHotspot.on('mouseover.hotspot', function () {\n\t\t\t\thandleHotspot(i, hoSp);\n\t\t\t});\n\t\t\t$modalBlocker.addClass('hover-spot');\n\t\t} else {\n\t\t\t$thisHotspot.off('click.hotspot');\n\t\t\t$thisHotspot.on('click.hotspot', function () {\n\t\t\t\thandleHotspot(i, hoSp);\n\t\t\t});\n\t\t}\n\t});\n\n\tfunction handleHotspot(i, hoSp) {\n\t\tvar mainOnClick = settings.onClick;\n\t\tvar indvOnClick = settings.indv[i + 1] && settings.indv[i + 1].onClick;\n\t\tvar $thisModalClose = $($modalClose[i]);\n\t\tvar $thisModal = $($modals[i]);\n\t\tvar $thisHotspot = $(hoSp);\n\t\tvar modalWarn = \"you haven't created a modal for this hotspot\";\n\t\t// console.log($thisModal.add($thisModalClose));\n\t\tmainOnClick && mainOnClick(hoSp, $modals[i] || modalWarn);\n\t\tindvOnClick && indvOnClick(hoSp, $modals[i] || modalWarn);\n\n\t\tif (settings.audio && Object.keys(settings.audio).length > 0) {\n\t\t\t// console.log('hotspot audio found', siAudio[slideID][i + 1]);\n\n\t\t\tHowler.stop();\n\t\t\tfor (var key in settings.audio) siAudio[slideID][key].stop();\n\t\t\tsiAudio[slideID][i + 1] && siAudio[slideID][i + 1].play();\n\t\t}\n\n\t\tif (settings.quiz) {\n\t\t\tif (settings.quiz.type === 'scq') $hotspots.removeClass(selectedClass);\n\t\t\t$thisHotspot.toggleClass(selectedClass);\n\t\t\tsettings.quiz.selectedAnswers = [];\n\t\t\t$hotspots.each(function (idx, quizHotspot) {\n\t\t\t\tif ($(quizHotspot).hasClass(selectedClass)) settings.quiz.selectedAnswers.push(idx + 1);\n\t\t\t});\n\t\t} else if (settings.useModals === false) {\n\t\t\tclickChecker[i + 1].seen = true;\n\t\t\tallSeenBehavior();\n\n\t\t\tif (settings.linear === true) unlockNextHotspot($hotspots[i + 1], settings.indv[i + 2]);\n\t\t} else {\n\t\t\t$modalBlocker.show();\n\t\t\t$thisModal.show();\n\n\t\t\tfunction handleClose(e) {\n\t\t\t\tvar mainOnModalClose = settings.onModalClose;\n\t\t\t\tvar indvOnModalClose = settings.indv[i + 1] && settings.indv[i + 1].onModalClose;\n\n\t\t\t\tsettings.audio && settings.audio[i + 1] && siAudio[slideID][i + 1].stop();\n\t\t\t\t// settings.audio && settings.audio[i + 1] && settings.audio[i + 1].stop();\n\t\t\t\tclickChecker[i + 1].seen = true;\n\n\t\t\t\t$thisModal.hide();\n\t\t\t\t$modalBlocker.hide();\n\n\t\t\t\tmainOnModalClose && mainOnModalClose(hoSp, $modals[i] || modalWarn);\n\t\t\t\tindvOnModalClose && indvOnModalClose(hoSp, $modals[i] || modalWarn);\n\n\t\t\t\tallSeenBehavior();\n\n\t\t\t\tif (settings.linear === true) unlockNextHotspot($hotspots[i + 1], settings.indv[i + 2]);\n\t\t\t}\n\t\t\t// console.log($($modals[i], $modalClose));\n\t\t\t$thisModal.add($thisModalClose).off('click.stpr');\n\t\t\t$thisModal.add($thisModalClose).on('click.stpr', function (e) {\n\t\t\t\te.stopPropagation();\n\t\t\t});\n\t\t\t$modalBlocker.add($thisModalClose).off('click.modal-blocker');\n\t\t\t$modalBlocker.add($thisModalClose).on('click.modal-blocker', handleClose);\n\t\t\tif (settings.hover === true) {\n\t\t\t\t$hotspots.each(function (i, hoSp) {\n\t\t\t\t\t$thisHotspot.off('mouseout.hotspot');\n\t\t\t\t\t$thisHotspot.on('mouseout.hotspot', handleClose);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\t//check for completion and define what happens\n\tfunction allSeenBehavior() {\n\t\tif (allSeen(clickChecker)) completeAction();\n\t}\n\n\tfunction allSeen(clickChecker) {\n\t\tvar result = true;\n\n\t\tfor (var item in clickChecker) {\n\t\t\tif (clickChecker[item].seen === false && !clickChecker[item].hasCorrectClass) {\n\t\t\t\tresult = false;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\tfunction unlockNextHotspot(nextHotspot, nextHotspotSettings) {\n\t\tvar mainOnUnlock = settings.onUnlock;\n\t\tvar indvOnUnlock = nextHotspotSettings && nextHotspotSettings.onUnlock;\n\n\t\t$hotspots.removeClass(activeClass);\n\n\t\tunlock($(nextHotspot));\n\t\t$(nextHotspot).addClass(activeClass);\n\n\t\tmainOnUnlock && mainOnUnlock(nextHotspot);\n\t\tindvOnUnlock && indvOnUnlock(nextHotspot);\n\t}\n}\n\nfunction resetHotspot() {\n\thotspotFunctions();\n}\n","function initMenu(){\n for(key in slides){\n if (slides[key].type === \"menu\") {\n if (slides[key][\"menu\"]) {\n // set default menu class if one is not present\n if (!slides[key][\"menu\"][\"menuClass\"]) {\n slides[key][\"menu\"][\"menuClass\"] = \"si-menu__js\";\n }\n // set menu default to nonlinear if linear slide key is not present/true\n if (!slides[key][\"menu\"][\"linear\"]) {\n slides[key][\"menu\"][\"linear\"] = false; \n }\n // set menu default menu navigation if not present. Will match buttons to subsequent slides after the menu \n if (!slides[key][\"menu\"][\"navigation\"]) {\n var number = slides[key][\"slideNumber\"];\n var buttons = $(\".\" + slides[key][\"menu\"][\"menuClass\"]);\n var length = buttons.length;\n var defaultNav = [];\n for (var i = 1; i <= length; i++) {\n defaultNav.push(number + i);\n }\n slides[key][\"menu\"][\"navigation\"] = defaultNav;\n }\n // set default completion requirements for each button if not given. Will match buttons to subsequent slides after the menu\n if(!slides[key][\"menu\"][\"completionIDs\"]){\n var number = slides[key][\"slideNumber\"];\n var buttons = $(\".\" + slides[key][\"menu\"][\"menuClass\"]);\n var length = buttons.length;\n var completionIDs = [];\n for (var i = 1; i <= length; i++) {\n for (id in slides) {\n if (slides[id][\"slideNumber\"] == (number + i).toString()) {\n completionIDs.push(id)\n }\n }\n }\n slides[key][\"menu\"][\"completionIDs\"] = completionIDs;\n }\n } else {\n // set all menu defaults if the 'menu' key is entirely absent\n slides[key][\"menu\"] = {};\n slides[key][\"menu\"][\"menuClass\"] = \"si-menu__js\";\n slides[key][\"menu\"][\"linear\"] = false;\n slides[key][\"menu\"][\"completionIDs\"] = completionIDs;\n var buttons = $(\".\" + slides[key][\"menu\"][\"menuClass\"]);\n var number = slides[key][\"slideNumber\"];\n var length = buttons.length;\n var defaultNav = [];\n var completionIDs = [];\n for (var i = 1; i <= length; i++) {\n defaultNav.push(number + i);\n for (id in slides) {\n if (slides[id][\"slideNumber\"] == (number + i).toString()) {\n completionIDs.push(id);\n }\n }\n }\n slides[key][\"menu\"][\"navigation\"] = defaultNav;\n slides[key][\"menu\"][\"completionIDs\"] = completionIDs;\n }\n // attach click event to the buttons using navigation array\n if (slides[key][\"menu\"][\"navigation\"].length) {\n var buttons = $(\".\" + slides[key][\"menu\"][\"menuClass\"]);\n buttons.each(function(idx, button) {\n var slide = slides[key];\n $(button).on(\"click.nav\", function() {\n jumpToId(slide[\"menu\"][\"navigation\"][idx]);\n });\n });\n }\n // lock buttons if linear and unlock the first one\n if (slides[key][\"menu\"][\"linear\"]) {\n var buttons = $(\".\" + slides[key][\"menu\"][\"menuClass\"]);\n lock(buttons);\n unlock($(buttons[0]));\n }\n\n\n } \n }\n}\n\nfunction menuFunctions(){\n var menuButtons = $(\".\" + slides[globalVar.curSlide][\"menu\"][\"menuClass\"]);\n var linear = slides[globalVar.curSlide][\"menu\"][\"linear\"];\n var completionIDs = slides[globalVar.curSlide][\"menu\"][\"completionIDs\"];\n var allComplete = true;\n if(completionIDs.length){\n completionIDs.forEach(function(id,idx){\n if(slideCompletion[id]){\n $(menuButtons[idx]).addClass('completed')\n if(linear && menuButtons[idx + 1]){\n unlock($(menuButtons[idx + 1]))\n }\n }else{\n allComplete = false;\n }\n })\n }\n\n if(allComplete){\n slides[globalVar.curSlide][\"menu\"][\"allComplete\"] = true;\n }else{\n slides[globalVar.curSlide][\"menu\"][\"allComplete\"] = false;\n }\n}","//////////////////*Feature:Sortables/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\nfunction sortFunctions() {\n // first visit setup\n // assigns original positions in order to make reset work\n if (slides[globalVar.curSlide].visited === false) {\n var $sortables = globalVar.$curSlide.find('.sortable');\n $sortables.each(function (idx, sortable) {\n var id = sortable.id;\n\n // initialize sortables with or without options\n if (slides[globalVar.curSlide]['sort']['sortables'][id]) {\n if (slides[globalVar.curSlide]['sort']['sortables'][id]['options']) {\n $(sortable).sortable(slides[globalVar.curSlide]['sort']['sortables'][id]['options']);\n } else {\n $(sortable).sortable();\n }\n\n //makes beginning order default answer if no answer is given\n if (!slides[globalVar.curSlide]['sort']['sortables'][id]['answer']) {\n slides[globalVar.curSlide]['sort']['sortables'][id]['answer'] = $(sortable).sortable('toArray');\n }\n } else {\n $(sortable).sortable();\n }\n\n var sortableElements = $('#' + id + '> div');\n // necessary to make a copy otherwise reassigning one of the data elements overwrites the other\n var shuffleElements = $('#' + id + '> div');\n\n // This handles keyboard accessibility for sortables\n\n sortableElements.each(function (idx, sort) {\n sortKeyboard(sort, sortable);\n });\n\n $(sortable).data({\n elements: sortableElements,\n shuffle: shuffleElements\n });\n });\n }\n\n // randomizes placement of divs every time the slide is entered\n if (slides[globalVar.curSlide]['sort']['randomize'] === true) {\n var $sortables2 = globalVar.$curSlide.find('.sortable');\n $sortables2.each(function (idx, sortable) {\n var elements = $(sortable).data('elements');\n var shuffleArr = [];\n\n // create an array of unique random numbers to serve as indices\n while (shuffleArr.length < elements.length) {\n var num = Math.floor(Math.random() * elements.length);\n // tests that the num variable has not already been added to the array\n if (\n !shuffleArr.some(function (el) {\n return el === num;\n })\n ) {\n shuffleArr.push(num);\n }\n }\n\n // use the array of random numbers to reassign elements in the shuffle data attribute\n for (var i = 0; i < elements.length; i++) {\n $(sortable).data('shuffle')[i] = $(sortable).data('elements')[shuffleArr[i]];\n }\n });\n }\n\n // randomizes across connected lists\n if (\n slides[globalVar.curSlide]['sort']['randomizeConnect'] &&\n typeof slides[globalVar.curSlide]['sort']['randomizeConnect'] === 'string'\n ) {\n var lists = $('.' + slides[globalVar.curSlide]['sort']['randomizeConnect']);\n var elementArr = [];\n var shuffled = [];\n lists.each(function (idx, list) {\n $(list)\n .find('div')\n .each(function (idx2, div) {\n elementArr.push(div);\n });\n });\n\n while (elementArr.length) {\n var num = Math.floor(Math.random() * elementArr.length);\n element = elementArr.splice(num, 1);\n shuffled.push(element[0]);\n }\n\n var i = 0;\n while (shuffled.length) {\n lists.each(function (idx, list) {\n $(list).data('shuffle')[i] = shuffled.shift();\n });\n i++;\n }\n }\n\n resetSort();\n}\n\n// reset works for both randomized and non-randomized sort slides. you do not need to put the randomize key if you don't need it.\n// reset will either reset to the html order of divs or to the current randomized order\nfunction resetSort() {\n var $sortables = globalVar.$curSlide.find('.sortable');\n $sortables.each(function (idx, sortable) {\n if (slides[globalVar.curSlide]['sort']['randomizeConnect']) {\n $(sortable).append($(sortable).data('shuffle'));\n } else if (\n slides[globalVar.curSlide]['sort']['randomize'] === false ||\n slides[globalVar.curSlide]['sort']['randomize'] === undefined\n ) {\n $(sortable).append($(sortable).data('elements'));\n } else {\n $(sortable).append($(sortable).data('shuffle'));\n }\n });\n}\n\n// accessibility function\nfunction sortKeyboard(sortItem, sortList) {\n var connected = $(sortList).sortable('option', 'connectWith');\n\n $(sortItem)\n .attr('tabindex', 0)\n .on('keydown', function (event) {\n if (event.which === 87 || event.which === 65) {\n // left or up one space ('w', 'a')\n $(this).insertBefore($(this).prev());\n }\n if (event.which === 83 || event.which === 68) {\n // right or down one space ('s','d')\n $(this).insertAfter($(this).next());\n }\n if (event.which === 81) {\n // \"q\" top of list\n $(this)\n .parent()\n .prepend($(this));\n }\n if (event.which === 69) {\n // \"e\" bottom of list\n $(this)\n .parent()\n .append($(this));\n }\n if (connected && event.which === 88) {\n // 'x' move item to connected lists\n var newLists = [];\n var parentIndex;\n $(connected).each(function (idx, list) {\n if (!$(list).find(event.target)[0]) {\n newLists.push(list);\n } else {\n parentIndex = idx;\n }\n });\n if (newLists[parentIndex]) {\n $(newLists[parentIndex]).append($(this));\n } else {\n $(newLists[0]).append($(this));\n }\n }\n $(this).focus();\n });\n}","////////////*Feature:Multiple Choice/Single Choice Questions///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\nfunction resetQuiz() {\n var choices = $(\"#\" + globalVar.curSlide + \" .si-quiz__js li\");\n choices.removeClass(\"si-quiz-selected\")\n}\nfunction initQuiz(){\n var quizzes = $(\".si-quiz__js\");\n var buttonType = globalVar.buttonType;\n quizzes.each(function(idx, quiz){\n var choices = $(quiz).find(\"li\");\n var buttons = $(quiz).find(\"div\");\n var isRadio = $(quiz).hasClass('si-radio__js') ? true : false;\n choices.each(function (idx, choice) {\n $(choice).addClass(\"si-quiz-answer\").attr(\"tabindex\", \"0\");\n $(choice).on(\"click.quiz\", function () {\n siAudio.sfx.click.play()\n if (isRadio) {\n choices.removeClass(\"si-quiz-selected\");\n }\n if ($(this).hasClass(\"si-quiz-selected\")) {\n $(this).removeClass(\"si-quiz-selected\");\n } else {\n $(this).addClass(\"si-quiz-selected\");\n }\n });\n $(choice).on(\"keyup.quiz\", function () {\n if (event.which === 13) {\n siAudio.sfx.click.play()\n if (isRadio) {\n choices.removeClass(\"si-quiz-selected\");\n }\n if ($(this).hasClass(\"si-quiz-selected\")) {\n $(this).removeClass(\"si-quiz-selected\");\n } else {\n $(this).addClass(\"si-quiz-selected\");\n }\n }\n });\n });\n buttons.each(function (idx, button) {\n var image = $(button).children().eq(0);\n if (isRadio) {\n $(image).attr(\"src\", function (index, attr) {\n return attr.replace(\"mcq\", \"scq\");\n });\n }else{\n $(image).attr(\"src\", function (index, attr) {\n return attr.replace(\"scq\", \"mcq\");\n });\n }\n \n $(button).find(\"img\").attr(\"src\", function (index, attr) {\n return attr.replace(\"classic\", buttonType);\n });\n });\n })\n}\nfunction quizFunction(){\n var answers = slides[globalVar.curSlide][\"quiz\"][\"answers\"];\n var choices = $(\"#\" + globalVar.curSlide + \" .si-quiz__js li\");\n if (!slides[globalVar.curSlide][\"visited\"] && globalVar.devMode) {\n choices.each(function (idx, choice) {\n if (answers[$(choice).attr(\"id\")]) {\n $(choice).css(\"color\", \"blue\");\n }\n });\n }else{\n resetQuiz()\n }\n}","function formFunctions() {\n var $form = $('#' + globalVar.curSlide + ' form');\n var hasSubmit = !!$form.find('input[type=submit]').length;\n $form.addClass('form-style');\n $form.trigger('reset');\n\n if (!hasSubmit) {\n $form.append('');\n }\n checkboxFunctionality();\n $form.on('submit.req-form', function(e) {\n e.preventDefault();\n });\n\n var inputs = $form.find('input');\n inputs.keyup(function() {\n var $this = $(this);\n var characters = $this.val().length;\n var maxLength = $this.attr('maxLength');\n var lastInput = $this.next().hasClass('checkbox');\n\n if (characters == maxLength && !lastInput) {\n $this.next().focus();\n }\n });\n inputs.keydown(function(e) {\n if ((e.which == 8 || e.which == 46) && $(this).val() == '') {\n $(this)\n .prev('input')\n .focus();\n }\n });\n\n function checkboxFunctionality() {\n var fields = slides[globalVar.curSlide].form.fields;\n for (var key in fields) {\n if (fields[key].checkbox === true) {\n var checkboxes = $('#' + globalVar.curSlide + ' .' + fields[key].class);\n checkboxes.addClass('checkbox');\n checkboxes.data('key', key);\n checkboxes.each(function(idx, checkbox) {\n $(checkbox).off('click.checkbox');\n $(checkbox).on('click.checkbox', function() {\n var field =\n slides[globalVar.curSlide].form.fields[$(checkbox).data('key')];\n var checkboxSet = $('#' + globalVar.curSlide + ' .' + field.class);\n if (this.value === 'X') {\n this.value = '';\n } else {\n checkboxSet[0].value = '';\n checkboxSet[1].value = '';\n this.value = 'X';\n }\n });\n });\n }\n }\n }\n}\n\nfunction checkForm() {\n var fields = slides[globalVar.curSlide].form.fields;\n for (var key in fields) {\n var field = fields[key];\n var result = '';\n var inputs = $('#' + globalVar.curSlide + ' .' + field.class);\n\n if (field.checkbox === true)\n result = inputs.filter('.' + field.answer)[0].value === 'X';\n // Class based checkbox\n // result = inputs.filter('.' + field.answer).hasClass('selected');\n else {\n var caseSensitive = fields[key].caseSensitive;\n var answer = caseSensitive ? field.answer : field.answer.toLowerCase();\n var text = '';\n\n inputs.each(function(i, input) {\n text += caseSensitive ? input.value : input.value.toLowerCase();\n });\n\n result = text === answer;\n }\n console.log(result);\n if (!result) {\n return false;\n }\n }\n return true;\n}\n\nfunction validForm() {\n var valid = true;\n var requiredFields = $('#' + globalVar.curSlide)\n .find('input,textarea,select')\n .filter('[required]');\n requiredFields.each(function(i, field) {\n if (field.value === '') {\n valid = false;\n $('#' + globalVar.curSlide + ' form')\n .find('input[type=submit]')\n .trigger('click');\n return false;\n }\n });\n return valid;\n}\n\n//Class based checkbox\n/* \nfunction checkboxFunctionality() {\n var fields = slides[globalVar.curSlide].form.fields;\n for (var key in fields) {\n if (fields[key].checkbox === true) {\n var checkboxes = $('#' + globalVar.curSlide + ' .' + fields[key].class);\n checkboxes.addClass('checkbox');\n checkboxes.removeClass('selected');\n checkboxes.data('key', key);\n checkboxes.each(function(idx, checkbox) {\n $(checkbox).off('click.checkbox');\n $(checkbox).on('click.checkbox', function() {\n var field =\n slides[globalVar.curSlide].form.fields[$(checkbox).data('key')];\n var checkboxSet = $('#' + globalVar.curSlide + ' .' + field.class);\n if ($(this).hasClass('selected')) {\n $(this).removeClass('selected');\n } else {\n checkboxSet.removeClass('selected');\n $(this).addClass('selected');\n }\n });\n });\n }\n }\n} */\n","var chapterNavigationSlides = ['I1', 'I3', 'I5', 'I7', 'I9', 'V1'];\nvar chapterCompletionSlides = ['I2', 'I4', 'I6', 'I8', 'I9', 'V4'];\n\n/**\n *\n */\nfunction initSideMenu() {\n\tvar $menu = $('#si-side-menu');\n\tvar $container = $('#si-side-menu-container');\n\tvar buttons = $('.si-menu-navigation').find('button');\n\n\t$menu.on('click.stop', function (e) {\n\t\te.stopPropagation();\n\t});\n\t$container.on('click.side', function (e) {\n\t\tcloseSideMenu();\n\t});\n\n\tbuttons.each(function (idx, button) {\n\t\t$(button).on('click.side', function () {\n\t\t\tvar id = chapterNavigationSlides[idx];\n\t\t\tjumpToId(id);\n\t\t\tcloseSideMenu();\n\t\t});\n\t});\n}\n\n/**\n *\n */\nfunction openSideMenu() {\n\tvar $menu = $('#si-side-menu');\n\tvar $container = $('#si-side-menu-container');\n\n\t$container.addClass('menu-open');\n\t$menu.addClass('menu-open');\n\t// this is for pausing the video when you open the side menu\n\tvar type = slides[globalVar.curSlide].type;\n\tif (slides[globalVar.curSlide].videoLoaded && type == 'video') {\n\t\tvideojs(globalVar.$curSlide.find('video')[0].id).pause();\n\t}\n\n\thandleSideButtons();\n}\n\n/**\n *\n */\nfunction closeSideMenu() {\n\tvar $menu = $('#si-side-menu');\n\tvar $container = $('#si-side-menu-container');\n\n\t$container.removeClass('menu-open');\n\t$menu.removeClass('menu-open');\n\t// unpause the video when you close the side menu\n\tvar type = slides[globalVar.curSlide].type;\n\tif (slides[globalVar.curSlide].videoLoaded && type == 'video') {\n\t\tif (videojs(globalVar.$curSlide.find('video')[0].id).paused()) {\n\t\t\tvideojs(globalVar.$curSlide.find('video')[0].id).play();\n\t\t}\n\t}\n}\n\n/**\n *\n */\nfunction handleSideButtons() {\n\tvar buttons = $('.si-menu-navigation').find('button');\n\tvar checks = $('.si-menu-checks__js');\n\n\tlock($(buttons));\n\tunlock($(buttons[0]));\n\tbuttons.each(function (idx, button) {\n\t\tif (slideCompletion[chapterCompletionSlides[idx]]) {\n\t\t\t$(checks[idx]).addClass('completed');\n\t\t\tif (buttons[idx + 1]) {\n\t\t\t\tunlock($(buttons[idx + 1]));\n\t\t\t}\n\t\t}\n\t});\n}\n","var curChapter;\nvar slideCompletion = {};\nvar bookmarkedSlide;\nvar chartProgressRecorded = {};\n$(document).ready(function () {\n\tif (globalVar.scormSettings.useScorm) {\n\t\tinitCourse();\n\t}\n\tdocumentSetup();\n\tchartProgress();\n\tif (!globalVar.devMode && (lmsConnected || useLocal)) {\n\t\tjumpToSlide(bookmarkedSlide);\n\t}\n\t// Elements to inject\n\tvar mySVGsToInject = document.querySelectorAll('img.inject-me');\n\t// Do the injection. keep last!!!\n\tSVGInjector(mySVGsToInject);\n});\n\n/**\n *\n */\nfunction firstTimeSetup() {\n\t//first and only execution of code, when the course starts first time gives all slides a number and sets defaults for user attempts and trys\n\tvar keys = Object.keys(slides);\n\tkeys.forEach(function (key, idx) {\n\t\tvar type = slides[key].type;\n\n\t\t// give slidenumber used for bookmarking\n\t\tif (slides[key].slideNumber === undefined) {\n\t\t\tslides[key].slideNumber = idx + 1;\n\t\t}\n\t\t// set user attempts and trys if not defined\n\t\tif (slides[key][type] !== undefined) {\n\t\t\tif (slides[key][type].userAttempts === undefined) {\n\t\t\t\tslides[key][type].userAttempts = 0;\n\t\t\t}\n\t\t\tif (slides[key][type].trys === undefined) {\n\t\t\t\tslides[key][type].trys = 0;\n\t\t\t}\n\t\t} else {\n\t\t\tslides[key][type] = {\n\t\t\t\tuserAttempts: 0,\n\t\t\t\ttrys: 0\n\t\t\t};\n\t\t}\n\n\t\t// Create the object sent to the LMS to persist slide completion\n\t\t// set include to false on a slide in order to exclude it from the course progression\n\t\tif (slides[key].include === undefined) {\n\t\t\tslides[key].include = true;\n\t\t}\n\n\t\tif (slides[key].include && !slideCompletion[key]) {\n\t\t\tslideCompletion[key] = 0;\n\t\t}\n\t});\n}\n\n/**\n *\n */\nfunction documentSetup() {\n\tinitPreloader();\n\tglobalVar.curSlide = $('section' + '.present')[0].id;\n\tfirstTimeSetup();\n\tinitAudio();\n\t$('aside').remove();\n\tinitNavigation();\n\tinitSideMenu();\n\n\tfor (key in slides) {\n\t\tif (slides[key].type == 'video') {\n\t\t\tglobalVar.videoSeen[key] = false;\n\t\t}\n\t}\n\tif (globalVar.devMode) {\n\t\tdevMode();\n\t}\n\n\tif ($('#si-progress-meter').length != 0) {\n\t\tchartInitiate();\n\t}\n\tinitFeedbacks();\n\tinitQuiz();\n\tinitMenu();\n\tfunctionCalls();\n\trandomizeQuestionSlides();\n\n\tReveal.addEventListener('slidechanged', function (e) {\n\t\t$('#si-nav-container').removeClass('vjs-fade-out');\n\t\tglobalVar.curSlide = e.currentSlide.id;\n\t\tglobalVar.$curSlide = $(e.currentSlide);\n\n\t\tcloseSideMenu();\n\t\tif (slides[e.previousSlide.id] && typeof slides[e.previousSlide.id].onExitAction === 'function') {\n\t\t\tslides[e.previousSlide.id].onExitAction();\n\t\t}\n\t\tfunctionCalls();\n\t});\n\n\t//set font sizes\n\tvar fontSize = $('.slides').width() / globalVar.fontSizeFactor;\n\t$('html').css('font-size', fontSize);\n\n\t$(window).resize(function () {\n\t\tsetTimeout(function () {\n\t\t\tvar fontSize = $('.slides').width() / globalVar.fontSizeFactor;\n\t\t\t$('html').css('font-size', fontSize);\n\t\t}, 1);\n\t});\n\n\t$('img').on('dragstart', function (event) {\n\t\tevent.preventDefault();\n\t});\n}\n\n/**\n *\n */\nfunction actionsOnEverySlideEnter() {\n\t//whatever you want to execute on every slide change\n}\n\n//execute whatever is inside onEnterAction, sets visited to true\n/**\n * @param id\n */\nfunction onEnterAction(id) {\n\tif (slides[id].visited === undefined) {\n\t\tslides[id].visited = false;\n\t}\n\n\t$(document.activeElement).blur();\n\tif (slides[id].type === 'video') {\n\t\tvar $download = $('#si-transcript');\n\t\tvar paths = {\n\t\t\t0: './media/imgs/demo/transcript1.pdf'\n\t\t};\n\n\t\tswitch (id) {\n\t\t\tcase 'V1':\n\t\t\t\t$download.attr('href', paths[0]);\n\t\t\t\tbreak;\n\t\t\tcase 'V2':\n\t\t\t\t$download.attr('href', paths[0]);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t}\n\tif (siAudio[id] && siAudio[id].onEnter) {\n\t\tif (siAudio.sfx.click.playing()) {\n\t\t\tsiAudio.sfx.click.once('end', function () {\n\t\t\t\tHowler.stop();\n\t\t\t\tsiAudio[id].onEnter.play();\n\t\t\t});\n\t\t} else {\n\t\t\tHowler.stop();\n\t\t\tsiAudio[id].onEnter.play();\n\t\t}\n\t} else {\n\t\tif (siAudio.sfx.click.playing()) {\n\t\t\tsiAudio.sfx.click.once('end', function () {\n\t\t\t\tHowler.stop();\n\t\t\t});\n\t\t} else {\n\t\t\tHowler.stop();\n\t\t}\n\t}\n\n\tsetTimeout(function () {\n\t\tif (slides[id].onEnterAction !== undefined) {\n\t\t\tslides[id].onEnterAction();\n\t\t}\n\t\tslides[id].visited = true;\n\t}, 10);\n\tif (lmsConnected && id !== 'Start') {\n\t\tsetTimeout(function () {\n\t\t\tsaveLMS();\n\t\t}, 1000);\n\t}\n\tif (useLocal && id !== 'Start') {\n\t\tsaveProgressLocally();\n\t}\n}\n\n//Order of calling the functions to generate the current slide\n/**\n *\n */\nfunction functionCalls() {\n\t$('body').off();\n\tglobalVar.$curSlide = $('.slides > section.present');\n\tglobalVar.curSlide = $('.slides > .present')[0].id;\n\n\tonEnterAction(globalVar.curSlide);\n\tactionsOnEverySlideEnter();\n\tshowNavElements();\n\telementsFadingOnSlide();\n\n\tswitch (slides[globalVar.curSlide].type) {\n\t\tcase 'menu':\n\t\t\tmenuFunctions();\n\t\t\tbreak;\n\t\tcase 'dnd':\n\t\t\tdndFunctions();\n\t\t\tbreak;\n\t\tcase 'sort':\n\t\t\tsortFunctions();\n\t\t\tbreak;\n\t\tcase 'hotspot':\n\t\t\thotspotFunctions();\n\t\t\tbreak;\n\t\tcase 'form':\n\t\t\tformFunctions();\n\t\t\tbreak;\n\t\tcase 'quiz':\n\t\t\tquizFunction();\n\t\t\tbreak;\n\t\tcase 'video':\n\t\t\tvideoCheck();\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tbreak;\n\t}\n\n\tif ($('#si-progress-meter').length != 0) {\n\t\tchartProgress();\n\t}\n\n\t// IE9 Bugfix\n\tsetTimeout(function () {\n\t\t$('section.future').css('display', 'none');\n\t\t$('section.past').css('display', 'none');\n\t}, 55);\n}\n\n////////////*Feature: Question Check ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\n// This function contains the main logic in determining if a question is right or wrong\n// It determines the question type, runs the logic for that type and returns a boolean\n// This boolean, called bol, is fed as an argument to FBCheck(bol) which is responsible for handling feedback responses\n\n// To add unique logic for a custom type, extend the main switch statement, assign true or false to bol, then 'break'\n/**\n * @param type\n */\nfunction checkQuestion(type) {\n\tvar bol = true;\n\tvar bol2;\n\tswitch (type) {\n\t\tcase 'quiz':\n\t\t\tvar correctAnswers = slides[globalVar.curSlide].quiz.answers;\n\t\t\tvar selectedAnswers = {};\n\t\t\tvar choices = $('#' + globalVar.curSlide + ' .si-quiz-answer');\n\t\t\tchoices.each(function (idx, choice) {\n\t\t\t\tvar id = $(choice).attr('id');\n\t\t\t\tif ($(choice).hasClass('si-quiz-selected')) {\n\t\t\t\t\tselectedAnswers[id] = 1;\n\t\t\t\t} else {\n\t\t\t\t\tselectedAnswers[id] = 0;\n\t\t\t\t}\n\t\t\t\tif (!correctAnswers[id]) {\n\t\t\t\t\tcorrectAnswers[id] = 0;\n\t\t\t\t}\n\t\t\t});\n\t\t\tfor (answer in selectedAnswers) {\n\t\t\t\tif (correctAnswers[answer] !== selectedAnswers[answer]) {\n\t\t\t\t\tbol = false;\n\t\t\t\t\treturn bol;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!bol) {\n\t\t\t\treturn bol;\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 'hotspot':\n\t\t\tvar quiz = slides[globalVar.curSlide].hotspot.quiz;\n\t\t\tif (!quiz) throw '\\nHotspot Error:\\nyou have to turn on the \"quiz\" settings to use hotspots this way';\n\t\t\tif (!quiz.answers.length) throw '\\nHotspot Error:\\nquiz answers must be in an array';\n\t\t\tif (quiz.type === 'scq' && quiz.answers.length > 1)\n\t\t\t\tthrow '\\nHotspot Error:\\nfor type \"scq\" you must have only one answer';\n\t\t\tvar correctAnswers = quiz.answers;\n\t\t\tvar selectedAnswers = quiz.selectedAnswers;\n\t\t\tbol = JSON.stringify(selectedAnswers) === JSON.stringify(correctAnswers);\n\t\t\tbreak;\n\t\tcase 'form':\n\t\t\tbol = checkForm();\n\t\t\tif (!bol) return;\n\t\t\tbreak;\n\t\tcase 'dnd':\n\t\t\tvar userAnswers = globalVar.dndAnswers;\n\t\t\tfor (key in slides[globalVar.curSlide].dnd.quiz) {\n\t\t\t\tvar correctAnswer = slides[globalVar.curSlide].dnd.quiz[key].sort();\n\t\t\t\tvar userAnswer = userAnswers[key].sort();\n\t\t\t\tif (slides[globalVar.curSlide].dnd.multipleAnswers) {\n\t\t\t\t\tvar included = true;\n\t\t\t\t\tif (userAnswer.length === 0) {\n\t\t\t\t\t\tincluded = false;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (correctAnswer.indexOf(userAnswer[0]) < 0) {\n\t\t\t\t\t\t\tincluded = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!included) {\n\t\t\t\t\t\tbol = false;\n\t\t\t\t\t\treturn bol;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (correctAnswer.length !== userAnswer.length) {\n\t\t\t\t\t\tbol = false;\n\t\t\t\t\t\treturn bol;\n\t\t\t\t\t}\n\n\t\t\t\t\tcorrectAnswer.forEach(function (answer, idx) {\n\t\t\t\t\t\tif (userAnswer[idx] !== answer) {\n\t\t\t\t\t\t\tbol = false;\n\t\t\t\t\t\t\treturn bol;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif (bol === false) {\n\t\t\t\t\treturn bol;\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 'sort':\n\t\t\tbol = true;\n\t\t\tvar listArray = Object.keys(slides[globalVar.curSlide][type].sortables);\n\t\t\tvar answerArray = [];\n\t\t\tlistArray.forEach(function (list) {\n\t\t\t\tanswerArray.push(slides[globalVar.curSlide][type].sortables[list].answer);\n\t\t\t});\n\n\t\t\t// check that answers have been provided for all sortable lists before proceeding\n\t\t\tif (listArray.length !== answerArray.length) {\n\t\t\t\tbol = false;\n\t\t\t\treturn bol;\n\t\t\t}\n\n\t\t\tlistArray.forEach(function (listId, idx) {\n\t\t\t\tvar possibleAnswer = $('#' + listId).sortable('toArray');\n\n\t\t\t\t// Incorrect if the amount of items in the checked sortable does not match the amount of answers provided in the answer key\n\t\t\t\tif (possibleAnswer.length !== answerArray[idx].length) {\n\t\t\t\t\tbol = false;\n\t\t\t\t\treturn bol;\n\t\t\t\t}\n\n\t\t\t\t// Excutes if unordered key is set to false or if key is absent\n\t\t\t\t// This branch is only correct if the submitted answer matches the answer key in both content AND order\n\t\t\t\tif (\n\t\t\t\t\tslides[globalVar.curSlide][type].unordered === false ||\n\t\t\t\t\tslides[globalVar.curSlide][type].unordered === undefined\n\t\t\t\t) {\n\t\t\t\t\tpossibleAnswer.forEach(function (answer, idx2) {\n\t\t\t\t\t\tif (answer !== answerArray[idx][idx2]) {\n\t\t\t\t\t\t\tbol = false;\n\t\t\t\t\t\t\treturn bol;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\t// Executes if unordered key is set to true.\n\t\t\t\t\t// This branch is correct if the submitted answer matches the answer key in content only. Order is irrelevant\n\t\t\t\t} else {\n\t\t\t\t\tpossibleAnswer.forEach(function (answer) {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t!answerArray[idx].some(function (el) {\n\t\t\t\t\t\t\t\treturn el === answer;\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tbol = false;\n\t\t\t\t\t\t\treturn bol;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tbol = false;\n\t\t\tbreak;\n\t} //end switch\n\treturn bol;\n} //checkQuestion\n//////////*Feature:Shuffled Slides/////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\n/**\n * @param part\n */\nfunction jumpToShuffledSlide(part) {\n\tvar n = globalVar.shuffledSlides[part].pointer;\n\tif (n < globalVar.shuffledSlides[part].slides.length) {\n\t\tif (n == null) {\n\t\t\t//first time call\n\t\t\tn = 0;\n\t\t}\n\t\tjumpToSlide(globalVar.shuffledSlides[part].slides[n]);\n\t\tn++;\n\t\tglobalVar.shuffledSlides[part].pointer = n;\n\t}\n}\n\n/**\n * @param part\n */\nfunction resetShuffledSlide(part) {\n\tglobalVar.shuffledSlides[part].pointer = null;\n}\n\n/////////*Feature:Randomize Questions//////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\n/**\n *\n */\nfunction randomizeQuestionSlides() {\n\tif (globalVar.randomizeSlides.useRandomize == true) {\n\t\tvar x = globalVar.randomizeSlides.slides;\n\t\tvar n = [];\n\t\tif (Object.keys(x) != 0) {\n\t\t\tfor (key in x) {\n\t\t\t\tn = [];\n\t\t\t\tif (x[key][0] < x[key][1]) {\n\t\t\t\t\t//1st value must be less than 2nd\n\t\t\t\t\tfor (var i = x[key][0]; i <= x[key][1]; i++) {\n\t\t\t\t\t\tn.push(i);\n\t\t\t\t\t}\n\t\t\t\t\tshuffle(n);\n\t\t\t\t\tn.push(x[key][2]);\n\t\t\t\t\tglobalVar.shuffledSlides[key] = {\n\t\t\t\t\t\tslides: n,\n\t\t\t\t\t\tpointer: null\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n////////////*Feature:Fading///////////////////////////////////////////////////////////////////////////////////////////////////////////\n\n/**\n *\n */\nfunction elementsFadingOnSlide() {\n\tif ($('#' + globalVar.curSlide + ' [data-fadeInOrder]').length != 0) {\n\t\tvar ary = [];\n\t\t$('#' + globalVar.curSlide + ' [data-fadeInOrder]').each(function () {\n\t\t\t$(this).css('opacity', '0');\n\t\t\t$(this).css('display', 'none');\n\t\t\t$(this).hide();\n\t\t\tvar temp = [];\n\t\t\tvar str = $(this).data('fadeinorder');\n\t\t\ttemp[0] = str;\n\t\t\ttemp[1] = $(this)[0];\n\t\t\tary.push(temp);\n\t\t});\n\t\tary.sort(sortArrayMatrixFunction);\n\t\tfor (var i = 0; i < ary.length; i++) {\n\t\t\telementsFadeIn(ary[i][1], ary[i][0]);\n\t\t}\n\t}\n\n\tif ($('#' + globalVar.curSlide + ' [data-fadeoutorder]').length != 0) {\n\t\tvar ary = [];\n\t\t$('#' + globalVar.curSlide + ' [data-fadeoutorder]').each(function () {\n\t\t\t$(this).css('opacity', '1');\n\t\t\t$(this).css('display', 'block');\n\t\t\t$(this).show();\n\t\t\tvar temp = [];\n\t\t\tvar str = $(this).data('fadeoutorder');\n\t\t\ttemp[0] = str;\n\t\t\ttemp[1] = $(this)[0];\n\t\t\tary.push(temp);\n\t\t});\n\t\tary.sort(sortArrayMatrixFunction);\n\t\tfor (var i = 0; i < ary.length; i++) {\n\t\t\telementsFadeOut(ary[i][1], ary[i][0]);\n\t\t}\n\t}\n}\n\n/**\n * @param el\n * @param x\n */\nfunction elementsFadeIn(el, x) {\n\tsetTimeout(function () {\n\t\t$(el).fadeTo('fast', 1);\n\t}, x);\n}\n\n/**\n * @param el\n * @param x\n */\nfunction elementsFadeOut(el, x) {\n\tsetTimeout(function () {\n\t\t$(el).fadeTo('fast', 0);\n\t}, x);\n}\n\n// ary.sort(sortArrayMatrixFunction); must be ary=[[4,xx],[2,xx],[1,xx]]\n/**\n * @param a\n * @param b\n */\nfunction sortArrayMatrixFunction(a, b) {\n\tif (a[0] === b[0]) {\n\t\treturn 0;\n\t} else {\n\t\treturn a[0] < b[0] ? -1 : 1;\n\t}\n}\n\n////////////*Feature:Miscellaneous///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\n//shuffle an array, returns shuffled array\n// used in slide randomizer and mcq/scq randomizer\n/**\n * @param array\n */\nfunction shuffle(array) {\n\tvar currentIndex = array.length,\n\t\ttemporaryValue,\n\t\trandomIndex;\n\t// While there remain elements to shuffle...\n\twhile (0 !== currentIndex) {\n\t\t// Pick a remaining element...\n\t\trandomIndex = Math.floor(Math.random() * currentIndex);\n\t\tcurrentIndex -= 1;\n\t\t// And swap it with the current element.\n\t\ttemporaryValue = array[currentIndex];\n\t\tarray[currentIndex] = array[randomIndex];\n\t\tarray[randomIndex] = temporaryValue;\n\t}\n\treturn array;\n}\n\n//adds equals/checks to see if arrays equal each other\nArray.prototype.equals = function (array) {\n\t// if the other array is a falsy value, return\n\tif (!array) return false;\n\n\t// compare lengths - can save a lot of time\n\tif (this.length != array.length) return false;\n\n\tfor (var i = 0, l = this.length; i < l; i++) {\n\t\t// Check if we have nested arrays\n\t\tif (this[i] instanceof Array && array[i] instanceof Array) {\n\t\t\t// recurse into the nested arrays\n\t\t\tif (!this[i].equals(array[i])) return false;\n\t\t} else if (this[i] != array[i]) {\n\t\t\t// Warning - two different object instances will never be equal: {x:20} != {x:20}\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n};\n// Hide method from for-in loops\nObject.defineProperty(Array.prototype, 'equals', {\n\tenumerable: false\n});\n","function initNavigation() {\n\tvar swapStyles = $('.si-nav-style__js');\n\tvar swapImages = $('.si-img-swap__js');\n\tvar buttonType = globalVar.buttonType;\n\n\t// swap all style related images\n\tswapImages.each(function (idx, image) {\n\t\t$(image).attr('src', function (index, attr) {\n\t\t\treturn attr.replace('classic', buttonType);\n\t\t});\n\t});\n\tswapStyles.each(function (idx, nav) {\n\t\t$(nav).addClass('si-nav-style-' + buttonType);\n\t});\n\n\tattachNavEventListeners();\n}\n\nfunction showNavElements() {\n\tvar navButtons = $('.si-nav__js');\n\tvar iconClasses = 'si-click-icon si-drag-up-icon si-drag-down-icon si-drag-left-icon si-drag-right-icon';\n\tvar $click = $('#si-click-icon');\n\t$(navButtons).hide();\n\t$click.removeClass(iconClasses);\n\n\tif (slides[globalVar.curSlide].navElements === undefined) {\n\t\tslides[globalVar.curSlide].navElements = [];\n\t}\n\n\tvar navigation = slides[globalVar.curSlide].navElements;\n\tnavigation.forEach(function (nav) {\n\t\tswitch (nav) {\n\t\t\tcase 'start-slide':\n\t\t\t\t$('#si-clock').show();\n\t\t\t\t$('#si-start').show();\n\t\t\t\tbreak;\n\t\t\tcase 'standard-home':\n\t\t\t\t$('#si-logo').show();\n\t\t\t\t$('#si-progress').show();\n\t\t\t\t$('#si-home').show();\n\t\t\t\t$('#si-back').show();\n\t\t\t\tif (slideCompletion[globalVar.curSlide]) {\n\t\t\t\t\t$('#si-next').show();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'standard-menu':\n\t\t\t\t$('#si-logo').show();\n\t\t\t\t$('#si-progress').show();\n\t\t\t\t$('#si-menu').show();\n\t\t\t\t$('#si-back').show();\n\t\t\t\tif (slideCompletion[globalVar.curSlide]) {\n\t\t\t\t\t$('#si-next').show();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'exit-slide':\n\t\t\t\t$('#si-progress').show();\n\t\t\t\t$('#si-exit').show();\n\t\t\t\t$('#si-replay').show();\n\t\t\t\tbreak;\n\t\t\tcase 'click-icon':\n\t\t\t\t$click\n\t\t\t\t\t.show()\n\t\t\t\t\t.removeClass(iconClasses)\n\t\t\t\t\t.addClass('si-' + nav);\n\t\t\t\thideClickIcon();\n\t\t\t\tbreak;\n\t\t\tcase 'drag-up-icon':\n\t\t\t\t$click\n\t\t\t\t\t.show()\n\t\t\t\t\t.removeClass(iconClasses)\n\t\t\t\t\t.addClass('si-' + nav);\n\t\t\t\thideClickIcon();\n\t\t\t\tbreak;\n\t\t\tcase 'drag-down-icon':\n\t\t\t\t$click\n\t\t\t\t\t.show()\n\t\t\t\t\t.removeClass(iconClasses)\n\t\t\t\t\t.addClass('si-' + nav);\n\t\t\t\thideClickIcon();\n\t\t\t\tbreak;\n\t\t\tcase 'drag-left-icon':\n\t\t\t\t$click\n\t\t\t\t\t.show()\n\t\t\t\t\t.removeClass(iconClasses)\n\t\t\t\t\t.addClass('si-' + nav);\n\t\t\t\thideClickIcon();\n\t\t\t\tbreak;\n\t\t\tcase 'drag-right-icon':\n\t\t\t\t$click\n\t\t\t\t\t.show()\n\t\t\t\t\t.removeClass(iconClasses)\n\t\t\t\t\t.addClass('si-' + nav);\n\t\t\t\thideClickIcon();\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tif (nav[0] === '!') $('#si-' + nav.split('!')[1]).hide();\n\t\t\t\telse $('#si-' + nav).show();\n\t\t\t\tbreak;\n\t\t}\n\t});\n}\n\nfunction attachNavEventListeners() {\n\t$('#si-home').on('click touch', function () {\n\t\tsiAudio.sfx.click.play();\n\t\tjumpToSlide(globalVar.homeSlide);\n\t});\n\n\t$('#si-menu').on('click touch', function () {\n\t\tsiAudio.sfx.click.play();\n\t\topenSideMenu();\n\t});\n\n\t$('#si-full').on('click touch', function () {\n\t\tsiAudio.sfx.click.play();\n\t\ttoggleFullscreen();\n\t});\n\n\t$('#si-back').on('click touch', function () {\n\t\tsiAudio.sfx.click.play();\n\t\tsetTimeout(function () {\n\t\t\tif (slides[globalVar.curSlide].backAction) {\n\t\t\t\tslides[globalVar.curSlide].backAction();\n\t\t\t} else {\n\t\t\t\tprevSlide();\n\t\t\t}\n\t\t}, 100);\n\t});\n\n\t$('#si-next').on('click touch', function () {\n\t\tsiAudio.sfx.click.play();\n\t\tsetTimeout(function () {\n\t\t\tif (slides[globalVar.curSlide].nextAction) {\n\t\t\t\tslides[globalVar.curSlide].nextAction();\n\t\t\t} else {\n\t\t\t\tnextSlide();\n\t\t\t}\n\t\t}, 100);\n\t});\n\n\t$('#si-replay').on('click touch', function () {\n\t\tsiAudio.sfx.click.play();\n\t\tjumpToSlide(0);\n\t});\n\n\t$('#si-exit').on('click touch', function () {\n\t\tsiAudio.sfx.click.play();\n\t\twindow.close();\n\t});\n\n\t$('#si-start').on('click touch', function () {\n\t\tsiAudio.sfx.click.play();\n\t\tif (slides[globalVar.curSlide].nextAction) {\n\t\t\tslides[globalVar.curSlide].nextAction();\n\t\t} else {\n\t\t\tnextSlide();\n\t\t}\n\t});\n\n\t$('#si-submit').on('click touch', function () {\n\t\tvar thisSlide = slides[globalVar.curSlide];\n\t\tif (thisSlide.type === 'form' && !validForm()) return;\n\n\t\tsiAudio.sfx.click.play();\n\t\tvar bol = checkQuestion(thisSlide.type);\n\t\thandleAnswer(bol);\n\t});\n\n\t$('#si-reset').on('click touch', function () {\n\t\tsiAudio.sfx.click.play();\n\t\tswitch (slides[globalVar.curSlide].type) {\n\t\t\tcase 'dnd':\n\t\t\t\tvar dndArgs = dndResetObject[globalVar.curSlide];\n\t\t\t\tresetDnD(dndArgs.time, dndArgs.answers);\n\t\t\t\tbreak;\n\t\t\tcase 'sort':\n\t\t\t\tresetSort();\n\t\t\t\tbreak;\n\t\t\tcase 'quiz':\n\t\t\t\tresetQuiz();\n\t\t\t\tbreak;\n\t\t\tcase 'hotspot':\n\t\t\t\tresetHotspot();\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tif (slides[globalVar.curSlide].customReset) {\n\t\t\t\t\tslides[globalVar.curSlide].customReset();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t});\n\t$('#si-custom-submit').on('click touch', function () {\n\t\tvar thisSlide = slides[globalVar.curSlide];\n\t\tif (thisSlide.type === 'form' && !validForm()) return;\n\n\t\tsiAudio.sfx.click.play();\n\t\tif (slides[globalVar.curSlide].customSubmit) {\n\t\t\tslides[globalVar.curSlide].customSubmit();\n\t\t}\n\t});\n\n\t$('.si-menu-closer').on('click touch', function () {\n\t\tcloseSideMenu();\n\t});\n\n\t$('#handlebars-button1').on('click touch', function () {\n\t\tsiAudio.sfx.click.play();\n\t\tjumpToSlide(4);\n\t\t$('.modal-close').trigger('click');\n\t});\n\n\t$('#handlebars-button2').on('click touch', function () {\n\t\tsiAudio.sfx.click.play();\n\t\tjumpToSlide(5);\n\t\t$('.modal-close').trigger('click');\n\t});\n\n\t$('#front-wheel-button1').on('click touch', function () {\n\t\tsiAudio.sfx.click.play();\n\t\tjumpToSlide(6);\n\t\t$('.modal-close').trigger('click');\n\t});\n\n\t$('#front-wheel-button2').on('click touch', function () {\n\t\tsiAudio.sfx.click.play();\n\t\tjumpToSlide(7);\n\t\t$('.modal-close').trigger('click');\n\t});\n\n\t$('#bike-button3').on('click touch', function () {\n\t\tsiAudio.sfx.click.play();\n\t\tjumpToSlide(8);\n\t});\n\n\t$('#seat-button1').on('click touch', function () {\n\t\tsiAudio.sfx.click.play();\n\t\tjumpToSlide(9);\n\t\t$('.modal-close').trigger('click');\n\t});\n\n\t$('#seat-button2').on('click touch', function () {\n\t\tsiAudio.sfx.click.play();\n\t\tjumpToSlide(10);\n\t\t$('.modal-close').trigger('click');\n\t});\n\n\t$('#bike-button5').on('click touch', function () {\n\t\tsiAudio.sfx.click.play();\n\t\tjumpToSlide(11);\n\t});\n\n\t$('#bike-button6').on('click touch', function () {\n\t\tsiAudio.sfx.click.play();\n\t\tjumpToSlide(12);\n\t});\n\n\t$('#bike-button7').on('click touch', function () {\n\t\tsiAudio.sfx.click.play();\n\t\tjumpToSlide(13);\n\t});\n\n\t$('#handlebars-button1').on('click touch', function () {\n\t\t$(this).addClass('handlebars-clicked').addClass('show-brakes-cable');\n\t\t// stopAll();\n\t});\n\n\t$('#handlebars-button2').on('click touch', function () {\n\t\t$(this).addClass('handlebars-clicked').addClass('show-brakes-cable');\n\t\t// stopAll();\n\t});\n\n\t$('#front-wheel-button1').on('click touch', function () {\n\t\t$(this).addClass('front-wheel-clicked');\n\t\t// stopAll();\n\t});\n\n\t$('#front-wheel-button2').on('click touch', function () {\n\t\t$(this).addClass('front-wheel-clicked');\n\t\t// stopAll();\n\t});\n\n\t$('#seat-button1').on('click touch', function () {\n\t\t$(this).addClass('seat-clicked');\n\t\t// stopAll();\n\t});\n\n\t$('#seat-button2').on('click touch', function () {\n\t\t$(this).addClass('seat-clicked');\n\t\t// stopAll();\n\t});\n\n\t$('#handlebars-start img').on('click touch', function () {\n\t\t$('.button1').trigger('click');\n\t});\n\n\t$('#front-wheel-start img').on('click touch', function () {\n\t\t$('#bike-button2').trigger('click');\n\t});\n\n\t$('#training-wheels-start img').on('click touch', function () {\n\t\t$('#bike-button3').trigger('click');\n\t});\n\n\t$('#seat-start img').on('click touch', function () {\n\t\t$('#bike-button4').trigger('click');\n\t});\n\n\t$('#pedals-start img').on('click touch', function () {\n\t\t$('#bike-button5').trigger('click');\n\t});\n\n\t$('#brakes-start img').on('click touch', function () {\n\t\t$('#bike-button6').trigger('click');\n\t});\n\n\t$('.button7-background img').on('click touch', function () {\n\t\t$('#bike-button7').trigger('click');\n\t});\n\n\t$('#bike-button1').hover(function () {\n\t\t$('.button1-background-red').fadeToggle();\n\t});\n\n\t$('#bike-button2').hover(function () {\n\t\t$('.button2-background-red').fadeToggle();\n\t});\n\n\t$('#bike-button3').hover(function () {\n\t\t$('.button3-background-red').fadeToggle();\n\t});\n\n\t$('#bike-button4').hover(function () {\n\t\t$('.button4-background-red').fadeToggle();\n\t});\n\n\t$('#bike-button5').hover(function () {\n\t\t$('.button5-background-red').fadeToggle();\n\t});\n\n\t$('#bike-button6').hover(function () {\n\t\t$('.button6-background-red').fadeToggle();\n\t});\n\n\t$('#bike-button7').hover(function () {\n\t\t$('.button7-background-red').fadeToggle();\n\t});\n}\n\n// var menuSound = new Audio('media/audio/pacific-cycle/menu.mp3');\n// var handlebarsSound = new Audio('media/audio/pacific-cycle/handlebars-submenu.mp3');\n// var frontWheelSound = new Audio('media/audio/pacific-cycle/front-wheel-submenu.mp3');\n// var seatSound = new Audio('media/audio/pacific-cycle/seat-submenu.mp3');\n\n// $('#bike-button1').on('click touch', function () {\n// \tstopAll('handlebars');\n// \t// handlebarsSound.play();\n// });\n\n// $('#bike-button2').on('click touch', function () {\n// \tstopAll('frontWheel');\n// \t// frontWheelSound.play();\n// });\n\n// $('#bike-button4').on('click touch', function () {\n// \tstopAll('seat');\n// \t// seatSound.play();\n// });\n\n// $('.modal-close').on('click touch', function () {\n// \tstopAll();\n// });\n\n// $('.hotspot-modal-blocker').on('click touch', function () {\n// \tstopAll();\n// });\n\n// function stopAll(section) {\n// \tif (section === 'handlebars') {\n// \t\t// menuSound.pause();\n// \t\t// menuSound.currentTime = 0;\n// \t\t// frontWheelSound.pause();\n// \t\t// frontWheelSound.currentTime = 0;\n// \t\t// seatSound.pause();\n// \t\t// seatSound.currentTime = 0;\n// \t} else if (section === 'seat') {\n// \t\t// menuSound.pause();\n// \t\t// menuSound.currentTime = 0;\n// \t\t// frontWheelSound.pause();\n// \t\t// frontWheelSound.currentTime = 0;\n// \t\t// handlebarsSound.pause();\n// \t\t// handlebarsSound.currentTime = 0;\n// \t} else if (section === 'frontWheel') {\n// \t\t// menuSound.pause();\n// \t\t// menuSound.currentTime = 0;\n// \t\t// seatSound.pause();\n// \t\t// seatSound.currentTime = 0;\n// \t\t// handlebarsSound.pause();\n// \t\t// handlebarsSound.currentTime = 0;\n// \t} else {\n// \t\t// menuSound.pause();\n// \t\t// menuSound.currentTime = 0;\n// \t\t// seatSound.pause();\n// \t\t// seatSound.currentTime = 0;\n// \t\t// handlebarsSound.pause();\n// \t\t// handlebarsSound.currentTime = 0;\n// \t\t// frontWheelSound.pause();\n// \t\t// frontWheelSound.currentTime = 0;\n// \t}\n// }\n\n// function playMenuAudio() {\n// \tmenuSound.play();\n// }\n\nfunction hideClickIcon() {\n\t$('#' + globalVar.curSlide).off('mousedown.icon');\n\t$('#' + globalVar.curSlide).on('mousedown.icon', function () {\n\t\t$('#si-click-icon').hide();\n\t\t$('#' + globalVar.curSlide).off('mousedown.icon');\n\t});\n}\n\n// function used by fullscreen nav button\nfunction toggleFullscreen() {\n\tvar element = document.documentElement;\n\tvar fullscreen =\n\t\tdocument.fullscreenElement ||\n\t\tdocument.mozFullScreenElement ||\n\t\tdocument.msFullscreenElement ||\n\t\tdocument.webkitFullscreenElement;\n\tif (fullscreen) {\n\t\tvar requestMethod =\n\t\t\tdocument.exitFullscreen ||\n\t\t\tdocument.webkitExitFullscreen ||\n\t\t\tdocument.webkitExitFullScreen ||\n\t\t\tdocument.mozCancelFullScreen ||\n\t\t\tdocument.msExitFullscreen;\n\n\t\tif (requestMethod) {\n\t\t\trequestMethod.apply(document);\n\t\t}\n\t} else {\n\t\tvar requestMethod =\n\t\t\telement.requestFullscreen ||\n\t\t\telement.webkitRequestFullscreen ||\n\t\t\telement.webkitRequestFullScreen ||\n\t\t\telement.mozRequestFullScreen ||\n\t\t\telement.msRequestFullscreen;\n\n\t\tif (requestMethod) {\n\t\t\trequestMethod.apply(element);\n\t\t}\n\t}\n}\n\n// function infoKeyboard() {\n// var infoItems = $('.infoItem');\n// var idx = 0;\n// $('#Info_Closer').focus();\n\n// $('body').on('keydown.drag', function (event) {\n// switch (event.keyCode) {\n// case 9: //restricts tab movement to info overlay elements\n// event.preventDefault();\n// if (idx < infoItems.length - 1) {\n// idx += 1;\n// } else {\n// idx = 0;\n// }\n// $(infoItems[idx]).focus();\n// break;\n// case 27: // allows user to press escape key to return to normal\n// $('#Info_Closer').trigger('click');\n// break;\n// default:\n// return true;\n// }\n// });\n// }\n","var scorm = pipwerks.SCORM; //Shortcut\nvar lmsConnected = false;\nvar unloaded = false;\nvar useLocal = false;\nvar courseURL = btoa(window.location.href.toString());\nvar progressURL = 'progress' + courseURL;\nvar bookmarkURL = 'bookmark' + courseURL;\n\nfunction initCourse() {\n\tvar bookmarkLocal;\n\tvar localData;\n\tif (useLocal && storageAvailable('localStorage')) {\n\t\tbookmarkLocal = localStorage.getItem(bookmarkURL);\n\t\tlocalData = JSON.parse(localStorage.getItem(progressURL));\n\t}\n\t//scorm.init returns a boolean\n\tlmsConnected = scorm.init();\n\t//If the scorm.init function succeeded...\n\tif (lmsConnected) {\n\t\tsiLog('SCORM', 'INIT', 'SUCCESS: Course is now connected with the LMS!');\n\t\tvar completionstatus;\n\t\tvar learnername;\n\t\tvar rawData = scorm.get('cmi.suspend_data');\n\t\tvar bookmarkScorm;\n\t\tvar scormData;\n\t\tif (scorm.version === '2004') {\n\t\t\tcompletionstatus = scorm.get('cmi.completion_status');\n\t\t\tlearnername = scorm.get('cmi.learner_name');\n\t\t\tbookmarkScorm = scorm.get('cmi.location');\n\t\t} else {\n\t\t\tcompletionstatus = scorm.get('cmi.core.lesson_status');\n\t\t\tlearnername = scorm.get('cmi.core.student_name');\n\t\t\tbookmarkScorm = scorm.get('cmi.core.lesson_location');\n\t\t}\n\t\tif (rawData && typeof rawData === 'string') {\n\t\t\tscormData = JSON.parse(rawData);\n\t\t\tslideCompletion = scormData;\n\t\t} else if (localData) {\n\t\t\tslideCompletion = localData;\n\t\t}\n\n\t\tif (bookmarkScorm) {\n\t\t\tbookmarkedSlide = bookmarkScorm;\n\t\t} else if (bookmarkLocal) {\n\t\t\tbookmarkedSlide = bookmarkLocal;\n\t\t} else {\n\t\t\tbookmarkedSlide = 1;\n\t\t}\n\t\twindow.addEventListener('unload', unloadHandler);\n\t\twindow.addEventListener('beforeunload', unloadHandler);\n\t\t//If the course couldn't connect to the LMS for some reason...\n\t} else {\n\t\t//... let's alert the user then close the window.\n\t\tsiLog('SCORM', 'INIT', 'ERROR: Course could not connect with the LMS');\n\t\tif (localData) {\n\t\t\tslideCompletion = localData;\n\t\t}\n\t\tif (bookmarkLocal) {\n\t\t\tbookmarkedSlide = bookmarkLocal;\n\t\t} else {\n\t\t\tbookmarkedSlide = 1;\n\t\t}\n\t}\n}\n\nfunction setScormCompletion() {\n\t//If the lmsConnection is active...\n\tif (lmsConnected) {\n\t\tvar success;\n\t\t//... try setting the course status to \"completed\"\n\t\tif (scorm.version === '2004') {\n\t\t\tsuccess = scorm.set('cmi.completion_status', 'completed');\n\t\t\tscorm.set('cmi.success_status', 'passed');\n\t\t\tscorm.set('cmi.score.raw', '100');\n\t\t\tscorm.set('cmi.score.scaled', '1');\n\t\t\t// scorm.set(\"cmi.score.min\", globalVar.minScore);\n\t\t\t// scorm.set(\"cmi.score.max\", globalVar.maxScore);\n\t\t\t// scorm.set(\"adl.nav.request\", \"exit\")\n\t\t} else {\n\t\t\tsuccess = scorm.set('cmi.core.lesson_status', 'completed');\n\t\t\tscorm.set('cmi.core.score.raw', '100');\n\t\t\t// scorm.set(\"cmi.core.score.min\", globalVar.minScore);\n\t\t\t// scorm.set(\"cmi.core.score.max\", globalVar.maxScore);\n\t\t}\n\t\t//If the course was successfully set to \"completed\"...\n\t\tif (success) {\n\t\t\tscorm.save();\n\t\t\tsiLog('SCORM', 'COMPLETE', 'SUCCESS: Course was successfully set to complete!');\n\t\t\t//If the course couldn't be set to completed for some reason...\n\t\t} else {\n\t\t\t//alert the user\n\t\t\tsiLog('SCORM', 'COMPLETE', 'ERROR: Course could not be set to complete!');\n\t\t}\n\t\t//If the course isn't connected to the LMS for some reason...\n\t} else {\n\t\t//alert the user\n\t\tsiLog('SCORM', 'COMPLETE', 'ERROR: Course is not connected to the LMS');\n\t}\n}\n\nfunction unloadHandler() {\n\tif (lmsConnected && !unloaded) {\n\t\tsaveLMS();\n\t\tscorm.save(); //save all data that has already been sent\n\t\tscorm.quit(); //close the SCORM API connection properly\n\t\tunloaded = true;\n\t}\n}\nfunction saveLMS() {\n\tif (saveCourseProgress() && saveBookmark()) {\n\t\tscorm.save();\n\t} else {\n\t\tsiLog('SCORM', 'Failed to Save');\n\t}\n}\n\nfunction saveCourseProgress() {\n\tvar success;\n\tvar dataString = JSON.stringify(slideCompletion);\n\tif (lmsConnected) {\n\t\tsuccess = scorm.set('cmi.suspend_data', dataString);\n\t}\n\treturn success;\n}\nfunction saveBookmark() {\n\tvar success;\n\tbookmarkedSlide = slides[globalVar.curSlide].slideNumber || '0';\n\tif (lmsConnected) {\n\t\tif (scorm.version === '2004') {\n\t\t\tsuccess = scorm.set('cmi.location', bookmarkedSlide);\n\t\t} else {\n\t\t\tsuccess = scorm.set('cmi.core.lesson_location', bookmarkedSlide);\n\t\t}\n\t}\n\n\treturn success;\n}\n\nfunction saveProgressLocally() {\n\tbookmarkedSlide = slides[globalVar.curSlide].slideNumber || '0';\n\tvar dataString = JSON.stringify(slideCompletion);\n\tif (storageAvailable('localStorage')) {\n\t\tlocalStorage.setItem(progressURL, dataString);\n\t\tlocalStorage.setItem(bookmarkURL, bookmarkedSlide);\n\t}\n}\n\nfunction storageAvailable(type) {\n\tvar storage;\n\ttry {\n\t\tstorage = window[type];\n\t\tvar x = '__storage_test__';\n\t\tstorage.setItem(x, x);\n\t\tstorage.removeItem(x);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn (\n\t\t\te instanceof DOMException &&\n\t\t\t// everything except Firefox\n\t\t\t(e.code === 22 ||\n\t\t\t\t// Firefox\n\t\t\t\te.code === 1014 ||\n\t\t\t\t// test name field too, because code might not be present\n\t\t\t\t// everything except Firefox\n\t\t\t\te.name === 'QuotaExceededError' ||\n\t\t\t\t// Firefox\n\t\t\t\te.name === 'NS_ERROR_DOM_QUOTA_REACHED') &&\n\t\t\t// acknowledge QuotaExceededError only if there's something already stored\n\t\t\tstorage &&\n\t\t\tstorage.length !== 0\n\t\t);\n\t}\n}\n\n// Old Functions\n\n//////////////*Feature:LMS/////////////////////////////////////////////////////////////////////////////////////////////////////\n// function sendDataToLMS() {\n// \treturn correctAnswers; //add your additional variables here(string or variables, seperated by comma and only numbers are allowed)\n// }\n\n// function recieveDataFromLMS() {\n// \treturn 'correctAnswers'; //names of the variables that you send(see sendDatatoLMS)\n// }\n\n// function bookMarkingToLMS() {\n// \treturn (curChapter = slides[globalVar.curSlide].slideNumber);\n// }\n\n// function smar_sendDataToLMS() {\n// \tvar str = '';\n// \t//gets all chapter variables\n// \tfor (var i = 1; i <= chap_nums; i++) {\n// \t\tif (isNaN(window['C_Q' + i])) {\n// \t\t\twindow['C_Q' + i] = 0;\n// \t\t}\n\n// \t\tif (i < chap_nums) {\n// \t\t\tstr += window['C_Q' + i] + ',';\n// \t\t} else {\n// \t\t\tstr += window['C_Q' + i];\n// \t\t}\n// \t}\n\n// \tif (\n// \t\tsendDataToLMS()\n// \t\t.toString()\n// \t\t.indexOf(',') > 0\n// \t) {\n// \t\tvar tempAry = sendDataToLMS()\n// \t\t\t.toString()\n// \t\t\t.split(',');\n// \t} else {\n// \t\tvar tempAry = [];\n// \t\ttempAry[0] = sendDataToLMS().toString();\n// \t}\n// \tvar _str = '';\n// \tfor (var i = 0; i < tempAry.length; i++) {\n// \t\tif (isNaN(parseInt(tempAry[i]))) {\n// \t\t\ttempAry[i] = 0;\n// \t\t}\n// \t\tif (i < tempAry.length) {\n// \t\t\t_str += tempAry[i] + ',';\n// \t\t}\n// \t}\n// \tscorm.set('cmi.suspend_data', _str + str);\n\n// \tif (globalVar.scormSettings.bookmarking.useBookmarking && globalVar.scormSettings.useScorm) {\n// \t\tif (bookMarkingToLMS() !== undefined) {\n// \t\t\tif (scorm.version === '2004') {\n// \t\t\t\tscorm.set('cmi.location', bookMarkingToLMS());\n// \t\t\t} else {\n// \t\t\t\tscorm.set('cmi.core.lesson_location', bookMarkingToLMS());\n// \t\t\t}\n// \t\t} else {\n// \t\t\tif (scorm.version === '2004') {\n// \t\t\t\tscorm.set('cmi.location', '0');\n// \t\t\t} else {\n// \t\t\t\tscorm.set('cmi.core.lesson_location', '0');\n// \t\t\t}\n// \t\t}\n// \t}\n// }\n\n// function restoreDataToCourse() {\n// \tif (globalVar.scormSettings.useScorm) {\n// \t\tsetTimeout(function () {\n// \t\t\tif (scorm.get('cmi.suspend_data').length > 0) {\n// \t\t\t\tvar ary = scorm.get('cmi.suspend_data').split(',');\n// \t\t\t\tvar x = recieveDataFromLMS().split(',');\n// \t\t\t\tfor (var i = 0; i < x.length; i++) {\n// \t\t\t\t\twindow[x[i]] = parseInt(ary[i]);\n// \t\t\t\t}\n// \t\t\t\tvar n = 1;\n// \t\t\t\tfor (var i = x.length; i < ary.length; i++) {\n// \t\t\t\t\twindow['C_Q' + n] = parseInt(ary[i]);\n// \t\t\t\t\tn++;\n// \t\t\t\t}\n// \t\t\t\tsetTimeout(function () {\n// \t\t\t\t\tslides[globalVar.curSlide].onEnterAction();\n// \t\t\t\t}, 55);\n// \t\t\t}\n// \t\t}, 800);\n\n// \t\tsetTimeout(function () {\n// \t\t\tif (globalVar.scormSettings.bookmarking.useBookmarking && globalVar.scormSettings.useScorm) {\n// \t\t\t\tif (scorm.version === '2004') {\n// \t\t\t\t\twindow[globalVar.scormSettings.bookmarking.name] = scorm.get('cmi.location');\n// \t\t\t\t} else {\n// \t\t\t\t\twindow[globalVar.scormSettings.bookmarking.name] = scorm.get('cmi.core.lesson_location');\n// \t\t\t\t}\n// \t\t\t\tjumpToSlide(window[globalVar.scormSettings.bookmarking.name]);\n// \t\t\t}\n// \t\t}, 255);\n// \t}\n// }\n"]}