Quiz+2



<!DOCTYPE html PUBLIC "-W3CDTD XHTML 1.1//EN" "xhtml11.dtd">

  









HOJA DE CALCULO 2



/* This is the CSS stylesheet used in the exercise. */

/* Elements in square brackets are replaced by data based on configuration settings when the exercise is built. */

/* BeginCorePageCSS */

/* Made with executable version 6.3 Release 0 Build 4 */

/* Hack to hide a nested Quicktime player from IE, which can't handle it. */

html object.MediaPlayerNotForIE {

display: none;

}

body{

font-family: Geneva,Arial,sans-serif;

background-color: #C0C0C0;

color: #000000;

margin-right: 5%;

margin-left: 5%;

font-size: small;

}

p{

text-align: left;

margin: 0px;

font-size: 100%;

}

table,div,span,td{

font-size: 100%;

color: #000000;

}

div.Titles{

padding: 0.5em;;

text-align: center;

color: #000000;

}

button{

font-family: Geneva,Arial,sans-serif;

font-size: 100%;

display: inline;

}

.ExerciseTitle{

font-size: 140%;

color: #000000;

}

.ExerciseSubtitle{

font-size: 120%;

color: #000000;

}

div.StdDiv{

background-color: #FFFFFF;

text-align: center;

font-size: 100%;

color: #000000;

padding: 0.5em;

border-style: solid;

border-width: 1px 1px 1px 1px;

border-color: #000000;

margin-bottom: 1px;

}

/* EndCorePageCSS */

.RTLText{

text-align: right;

font-size: 150%;

direction: rtl;

font-family: "Simplified Arabic", "Traditional Arabic", "Times New Roman", Geneva,Arial,sans-serif;

}

.CentredRTLText{

text-align: center;

font-size: 150%;

direction: rtl;

font-family: "Simplified Arabic", "Traditional Arabic", "Times New Roman", Geneva,Arial,sans-serif;

}

button p.RTLText{

text-align: center;

}

.RTLGapBox{

text-align: right;

font-size: 150%;

direction: rtl;

font-family: "Times New Roman", Geneva,Arial,sans-serif;

}

.Guess{

font-weight: bold;

}

.CorrectAnswer{

font-weight: bold;

}

div#Timer{

padding: 0.25em;

margin-left: auto;

margin-right: auto;

text-align: center;

color: #000000;

}

span#TimerText{

padding: 0.25em;

border-width: 1px;

border-style: solid;

font-weight: bold;

display: none;

color: #000000;

}

span.Instructions{

}

div.ExerciseText{

}

.FeedbackText, .FeedbackText span.CorrectAnswer, .FeedbackText span.Guess, .FeedbackText span.Answer{

color: #000000;

}

.LeftItem{

font-size: 100%;

color: #000000;

text-align: left;

}

.RightItem{

font-weight: bold;

font-size: 100%;

color: #000000;

}

span.CorrectMark{

}

input, textarea{

font-family: Geneva,Arial,sans-serif;

font-size: 120%;

}

select{

font-size: 100%;

}

div.Feedback {

background-color: #C0C0C0;

left: 33%;

width: 34%;

top: 33%;

z-index: 1;

border-style: solid;

border-width: 1px;

padding: 5px;

text-align: center;

color: #000000;

position: absolute;

display: none;

font-size: 100%;

}

div.ExerciseDiv{

color: #000000;

}

/* JMatch flashcard styles */

table.FlashcardTable{

background-color: transparent;

color: #000000;

border-color: #000000;

margin-left: 5%;

margin-right: 5%;

margin-top: 2em;

margin-bottom: 2em;

width: 90%;

position: relative;

text-align: center;

padding: 0px;

}

table.FlashcardTable tr{

border-style: none;

margin: 0px;

padding: 0px;

background-color: #FFFFFF;

}

table.FlashcardTable td.Showing{

font-size: 140%;

text-align: center;

width: 50%;

display: table-cell;

padding: 2em;

margin: 0px;

border-style: solid;

border-width: 1px;

color: #000000;

background-color: #FFFFFF;

}

table.FlashcardTable td.Hidden{

display: none;

}

/* JMix styles */

div#SegmentDiv{

margin-top: 2em;

margin-bottom: 2em;

text-align: center;

}

a.ExSegment{

font-size: 120%;

font-weight: bold;

text-decoration: none;

color: #000000;

}

span.RemainingWordList{

font-style: italic;

}

div.DropLine {

position: absolute;

text-align: center;

border-bottom-style: solid;

border-bottom-width: 1px;

border-bottom-color: #000000;

width: 80%;

}

/* JCloze styles */

.ClozeWordList{

text-align: center;

font-weight: bold;

}

div.ClozeBody{

text-align: left;

margin-top: 2em;

margin-bottom: 2em;

line-height: 2.0

}

span.GapSpan{

font-weight: bold;

}

/* JCross styles */

table.CrosswordGrid{

margin: auto auto 1em auto;

border-collapse: collapse;

padding: 0px;

background-color: #000000;

}

table.CrosswordGrid tbody tr td{

width: 1.5em;

height: 1.5em;

text-align: center;

vertical-align: middle;

font-size: 140%;

padding: 1px;

margin: 0px;

border-style: solid;

border-width: 1px;

border-color: #000000;

color: #000000;

}

table.CrosswordGrid span{

color: #000000;

}

table.CrosswordGrid td.BlankCell{

background-color: #000000;

color: #000000;

}

table.CrosswordGrid td.LetterOnlyCell{

text-align: center;

vertical-align: middle;

background-color: #ffffff;

color: #000000;

font-weight: bold;

}

table.CrosswordGrid td.NumLetterCell{

text-align: left;

vertical-align: top;

background-color: #ffffff;

color: #000000;

padding: 1px;

font-weight: bold;

}

.NumLetterCellText{

cursor: pointer;

color: #000000;

}

.GridNum{

vertical-align: super;

font-size: 66%;

font-weight: bold;

text-decoration: none;

color: #000000;

}

.GridNum:hover, .GridNum:visited{

color: #000000;

}

table#Clues{

margin: auto;

vertical-align: top;

}

table#Clues td{

vertical-align: top;

}

table.ClueList{

margin: auto;

}

td.ClueNum{

text-align: right;

font-weight: bold;

vertical-align: top;

}

td.Clue{

text-align: left;

}

div#ClueEntry{

text-align: left;

margin-bottom: 1em;

}

/* Keypad styles */

div.Keypad{

text-align: center;

display: none; /* initially hidden, shown if needed */

margin-bottom: 0.5em;

}

div.Keypad button{

font-family: Geneva,Arial,sans-serif;

font-size: 120%;

background-color: #ffffff;

color: #000000;

width: 2em;

}

/* JQuiz styles */

div.QuestionNavigation{

text-align: center;

}

.QNum{

margin: 0em 1em 0.5em 1em;

font-weight: bold;

vertical-align: middle;

}

textarea{

font-family: Geneva,Arial,sans-serif;

}

.QuestionText{

text-align: left;

margin: 0px;

font-size: 100%;

}

.Answer{

font-size: 120%;

letter-spacing: 0.1em;

}

.PartialAnswer{

font-size: 120%;

letter-spacing: 0.1em;

color: #000000;

}

.Highlight{

color: #000000;

background-color: #ffff00;

font-weight: bold;

font-size: 120%;

}

ol.QuizQuestions{

text-align: left;

list-style-type: none;

}

li.QuizQuestion{

padding: 1em;

border-style: solid;

border-width: 0px 0px 1px 0px;

}

