root/trunk/max-javahotpot-tutorial/tutorial/jquiz1.htm

Revision 35, 57.3 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 Ismail Ali Gago."></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="Ismail Ali Gago" />
8<meta name="DC:Creator" content="UNREGISTERED" />
9<meta name="DC:Title" content="Un Test realizado con JQuiz" />
10
11
12<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
13
14<title>
15Un Test realizado con 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 = ':-(';
1003var YourScoreIs = 'Su puntuaci&#x00F3;n es';
1004var ContinuousScoring = true;
1005var CorrectFirstTime = 'Preguntas respondidas correctamente a la primera:';
1006var ShowCorrectFirstTime = false;
1007var ShuffleQs = false;
1008var ShuffleAs = false;
1009var DefaultRight = 'Correcto';
1010var DefaultWrong = 'Lo siento, pruebe otra vez';
1011var QsToShow = 7;
1012var Score = 0;
1013var Finished = false;
1014var Qs = null;
1015var QArray = new Array();
1016var ShowingAllQuestions = false;
1017var ShowAllQuestionsCaption = 'Mostrar todas las preguntas';
1018var ShowOneByOneCaption = 'Mostrar las preguntas de una en una';
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('cuatro','Son m\u00E1s',0,0,1);
1111I[0][3][1]=new Array('cinco','Mas de cinco',0,0,1);
1112I[0][3][2]=new Array('ilimitadas','Correcto. Se pueden incluir todas las respuestas que se quieran ',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('Verdadero','Lo siento, pruebe de nuevo.',0,0,1);
1118I[1][3][1]=new Array('Falso','Correcto, bien hecho.',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('Disminuir\u00E1','Eso ser\u00EDa un poco raro \u00BFno?. Por qu\u00E9 no lo prueba para ver lo que ocurre.',0,0,1);
1124I[2][3][1]=new Array('Permanecer\u00E1 igual','Correcto, esto le permitir\u00E1 ver las indicaciones para las respuestas incorrectas despu\u00E9s de haber acertado la pregunta.',1,100,1);
1125I[2][3][2]=new Array('Aumentar\u00E1.','Eso producir\u00EDa confusi\u00F3n. Por qu\u00E9 no lo prueba para ver lo que ocurre.',0,0,1);
1126I[2][3][3]=new Array('Se pondr\u00E1 a cero.','Eso ser\u00EDa un poco raro \u00BFno?. Por qu\u00E9 no lo prueba para ver lo que ocurre.',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','En la versi\u00F3n para Windows, solamene tres hasta que registre el programain. Despu\u00E9s puede poner mas.',0,0,1);
1132I[3][3][1]=new Array('100','Lo siento, puede haber mas de 100.',0,0,1);
1133I[3][3][2]=new Array('1000','Lo siento, puede haber mas de 100.',0,0,1);
1134I[3][3][3]=new Array('ilimitadas','Correcto, no hay l\u00EDmite al n\u00FAmero de pregunta. No obstante, si hay muchas preguntas las p\u00E1ginas tardar\u00E1 mucho en cargarse',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','Correcto, JQuiz puede elaborar ejercicios con preguntas de respuestas m\u00FAltiples, respuestas cortas y de multiselecci\u00F3n.',1,100,1);
1140I[4][3][1]=new Array('Hot Potatoes','Eso no es del todo correcto. Hot Potatoes es el <em>conjunto</em> de programas.',0,50,1);
1141I[4][3][2]=new Array('JBC','JBC era la antigua Patata utilizada para elaborar ejercicios de respuestas m\u00FAltiples en las versiones anteriores de Hot 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','No es correcto, JCross crea crucigramas.',0,0,1);
1147I[5][3][1]=new Array('JJumble','No es correcto, ese nombre no existe.',0,0,1);
1148I[5][3][2]=new Array('JCloze','No es correcto, JCloze es para ejerciicos de rellenar huecos.',0,0,1);
1149I[5][3][3]=new Array('JMix','Correcto, JMix puede utilizarse para elaborar ese tipo de ejercicios.',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','Pista: No se olvide de la Patata que realiza test basados en preguntas cortas.',1,100,1);
1155I[6][3][1]=new Array('JCloth','Pista: JCloths son sumnistros de limpieza',0,0,1);
1156I[6][3][2]=new Array('JCloze','Pista: No se olvide de la Patata que elabora ejercicios de rellenar huecos.',1,100,1);
1157I[6][3][3]=new Array('JMatch','Pista: No se olvide de la Patata que elabora ejercicios de empaerjamientos.',1,100,1);
1158I[6][3][4]=new Array('JCPenney','Pista: J C Penney es un almacen.',0,0,1);
1159I[6][3][5]=new Array('JCross','Pista: No se olvide de la Patata que elabora crucigramas.',1,100,1);
1160I[6][3][6]=new Array('JMix','Pista: No se olvide de la Patata que elabora ejercicos de ordenar palabras o frases.',1,100,1);
1161I[6][3][7]=new Array('The Masher','Pista: The Masher es un componente importante de Hot Potatoes.',1,100,1);
1162I[6][3][8]=new Array('JLeno','Pista: Jay Leno no tiene nada que ver con Hot Potatoes',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 = 'Por favor escriba una respuesta.';
1505var HybridTries = 2;
1506var PartlyIncorrect = 'Su respuesta es parcialmente incorrecta: ';
1507var CorrectList = 'Respuestas correctas: ';
1508var NextCorrect = 'Siguiente letra correcta en la respuesta: ';
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;">Siguiente ejemplo</button>
1915
1916
1917</div>
1918
1919
1920
1921<!-- EndTopNavButtons -->
1922
1923<div class="Titles">
1924        <h2 class="ExerciseTitle">Un Test realizado con JQuiz</h2>
1925        <h3 class="ExerciseSubtitle">Elija la respuesta correcta para cada pregunta.</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">Un Test realizado con JQuiz</h3><p>Este es el t&#x00ED;pico cuestionario de JQuiz. En esta ventana hay un texto para leer. El texto de esta lectura podr&#x00ED;a escribirse directamente en el programa JQuiz seleccionando <strong>Archivo / A&#x00F1;adir lectura</strong>. Tambi&#x00E9;n podr&#x00ED;a optar por no incluir un texto para ser le&#x00ED;do. Todas las herramientas de Hot Potatoes le permiten incluir una lectura.<br /><br />En la otra zona de la pantalla ver&#x00E1; la primera de las preguntas. Puede contestarla pulsando sobre uno de los botones de respuestas; puede elegir la respuesta tantas veces como quiera hasta dar con la respuesta correcta. Cuando termine, puede pasar a la siguiente pregunta mediante los botones de flecha que se encuentran en la parte superior de la pregunta. Tambi&#x00E9;n puede optar por ver todas las pregunta seguidas pulsando en el bot&#x00F3;n "Mostrar todas las preguntas".</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;">Mostrar todas las preguntas</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">&#x00BF;Cu&#x00E1;l es el n&#x00FA;mero m&#x00E1;ximo de respuestas que pueden incluirse en un pregunta de respuestas m&#x00FA;ltiples?</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;cuatro</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;cinco</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;ilimitadas</li></ol></li>
1972<li class="QuizQuestion" id="Q_1" style="display: none;"><p class="QuestionText">Verdadero o falso: Usted deber&#x00E1; incluir una lectura.</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;Verdadero</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;Falso</li></ol></li>
1973<li class="QuizQuestion" id="Q_2" style="display: none;"><p class="QuestionText">Imagine que usted pulsa en la Pregunta 1 la Respuesta A, que es correcta, y su puntuaci&#x00F3;n es 100%. Si despu&#x00E9;s pulsa en la Respuesta B de la misma pregunta, &#x00BF;qu&#x00E9; ocurrir&#x00E1; con su puntuaci&#x00F3;n?</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;Disminuir&#x00E1;</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;Permanecer&#x00E1; igual</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;Aumentar&#x00E1;.</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;Se pondr&#x00E1; a cero.</li></ol></li>
1974<li class="QuizQuestion" id="Q_3" style="display: none;"><p class="QuestionText">&#x00BF;Cu&#x00E1;ntas preguntas puede haber en un ejercicio de JQuiz?</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;ilimitadas</li></ol></li>
1975<li class="QuizQuestion" id="Q_4" style="display: none;"><p class="QuestionText">Este es otro tipo de pregunta. Es una pregunta de respuesta corta<br /><br />&#x00BF;Cu&#x00E1;l es el nombre del programa utilizado para elaborar este ejercicio?</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)">Comprobar</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)">Pista</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)">Mostrar respuesta</button></div></form></div></li>
1976<li class="QuizQuestion" id="Q_5" style="display: none;"><p class="QuestionText">Este tipo de pregunta es una nueva caracter&#x00ED;stica de la versi&#x00F3;n 6 de Hot Potatoes. Se denomina pregunta <strong>h&#x00ED;brida</strong>. Comienza como una pregunta de respuesta corta, pero si se equivoca dos veces, se convierte en pregunta de respuesta m&#x00FA;ltiple para que sea mas facil .<br /><br />&#x00BF;Cu&#x00E1;l es la Patata que se utiliza para elaborar ejercicios de ordenar las letras de una palabra?</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)">Comprobar</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)">Pista</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)">Mostrar respuesta</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">Esta pergunta nos muestra el tipo de pregunta de <strong>multiselecci&#x00F3;n</strong>.<br /><br />&#x00BF;Cu&#x00E1;l de los siguientes son programas de Hot Potatoes?</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)">Comprobar</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;">Siguiente ejemplo</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.