nInteractionsTotal=-1;bTerminated=false;nPageNumber=-1;qi=new Array();qAnswers=new Array();qChoices=new Array();qAttempts=new Array();dateStart=null;timeStart=null;bEmbedded=false;timerTest=null;timeLimitMS=0;bTimeLimitReached=false;_sSep1="\x5e";_sSep2="\x5f";function initCourse(){scormGetAPI();if(API!=null){scormInitialize();var sData=scormGetValue("cmi.suspend_data");if(scormGetLastError()=="0"){if(sData!=""){processScormData(sData);}else{setIndex();}}var sPage=scormGetValue("cmi.core.lesson_location");if(sPage=="")sPage=-1;sPage-=0;if(sPage<-1||sPage>questionsToShow)sPage=-1;gotoPage(sPage);}else{setIndex();gotoPage(-1);}}function quitCourse(){terminateCourse();if(typeof window.opener=="undefined"||window.opener!=null)window.close();}function terminateCourse(){if(!bTerminated){bTerminated=true;saveSession();scormTerminate();}}function timeCheck(){var dateNow=new Date();var nTime=dateNow.getTime()-timeStart;if(nTime>timeLimitMS){clearInterval(timerTest);bTimeLimitReached=true;showTimeoutAlert();}else{nTime=Math.round((timeLimitMS-nTime)/1000);if(nTime>60){var nMinutes=Math.floor(nTime/60);nTime=Math.floor(nTime-(nMinutes*60));if(nTime<10){nTime="0"+nTime;}nTime=nMinutes+":"+nTime;}document.getElementById("timeLimit").innerHTML=msgTime+nTime;}}function saveSession(){scormSetValue("cmi.core.session_time",getSessionTime());scormSetValue("cmi.core.lesson_location",nPageNumber+"");rVal=scormSetValue("cmi.suspend_data",getSuspendData());if(bTimeLimitReached){setScoreAndCompletion();}else{if(mustAnswerAll){var nComplete=getComplete();if(nComplete==questionsToShow){setScoreAndCompletion();}else{var sDisplay=msgMustAnswerAll.replace(/%%complete/g,nComplete);sDisplay=sDisplay.replace(/%%total/g,questionsToShow);alert(sDisplay);apiSetIncomplete();}}else{var nComplete=getComplete();if(nComplete==questionsToShow){setScoreAndCompletion();}else{var sDisplay=msgIncomplete.replace(/%%complete/g,nComplete);sDisplay=sDisplay.replace(/%%total/g,questionsToShow);if(confirm(sDisplay)){apiSetIncomplete();}else{setScoreAndCompletion();}}}}}function setScoreAndCompletion(){var nScore=getScore();scormSetValue("cmi.core.score.min","0");scormSetValue("cmi.core.score.max","100");scormSetValue("cmi.core.score.raw",nScore);scormSetValue("cmi.core.lesson_status",getPassed(nScore));scormSetValue("cmi.core.exit","");}function processScormData(sData){arrayAll=sData.split(_sSep1);qi=arrayAll[0].split(",");for(i=0;i<qi.length;i++)qi[i]-=0;if(questionsToShow<=0)questionsToShow=qi.length;qAnswers=arrayAll[1].split(_sSep2);qAttempts=arrayAll[2].split(",");for(i=0;i<qAttempts.length;i++)qAttempts[i]-=0;for(i=0;i<questionsToShow;i++)qChoices[i]="";if(arrayAll[3]!=""){aChoices=arrayAll[3].split(_sSep2);for(i=0;i<aChoices.length;i++){aParts=aChoices[i].split(":");nIndex=aParts[0]-0;qChoices[nIndex]=aParts[1];}}}function setIndex(){var nCount=0;var nError;i=0;do{if(q[i]=="true-false"||q[i]=="fill-in"){qi[nCount]=i;nCount++;i+=5;}else if(q[i]=="choice"){qi[nCount]=i;nCount++;if(i+3<q.length){i+=4+q[i+3]*2;}else{nError=nCount+1;alert("Question number "+nError+" has invalid data");return;}}else if(q[i]=="choice-multiple"){qi[nCount]=i;nCount++;if(i+3<q.length){i+=q[i+3]-0+6;}else{nError=nCount+1;alert("Question number "+nError+" has invalid data");return;}}else if(q[i]=="matching"){qi[nCount]=i;nCount++;if(i+3<q.length){i+=6+q[i+3]*2;}else{nError=nCount+1;alert("Question number "+nError+" has invalid data");return;}}else{nError=nCount+1;alert("Question number "+nError+" has an invalid question type");return;}}while(i<q.length);if(questionsToShow<=0)questionsToShow=nCount;for(i=0;i<questionsToShow;i++){qAnswers[i]="";qChoices[i]="";qAttempts[i]=0;}if(randomizeTest){for(i=0;i<qi.length;i++){rand=Math.floor(Math.random()*qi.length);temp=qi[i];qi[i]=qi[rand];qi[rand]=temp;}}}function getSuspendData(){var sData=qi.join(",")+_sSep1+qAnswers.join(_sSep2)+_sSep1;sData+=qAttempts.join(",")+_sSep1;bFirst=true;for(i=0;i<qChoices.length;i++){if(qChoices[i]!=""){if(bFirst==true){sData+=i+":"+qChoices[i];bFirst=false;}else{sData+=_sSep2+i+":"+qChoices[i];}}}return sData;}function getSessionTime(){var dateNow=new Date();var timeNow=dateNow.getTime();var timeElapsed=Math.round((timeNow-timeStart)/1000);var hh=Math.floor(timeElapsed/3600);timeElapsed-=hh*3600;var mm=Math.floor(timeElapsed/60);timeElapsed-=mm*60;var ss=timeElapsed;if(hh<10)hh="0"+hh;if(mm<10)mm="0"+mm;if(ss<10)ss="0"+ss;return hh+":"+mm+":"+ss;}function getComplete(){var nTotal=0;for(var i=0;i<questionsToShow;i++){if(qAnswers[i]!=""){nTotal++;}}return nTotal;}function getScore(){nEach=100/questionsToShow;nTotal=0;for(i=0;i<questionsToShow;i++){if(qAnswers[i]==q[qi[i]+2]){nTotal+=nEach;}}return Math.round(nTotal);}function getPassed(nScore){if(nScore>=passingScore)return "passed";return "failed";}function NextPage(){if(nPageNumber<questionsToShow){nPageNumber=nPageNumber+1;gotoPage(nPageNumber);}return false;}function PrevPage(){if(nPageNumber>-1){nPageNumber=nPageNumber-1;gotoPage(nPageNumber);}return false;}function gotoPage(thisPage){if(thisPage>-1){if(dateStart==null){dateStart=new Date();timeStart=dateStart.getTime();}if(timeLimit>0){if(timerTest==null){timeLimitMS=timeLimit*60000;var sTime=apiGetTotalTime();if(sTime!=""){var aTime=sTime.split(":");if(aTime.length==3){timeLimitMS-=(aTime[0]*360000+aTime[1]*60000+aTime[2]*1000);}}timerTest=setInterval("timeCheck()",1000);}}}nPageNumber=thisPage;displayPage();}function showPageNumber(bShow){if(bEmbedded){parent.showEmbedPageNum(nPageNumber+1,questionsToShow+2,getComplete(),questionsToShow);}else{var sDisplay;if(bShow){sDisplay=msgPageNum.replace(/%%complete/g,getComplete());sDisplay=sDisplay.replace(/%%total/g,questionsToShow);}else{sDisplay="&nbsp;";}document.getElementById("pageNumber").innerHTML=sDisplay;}}function displayPage(){if(nPageNumber==-1){showPrevButton(false);showNextButton(true);showInformation();return;}if(nPageNumber==questionsToShow){showPrevButton(true);showNextButton(false);showSummary();return;}toggleNav("show");pageType=q[qi[nPageNumber]];if(pageType=="true-false"){showTrueFalse();}else if(pageType=="choice"){showChoice();}else if(pageType=="choice-multiple"){showChoiceMultiple();}else if(pageType=="fill-in"){showFillIn();}else if(pageType=="matching"){showMatching();}}function showPrevButton(bShow){if(!bEmbedded){if(bShow==true)document.getElementById("prev").style.visibility="visible";else document.getElementById("prev").style.visibility="hidden";}}function showNextButton(bShow){if(!bEmbedded){if(bShow==true)document.getElementById("next").style.visibility="visible";else document.getElementById("next").style.visibility="hidden";}}function toggleNav(state){if(!bEmbedded){if(state=="show"){document.getElementById("prev").style.visibility="visible";if(mustAnswer==true&&qAnswers[nPageNumber]==""){document.getElementById("next").style.visibility="hidden";}else{document.getElementById("next").style.visibility="visible";}}else{document.getElementById("next").style.visibility="visible";}}}function showTimeoutAlert(){document.getElementById("timeLimit").innerHTML=msgTime+"0";displayPage();alert(timeoutAlert);}function showInformation(){document.getElementById("question").innerHTML=infoPage;showPageNumber(false);if(!bEmbedded){document.getElementById("prev").style.visibility="hidden";}}function showSummary(){nScore=getScore();if(nScore>=passingScore){if(bEmbedded){if(parent.checkCompleteCourse(false)){parent.gotoPage(0);return;}}sData=summaryPassed.replace(/%%score/g,nScore);sData=sData.replace(/%%pass/g,passingScore);}else{sData=summaryFailed.replace(/%%score/g,nScore);sData=sData.replace(/%%pass/g,passingScore);}document.getElementById("question").innerHTML=sData;showPageNumber(false);}function showTrueFalse(){feedback="";checkedTrue="";checkedFalse="";nIndex=qi[nPageNumber];if(qAnswers[nPageNumber]!=""){if(qAnswers[nPageNumber]=="t")checkedTrue="checked";else checkedFalse="checked";if(qAnswers[nPageNumber]==q[nIndex+2]){feedback=q[nIndex+3];}else{feedback=q[nIndex+4];}}var bTooMany=(qAttempts[nPageNumber]>=numberAttempts)?true:false;if(bTooMany)sData=msgTooMany;else sData="";if(bTimeLimitReached)sData+=msgTimeout;bTooMany=bTooMany||bTimeLimitReached;sData+=msgDirectionsTF;sData+=q[nIndex+1];sData+='<FORM name=qform>';sData+='<INPUT id="choicet" type=radio';if(bTooMany)sData+=' disabled';sData+=' value=true name=answer '+checkedTrue+'><LABEL for="choicet">'+msgTrue+'</LABEL><BR />';sData+=' <INPUT id="choicef" type=radio';if(bTooMany)sData+=' disabled';sData+=' value=false name=answer '+checkedFalse+'><LABEL for="choicef">'+msgFalse+'</LABEL><br /><br />';sData+=' <INPUT class=check_button type=button value="'+msgCheck+'" name=check';if(bTooMany)sData+=' disabled';sData+=' onclick=evalTrueFalse()>';sData+='</FORM><br />';sData+='<SPAN class=feedback id=feedback>'+feedback+'</SPAN>';document.getElementById("question").innerHTML=sData;showPageNumber(true);}function showChoice(){feedback="";nIndex=qi[nPageNumber];numChoices=q[nIndex+3]-0;if(qChoices[nPageNumber]==""){aRan=new Array();for(i=0;i<numChoices;i++)aRan[i]=i+1;if(randomizeChoices==true){for(i=0;i<numChoices;i++){rand=Math.floor(Math.random()*numChoices);temp=aRan[i];aRan[i]=aRan[rand];aRan[rand]=temp;}}qChoices[nPageNumber]=aRan.join(",");}else{aRan=qChoices[nPageNumber].split(",");}if(qAnswers[nPageNumber]!=""){nAnswer=qAnswers[nPageNumber]-0;feedback=q[nIndex+3+numChoices+nAnswer];}bTooMany=(qAttempts[nPageNumber]>=numberAttempts)?true:false;if(bTooMany)sData=msgTooMany;else sData="";if(bTimeLimitReached)sData+=msgTimeout;bTooMany=bTooMany||bTimeLimitReached;sData+=q[nIndex+1];sData+=msgDirectionsMC;sData+='<FORM name=qform>';for(i=0;i<numChoices;i++){nChoice=aRan[i]-0;sData+='<LABEL><INPUT type=radio value=';sData+=nChoice;sData+=' name=answer';if(bTooMany)sData+=' disabled';if(nChoice==qAnswers[nPageNumber])sData+=' checked>';else sData+=' >';sData+=q[nIndex+3+nChoice];sData+='</LABEL><BR />';}sData+='<BR /><INPUT class=check_button type=button value="'+msgCheck+'"';if(bTooMany)sData+=' disabled';sData+=' name=check onclick=evalChoice()>';sData+='</FORM><br />';sData+='<SPAN class=feedback id=feedback>'+feedback+'</SPAN>';document.getElementById("question").innerHTML=sData;showPageNumber(true);}function showChoiceMultiple(){feedback="";nIndex=qi[nPageNumber];numChoices=q[nIndex+3]-0;if(qChoices[nPageNumber]==""){aRan=new Array();for(i=0;i<numChoices;i++)aRan[i]=i+1;if(randomizeChoices==true){for(i=0;i<numChoices;i++){rand=Math.floor(Math.random()*numChoices);temp=aRan[i];aRan[i]=aRan[rand];aRan[rand]=temp;}}qChoices[nPageNumber]=aRan.join(",");}else{aRan=qChoices[nPageNumber].split(",");}if(qAnswers[nPageNumber]!=""){if(qAnswers[nPageNumber]==q[nIndex+2]){feedback=q[q[nIndex+3]-0+nIndex+4];}else{feedback=q[q[nIndex+3]-0+nIndex+5];}}bTooMany=(qAttempts[nPageNumber]>=numberAttempts)?true:false;if(bTooMany)sData=msgTooMany;else sData="";if(bTimeLimitReached)sData+=msgTimeout;bTooMany=bTooMany||bTimeLimitReached;aAnswers=qAnswers[nPageNumber].split(',');sData+=q[nIndex+1];sData+=msgDirectionsMCM;sData+='<FORM name=qform>';for(i=0;i<numChoices;i++){nChoice=aRan[i]-0;sData+='<LABEL><INPUT type=checkbox value=';sData+=nChoice;sData+=' name=answer';if(bTooMany)sData+=' disabled';if(qAnswers[nPageNumber]!=""){for(j=0;j<aAnswers.length;j++){if(nChoice==aAnswers[j]){sData+=' checked';break;}}}sData+=' >';sData+=q[nIndex+3+nChoice];sData+='</LABEL><BR />';}sData+='<BR /><INPUT class=check_button type=button value="'+msgCheck+'"';if(bTooMany)sData+=' disabled';sData+=' name=check onclick=evalChoiceMultiple()>';sData+='</FORM><br />';sData+='<SPAN class=feedback id=feedback>'+feedback+'</SPAN>';document.getElementById("question").innerHTML=sData;showPageNumber(true);}function showFillIn(){feedback="";nIndex=qi[nPageNumber];if(qAnswers[nPageNumber]!=""){if(qAnswers[nPageNumber]==q[nIndex+2]){feedback=q[nIndex+3];}else{feedback=q[nIndex+4];}}bTooMany=(qAttempts[nPageNumber]>=numberAttempts)?true:false;if(bTooMany)sData=msgTooMany;else sData="";if(bTimeLimitReached)sData+=msgTimeout;bTooMany=bTooMany||bTimeLimitReached;if(qAnswers[nPageNumber]!=""){aAnswers=qAnswers[nPageNumber].split(',');sEdit1='type="text" name="answer1" value="'+aAnswers[0]+'">';if(aAnswers.length>1){sEdit2='type="text" name="answer2" value="'+aAnswers[1]+'">';}else{sEdit2='type="text" name="answer2" value="">';}}else{sEdit1='type="text" name="answer1" value="">';sEdit2='type="text" name="answer2" value="">';}if(bTooMany){sEdit1='<INPUT disabled '+sEdit1;sEdit2='<INPUT disabled '+sEdit2;}else{sEdit1='<INPUT '+sEdit1;sEdit2='<INPUT '+sEdit2;}sQuestion=q[nIndex+1];sQuestion=sQuestion.replace(/%%1/g,sEdit1);sQuestion=sQuestion.replace(/%%2/g,sEdit2);aCorrect=q[nIndex+2].split(',');if(aCorrect.length==1)sData+=msgDirectionsFI;else sData+=msgDirectionsFIM;sData+='<FORM name=qform onSubmit="return false">';sData+=sQuestion;sData+='<br /><br /><INPUT class=check_button type=button value="'+msgCheck+'" name=check';if(bTooMany)sData+=' disabled';sData+=' onclick=evalFillIn()>';sData+='</FORM><br />';sData+='<SPAN class=feedback id=feedback>'+feedback+'</SPAN>';document.getElementById("question").innerHTML=sData;showPageNumber(true);if(!bTooMany){tf=document.getElementsByName("answer1")[0];tf.focus();tf.focus();}}function showMatching(){feedback="";nIndex=qi[nPageNumber];numChoices=q[nIndex+3]-0;if(qChoices[nPageNumber]==""){aRan=new Array();for(i=0;i<numChoices;i++)aRan[i]=i+1;if(randomizeChoices==true){for(i=0;i<numChoices;i++){rand=Math.floor(Math.random()*numChoices);temp=aRan[i];aRan[i]=aRan[rand];aRan[rand]=temp;}}qChoices[nPageNumber]=aRan.join(",");}else{aRan=qChoices[nPageNumber].split(",");}if(qAnswers[nPageNumber]!=""){if(qAnswers[nPageNumber]==q[nIndex+2]){feedback=q[nIndex+4+2*numChoices];}else{feedback=q[nIndex+5+2*numChoices];}}bTooMany=(qAttempts[nPageNumber]>=numberAttempts)?true:false;if(bTooMany)sData=msgTooMany;else sData="";if(bTimeLimitReached)sData+=msgTimeout;bTooMany=bTooMany||bTimeLimitReached;if(qAnswers[nPageNumber]!=""){aAnswers=qAnswers[nPageNumber].split(',');}aLeft=new Array();aRight=new Array();aAlpha=new Array('A','B','C','D','E','F','G','H','I','J');for(i=0;i<numChoices;i++){nChoice=aRan[i]-1;aLeft[i]='<INPUT SIZE="1" MAXLENGTH="1"';if(bTooMany){aLeft[i]+='disabled ';}nNum=nChoice+1;aLeft[i]+='type="text" name="answer'+nNum+'" value="';if(qAnswers[nPageNumber]!=""){aLeft[i]+=aAnswers[nChoice].split("-")[1];}aLeft[i]+='">&nbsp;';nNum=i+1;aLeft[i]+=nNum+'. '+q[nIndex+4+nChoice];aRight[i]=aAlpha[i]+'. '+q[nIndex+4+i+numChoices];}sData+=q[nIndex+1];sData+='<FORM name=qform>';sData+='<table>';for(i=0;i<numChoices;i++){sData+='<tr><td>';sData+=aLeft[i];sData+='</td><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';sData+=aRight[i];sData+='</td></tr>';}sData+='</table>';sData+='<br /><INPUT class=check_button type=button value="'+msgCheck+'" name=check';if(bTooMany)sData+=' disabled';sData+=' onclick=evalMatching()>';sData+='</FORM><br />';sData+='<SPAN class=feedback id=feedback>'+feedback+'</SPAN>';document.getElementById("question").innerHTML=sData;showPageNumber(true);if(!bTooMany){tf=document.getElementsByName("answer1")[0];tf.focus();tf.focus();}}function evalTrueFalse(){var sPrevAnswer=qAnswers[nPageNumber];rButtons=document.getElementsByName("answer");if(rButtons[0].checked==true){qAnswers[nPageNumber]="t";}else if(rButtons[1].checked==true){qAnswers[nPageNumber]="f";}else{needAnswer();return;}qAttempts[nPageNumber]+=1;toggleNav("answer");showTrueFalse();reportInteraction(sPrevAnswer);}function evalChoice(){var sPrevAnswer=qAnswers[nPageNumber];rButtons=document.getElementsByName("answer");for(i=0;i<rButtons.length;i++){if(rButtons[i].checked==true){qAnswers[nPageNumber]=rButtons[i].value-0;break;}}if(qAnswers[nPageNumber]==""){needAnswer();return;}qAttempts[nPageNumber]+=1;toggleNav("answer");showChoice();reportInteraction(sPrevAnswer);}function evalChoiceMultiple(){var sPrevAnswer=qAnswers[nPageNumber];cButtons=document.getElementsByName("answer");aChecks=new Array();nChecks=0;for(i=0;i<cButtons.length;i++){if(cButtons[i].checked==true){aChecks[nChecks]=cButtons[i].value-0;nChecks++;}}if(aChecks.length>0){aChecks=aChecks.sort();qAnswers[nPageNumber]=aChecks.join(',');}else{qAnswers[nPageNumber]="";}if(qAnswers[nPageNumber]==""){needAnswer();return;}qAttempts[nPageNumber]+=1;toggleNav("answer");showChoiceMultiple();reportInteraction(sPrevAnswer);}function evalFillIn(){var sPrevAnswer=qAnswers[nPageNumber];nIndex=qi[nPageNumber];aCorrect=q[nIndex+2].split(',');nAnswers=aCorrect.length;qAnswers[nPageNumber]=document.getElementsByName("answer1")[0].value;if(nAnswers>1){qAnswers[nPageNumber]+=","+document.getElementsByName("answer2")[0].value;}if(qAnswers[nPageNumber]==""||qAnswers[nPageNumber]==","){needAnswer();tf=document.getElementsByName("answer1")[0];tf.focus();tf.focus();return;}qAttempts[nPageNumber]+=1;q[nIndex+2]=q[nIndex+2].toLowerCase();qAnswers[nPageNumber]=qAnswers[nPageNumber].toLowerCase();toggleNav("answer");showFillIn();reportInteraction(sPrevAnswer);}function evalMatching(){var sPrevAnswer=qAnswers[nPageNumber];nIndex=qi[nPageNumber];numChoices=q[nIndex+3]-0;aAnswers=new Array();for(i=0;i<numChoices;i++){nNum=i+1;sControl="answer"+nNum;sAnswer=document.getElementsByName(sControl)[0].value.toUpperCase();if(sAnswer==""){needAnswer();tf=document.getElementsByName("answer1")[0];tf.focus();tf.focus();return;}aAnswers[i]=nNum+"-"+sAnswer;}qAttempts[nPageNumber]+=1;qAnswers[nPageNumber]=aAnswers.join(",");toggleNav("answer");showMatching();reportInteraction(sPrevAnswer);}function needAnswer(){pageType=q[qi[nPageNumber]];if(pageType=="true-false")alert(msgAnswerTF);else if(pageType=="choice")alert(msgAnswerMC);else if(pageType=="choice-multiple")alert(msgAnswerMCM);else if(pageType=="fill-in")alert(msgAnswerFI);else if(pageType=="matching")alert(msgAnswerM);}function reportInteraction(sPrevAnswer){if(sPrevAnswer==qAnswers[nPageNumber])return;var nIndex=qi[nPageNumber];var type=q[nIndex];var answer=qAnswers[nPageNumber];var correct=q[nIndex+2];var nId=getQuestionIndex();if(bEmbedded){}else{if(nInteractionsTotal==-1){nInteractionsTotal=scormGetValue("cmi.interactions._count");nInteractionsTotal-=0;if(scormGetLastError()!="0"){nInteractionsTotal=0;}}var sIntName="cmi.interactions."+nInteractionsTotal+".";scormSetValue(sIntName+"id",nIndex+"");if(type=="choice-multiple")type="choice";scormSetValue(sIntName+"type",type);scormSetValue(sIntName+"student_response",answer);scormSetValue(sIntName+"weighting","1");scormSetValue(sIntName+"correct_responses.0.pattern",correct);if(answer==correct)scormSetValue(sIntName+"result","correct");else scormSetValue(sIntName+"result","wrong");nInteractionsTotal++;}}function getQuestionIndex(){var nId=0;for(var i=0;i<qi.length;i++){if(qi[i]<=qi[nPageNumber]){nId++;}}return nId;}function initTest(){bEmbedded=true;var sData=parent.getState();if(sData!=""){processScormData(sData);}else{setIndex();}gotoPage(-1);}function getLessonLocation(){return nPageNumber;}function getPassingScore(){return passingScore;}function getInteractionData(){var nIndex;var sData="";for(i=0;i<questionsToShow;i++){if(i>0)sData+=_sSep1;nIndex=qi[i];sData+=q[nIndex]+_sSep2+qAnswers[i]+_sSep2+q[nIndex+2];}return sData;}