ol.MCAnswers{

text-align: left;

list-style-type: upper-alpha;

padding: 1em;

}

ol.MCAnswers li{

margin-bottom: 1em;

}

ol.MSelAnswers{

text-align: left;

list-style-type: lower-alpha;

padding: 1em;

}

div.ShortAnswer{

padding: 1em;

}

.FuncButton {

text-align: center;

border-style: solid;

border-left-color: #ffffff;

border-top-color: #ffffff;

border-right-color: #7f7f7f;

border-bottom-color: #7f7f7f;

color: #000000;

background-color: #FFFFFF;

border-width: 2px;

padding: 3px 6px 3px 6px;

cursor: pointer;

}

.FuncButtonUp {

color: #FFFFFF;

text-align: center;

border-style: solid;

border-left-color: #ffffff;

border-top-color: #ffffff;

border-right-color: #7f7f7f;

border-bottom-color: #7f7f7f;

background-color: #000000;

color: #FFFFFF;

border-width: 2px;

padding: 3px 6px 3px 6px;

cursor: pointer;

}

.FuncButtonDown {

color: #FFFFFF;

text-align: center;

border-style: solid;

border-left-color: #7f7f7f;

border-top-color: #7f7f7f;

border-right-color: #ffffff;

border-bottom-color: #ffffff;

background-color: #000000;

color: #FFFFFF;

border-width: 2px;

padding: 3px 6px 3px 6px;

cursor: pointer;

}

/*BeginNavBarStyle*/

div.NavButtonBar{

background-color: #000000;

text-align: center;

margin: 2px 0px 2px 0px;

clear: both;

font-size: 100%;

}

.NavButton {

border-style: solid;

border-left-color: #7f7f7f;

border-top-color: #7f7f7f;

border-right-color: #000000;

border-bottom-color: #000000;

background-color: #000000;

color: #ffffff;

border-width: 2px;

cursor: pointer;

}

.NavButtonUp {

border-style: solid;

border-left-color: #7f7f7f;

border-top-color: #7f7f7f;

border-right-color: #000000;

border-bottom-color: #000000;

color: #000000;

background-color: #ffffff;

border-width: 2px;

cursor: pointer;

}

.NavButtonDown {

border-style: solid;

border-left-color: #000000;

border-top-color: #000000;

border-right-color: #7f7f7f;

border-bottom-color: #7f7f7f;

color: #000000;

background-color: #ffffff;

border-width: 2px;

cursor: pointer;

}

/*EndNavBarStyle*/

a{

color: #0000FF;

}

a:visited{

color: #0000CC;

}

a:hover{

color: #0000FF;

}

div.CardStyle {

position: absolute;

font-family: Geneva,Arial,sans-serif;

font-size: 100%;

padding: 5px;

border-style: solid;

border-width: 1px;

color: #000000;

background-color: #FFFFFF;

left: -50px;

top: -50px;

overflow: visible;

}

.rtl{

text-align: right;

font-size: 140%;

}



<![CDATA[

 1);

if (this.gecko){

this.geckoVer = parseInt(this.ua.substring(this.ua.indexOf('Gecko')+6, this.ua.length));

if (this.geckoVer < 20020000){this.min = false;}

}

Look for Firebird

this.firebird = (this.ua.indexOf('Firebird') > 1);

Look for Safari

this.safari = (this.ua.indexOf('Safari') > 1);

if (this.safari){

this.gecko = false;

}

Look for IE

this.ie = (this.ua.indexOf('MSIE') > 0);

if (this.ie){

this.ieVer = parseFloat(this.ua.substring(this.ua.indexOf('MSIE')+5, this.ua.length));

if (this.ieVer < 5.5){this.min = false;}

}

Look for Opera

this.opera = (this.ua.indexOf('Opera') > 0);

if (this.opera){

this.operaVer = parseFloat(this.ua.substring(this.ua.indexOf('Opera')+6, this.ua.length));

if (this.operaVer < 7.04){this.min = false;}

}

if (this.min == false){

alert('Your browser may not be able to handle this page.');

}

Special case for the horrible ie5mac

this.ie5mac = (this.ie&&this.mac&&(this.ieVer<6));

}

var C = new Client;

for (prop in C){

alert(prop + ': ' + C[prop]);

}

CODE FOR HANDLING NAV BUTTONS AND FUNCTION BUTTONS

[strNavBarJS]

function NavBtnOver(Btn){

if (Btn.className != 'NavButtonDown'){Btn.className = 'NavButtonUp';}

}

function NavBtnOut(Btn){

Btn.className = 'NavButton';

}

function NavBtnDown(Btn){

Btn.className = 'NavButtonDown';

}

[/strNavBarJS]

function FuncBtnOver(Btn){

if (Btn.className != 'FuncButtonDown'){Btn.className = 'FuncButtonUp';}

}

function FuncBtnOut(Btn){

Btn.className = 'FuncButton';

}

function FuncBtnDown(Btn){

Btn.className = 'FuncButtonDown';

}

function FocusAButton{

if (document.getElementById('CheckButton1') != null){

document.getElementById('CheckButton1').focus;

}

else{

if (document.getElementById('CheckButton2') != null){

document.getElementById('CheckButton2').focus;

}

else{

document.getElementsByTagName('button')[0].focus;

}

}

}

CODE FOR HANDLING DISPLAY OF POPUP FEEDBACK BOX

var topZ = 1000;

function ShowMessage(Feedback){

var Output = Feedback + '

';

document.getElementById('FeedbackContent').innerHTML = Output;

var FDiv = document.getElementById('FeedbackDiv');

topZ++;

FDiv.style.zIndex = topZ;

FDiv.style.top = TopSettingWithScrollOffset(30) + 'px';

FDiv.style.display = 'block';

ShowElements(false, 'input');

ShowElements(false, 'select');

ShowElements(false, 'object');

ShowElements(true, 'object', 'FeedbackContent');

Focus the OK button

setTimeout("document.getElementById('FeedbackOKButton').focus", 50);

}

function ShowElements(Show, TagName, ContainerToReverse){

added third argument to allow objects in the feedback box to appear

IE bug -- hide all the form elements that will show through the popup

FF on Mac bug : doesn't redisplay objects whose visibility is set to visible

unless the object's display property is changed

get container object (by Id passed in, or use document otherwise)

TopNode = document.getElementById(ContainerToReverse);

var Els;

if (TopNode != null) {

Els = TopNode.getElementsByTagName(TagName);

} else {

Els = document.getElementsByTagName(TagName);

}

for (var i=0; i<Els.length; i++){

if (TagName == "object") {

manipulate object elements in all browsers

if (Show == true){

Els[i].style.visibility = 'visible';

get Mac FireFox to manipulate display, to force screen redraw

if (C.mac && C.gecko) {Els[i].style.display = '';}

}

else{

Els[i].style.visibility = 'hidden';

if (C.mac && C.gecko) {Els[i].style.display = 'none';}

}

}

else {

tagName is either input or select (that is, Form Elements)

ie6 has a problem with Form elements, so manipulate those

if (C.ie) {

if (C.ieVer < 7) {

if (Show == true){

Els[i].style.visibility = 'visible';

}

else{

Els[i].style.visibility = 'hidden';

}

}

}

}

}

}

function HideFeedback{

document.getElementById('FeedbackDiv').style.display = 'none';

ShowElements(true, 'input');

ShowElements(true, 'select');

ShowElements(true, 'object');

if (Finished == true){

Finish;

}

}

GENERAL UTILITY FUNCTIONS AND VARIABLES

