API=null;nInteractionsTotal=-1;bTerminated=false;nPageNumber=-1;qi=new Array();qAnswers=new Array();qChoices=new Array();qAttempts=new Array();dateStart=new Date();timeStart=dateStart.getTime();bEmbedded=false;if(document.domain.indexOf("e-learning")==-1)document.location="blank.htm";function initCourse(){initAPI(window);if(API!=null){LMSInitialize();var sData=LMSGetValue("cmi.suspend_data");if(LMSGetLastError()=="0"){if(sData!=""){processScormData(sData)}else{setIndex()}}var sPage=LMSGetValue("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(window.opener!=null)window.close()}function terminateCourse(){if(!bTerminated){bTerminated=true;saveSession();LMSFinish()}}function saveSession(){LMSSetValue("cmi.core.session_time",getSessionTime());LMSSetValue("cmi.core.lesson_location",nPageNumber);rVal=LMSSetValue("cmi.suspend_data",getSuspendData());nScore=getScore();if(nScore>=passingScore){LMSSetValue("cmi.core.score.min","0");LMSSetValue("cmi.core.score.max","100");LMSSetValue("cmi.core.score.raw",nScore);LMSSetValue("cmi.core.lesson_status",getPassed(nScore));LMSSetValue("cmi.core.exit","")}else{LMSSetValue("cmi.core.exit","suspend");LMSSetValue("cmi.core.lesson_status","incomplete")}}function findAPI(win){while((win.API==null)&&(win.parent!=null)&&(win.parent!=win)){win=win.parent}API=win.API}function initAPI(win){findAPI(win);if((API==null)&&(win.opener!=null)){findAPI(win.opener)}}function LMSInitialize(){if(API==null)return "false";var result=API.LMSInitialize("");return result}function LMSFinish(){if(API==null)return "false";var result=API.LMSFinish("");API==null;return result}function LMSGetValue(name){if(API==null)return "";var value=API.LMSGetValue(name);var errCode=API.LMSGetLastError();if(errCode!="0"){return ""}else{return value}}function LMSSetValue(name,value){if(API==null)return "";var result=API.LMSSetValue(name,value);return result}function LMSGetLastError(){if(API==null){return "401"}return API.LMSGetLastError()}function processScormData(sData){arrayAll=sData.split("\u00a6");qi=arrayAll[0].split(",");for(i=0;i<qi.length;i++)qi[i]-=0;if(questionsToShow<=0)questionsToShow=qi.length;qAnswers=arrayAll[1].split("\u00a7");qAttempts=arrayAll[2].split(",");for(i=0;i<qAttempts.length;i++)qAttempts[i]=0;for(i=0;i<questionsToShow;i++)qChoices[i]="";aChoices=arrayAll[3].split("\u00a7");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(",")+"\u00a6"+qAnswers.join("\u00a7")+"\u00a6";sData+=qAttempts.join(",")+"\u00a6";bFirst=true;for(i=0;i<qChoices.length;i++){if(qChoices[i]!=""){if(bFirst==true){sData+=i+":"+qChoices[i];bFirst=false}else{sData+="\u00a7"+i+":"+qChoices[i]}}}return sData}function getSessionTime(){dateNow=new Date();timeNow=dateNow.getTime();timeElapsed=Math.round((timeNow-timeStart)/1000);hh=Math.floor(timeElapsed/3600);timeElapsed-=hh*3600;mm=Math.floor(timeElapsed/60);timeElapsed-=mm*60;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(){nTotal=0;for(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){nPageNumber=thisPage;displayPage()}function showPageNumber(bShow){var nComplete=0;for(i=0;i<questionsToShow;i++){if(qAnswers[i]==q[ qi[i]+2 ])nComplete+=1}if(bEmbedded){parent.showEmbedPageNum(nPageNumber+1,questionsToShow+2,nComplete,questionsToShow)}else{var sDisplay;if(bShow){sDisplay=msgPageNum.replace(/%%complete/g,nComplete);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 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]}}bTooMany=(qAttempts[nPageNumber]>=numberAttempts)?true:false;if(bTooMany)sData=msgTooMany;else sData="";sData+=msgDirectionsTF;sData+=q[nIndex+1];sData+='<FORM name=qform>';sData+='<LABEL><INPUT type=radio';if(bTooMany)sData+=' disabled';sData+=' value=true name=answer '+checkedTrue+'>True</LABEL><BR />';sData+=' <LABEL><INPUT type=radio';if(bTooMany)sData+=' disabled';sData+=' value=false name=answer '+checkedFalse+'>False</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="";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="";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(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>';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(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];if(bEmbedded){}else{if(nInteractionsTotal==-1){nInteractionsTotal=LMSGetValue("cmi.interactions._count");if(LMSGetLastError()!="0"){nInteractionsTotal=0}}var sIntName="cmi.interactions."+nInteractionsTotal+".";LMSSetValue(sIntName+"id",nPageNumber+"");if(type=="choice-multiple")type="choice";LMSSetValue(sIntName+"type",type);LMSSetValue(sIntName+"student_response",answer);LMSSetValue(sIntName+"weighting","1");LMSSetValue(sIntName+"correct_responses.0.pattern",correct);if(answer==correct)LMSSetValue(sIntName+"result","correct");else LMSSetValue(sIntName+"result","wrong");nInteractionsTotal++}}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+="\u00a6";nIndex=qi[i];sData+=q[nIndex]+"\u00a7"+qAnswers[i]+"\u00a7"+q[nIndex+2]}return sData}
