source: hotpotatoes/trunk/fuentes/javahotpot/source/source_copy/jquiz6.js_ @ 201

Last change on this file since 201 was 201, checked in by jrpelegrina, 4 years ago

First release to xenial

File size: 19.8 KB
Line 
1
2[inclScorm1.2]
3//JQUIZ-SPECIFIC SCORM-RELATED JAVASCRIPT CODE
4
5function SetScormScore(){
6//Reports the current score and any other information back to the LMS
7        if (API != null){
8                API.LMSSetValue('cmi.core.score.raw', Score);
9//Now send detailed reports about each item
10                for (var i=0; i<State.length; i++){
11                        if (State[i] != null){
12                                var ItemLabel = 'Item_' + (i+1).toString();
13                                var ThisItemScore = '';
14                                var ThisItemStatus = '';
15                                API.LMSSetValue('cmi.objectives.' + i + '.id', 'obj'+ItemLabel);
16                                API.LMSSetValue('cmi.interactions.' + i + '.id', 'int'+ItemLabel);
17                                API.LMSSetValue('cmi.objectives.' + i + '.score.min', '0');
18                                API.LMSSetValue('cmi.objectives.' + i + '.score.max', '100');
19                                if (State[i][2] > 0){
20                                        ThisItemScore = Math.floor(State[i][0] * 100) + '';
21                                        ThisItemStatus = 'completed';
22                                }
23                                else{
24                                        ThisItemScore = '0';
25                                        ThisItemStatus = 'incomplete';
26                                }
27                                API.LMSSetValue('cmi.objectives.' + i + '.score.raw', ThisItemScore);
28                                API.LMSSetValue('cmi.objectives.' + i + '.status', ThisItemStatus);
29                                API.LMSSetValue('cmi.interactions.' + i + '.weighting', I[i][0]);
30//We can only use the performance type, because we're storing multiple responses of various types.
31                                API.LMSSetValue('cmi.interactions.' + i + '.type', 'performance');
32                                API.LMSSetValue('cmi.interactions.' + i + '.student_response', State[i][5]);
33                        }
34                }
35               
36                API.LMSCommit('');
37        }
38}
39[/inclScorm1.2]
40
41//JQUIZ CORE JAVASCRIPT CODE
42
43var CurrQNum = 0;
44var CorrectIndicator = '[strCorrectIndicator]';
45var IncorrectIndicator = '[strIncorrectIndicator]';
46var YourScoreIs = '[strYourScoreIs]';
47
48//New for 6.2.2.0
49var CompletedSoFar = '[strCompletedSoFar]';
50var ExerciseCompleted = '[strExerciseCompleted]';
51var ShowCompletedSoFar = true;
52
53var ContinuousScoring = [boolContinuousScoring];
54var CorrectFirstTime = '[strCorrectFirstTime]';
55var ShowCorrectFirstTime = [boolShowCorrectFirstTime];
56var ShuffleQs = [boolShuffleQs];
57var ShuffleAs = [boolShuffleAs];
58var DefaultRight = '[strDefaultRight]';
59var DefaultWrong = '[strDefaultWrong]';
60var QsToShow = [QsToShow];
61var Score = 0;
62var Finished = false;
63var Qs = null;
64var QArray = new Array();
65var ShowingAllQuestions = false;
66var ShowAllQuestionsCaption = '[strShowAllQuestionsCaptionJS]';
67var ShowOneByOneCaption = '[strShowOneByOneCaptionJS]';
68var State = new Array();
69var Feedback = '';
70var TimeOver = false;
71var strInstructions = '';
72var Locked = false;
73
74//The following variable can be used to add a message explaining that
75//the question is finished, so no further marking will take place.
76var strQuestionFinished = '';
77
78function CompleteEmptyFeedback(){
79        var QNum, ANum;
80        for (QNum=0; QNum<I.length; QNum++){
81//Only do this if not multi-select
82                if (I[QNum][2] != '3'){
83                for (ANum = 0; ANum<I[QNum][3].length; ANum++){
84                        if (I[QNum][3][ANum][1].length < 1){
85                                if (I[QNum][3][ANum][2] > 0){
86                                        I[QNum][3][ANum][1] = DefaultRight;
87                                }
88                                else{
89                                        I[QNum][3][ANum][1] = DefaultWrong;
90                                }
91                        }
92                }
93                }
94        }
95}
96
97function SetUpQuestions(){
98        var AList = new Array();
99        var QList = new Array();
100        var i, j;
101        Qs = document.getElementById('Questions');
102        while (Qs.getElementsByTagName('li').length > 0){
103                QList.push(Qs.removeChild(Qs.getElementsByTagName('li')[0]));
104        }
105        var DumpItem = 0;
106        if (QsToShow > QList.length){
107                QsToShow = QList.length;
108        }
109        while (QsToShow < QList.length){
110                DumpItem = Math.floor(QList.length*Math.random());
111                for (j=DumpItem; j<(QList.length-1); j++){
112                        QList[j] = QList[j+1];
113                }
114                QList.length = QList.length-1;
115        }
116        if (ShuffleQs == true){
117                QList = Shuffle(QList);
118        }
119        if (ShuffleAs == true){
120                var As;
121                for (var i=0; i<QList.length; i++){
122                        As = QList[i].getElementsByTagName('ol')[0];
123                        if (As != null){
124                        AList.length = 0;
125                                while (As.getElementsByTagName('li').length > 0){
126                                        AList.push(As.removeChild(As.getElementsByTagName('li')[0]));
127                                }
128                                AList = Shuffle(AList);
129                                for (j=0; j<AList.length; j++){
130                                        As.appendChild(AList[j]);
131                                }
132                        }
133                }
134        }
135       
136        for (i=0; i<QList.length; i++){
137                Qs.appendChild(QList[i]);
138                QArray[QArray.length] = QList[i];
139        }
140
141//Show the first item
142        QArray[0].style.display = '';
143       
144//Now hide all except the first item
145        for (i=1; i<QArray.length; i++){
146                QArray[i].style.display = 'none';
147        }               
148        SetQNumReadout();
149       
150        SetFocusToTextbox();
151}
152
153function SetFocusToTextbox(){
154//if there's a textbox, set the focus in it
155        if (QArray[CurrQNum].getElementsByTagName('input')[0] != null){
156                QArray[CurrQNum].getElementsByTagName('input')[0].focus();
157//and show a keypad if there is one
158                if (document.getElementById('CharacterKeypad') != null){
159                        document.getElementById('CharacterKeypad').style.display = 'block';
160                }
161        }
162        else{
163        if (QArray[CurrQNum].getElementsByTagName('textarea')[0] != null){
164                QArray[CurrQNum].getElementsByTagName('textarea')[0].focus();   
165//and show a keypad if there is one
166                        if (document.getElementById('CharacterKeypad') != null){
167                                document.getElementById('CharacterKeypad').style.display = 'block';
168                        }
169                }
170//This added for 6.0.4.11: hide accented character buttons if no textbox
171                else{
172                        if (document.getElementById('CharacterKeypad') != null){
173                                document.getElementById('CharacterKeypad').style.display = 'none';
174                        }
175                }
176        }
177}
178
179function ChangeQ(ChangeBy){
180//The following line prevents moving to another question until the current
181//question is answered correctly. Uncomment it to enable this behaviour.
182//      if (State[CurrQNum][0] == -1){return;}
183        if (((CurrQNum + ChangeBy) < 0)||((CurrQNum + ChangeBy) >= QArray.length)){return;}
184        QArray[CurrQNum].style.display = 'none';
185        CurrQNum += ChangeBy;
186        QArray[CurrQNum].style.display = '';
187//Undocumented function added 10/12/2004
188        ShowSpecialReadingForQuestion();
189        SetQNumReadout();
190        SetFocusToTextbox();
191}
192
193var HiddenReadingShown = false;
194function ShowSpecialReadingForQuestion(){
195//Undocumented function for showing specific reading text elements which change with each question
196//Added on 10/12/2004
197        if (document.getElementById('ReadingDiv') != null){
198                if (HiddenReadingShown == true){
199                        document.getElementById('ReadingDiv').innerHTML = '';
200                }
201                if (QArray[CurrQNum] != null){
202//Fix for 6.0.4.25
203                        var Children = QArray[CurrQNum].getElementsByTagName('div');
204                        for (var i=0; i<Children.length; i++){
205                        if (Children[i].className=="HiddenReading"){
206                                        document.getElementById('ReadingDiv').innerHTML = Children[i].innerHTML;
207                                        HiddenReadingShown = true;
208//Hide the ShowAllQuestions button to avoid confusion
209                                        if (document.getElementById('ShowMethodButton') != null){
210                                                document.getElementById('ShowMethodButton').style.display = 'none';
211                                        }
212                                }
213                        }       
214                }
215        }
216}
217
218function SetQNumReadout(){
219        document.getElementById('QNumReadout').innerHTML = (CurrQNum+1) + ' / ' + QArray.length;
220        if ((CurrQNum+1) >= QArray.length){
221                if (document.getElementById('NextQButton') != null){
222                        document.getElementById('NextQButton').style.visibility = 'hidden';
223                }
224        }
225        else{
226                if (document.getElementById('NextQButton') != null){
227                        document.getElementById('NextQButton').style.visibility = 'visible';
228                }
229        }
230        if (CurrQNum <= 0){
231                if (document.getElementById('PrevQButton') != null){
232                        document.getElementById('PrevQButton').style.visibility = 'hidden';
233                }
234        }
235        else{
236                if (document.getElementById('PrevQButton') != null){
237                        document.getElementById('PrevQButton').style.visibility = 'visible';
238                }
239        }
240}
241
242[strItemArray]
243
244function StartUp(){
245        RemoveBottomNavBarForIE();
246
247//If there's only one question, no need for question navigation controls
248        if (QsToShow < 2){
249                document.getElementById('QNav').style.display = 'none';
250        }
251       
252//Stash the instructions so they can be redisplayed
253        strInstructions = document.getElementById('InstructionsDiv').innerHTML;
254       
255[inclScorm1.2]
256        ScormStartUp();
257[/inclScorm1.2]
258       
259[inclSendResults]
260        GetUserName();
261[/inclSendResults]
262       
263[inclPreloadImages]
264        PreloadImages([PreloadImageList]);
265[/inclPreloadImages]
266       
267        CompleteEmptyFeedback();
268
269        SetUpQuestions();
270        ClearTextBoxes();
271        CreateStatusArray();
272       
273[inclTimer]
274        setTimeout('StartTimer()', 50);
275[/inclTimer]
276       
277//Check search string for q parameter
278        if (document.location.search.length > 0){
279                if (ShuffleQs == false){
280                        var JumpTo = parseInt(document.location.search.substring(1,document.location.search.length))-1;
281                        if (JumpTo <= QsToShow){
282                                ChangeQ(JumpTo);
283                        }
284                }
285        }
286//Undocumented function added 10/12/2004
287        ShowSpecialReadingForQuestion();
288}
289
290function ShowHideQuestions(){
291        FuncBtnOut(document.getElementById('ShowMethodButton'));
292        document.getElementById('ShowMethodButton').style.display = 'none';
293        if (ShowingAllQuestions == false){
294                for (var i=0; i<QArray.length; i++){
295                                QArray[i].style.display = '';
296                        }
297                document.getElementById('Questions').style.listStyleType = 'decimal';
298                document.getElementById('OneByOneReadout').style.display = 'none';
299                document.getElementById('ShowMethodButton').innerHTML = ShowOneByOneCaption;
300                ShowingAllQuestions = true;
301        }
302        else{
303                for (var i=0; i<QArray.length; i++){
304                                if (i != CurrQNum){
305                                        QArray[i].style.display = 'none';
306                                }
307                        }
308                document.getElementById('Questions').style.listStyleType = 'none';
309                document.getElementById('OneByOneReadout').style.display = '';
310                document.getElementById('ShowMethodButton').innerHTML = ShowAllQuestionsCaption;
311                ShowingAllQuestions = false;   
312        }
313        document.getElementById('ShowMethodButton').style.display = 'inline';
314}
315
316function CreateStatusArray(){
317        var QNum, ANum;
318//For each item in the item array
319        for (QNum=0; QNum<I.length; QNum++){
320//Check if the question still exists (hasn't been nuked by showing a random selection)
321                if (document.getElementById('Q_' + QNum) != null){
322                        State[QNum] = new Array();
323                        State[QNum][0] = -1; //Score for this q; -1 shows question not done yet
324                        State[QNum][1] = new Array(); //answers
325                        for (ANum = 0; ANum<I[QNum][3].length; ANum++){
326                                State[QNum][1][ANum] = 0; //answer not chosen yet; when chosen, will store its position in the series of choices
327                        }
328                        State[QNum][2] = 0; //tries at this q so far
329                        State[QNum][3] = 0; //incrementing percent-correct values of selected answers
330                        State[QNum][4] = 0; //penalties incurred for hints
331                        State[QNum][5] = ''; //Sequence of answers chosen by number
332                }
333                else{
334                        State[QNum] = null;
335                }
336        }
337}
338
339[inclMultiChoice]
340
341function CheckMCAnswer(QNum, ANum, Btn){
342//if question doesn't exist, bail
343        if (State[QNum].length < 1){return;}
344       
345//Get the feedback
346        Feedback = I[QNum][3][ANum][1];
347       
348//Now show feedback and bail if question already complete
349        if (State[QNum][0] > -1){
350//Add an extra message explaining that the question
351// is finished if defined by the user
352                if (strQuestionFinished.length > 0){Feedback += '<br />' + strQuestionFinished;}
353//Show the feedback
354                ShowMessage(Feedback);
355//New for 6.2.2.1: If you want to mark an answer as correct even when it's the final choice, uncomment this line.
356//              if (I[QNum][3][ANum][2] >= 1){Btn.innerHTML = CorrectIndicator;}else{Btn.innerHTML = IncorrectIndicator;}       
357                return;
358        }
359       
360//Hide the button while processing
361        Btn.style.display = 'none';
362
363//Increment the number of tries
364        State[QNum][2]++;
365       
366//Add the percent-correct value of this answer
367        State[QNum][3] += I[QNum][3][ANum][3];
368       
369//Store the try number in the answer part of the State array, for tracking purposes
370        State[QNum][1][ANum] = State[QNum][2];
371        if (State[QNum][5].length > 0){State[QNum][5] += ' | ';}
372        State[QNum][5] += String.fromCharCode(65+ANum);
373       
374//Should this answer be accepted as correct?
375        if (I[QNum][3][ANum][2] < 1){
376//It's wrong
377
378//Mark the answer
379                Btn.innerHTML = IncorrectIndicator;
380               
381//Remove any previous score unless exercise is finished (6.0.3.8+)
382                if (Finished == false){
383                        WriteToInstructions(strInstructions);
384                }       
385               
386//Check whether this leaves just one MC answer unselected, in which case the Q is terminated
387                var RemainingAnswer = FinalAnswer(QNum);
388                if (RemainingAnswer > -1){
389//Behave as if the last answer had been selected, but give no credit for it
390//Increment the number of tries
391                        State[QNum][2]++;               
392               
393//Calculate the score for this question
394                        CalculateMCQuestionScore(QNum);
395                       
396//Get the overall score and add it to the feedback
397                        CalculateOverallScore();
398//New for 6.2.2.1
399                        var QsDone = CheckQuestionsCompleted();
400                        if ((ContinuousScoring == true)||(Finished == true)){
401                                Feedback += '<br />' + YourScoreIs + ' ' + Score + '%.' + '<br />' + QsDone;
402                                WriteToInstructions(YourScoreIs + ' ' + Score + '%.' + '<br />' + QsDone);
403                        }
404                        else{
405                                WriteToInstructions(QsDone);
406                        }
407                }
408        }
409        else{
410//It's right
411//Mark the answer
412                Btn.innerHTML = CorrectIndicator;
413                               
414//Calculate the score for this question
415                CalculateMCQuestionScore(QNum);
416               
417//New for 6.2.2.0
418                var QsDone = CheckQuestionsCompleted();
419
420//Get the overall score and add it to the feedback
421                if (ContinuousScoring == true){
422                        CalculateOverallScore();
423                        if ((ContinuousScoring == true)||(Finished == true)){
424                                Feedback += '<br />' + YourScoreIs + ' ' + Score + '%.' + '<br />' + QsDone;
425                                WriteToInstructions(YourScoreIs + ' ' + Score + '%.' + '<br />' + QsDone);
426                        }
427                }
428                else{
429                        WriteToInstructions(QsDone);
430                }
431        }
432       
433//Show the button again
434        Btn.style.display = 'inline';
435       
436//Finally, show the feedback   
437        ShowMessage(Feedback);
438       
439//Check whether all questions are now done
440        CheckFinished();
441}
442
443function CalculateMCQuestionScore(QNum){
444        var Tries = State[QNum][2] + State[QNum][4]; //include tries and hint penalties
445        var PercentCorrect = State[QNum][3];
446        var TotAns = GetTotalMCAnswers(QNum);
447        var HintPenalties = State[QNum][4];
448       
449//Make sure it's not already complete
450
451        if (State[QNum][0] < 0){
452//Allow for Hybrids
453                if (HintPenalties >= 1){
454                        State[QNum][0] = 0;
455                }
456                else{
457//This line calculates the score for this question
458                        if (TotAns == 1){
459                                State[QNum][0] = 1;
460                        }
461                        else{
462                                State[QNum][0] = ((TotAns-((Tries*100)/State[QNum][3]))/(TotAns-1));
463                        }
464                }
465//Fix for Safari bug added for version 6.0.3.42 (negative infinity problem)
466                if ((State[QNum][0] < 0)||(State[QNum][0] == Number.NEGATIVE_INFINITY)){
467                        State[QNum][0] = 0;
468                }
469        }
470}
471
472function GetTotalMCAnswers(QNum){
473        var Result = 0;
474        for (var ANum=0; ANum<I[QNum][3].length; ANum++){
475                if (I[QNum][3][ANum][4] == 1){ //This is an MC answer
476                        Result++;
477                }
478        }
479        return Result;
480}
481
482function FinalAnswer(QNum){
483        var UnchosenAnswers = 0;
484        var FinalAnswer = -1;
485        for (var ANum=0; ANum<I[QNum][3].length; ANum++){
486                if (I[QNum][3][ANum][4] == 1){ //This is an MC answer
487                        if (State[QNum][1][ANum] < 1){ //This answer hasn't been chosen yet
488                                UnchosenAnswers++;
489                                FinalAnswer = ANum;
490                        }
491                }
492        }
493        if (UnchosenAnswers == 1){
494                return FinalAnswer;
495        }
496        else{
497                return -1;
498        }
499}
500
501[/inclMultiChoice]
502
503[inclMultiSelect]
504
505function CheckMultiSelAnswer(QNum){
506//bail if question doesn't exist or exercise finished
507        if ((State[QNum].length < 1)||(Finished == true)){return;}
508
509//Increment the tries for this question
510        State[QNum][2]++;
511       
512        var ShouldBeChecked;
513        var Matches = 0;
514        if (State[QNum][5].length > 0){State[QNum][5] += ' | ';}
515       
516//Check if there are any mismatches
517        Feedback = '';
518        var CheckBox = null;
519        for (var ANum=0; ANum<I[QNum][3].length; ANum++){
520                CheckBox = document.getElementById('Q_' + QNum + '_' + ANum + '_Chk');
521                if (CheckBox.checked == true){
522                        State[QNum][5] += 'Y';
523                }
524                else{
525                        State[QNum][5] += 'N';
526                }
527                ShouldBeChecked = (I[QNum][3][ANum][2] == 1);
528                if (ShouldBeChecked == CheckBox.checked){
529                        Matches++;
530                }
531                else{
532                        Feedback = I[QNum][3][ANum][1];
533                }
534        }
535//Add the hit readout
536        Feedback = Matches + ' / ' + I[QNum][3].length + '<br />' + Feedback;
537        if (Matches == I[QNum][3].length){
538//It's right
539                CalculateMultiSelQuestionScore(QNum);
540               
541//New for 6.2.2.0
542                var QsDone = CheckQuestionsCompleted();
543               
544                if (ContinuousScoring == true){
545                        CalculateOverallScore();
546                        if ((ContinuousScoring == true)||(Finished == true)){
547                                Feedback += '<br />' + YourScoreIs + ' ' + Score + '%.' + '<br />' + QsDone;
548                                WriteToInstructions(YourScoreIs + ' ' + Score + '%.' + '<br />' + QsDone);
549                        }
550                        else{
551                                WriteToInstructions(QsDone);
552                        }
553                }
554        }
555        else{
556//It's wrong -- Remove any previous score unless exercise is finished (6.0.3.8+)
557                if (Finished == false){
558                        WriteToInstructions(strInstructions);
559                }       
560        }
561               
562//Show the feedback
563        ShowMessage(Feedback);
564       
565//Check whether all questions are now done
566        CheckFinished();
567}
568
569function CalculateMultiSelQuestionScore(QNum){
570        var Tries = State[QNum][2];
571        var TotAns = State[QNum][1].length;
572       
573//Make sure it's not already complete
574        if (State[QNum][0] < 0){
575                State[QNum][0] = (TotAns - (Tries-1)) / TotAns;
576                if (State[QNum][0] < 0){
577                        State[QNum][0] = 0;
578                }
579        }
580}
581
582[/inclMultiSelect]
583
584function CalculateOverallScore(){
585        var TotalWeighting = 0;
586        var TotalScore = 0;
587       
588        for (var QNum=0; QNum<State.length; QNum++){
589                if (State[QNum] != null){
590                        if (State[QNum][0] > -1){
591                                TotalWeighting += I[QNum][0];
592                                TotalScore += (I[QNum][0] * State[QNum][0]);
593                        }
594                }
595        }
596        if (TotalWeighting > 0){
597                Score = Math.floor((TotalScore/TotalWeighting)*100);
598        }
599        else{
600//if TotalWeighting is 0, no questions so far have any value, so
601//no penalty should be shown.
602                Score = 100;
603        }
604}
605
606//New for 6.2.2.0
607function CheckQuestionsCompleted(){
608        if (ShowCompletedSoFar == false){return '';}
609        var QsCompleted = 0;
610        for (var QNum=0; QNum<State.length; QNum++){
611                if (State[QNum] != null){
612                        if (State[QNum][0] >= 0){
613                                QsCompleted++;
614                        }
615                }
616        }
617//Fixes for 6.2.2.2
618        if (QsCompleted >= QArray.length){
619                return ExerciseCompleted;
620        }
621        else{
622                return CompletedSoFar + ' ' + QsCompleted + '/' + QArray.length + '.';
623        }
624}
625
626function CheckFinished(){
627        var FB = '';
628        var AllDone = true;
629        for (var QNum=0; QNum<State.length; QNum++){
630                if (State[QNum] != null){
631                        if (State[QNum][0] < 0){
632                                AllDone = false;
633                        }
634                }
635        }
636        if (AllDone == true){
637       
638//Report final score and submit if necessary
639                CalculateOverallScore();
640                FB = YourScoreIs + ' ' + Score + '%.';
641                if (ShowCorrectFirstTime == true){
642                        var CFT = 0;
643                        for (QNum=0; QNum<State.length; QNum++){
644                                if (State[QNum] != null){
645                                        if (State[QNum][0] >= 1){
646                                                CFT++;
647                                        }
648                                }
649                        }
650                        FB += '<br />' + CorrectFirstTime + ' ' + CFT + '/' + QsToShow;
651                }
652               
653//New for 6.2.2.0
654                FB += '<br />' + ExerciseCompleted;
655               
656                WriteToInstructions(FB);
657               
658                Finished == true;
659[inclTimer]
660                window.clearInterval(Interval);
661[/inclTimer]
662
663[inclScorm1.2]
664                if (TimeOver == true){
665                        SetScormTimedOut();
666                }
667                else{
668                        SetScormComplete();
669                }
670[/inclScorm1.2]
671
672                TimeOver = true;
673                Locked = true;
674               
675[inclSendResults]
676                setTimeout('SendResults(' + Score + ')', 50);
677[/inclSendResults]
678
679                Finished = true;
680                Detail = '<?xml version="1.0"?><hpnetresult><fields>';
681                for (QNum=0; QNum<State.length; QNum++){
682                        if (State[QNum] != null){
683                                if (State[QNum][5].length > 0){
684                                        Detail += '<field><fieldname>Question #' + (QNum+1) + '</fieldname><fieldtype>question-tracking</fieldtype><fieldlabel>Q ' + (QNum+1) + '</fieldlabel><fieldlabelid>QuestionTrackingField</fieldlabelid><fielddata>' + State[QNum][5] + '</fielddata></field>';
685                                }
686                        }
687                }
688                Detail += '</fields></hpnetresult>';
689                setTimeout('Finish()', SubmissionTimeout);
690        }
691[inclScorm1.2]
692        else{
693                SetScormIncomplete();
694        }
695[/inclScorm1.2]
696}
697
698[inclTimer]
699function TimesUp(){
700        document.getElementById('Timer').innerHTML = '[strTimesUp]';
701[inclPreloadImages]
702        RefreshImages();
703[/inclPreloadImages]
704        TimeOver = true;
705        Finished = true;
706        ShowMessage('[strTimesUp]');
707       
708//Set all remaining scores to 0
709        for (var QNum=0; QNum<State.length; QNum++){
710                if (State[QNum] != null){
711                        if (State[QNum][0] < 0){
712                                State[QNum][0] = 0;
713                        }
714                }
715        }
716        CheckFinished();
717}
718[/inclTimer]
Note: See TracBrowser for help on using the repository browser.