PAGE DIMENSION FUNCTIONS

function PageDim{

Get the page width and height

this.W = 600;

this.H = 400;

this.W = document.getElementsByTagName('body')[0].clientWidth;

this.H = document.getElementsByTagName('body')[0].clientHeight;

}

var pg = null;

function GetPageXY(El) {

var XY = {x: 0, y: 0};

while(El){

XY.x += El.offsetLeft;

XY.y += El.offsetTop;

El = El.offsetParent;

}

return XY;

}

function GetScrollTop{

if (typeof(window.pageYOffset) == 'number'){

return window.pageYOffset;

}

else{

if ((document.body)&&(document.body.scrollTop)){

return document.body.scrollTop;

}

else{

if ((document.documentElement)&&(document.documentElement.scrollTop)){

return document.documentElement.scrollTop;

}

else{

return 0;

}

}

}

}

function GetViewportHeight{

if (typeof window.innerHeight != 'undefined'){

return window.innerHeight;

}

else{

if (((typeof document.documentElement != 'undefined')&&(typeof document.documentElement.clientHeight !=

'undefined'))&&(document.documentElement.clientHeight != 0)){

return document.documentElement.clientHeight;

}

else{

return document.getElementsByTagName('body')[0].clientHeight;

}

}

}

function TopSettingWithScrollOffset(TopPercent){

var T = Math.floor(GetViewportHeight * (TopPercent/100));

return GetScrollTop + T;

}

CODE FOR AVOIDING LOSS OF DATA WHEN BACKSPACE KEY INVOKES history.back

var InTextBox = false;

function SuppressBackspace(e){

if (InTextBox == true){return;}

if (C.ie) {

thisKey = window.event.keyCode;

}

else {

thisKey = e.keyCode;

}

var Suppress = false;

if (thisKey == 8) {

Suppress = true;

}

if (Suppress == true){

if (C.ie){

window.event.returnValue = false;

window.event.cancelBubble = true;

}

else{

e.preventDefault;

}

}

}

if (C.ie){

document.attachEvent('onkeydown',SuppressBackspace);

window.attachEvent('onkeydown',SuppressBackspace);

}

else{

if (window.addEventListener){

window.addEventListener('keypress',SuppressBackspace,false);

}

}

function ReduceItems(InArray, ReduceToSize){

var ItemToDump=0;

var j=0;

while (InArray.length > ReduceToSize){

ItemToDump = Math.floor(InArray.length*Math.random);

InArray.splice(ItemToDump, 1);

}

}

function Shuffle(InArray){

var Num;

var Temp = new Array;

var Len = InArray.length;

var j = Len;

for (var i=0; i<Len; i++){

Temp[i] = InArray[i];

}

for (i=0; i<Len; i++){

Num = Math.floor(j * Math.random);

InArray[i] = Temp[Num];

for (var k=Num; k < (j-1); k++) {

Temp[k] = Temp[k+1];

}

j--;

}

return InArray;

}

function WriteToInstructions(Feedback) {

document.getElementById('InstructionsDiv').innerHTML = Feedback;

}

function EscapeDoubleQuotes(InString){

return InString.replace(/"/g, '"')

}

function TrimString(InString){

var x = 0;

if (InString.length != 0) {

while ((InString.charAt(InString.length - 1) == '\u0020') || (InString.charAt(InString.length - 1) == '\u000A') || (InString.charAt(InString.length - 1) == '\u000D')){

InString = InString.substring(0, InString.length - 1)

}

while ((InString.charAt(0) == '\u0020') || (InString.charAt(0) == '\u000A') || (InString.charAt(0) == '\u000D')){

InString = InString.substring(1, InString.length)

}

while (InString.indexOf(' ') != -1) {

x = InString.indexOf(' ')

InString = InString.substring(0, x) + InString.substring(x+1, InString.length)

}

return InString;

}

else {

return '';

}

}

function FindLongest(InArray){

if (InArray.length < 1){return -1;}

var Longest = 0;

for (var i=1; i InArray[Longest].length){

Longest = i;

}

}

return Longest;

}

UNICODE CHARACTER FUNCTIONS

function IsCombiningDiacritic(CharNum){

var Result = (((CharNum >= 0x0300)&&(CharNum <= 0x370))||((CharNum >= 0x20d0)&&(CharNum <= 0x20ff)));

Result = Result || (((CharNum >= 0x3099)&&(CharNum <= 0x309a))||((CharNum >= 0xfe20)&&(CharNum <= 0xfe23)));

return Result;

}

function IsCJK(CharNum){

return ((CharNum >= 0x3000)&&(CharNum < 0xd800));

}

SETUP FUNCTIONS

BROWSER WILL REFILL TEXT BOXES FROM CACHE IF NOT PREVENTED

function ClearTextBoxes{

var NList = document.getElementsByTagName('input');

for (var i=0; i -1)||(NList[i].id.indexOf('Gap') > -1)){

NList[i].value = '';

}

if (NList[i].id.indexOf('Chk') > -1){

NList[i].checked = '';

}

}

}

EXTENSION TO ARRAY OBJECT

function Array_IndexOf(Input){

var Result = -1;

for (var i=0; i<this.length; i++){

if (this[i] == Input){

Result = i;

}

}

return Result;

}

Array.prototype.indexOf = Array_IndexOf;

IE HAS RENDERING BUG WITH BOTTOM NAVBAR

function RemoveBottomNavBarForIE{

if ((C.ie)&&(document.getElementById('Reading') != null)){

if (document.getElementById('BottomNavBar') != null){

document.getElementById('TheBody').removeChild(document.getElementById('BottomNavBar'));

}

}

}

HOTPOTNET-RELATED CODE

var HPNStartTime = (new Date).getTime;

var SubmissionTimeout = 30000;

var Detail = ''; Global that is used to submit tracking data

function Finish{

If there's a form, fill it out and submit it

if (document.store != null){

Frm = document.store;

Frm.starttime.value = HPNStartTime;

Frm.endtime.value = (new Date).getTime;

Frm.mark.value = Score;

Frm.detail.value = Detail;

Frm.submit;

}

}

JQUIZ CORE JAVASCRIPT CODE

var CurrQNum = 0;

var CorrectIndicator = ':-)';

var IncorrectIndicator = 'X';

var YourScoreIs = 'Your score is ';

New for 6.2.2.0

var CompletedSoFar = 'Questions completed so far: ';

var ExerciseCompleted = 'You have completed the exercise.';

var ShowCompletedSoFar = true;

var ContinuousScoring = true;

var CorrectFirstTime = 'Questions answered correctly first time: ';

var ShowCorrectFirstTime = true;

var ShuffleQs = false;

var ShuffleAs = false;

var DefaultRight = 'Correct!';

var DefaultWrong = 'Sorry! Try again.';

var QsToShow = 10;

var Score = 0;

var Finished = false;

var Qs = null;

var QArray = new Array;

var ShowingAllQuestions = false;

var ShowAllQuestionsCaption = 'Show all questions';

var ShowOneByOneCaption = 'Show questions one by one';

var State = new Array;

var Feedback = '';

var TimeOver = false;

var strInstructions = '';

var Locked = false;

The following variable can be used to add a message explaining that

the question is finished, so no further marking will take place.

var strQuestionFinished = '';

function CompleteEmptyFeedback{

var QNum, ANum;

for (QNum=0; QNum 0){

I[QNum][3][ANum][1] = DefaultRight;

}

else{

I[QNum][3][ANum][1] = DefaultWrong;

}

}

}

}

}

}

