root/trunk/max-javahotpot-tutorial/tutorial/eng/jquiz1.htm @ 35

Revision 35, 56.6 KB (checked in by max, 23 months ago)

mario.izquierdo
max-javahotpot-tutorial (3.1.max1)

  • New release
Line 
1<?xml version="1.0"?>
2       <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "xhtml11.dtd">
3       <html xmlns="http://www.w3.org/1999/xhtml"
4             xml:lang="en"><head><meta name="author" content="Created with Hot Potatoes by Half-Baked Software, registered to Martin Holmes."></meta><meta name="keywords" content="Hot Potatoes, Hot Potatoes, Half-Baked Software, Windows, University of Victoria"></meta>
5
6<link rel="schema.DC" href="http://purl.org/dc/elements/1.1/" />
7<meta name="DC:Creator" content="Martin Holmes" />
8<meta name="DC:Creator" content="UNREGISTERED" />
9<meta name="DC:Title" content="A Quiz made with JQuiz" />
10
11
12<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
13
14<title>
15A Quiz made with JQuiz
16</title>
17
18<!-- Made with executable version 6.0 Release 2 Build 0 -->
19
20<!-- The following insertion allows you to add your own code directly to this head tag from the configuration screen -->
21
22
23
24<style type="text/css">
25
26
27/* This is the CSS stylesheet used in the exercise. */
28/* Elements in square brackets are replaced by data based on configuration settings when the exercise is built. */
29
30
31body{
32        font-family: Geneva,Arial;
33        background-color: #ffffff;
34        color: #000000;
35 
36        margin-right: 5%;
37        margin-left: 5%;
38        font-size: small;
39}
40
41p{
42        text-align: left;
43        margin: 0px;
44        font-size: small;
45}
46
47div,span,td{
48        font-size: small;
49        color: #000000;
50}
51
52.RTLText{
53        text-align: right;
54        font-size: 150%;
55        direction: rtl;
56        font-family: "Simplified Arabic", "Traditional Arabic", "Times New Roman", Geneva,Arial;
57}
58
59.CentredRTLText{
60        text-align: center;
61        font-size: 150%;
62        direction: rtl;
63        font-family: "Simplified Arabic", "Traditional Arabic", "Times New Roman", Geneva,Arial;
64}
65
66button p.RTLText{
67        text-align: center;
68}
69
70.RTLGapBox{
71        text-align: right;
72        font-size: 150%;
73        direction: rtl;
74        font-family: "Times New Roman", Geneva,Arial;
75}
76
77.Guess{
78        font-weight: bold;
79}
80
81.CorrectAnswer{
82        font-weight: bold;
83}
84
85div.Titles{
86        padding: 10px;
87        text-align: center;
88        color: #000033;
89}
90
91button{
92        display: inline;
93}
94
95.ExerciseTitle{
96        font-size: large;
97        color: #000033;
98}
99
100.ExerciseSubtitle{
101        color: #000033;
102}
103
104div#Timer{
105        padding: 6px;
106        margin-left: auto;
107        margin-right: auto;
108        text-align: center;
109}
110
111span#TimerText{
112        padding: 6px;
113        border-width: 1px;
114        border-style: solid;
115        font-weight: bold;
116        display: none;
117}
118
119span.Instructions{
120
121}
122
123div.ExerciseText{
124
125}
126
127.FeedbackText{
128        color: #000033;
129}
130
131span.LeftItem{
132        font-size: small;
133        color: #000000;
134}
135
136span.RightItem{
137        font-weight: bold;
138        font-size: small;
139        color: #000000;
140}
141
142span.CorrectMark{
143
144}
145
146div.Feedback {
147        background-color: #ffffff;
148        left: 33%;
149        width: 34%;
150        top: 33%;
151        z-index: 1;
152        border-style: solid;
153        border-width: 1px;
154        padding: 5px;
155        text-align: center;
156        color: #000033;
157        position: absolute;
158        display: none;
159        font-size: small;
160}
161
162
163
164div.LeftContainer{
165        border-style: none;
166        padding: 2px 0px 2px 0px;
167        float: left;
168        width: 49.8%;
169        margin-bottom: 0px;
170}
171
172div.RightContainer{
173        border-style: none;
174        padding: 2px 0px 2px 0px;
175        float: right;
176        width: 49.8%;
177        margin-bottom: 0px;
178}
179
180.ReadingText{
181
182}
183
184
185div.ExerciseDiv{
186        color: #000000;
187}
188
189/* JMatch flashcard styles */
190table.FlashcardTable{
191        background-color: transparent;
192        color: #000000;
193        border-color: #000000;
194        margin-left: 5%;
195        margin-right: 5%;
196        margin-top: 2em;
197        margin-bottom: 2em;
198        width: 90%;
199        position: relative;
200        align: center;
201        padding: 0px;
202}
203
204table.FlashcardTable tr{
205        border-style: none;
206        margin: 0px;
207        padding: 0px;
208        background-color: #bbbbee;
209}
210
211table.FlashcardTable td.Showing{
212        font-size: large;
213        text-align: center;
214        width: 50%;
215        display: table-cell;
216        padding: 2em;
217        margin: 0px;
218        border-style: solid;
219        border-width: 1px;
220        color: #000000;
221        background-color: #bbbbee;
222}
223
224table.FlashcardTable td.Hidden{
225        display: none;
226}
227
228/* JMix styles */
229div#SegmentDiv{
230        margin-top: 2em;
231        margin-bottom: 2em;
232        text-align: center;
233}
234
235a.ExSegment{
236        font-size: medium;
237        font-weight: bold;
238        text-decoration: none;
239        color: #000000;
240}
241
242span.RemainingWordList{
243        font-style: italic;
244}
245
246div.DropLine {
247        position: absolute;
248        text-align: center;
249        border-bottom-style: solid;
250        border-bottom-width: 1px;
251        border-bottom-color: #000033;
252        width: 80%;
253}
254
255/* JCloze styles */
256
257input{
258        font-family: Geneva,Arial;
259        font-size: larger;
260}
261
262.ClozeWordList{
263        text-align: center;
264        font-weight: bold;
265}
266
267div.ClozeBody{
268        text-align: left;
269        margin-top: 2em;
270        margin-bottom: 2em;
271        line-height: 2.0
272}
273
274span.GapSpan{
275        font-weight: bold;
276}
277
278/* JCross styles */
279
280table.CrosswordGrid{
281        margin: auto auto 1em auto;
282        border-collapse: collapse;
283        padding: 0px;
284}
285
286table.CrosswordGrid td{
287        width: 1.5em;
288        height: 1.5em;
289        text-align: center;
290        vertical-align: middle;
291        font-size: large;
292        padding: 0px;
293        margin: 0px;
294        border-style: solid;
295        border-width: 1px;
296        border-color: #000000;
297}
298
299table.CrosswordGrid td.BlankCell{
300        background-color: #000000;
301        color: #000000;
302}
303
304table.CrosswordGrid td.LetterOnlyCell{
305        text-align: center;
306        vertical-align: middle;
307        background-color: #ffffff;
308        color: #000000;
309        font-weight: bold;
310}
311
312table.CrosswordGrid td.NumLetterCell{
313        text-align: left;
314        vertical-align: top;
315        background-color: #ffffff;
316        color: #000000;
317        padding: 1px;
318        font-weight: bold;
319}
320
321.NumLetterCellText{
322        cursor: pointer;
323}
324
325.GridNum{
326        vertical-align: super;
327        font-size: x-small;
328        font-weight: bold;
329        text-decoration: none;
330        color: #000000;
331}
332
333table#Clues{
334        margin: auto;
335        vertical-align: top;
336}
337
338table#Clues td{
339        vertical-align: top;
340}
341
342table.ClueList{
343  margin: auto;
344}
345
346td.ClueNum{
347        text-align: right;
348        font-weight: bold;
349        vertical-align: top;
350}
351
352td.Clue{
353        text-align: left;
354}
355
356div#ClueEntry{
357        text-align: left;
358        margin-bottom: 1em;
359}
360
361/* Keypad styles */
362
363div.Keypad{
364        text-align: center;
365}
366
367div.Keypad button{
368        font-family: Geneva,Arial;
369        font-size: 120%;
370        background-color: #ffffff;
371        color: #000000;
372        width: 2em;
373}
374
375/* JQuiz styles */
376
377div.QuestionNavigation{
378        text-align: center;
379}
380
381.QNum{
382        margin: 0em 1em 0.5em 1em;
383        font-weight: bold;
384        vertical-align: middle;
385}
386
387textarea{
388        font-family: Geneva,Arial;
389        font-size: larger;
390}
391
392.QuestionText{
393
394}
395
396.Answer{
397        font-size: 120%;
398        letter-spacing: 0.1em;
399}
400
401.Highlight{
402        color: #000000;
403        background-color: #ffff00;
404        font-weight: bold;
405        font-size: 120%;
406}
407
408ol.QuizQuestions{
409        text-align: left;
410        list-style-type: none;
411}
412
413li.QuizQuestion{
414        padding: 1em;
415        border-style: solid;
416        border-width: 0px 0px 1px 0px;
417}
418
419ol.MCAnswers{
420        text-align: left;
421        list-style-type: upper-alpha;
422        padding: 1em;
423}
424
425ol.MCAnswers li{
426        margin-bottom: 1em;
427}
428
429ol.MSelAnswers{
430        text-align: left;
431        list-style-type: lower-alpha;
432        padding: 1em;
433}
434
435div.ShortAnswer{
436        padding: 1em;
437}
438
439div.StdDiv{
440        background-color: #bbbbee;
441        text-align: center;
442        font-size: small;
443        color: #000000;
444        padding: 8px;
445        border-style: solid;
446        border-width: 1px 1px 1px 1px;
447        border-color: #000000;
448        margin: 1px;
449}
450
451.FuncButton {
452        text-align: center;
453        border-style: solid;
454
455        border-left-color: #ddddf6;
456        border-top-color: #ddddf6;
457        border-right-color: #5d5d77;
458        border-bottom-color: #5d5d77;
459        color: #000000;
460        background-color: #bbbbee;
461
462        border-width: 2px;
463        padding: 3px 6px 3px 6px;
464        cursor: pointer;
465}
466
467.FuncButtonUp {
468        color: #bbbbee;
469        text-align: center;
470        border-style: solid;
471
472        border-left-color: #ddddf6;
473        border-top-color: #ddddf6;
474        border-right-color: #5d5d77;
475        border-bottom-color: #5d5d77;
476
477        background-color: #000000;
478        color: #bbbbee;
479        border-width: 2px;
480        padding: 3px 6px 3px 6px;
481        cursor: pointer;
482}
483
484.FuncButtonDown {
485        color: #bbbbee;
486        text-align: center;
487        border-style: solid;
488
489        border-left-color: #5d5d77;
490        border-top-color: #5d5d77;
491        border-right-color: #ddddf6;
492        border-bottom-color: #ddddf6;
493        background-color: #000000;
494        color: #bbbbee;
495
496        border-width: 2px;
497        padding: 3px 6px 3px 6px;
498        cursor: pointer;
499}
500
501/*BeginNavBarStyle*/
502
503div.NavButtonBar{
504        background-color: #000066;
505        text-align: center;
506        margin: 2px 0px 2px 0px;
507        clear: both;
508        font-size: small;
509}
510
511.NavButton {
512        border-style: solid;
513       
514        border-left-color: #7f7fb2;
515        border-top-color: #7f7fb2;
516        border-right-color: #000033;
517        border-bottom-color: #000033;
518        background-color: #000066;
519        color: #ffffff;
520
521        border-width: 2px;
522        cursor: pointer;       
523}
524
525.NavButtonUp {
526        border-style: solid;
527
528        border-left-color: #7f7fb2;
529        border-top-color: #7f7fb2;
530        border-right-color: #000033;
531        border-bottom-color: #000033;
532        color: #000066;
533        background-color: #ffffff;
534
535        border-width: 2px;
536        cursor: pointer;       
537}
538
539.NavButtonDown {
540        border-style: solid;
541
542        border-left-color: #000033;
543        border-top-color: #000033;
544        border-right-color: #7f7fb2;
545        border-bottom-color: #7f7fb2;
546        color: #000066;
547        background-color: #ffffff;
548
549        border-width: 2px;
550        cursor: pointer;       
551}
552
553/*EndNavBarStyle*/
554
555a{
556        color: #0000ff;
557}
558
559a: visited{
560        color: #0000cc;
561}
562
563a:hover{
564        color: #0000ff;
565}
566
567div.CardStyle {
568        position: absolute;
569        font-family: Geneva,Arial;
570        font-size: small;
571        padding: 5px;
572        border-style: solid;
573        border-width: 1px;
574        color: #000000;
575        background-color: #bbbbee;
576        left: -50px;
577        top: -50px;
578        overflow: visible;
579}
580
581.rtl{
582        text-align: right;
583        font-size: large;
584}
585
586
587</style>
588
589<script type="text/javascript">
590
591//<![CDATA[
592
593<!--
594
595
596function Client(){
597//if not a DOM browser, hopeless
598        this.min = false; if (document.getElementById){this.min = true;};
599
600        this.ua = navigator.userAgent;
601        this.name = navigator.appName;
602        this.ver = navigator.appVersion; 
603
604//Get data about the browser
605        this.mac = (this.ver.indexOf('Mac') != -1);
606        this.win = (this.ver.indexOf('Windows') != -1);
607
608//Look for Gecko
609        this.gecko = (this.ua.indexOf('Gecko') > 1);
610        if (this.gecko){
611                this.geckoVer = parseInt(this.ua.substring(this.ua.indexOf('Gecko')+6, this.ua.length));
612                if (this.geckoVer < 20020000){this.min = false;}
613        }
614       
615//Look for Firebird
616        this.firebird = (this.ua.indexOf('Firebird') > 1);
617       
618//Look for Safari
619        this.safari = (this.ua.indexOf('Safari') > 1);
620        if (this.safari){
621                this.gecko = false;
622        }
623       
624//Look for IE
625        this.ie = (this.ua.indexOf('MSIE') > 0);
626        if (this.ie){
627                this.ieVer = parseFloat(this.ua.substring(this.ua.indexOf('MSIE')+5, this.ua.length));
628                if (this.ieVer < 5.5){this.min = false;}
629        }
630       
631//Look for Opera
632        this.opera = (this.ua.indexOf('Opera') > 0);
633        if (this.opera){
634                this.operaVer = parseFloat(this.ua.substring(this.ua.indexOf('Opera')+6, this.ua.length));
635                if (this.operaVer < 7.04){this.min = false;}
636        }
637        if (this.min == false){
638                alert('Your browser may not be able to handle this page.');
639        }
640       
641//Special case for the horrible ie5mac
642        this.ie5mac = (this.ie&&this.mac&&(this.ieVer<6));
643}
644
645var C = new Client();
646
647//for (prop in C){
648//      alert(prop + ': ' + C[prop]);
649//}
650
651
652
653//CODE FOR HANDLING NAV BUTTONS AND FUNCTION BUTTONS
654
655//[strNavBarJS]
656function NavBtnOver(Btn){
657        if (Btn.className != 'NavButtonDown'){Btn.className = 'NavButtonUp';}
658}
659
660function NavBtnOut(Btn){
661        Btn.className = 'NavButton';
662}
663
664function NavBtnDown(Btn){
665        Btn.className = 'NavButtonDown';
666}
667//[/strNavBarJS]
668
669function FuncBtnOver(Btn){
670        if (Btn.className != 'FuncButtonDown'){Btn.className = 'FuncButtonUp';}
671}
672
673function FuncBtnOut(Btn){
674        Btn.className = 'FuncButton';
675}
676
677function FuncBtnDown(Btn){
678        Btn.className = 'FuncButtonDown';
679}
680
681function FocusAButton(){
682        if (document.getElementById('CheckButton1') != null){
683                document.getElementById('CheckButton1').focus();
684        }
685        else{
686                if (document.getElementById('CheckButton2') != null){
687                        document.getElementById('CheckButton2').focus();
688                }
689                else{
690                        document.getElementsByTagName('button')[0].focus();
691                }
692        }
693}
694
695
696
697
698//CODE FOR HANDLING DISPLAY OF POPUP FEEDBACK BOX
699
700var topZ = 1000;
701
702function ShowMessage(Feedback){
703        var Output = Feedback + '<br /><br />';
704        document.getElementById('FeedbackContent').innerHTML = Output;
705        var FDiv = document.getElementById('FeedbackDiv');
706        topZ++;
707        FDiv.style.zIndex = topZ;
708        FDiv.style.top = TopSettingWithScrollOffset(30) + 'px';
709//IE can't focus a hidden div; Moz needs to focus before display to avoid jumping
710        if (C.gecko){
711                document.getElementById('FeedbackOKButton').focus();
712        }
713        FDiv.style.display = 'block';
714
715        ShowElements(false, 'input');
716        ShowElements(false, 'select');
717        ShowElements(false, 'object');
718        if (C.ie){
719                document.getElementById('FeedbackOKButton').focus();
720        }
721       
722//
723}
724
725function ShowElements(Show, TagName){
726//Special for IE bug -- hide all the form elements that will show through the popup
727        if (C.ie){
728                var Els = document.getElementsByTagName(TagName);
729                for (var i=0; i<Els.length; i++){
730                        if (Show == true){
731                                Els[i].style.display = 'inline';
732                        }
733                        else{
734                                Els[i].style.display = 'none';
735                        }
736                }
737        }
738}
739
740function HideFeedback(){
741        document.getElementById('FeedbackDiv').style.display = 'none';
742        ShowElements(true, 'input');
743        ShowElements(true, 'select');
744        ShowElements(true, 'object');
745        if (Finished == true){
746                Finish();
747        }
748}
749
750
751//GENERAL UTILITY FUNCTIONS AND VARIABLES
752
753//PAGE DIMENSION FUNCTIONS
754function PageDim(){
755//Get the page width and height
756        this.W = 600;
757        this.H = 400;
758        this.W = document.getElementsByTagName('body')[0].clientWidth;
759        this.H = document.getElementsByTagName('body')[0].clientHeight;
760}
761
762var pg = null;
763
764function GetPageXY(El) {
765        var XY = {x: 0, y: 0};
766        while(El){
767                XY.x += El.offsetLeft;
768                XY.y += El.offsetTop;
769                El = El.offsetParent;
770        }
771        return XY;
772}
773
774function GetScrollTop(){
775        if (document.documentElement && document.documentElement.scrollTop){
776                return document.documentElement.scrollTop;
777        }
778        else{
779                if (document.body){
780                        return document.body.scrollTop;
781                }
782                else{
783                        return window.pageYOffset;
784                }
785        }
786}
787
788function GetViewportHeight(){
789        if (window.innerWidth){
790                return window.innerWidth;
791        }
792        else{
793                return document.getElementsByTagName('body')[0].clientHeight;
794        }
795}
796
797function TopSettingWithScrollOffset(TopPercent){
798        var T = Math.floor(GetViewportHeight() * (TopPercent/100));
799        return GetScrollTop() + T;
800}
801
802//CODE FOR AVOIDING LOSS OF DATA WHEN BACKSPACE KEY INVOKES history.back()
803var InTextBox = false;
804
805function SuppressBackspace(e){
806        if (InTextBox == true){return;}
807        if (C.ie) {
808                thisKey = window.event.keyCode;
809        }
810        else {
811                thisKey = e.keyCode;
812        }
813
814        var Suppress = false;
815
816        if (thisKey == 8) {
817                Suppress = true;
818        }
819
820        if (Suppress == true){
821                if (C.ie){
822                        window.event.returnValue = false;       
823                        window.event.cancelBubble = true;
824                }
825                else{
826                        e.preventDefault();
827                }
828        }
829}
830
831if (C.ie){
832        document.attachEvent('onkeydown',SuppressBackspace);
833        window.attachEvent('onkeydown',SuppressBackspace);
834}
835else{
836        window.addEventListener('keypress',SuppressBackspace,false);
837}
838
839function ReduceItems(InArray, ReduceToSize){
840        var ItemToDump=0;
841        var j=0;
842        while (InArray.length > ReduceToSize){
843                ItemToDump = Math.floor(InArray.length*Math.random());
844                InArray.splice(ItemToDump, 1);
845        }
846}
847
848function Shuffle(InArray){
849        Temp = new Array();
850        var Len = InArray.length;
851
852        var j = Len;
853
854        for (var i=0; i<Len; i++){
855                Temp[i] = InArray[i];
856        }
857
858        for (i=0; i<Len; i++){
859                Num = Math.floor(j  *  Math.random());
860                InArray[i] = Temp[Num];
861
862                for (var k=Num; k < j; k++) {
863                        Temp[k] = Temp[k+1];
864                }
865                j--;
866        }
867        return InArray;
868}
869
870function WriteToInstructions(Feedback) {
871//      Feedback = '<span class="FeedbackText">' + Feedback + '</span>';
872        document.getElementById('InstructionsDiv').innerHTML = Feedback;
873
874}
875
876
877
878
879function EscapeDoubleQuotes(InString){
880        return InString.replace(/"/g, '&quot;')
881}
882
883function FocusAButton(){
884        if (document.getElementById('CheckButton1') != null){
885                document.getElementById('CheckButton1').focus();
886        }
887        else{
888                document.getElementsByTagName('button')[0].focus();
889        }
890}
891
892function TrimString(InString){
893        var x = 0;
894
895        if (InString.length != 0) {
896                while ((InString.charAt(InString.length - 1) == '\u0020') || (InString.charAt(InString.length - 1) == '\u000A') || (InString.charAt(InString.length - 1) == '\u000D')){
897                        InString = InString.substring(0, InString.length - 1)
898                }
899
900                while ((InString.charAt(0) == '\u0020') || (InString.charAt(0) == '\u000A') || (InString.charAt(0) == '\u000D')){
901                        InString = InString.substring(1, InString.length)
902                }
903
904                while (InString.indexOf('  ') != -1) {
905                        x = InString.indexOf('  ')
906                        InString = InString.substring(0, x) + InString.substring(x+1, InString.length)
907                 }
908
909                return InString;
910        }
911
912        else {
913                return '';
914        }
915}
916
917function FindLongest(InArray){
918        if (InArray.length < 1){return -1;}
919
920        var Longest = 0;
921        for (var i=1; i<InArray.length; i++){
922                if (InArray[i].length > InArray[Longest].length){
923                        Longest = i;
924                }
925        }
926        return Longest;
927}
928
929//UNICODE CHARACTER FUNCTIONS
930function IsCombiningDiacritic(CharNum){
931        var Result = (((CharNum >= 0x0300)&&(CharNum <= 0x370))||((CharNum >= 0x20d0)&&(CharNum <= 0x20ff)));
932        Result = Result || (((CharNum >= 0x3099)&&(CharNum <= 0x309a))||((CharNum >= 0xfe20)&&(CharNum <= 0xfe23)));
933        return Result;
934}
935
936function IsCJK(CharNum){
937        return ((CharNum >= 0x3000)&&(CharNum < 0xd800));
938}
939
940//SETUP FUNCTIONS
941//BROWSER WILL REFILL TEXT BOXES FROM CACHE IF NOT PREVENTED
942function ClearTextBoxes(){
943        var NList = document.getElementsByTagName('input');
944        for (var i=0; i<NList.length; i++){
945                if (NList[i].id.indexOf('Guess') > -1){
946                        NList[i].value = '';
947                }
948                if (NList[i].id.indexOf('Chk') > -1){
949                        NList[i].checked = '';
950                }
951        }
952}
953
954//EXTENSION TO ARRAY OBJECT
955function Array_IndexOf(Input){
956        var Result = -1;
957        for (var i=0; i<this.length; i++){
958                if (this[i] == Input){
959                        Result = i;
960                }
961        }
962        return Result;
963}
964Array.prototype.indexOf = Array_IndexOf;
965
966//IE HAS RENDERING BUG WITH BOTTOM NAVBAR
967function RemoveBottomNavBarForIE(){
968        if (C.ie){
969                if (document.getElementById('BottomNavBar') != null){
970                        document.getElementById('TheBody').removeChild(document.getElementById('BottomNavBar'));
971                }
972        }
973}
974
975
976
977
978//HOTPOTNET-RELATED CODE
979
980var HPNStartTime = (new Date()).getTime();
981var SubmissionTimeout = 30000;
982var Detail = ''; //Global that is used to submit tracking data
983
984function Finish(){
985//If there's a form, fill it out and submit it
986        if (document.store != null){
987                Frm = document.store;
988                Frm.starttime.value = HPNStartTime;
989                Frm.endtime.value = (new Date()).getTime();
990                Frm.mark.value = Score;
991                Frm.detail.value = Detail;
992                Frm.submit();
993        }
994}
995
996
997
998//JQUIZ CORE JAVASCRIPT CODE
999
1000var CurrQNum = 0;
1001var CorrectIndicator = ':-)';
1002var IncorrectIndicator = 'X';
1003var YourScoreIs = 'Your score is ';
1004var ContinuousScoring = true;
1005var CorrectFirstTime = 'Questions answered correctly first time: ';
1006var ShowCorrectFirstTime = false;
1007var ShuffleQs = false;
1008var ShuffleAs = false;
1009var DefaultRight = 'Correct!';
1010var DefaultWrong = 'Sorry! Try again.';
1011var QsToShow = 7;
1012var Score = 0;
1013var Finished = false;
1014var Qs = null;
1015var QArray = new Array();
1016var ShowingAllQuestions = false;
1017var ShowAllQuestionsCaption = 'Show all questions';
1018var ShowOneByOneCaption = 'Show questions one by one';
1019var State = new Array();
1020var Feedback = '';
1021
1022function CompleteEmptyFeedback(){
1023        var QNum, ANum;
1024        for (QNum=0; QNum<I.length; QNum++){
1025                for (ANum = 0; ANum<I[QNum][3].length; ANum++){
1026                        if (I[QNum][3][ANum][1].length < 1){
1027                                if (I[QNum][3][ANum][2] > 0){
1028                                        I[QNum][3][ANum][1] = DefaultRight;
1029                                }
1030                                else{
1031                                        I[QNum][3][ANum][1] = DefaultWrong;
1032                                }
1033                        }
1034                }
1035        }
1036}
1037
1038function SetUpQuestions(){
1039        var AList = new Array();
1040        var QList = new Array();
1041        var i, j;
1042        Qs = document.getElementById('Questions');
1043        while (Qs.getElementsByTagName('li').length > 0){
1044                QList.push(Qs.removeChild(Qs.getElementsByTagName('li')[0]));
1045        }
1046        var DumpItem = 0;
1047        while (QsToShow < QList.length){
1048                DumpItem = Math.floor(QList.length*Math.random());
1049                for (j=DumpItem; j<(QList.length-1); j++){
1050                        QList[j] = QList[j+1];
1051                }
1052                QList.length = QList.length-1;
1053        }
1054        if (ShuffleQs == true){
1055                QList = Shuffle(QList);
1056        }
1057        if (ShuffleAs == true){
1058                var As;
1059                for (var i=0; i<QList.length; i++){
1060                        As = QList[i].getElementsByTagName('ol')[0];
1061                        if (As != null){
1062                        AList.length = 0;
1063                                while (As.getElementsByTagName('li').length > 0){
1064                                        AList.push(As.removeChild(As.getElementsByTagName('li')[0]));
1065                                }
1066                                AList = Shuffle(AList);
1067                                for (j=0; j<AList.length; j++){
1068                                        As.appendChild(AList[j]);
1069                                }
1070                        }
1071                }
1072        }
1073       
1074        for (i=0; i<QList.length; i++){
1075                Qs.appendChild(QList[i]);
1076                QArray[QArray.length] = QList[i];
1077        }
1078
1079//Show the first item
1080        QArray[0].style.display = '';
1081       
1082//Now hide all except the first item
1083        for (i=1; i<QArray.length; i++){
1084                QArray[i].style.display = 'none';
1085        }               
1086        SetQNumReadout();
1087}
1088
1089function ChangeQ(ChangeBy){
1090        if (((CurrQNum + ChangeBy) < 0)||((CurrQNum + ChangeBy) >= QArray.length)){return;}
1091        QArray[CurrQNum].style.display = 'none';
1092        CurrQNum += ChangeBy;
1093        QArray[CurrQNum].style.display = '';
1094        SetQNumReadout();
1095//if there's a textbox, set the focus in it
1096        if (QArray[CurrQNum].getElementsByTagName('input')[0] != null){
1097                QArray[CurrQNum].getElementsByTagName('input')[0].focus();
1098        }
1099}
1100
1101function SetQNumReadout(){
1102        document.getElementById('QNumReadout').innerHTML = (CurrQNum+1) + ' / ' + QArray.length;
1103}
1104
1105I=new Array();
1106I[0]=new Array();I[0][0]=100;
1107I[0][1]='';
1108I[0][2]='0';
1109I[0][3]=new Array();
1110I[0][3][0]=new Array('four','It\'s more than that!',0,0,1);
1111I[0][3][1]=new Array('five','It\'s more than five!',0,0,1);
1112I[0][3][2]=new Array('unlimited','Correct! You can include as many answers as you like for any JQuiz question.',1,100,1);
1113I[1]=new Array();I[1][0]=100;
1114I[1][1]='';
1115I[1][2]='0';
1116I[1][3]=new Array();
1117I[1][3][0]=new Array('True','Sorry! Try again.',0,0,1);
1118I[1][3][1]=new Array('False','Correct! Well done.',1,100,1);
1119I[2]=new Array();I[2][0]=100;
1120I[2][1]='';
1121I[2][2]='0';
1122I[2][3]=new Array();
1123I[2][3][0]=new Array('It will go down.','That would be a little annoying for the user. Why not try it and find out?',0,0,1);
1124I[2][3][1]=new Array('It will remain the same.','Correct! This allows you to view the feedback for wrong answers after getting the correct one.',1,100,1);
1125I[2][3][2]=new Array('It will rise.','That would be a little confusing for the user. Why not try it and find out?',0,0,1);
1126I[2][3][3]=new Array('It will be set to zero.','That would be a little annoying for the user. Why not try it and find out?',0,0,1);
1127I[3]=new Array();I[3][0]=100;
1128I[3][1]='';
1129I[3][2]='0';
1130I[3][3]=new Array();
1131I[3][3][0]=new Array('3','You can have only three questions in the Windows version until you register. Then you can have more.',0,0,1);
1132I[3][3][1]=new Array('100','Sorry! You can have more than 100.',0,0,1);
1133I[3][3][2]=new Array('1000','Sorry! You can have more than 1000.',0,0,1);
1134I[3][3][3]=new Array('unlimited','Correct! There is no limit to the number of questions in a quiz. However, if there are too many questions, the Web pages may become slow.',1,100,1);
1135I[4]=new Array();I[4][0]=100;
1136I[4][1]='';
1137I[4][2]='1';
1138I[4][3]=new Array();
1139I[4][3][0]=new Array('JQuiz','Correct! JQuiz makes exercises with multiple-choice, short-answer and multiple-select questions.',1,100,1);
1140I[4][3][1]=new Array('Hot Potatoes','That\'s not exactly correct. Hot Potatoes is the <em>suite</em> of programs; what\'s the actual program used to make question-based quizzes?',0,50,1);
1141I[4][3][2]=new Array('JBC','JBC was the old Potato used to make multiple-choice exercises in previous versions of Hot Potatoes. JBC is no longer part of Hot Potatoes; it has been combined with one of the other Potatoes.',0,0,1);
1142I[5]=new Array();I[5][0]=100;
1143I[5][1]='';
1144I[5][2]='2';
1145I[5][3]=new Array();
1146I[5][3][0]=new Array('JCross','Sorry! JCross makes crosswords.',0,0,1);
1147I[5][3][1]=new Array('JJumble','Sorry! That\'s not what it\'s called.',0,0,1);
1148I[5][3][2]=new Array('JCloze','Sorry! JCloze makes gapfill exercises.',0,0,1);
1149I[5][3][3]=new Array('JMix','Correct! JMix can be used to make mixed-up sentence or mixed-up word exercises.',1,100,1);
1150I[6]=new Array();I[6][0]=100;
1151I[6][1]='';
1152I[6][2]='3';
1153I[6][3]=new Array();
1154I[6][3][0]=new Array('JQuiz','Hint: Don\'t forget the Potato that makes question-based quizzes.',1,100,1);
1155I[6][3][1]=new Array('JCloth','Hint: JCloths are cleaning supplies!',0,0,1);
1156I[6][3][2]=new Array('JCloze','Hint: Don\'t forget the Potato that makes gap-fill exercises.',1,100,1);
1157I[6][3][3]=new Array('JMatch','Hint: Don\'t forget the Potato that makes matching exercises.',1,100,1);
1158I[6][3][4]=new Array('JCPenney','Hint: J C Penney is a department store.',0,0,1);
1159I[6][3][5]=new Array('JCross','Hint: Don\'t forget the Potato that makes crosswords.',1,100,1);
1160I[6][3][6]=new Array('JMix','Hint: Don\'t forget the Potato that makes jumbled-sentence exercises.',1,100,1);
1161I[6][3][7]=new Array('The Masher','Hint: The Masher is an important part of Hot Potatoes.',1,100,1);
1162I[6][3][8]=new Array('JLeno','Hint: Jay Leno is a talk-show host!',0,0,1);
1163
1164
1165function StartUp(){
1166        RemoveBottomNavBarForIE();
1167       
1168
1169       
1170
1171       
1172        CompleteEmptyFeedback();
1173
1174        SetUpQuestions();
1175        ClearTextBoxes();
1176        CreateStatusArray();
1177       
1178
1179       
1180}
1181
1182function ShowHideQuestions(){
1183        FuncBtnOut(document.getElementById('ShowMethodButton'));
1184        document.getElementById('ShowMethodButton').style.display = 'none';
1185        if (ShowingAllQuestions == false){
1186                for (var i=0; i<QArray.length; i++){
1187                                QArray[i].style.display = '';
1188                        }
1189                document.getElementById('Questions').style.listStyleType = 'decimal';
1190                document.getElementById('OneByOneReadout').style.display = 'none';
1191                document.getElementById('ShowMethodButton').innerHTML = ShowOneByOneCaption;
1192                ShowingAllQuestions = true;
1193        }
1194        else{
1195                for (var i=0; i<QArray.length; i++){
1196                                if (i != CurrQNum){
1197                                        QArray[i].style.display = 'none';
1198                                }
1199                        }
1200                document.getElementById('Questions').style.listStyleType = 'none';
1201                document.getElementById('OneByOneReadout').style.display = '';
1202                document.getElementById('ShowMethodButton').innerHTML = ShowAllQuestionsCaption;
1203                ShowingAllQuestions = false;   
1204        }
1205        document.getElementById('ShowMethodButton').style.display = 'inline';
1206}
1207
1208function CreateStatusArray(){
1209        var QNum, ANum;
1210//For each item in the item array
1211        for (QNum=0; QNum<I.length; QNum++){
1212//Check if the question still exists (hasn't been nuked by showing a random selection)
1213                if (document.getElementById('Q_' + QNum) != null){
1214                        State[QNum] = new Array();
1215                        State[QNum][0] = -1; //Score for this q; -1 shows question not done yet
1216                        State[QNum][1] = new Array(); //answers
1217                        for (ANum = 0; ANum<I[QNum][3].length; ANum++){
1218                                State[QNum][1][ANum] = 0; //answer not chosen yet; when chosen, will store its position in the series of choices
1219                        }
1220                        State[QNum][2] = 0; //tries at this q so far
1221                        State[QNum][3] = 0; //incrementing percent-correct values of selected answers
1222                        State[QNum][4] = 0; //penalties incurred for hints
1223                        State[QNum][5] = ''; //Sequence of answers chosen by number
1224                }
1225                else{
1226                        State[QNum] = null;
1227                }
1228        }
1229}
1230
1231
1232
1233function CheckMCAnswer(QNum, ANum, Btn){
1234//if question doesn't exist, bail
1235        if (State[QNum].length < 1){return;}
1236       
1237//Get the feedback
1238        Feedback = I[QNum][3][ANum][1];
1239       
1240//Now show feedback and bail if question already complete
1241        if (State[QNum][0] > -1){
1242                ShowMessage(Feedback);
1243                return;
1244        }
1245       
1246//Hide the button while processing
1247        Btn.style.display = 'none';
1248
1249//Increment the number of tries
1250        State[QNum][2]++;
1251       
1252//Add the percent-correct value of this answer
1253        State[QNum][3] += I[QNum][3][ANum][3];
1254       
1255//Store the try number in the answer part of the State array, for tracking purposes
1256        State[QNum][1][ANum] = State[QNum][2];
1257        State[QNum][5] += String.fromCharCode(65+ANum) + ',';
1258       
1259//Should this answer be accepted as correct?
1260        if (I[QNum][3][ANum][2] < 1){
1261//It's wrong
1262
1263//Mark the answer
1264                Btn.innerHTML = IncorrectIndicator;
1265               
1266//Check whether this leaves just one MC answer unselected, in which case the Q is terminated
1267                var RemainingAnswer = FinalAnswer(QNum);
1268                if (RemainingAnswer > -1){
1269//Behave as if the last answer had been selected, but give no credit for it
1270//Increment the number of tries
1271                        State[QNum][2]++;               
1272               
1273//Calculate the score for this question
1274                        CalculateMCQuestionScore(QNum);
1275
1276//Get the overall score and add it to the feedback
1277                        CalculateOverallScore();
1278                        if ((ContinuousScoring == true)||(Finished == true)){
1279                                Feedback += '<br />' + YourScoreIs + ' ' + Score + '%.';
1280                                WriteToInstructions(YourScoreIs + ' ' + Score + '%.');
1281                        }
1282                }
1283        }
1284        else{
1285//It's right
1286//Mark the answer
1287                Btn.innerHTML = CorrectIndicator;
1288                               
1289//Calculate the score for this question
1290                CalculateMCQuestionScore(QNum);
1291
1292//Get the overall score and add it to the feedback
1293                if (ContinuousScoring == true){
1294                        CalculateOverallScore();
1295                        if ((ContinuousScoring == true)||(Finished == true)){
1296                                Feedback += '<br />' + YourScoreIs + ' ' + Score + '%.';
1297                                WriteToInstructions(YourScoreIs + ' ' + Score + '%.');
1298                        }
1299                }
1300        }
1301       
1302//Show the button again
1303        Btn.style.display = 'inline';
1304       
1305//Finally, show the feedback   
1306        ShowMessage(Feedback);
1307       
1308//Check whether all questions are now done
1309        CheckFinished();
1310}
1311
1312function CalculateMCQuestionScore(QNum){
1313        var Tries = State[QNum][2] + State[QNum][4]; //include tries and hint penalties
1314        var PercentCorrect = State[QNum][3];
1315        var TotAns = GetTotalMCAnswers(QNum);
1316        var HintPenalties = State[QNum][4];
1317       
1318//Make sure it's not already complete
1319
1320        if (State[QNum][0] < 0){
1321//Allow for Hybrids
1322                if (HintPenalties >= 1){
1323                        State[QNum][0] = 0;
1324                }
1325                else{
1326                        State[QNum][0] = ((TotAns-(Tries-1))/TotAns)*(PercentCorrect/(100*Tries));
1327                }
1328                if (State[QNum][0] < 0){
1329                        State[QNum][0] = 0;
1330                }
1331        }
1332}
1333
1334function GetTotalMCAnswers(QNum){
1335        var Result = 0;
1336        for (var ANum=0; ANum<I[QNum][3].length; ANum++){
1337                if (I[QNum][3][ANum][4] == 1){ //This is an MC answer
1338                        Result++;
1339                }
1340        }
1341        return Result;
1342}
1343
1344function FinalAnswer(QNum){
1345        var UnchosenAnswers = 0;
1346        var FinalAnswer = -1;
1347        for (var ANum=0; ANum<I[QNum][3].length; ANum++){
1348                if (I[QNum][3][ANum][4] == 1){ //This is an MC answer
1349                        if (State[QNum][1][ANum] < 1){ //This answer hasn't been chosen yet
1350                                UnchosenAnswers++;
1351                                FinalAnswer = ANum;
1352                        }
1353                }
1354        }
1355        if (UnchosenAnswers == 1){
1356                return FinalAnswer;
1357        }
1358        else{
1359                return -1;
1360        }
1361}
1362
1363
1364
1365
1366
1367function CheckMultiSelAnswer(QNum){
1368//bail if question doesn't exist or exercise finished
1369        if ((State[QNum].length < 1)||(Finished == true)){return;}
1370
1371//Increment the tries for this question
1372        State[QNum][2]++;
1373       
1374        var ShouldBeChecked;
1375        var Matches = 0;
1376        State[QNum][5] += '|';
1377       
1378//Check if there are any mismatches
1379        Feedback = '';
1380        var CheckBox = null;
1381        for (var ANum=0; ANum<I[QNum][3].length; ANum++){
1382                CheckBox = document.getElementById('Q_' + QNum + '_' + ANum + '_Chk');
1383                if (CheckBox.checked == true){
1384                        State[QNum][5] += 'Y';
1385                }
1386                else{
1387                        State[QNum][5] += 'N';
1388                }
1389                ShouldBeChecked = (I[QNum][3][ANum][2] == 1);
1390                if (ShouldBeChecked == CheckBox.checked){
1391                        Matches++;
1392                }
1393                else{
1394                        Feedback = I[QNum][3][ANum][1];
1395                }
1396        }
1397//Add the hit readout
1398        Feedback = Matches + ' / ' + I[QNum][3].length + '<br />' + Feedback;
1399        if (Matches == I[QNum][3].length){
1400//It's right
1401                CalculateMultiSelQuestionScore(QNum);
1402                if (ContinuousScoring == true){
1403                        CalculateOverallScore();
1404                        if ((ContinuousScoring == true)||(Finished == true)){
1405                                Feedback += '<br />' + YourScoreIs + ' ' + Score + '%.';
1406                                WriteToInstructions(YourScoreIs + ' ' + Score + '%.');
1407                        }
1408                }
1409        }
1410//If it's wrong, no need to do anything but show the feedback
1411        ShowMessage(Feedback);
1412       
1413//Check whether all questions are now done
1414        CheckFinished();
1415}
1416
1417function CalculateMultiSelQuestionScore(QNum){
1418        var Tries = State[QNum][2];
1419        var TotAns = State[QNum][1].length;
1420       
1421//Make sure it's not already complete
1422        if (State[QNum][0] < 0){
1423                State[QNum][0] = (TotAns - (Tries-1)) / TotAns;
1424                if (State[QNum][0] < 0){
1425                        State[QNum][0] = 0;
1426                }
1427        }
1428}
1429
1430
1431
1432function CalculateOverallScore(){
1433        var TotalWeighting = 0;
1434        var TotalScore = 0;
1435       
1436        for (var QNum=0; QNum<State.length; QNum++){
1437                if (State[QNum] != null){
1438                        if (State[QNum][0] > -1){
1439                                TotalWeighting += I[QNum][0];
1440                                TotalScore += (I[QNum][0] * State[QNum][0]);
1441                        }
1442                }
1443        }
1444        Score = Math.floor((TotalScore/TotalWeighting)*100);
1445}
1446
1447function CheckFinished(){
1448        var FB = '';
1449        var AllDone = true;
1450        for (var QNum=0; QNum<State.length; QNum++){
1451                if (State[QNum] != null){
1452                        if (State[QNum][0] < 0){
1453                                AllDone = false;
1454                        }
1455                }
1456        }
1457        if (AllDone == true){
1458       
1459//Report final score and submit if necessary
1460                CalculateOverallScore();
1461                FB = YourScoreIs + ' ' + Score + '%.';
1462                if (ShowCorrectFirstTime == true){
1463                        var CFT = 0;
1464                        for (QNum=0; QNum<State.length; QNum++){
1465                                if (State[QNum] != null){
1466                                        if (State[QNum][0] >= 1){
1467                                                CFT++;
1468                                        }
1469                                }
1470                        }
1471                        FB += '<br />' + CorrectFirstTime + ' ' + CFT + '/' + QsToShow;
1472                }
1473                WriteToInstructions(FB);
1474               
1475                Finished == true;
1476
1477                TimeOver = true;
1478                Locked = true;
1479               
1480
1481
1482                Finished = true;
1483                Detail = '<?xml version="1.0"?><hpnetresult><fields>';
1484                for (QNum=0; QNum<State.length; QNum++){
1485                        if (State[QNum] != null){
1486                                if (State[QNum][5].length > 0){
1487                                        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>';
1488                                }
1489                        }
1490                }
1491                Detail += '</fields></hpnetresult>';
1492                setTimeout('Finish()', SubmissionTimeout);
1493        }
1494}
1495
1496
1497
1498
1499
1500//CORE CODE FOR CHECKING SHORT ANSWER GUESSES AGAINST ANSWER ARRAYS
1501
1502var CaseSensitive = false;
1503var ShowAlsoCorrect = true;
1504var PleaseEnter = 'Please enter a guess.';
1505var HybridTries = 2;
1506var PartlyIncorrect = 'Your answer is partly wrong: ';
1507var CorrectList = 'Correct answers: ';
1508var NextCorrect = 'Next correct letter in the answer: ';
1509var CurrBox = null;
1510
1511function TrackFocus(BoxID){
1512        InTextBox = true;
1513        CurrBox = document.getElementById(BoxID);
1514}
1515
1516function LeaveGap(){
1517        InTextBox = false;
1518}
1519
1520function TypeChars(Chars){
1521        if (CurrBox != null){
1522//              if (CurrBox.style.display != 'none'){
1523                        CurrBox.value += Chars;
1524//              }
1525        }
1526}
1527
1528function CheckGuess(Guess, Answer, CaseSensitive, PercentCorrect, Feedback){
1529        this.Guess = Guess;
1530        this.Answer = Answer;
1531        this.PercentCorrect = PercentCorrect;
1532        this.Feedback = Feedback;
1533        if (CaseSensitive == false){
1534                this.WorkingGuess = Guess.toLowerCase();
1535                this.WorkingAnswer = Answer.toLowerCase();
1536        }
1537        else{
1538                this.WorkingGuess = Guess;
1539                this.WorkingAnswer = Answer;                           
1540        }
1541        this.Hint = '';
1542        this.HintPenalty = 1/Answer.length;
1543        this.CorrectStart = '';
1544        this.WrongMiddle = '';
1545        this.CorrectEnd = '';
1546        this.PercentMatch = 0;
1547        this.DoCheck();
1548}
1549
1550function CheckGuess_DoCheck(){
1551//Check if it's an exact match
1552        if (this.WorkingAnswer == this.WorkingGuess){
1553                this.PercentMatch = 100;
1554                this.CorrectStart = this.Guess;
1555        return;
1556        }
1557//Figure out how much of the beginning is correct
1558        var i = 0;
1559        var CorrectChars = 0;
1560        while (this.WorkingAnswer.charAt(i) == this.WorkingGuess.charAt(i)){
1561                i++;
1562                CorrectChars++;
1563        }
1564//Stash the hint
1565        this.Hint = this.Answer.charAt(i);
1566       
1567        this.CorrectStart = this.Guess.substring(0, i);
1568//Figure out how much of the end is correct
1569        var j = this.WorkingGuess.length-1;
1570        var k = this.WorkingAnswer.length-1;
1571        while ((this.WorkingAnswer.charAt(k) == this.WorkingGuess.charAt(j))&&(CorrectChars < this.Answer.length)){
1572                CorrectChars++;
1573                j--;
1574                k--;
1575        }
1576        this.CorrectEnd = this.Guess.substring(j+1, this.Guess.length);
1577        this.WrongMiddle = this.Guess.substring(i, j+1);
1578        if (TrimString(this.WrongMiddle).length < 1){this.WrongMiddle = '_____';}
1579//Calculate match score based on how much of the guess is correct
1580        if (CorrectChars < this.Answer.length){
1581                this.PercentMatch = Math.floor(100*CorrectChars)/this.Answer.length;
1582        }
1583        else{
1584                this.PercentMatch = Math.floor((100 * CorrectChars)/this.Guess.length);
1585        }       
1586}
1587
1588CheckGuess.prototype.DoCheck = CheckGuess_DoCheck;
1589
1590function CheckAnswerArray(CaseSensitive){
1591        this.CaseSensitive = CaseSensitive;
1592        this.Answers = new Array();
1593        this.Score = 0;
1594        this.Feedback = '';
1595        this.Hint = '';
1596        this.HintPenalty = 0;
1597        this.MatchedAnswerLength = 1;
1598        this.CompleteMatch = false;
1599        this.MatchNum = -1;
1600}
1601
1602function CheckAnswerArray_AddAnswer(Guess, Answer, PercentCorrect, Feedback){
1603        this.Answers.push(new CheckGuess(Guess, Answer, this.CaseSensitive, PercentCorrect, Feedback));
1604}
1605
1606CheckAnswerArray.prototype.AddAnswer = CheckAnswerArray_AddAnswer;
1607
1608function CheckAnswerArray_ClearAll(){
1609        this.Answers.length = 0;
1610}
1611
1612CheckAnswerArray.prototype.ClearAll = CheckAnswerArray_ClearAll;
1613
1614function CheckAnswerArray_GetBestMatch(){
1615//First check for a 100% match
1616        for (var i=0; i<this.Answers.length; i++){
1617                if (this.Answers[i].PercentMatch == 100){
1618                        this.Feedback = this.Answers[i].Feedback;
1619                        this.Score = this.Answers[i].PercentCorrect;
1620                        this.CompleteMatch = true;
1621                        this.MatchNum = i;
1622                        return;
1623                }
1624        }
1625//Now check for the best alternative match
1626        var PercentMatch = 0;
1627        var BestMatch = -1;
1628        for (i=0; i<this.Answers.length; i++){
1629                if ((this.Answers[i].PercentMatch > PercentMatch)&&(this.Answers[i].PercentCorrect == 100)){
1630                        BestMatch = i;
1631                        PercentMatch = this.Answers[i].PercentMatch;
1632                }
1633        }
1634        if (BestMatch > -1){
1635                this.Score = this.Answers[BestMatch].PercentMatch;
1636                this.Feedback = PartlyIncorrect + ' ';
1637                this.Feedback += '<span class="Answer">' + this.Answers[BestMatch].CorrectStart;
1638                this.Feedback += '<span class="Highlight">' + this.Answers[BestMatch].WrongMiddle + '</span>';
1639                this.Feedback += this.Answers[BestMatch].CorrectEnd + '</span>';
1640                this.Hint = '<span class="Answer">' + this.Answers[BestMatch].CorrectStart;
1641                this.Hint += '<span class="Highlight">' + this.Answers[BestMatch].Hint + '</span></span>';
1642                this.HintPenalty = this.Answers[BestMatch].HintPenalty;
1643        }
1644        else{
1645                this.Score = 0;
1646                this.Feedback = '';
1647        }
1648}
1649
1650CheckAnswerArray.prototype.GetBestMatch = CheckAnswerArray_GetBestMatch;
1651
1652function CheckShortAnswer(QNum){
1653//bail if question doesn't exist or exercise finished
1654        if ((State[QNum].length < 1)||(Finished == true)){return;}
1655       
1656//bail if question already complete
1657        if (State[QNum][0] > -1){return;}
1658
1659//Get the guess
1660        var G = document.getElementById('Q_' + QNum + '_Guess').value;
1661       
1662//If no guess, bail with message; no penalty
1663        if (G.length < 1){
1664                ShowMessage(PleaseEnter);
1665                return;
1666        }
1667
1668//Increment tries
1669        State[QNum][2]++;
1670       
1671//Create a check object
1672        var CA = new CheckAnswerArray(CaseSensitive);
1673
1674        CA.ClearAll();
1675        for (var ANum=0; ANum<I[QNum][3].length; ANum++){
1676                CA.AddAnswer(G, I[QNum][3][ANum][0], I[QNum][3][ANum][3], I[QNum][3][ANum][1]);
1677        }
1678        CA.GetBestMatch();
1679       
1680//Store any match in the state tracking field
1681        if (CA.MatchNum > -1){
1682                State[QNum][5] += String.fromCharCode(65+CA.MatchNum) + ',';
1683        }
1684
1685//Add the percent correct value for this answer to the Q State (works for all
1686//situations, wrong or right
1687        State[QNum][3] += CA.Score;
1688       
1689//Now branch, based on the nature of the match
1690//Is it a complete match?
1691        if (CA.CompleteMatch == true){
1692               
1693//Is it with a wrong answer, or a right answer?
1694                if (CA.Score == 100){
1695//It's right
1696                        CalculateShortAnsQuestionScore(QNum);
1697//Get correct answer list if required, assuming there are any other correct alternatives
1698                        if (ShowAlsoCorrect == true){
1699                                var AlsoCorrectList = GetCorrectList(QNum, G, false);
1700                                if (AlsoCorrectList.length > 0){
1701                                        CA.Feedback += '<br />' + CorrectList + '<br />' +  '<span class="Answer">' + AlsoCorrectList + '</span>';
1702                                }
1703                        }       
1704               
1705//Get the overall score and add it to the feedback
1706                        if (ContinuousScoring == true){
1707                                CalculateOverallScore();
1708                                CA.Feedback += '<br />' + YourScoreIs + ' ' + Score + '%.';
1709                                WriteToInstructions(YourScoreIs + ' ' + Score + '%.');
1710                        }
1711                        ShowMessage(CA.Feedback);
1712//Put the answer in
1713                        ReplaceGuessBox(QNum, G);
1714                        CheckFinished();
1715                        return;
1716                }
1717        }
1718       
1719//Otherwise, it's a match to a predicted wrong/partially correct, or a partial
1720//match to a right answer
1721        if (CA.Feedback.length < 1){CA.Feedback = DefaultWrong;}
1722        ShowMessage(CA.Feedback);
1723
1724//If necessary, switch a hybrid question to m/c
1725        if (State[QNum][2] >= HybridTries){
1726                SwitchHybridDisplay(QNum);
1727        }
1728}
1729
1730function CalculateShortAnsQuestionScore(QNum){
1731        var Tries = State[QNum][2] + State[QNum][4]; //include tries and hint penalties;
1732        var PercentCorrect = State[QNum][3];
1733        var HintPenalties = State[QNum][4];
1734
1735//Make sure it's not already complete
1736        if (State[QNum][0] < 0){
1737                if (HintPenalties >= 1){
1738                        State[QNum][0] = 0;
1739                }
1740                else{
1741                        State[QNum][0] = (PercentCorrect/(100*Tries));
1742                }
1743                if (State[QNum][0] < 0){
1744                        State[QNum][0] = 0;
1745                }
1746        }
1747}
1748
1749function SwitchHybridDisplay(QNum){
1750        if (document.getElementById('Q_' + QNum + '_Hybrid_MC') != null){
1751                document.getElementById('Q_' + QNum + '_Hybrid_MC').style.display = '';
1752                if (document.getElementById('Q_' + QNum + '_SA') != null){
1753                        document.getElementById('Q_' + QNum + '_SA').style.display = 'none';
1754                }
1755        }
1756}
1757
1758function GetCorrectArray(QNum){
1759        var Result = new Array();
1760        for (var ANum=0; ANum<I[QNum][3].length; ANum++){
1761                if (I[QNum][3][ANum][2] == 1){ //This is an acceptable correct answer
1762                        Result.push(I[QNum][3][ANum][0]);
1763                }
1764        }       
1765        return Result;
1766}
1767
1768function GetCorrectList(QNum, Answer, IncludeAnswer){
1769        var As = GetCorrectArray(QNum);
1770        var Result = '';
1771        for (var ANum=0; ANum<As.length; ANum++){
1772                if ((IncludeAnswer == true)||(As[ANum] != Answer)){
1773                        Result += As[ANum] + '<br />';
1774                }
1775        }
1776        return Result;
1777}
1778
1779function GetFirstCorrectAnswer(QNum){
1780        var As = GetCorrectArray(QNum);
1781        if (As.length > 0){
1782                return As[0];
1783        }
1784        else{
1785                return '';
1786        }
1787}
1788
1789function ReplaceGuessBox(QNum, Ans){
1790        if (document.getElementById('Q_' + QNum + '_SA') != null){
1791                var El = document.getElementById('Q_' + QNum + '_SA');
1792                while (El.childNodes.length > 0){
1793                        El.removeChild(El.childNodes[0]);
1794                }
1795                var A = document.createElement('span');
1796                A.setAttribute('class', 'Answer');
1797                var T = document.createTextNode(Ans);
1798                A.appendChild(T);
1799                El.appendChild(A);
1800        }
1801}
1802
1803
1804
1805function ShowAnswers(QNum){
1806//bail if question doesn't exist or exercise finished
1807        if ((State[QNum].length < 1)||(Finished == true)){return;}
1808       
1809//Get the answer list to display
1810        var Ans = GetCorrectList(QNum, '', false);
1811        Ans = CorrectList + '<br /><span class="Answer">' + Ans + '</span>';
1812       
1813//Display feedback
1814        ShowMessage(Ans);
1815       
1816//Set the score for this question to 0 if no
1817        if (State[QNum][0] < 1){
1818                State[QNum][0] = 0;
1819        }
1820
1821//Get the first correct answer
1822        var FirstAns = GetFirstCorrectAnswer(QNum);
1823       
1824//Replace the textbox
1825        ReplaceGuessBox(QNum, FirstAns);
1826       
1827//This may be the last, so check finished status
1828        CheckFinished();
1829}
1830
1831
1832
1833
1834
1835function ShowHint(QNum){
1836//bail if question doesn't exist or exercise finished
1837        if ((State[QNum].length < 1)||(Finished == true)){return;}
1838       
1839//bail if question already complete
1840        if (State[QNum][0] > -1){return;}
1841
1842//Get the guess
1843        var G = document.getElementById('Q_' + QNum + '_Guess').value;
1844       
1845//If no guess, give the first correct bit
1846        if (G.length < 1){
1847                var Ans = GetFirstCorrectAnswer(QNum);
1848                var Hint = Ans.charAt(0);
1849                ShowMessage(NextCorrect + '<br />' + Hint);
1850//Penalty for hint
1851                State[QNum][4] += (1/Ans.length);
1852                return;
1853        }
1854
1855//Increment tries
1856        State[QNum][2]++;
1857       
1858//Create a check object
1859        var CA = new CheckAnswerArray(CaseSensitive);
1860
1861        CA.ClearAll();
1862        for (var ANum=0; ANum<I[QNum][3].length; ANum++){
1863//Use only correct answers
1864                if (I[QNum][3][ANum][2] == 1){
1865                        CA.AddAnswer(G, I[QNum][3][ANum][0], I[QNum][3][ANum][3], I[QNum][3][ANum][1]);
1866                }
1867        }
1868        CA.GetBestMatch();
1869        if (CA.CompleteMatch == true){
1870//It's right!
1871                CheckShortAnswer(QNum);
1872                return;
1873        }
1874        else{
1875                if (CA.Hint.length > 0){
1876                        ShowMessage(NextCorrect + '<br />' + CA.Hint);
1877                        State[QNum][4] += CA.HintPenalty;
1878                }
1879                else{
1880                        ShowMessage(DefaultWrong + '<br />' + NextCorrect + '<br />' + GetFirstCorrectAnswer(QNum)[0]);
1881                }
1882        }
1883}
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893//-->
1894
1895//]]>
1896
1897</script>
1898
1899
1900</head>
1901
1902<body onload="StartUp()" id="TheBody">
1903
1904<!-- BeginTopNavButtons -->
1905
1906
1907<div class="NavButtonBar" id="TopNavBar">
1908
1909
1910
1911
1912
1913
1914<button class="NavButton" onfocus="NavBtnOver(this)" onblur="NavBtnOut(this)" onmouseover="NavBtnOver(this)" onmouseout="NavBtnOut(this)" onmousedown="NavBtnDown(this)" onmouseup="NavBtnOut(this)" onclick="location='jcloze1.htm'; return false;">Next example</button>
1915
1916
1917</div>
1918
1919
1920
1921<!-- EndTopNavButtons -->
1922
1923<div class="Titles">
1924        <h2 class="ExerciseTitle">A Quiz made with JQuiz</h2>
1925        <h3 class="ExerciseSubtitle">Choose the correct answer for each question.</h3>
1926
1927
1928</div>
1929
1930<div id="InstructionsDiv" class="StdDiv">
1931        <p id="Instructions"></p>
1932</div>
1933
1934
1935<div class="LeftContainer">
1936
1937        <div id="Reading" class="StdDiv">
1938
1939                <div id="ReadingDiv">
1940<h3 class="ExerciseSubtitle">A Quiz made with JQuiz</h3><p>This is a typical JQuiz quiz. In this box, there is a reading text. The reading text may be entered directly into the JQuiz program by choosing <strong>File / Add Reading Text</strong>. Alternatively, you may choose not to include a reading text at all. All of the Hot Potatoes applications allow you to include a reading text.<br /><br />On the other side of the screen, you'll see the first of the questions. You can answer the first question by clicking on one of the answer buttons; you can keep choosing answers until you get one which is correct. When you've answered a question, you can move on to the next one using the arrow buttons above the question. You can also choose to see all the questions together, by clicking on the "Show all questions" button.</p>
1941                </div>
1942        </div>
1943
1944</div>
1945
1946
1947<div class="RightContainer">
1948
1949
1950
1951<div id="MainDiv" class="StdDiv">
1952 
1953<div class="QuestionNavigation">
1954
1955<p style="text-align: right;">
1956<button id="ShowMethodButton" class="FuncButton" onfocus="FuncBtnOver(this)" onblur="FuncBtnOut(this)" onmouseover="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)" onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOver(this)" onclick="ShowHideQuestions(); return false;">Show all questions</button>
1957</p>
1958
1959<div id="OneByOneReadout">
1960<button id="PrevQButton" class="FuncButton" onfocus="FuncBtnOver(this)" onblur="FuncBtnOut(this)" onmouseover="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)" onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOver(this)" onclick="ChangeQ(-1); return false;">&lt;=</button>
1961
1962<span id="QNumReadout" class="QNum">&nbsp;</span>
1963
1964<button id="NextQButton" class="FuncButton" onfocus="FuncBtnOver(this)" onblur="FuncBtnOut(this)" onmouseover="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)" onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOver(this)" onclick="ChangeQ(1); return false;">=&gt;</button>
1965<br />
1966</div>
1967
1968</div>
1969 
1970<ol class="QuizQuestions" id="Questions">
1971<li class="QuizQuestion" id="Q_0" style="display: none;"><p class="QuestionText">What's the maximum number of answers you can include in a multiple-choice quiz question?</p><ol class="MCAnswers"><li id="Q_0_0"><button class="FuncButton" onfocus="FuncBtnOver(this)" onblur="FuncBtnOut(this)" onmouseover="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)"  onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)" id="Q_0_0_Btn" onclick="CheckMCAnswer(0,0,this)">&nbsp;&nbsp;?&nbsp;&nbsp;</button>&nbsp;&nbsp;four</li><li id="Q_0_1"><button class="FuncButton" onfocus="FuncBtnOver(this)" onblur="FuncBtnOut(this)" onmouseover="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)"  onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)" id="Q_0_1_Btn" onclick="CheckMCAnswer(0,1,this)">&nbsp;&nbsp;?&nbsp;&nbsp;</button>&nbsp;&nbsp;five</li><li id="Q_0_2"><button class="FuncButton" onfocus="FuncBtnOver(this)" onblur="FuncBtnOut(this)" onmouseover="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)"  onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)" id="Q_0_2_Btn" onclick="CheckMCAnswer(0,2,this)">&nbsp;&nbsp;?&nbsp;&nbsp;</button>&nbsp;&nbsp;unlimited</li></ol></li>
1972<li class="QuizQuestion" id="Q_1" style="display: none;"><p class="QuestionText">True or false: You must include a reading text.</p><ol class="MCAnswers"><li id="Q_1_0"><button class="FuncButton" onfocus="FuncBtnOver(this)" onblur="FuncBtnOut(this)" onmouseover="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)"  onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)" id="Q_1_0_Btn" onclick="CheckMCAnswer(1,0,this)">&nbsp;&nbsp;?&nbsp;&nbsp;</button>&nbsp;&nbsp;True</li><li id="Q_1_1"><button class="FuncButton" onfocus="FuncBtnOver(this)" onblur="FuncBtnOut(this)" onmouseover="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)"  onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)" id="Q_1_1_Btn" onclick="CheckMCAnswer(1,1,this)">&nbsp;&nbsp;?&nbsp;&nbsp;</button>&nbsp;&nbsp;False</li></ol></li>
1973<li class="QuizQuestion" id="Q_2" style="display: none;"><p class="QuestionText">Imagine that you click on Question 1 Answer A, which is correct, and your score is 100%. If you then click on Answer B for the same question, what will happen to your score?</p><ol class="MCAnswers"><li id="Q_2_0"><button class="FuncButton" onfocus="FuncBtnOver(this)" onblur="FuncBtnOut(this)" onmouseover="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)"  onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)" id="Q_2_0_Btn" onclick="CheckMCAnswer(2,0,this)">&nbsp;&nbsp;?&nbsp;&nbsp;</button>&nbsp;&nbsp;It will go down.</li><li id="Q_2_1"><button class="FuncButton" onfocus="FuncBtnOver(this)" onblur="FuncBtnOut(this)" onmouseover="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)"  onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)" id="Q_2_1_Btn" onclick="CheckMCAnswer(2,1,this)">&nbsp;&nbsp;?&nbsp;&nbsp;</button>&nbsp;&nbsp;It will remain the same.</li><li id="Q_2_2"><button class="FuncButton" onfocus="FuncBtnOver(this)" onblur="FuncBtnOut(this)" onmouseover="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)"  onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)" id="Q_2_2_Btn" onclick="CheckMCAnswer(2,2,this)">&nbsp;&nbsp;?&nbsp;&nbsp;</button>&nbsp;&nbsp;It will rise.</li><li id="Q_2_3"><button class="FuncButton" onfocus="FuncBtnOver(this)" onblur="FuncBtnOut(this)" onmouseover="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)"  onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)" id="Q_2_3_Btn" onclick="CheckMCAnswer(2,3,this)">&nbsp;&nbsp;?&nbsp;&nbsp;</button>&nbsp;&nbsp;It will be set to zero.</li></ol></li>
1974<li class="QuizQuestion" id="Q_3" style="display: none;"><p class="QuestionText">How many questions can a JQuiz exercise have?</p><ol class="MCAnswers"><li id="Q_3_0"><button class="FuncButton" onfocus="FuncBtnOver(this)" onblur="FuncBtnOut(this)" onmouseover="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)"  onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)" id="Q_3_0_Btn" onclick="CheckMCAnswer(3,0,this)">&nbsp;&nbsp;?&nbsp;&nbsp;</button>&nbsp;&nbsp;3</li><li id="Q_3_1"><button class="FuncButton" onfocus="FuncBtnOver(this)" onblur="FuncBtnOut(this)" onmouseover="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)"  onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)" id="Q_3_1_Btn" onclick="CheckMCAnswer(3,1,this)">&nbsp;&nbsp;?&nbsp;&nbsp;</button>&nbsp;&nbsp;100</li><li id="Q_3_2"><button class="FuncButton" onfocus="FuncBtnOver(this)" onblur="FuncBtnOut(this)" onmouseover="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)"  onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)" id="Q_3_2_Btn" onclick="CheckMCAnswer(3,2,this)">&nbsp;&nbsp;?&nbsp;&nbsp;</button>&nbsp;&nbsp;1000</li><li id="Q_3_3"><button class="FuncButton" onfocus="FuncBtnOver(this)" onblur="FuncBtnOut(this)" onmouseover="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)"  onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)" id="Q_3_3_Btn" onclick="CheckMCAnswer(3,3,this)">&nbsp;&nbsp;?&nbsp;&nbsp;</button>&nbsp;&nbsp;unlimited</li></ol></li>
1975<li class="QuizQuestion" id="Q_4" style="display: none;"><p class="QuestionText">This is another type of question you can use. This one is a short-answer question:<br /><br />What is the name of the program used to make this exercise?</p><div class="ShortAnswer" id="Q_4_SA"><form method="post" action="" onsubmit="return false;"><div><input type="text" id="Q_4_Guess" onfocus="TrackFocus('Q_4_Guess')" onblur="LeaveGap()" class="GapBox" size="9"></input><br /><br /><button class="FuncButton" onfocus="FuncBtnOver(this)" onblur="FuncBtnOut(this)" onmouseover="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)"  onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)" onclick="CheckShortAnswer(4)">Check</button><button class="FuncButton" onfocus="FuncBtnOver(this)" onblur="FuncBtnOut(this)" onmouseover="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)"  onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)" onclick="ShowHint(4)">Hint</button><button class="FuncButton" onfocus="FuncBtnOver(this)" onblur="FuncBtnOut(this)" onmouseover="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)"  onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)" onclick="ShowAnswers(4)">Show answer</button></div></form></div></li>
1976<li class="QuizQuestion" id="Q_5" style="display: none;"><p class="QuestionText">This question type is a new feature in version 6 of Hot Potatoes. It's called a <strong>hybrid</strong> question. It starts off as a short-answer question, but if you get it wrong twice, it will turn into a multiple-choice question to make it easier.<br /><br />Which Potato is used to make jumbled-sentence exercises?</p><div class="ShortAnswer" id="Q_5_SA"><form method="post" action="" onsubmit="return false;"><div><input type="text" id="Q_5_Guess" onfocus="TrackFocus('Q_5_Guess')" onblur="LeaveGap()" class="GapBox" size="9"></input><br /><br /><button class="FuncButton" onfocus="FuncBtnOver(this)" onblur="FuncBtnOut(this)" onmouseover="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)"  onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)" onclick="CheckShortAnswer(5)">Check</button><button class="FuncButton" onfocus="FuncBtnOver(this)" onblur="FuncBtnOut(this)" onmouseover="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)"  onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)" onclick="ShowHint(5)">Hint</button><button class="FuncButton" onfocus="FuncBtnOver(this)" onblur="FuncBtnOut(this)" onmouseover="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)"  onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)" onclick="ShowAnswers(5)">Show answer</button></div></form></div><ol class="MCAnswers" id="Q_5_Hybrid_MC" style="display: none;"><li id="Q_5_0"><button class="FuncButton" onfocus="FuncBtnOver(this)" onblur="FuncBtnOut(this)" onmouseover="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)"  onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)" id="Q_5_0_Btn" onclick="CheckMCAnswer(5,0,this)">&nbsp;&nbsp;?&nbsp;&nbsp;</button>&nbsp;&nbsp;JCross</li><li id="Q_5_1"><button class="FuncButton" onfocus="FuncBtnOver(this)" onblur="FuncBtnOut(this)" onmouseover="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)"  onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)" id="Q_5_1_Btn" onclick="CheckMCAnswer(5,1,this)">&nbsp;&nbsp;?&nbsp;&nbsp;</button>&nbsp;&nbsp;JJumble</li><li id="Q_5_2"><button class="FuncButton" onfocus="FuncBtnOver(this)" onblur="FuncBtnOut(this)" onmouseover="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)"  onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)" id="Q_5_2_Btn" onclick="CheckMCAnswer(5,2,this)">&nbsp;&nbsp;?&nbsp;&nbsp;</button>&nbsp;&nbsp;JCloze</li><li id="Q_5_3"><button class="FuncButton" onfocus="FuncBtnOver(this)" onblur="FuncBtnOut(this)" onmouseover="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)"  onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)" id="Q_5_3_Btn" onclick="CheckMCAnswer(5,3,this)">&nbsp;&nbsp;?&nbsp;&nbsp;</button>&nbsp;&nbsp;JMix</li></ol></li>
1977<li class="QuizQuestion" id="Q_6" style="display: none;"><p class="QuestionText">This question illustrates the <strong>multi-select</strong> question type.<br /><br />Which of the following are Hot Potatoes programs?</p><ol class="MSelAnswers"><li id="Q_6_0"><form method="post" action="" onsubmit="return false;"><div><input type="checkbox" id="Q_6_0_Chk" class="MSelCheckbox" />JQuiz</div></form></li><li id="Q_6_1"><form method="post" action="" onsubmit="return false;"><div><input type="checkbox" id="Q_6_1_Chk" class="MSelCheckbox" />JCloth</div></form></li><li id="Q_6_2"><form method="post" action="" onsubmit="return false;"><div><input type="checkbox" id="Q_6_2_Chk" class="MSelCheckbox" />JCloze</div></form></li><li id="Q_6_3"><form method="post" action="" onsubmit="return false;"><div><input type="checkbox" id="Q_6_3_Chk" class="MSelCheckbox" />JMatch</div></form></li><li id="Q_6_4"><form method="post" action="" onsubmit="return false;"><div><input type="checkbox" id="Q_6_4_Chk" class="MSelCheckbox" />JCPenney</div></form></li><li id="Q_6_5"><form method="post" action="" onsubmit="return false;"><div><input type="checkbox" id="Q_6_5_Chk" class="MSelCheckbox" />JCross</div></form></li><li id="Q_6_6"><form method="post" action="" onsubmit="return false;"><div><input type="checkbox" id="Q_6_6_Chk" class="MSelCheckbox" />JMix</div></form></li><li id="Q_6_7"><form method="post" action="" onsubmit="return false;"><div><input type="checkbox" id="Q_6_7_Chk" class="MSelCheckbox" />The Masher</div></form></li><li id="Q_6_8"><form method="post" action="" onsubmit="return false;"><div><input type="checkbox" id="Q_6_8_Chk" class="MSelCheckbox" />JLeno</div></form></li></ol><button class="FuncButton" onfocus="FuncBtnOver(this)" onblur="FuncBtnOut(this)" onmouseover="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)"  onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)" onclick="CheckMultiSelAnswer(6)">Check</button></li></ol>
1978
1979
1980
1981</div>
1982
1983
1984</div>
1985
1986
1987<div class="Feedback" id="FeedbackDiv">
1988<div class="FeedbackText" id="FeedbackContent"></div>
1989<button id="FeedbackOKButton" class="FuncButton" onfocus="FuncBtnOver(this)" onblur="FuncBtnOut(this)" onmouseover="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)" onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)" onclick="HideFeedback(); return false;">&nbsp;OK&nbsp;</button>
1990</div>
1991
1992<!-- BeginBottomNavButtons -->
1993
1994
1995<div class="NavButtonBar" id="BottomNavBar">
1996
1997
1998
1999
2000
2001
2002<button class="NavButton" onfocus="NavBtnOver(this)" onblur="NavBtnOut(this)" onmouseover="NavBtnOver(this)" onmouseout="NavBtnOut(this)" onmousedown="NavBtnDown(this)" onmouseup="NavBtnOut(this)" onclick="location='jcloze1.htm'; return false;">Next example</button>
2003
2004
2005</div>
2006
2007
2008
2009<!-- EndBottomNavButtons -->
2010
2011<!-- BeginSubmissionForm -->
2012
2013<!-- EndSubmissionForm -->
2014
2015</body>
2016
2017</html>
Note: See TracBrowser for help on using the browser.