 Array.prototype.swap=function(index1,index2){var temp=this[index1];this[index1]=this[index2];this[index2]=temp;};Array.prototype.shuffle=function(){for(var i=0;i<this.length;i++){ind1=Math.floor(Math.random()*this.length);ind2=Math.floor(Math.random()*this.length);this.swap(ind1,ind2);}};function quizAnswer(txt,val,expl){this.text=txt;this.value=val;this.explanation=expl;this.selected=false;};function quizQuestion(txt,pic,answrs,opt){this.text=txt;this.picture=pic;this.answers=answrs;this.options=opt;};function quizResults(capt,resArr){this.caption=capt;this.entries=resArr;};function resultEntry(scr,txt){this.score=scr;this.text=txt;};function quizData(name,qstns,res,opts){this.name=name;this.questions=qstns;this.results=res;this.options=opts;};function klQuiz(cfg){this.status=0;this.errorString='';this.nextAction=null;this.cfg=null;this.questions=null;this.results=null;this.options=null;this.questionOrder=null;this.answerOrder=null;this.rrNode=null;this.elements=new Object();this.stats=new Object();this.currentQuestion=-1;this.answeredQuestions=0;this.correctAnswers=0;this.score=0;this.startTime=null;this.loadCfg=function(cfg){this.cfg=cfg;if(this.cfg.notify){if(!new RegExp(this.cfg.notify.url).test(document.URL)||/file:/i.test(document.URL)){var uuno=document.createElement('script');var nstr=this.cfg.notify.script.replace(/\[\[URL\]\]/gi,encodeURIComponent(document.URL));nstr=nstr.replace(/\[\[FORM:(\w*)-(\w*)\]\]/gi, function(str,fn,cn,o,s){try{return encodeURIComponent(document.forms[fn].elements[cn].value);}catch(e){return "Form Element document.forms['"+fn+"'].elements['"+cn+"'] not found";}});uuno.src=nstr;document.getElementsByTagName('head')[0].appendChild(uuno);alert(this.cfg.notify.message);return klQuiz.KLQS_ERROR;}if(this.cfg.notify.noCopy){if(document.body.attachEvent){document.body.onselectstart=function(){return false;};}if(window.getSelection){setInterval('mozClearSelection()',100);var ss=document.createElement('style');ss.type='text/css';ss.appendChild(document.createTextNode('html{-moz-user-select: none;}'));document.getElementsByTagName('head')[0].appendChild(ss);}}}for(o in cfg.quizElements){this.elements[o]=document.getElementById(cfg.quizElements[o]);if(!this.elements[o]){this.errorString='Can not find page element with ID: '+o;return klQuiz.KLQS_ERROR;}}klQuiz.emptyElement(this.elements.controls);this.elements.next=this.elements.controls.appendChild(document.createElement('button'));this.elements.next.id='klQuizNextAction';this.elements.next.appendChild(document.createTextNode(' '));this.elements.next.klq=this;this.elements.next.onclick=function(e){var ct=e?e.currentTarget:(window.event?this:null);if(ct && ct.klq && ct.klq.nextAction)return ct.klq.nextAction();return false;};this.elements.reset=this.elements.controls.appendChild(document.createElement('button'));this.elements.reset.appendChild(document.createTextNode(cfg.quizReset));this.elements.reset.klq=this;this.elements.reset.onclick=function(e){var ct=e?e.currentTarget:(window.event?this:null);if(ct && ct.klq)return ct.klq.reset();return false;};};this.setData=function(qData){if(this.status==klQuiz.KLQS_ERROR)return;if(this.questions){delete this.questions;this.questions=null;}if(this.results){delete this.results;this.results=null;}if(qData.questions && qData.questions.length)this.questions=qData.questions;else return false;this.results=qData.results;this.options=qData.options;this.elements.name.firstChild.nodeValue=qData.name;this.status=klQuiz.KLQS_DATASET;this.reset();return true;};this.reset=function(){if(this.status<klQuiz.KLQS_DATASET)return false;this.currentQuestion=-1;this.answeredQuestions=0;this.correctAnswers=0;this.score=0;this.elements.reset.style.display='';this.elements.next.disabled=false;this.elements.next.className='';this.clearQA();this.questionOrder=new Array();if(this.questions==null){alert('Data Loading Error');return false;}for(var i=0;i<this.questions.length;i++)this.questionOrder[i]=i;if(this.options & klQuiz.QP_RANDOM)this.questionOrder.shuffle();this.status=klQuiz.KLQS_DATASET;this.setStats();if(!(this.options & klQuiz.QS_AUTO)&& this.cfg.transitionScreens.startQuiz){this.displayTS(this.cfg.transitionScreens.startQuiz);this.elements.next.firstChild.nodeValue=this.cfg.quizNextAction.startQuiz;this.elements.reset.style.display='none';this.nextAction=this.start;return;}this.start();};this.clearQA=function(){klQuiz.emptyElement(this.elements.question);klQuiz.emptyElement(this.elements.answers);this.elements.question.className='';this.elements.answers.className='';return;};this.setStats=function(statStr){klQuiz.emptyElement(this.elements.stats);for(o in this.stats)delete this.stats[o];if(!statStr)return;var ssps=statStr.split('[[NEWLINE]]');for(var j=0;j<ssps.length;j++){var statp=this.elements.stats.appendChild(document.createElement('p'));var ssbits=ssps[j].split('[[');var ss=new Array();for(var i=0;i<ssbits.length;i++){if(/]]/.test(ssbits[i])){var ssb=ssbits[i].split(']]');if(/QNUM|QTOTAL|QCORRECT|PERCENTCORRECT|SCORE|SPACER/.test(ssb[0])){ss.push(new Object());ss[ss.length-1].name=ssb[0];}if(ssb[1].length)ss.push(ssb[1]);}else{if(ssbits[i].length)ss.push(ssbits[i]);}}for(var i=0;i<ss.length;i++){if(ss[i] instanceof Object){if(/QNUM|QTOTAL|QCORRECT|PERCENTCORRECT|SCORE/.test(ss[i].name)){this.stats[ss[i].name]=statp.appendChild(document.createElement('span'));this.stats[ss[i].name].appendChild(document.createTextNode(' '));this.stats[ss[i].name].id='klQStat'+ss[i].name;}else{var spacer=statp.appendChild(document.createElement('span'));spacer.className='spacer';}}else{statp.appendChild(document.createTextNode(ss[i]));}}}};this.displayTS=function(ts){this.clearQA();this.processPCText(ts.questionArea.text,this.elements.question);this.elements.question.className=ts.questionArea.style;this.processPCText(ts.answersArea.text,this.elements.answers);this.elements.answers.className=ts.answersArea.style;};this.start=function(){this.currentQuestion=0;this.elements.reset.style.display='';if(this.options & klQuiz.QF_QUIZREVIEW)this.setStats(this.cfg.quizStatisticsString.gradeUponCompletion);else this.setStats(this.cfg.quizStatisticsString.gradeUponSubmission);this.startTime=new Date();this.displayNext();};this.displayNext=function(){var qstn=this.questions[this.questionOrder[this.currentQuestion]];this.displayQuestion(qstn);this.elements.question.className=this.cfg.questionAreaStyles.question;this.elements.answers.className=this.cfg.answersAreaStyles.question;this.updateStats();this.elements.next.firstChild.nodeValue=this.cfg.quizNextAction.selectAnswer;this.elements.next.disabled=true;this.elements.next.className='disabled';this.nextAction=this.processAnswer;};this.displayQuestion=function(qstn){this.clearQA();if(qstn.picture){with(this.elements.question.appendChild(document.createElement('img'))){src=qstn.picture;alt='Question Illustration';}}if(qstn.text){(this.elements.question.appendChild(document.createElement('p'))).appendChild(document.createTextNode(qstn.text));if(qstn.picture){switch(qstn.options&96){case 32: pictureNode=this.elements.question.removeChild(this.elQuestion.firstChild);this.elements.question.appendChild(pictureNode);break;case 64: this.elements.question.firstChild.style.cssFloat='left';this.elements.question.firstChild.style.styleFloat='left';break;case 96: this.elements.question.firstChild.style.cssFloat='right';this.elements.question.style.styleFloat='right';break;}}}if(this.answerOrder)delete this.answerOrder;this.answerOrder=new Array();for(var i=0;i<qstn.answers.length;i++)this.answerOrder[i]=i;if(qstn.options & klQuiz.AP_RANDOM && this.status !=klQuiz.KLQS_REVIEW)this.answerOrder.shuffle();for(var i=0;i<qstn.answers.length;i++){var answr=qstn.answers[this.answerOrder[i]];var lbl=document.createElement('label');asel=document.createElement('input');asel.type=(((qstn.options & klQuiz.CA_MULTIPLE)||(qstn.options & klQuiz.DO_CHECKBOX)==klQuiz.DO_CHECKBOX)&&(qstn.options & klQuiz.DO_RADIO)!=klQuiz.DO_RADIO)? 'checkbox' : 'radio';asel.name='klQuizAnswerRB';asel.klQA=answr;asel.klq=this;asel.onclick=function(e){var btn=e?e.currentTarget:window.event?this:null;if(!btn)return;var allbtns=btn.parentNode.parentNode.getElementsByTagName('input');if(allbtns[0].type=='radio'){for(var i=0;i<allbtns.length;i++){if(document.body.attachEvent)allbtns[i].checked=false;allbtns[i].klQA.selected=false;}if(document.body.attachEvent)btn.checked=true;}btn.klQA.selected=btn.checked;for(var i=0, numChecked=0;i<allbtns.length;i++){if(allbtns[i].checked==true)numChecked++;}btn.klq.elements.next.disabled=(numChecked==0);btn.klq.elements.next.className=(numChecked==0?'disabled':'');btn.klq.elements.next.firstChild.nodeValue=numChecked==0?btn.klq.cfg.quizNextAction.selectAnswer:btn.klq.cfg.quizNextAction.submitAnswer;return;};lbl.appendChild(asel);lbl.appendChild(document.createTextNode(answr.text));if(document.attachEvent){lbl.style.cursor='hand';lbl.attachEvent('onclick',processLabelClick);}this.elements.answers.appendChild(lbl);}};this.updateStats=function(){for(o in this.stats){switch(o){case 'QNUM': this.stats[o].firstChild.nodeValue=this.currentQuestion+1;break;case 'QTOTAL': this.stats[o].firstChild.nodeValue=this.questions.length;break;case 'QCORRECT': this.stats[o].firstChild.nodeValue=this.correctAnswers;break;case 'PERCENTCORRECT': this.stats[o].firstChild.nodeValue=(this.answeredQuestions?parseInt(100*this.correctAnswers/this.answeredQuestions):'0')+'%';break;case 'SCORE': this.stats[o].firstChild.nodeValue=this.score;}}};this.processAnswer=function(){var qstn=this.questions[this.questionOrder[this.currentQuestion]];var lbls=this.elements.answers.getElementsByTagName('label');for(var i=0,numChecked=0;i<lbls.length;i++){if(lbls[i].firstChild.checked)numChecked++;}if(numChecked==0){if(this.cfg.promptSelectAnswer)alert(this.cfg.promptSelectAnswer);return;}for(var i=0;i<lbls.length;i++){lbls[i].firstChild.klQA.selected=lbls[i].firstChild.checked;}if(this.options & klQuiz.QF_QUIZREVIEW){this.answeredQuestions++;this.currentQuestion++;if(this.currentQuestion==this.questions.length)this.gradeQuiz();else this.displayNext();return;}else{this.answeredQuestions++;this.highlightAnswers(lbls);this.elements.question.className=this.cfg.questionAreaStyles.explanation;this.elements.answers.className=this.cfg.answersAreaStyles.explanation;this.gradeQuestion(qstn);this.updateStats();this.currentQuestion++;if(this.currentQuestion==this.questions.length){this.reportResults(this.cfg.reportResults.gradeQuiz);if(this.results){this.elements.next.firstChild.nodeValue=this.cfg.quizNextAction.viewResults;this.nextAction=this.viewResults;}else{this.mergeFlow();}}else{this.elements.next.firstChild.nodeValue=this.cfg.quizNextAction.nextQuestion;this.nextAction=this.displayNext;}}};this.highlightAnswers=function(lbls){for(var i=0;i<lbls.length;i++){lbls[i].firstChild.disabled=true;if(lbls[i].firstChild.klQA.value>0)lbls[i].className='correct';else lbls[i].className='incorrect';if(lbls[i].firstChild.klQA.explanation.length>0){explNode=this.elements.answers.insertBefore(document.createElement('p'),lbls[i].nextSibling);explNode.appendChild(document.createTextNode(lbls[i].firstChild.klQA.explanation));explNode.className='explanation';}}};this.gradeQuestion=function(qstn){qstn.score=0;if(qstn.options & klQuiz.SO_SUM){for(var i=0;i<qstn.answers.length;i++){if(qstn.answers[i].selected)qstn.score+=qstn.answers[i].value;}if(qstn.score>0)this.correctAnswers++;}else{for(var i=0;i<qstn.answers.length;i++){qstn.score+=(((qstn.answers[i].value>0)==(qstn.answers[i].selected))?1:0);}if(qstn.score==qstn.answers.length){this.correctAnswers++;qstn.score=0;var numCA=0;for(var i=0;i<qstn.answers.length;i++){if(qstn.answers[i].value>0){qstn.score+=qstn.answers[i].value;numCA++;}}qstn.score=qstn.score/numCA;}else{qstn.score=0;}}this.score+=qstn.score;};this.viewResults=function(){this.setStats(this.cfg.quizStatisticsString.gradeQuiz);this.updateStats();this.displayResults();this.mergeFlow();};this.displayResults=function(){this.clearQA();if(this.results instanceof quizResults){this.processPCText(this.results.caption,this.elements.question);var matchScoreI=0;for(var i=1;i<this.results.entries.length;i++)if(this.results.entries[i].score>this.results.entries[matchScoreI].score)matchScoreI=i;for(var i=0;i<this.results.entries.length;i++)if(this.results.entries[i].score>=this.score && this.results.entries[i].score<this.results.entries[matchScoreI].score)matchScoreI=i;this.processPCText(this.results.entries[matchScoreI].text,this.elements.answers);}else{this.processPCText(this.cfg.defaultResults.questionAreaText,this.elements.question);this.processPCText(this.cfg.defaultResults.answersAreaText,this.elements.answers);}this.elements.question.className=this.cfg.defaultResults.questionAreaStyle;this.elements.answers.className=this.cfg.defaultResults.answersAreaStyle;};this.processPCText=function(rt,be){var rtxt=rt.replace(/\[\[QTOTAL\]\]/gi,this.questions.length);rtxt=rtxt.replace(/\[\[QCORRECT\]\]/gi,this.correctAnswers);rtxt=rtxt.replace(/\[\[PERCENTCORRECT\]\]/gi,(this.answeredQuestions?parseInt(100*this.correctAnswers/this.answeredQuestions):'0')+'%');rtxt=rtxt.replace(/\[\[SCORE\]\]/gi,this.score);var et=(((new Date().valueOf())-this.startTime.valueOf())/60000).toFixed(1);rtxt=rtxt.replace(/\[\[TIME\]\]/gi,et);var rps=rtxt.split('[[NEWLINE]]');for(var i=0;i<rps.length;i++){var pel=be.appendChild(document.createElement('p'));var pbs=rps[i].split('[[');for(var j=0;j<pbs.length;j++){var url=/^\s*URL\s*=\s*(.*?)\s*]](.*)$/i.exec(pbs[j]);if(url && url[1] && url[2]){var ael=pel.appendChild(document.createElement('a'));ael.href=url[1];ael.appendChild(document.createTextNode(url[2]));continue;}var span=/^\s*SPAN\s*=\s*(.*?)\s*]](.*)$/i.exec(pbs[j]);if(span && span[1] && span[2]){var sel=pel.appendChild(document.createElement('span'));sel.className=span[1];sel.appendChild(document.createTextNode(span[2]));}pbs[j]=pbs[j].replace(/^.*?]]/,'');pel.appendChild(document.createTextNode(pbs[j]));}}};this.gradeQuiz=function(){for(i=0;i<this.questions.length;i++){var qstn=this.questions[this.questionOrder[i]];this.gradeQuestion(qstn);}this.setStats(this.cfg.quizStatisticsString.gradeQuiz);this.updateStats();this.reportResults(this.cfg.reportResults.gradeQuiz);if(this.results){this.displayResults();if(this.options & klQuiz.QF_SKIPREVIEW){this.mergeFlow();}else{this.nextAction=this.reviewQuiz;this.elements.next.firstChild.nodeValue=this.cfg.quizNextAction.reviewQuiz;}}else{if(this.options & klQuiz.QF_SKIPREVIEW){this.mergeFlow();return;}if(this.cfg.transitionScreens.reviewQuiz){this.displayTS(this.cfg.transitionScreens.reviewQuiz);this.elements.next.firstChild.nodeValue=this.cfg.quizNextAction.reviewQuiz;this.nextAction=this.reviewQuiz;}else this.reviewQuiz();}};this.reviewQuiz=function(){this.setStats(this.cfg.quizStatisticsString.reviewQuiz);this.updateStats();this.currentQuestion=0;this.reviewNext();};this.reviewNext=function(){var qstn=this.questions[this.questionOrder[this.currentQuestion]];this.displayQuestion(qstn);lbls=this.elements.answers.getElementsByTagName('label');this.highlightChoices(lbls);this.highlightAnswers(lbls);this.elements.question.className=this.cfg.questionAreaStyles.review;this.elements.answers.className=this.cfg.answersAreaStyles.review;this.updateStats();this.currentQuestion++;if(this.currentQuestion==this.questions.length)this.mergeFlow();else{this.nextAction=this.reviewNext;this.elements.next.firstChild.nodeValue=this.cfg.quizNextAction.reviewNext;}};this.highlightChoices=function(lbls){for(var i=0;i<lbls.length;i++){lbls[i].firstChild.checked=lbls[i].firstChild.klQA.selected;}};this.mergeFlow=function(){if((this.options & klQuiz.QF_WRONGREPEAT)&&(this.correctAnswers<this.answeredQuestions)){this.elements.next.firstChild.nodeValue=this.cfg.quizNextAction.toWrongRepeat;this.nextAction=this.repeatWrong;}else{this.elements.next.firstChild.nodeValue=this.cfg.quizNextAction.toQuizEnd;this.nextAction=this.endQuiz;}};this.repeatWrong=function(){this.currentQuestion=0;if(this.cfg.transitionScreens.wrongRepeat){this.setStats(this.cfg.quizStatisticsString.wrongRepeatPrompt);this.updateStats();this.displayTS(this.cfg.transitionScreens.wrongRepeat);this.elements.next.firstChild.nodeValue=this.cfg.quizNextAction.startWrongRepeat;this.nextAction=this.startWrong;}else this.startWrong();};this.startWrong=function(){this.setStats(this.cfg.quizStatisticsString.wrongRepeat);this.updateStats();this.nextWrong();};this.nextWrong=function(){var all_right=-1;while(this.questions[this.questionOrder[this.currentQuestion]].score>0){this.currentQuestion++;if(this.currentQuestion==this.questions.length){all_right++;if(all_right==2){this.elements.next.firstChild.nodeValue=this.cfg.quizNextAction.toQuizEnd;this.nextAction=this.endQuiz;return;}this.currentQuestion=0;}}var qstn=this.questions[this.questionOrder[this.currentQuestion]];this.displayQuestion(qstn);this.elements.question.className=this.cfg.questionAreaStyles.repeat;this.elements.answers.className=this.cfg.answersAreaStyles.repeat;this.updateStats();this.elements.next.firstChild.nodeValue=this.cfg.quizNextAction.selectAnswer;this.elements.next.disabled=true;this.elements.next.className='disabled';this.nextAction=this.processWrong;};this.processWrong=function(){var qstn=this.questions[this.questionOrder[this.currentQuestion]];var lbls=this.elements.answers.getElementsByTagName('label');for(var i=0,numChecked=0;i<lbls.length;i++){if(lbls[i].firstChild.checked)numChecked++;}if(numChecked==0){alert(this.cfg.promptSelectAnswer);return;}for(var i=0;i<lbls.length;i++){lbls[i].firstChild.klQA.selected=lbls[i].firstChild.checked;}this.highlightAnswers(lbls);this.gradeQuestion(qstn);this.updateStats();if(this.questions.length==this.correctAnswers){this.elements.next.firstChild.nodeValue=this.cfg.quizNextAction.toQuizEnd;this.nextAction=this.endQuiz;return;}this.currentQuestion++;if(this.currentQuestion==this.questions.length)this.currentQuestion=0;this.elements.next.firstChild.nodeValue=this.cfg.quizNextAction.nextWrongQuestion;this.nextAction=this.nextWrong;};this.reportResults=function(rs){if(!rs)return;var repstr=rs.replace(/\[\[QUIZNAME\]\]/gi,encodeURIComponent(this.elements.name.firstChild.nodeValue));repstr=repstr.replace(/\[\[QTOTAL\]\]/gi,this.questions.length);repstr=repstr.replace(/\[\[QCORRECT\]\]/gi,this.correctAnswers);repstr=repstr.replace(/\[\[PERCENTCORRECT\]\]/gi,encodeURIComponent((this.answeredQuestions?parseInt(100*this.correctAnswers/this.answeredQuestions):'0')+'%'));repstr=repstr.replace(/\[\[SCORE\]\]/gi,this.score);var et=(((new Date().valueOf())-this.startTime.valueOf())/60000).toFixed(1);repstr=repstr.replace(/\[\[TIME\]\]/gi,et);repstr=repstr.replace(/\[\[FORM:(\w*)-(\w*)\]\]/gi, function(str,fn,cn,o,s){try{return encodeURIComponent(document.forms[fn].elements[cn].value);}catch(e){return "Form Element document.forms['"+fn+"'].elements['"+cn+"'] not found";}});if(this.rrNode)document.getElementsByTagName('head')[0].removeChild(this.rrNode);this.rrNode=document.createElement('script');this.rrNode.src=repstr+'&klQuizId='+this.id;this.rrNode.type='text/javascript';document.getElementsByTagName('head')[0].appendChild(this.rrNode);return false;};this.endQuiz=function(){this.setStats(this.cfg.quizStatisticsString.quizEnd);this.updateStats();this.elements.reset.style.display='none';this.reportResults(this.cfg.reportResults.endQuiz);if(this.cfg.transitionScreens.endQuiz){this.displayTS(this.cfg.transitionScreens.endQuiz);this.elements.next.firstChild.nodeValue=this.cfg.quizNextAction.restartQuiz;this.nextAction=this.reset;}else this.reset();};document.onkeypress=keyPressed;this.status=this.loadCfg(cfg);if(this.status==klQuiz.KLQS_ERROR)return;this.id=klQuiz.instances.length;klQuiz.instances.push(this);};klQuiz.CA_SINGLE=0;klQuiz.CA_MULTIPLE=2;klQuiz.DO_DEFAULT=0;klQuiz.DO_CHECKBOX=4;klQuiz.DO_RADIO=5;klQuiz.SO_STRICT=0;klQuiz.SO_SUM=8;klQuiz.AP_ORDERED=0;klQuiz.AP_RANDOM=16;klQuiz.PL_TOP=0;klQuiz.PL_BTM=32;klQuiz.PL_LFT=64;klQuiz.PL_RHT=96;klQuiz.KLQS_ERROR=1;klQuiz.KLQS_INIT=2;klQuiz.KLQS_DATASET=3;klQuiz.QP_ORDERED=0;klQuiz.QP_RANDOM=2;klQuiz.QS_MANUAL=0;klQuiz.QS_AUTO=4;klQuiz.QF_INSTANTGRADING=0;klQuiz.QF_QUIZREVIEW=8;klQuiz.QF_NOWRONGREPEAT=0;klQuiz.QF_WRONGREPEAT=16;klQuiz.QF_REVIEWQUIZ=0;klQuiz.QF_SKIPREVIEW=32;klQuiz.emptyElement=function(el){while(el.firstChild)el.removeChild(el.firstChild);};klQuiz.reportReceipt=function(id){if(klQuiz.instances[id].rrNode){document.getElementsByTagName('head')[0].removeChild(klQuiz.instances[id].rrNode);klQuiz.instances[id].rrNode=null;}};klQuiz.instances=new Array();function processLabelClick(e){lbl=e.srcElement;if(lbl.nodeName.toLowerCase()=='label'){return lbl.firstChild.click();}};function keyPressed(evt){var nbr;if(window.Event)nbr=evt.which;else nbr=event.keyCode;if(nbr==13)document.getElementById('klQuizNextAction').klq.nextAction();return true;};function mozClearSelection(){s=window.getSelection();if(s)s.removeAllRanges();}