function SetUpQuestions{

var AList = new Array;

var QList = new Array;

var i, j;

Qs = document.getElementById('Questions');

while (Qs.getElementsByTagName('li').length > 0){

QList.push(Qs.removeChild(Qs.getElementsByTagName('li')[0]));

}

var DumpItem = 0;

if (QsToShow > QList.length){

QsToShow = QList.length;

}

while (QsToShow < QList.length){

DumpItem = Math.floor(QList.length*Math.random);

for (j=DumpItem; j<(QList.length-1); j++){

QList[j] = QList[j+1];

}

QList.length = QList.length-1;

}

if (ShuffleQs == true){

QList = Shuffle(QList);

}

if (ShuffleAs == true){

var As;

for (var i=0; i 0){

AList.push(As.removeChild(As.getElementsByTagName('li')[0]));

}

AList = Shuffle(AList);

for (j=0; j<AList.length; j++){

As.appendChild(AList[j]);

}

}

}

}

for (i=0; i<QList.length; i++){

Qs.appendChild(QList[i]);

QArray[QArray.length] = QList[i];

}

Show the first item

QArray[0].style.display = '';

Now hide all except the first item

for (i=1; i<QArray.length; i++){

QArray[i].style.display = 'none';

}

SetQNumReadout;

SetFocusToTextbox;

}

function SetFocusToTextbox{

if there's a textbox, set the focus in it

if (QArray[CurrQNum].getElementsByTagName('input')[0] != null){

QArray[CurrQNum].getElementsByTagName('input')[0].focus;

and show a keypad if there is one

if (document.getElementById('CharacterKeypad') != null){

document.getElementById('CharacterKeypad').style.display = 'block';

}

}

else{

if (QArray[CurrQNum].getElementsByTagName('textarea')[0] != null){

QArray[CurrQNum].getElementsByTagName('textarea')[0].focus;

and show a keypad if there is one

if (document.getElementById('CharacterKeypad') != null){

document.getElementById('CharacterKeypad').style.display = 'block';

}

}

This added for 6.0.4.11: hide accented character buttons if no textbox

else{

if (document.getElementById('CharacterKeypad') != null){

document.getElementById('CharacterKeypad').style.display = 'none';

}

}

}

}

function ChangeQ(ChangeBy){

The following line prevents moving to another question until the current

question is answered correctly. Uncomment it to enable this behaviour.

if (State[CurrQNum][0] == -1){return;}

if (((CurrQNum + ChangeBy) < 0)||((CurrQNum + ChangeBy) >= QArray.length)){return;}

QArray[CurrQNum].style.display = 'none';

CurrQNum += ChangeBy;

QArray[CurrQNum].style.display = '';

Undocumented function added 10/12/2004

ShowSpecialReadingForQuestion;

SetQNumReadout;

SetFocusToTextbox;

}

var HiddenReadingShown = false;

function ShowSpecialReadingForQuestion{

Undocumented function for showing specific reading text elements which change with each question

Added on 10/12/2004

if (document.getElementById('ReadingDiv') != null){

if (HiddenReadingShown == true){

document.getElementById('ReadingDiv').innerHTML = '';

}

if (QArray[CurrQNum] != null){

Fix for 6.0.4.25

var Children = QArray[CurrQNum].getElementsByTagName('div');

for (var i=0; i<Children.length; i++){

if (Children[i].className=="HiddenReading"){

document.getElementById('ReadingDiv').innerHTML = Children[i].innerHTML;

HiddenReadingShown = true;

Hide the ShowAllQuestions button to avoid confusion

if (document.getElementById('ShowMethodButton') != null){

document.getElementById('ShowMethodButton').style.display = 'none';

}

}

}

}

}

}

function SetQNumReadout{

document.getElementById('QNumReadout').innerHTML = (CurrQNum+1) + ' / ' + QArray.length;

if ((CurrQNum+1) >= QArray.length){

if (document.getElementById('NextQButton') != null){

document.getElementById('NextQButton').style.visibility = 'hidden';

}

}

else{

if (document.getElementById('NextQButton') != null){

document.getElementById('NextQButton').style.visibility = 'visible';

}

}

if (CurrQNum <= 0){

if (document.getElementById('PrevQButton') != null){

document.getElementById('PrevQButton').style.visibility = 'hidden';

}

}

else{

if (document.getElementById('PrevQButton') != null){

document.getElementById('PrevQButton').style.visibility = 'visible';

}

}

}

var I=new Array;

I[0]=new Array;I[0][0]=100;

I[0][1]='';

I[0][2]='0';

I[0][3]=new Array;

I[0][3][0]=new Array('Falso','',0,0,1);

I[0][3][1]=new Array('Vardadero','',1,100,1);

I[1]=new Array;I[1][0]=100;

I[1][1]='';

I[1][2]='0';

I[1][3]=new Array;

I[1][3][0]=new Array('Falso','',1,100,1);

I[1][3][1]=new Array('Verdadero','',0,0,1);

I[2]=new Array;I[2][0]=100;

I[2][1]='';

I[2][2]='0';

I[2][3]=new Array;

I[2][3][0]=new Array('Falso','',1,100,1);

I[2][3][1]=new Array('Verdadero','',0,0,1);

I[3]=new Array;I[3][0]=100;

I[3][1]='';

I[3][2]='0';

I[3][3]=new Array;

I[3][3][0]=new Array('Verdadero','',1,100,1);

I[3][3][1]=new Array('Falso','',0,0,1);

I[4]=new Array;I[4][0]=100;

I[4][1]='';

I[4][2]='0';

I[4][3]=new Array;

I[4][3][0]=new Array('Verdadero','',0,0,1);

I[4][3][1]=new Array('Falso','',1,100,1);

I[5]=new Array;I[5][0]=100;

I[5][1]='';

I[5][2]='0';

I[5][3]=new Array;

I[5][3][0]=new Array('Por organizar los datos.','',0,0,1);

I[5][3][1]=new Array('Para definir los niveles del esquema','',1,100,1);

I[5][3][2]=new Array('Las dos anteriores son correctas','',0,0,1);

I[6]=new Array;I[6][0]=100;

I[6][1]='';

I[6][2]='0';

I[6][3]=new Array;

I[6][3][0]=new Array('Despu\u00E9s podemos recuperarlo haciendo clic en Edici\u00F3n - Deshacer.','',0,0,1);

I[6][3][1]=new Array('No se puede recuperar.','',1,100,1);

I[6][3][2]=new Array('Ninguna de las opciones anteriores.','',0,0,1);

I[7]=new Array;I[7][0]=100;

I[7][1]='';

I[7][2]='1';

I[7][3]=new Array;

I[7][3][0]=new Array('Verdadero','',1,100,1);

I[7][3][1]=new Array('Falso','',0,0,1);

I[8]=new Array;I[8][0]=100;

I[8][1]='';

I[8][2]='1';

I[8][3]=new Array;

I[8][3][0]=new Array('Filtro Automatico','',1,100,1);

I[8][3][1]=new Array('Filtro Personalizado','',0,0,1);

I[8][3][2]=new Array('Filtro Tabla y Autofiltro','',0,0,1);

I[9]=new Array;I[9][0]=100;

I[9][1]='';

I[9][2]='1';

I[9][3]=new Array;

I[9][3][0]=new Array('...es necesario seleccionar previamente las celdas.','',0,0,1);

I[9][3][1]=new Array('...se pueden seleccionar las celdas en un paso posterior.','',1,100,1);

I[9][3][2]=new Array('...no hay que seleccionar ninguna celda.','',0,0,1);

