<?xml version="1.0"?> |
|
|
|
|
|
|
|
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "xhtml11.dtd"> |
|
|
|
|
|
|
|
|
<html xmlns="http://www.w3.org/1999/xhtml" |
|
|
|
|
|
|
|
|
xml:lang="en"><head><meta name="author" content="Created with Hot Potatoes by Half-Baked Software |
registered to Sherwin Lai."></meta><meta name="keywords" content="Hot Potatoes |
Hot Potatoes |
Half-Baked Software |
Windows |
University of Victoria"></meta> |
|
|
|
|
|
|
|
|
|
|
|
|
<link rel="schema.DC" href="http://purl.org/dc/elements/1.1/" /> |
|
|
|
|
|
|
|
|
<meta name="DC:Creator" content="Sherwin Lai" /> |
|
|
|
|
|
|
|
|
<meta name="DC:Title" content="Sherwin Quiz" /> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<title> |
|
|
|
|
|
|
|
|
Sherwin Quiz |
|
|
|
|
|
|
|
|
</title> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<!-- Made with executable version 6.3 Release 0 Build 5 --> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<!-- The following insertion allows you to add your own code directly to this head tag from the configuration screen --> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<style type="text/css"> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* 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 5 */ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* Hack to hide a nested Quicktime player from IE |
which can't handle it. */ |
|
|
|
|
|
|
|
* html object.MediaPlayerNotForIE { |
|
|
|
|
|
|
|
|
display: none; |
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
body{ |
|
|
|
|
|
|
|
|
font-family: Arial |
Geneva |
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: Arial |
Geneva |
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 |
Arial |
Geneva |
sans-serif; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.CentredRTLText{ |
|
|
|
|
|
|
|
|
text-align: center; |
|
|
|
|
|
|
|
|
font-size: 150%; |
|
|
|
|
|
|
|
|
direction: rtl; |
|
|
|
|
|
|
|
|
font-family: "Simplified Arabic" |
Traditional Arabic |
Times New Roman |
Arial |
Geneva |
sans-serif; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
button p.RTLText{ |
|
|
|
|
|
|
|
|
text-align: center; |
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.RTLGapBox{ |
|
|
|
|
|
|
|
|
text-align: right; |
|
|
|
|
|
|
|
|
font-size: 150%; |
|
|
|
|
|
|
|
|
direction: rtl; |
|
|
|
|
|
|
|
|
font-family: "Times New Roman" |
Arial |
Geneva |
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: Arial |
Geneva |
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: Arial |
Geneva |
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: Arial |
Geneva |
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: Arial |
Geneva |
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%; |
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</style> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<script type="text/javascript"> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//<![CDATA[ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<!-- |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function Client(){ |
|
|
|
|
|
|
|
|
//if not a DOM browser |
hopeless |
|
|
|
|
|
|
|
this.min = false; if (document.getElementById){this.min = true;}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
this.ua = navigator.userAgent; |
|
|
|
|
|
|
|
|
this.name = navigator.appName; |
|
|
|
|
|
|
|
|
this.ver = navigator.appVersion; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//Get data about the browser |
|
|
|
|
|
|
|
|
this.mac = (this.ver.indexOf('Mac') != -1); |
|
|
|
|
|
|
|
|
this.win = (this.ver.indexOf('Windows') != -1); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//Look for Gecko |
|
|
|
|
|
|
|
|
this.gecko = (this.ua.indexOf('Gecko') > 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 + '<br /><br />'; |
|
|
|
|
|
|
|
|
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.length; i++){ |
|
|
|
|
|
|
|
|
if (InArray[i].length > 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<NList.length; i++){ |
|
|
|
|
|
|
|
|
if ((NList[i].id.indexOf('Guess') > -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 = 'C'; |
|
|
|
|
|
|
|
|
var IncorrectIndicator = 'I'; |
|
|
|
|
|
|
|
|
var YourScoreIs = 'Correct Answers: '; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//New for 6.2.2.0 |
|
|
|
|
|
|
|
|
var CompletedSoFar = 'Questions completed: '; |
|
|
|
|
|
|
|
|
var ExerciseCompleted = 'This exercise has been completed.'; |
|
|
|
|
|
|
|
|
var ShowCompletedSoFar = true; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var ContinuousScoring = false; |
|
|
|
|
|
|
|
|
var CorrectFirstTime = 'Score: '; |
|
|
|
|
|
|
|
|
var ShowCorrectFirstTime = true; |
|
|
|
|
|
|
|
|
var ShuffleQs = false; |
|
|
|
|
|
|
|
|
var ShuffleAs = false; |
|
|
|
|
|
|
|
|
var DefaultRight = 'Correct.'; |
|
|
|
|
|
|
|
|
var DefaultWrong = 'Incorrect; Try again.'; |
|
|
|
|
|
|
|
|
var QsToShow = 6; |
|
|
|
|
|
|
|
|
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 individually'; |
|
|
|
|
|
|
|
|
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<I.length; QNum++){ |
|
|
|
|
|
|
|
|
//Only do this if not multi-select |
|
|
|
|
|
|
|
|
if (I[QNum][2] != '3'){ |
|
|
|
|
|
|
|
|
for (ANum = 0; ANum<I[QNum][3].length; ANum++){ |
|
|
|
|
|
|
|
|
if (I[QNum][3][ANum][1].length < 1){ |
|
|
|
|
|
|
|
|
if (I[QNum][3][ANum][2] > 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<QList.length; i++){ |
|
|
|
|
|
|
|
|
As = QList[i].getElementsByTagName('ol')[0]; |
|
|
|
|
|
|
|
|
if (As != null){ |
|
|
|
|
|
|
|
|
AList.length = 0; |
|
|
|
|
|
|
|
|
while (As.getElementsByTagName('li').length > 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('Sherwin' |
'...!?!?' |
0 |
0 |
1); |
|
|
|
|
I[0][3][1]=new Array('Sherwin Lai' |
'So you do know me |
kind of. Go to the next question!' |
1 |
100 |
1); |
|
|
|
I[0][3][2]=new Array('Sherwin Lie' |
'Yeah |
right.' |
0 |
0 |
1); |
|
|
|
I[0][3][3]=new Array('SherwinCenter' |
'Yeah |
right.' |
0 |
0 |
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('nothing.' |
'Wrong!' |
0 |
0 |
1); |
|
|
|
|
I[1][3][1]=new Array('everything.' |
'Wrong!' |
0 |
0 |
1); |
|
|
|
|
I[1][3][2]=new Array('you.' |
'Wrong!' |
0 |
0 |
1); |
|
|
|
|
I[1][3][3]=new Array('Hmmm...interesting question. I don\'t know.' |
'Shoot. You\'re really sooooo smart...' |
1 |
100 |
1); |
|
|
|
|
I[2]=new Array();I[2][0]=100; |
|
|
|
|
|
|
|
|
I[2][1]=''; |
|
|
|
|
|
|
|
|
I[2][2]='1'; |
|
|
|
|
|
|
|
|
I[2][3]=new Array(); |
|
|
|
|
|
|
|
|
I[2][3][0]=new Array('Sherwanios Miscellaneous' |
'oh.' |
1 |
100 |
1); |
|
|
|
|
I[2][3][1]=new Array('Sherwin wins by lying' |
'oh.' |
1 |
100 |
1); |
|
|
|
|
I[2][3][2]=new Array('Sherwin Lai' |
'yeah |
too plain' |
1 |
100 |
1); |
|
|
|
I[2][3][3]=new Array('slai' |
'So you do play games w/ me.' |
1 |
100 |
1); |
|
|
|
|
I[3]=new Array();I[3][0]=100; |
|
|
|
|
|
|
|
|
I[3][1]=''; |
|
|
|
|
|
|
|
|
I[3][2]='1'; |
|
|
|
|
|
|
|
|
I[3][3]=new Array(); |
|
|
|
|
|
|
|
|
I[3][3][0]=new Array('sherwincenter.tk' |
'You\'re already at my site |
duh!' |
1 |
100 |
1); |
|
|
|
I[3][3][1]=new Array('www.sherwincenter.tk' |
'You\'re already at my site |
duh!' |
1 |
100 |
1); |
|
|
|
I[3][3][2]=new Array('http://www.sherwincenter.tk' |
'You\'re already at my site |
duh!' |
1 |
100 |
1); |
|
|
|
I[3][3][3]=new Array('http://sherwincenter.tk' |
'You\'re already at my site |
duh!' |
1 |
100 |
1); |
|
|
|
I[4]=new Array();I[4][0]=100; |
|
|
|
|
|
|
|
|
I[4][1]=''; |
|
|
|
|
|
|
|
|
I[4][2]='1'; |
|
|
|
|
|
|
|
|
I[4][3]=new Array(); |
|
|
|
|
|
|
|
|
I[4][3][0]=new Array('Games' |
'You rock.' |
1 |
100 |
1); |
|
|
|
|
I[4][3][1]=new Array('Pi' |
'You\'re a geek.' |
0 |
0 |
1); |
|
|
|
|
I[4][3][2]=new Array('Pin Numbers' |
'You\'re a hacker.' |
0 |
0 |
1); |
|
|
|
|
I[4][3][3]=new Array('Login' |
'You\'re a hacker or you\'re stupid.' |
0 |
0 |
1); |
|
|
|
|
I[5]=new Array();I[5][0]=100; |
|
|
|
|
|
|
|
|
I[5][1]=''; |
|
|
|
|
|
|
|
|
I[5][2]='1'; |
|
|
|
|
|
|
|
|
I[5][3]=new Array(); |
|
|
|
|
|
|
|
|
I[5][3][0]=new Array('LOL' |
'Hope you enjoyed! Stay tuned in for new stuff!' |
0 |
0 |
1); |
|
|
|
|
I[5][3][1]=new Array('I\'m happy.' |
'Hope you enjoyed! Stay tuned in for new stuff!' |
0 |
0 |
1); |
|
|
|
|
I[5][3][2]=new Array('I\'m sad.' |
'Hope you enjoyed! Stay tuned in for new stuff!' |
1 |
100 |
1); |
|
|
|
|
I[5][3][3]=new Array('I don\'t care.' |
'Hope you enjoyed! Stay tuned in for new stuff!' |
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 += '<br />' + 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 += '<br />' + YourScoreIs + ' ' + Score + '%.' + '<br />' + QsDone; |
|
|
|
|
|
|
|
|
WriteToInstructions(YourScoreIs + ' ' + Score + '%.' + '<br />' + 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 += '<br />' + YourScoreIs + ' ' + Score + '%.' + '<br />' + QsDone; |
|
|
|
|
|
|
|
|
WriteToInstructions(YourScoreIs + ' ' + Score + '%.' + '<br />' + 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<I[QNum][3].length; ANum++){ |
|
|
|
|
|
|
|
|
if (I[QNum][3][ANum][4] == 1){ //This is an MC answer |
|
|
|
|
|
|
|
|
if (State[QNum][1][ANum] < 1){ //This answer hasn't been chosen yet |
|
|
|
|
|
|
|
|
UnchosenAnswers++; |
|
|
|
|
|
|
|
|
FinalAnswer = ANum; |
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
if (UnchosenAnswers == 1){ |
|
|
|
|
|
|
|
|
return FinalAnswer; |
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
else{ |
|
|
|
|
|
|
|
|
return -1; |
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function CalculateOverallScore(){ |
|
|
|
|
|
|
|
|
var TotalWeighting = 0; |
|
|
|
|
|
|
|
|
var TotalScore = 0; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for (var QNum=0; QNum<State.length; QNum++){ |
|
|
|
|
|
|
|
|
if (State[QNum] != null){ |
|
|
|
|
|
|
|
|
if (State[QNum][0] > -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 += '<br />' + CorrectFirstTime + ' ' + CFT + '/' + QsToShow; |
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//New for 6.2.2.0 |
|
|
|
|
|
|
|
|
FB += '<br />' + ExerciseCompleted; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
WriteToInstructions(FB); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Finished == true; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
TimeOver = true; |
|
|
|
|
|
|
|
|
Locked = true; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Finished = true; |
|
|
|
|
|
|
|
|
Detail = '<?xml version="1.0"?><hpnetresult><fields>'; |
|
|
|
|
|
|
|
|
for (QNum=0; QNum<State.length; QNum++){ |
|
|
|
|
|
|
|
|
if (State[QNum] != null){ |
|
|
|
|
|
|
|
|
if (State[QNum][5].length > 0){ |
|
|
|
|
|
|
|
|
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>'; |
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
Detail += '</fields></hpnetresult>'; |
|
|
|
|
|
|
|
|
setTimeout('Finish()' |
SubmissionTimeout); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//CORE CODE FOR CHECKING SHORT ANSWER GUESSES AGAINST ANSWER ARRAYS |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var CaseSensitive = false; |
|
|
|
|
|
|
|
|
var ShowAlsoCorrect = true; |
|
|
|
|
|
|
|
|
var PleaseEnter = 'Please enter an answer'; |
|
|
|
|
|
|
|
|
var HybridTries = 2; |
|
|
|
|
|
|
|
|
var PartlyIncorrect = 'Partially Incorrect.'; |
|
|
|
|
|
|
|
|
var CorrectList = 'Correct:'; |
|
|
|
|
|
|
|
|
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 += '<span class="PartialAnswer">' + this.Answers[BestMatch].CorrectStart; |
|
|
|
|
|
|
|
|
this.Feedback += '<span class="Highlight">' + this.Answers[BestMatch].WrongMiddle + '</span>'; |
|
|
|
|
|
|
|
|
this.Feedback += this.Answers[BestMatch].CorrectEnd + '</span>'; |
|
|
|
|
|
|
|
|
this.Hint = '<span class="PartialAnswer">' + this.Answers[BestMatch].CorrectStart; |
|
|
|
|
|
|
|
|
this.Hint += '<span class="Highlight">' + this.Answers[BestMatch].Hint + '</span></span>'; |
|
|
|
|
|
|
|
|
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 += '<br />' + CorrectList + '<br />' + AlsoCorrectList; |
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//Get the overall score and add it to the feedback |
|
|
|
|
|
|
|
|
if (ContinuousScoring == true){ |
|
|
|
|
|
|
|
|
CalculateOverallScore(); |
|
|
|
|
|
|
|
|
CA.Feedback += '<br />' + YourScoreIs + ' ' + Score + '%.' + '<br />' + QsDone; |
|
|
|
|
|
|
|
|
WriteToInstructions(YourScoreIs + ' ' + Score + '%.' + '<br />' + 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] + '<br />'; |
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
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 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 + '<br />' + 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 + '<br />' + CA.Hint); |
|
|
|
|
|
|
|
|
State[QNum][4] += CA.HintPenalty; |
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
else{ |
|
|
|
|
|
|
|
|
ShowMessage(DefaultWrong + '<br />' + NextCorrect + '<br />' + GetFirstCorrectAnswer(QNum).charAt(0)); |
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//--> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//]]> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</script> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</head> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<body onload="StartUp()" id="TheBody" > |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<!-- BeginTopNavButtons --> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<!-- EndTopNavButtons --> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div class="Titles"> |
|
|
|
|
|
|
|
|
<h2 class="ExerciseTitle">Sherwin Quiz</h2> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<h3 class="ExerciseSubtitle">Quiz</h3> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</div> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div id="InstructionsDiv" class="StdDiv"> |
|
|
|
|
|
|
|
|
<div id="Instructions"></div> |
|
|
|
|
|
|
|
|
</div> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div id="MainDiv" class="StdDiv"> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div id="QNav" class="QuestionNavigation"> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<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> |
|
|
|
|
|
|
|
|
</p> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div id="OneByOneReadout"> |
|
|
|
|
|
|
|
|
<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;">Previous ?</button> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<span id="QNumReadout" class="QNum"> </span> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<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;">Next ?</button> |
|
|
|
|
|
|
|
|
<br /> |
|
|
|
|
|
|
|
|
</div> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</div> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<ol class="QuizQuestions" id="Questions"> |
|
|
|
|
|
|
|
|
<li class="QuizQuestion" id="Q_0" style="display: none;"><div class="QuestionText">Sherwin's name is</div><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)"> ? </button> Sherwin</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)"> ? </button> Sherwin Lai</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)"> ? </button> Sherwin Lie</li><li id="Q_0_3"><button class="FuncButton" onfocus="FuncBtnOver(this)" onblur="FuncBtnOut(this)" onmouseover="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)" onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)" id="Q_0_3_Btn" onclick="CheckMCAnswer(0 |
3 |
this)"> ? </button> SherwinCenter</li></ol></li> |
<li class="QuizQuestion" id="Q_1" style="display: none;"><div class="QuestionText">Sherwin hates</div><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)"> ? </button> nothing.</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)"> ? </button> everything.</li><li id="Q_1_2"><button class="FuncButton" onfocus="FuncBtnOver(this)" onblur="FuncBtnOut(this)" onmouseover="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)" onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)" id="Q_1_2_Btn" onclick="CheckMCAnswer(1 |
2 |
this)"> ? </button> you.</li><li id="Q_1_3"><button class="FuncButton" onfocus="FuncBtnOver(this)" onblur="FuncBtnOut(this)" onmouseover="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)" onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)" id="Q_1_3_Btn" onclick="CheckMCAnswer(1 |
3 |
this)"> ? </button> Hmmm...interesting question. I don't know.</li></ol></li> |
<li class="QuizQuestion" id="Q_2" style="display: none;"><div class="QuestionText">Sherwin is known as...</div><div class="ShortAnswer" id="Q_2_SA"><form method="post" action="" onsubmit="return false;"><div><input type="text" id="Q_2_Guess" onfocus="TrackFocus('Q_2_Guess')" onblur="LeaveGap()" class="ShortAnswerBox" size="24"></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(2)">Submit</button><button class="FuncButton" onfocus="FuncBtnOver(this)" onblur="FuncBtnOut(this)" onmouseover="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)" onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)" onclick="ShowHint(2)">Hint</button></div></form></div></li> |
|
|
|
|
|
|
|
|
<li class="QuizQuestion" id="Q_3" style="display: none;"><div class="QuestionText">Sherwin's website is</div><div class="ShortAnswer" id="Q_3_SA"><form method="post" action="" onsubmit="return false;"><div><textarea id="Q_3_Guess" onfocus="TrackFocus('Q_3_Guess')" onblur="LeaveGap()" class="ShortAnswerBox" cols="29" rows="2"></textarea><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(3)">Submit</button><button class="FuncButton" onfocus="FuncBtnOver(this)" onblur="FuncBtnOut(this)" onmouseover="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)" onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)" onclick="ShowHint(3)">Hint</button></div></form></div></li> |
|
|
|
|
|
|
|
|
<li class="QuizQuestion" id="Q_4" style="display: none;"><div class="QuestionText">What is your favorite page on this site?</div><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="ShortAnswerBox" 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)">Submit</button><button class="FuncButton" onfocus="FuncBtnOver(this)" onblur="FuncBtnOut(this)" onmouseover="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)" onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)" onclick="ShowHint(4)">Hint</button></div></form></div></li> |
|
|
|
|
|
|
|
|
<li class="QuizQuestion" id="Q_5" style="display: none;"><div class="QuestionText">Goodbye!</div><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="ShortAnswerBox" 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)">Submit</button><button class="FuncButton" onfocus="FuncBtnOver(this)" onblur="FuncBtnOut(this)" onmouseover="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)" onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)" onclick="ShowHint(5)">Hint</button></div></form></div></li></ol> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</div> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div class="Feedback" id="FeedbackDiv"> |
|
|
|
|
|
|
|
|
<div class="FeedbackText" id="FeedbackContent"></div> |
|
|
|
|
|
|
|
|
<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> |
|
|
|
|
|
|
|
|
</div> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<!-- BeginBottomNavButtons --> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<!-- EndBottomNavButtons --> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<!-- BeginSubmissionForm --> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<!-- EndSubmissionForm --> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</body> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</html> |
|
|
|
|
|
|
|
|