function StartUp{

RemoveBottomNavBarForIE;

If there's only one question, no need for question navigation controls

if (QsToShow < 2){

document.getElementById('QNav').style.display = 'none';

}

Stash the instructions so they can be redisplayed

strInstructions = document.getElementById('InstructionsDiv').innerHTML;

CompleteEmptyFeedback;

SetUpQuestions;

ClearTextBoxes;

CreateStatusArray;

Check search string for q parameter

if (document.location.search.length > 0){

if (ShuffleQs == false){

var JumpTo = parseInt(document.location.search.substring(1,document.location.search.length))-1;

if (JumpTo <= QsToShow){

ChangeQ(JumpTo);

}

}

}

Undocumented function added 10/12/2004

ShowSpecialReadingForQuestion;

}

function ShowHideQuestions{

FuncBtnOut(document.getElementById('ShowMethodButton'));

document.getElementById('ShowMethodButton').style.display = 'none';

if (ShowingAllQuestions == false){

for (var i=0; i<QArray.length; i++){

QArray[i].style.display = '';

}

document.getElementById('Questions').style.listStyleType = 'decimal';

document.getElementById('OneByOneReadout').style.display = 'none';

document.getElementById('ShowMethodButton').innerHTML = ShowOneByOneCaption;

ShowingAllQuestions = true;

}

else{

for (var i=0; i<QArray.length; i++){

if (i != CurrQNum){

QArray[i].style.display = 'none';

}

}

document.getElementById('Questions').style.listStyleType = 'none';

document.getElementById('OneByOneReadout').style.display = '';

document.getElementById('ShowMethodButton').innerHTML = ShowAllQuestionsCaption;

ShowingAllQuestions = false;

}

document.getElementById('ShowMethodButton').style.display = 'inline';

}

function CreateStatusArray{

var QNum, ANum;

For each item in the item array

for (QNum=0; QNum<I.length; QNum++){

Check if the question still exists (hasn't been nuked by showing a random selection)

if (document.getElementById('Q_' + QNum) != null){

State[QNum] = new Array;

State[QNum][0] = -1; Score for this q; -1 shows question not done yet

State[QNum][1] = new Array; answers

for (ANum = 0; ANum<I[QNum][3].length; ANum++){

State[QNum][1][ANum] = 0; answer not chosen yet; when chosen, will store its position in the series of choices

}

State[QNum][2] = 0; tries at this q so far

State[QNum][3] = 0; incrementing percent-correct values of selected answers

State[QNum][4] = 0; penalties incurred for hints

State[QNum][5] = ''; Sequence of answers chosen by number

}

else{

State[QNum] = null;

}

}

}

function CheckMCAnswer(QNum, ANum, Btn){

if question doesn't exist, bail

if (State[QNum].length < 1){return;}

Get the feedback

Feedback = I[QNum][3][ANum][1];

Now show feedback and bail if question already complete

if (State[QNum][0] > -1){

Add an extra message explaining that the question

is finished if defined by the user

if (strQuestionFinished.length > 0){Feedback += ' ' + strQuestionFinished;}

Show the feedback

ShowMessage(Feedback);

New for 6.2.2.1: If you want to mark an answer as correct even when it's the final choice, uncomment this line.

if (I[QNum][3][ANum][2] >= 1){Btn.innerHTML = CorrectIndicator;}else{Btn.innerHTML = IncorrectIndicator;}

return;

}

Hide the button while processing

Btn.style.display = 'none';

Increment the number of tries

State[QNum][2]++;

Add the percent-correct value of this answer

State[QNum][3] += I[QNum][3][ANum][3];

Store the try number in the answer part of the State array, for tracking purposes

State[QNum][1][ANum] = State[QNum][2];

if (State[QNum][5].length > 0){State[QNum][5] += ' | ';}

State[QNum][5] += String.fromCharCode(65+ANum);

Should this answer be accepted as correct?

if (I[QNum][3][ANum][2] < 1){

It's wrong

Mark the answer

Btn.innerHTML = IncorrectIndicator;

Remove any previous score unless exercise is finished (6.0.3.8+)

if (Finished == false){

WriteToInstructions(strInstructions);

}

Check whether this leaves just one MC answer unselected, in which case the Q is terminated

var RemainingAnswer = FinalAnswer(QNum);

if (RemainingAnswer > -1){

Behave as if the last answer had been selected, but give no credit for it

Increment the number of tries

State[QNum][2]++;

Calculate the score for this question

CalculateMCQuestionScore(QNum);

Get the overall score and add it to the feedback

CalculateOverallScore;

New for 6.2.2.1

var QsDone = CheckQuestionsCompleted;

if ((ContinuousScoring == true)||(Finished == true)){

Feedback += ' ' + YourScoreIs + ' ' + Score + '%.' + ' ' + QsDone;

WriteToInstructions(YourScoreIs + ' ' + Score + '%.' + ' ' + QsDone);

}

else{

WriteToInstructions(QsDone);

}

}

}

else{

It's right

Mark the answer

Btn.innerHTML = CorrectIndicator;

Calculate the score for this question

CalculateMCQuestionScore(QNum);

New for 6.2.2.0

var QsDone = CheckQuestionsCompleted;

Get the overall score and add it to the feedback

if (ContinuousScoring == true){

CalculateOverallScore;

if ((ContinuousScoring == true)||(Finished == true)){

Feedback += ' ' + YourScoreIs + ' ' + Score + '%.' + ' ' + QsDone;

WriteToInstructions(YourScoreIs + ' ' + Score + '%.' + ' ' + QsDone);

}

}

else{

WriteToInstructions(QsDone);

}

}

Show the button again

Btn.style.display = 'inline';

Finally, show the feedback

ShowMessage(Feedback);

Check whether all questions are now done

CheckFinished;

}

function CalculateMCQuestionScore(QNum){

var Tries = State[QNum][2] + State[QNum][4]; include tries and hint penalties

var PercentCorrect = State[QNum][3];

var TotAns = GetTotalMCAnswers(QNum);

var HintPenalties = State[QNum][4];

Make sure it's not already complete

if (State[QNum][0] < 0){

Allow for Hybrids

if (HintPenalties >= 1){

State[QNum][0] = 0;

}

else{

This line calculates the score for this question

if (TotAns == 1){

State[QNum][0] = 1;

}

else{

State[QNum][0] = ((TotAns-((Tries*100)/State[QNum][3]))/(TotAns-1));

}

}

Fix for Safari bug added for version 6.0.3.42 (negative infinity problem)

if ((State[QNum][0] < 0)||(State[QNum][0] == Number.NEGATIVE_INFINITY)){

State[QNum][0] = 0;

}

}

}

function GetTotalMCAnswers(QNum){

var Result = 0;

for (var ANum=0; ANum<I[QNum][3].length; ANum++){

if (I[QNum][3][ANum][4] == 1){ This is an MC answer

Result++;

}

}

return Result;

}

function FinalAnswer(QNum){

var UnchosenAnswers = 0;

var FinalAnswer = -1;

for (var ANum=0; ANum -1){

TotalWeighting += I[QNum][0];

TotalScore += (I[QNum][0] * State[QNum][0]);

}

}

}

if (TotalWeighting > 0){

Score = Math.floor((TotalScore/TotalWeighting)*100);

}

else{

if TotalWeighting is 0, no questions so far have any value, so

no penalty should be shown.

Score = 100;

}

}

New for 6.2.2.0

function CheckQuestionsCompleted{

if (ShowCompletedSoFar == false){return '';}

var QsCompleted = 0;

for (var QNum=0; QNum<State.length; QNum++){

if (State[QNum] != null){

if (State[QNum][0] >= 0){

QsCompleted++;

}

}

}

Fixes for 6.2.2.2

if (QsCompleted >= QArray.length){

return ExerciseCompleted;

}

else{

return CompletedSoFar + ' ' + QsCompleted + '/' + QArray.length + '.';

}

}

function CheckFinished{

var FB = '';

var AllDone = true;

for (var QNum=0; QNum<State.length; QNum++){

if (State[QNum] != null){

if (State[QNum][0] < 0){

AllDone = false;

}

}

}

if (AllDone == true){

Report final score and submit if necessary

CalculateOverallScore;

FB = YourScoreIs + ' ' + Score + '%.';

if (ShowCorrectFirstTime == true){

var CFT = 0;

for (QNum=0; QNum<State.length; QNum++){

if (State[QNum] != null){

if (State[QNum][0] >= 1){

CFT++;

}

}

}

FB += ' ' + CorrectFirstTime + ' ' + CFT + '/' + QsToShow;

}

New for 6.2.2.0

FB += ' ' + ExerciseCompleted;

WriteToInstructions(FB);

Finished == true;

TimeOver = true;

Locked = true;

Finished = true;

Detail = '<?xml version="1.0"?> ';

for (QNum=0; QNum<State.length; QNum++){

if (State[QNum] != null){

if (State[QNum][5].length > 0){

Detail += ' Question #' + (QNum+1) + '  question-tracking  Q ' + (QNum+1) + '  QuestionTrackingField  ' + State[QNum][5] + '  ';

}

}

}

Detail += ' ';

setTimeout('Finish', SubmissionTimeout);

}

}

CORE CODE FOR CHECKING SHORT ANSWER GUESSES AGAINST ANSWER ARRAYS

var CaseSensitive = false;

var ShowAlsoCorrect = true;

var PleaseEnter = 'Please enter a guess.';

var HybridTries = 2;

var PartlyIncorrect = 'Your answer is partly wrong: ';

var CorrectList = 'Correct answers: ';

var NextCorrect = 'Next correct letter in the answer: ';

var CurrBox = null;

function TrackFocus(BoxID){

InTextBox = true;

CurrBox = document.getElementById(BoxID);

}

function LeaveGap{

InTextBox = false;

}

function TypeChars(Chars){

if (CurrBox != null){

Following check added for 6.0.4.4 to avoid error message in IE6

if (CurrBox.style.display != 'none'){

CurrBox.value += Chars;

CurrBox.focus;

}

}

}

function CheckGuess(Guess, Answer, CaseSensitive, PercentCorrect, Feedback){

this.Guess = Guess;

this.Answer = Answer;

this.PercentCorrect = PercentCorrect;

this.Feedback = Feedback;

if (CaseSensitive == false){

this.WorkingGuess = Guess.toLowerCase;

this.WorkingAnswer = Answer.toLowerCase;

}

else{

this.WorkingGuess = Guess;

this.WorkingAnswer = Answer;

}

this.Hint = '';

this.HintPenalty = 1/Answer.length;

this.CorrectStart = '';

this.WrongMiddle = '';

this.CorrectEnd = '';

this.PercentMatch = 0;

this.DoCheck;

}

function CheckGuess_DoCheck{

Check if it's an exact match

if (this.WorkingAnswer == this.WorkingGuess){

this.PercentMatch = 100;

this.CorrectStart = this.Guess;

return;

}

Figure out how much of the beginning is correct

var i = 0;

var CorrectChars = 0;

while (this.WorkingAnswer.charAt(i) == this.WorkingGuess.charAt(i)){

i++;

CorrectChars++;

}

Stash the hint

this.Hint = this.Answer.charAt(i);

this.CorrectStart = this.Guess.substring(0, i);

If there's more to the answer, look at the rest of it

if (i<this.Guess.length){

Figure out how much of the end is correct

var j = this.WorkingGuess.length-1;

var k = this.WorkingAnswer.length-1;

while ((j>=i)&&((this.WorkingAnswer.charAt(k) == this.WorkingGuess.charAt(j))&&(CorrectChars < this.Answer.length))){

CorrectChars++;

j--;

k--;

}

this.CorrectEnd = this.Guess.substring(j+1, this.Guess.length);

this.WrongMiddle = this.Guess.substring(i, j+1);

}

if (TrimString(this.WrongMiddle).length < 1){this.WrongMiddle = '_';}

Calculate match score based on how much of the guess is correct

if (CorrectChars < this.Answer.length){

this.PercentMatch = Math.floor(100*CorrectChars)/this.Answer.length;

}

else{

this.PercentMatch = Math.floor((100 * CorrectChars)/this.Guess.length);

}

}

CheckGuess.prototype.DoCheck = CheckGuess_DoCheck;

function CheckAnswerArray(CaseSensitive){

this.CaseSensitive = CaseSensitive;

this.Answers = new Array;

this.Score = 0;

this.Feedback = '';

this.Hint = '';

this.HintPenalty = 0;

this.MatchedAnswerLength = 1;

this.CompleteMatch = false;

this.MatchNum = -1;

}

function CheckAnswerArray_AddAnswer(Guess, Answer, PercentCorrect, Feedback){

this.Answers.push(new CheckGuess(Guess, Answer, this.CaseSensitive, PercentCorrect, Feedback));

}

CheckAnswerArray.prototype.AddAnswer = CheckAnswerArray_AddAnswer;

function CheckAnswerArray_ClearAll{

this.Answers.length = 0;

}

CheckAnswerArray.prototype.ClearAll = CheckAnswerArray_ClearAll;

function CheckAnswerArray_GetBestMatch{

First check for a 100% match

for (var i=0; i<this.Answers.length; i++){

if (this.Answers[i].PercentMatch == 100){

this.Feedback = this.Answers[i].Feedback;

this.Score = this.Answers[i].PercentCorrect;

this.CompleteMatch = true;

this.MatchNum = i;

return;

}

}

Now check for the best alternative match

var PercentMatch = 0;

var BestMatch = -1;

for (i=0; i<this.Answers.length; i++){

if ((this.Answers[i].PercentMatch > PercentMatch)&&(this.Answers[i].PercentCorrect == 100)){

BestMatch = i;

PercentMatch = this.Answers[i].PercentMatch;

}

}

if (BestMatch > -1){

this.Score = this.Answers[BestMatch].PercentMatch;

this.Feedback = PartlyIncorrect + ' ';

this.Feedback += '' + this.Answers[BestMatch].CorrectStart;

this.Feedback +=  + this.Answers[BestMatch].WrongMiddle + ;

this.Feedback += this.Answers[BestMatch].CorrectEnd + '';

this.Hint = '' + this.Answers[BestMatch].CorrectStart;

this.Hint +=  + this.Answers[BestMatch].Hint + ;

this.HintPenalty = this.Answers[BestMatch].HintPenalty;

}

else{

this.Score = 0;

this.Feedback = '';

}

}

CheckAnswerArray.prototype.GetBestMatch = CheckAnswerArray_GetBestMatch;

function CheckShortAnswer(QNum){

bail if question doesn't exist or exercise finished

if ((State[QNum].length < 1)||(Finished == true)){return;}

bail if question already complete

if (State[QNum][0] > -1){return;}

Get the guess (TrimString added to fix bug for 6.0.4.3)

var G = TrimString(document.getElementById('Q_' + QNum + '_Guess').value);

If no guess, bail with message; no penalty

if (G.length < 1){

ShowMessage(PleaseEnter);

return;

}

Increment tries

State[QNum][2]++;

Create a check object

var CA = new CheckAnswerArray(CaseSensitive);

CA.ClearAll;

for (var ANum=0; ANum<I[QNum][3].length; ANum++){

CA.AddAnswer(G, I[QNum][3][ANum][0], I[QNum][3][ANum][3], I[QNum][3][ANum][1]);

}

CA.GetBestMatch;

Store any match in the state tracking field

if (State[QNum][5].length > 0){State[QNum][5] += ' | ';}

if (CA.MatchNum > -1){

State[QNum][5] += String.fromCharCode(65+CA.MatchNum);

}

Else store the student's answer

else{

State[QNum][5] += G;

}

Add the percent correct value for this answer to the Q State (works for all

situations, wrong or right)

State[QNum][3] += CA.Score;

Now branch, based on the nature of the match

Is it a complete match?

if (CA.CompleteMatch == true){

Is it with a wrong answer, or a right answer?

if (CA.Score == 100){

It's right

CalculateShortAnsQuestionScore(QNum);

New for 6.2.2.0

var QsDone = CheckQuestionsCompleted;

Get correct answer list if required, assuming there are any other correct alternatives

if (ShowAlsoCorrect == true){

var AlsoCorrectList = GetCorrectList(QNum, G, false);

if (AlsoCorrectList.length > 0){

CA.Feedback += ' ' + CorrectList + ' ' + AlsoCorrectList;

}

}

Get the overall score and add it to the feedback

if (ContinuousScoring == true){

CalculateOverallScore;

CA.Feedback += ' ' + YourScoreIs + ' ' + Score + '%.' + ' ' + QsDone;

WriteToInstructions(YourScoreIs + ' ' + Score + '%.' + ' ' + QsDone);

}

else{

WriteToInstructions(QsDone);

}

ShowMessage(CA.Feedback);

Put the answer in

ReplaceGuessBox(QNum, G);

CheckFinished;

return;

}

}

Otherwise, it's a match to a predicted wrong/partially correct, or a partial

match to a right answer

if (CA.Feedback.length < 1){CA.Feedback = DefaultWrong;}

Remove any previous score unless exercise is finished (6.0.3.8+)

if (Finished == false){

WriteToInstructions(strInstructions);

}

ShowMessage(CA.Feedback);

If necessary, switch a hybrid question to m/c

if (State[QNum][2] >= HybridTries){

SwitchHybridDisplay(QNum);

}

}

function CalculateShortAnsQuestionScore(QNum){

var Tries = State[QNum][2] + State[QNum][4]; include tries and hint penalties;

var PercentCorrect = State[QNum][3];

var HintPenalties = State[QNum][4];

Make sure it's not already complete

if (State[QNum][0] < 0){

if (HintPenalties >= 1){

State[QNum][0] = 0;

}

else{

State[QNum][0] = (PercentCorrect/(100*Tries));

}

if (State[QNum][0] < 0){

State[QNum][0] = 0;

}

}

}

function SwitchHybridDisplay(QNum){

if (document.getElementById('Q_' + QNum + '_Hybrid_MC') != null){

document.getElementById('Q_' + QNum + '_Hybrid_MC').style.display = '';

if (document.getElementById('Q_' + QNum + '_SA') != null){

document.getElementById('Q_' + QNum + '_SA').style.display = 'none';

}

}

}

function GetCorrectArray(QNum){

var Result = new Array;

for (var ANum=0; ANum<I[QNum][3].length; ANum++){

if (I[QNum][3][ANum][2] == 1){ This is an acceptable correct answer

Result.push(I[QNum][3][ANum][0]);

}

}

return Result;

}

function GetCorrectList(QNum, Answer, IncludeAnswer){

var As = GetCorrectArray(QNum);

var Result = '';

for (var ANum=0; ANum<As.length; ANum++){

if ((IncludeAnswer == true)||(As[ANum] != Answer)){

Result += As[ANum] + ' ';

}

}

return Result;

}

function GetFirstCorrectAnswer(QNum){

var As = GetCorrectArray(QNum);

if (As.length > 0){

return As[0];

}

else{

return '';

}

}

function ReplaceGuessBox(QNum, Ans){

if (document.getElementById('Q_' + QNum + '_SA') != null){

var El = document.getElementById('Q_' + QNum + '_SA');

while (El.childNodes.length > 0){

El.removeChild(El.childNodes[0]);

}

var A = document.createElement('span');

A.setAttribute('class', 'Answer');

var T = document.createTextNode(Ans);

A.appendChild(T);

El.appendChild(A);

}

}

function ShowAnswers(QNum){

bail if question doesn't exist or exercise finished

if ((State[QNum].length < 1)||(Finished == true)){return;}

Get the answer list to display

var Ans = GetCorrectList(QNum, '', false);

Ans = CorrectList + ' ' + Ans;

Display feedback

ShowMessage(Ans);

Set the score for this question to 0 if no score yet

if (State[QNum][0] < 1){

State[QNum][0] = 0;

}

Get the first correct answer

var FirstAns = GetFirstCorrectAnswer(QNum);

Replace the textbox

ReplaceGuessBox(QNum, FirstAns);

New for 6.2.2.0: Get scores and feedback

var QsDone = CheckQuestionsCompleted;

if (ContinuousScoring == true){

CalculateOverallScore;

WriteToInstructions(YourScoreIs + ' ' + Score + '%.' + ' ' + QsDone);

}

This may be the last, so check finished status

CheckFinished;

}

function ShowHint(QNum){

bail if question doesn't exist or exercise finished

if ((State[QNum].length < 1)||(Finished == true)){return;}

bail if question already complete

if (State[QNum][0] > -1){return;}

Get the guess

var G = document.getElementById('Q_' + QNum + '_Guess').value;

If no guess, give the first correct bit

if (G.length < 1){

var Ans = GetFirstCorrectAnswer(QNum);

var Hint = Ans.charAt(0);

ShowMessage(NextCorrect + ' ' + Hint);

Penalty for hint

State[QNum][4] += (1/Ans.length);

return;

}

Increment tries

State[QNum][2]++;

Create a check object

var CA = new CheckAnswerArray(CaseSensitive);

CA.ClearAll;

for (var ANum=0; ANum<I[QNum][3].length; ANum++){

Use only correct answers

if (I[QNum][3][ANum][2] == 1){

CA.AddAnswer(G, I[QNum][3][ANum][0], I[QNum][3][ANum][3], I[QNum][3][ANum][1]);

}

}

CA.GetBestMatch;

if (CA.CompleteMatch == true){

It's right!

CheckShortAnswer(QNum);

return;

}

else{

if (CA.Hint.length > 0){

ShowMessage(NextCorrect + ' ' + CA.Hint);

State[QNum][4] += CA.HintPenalty;

}

else{

ShowMessage(DefaultWrong + ' ' + NextCorrect + ' ' + GetFirstCorrectAnswer(QNum).charAt(0));

}

}

}

-->

//]]>

<body onload="StartUp" id="TheBody" >

<button class="NavButton" onfocus="NavBtnOver(this)" onblur="NavBtnOut(this)" onmouseover="NavBtnOver(this)" onmouseout="NavBtnOut(this)" onmousedown="NavBtnDown(this)" onmouseup="NavBtnOut(this)" onclick="location='contents.htm'; return false;"> Index

<button class="NavButton" onfocus="NavBtnOver(this)" onblur="NavBtnOut(this)" onmouseover="NavBtnOver(this)" onmouseout="NavBtnOut(this)" onmousedown="NavBtnDown(this)" onmouseup="NavBtnOut(this)" onclick="location='nextpage.htm'; return false;">=&gt;

<h2 class="ExerciseTitle">HOJA DE CALCULO 2

<h3 class="ExerciseSubtitle">Quiz

<p style="text-align: right;">

<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 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 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;

<ol class="QuizQuestions" id="Questions">

<li class="QuizQuestion" id="Q_0" style="display: none;"> Un esquema permite ocultar el detalle de unas sumas. <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)"> ? Falso</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)"> ? Vardadero</li></ol></li>

<li class="QuizQuestion" id="Q_1" style="display: none;"> Un esquema lo podemos crear con cualquier tipo de datos. <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)"> ? Falso</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)"> ? Verdadero</li></ol></li>

<li class="QuizQuestion" id="Q_2" style="display: none;"> En una hoja solo podemos disponer de un esquema. <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)"> ? Falso</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)"> ? Verdadero</li></ol></li>

<li class="QuizQuestion" id="Q_3" style="display: none;"> Para crear un esquema autom&#x00E1;tico es necesario dar un formato a los datos. <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)"> ? Verdadero</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)"> ? Falso</li></ol></li>

<li class="QuizQuestion" id="Q_4" style="display: none;"> Para crear un esquema autom&#x00E1;tico debemos acceder a Datos - Agrupar y esquema y seleccionamos Agrupar. <ol class="MCAnswers"><li id="Q_4_0"><button class="FuncButton" onfocus="FuncBtnOver(this)" onblur="FuncBtnOut(this)" onmouseover="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)" onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)" id="Q_4_0_Btn" onclick="CheckMCAnswer(4,0,this)"> ? Verdadero</li><li id="Q_4_1"><button class="FuncButton" onfocus="FuncBtnOver(this)" onblur="FuncBtnOut(this)" onmouseover="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)" onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)" id="Q_4_1_Btn" onclick="CheckMCAnswer(4,1,this)"> ? Falso</li></ol></li>

<li class="QuizQuestion" id="Q_5" style="display: none;"> Para qu&#x00E9; sirve crear grupos de datos <ol class="MCAnswers"><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)"> ? Por organizar los datos.</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)"> ? Para definir los niveles del esquema</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)"> ? Las dos anteriores son correctas</li></ol></li>

<li class="QuizQuestion" id="Q_6" style="display: none;"> Si eliminamos un esquema... <ol class="MCAnswers"><li id="Q_6_0"><button class="FuncButton" onfocus="FuncBtnOver(this)" onblur="FuncBtnOut(this)" onmouseover="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)" onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)" id="Q_6_0_Btn" onclick="CheckMCAnswer(6,0,this)"> ? Despu&#x00E9;s podemos recuperarlo haciendo clic en Edici&#x00F3;n - Deshacer.</li><li id="Q_6_1"><button class="FuncButton" onfocus="FuncBtnOver(this)" onblur="FuncBtnOut(this)" onmouseover="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)" onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)" id="Q_6_1_Btn" onclick="CheckMCAnswer(6,1,this)"> ? No se puede recuperar.</li><li id="Q_6_2"><button class="FuncButton" onfocus="FuncBtnOver(this)" onblur="FuncBtnOut(this)" onmouseover="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)" onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)" id="Q_6_2_Btn" onclick="CheckMCAnswer(6,2,this)"> ? Ninguna de las opciones anteriores.</li></ol></li>

<li class="QuizQuestion" id="Q_7" style="display: none;"> Una tabla din&#x00E1;mica consiste en el resumen de un conjunto de datos, atendiendo a varios criterios de agrupaci&#x00F3;n, representado como una tabla de doble entrada que nos facilita la interpretaci&#x00F3;n de dichos datos. Es din&#x00E1;mica porque nos permite ir obteniendo diferentes totales, filtrando datos, cambiando la presentaci&#x00F3;n de los datos, visualizando o no los datos origen, etc. <div class="ShortAnswer" id="Q_7_SA"><form method="post" action="" onsubmit="return false;"> <input type="text" id="Q_7_Guess" onfocus="TrackFocus('Q_7_Guess')" onblur="LeaveGap" class="ShortAnswerBox" size="9">

<button class="FuncButton" onfocus="FuncBtnOver(this)" onblur="FuncBtnOut(this)" onmouseover="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)" onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)" onclick="CheckShortAnswer(7)">Check <button class="FuncButton" onfocus="FuncBtnOver(this)" onblur="FuncBtnOut(this)" onmouseover="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)" onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)" onclick="ShowHint(7)">Hint <button class="FuncButton" onfocus="FuncBtnOver(this)" onblur="FuncBtnOut(this)" onmouseover="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)" onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)" onclick="ShowAnswers(7)">Show answer </li>

<li class="QuizQuestion" id="Q_8" style="display: none;"> &#x00BF;Cu&#x00E1;l es la funci&#x00F3;n que viene integrada junto con el Piloto de datos, y la Cual es de gran ayuda en la visualizaci&#x00F3;n del contenido despu&#x00E9;s de generada la tabla? <div class="ShortAnswer" id="Q_8_SA"><form method="post" action="" onsubmit="return false;"> <input type="text" id="Q_8_Guess" onfocus="TrackFocus('Q_8_Guess')" onblur="LeaveGap" class="ShortAnswerBox" size="17">

<button class="FuncButton" onfocus="FuncBtnOver(this)" onblur="FuncBtnOut(this)" onmouseover="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)" onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)" onclick="CheckShortAnswer(8)">Check <button class="FuncButton" onfocus="FuncBtnOver(this)" onblur="FuncBtnOut(this)" onmouseover="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)" onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)" onclick="ShowHint(8)">Hint <button class="FuncButton" onfocus="FuncBtnOver(this)" onblur="FuncBtnOut(this)" onmouseover="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)" onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)" onclick="ShowAnswers(8)">Show answer </li>

<li class="QuizQuestion" id="Q_9" style="display: none;"> Para poder crear una tabla din&#x00E1;mica.. <div class="ShortAnswer" id="Q_9_SA"><form method="post" action="" onsubmit="return false;"> <textarea id="Q_9_Guess" onfocus="TrackFocus('Q_9_Guess')" onblur="LeaveGap" class="ShortAnswerBox" cols="29" rows="3">

<button class="FuncButton" onfocus="FuncBtnOver(this)" onblur="FuncBtnOut(this)" onmouseover="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)" onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)" onclick="CheckShortAnswer(9)">Check <button class="FuncButton" onfocus="FuncBtnOver(this)" onblur="FuncBtnOut(this)" onmouseover="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)" onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)" onclick="ShowHint(9)">Hint <button class="FuncButton" onfocus="FuncBtnOver(this)" onblur="FuncBtnOut(this)" onmouseover="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)" onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)" onclick="ShowAnswers(9)">Show answer </li></ol>

<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;"> OK

<button class="NavButton" onfocus="NavBtnOver(this)" onblur="NavBtnOut(this)" onmouseover="NavBtnOver(this)" onmouseout="NavBtnOut(this)" onmousedown="NavBtnDown(this)" onmouseup="NavBtnOut(this)" onclick="location='contents.htm'; return false;"> Index

<button class="NavButton" onfocus="NavBtnOver(this)" onblur="NavBtnOut(this)" onmouseover="NavBtnOver(this)" onmouseout="NavBtnOut(this)" onmousedown="NavBtnDown(this)" onmouseup="NavBtnOut(this)" onclick="location='nextpage.htm'; return false;">=&gt;