Index: /trunk/max-javahotpot-tutorial/debian/control
===================================================================
--- /trunk/max-javahotpot-tutorial/debian/control (revision 35)
+++ /trunk/max-javahotpot-tutorial/debian/control (revision 35)
@@ -0,0 +1,12 @@
+Source: max-javahotpot-tutorial
+Section: max
+Priority: optional
+Maintainer: Mario Izquierdo (mariodebian) <mariodebian@gmail.com>
+Build-Depends: debhelper (>= 4.1.0), cdbs
+Standards-Version: 3.7.2
+
+Package: max-javahotpot-tutorial
+Architecture: all 
+Depends: firefox, javahotpot
+Description: Tutorial de javahotpotatoes empaquetado para MAX 3.1
+ Javahotpotatoes html tutorial
Index: /trunk/max-javahotpot-tutorial/debian/dirs
===================================================================
--- /trunk/max-javahotpot-tutorial/debian/dirs (revision 35)
+++ /trunk/max-javahotpot-tutorial/debian/dirs (revision 35)
@@ -0,0 +1,2 @@
+usr/share/javahotpot/
+usr/share/applications/
Index: /trunk/max-javahotpot-tutorial/debian/compat
===================================================================
--- /trunk/max-javahotpot-tutorial/debian/compat (revision 35)
+++ /trunk/max-javahotpot-tutorial/debian/compat (revision 35)
@@ -0,0 +1,1 @@
+4
Index: /trunk/max-javahotpot-tutorial/debian/install
===================================================================
--- /trunk/max-javahotpot-tutorial/debian/install (revision 35)
+++ /trunk/max-javahotpot-tutorial/debian/install (revision 35)
@@ -0,0 +1,2 @@
+tutorial/ usr/share/javahotpot/
+javahotpot-tutorial.desktop usr/share/applications/
Index: /trunk/max-javahotpot-tutorial/debian/changelog
===================================================================
--- /trunk/max-javahotpot-tutorial/debian/changelog (revision 35)
+++ /trunk/max-javahotpot-tutorial/debian/changelog (revision 35)
@@ -0,0 +1,11 @@
+max-javahotpot-tutorial (3.1.max1) max; urgency=low
+
+  * New release
+
+ -- Mario Izquierdo (mariodebian) <mariodebian@gmail.com>  Tue, 01 Jan 2008 20:42:53 +0100
+
+max-javahotpot-tutorial (0.1) stable; urgency=low
+
+  * Initial release. (#265)
+
+ -- Jon Latorre Martinez <moebius@grupoikusnet.com>  Thu,  4 Jan 2007 14:40:52 +0100
Index: /trunk/max-javahotpot-tutorial/debian/copyright
===================================================================
--- /trunk/max-javahotpot-tutorial/debian/copyright (revision 35)
+++ /trunk/max-javahotpot-tutorial/debian/copyright (revision 35)
@@ -0,0 +1,7 @@
+License:
+
+This software is licensed under the GPL
+
+On Debian systems, the complete text of the GNU General
+Public License can be found in `/usr/share/common-licenses/GPL'.
+
Index: /trunk/max-javahotpot-tutorial/debian/rules
===================================================================
--- /trunk/max-javahotpot-tutorial/debian/rules (revision 35)
+++ /trunk/max-javahotpot-tutorial/debian/rules (revision 35)
@@ -0,0 +1,9 @@
+#!/usr/bin/make -f
+
+include /usr/share/cdbs/1/rules/debhelper.mk
+
+
+binary-install/max-javahotpot-tutorial::
+	# clean svn dirs
+	find $(CURDIR)/debian/max-javahotpot-tutorial -type d -name .svn | xargs rm -rf --
+
Index: /trunk/max-javahotpot-tutorial/tutorial/jmix1.htm
===================================================================
--- /trunk/max-javahotpot-tutorial/tutorial/jmix1.htm (revision 35)
+++ /trunk/max-javahotpot-tutorial/tutorial/jmix1.htm (revision 35)
@@ -0,0 +1,1428 @@
+<?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 Ismail Ali Gago."></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="Ismail Ali Gago" />
+<meta name="DC:Creator" content="UNREGISTERED" />
+<meta name="DC:Title" content="Ejercicio de ordenar frases realizado con JMix" />
+
+
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
+
+<title>
+Ejercicio de ordenar frases realizado con JMix
+</title>
+
+<!-- Made with executable version 6.0 Release 2 Build 0 -->
+
+<!-- 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. */
+
+
+body{
+	font-family: Geneva,Arial;
+	background-color: #ffffff;
+	color: #000000;
+ 
+	margin-right: 5%;
+	margin-left: 5%;
+	font-size: small;
+}
+
+p{
+	text-align: left;
+	margin: 0px;
+	font-size: small;
+}
+
+div,span,td{
+	font-size: small;
+	color: #000000;
+}
+
+.RTLText{
+	text-align: right;
+	font-size: 150%;
+	direction: rtl;
+	font-family: "Simplified Arabic", "Traditional Arabic", "Times New Roman", Geneva,Arial; 
+}
+
+.CentredRTLText{
+	text-align: center;
+	font-size: 150%;
+	direction: rtl;
+	font-family: "Simplified Arabic", "Traditional Arabic", "Times New Roman", Geneva,Arial; 
+}
+
+button p.RTLText{
+	text-align: center;
+}
+
+.RTLGapBox{
+	text-align: right;
+	font-size: 150%;
+	direction: rtl;
+	font-family: "Times New Roman", Geneva,Arial;
+}
+
+.Guess{
+	font-weight: bold;
+}
+
+.CorrectAnswer{
+	font-weight: bold;
+}
+
+div.Titles{
+	padding: 10px;
+	text-align: center;
+	color: #330000;
+}
+
+button{
+	display: inline;
+}
+
+.ExerciseTitle{
+	font-size: large;
+	color: #330000;
+}
+
+.ExerciseSubtitle{
+	color: #330000;
+}
+
+div#Timer{
+	padding: 6px;
+	margin-left: auto;
+	margin-right: auto;
+	text-align: center;
+}
+
+span#TimerText{
+	padding: 6px;
+	border-width: 1px;
+	border-style: solid;
+	font-weight: bold;
+	display: none;
+}
+
+span.Instructions{
+
+}
+
+div.ExerciseText{
+
+}
+
+.FeedbackText{
+	color: #330000;
+}
+
+span.LeftItem{
+	font-size: small;
+	color: #000000;
+}
+
+span.RightItem{
+	font-weight: bold;
+	font-size: small;
+	color: #000000;
+}
+
+span.CorrectMark{
+
+}
+
+div.Feedback {
+	background-color: #ffffff;
+	left: 33%;
+	width: 34%;
+	top: 33%;
+	z-index: 1;
+	border-style: solid;
+	border-width: 1px;
+	padding: 5px;
+	text-align: center;
+	color: #330000;
+	position: absolute;
+	display: none;
+	font-size: small;
+}
+
+
+
+
+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;
+	align: center;
+	padding: 0px;
+}
+
+table.FlashcardTable tr{
+	border-style: none;
+	margin: 0px;
+	padding: 0px;
+	background-color: #bfcaae;
+}
+
+table.FlashcardTable td.Showing{
+	font-size: large;
+	text-align: center;
+	width: 50%;
+	display: table-cell;
+	padding: 2em;
+	margin: 0px;
+	border-style: solid;
+	border-width: 1px;
+	color: #000000;
+	background-color: #bfcaae;
+}
+
+table.FlashcardTable td.Hidden{
+	display: none;
+}
+
+/* JMix styles */
+div#SegmentDiv{
+	margin-top: 2em;
+	margin-bottom: 2em;
+	text-align: center;
+}
+
+a.ExSegment{
+	font-size: medium;
+	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: #330000;
+	width: 80%;
+}
+
+/* JCloze styles */
+
+input{
+	font-family: Geneva,Arial;
+	font-size: larger;
+}
+
+.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;
+}
+
+table.CrosswordGrid td{
+	width: 1.5em;
+	height: 1.5em;
+	text-align: center;
+	vertical-align: middle;
+	font-size: large;
+	padding: 0px;
+	margin: 0px;
+	border-style: solid;
+	border-width: 1px;
+	border-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;
+}
+
+.GridNum{
+	vertical-align: super;
+	font-size: x-small;
+	font-weight: bold;
+	text-decoration: none;
+	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;
+}
+
+div.Keypad button{
+	font-family: Geneva,Arial;
+	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;
+	font-size: larger;
+}
+
+.QuestionText{
+
+}
+
+.Answer{
+	font-size: 120%;
+	letter-spacing: 0.1em;
+}
+
+.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;
+}
+
+div.StdDiv{
+	background-color: #bfcaae;
+	text-align: center;
+	font-size: small;
+	color: #000000;
+	padding: 8px;
+	border-style: solid;
+	border-width: 1px 1px 1px 1px;
+	border-color: #000000;
+	margin: 1px;
+}
+
+.FuncButton {
+	text-align: center;
+	border-style: solid;
+
+	border-left-color: #dfe4d6;
+	border-top-color: #dfe4d6;
+	border-right-color: #5f6557;
+	border-bottom-color: #5f6557;
+	color: #000000;
+	background-color: #bfcaae;
+
+	border-width: 2px;
+	padding: 3px 6px 3px 6px;
+	cursor: pointer;
+}
+
+.FuncButtonUp {
+	color: #bfcaae;
+	text-align: center;
+	border-style: solid;
+
+	border-left-color: #dfe4d6;
+	border-top-color: #dfe4d6;
+	border-right-color: #5f6557;
+	border-bottom-color: #5f6557;
+
+	background-color: #000000;
+	color: #bfcaae;
+	border-width: 2px;
+	padding: 3px 6px 3px 6px;
+	cursor: pointer;
+}
+
+.FuncButtonDown {
+	color: #bfcaae;
+	text-align: center;
+	border-style: solid;
+
+	border-left-color: #5f6557;
+	border-top-color: #5f6557;
+	border-right-color: #dfe4d6;
+	border-bottom-color: #dfe4d6;
+	background-color: #000000;
+	color: #bfcaae;
+
+	border-width: 2px;
+	padding: 3px 6px 3px 6px;
+	cursor: pointer;
+}
+
+/*BeginNavBarStyle*/
+
+div.NavButtonBar{
+	background-color: #008000;
+	text-align: center;
+	margin: 2px 0px 2px 0px;
+	clear: both;
+	font-size: small;
+}
+
+.NavButton {
+	border-style: solid;
+	
+	border-left-color: #7fbf7f;
+	border-top-color: #7fbf7f;
+	border-right-color: #004000;
+	border-bottom-color: #004000;
+	background-color: #008000;
+	color: #ffffff;
+
+	border-width: 2px;
+	cursor: pointer;	
+}
+
+.NavButtonUp {
+	border-style: solid;
+
+	border-left-color: #7fbf7f;
+	border-top-color: #7fbf7f;
+	border-right-color: #004000;
+	border-bottom-color: #004000;
+	color: #008000;
+	background-color: #ffffff;
+
+	border-width: 2px;
+	cursor: pointer;	
+}
+
+.NavButtonDown {
+	border-style: solid;
+
+	border-left-color: #004000;
+	border-top-color: #004000;
+	border-right-color: #7fbf7f;
+	border-bottom-color: #7fbf7f;
+	color: #008000;
+	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;
+	font-size: small;
+	padding: 5px;
+	border-style: solid;
+	border-width: 1px;
+	color: #000000;
+	background-color: #bfcaae;
+	left: -50px;
+	top: -50px;
+	overflow: visible;
+}
+
+.rtl{
+	text-align: right;
+	font-size: large;
+}
+
+
+</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';
+//IE can't focus a hidden div; Moz needs to focus before display to avoid jumping
+	if (C.gecko){
+		document.getElementById('FeedbackOKButton').focus();
+	}
+	FDiv.style.display = 'block';
+
+	ShowElements(false, 'input');
+	ShowElements(false, 'select');
+	ShowElements(false, 'object');
+	if (C.ie){
+		document.getElementById('FeedbackOKButton').focus();
+	}
+	
+//
+}
+
+function ShowElements(Show, TagName){
+//Special for IE bug -- hide all the form elements that will show through the popup
+	if (C.ie){
+		var Els = document.getElementsByTagName(TagName);
+		for (var i=0; i<Els.length; i++){
+			if (Show == true){
+				Els[i].style.display = 'inline';
+			}
+			else{
+				Els[i].style.display = 'none';
+			}
+		}
+	} 
+}
+
+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 (document.documentElement && document.documentElement.scrollTop){
+		return document.documentElement.scrollTop;
+	}
+	else{
+		if (document.body){
+ 			return document.body.scrollTop;
+		}
+		else{
+			return window.pageYOffset;
+		}
+	}
+}
+
+function GetViewportHeight(){
+	if (window.innerWidth){
+		return window.innerWidth;
+	}
+	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{
+	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){
+	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; k++) {
+			Temp[k] = Temp[k+1];
+		}
+		j--;
+	}
+	return InArray;
+}
+
+function WriteToInstructions(Feedback) {
+//	Feedback = '<span class="FeedbackText">' + Feedback + '</span>';
+	document.getElementById('InstructionsDiv').innerHTML = Feedback;
+
+}
+
+
+
+
+function EscapeDoubleQuotes(InString){
+	return InString.replace(/"/g, '&quot;')
+}
+
+function FocusAButton(){
+	if (document.getElementById('CheckButton1') != null){
+		document.getElementById('CheckButton1').focus();
+	}
+	else{
+		document.getElementsByTagName('button')[0].focus();
+	}
+}
+
+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].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){
+		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();
+	}
+}
+
+
+//JMIX STANDARD OUTPUT FORMAT CODE
+
+
+var CorrectResponse = 'Correcto';
+var IncorrectResponse = 'Lo siento, pruebe otra vez';
+var TheseAnswersToo = 'Estas respuestas son tambi&#x00E9;n correctas:';
+var ThisMuchCorrect = 'Esta parte de su respuesta es corecta:';
+var RemainingWords = 'Palabras restantes:';
+var NextCorrect = 'La siguiente palabra correcta es:';
+var YourScoreIs = 'Su puntuaci&#x00F3;n es:';
+var CapitalizeFirst = true;
+var DefaultResponse = '[strDefaultResponse]';
+var Penalties = 0;
+var Finished = false;
+var Score = 0;
+
+
+var SegmentTemplate = '&nbsp; &nbsp;<a class="ExSegment" href="javascript:void(0)" onclick="AddSegment([SegmentNumber])" title="Pulse sobre las palabras para a&#x00F1;adirlas a la frase">[CurrentSegment]</a>&nbsp; &nbsp;';
+
+var Exercise = '';
+
+var Punctuation = '\u002E';
+
+var Openers = '';
+
+var Guesses = new Array();
+var Remaining = new Array();
+var CorrectParts = new Array();
+
+var ClosestMatch = 0;
+
+var LowerString='';
+var UpperString='';
+
+var Output = '';
+
+var Segments = new Array();
+Segments[0] = new Array();
+Segments[0][0] = '\u0048\u006F\u0074\u0020\u0050\u006F\u0074\u0061\u0074\u006F\u0065\u0073';
+Segments[0][1] = 1;
+Segments[0][2] = 0;
+Segments[1] = new Array();
+Segments[1][0] = '\u0064\u0069\u0073\u0070\u006F\u006E\u0069\u0062\u006C\u0065';
+Segments[1][1] = 3;
+Segments[1][2] = 0;
+Segments[2] = new Array();
+Segments[2][0] = '\u004D\u0061\u0063\u0069\u006E\u0074\u006F\u0073\u0068';
+Segments[2][1] = 7;
+Segments[2][2] = 0;
+Segments[3] = new Array();
+Segments[3][0] = '\u0057\u0069\u006E\u0064\u006F\u0077\u0073';
+Segments[3][1] = 5;
+Segments[3][2] = 0;
+Segments[4] = new Array();
+Segments[4][0] = '\u0065\u0073\u0074\u00E1';
+Segments[4][1] = 2;
+Segments[4][2] = 0;
+Segments[5] = new Array();
+Segments[5][0] = '\u0070\u0061\u0072\u0061';
+Segments[5][1] = 4;
+Segments[5][2] = 0;
+Segments[6] = new Array();
+Segments[6][0] = '\u002E';
+Segments[6][1] = 8;
+Segments[6][2] = 0;
+Segments[7] = new Array();
+Segments[7][0] = '\u0079';
+Segments[7][1] = 6;
+Segments[7][2] = 0;
+
+
+var GuessSequence = new Array();
+
+var Answers = new Array();
+Answers[0] = new Array(1,2,3,4,5,6,7,8);
+Answers[1] = new Array(1,2,3,4,7,6,5,8);
+
+
+function WriteToGuess(Feedback) {
+	Feedback = '<span class="FeedbackText">' + Feedback + '</span>';
+	document.getElementById('GuessDiv').innerHTML = Feedback;
+
+}
+
+function Restart(){
+	Penalties = 0;
+	GuessSequence.length = 0;
+	Segments = Shuffle(Segments);
+	BuildCurrGuess();
+	WriteToGuess(RemainingWords + '<br /><span class="RemainingWordList">' + RemainingList + '</span>');
+	BuildExercise();
+	DisplayExercise(Exercise);
+}
+
+function Undo(){
+	if (GuessSequence.length < 1){
+		return;
+	}
+	GuessSequence.length = GuessSequence.length - 1;
+	BuildCurrGuess();
+	BuildExercise();
+	DisplayExercise(Exercise);
+	WriteToGuess('<span class="Answer">' + Output + '</span><br /><br />' + RemainingWords + '<br /><span class="RemainingWordList">' + RemainingList + '</span>');
+}
+
+function AddSegment(SegNum){
+
+	GuessSequence[GuessSequence.length] = SegNum;
+	BuildCurrGuess();
+	WriteToGuess('<span class="Answer">' + Output + '</span>');
+	BuildExercise();
+	DisplayExercise(Exercise);
+}
+
+function BuildCurrGuess(){
+
+	var i = 0;
+	var j = 0;
+	var NewSeg = '';
+
+//first, create arrays of all the segments guessed so far and those not yet used
+	GuessSegs = new Array();
+	GuessSegs.length = 0;
+
+//set the "used" markers all to 0
+	for (i=0; i<Segments.length; i++){
+		Segments[i][2] = 0;
+	}
+
+	for (i=0; i<GuessSequence.length; i++){
+		for (j=0; j<Segments.length; j++){
+			if ((Segments[j][1] == GuessSequence[i])&&(Segments[j][2] == 0)){
+				GuessSegs[GuessSegs.length] = Segments[j][0];
+				Segments[j][2] = 1;
+				break;
+			}
+		}
+	}
+
+//Create the list of unused segments
+	RemainingList = '';
+	for (i=0; i<Segments.length; i++){
+		if (Segments[i][2] == 0){
+			RemainingList += Segments[i][0] + '&nbsp; &nbsp;&nbsp;';
+		}
+	}
+	
+//now concatenate the segments, adding spaces where appropriate;
+	Output = CompileString(GuessSequence);
+}
+
+function CompileString(InArray){
+	var OutString = '';
+	var i = 0;
+	OutArray = new Array();
+
+	for (i=0; i<InArray.length; i++){
+		OutArray[OutArray.length] = FindSegment(InArray[i]);
+	}
+
+	if (OutArray.length > 0){
+		OutString = OutArray[0];
+	}
+	else{
+		OutString = '';
+	}
+	var Spacer = '';
+
+	for (i=1; i<OutArray.length; i++){
+		Spacer = ' ';
+		if ((Openers.indexOf(OutString.charAt(OutString.length-1)) > -1)||(Punctuation.indexOf(OutArray[i].charAt(0)) > -1)){
+			Spacer = '';
+		}
+		OutString = OutString + Spacer + OutArray[i];		
+	}
+
+//Capitalize the first letter if necessary
+	if (CapitalizeFirst == true){
+		i = 0;
+		if ((Openers.indexOf(OutString.charAt(i))>-1)||(OutString.charAt(i) == ' ')){
+			i++;
+		}
+		if ((Openers.indexOf(OutString.charAt(i))>-1)||(OutString.charAt(i) == ' ')){
+			i++;
+		}
+		var Temp = OutString.charAt(i);
+		Temp = Temp.toUpperCase();
+		OutString = OutString.substring(0, i) + Temp + OutString.substring(i+1, OutString.length);
+	}
+	return OutString;
+}
+function CheckAnswer(CheckType){
+
+	if (GuessSequence.length < 1){
+		if (CheckType == 1){
+			ShowMessage(NextCorrect + '<br /><span class="Answer">' + FindSegment(Answers[0][0]) + '</span>');
+			Penalties++;
+		}
+		return;
+	}
+
+	var i = 0;
+	var j = 0;
+	var k = 0;
+	var WellDone = '';
+	var WhichCorrect = -1;
+	var TryAgain = '';
+	var LongestCorrectBit = '';
+	TempCorrect = new Array();
+	LongestCorrect = new Array();
+	var TempHint = '';
+	var HintToReturn = 1;
+	var OtherAnswers = '';
+
+	for (i=0; i<Answers.length; i++){
+		TempCorrect.length = 0;
+		for (j=0; j<Answers[i].length; j++){
+			if (Answers[i][j] == GuessSequence[j]){
+				TempCorrect[j] = GuessSequence[j];
+			}
+			else{
+				TempHint = Answers[i][j];
+				break;
+			}
+		}
+		if ((TempCorrect.length == GuessSequence.length)&&(TempCorrect.length == Answers[i].length)){
+
+			WhichCorrect = i;
+			break;
+		}
+		else{
+			if (TempCorrect.length > LongestCorrect.length){
+				LongestCorrect.length = 0;
+				for (k=0; k<TempCorrect.length; k++){
+					LongestCorrect[k] = TempCorrect[k];
+				}
+				HintToReturn = TempHint;
+			} 
+		}	
+	}
+	if (WhichCorrect > -1){
+		for (i=0; i<Answers.length; i++){
+			if (i!=WhichCorrect){
+				OtherAnswers += '<br />' + CompileString(Answers[i]);
+			}
+		}
+
+		WellDone = '<span class="Answer">' + Output + '</span><br /><br />' + CorrectResponse + '<br />';
+
+//Do score calculation here
+		Score = Math.floor(((Segments.length-Penalties) * 100)/Segments.length);
+		WellDone += YourScoreIs + ' ' + Score + '%.<br />';
+
+
+
+		WriteToGuess(WellDone);
+		ShowMessage(WellDone);
+
+		Finished = true;
+		setTimeout('Finish()', SubmissionTimeout);
+		return;
+	}
+
+	else{
+		TryAgain = '<span class="Answer">' + CompileString(GuessSequence) + '</span><br /><br />';
+		Penalties++;
+		if (CheckType == 0){
+			TryAgain += IncorrectResponse + '<br />';
+		}
+
+		if (LongestCorrect.length > 0){
+
+			LongestCorrectBit = CompileString(LongestCorrect);
+			GuessSequence.length = LongestCorrect.length;
+			TryAgain += ThisMuchCorrect + '<br /><span class="Answer">' + LongestCorrectBit + '</span><br />';
+		}
+
+		if (CheckType == 1){
+			TryAgain += NextCorrect + '<br /><span class="Answer">' + FindSegment(HintToReturn) + '</span>';
+		}
+
+		BuildCurrGuess();
+		BuildExercise();
+		DisplayExercise(Exercise);
+		ShowMessage(TryAgain);
+
+	}
+}
+
+function FindSegment(SegID){
+	var Seg = '';
+	for (var i=0; i<Segments.length; i++){
+		if (Segments[i][1] == SegID){
+			Seg = Segments[i][0];
+			break;
+		}
+	}
+	return Seg;
+}
+
+function StartUp(){
+	RemoveBottomNavBarForIE();
+
+
+
+
+
+	Segments = Shuffle(Segments);
+
+//Build and show the exercise
+	BuildExercise();
+	DisplayExercise(Exercise);	
+	
+
+}
+
+
+function BuildExercise(){
+	Exercise = '';
+
+	var SegRow = '';
+	var TempRow = '';
+
+	for (var i=0; i<Segments.length; i++){
+//if the segment hasn't been used yet
+		if (Segments[i][2] == 0){
+			TempRow = SegmentTemplate;
+			TempRow = TempRow.replace(/\[SegmentNumber\]/g, Segments[i][1]);
+			TempRow = TempRow.replace(/\[CurrentSegment\]/g, Segments[i][0]);
+			SegRow += TempRow;
+		}
+	}
+
+//Make it into a table
+	Exercise = SegRow;
+}
+
+function DisplayExercise(StuffToDisplay){
+	document.getElementById('SegmentDiv').innerHTML = StuffToDisplay;
+	FocusAButton();
+
+}
+
+
+
+
+
+
+
+
+//-->
+
+//]]>
+
+</script>
+
+
+</head>
+
+<body onload="StartUp()" id="TheBody">
+
+<!-- BeginTopNavButtons -->
+
+
+<div class="NavButtonBar" id="TopNavBar">
+
+
+
+
+
+
+<button class="NavButton" onfocus="NavBtnOver(this)" onblur="NavBtnOut(this)" onmouseover="NavBtnOver(this)" onmouseout="NavBtnOut(this)" onmousedown="NavBtnDown(this)" onmouseup="NavBtnOut(this)" onclick="location='jmix2.htm'; return false;">Siguiente ejemplo</button>
+
+
+</div>
+
+
+
+<!-- EndTopNavButtons -->
+
+<div class="Titles">
+	<h2 class="ExerciseTitle">Ejercicio de ordenar frases realizado con JMix</h2>
+	<h3 class="ExerciseSubtitle">Ejercicio de ordenar palabras</h3>
+
+
+</div>
+
+<div id="InstructionsDiv" class="StdDiv">
+	<p id="Instructions">Coloque las palabras del ejercicio en orden hasta formar una frase. Cuando crea que la frase est&#x00E1; ordenada, pulse en "Comprobar" para ver las respuestas. Si lo considera necesario, pulse en "Pista" para encontrar la siguiente palabra correcta.</p>
+</div>
+
+
+
+<div id="GuessDiv" class="StdDiv">
+
+</div>
+
+<div id="MainDiv" class="StdDiv">
+
+<button id="CheckButton1" class="FuncButton" onmouseover="FuncBtnOver(this)" onfocus="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)" onblur="FuncBtnOut(this)" onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)" onclick="CheckAnswer(0)">&nbsp;Comprobar&nbsp;</button>
+
+
+<button class="FuncButton" onmouseover="FuncBtnOver(this)" onfocus="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)" onblur="FuncBtnOut(this)" onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)" onclick="Undo()">&nbsp;Deshacer&nbsp;</button>
+
+
+
+<button class="FuncButton" onmouseover="FuncBtnOver(this)" onfocus="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)" onblur="FuncBtnOut(this)" onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)" onclick="Restart()">&nbsp;Volver a empezar&nbsp;</button>
+
+
+
+<button class="FuncButton" onmouseover="FuncBtnOver(this)" onfocus="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)" onblur="FuncBtnOut(this)" onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)" onclick="CheckAnswer(1)">&nbsp;Pista&nbsp;</button>
+
+
+<div id="SegmentDiv">
+
+</div>
+
+</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;">&nbsp;OK&nbsp;</button>
+</div>
+
+<!-- BeginBottomNavButtons -->
+
+
+<div class="NavButtonBar" id="BottomNavBar">
+
+
+
+
+
+
+<button class="NavButton" onfocus="NavBtnOver(this)" onblur="NavBtnOut(this)" onmouseover="NavBtnOver(this)" onmouseout="NavBtnOut(this)" onmousedown="NavBtnDown(this)" onmouseup="NavBtnOut(this)" onclick="location='jmix2.htm'; return false;">Siguiente ejemplo</button>
+
+
+</div>
+
+
+
+<!-- EndBottomNavButtons -->
+
+<!-- BeginSubmissionForm -->
+
+<!-- EndSubmissionForm -->
+
+</body>
+
+</html>
Index: /trunk/max-javahotpot-tutorial/tutorial/jmatch2.htm
===================================================================
--- /trunk/max-javahotpot-tutorial/tutorial/jmatch2.htm (revision 35)
+++ /trunk/max-javahotpot-tutorial/tutorial/jmatch2.htm (revision 35)
@@ -0,0 +1,1563 @@
+<?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 Ismail Ali Gago."></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="Ismail Ali Gago" />
+<meta name="DC:Creator" content="UNREGISTERED" />
+<meta name="DC:Title" content="Ejercicio de emparejamiento realizado con JMatch" />
+
+
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
+
+<title>
+Ejercicio de emparejamiento realizado con JMatch
+</title>
+
+<!-- Made with executable version 6.0 Release 2 Build 0 -->
+
+<!-- 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. */
+
+
+body{
+	font-family: Geneva,Arial;
+	background-color: #ffffff;
+	color: #000000;
+ 
+	margin-right: 5%;
+	margin-left: 5%;
+	font-size: small;
+}
+
+p{
+	text-align: left;
+	margin: 0px;
+	font-size: small;
+}
+
+div,span,td{
+	font-size: small;
+	color: #000000;
+}
+
+.RTLText{
+	text-align: right;
+	font-size: 150%;
+	direction: rtl;
+	font-family: "Simplified Arabic", "Traditional Arabic", "Times New Roman", Geneva,Arial; 
+}
+
+.CentredRTLText{
+	text-align: center;
+	font-size: 150%;
+	direction: rtl;
+	font-family: "Simplified Arabic", "Traditional Arabic", "Times New Roman", Geneva,Arial; 
+}
+
+button p.RTLText{
+	text-align: center;
+}
+
+.RTLGapBox{
+	text-align: right;
+	font-size: 150%;
+	direction: rtl;
+	font-family: "Times New Roman", Geneva,Arial;
+}
+
+.Guess{
+	font-weight: bold;
+}
+
+.CorrectAnswer{
+	font-weight: bold;
+}
+
+div.Titles{
+	padding: 10px;
+	text-align: center;
+	color: #003300;
+}
+
+button{
+	display: inline;
+}
+
+.ExerciseTitle{
+	font-size: large;
+	color: #003300;
+}
+
+.ExerciseSubtitle{
+	color: #003300;
+}
+
+div#Timer{
+	padding: 6px;
+	margin-left: auto;
+	margin-right: auto;
+	text-align: center;
+}
+
+span#TimerText{
+	padding: 6px;
+	border-width: 1px;
+	border-style: solid;
+	font-weight: bold;
+	display: none;
+}
+
+span.Instructions{
+
+}
+
+div.ExerciseText{
+
+}
+
+.FeedbackText{
+	color: #003300;
+}
+
+span.LeftItem{
+	font-size: small;
+	color: #000000;
+}
+
+span.RightItem{
+	font-weight: bold;
+	font-size: small;
+	color: #000000;
+}
+
+span.CorrectMark{
+
+}
+
+div.Feedback {
+	background-color: #ffffff;
+	left: 33%;
+	width: 34%;
+	top: 33%;
+	z-index: 1;
+	border-style: solid;
+	border-width: 1px;
+	padding: 5px;
+	text-align: center;
+	color: #003300;
+	position: absolute;
+	display: none;
+	font-size: small;
+}
+
+
+[inclReading]
+div.LeftContainer{
+	border-style: none;
+	padding: 2px 0px 2px 0px;
+	float: left;
+	width: 49.8%;
+	margin-bottom: 0px;
+}
+
+div.RightContainer{
+	border-style: none;
+	padding: 2px 0px 2px 0px;
+	float: right;
+	width: 49.8%;
+	margin-bottom: 0px;
+}
+
+.ReadingText{
+
+}
+[/inclReading]
+
+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;
+	align: center;
+	padding: 0px;
+}
+
+table.FlashcardTable tr{
+	border-style: none;
+	margin: 0px;
+	padding: 0px;
+	background-color: #aaddaa;
+}
+
+table.FlashcardTable td.Showing{
+	font-size: large;
+	text-align: center;
+	width: 50%;
+	display: table-cell;
+	padding: 2em;
+	margin: 0px;
+	border-style: solid;
+	border-width: 1px;
+	color: #000000;
+	background-color: #aaddaa;
+}
+
+table.FlashcardTable td.Hidden{
+	display: none;
+}
+
+/* JMix styles */
+div#SegmentDiv{
+	margin-top: 2em;
+	margin-bottom: 2em;
+	text-align: center;
+}
+
+a.ExSegment{
+	font-size: medium;
+	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: #003300;
+	width: 80%;
+}
+
+/* JCloze styles */
+
+input{
+	font-family: Geneva,Arial;
+	font-size: larger;
+}
+
+.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;
+}
+
+table.CrosswordGrid td{
+	width: 1.5em;
+	height: 1.5em;
+	text-align: center;
+	vertical-align: middle;
+	font-size: large;
+	padding: 0px;
+	margin: 0px;
+	border-style: solid;
+	border-width: 1px;
+	border-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;
+}
+
+.GridNum{
+	vertical-align: super;
+	font-size: x-small;
+	font-weight: bold;
+	text-decoration: none;
+	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;
+}
+
+div.Keypad button{
+	font-family: Geneva,Arial;
+	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;
+	font-size: larger;
+}
+
+.QuestionText{
+
+}
+
+.Answer{
+	font-size: 120%;
+	letter-spacing: 0.1em;
+}
+
+.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;
+}
+
+div.StdDiv{
+	background-color: #aaddaa;
+	text-align: center;
+	font-size: small;
+	color: #000000;
+	padding: 8px;
+	border-style: solid;
+	border-width: 1px 1px 1px 1px;
+	border-color: #000000;
+	margin: 1px;
+}
+
+.FuncButton {
+	text-align: center;
+	border-style: solid;
+
+	border-left-color: #d4eed4;
+	border-top-color: #d4eed4;
+	border-right-color: #556e55;
+	border-bottom-color: #556e55;
+	color: #000000;
+	background-color: #aaddaa;
+
+	border-width: 2px;
+	padding: 3px 6px 3px 6px;
+	cursor: pointer;
+}
+
+.FuncButtonUp {
+	color: #aaddaa;
+	text-align: center;
+	border-style: solid;
+
+	border-left-color: #d4eed4;
+	border-top-color: #d4eed4;
+	border-right-color: #556e55;
+	border-bottom-color: #556e55;
+
+	background-color: #000000;
+	color: #aaddaa;
+	border-width: 2px;
+	padding: 3px 6px 3px 6px;
+	cursor: pointer;
+}
+
+.FuncButtonDown {
+	color: #aaddaa;
+	text-align: center;
+	border-style: solid;
+
+	border-left-color: #556e55;
+	border-top-color: #556e55;
+	border-right-color: #d4eed4;
+	border-bottom-color: #d4eed4;
+	background-color: #000000;
+	color: #aaddaa;
+
+	border-width: 2px;
+	padding: 3px 6px 3px 6px;
+	cursor: pointer;
+}
+
+/*BeginNavBarStyle*/
+
+div.NavButtonBar{
+	background-color: #006600;
+	text-align: center;
+	margin: 2px 0px 2px 0px;
+	clear: both;
+	font-size: small;
+}
+
+.NavButton {
+	border-style: solid;
+	
+	border-left-color: #7fb27f;
+	border-top-color: #7fb27f;
+	border-right-color: #003300;
+	border-bottom-color: #003300;
+	background-color: #006600;
+	color: #ffffff;
+
+	border-width: 2px;
+	cursor: pointer;	
+}
+
+.NavButtonUp {
+	border-style: solid;
+
+	border-left-color: #7fb27f;
+	border-top-color: #7fb27f;
+	border-right-color: #003300;
+	border-bottom-color: #003300;
+	color: #006600;
+	background-color: #ffffff;
+
+	border-width: 2px;
+	cursor: pointer;	
+}
+
+.NavButtonDown {
+	border-style: solid;
+
+	border-left-color: #003300;
+	border-top-color: #003300;
+	border-right-color: #7fb27f;
+	border-bottom-color: #7fb27f;
+	color: #006600;
+	background-color: #ffffff;
+
+	border-width: 2px;
+	cursor: pointer;	
+}
+
+/*EndNavBarStyle*/
+
+a{
+	color: #0000cc;
+}
+
+a: visited{
+	color: #0000ff;
+}
+
+a:hover{
+	color: #0000cc;
+}
+
+div.CardStyle {
+	position: absolute;
+	font-family: Geneva,Arial;
+	font-size: small;
+	padding: 5px;
+	border-style: solid;
+	border-width: 1px;
+	color: #000000;
+	background-color: #aaddaa;
+	left: -50px;
+	top: -50px;
+	overflow: visible;
+}
+
+.rtl{
+	text-align: right;
+	font-size: large;
+}
+
+
+</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';
+//IE can't focus a hidden div; Moz needs to focus before display to avoid jumping
+	if (C.gecko){
+		document.getElementById('FeedbackOKButton').focus();
+	}
+	FDiv.style.display = 'block';
+
+	ShowElements(false, 'input');
+	ShowElements(false, 'select');
+	ShowElements(false, 'object');
+	if (C.ie){
+		document.getElementById('FeedbackOKButton').focus();
+	}
+	
+//
+}
+
+function ShowElements(Show, TagName){
+//Special for IE bug -- hide all the form elements that will show through the popup
+	if (C.ie){
+		var Els = document.getElementsByTagName(TagName);
+		for (var i=0; i<Els.length; i++){
+			if (Show == true){
+				Els[i].style.display = 'inline';
+			}
+			else{
+				Els[i].style.display = 'none';
+			}
+		}
+	} 
+}
+
+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 (document.documentElement && document.documentElement.scrollTop){
+		return document.documentElement.scrollTop;
+	}
+	else{
+		if (document.body){
+ 			return document.body.scrollTop;
+		}
+		else{
+			return window.pageYOffset;
+		}
+	}
+}
+
+function GetViewportHeight(){
+	if (window.innerWidth){
+		return window.innerWidth;
+	}
+	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{
+	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){
+	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; k++) {
+			Temp[k] = Temp[k+1];
+		}
+		j--;
+	}
+	return InArray;
+}
+
+function WriteToInstructions(Feedback) {
+//	Feedback = '<span class="FeedbackText">' + Feedback + '</span>';
+	document.getElementById('InstructionsDiv').innerHTML = Feedback;
+
+}
+
+
+
+
+function EscapeDoubleQuotes(InString){
+	return InString.replace(/"/g, '&quot;')
+}
+
+function FocusAButton(){
+	if (document.getElementById('CheckButton1') != null){
+		document.getElementById('CheckButton1').focus();
+	}
+	else{
+		document.getElementsByTagName('button')[0].focus();
+	}
+}
+
+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].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){
+		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();
+	}
+}
+
+
+
+function Card(ID, OverlapTolerance){
+	this.elm=document.getElementById(ID);
+	this.name=ID;
+	this.css=this.elm.style;
+	this.elm.style.left = 0 +'px';
+	this.elm.style.top = 0 +'px';
+	this.HomeL = 0;
+	this.HomeT = 0;
+	this.tag=-1;
+	this.index=-1;
+	this.OverlapTolerance = OverlapTolerance;
+}
+
+function CardGetL(){return parseInt(this.css.left)}
+Card.prototype.GetL=CardGetL;
+
+function CardGetT(){return parseInt(this.css.top)}
+Card.prototype.GetT=CardGetT;
+
+function CardGetW(){return parseInt(this.elm.offsetWidth)}
+Card.prototype.GetW=CardGetW;
+
+function CardGetH(){return parseInt(this.elm.offsetHeight)}
+Card.prototype.GetH=CardGetH;
+
+function CardGetB(){return this.GetT()+this.GetH()}
+Card.prototype.GetB=CardGetB;
+
+function CardGetR(){return this.GetL()+this.GetW()}
+Card.prototype.GetR=CardGetR;
+
+function CardSetL(NewL){this.css.left = NewL+'px'}
+Card.prototype.SetL=CardSetL;
+
+function CardSetT(NewT){this.css.top = NewT+'px'}
+Card.prototype.SetT=CardSetT;
+
+function CardSetW(NewW){this.css.width = NewW+'px'}
+Card.prototype.SetW=CardSetW;
+
+function CardSetH(NewH){this.css.height = NewH+'px'}
+Card.prototype.SetH=CardSetH;
+
+function CardInside(X,Y){
+	var Result=false;
+	if(X>=this.GetL()){if(X<=this.GetR()){if(Y>=this.GetT()){if(Y<=this.GetB()){Result=true;}}}}
+	return Result;
+}
+Card.prototype.Inside=CardInside;
+
+function CardSwapColours(){
+	var c=this.css.backgroundColor;
+	this.css.backgroundColor=this.css.color;
+	this.css.color=c;
+}
+Card.prototype.SwapColours=CardSwapColours;
+
+function CardHighlight(){
+	this.css.backgroundColor='#000000';
+	this.css.color='#aaddaa';
+}
+Card.prototype.Highlight=CardHighlight;
+
+function CardUnhighlight(){
+	this.css.backgroundColor='#aaddaa';
+	this.css.color='#000000';
+}
+Card.prototype.Unhighlight=CardUnhighlight;
+
+function CardOverlap(OtherCard){
+	var smR=(this.GetR()<(OtherCard.GetR()+this.OverlapTolerance))? this.GetR(): (OtherCard.GetR()+this.OverlapTolerance);
+	var lgL=(this.GetL()>OtherCard.GetL())? this.GetL(): OtherCard.GetL();
+	var HDim=smR-lgL;
+	if (HDim<1){return 0;}
+	var smB=(this.GetB()<OtherCard.GetB())? this.GetB(): OtherCard.GetB();
+	var lgT=(this.GetT()>OtherCard.GetT())? this.GetT(): OtherCard.GetT();
+	var VDim=smB-lgT;
+	if (VDim<1){return 0;}
+	return (HDim*VDim);	
+}
+Card.prototype.Overlap=CardOverlap;
+
+function CardDockToR(OtherCard){
+	this.SetL(OtherCard.GetR() + 5);
+	this.SetT(OtherCard.GetT());
+}
+
+Card.prototype.DockToR=CardDockToR;
+
+function CardSetHome(){
+	this.HomeL=this.GetL();
+	this.HomeT=this.GetT();
+}
+Card.prototype.SetHome=CardSetHome;
+
+function CardGoHome(){
+	this.SetL(this.HomeL);
+	this.SetT(this.HomeT);
+}
+
+Card.prototype.GoHome=CardGoHome;
+
+
+function doDrag(e) {
+	if (CurrDrag == -1) {return};
+	if (C.ie){var Ev = window.event}else{var Ev = e}
+	var difX = Ev.clientX-window.lastX; 
+	var difY = Ev.clientY-window.lastY; 
+	var newX = DC[CurrDrag].GetL()+difX; 
+	var newY = DC[CurrDrag].GetT()+difY; 
+	DC[CurrDrag].SetL(newX); 
+	DC[CurrDrag].SetT(newY);
+	window.lastX = Ev.clientX; 
+	window.lastY = Ev.clientY; 
+	return false;
+} 
+
+function beginDrag(e, DragNum) { 
+	CurrDrag = DragNum;
+	if (C.ie){
+		var Ev = window.event;
+		document.onmousemove=doDrag;
+		document.onmouseup=endDrag;
+	}
+	else{
+		var Ev = e;
+		window.onmousemove=doDrag; 
+		window.onmouseup=endDrag;
+	} 
+	DC[CurrDrag].Highlight();
+	topZ++;
+	DC[CurrDrag].css.zIndex = topZ;
+	window.lastX=Ev.clientX; 
+	window.lastY=Ev.clientY;
+	return false;  
+} 
+
+function endDrag(e) { 
+	if (CurrDrag == -1) {return};
+	DC[CurrDrag].Unhighlight();
+	if (C.ie){document.onmousemove=null}else{window.onmousemove=null;}
+	onEndDrag();	
+	CurrDrag = -1;
+	return true;
+} 
+
+var CurrDrag = -1;
+var topZ = 100;
+
+
+
+
+var CorrectResponse = 'Correcto, bien hecho.';
+var IncorrectResponse = '&#x00A1;Lo siento! Pruebe otra vez. Los emparejamientos incorrectos han sido eliminados.';
+var YourScoreIs = 'Su puntuaci&#x00F3;n es ';
+var Correction = '[strCorrection]';
+var DivWidth = 600; //default value
+var FeedbackWidth = 200; //default
+var ExBGColor = '#aaddaa';
+var PageBGColor = '#ffffff';
+var TextColor = '#000000';
+var TitleColor = '#003300';
+var Penalties = 0;
+var Score = 0;
+var TimeOver = false;
+var Interval = null;
+var Locked = false;
+var ShuffleQs = false;
+var QsToShow = 6;
+
+var DragWidth = 200;
+var LeftColPos = 100;
+var RightColPos = 500;
+var DragTop = 120;
+var Finished = false;
+
+//Fixed and draggable card arrays
+FC = new Array();
+DC = new Array();
+
+function onEndDrag(){ 
+//Is it dropped on any of the fixed cards?
+	var Docked = false;
+	var DropTarget = DroppedOnFixed(CurrDrag);
+	if (DropTarget > -1){
+//If so, send home any card that is currently docked there
+		for (var i=0; i<DC.length; i++){
+			if (DC[i].tag == DropTarget+1){
+				DC[i].GoHome();
+				DC[i].tag = 0;
+				D[i][2] = 0;
+			}
+		}
+//Dock the dropped card
+		DC[CurrDrag].DockToR(FC[DropTarget]);
+		D[CurrDrag][2] = F[DropTarget][1];
+		DC[CurrDrag].tag = DropTarget+1;
+		Docked = true;
+	}
+
+	if (Docked == false){
+		DC[CurrDrag].GoHome();
+		DC[CurrDrag].tag = 0;
+		D[CurrDrag][2] = 0;
+	}
+} 
+
+function DroppedOnFixed(DNum){
+	var Result = -1;
+	var OverlapArea = 0;
+	var Temp = 0;
+	for (var i=0; i<FC.length; i++){
+		Temp = DC[DNum].Overlap(FC[i]);
+		if (Temp > OverlapArea){
+			OverlapArea = Temp;
+			Result = i;
+		}
+	}
+	return Result;
+}
+
+
+function StartUp(){
+
+
+
+
+
+//Calculate page dimensions and positions
+	pg = new PageDim();
+	DivWidth = Math.floor((pg.W*4)/5);
+	DragWidth = Math.floor((DivWidth*3)/10);
+	LeftColPos = Math.floor(pg.W/15);
+	RightColPos = pg.W - (DragWidth + LeftColPos);
+	DragTop = parseInt(document.getElementById('CheckButtonDiv').offsetHeight) + parseInt(document.getElementById('CheckButtonDiv').offsetTop) + 10;
+
+	if (C.ie){
+		DragTop += 15;
+	}
+	
+//Reduce array if required
+	if (QsToShow < F.length){
+		ReduceItems2();
+	}
+	
+//Shuffle the left items if required
+	if (ShuffleQs == true){
+		F = Shuffle(F);
+	}
+
+//Shuffle the items on the right
+	D = Shuffle(D);
+
+	var CurrTop = DragTop;
+	var TempInt = 0;
+	var DropHome = 0;
+	var Widest = 0;
+	var CardContent = '';
+	for (var i=0; i<F.length; i++){
+		CardContent = F[i][0];
+		FC[i] = new Card('F' + i, 10);
+		FC[i].elm.innerHTML = CardContent; 
+		if (FC[i].GetW() > Widest){
+			Widest = FC[i].GetW();
+		}
+	}
+
+	if (Widest > DragWidth){Widest = DragWidth;}
+
+	CurrTop = DragTop;
+
+	DragWidth = Math.floor((DivWidth-Widest)/2) - 24;
+	RightColPos = DivWidth + LeftColPos - (DragWidth + 14);
+	var Highest = 0;
+	var WidestRight = 0;
+
+	for (i=0; i<D.length; i++){
+		DC[i] = new Card('D' + i, 10);
+		CardContent = D[i][0];
+//		if (CardContent.indexOf('<img ') > -1){CardContent += '<br clear="all" />';} //used to be required for Navigator rendering bug with images
+		DC[i].elm.innerHTML = CardContent; 
+		if (DC[i].GetW() > DragWidth){DC[i].SetW(DragWidth);}
+		DC[i].css.cursor = 'move';
+		DC[i].css.backgroundColor = '#aaddaa';
+		DC[i].css.color = '#000000';
+		TempInt = DC[i].GetH();
+		if (TempInt > Highest){Highest = TempInt;}
+		TempInt = DC[i].GetW();
+		if (TempInt > WidestRight){WidestRight = TempInt;}
+	}
+
+	var HeightToSet = Highest;
+	if (C.gecko||C.ie5mac){HeightToSet -= 12;}
+	var WidthToSet = WidestRight;
+	if (C.gecko||C.ie5mac){WidthToSet -= 12;}
+
+	for (i=0; i<D.length; i++){
+		DC[i].SetT(CurrTop);
+		DC[i].SetL(RightColPos);
+		if (DC[i].GetH() < Highest){
+			DC[i].SetH(HeightToSet);
+		}
+		if (DC[i].GetW() < WidestRight){
+			DC[i].SetW(WidthToSet);
+		}
+		DC[i].SetHome();
+		DC[i].tag = -1;
+		CurrTop = CurrTop + DC[i].GetH() + 5;
+	}
+
+	CurrTop = DragTop;
+
+	for (var i=0; i<F.length; i++){
+		FC[i].SetW(Widest);
+		if (FC[i].GetH() < Highest){
+			FC[i].SetH(HeightToSet);
+		}
+		FC[i].SetT(CurrTop);
+		FC[i].SetL(LeftColPos);
+		FC[i].SetHome();
+		TempInt = FC[i].GetH();
+		CurrTop = CurrTop + TempInt + 5;
+	}
+
+
+//Slide any elements that should be in position over
+	for (i=0; i<D.length; i++){
+		if (D[i][2] > 0){
+			DC[i].tag = D[i][1];
+			D[i][2] = D[i][1];
+			var TopChange = 0;
+//Find the right target element
+			var TargItem = -1;
+			for (var j=0; j<F.length; j++){
+				if (F[j][1] == D[i][1]){
+					TargItem = j;
+				}
+			}
+			var TargetLeft = FC[TargItem].GetR() + 5;
+			var TargetTop = FC[TargItem].GetT();
+
+			if (TargetTop < DC[i].GetT()){
+				TopChange = -1;
+			}
+			else {
+				if (TargetTop > DC[i].GetT()){
+					TopChange = 1;
+				}
+			}
+			Slide(i, TargetLeft, TargetTop, TopChange);
+			D[i][2] = F[TargItem][1];
+			DC[i].tag = TargItem+1;
+		}
+	}
+
+
+}
+
+
+function Slide(MoverNum, TargL, TargT, TopChange){
+	var TempInt = DC[MoverNum].GetL();
+	if (TempInt > TargL){
+		DC[MoverNum].SetL(TempInt - 5);
+	}
+	TempInt = DC[MoverNum].GetT();
+	if (TempInt != TargT){
+		DC[MoverNum].SetT(TempInt + TopChange);
+	}
+	if ((DC[MoverNum].GetL() > TargL)||(DC[MoverNum].GetT() != TargT)){
+		setTimeout('Slide('+MoverNum+','+TargL+','+TargT+','+TopChange+')', 1);
+	}
+	else{
+		DC[MoverNum].SetL(TargL);
+	}
+}
+
+
+F = new Array();
+F[0] = new Array();
+F[0][0]='<img src="beef-vt.gif" alt="beef-vt.gif" title="beef-vt" width="50" height="31"></img>';
+F[0][1] = 1;
+F[1] = new Array();
+F[1][0]='<img src="carrots-vt.gif" alt="carrots-vt.gif" title="carrots-vt" width="50" height="15"></img>';
+F[1][1] = 2;
+F[2] = new Array();
+F[2][0]='<img src="lettuce-vt.gif" alt="lettuce-vt.gif" title="lettuce-vt" width="50" height="46"></img>';
+F[2][1] = 3;
+F[3] = new Array();
+F[3][0]='<img src="beans-red-vt.gif" alt="beans-red-vt.gif" title="beans-red-vt" width="50" height="38"></img>';
+F[3][1] = 4;
+F[4] = new Array();
+F[4][0]='<img src="pie-vt.gif" alt="pie-vt.gif" title="pie-vt" width="50" height="25"></img>';
+F[4][1] = 5;
+F[5] = new Array();
+F[5][0]='<img src="tomato-vt.gif" alt="tomato-vt.gif" title="tomato-vt" width="50" height="42"></img>';
+F[5][1] = 6;
+
+
+D = new Array();
+D[0] = new Array();
+D[0][0]='carne';
+D[0][1] = 1;
+D[0][2] = 0;
+D[1] = new Array();
+D[1][0]='zanahorias';
+D[1][1] = 2;
+D[1][2] = 0;
+D[2] = new Array();
+D[2][0]='lechuga';
+D[2][1] = 3;
+D[2][2] = 0;
+D[3] = new Array();
+D[3][0]='jud&#x00ED;as';
+D[3][1] = 4;
+D[3][2] = 1;
+D[4] = new Array();
+D[4][0]='pastel';
+D[4][1] = 5;
+D[4][2] = 0;
+D[5] = new Array();
+D[5][0]='tomate';
+D[5][1] = 6;
+D[5][2] = 0;
+
+
+function ReduceItems2(){
+	var ItemToDump=0;
+	var j=0;
+	while (F.length > QsToShow){
+		ItemToDump = Math.floor(F.length*Math.random());
+		for (j=ItemToDump; j<(F.length-1); j++){
+			F[j] = F[j+1];
+		}
+		for (j=ItemToDump; j<(D.length-1); j++){
+			D[j] = D[j+1];
+		}		
+		F.length = F.length-1;
+		D.length = D.length-1;
+	}
+}
+
+function TimerStartUp(){
+	setTimeout('StartUp()', 300);
+}
+
+function CheckAnswers(){
+	if (Locked == true){return;}
+//Set the default score and response
+	var TotalCorrect = 0;
+	Score = 0;
+	var Feedback = '';
+
+//for each fixed, check to see if the tag value for the draggable is the same as the fixed
+	var i, j;
+	for (i=0; i<D.length; i++){
+		if ((D[i][2] == D[i][1])&&(D[i][2] > 0)){
+			TotalCorrect++;
+		}
+		else{
+			DC[i].GoHome();
+		}
+	}
+
+	Score = Math.floor((100*(TotalCorrect-Penalties))/F.length);
+
+	var AllDone = false;
+
+	if (TotalCorrect == F.length) {
+		AllDone = true;
+	}
+
+	if (AllDone == true){
+		Feedback = YourScoreIs + ' ' + Score + '%.';
+		ShowMessage(Feedback + '<br />' + CorrectResponse);
+
+//Bug avoider for ie5mac
+		if (C.ie5mac){
+			WriteToInstructions(Feedback);
+		}
+
+
+
+		Finished = true;
+		setTimeout('Finish()', SubmissionTimeout);
+	}
+	else {
+		Feedback = IncorrectResponse + '<br />' + YourScoreIs + ' ' + Score + '%.';
+		ShowMessage(Feedback);
+		Penalties++; // Penalty for inaccurate check
+		
+	}
+}
+
+
+
+
+
+
+
+
+
+//-->
+
+//]]>
+
+</script>
+
+</head> 
+
+<body onload="TimerStartUp()" id="TheBody"> 
+<!-- BeginTopNavButtons -->
+
+
+
+<!-- EndTopNavButtons -->
+
+<div class="Titles">
+	<h2 class="ExerciseTitle">Ejercicio de emparejamiento realizado con JMatch</h2>
+	<h3 class="ExerciseSubtitle">Ejercicio de emparejamiento. Arrastrar y Soltar</h3>
+
+
+</div>
+
+<div id="InstructionsDiv" class="StdDiv">
+	<p id="Instructions">Arrastre los t&#x00E9;rminos de la derecha hasta emparejarlos con las im&#x00E1;genes de la izquierda.<br /><br />Cuando termine este ejercicio, cierre esta ventana para volver al tutorial.</p>
+</div>
+
+<div class="StdDiv" id="CheckButtonDiv">
+<button id="CheckButton1" class="FuncButton" onmouseover="FuncBtnOver(this)" onfocus="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)" onblur="FuncBtnOut(this)" onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)" onclick="CheckAnswers()">&nbsp;Comprobar&nbsp;</button>
+</div>
+
+<script type="text/javascript">
+
+//<![CDATA[
+
+<!--
+
+
+for (var i=0; i<F.length; i++){
+	document.write('<div id="F' + i + '" class="CardStyle"></div>');
+}
+
+for (var i=0; i<D.length; i++){
+	document.write('<div id="D' + i + '" class="CardStyle" onmousedown="beginDrag(event, ' + i + ')"></div>');
+}
+
+//-->
+
+//]]>
+</script>
+
+<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;">&nbsp;OK&nbsp;</button>
+</div>
+
+<!-- BeginBottomNavButtons -->
+
+<!-- EndBottomNavButtons -->
+
+<!-- BeginSubmissionForm -->
+
+<!-- EndSubmissionForm -->
+
+</body>
+</html>
Index: /trunk/max-javahotpot-tutorial/tutorial/jmix2.htm
===================================================================
--- /trunk/max-javahotpot-tutorial/tutorial/jmix2.htm (revision 35)
+++ /trunk/max-javahotpot-tutorial/tutorial/jmix2.htm (revision 35)
@@ -0,0 +1,1761 @@
+<?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 Ismail Ali Gago."></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="Ismail Ali Gago" />
+<meta name="DC:Creator" content="UNREGISTERED" />
+<meta name="DC:Title" content="Ejercicio de ordenar la letras de una palabra elaborado con JMix" />
+
+
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
+
+<title>
+Ejercicio de ordenar la letras de una palabra elaborado con JMix
+</title>
+
+<!-- Made with executable version 6.0 Release 2 Build 0 -->
+
+<!-- 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. */
+
+
+body{
+	font-family: Geneva,Arial;
+	background-color: #FFFFFF;
+	color: #330033;
+ 
+	margin-right: 5%;
+	margin-left: 5%;
+	font-size: small;
+}
+
+p{
+	text-align: left;
+	margin: 0px;
+	font-size: small;
+}
+
+div,span,td{
+	font-size: small;
+	color: #330033;
+}
+
+.RTLText{
+	text-align: right;
+	font-size: 150%;
+	direction: rtl;
+	font-family: "Simplified Arabic", "Traditional Arabic", "Times New Roman", Geneva,Arial; 
+}
+
+.CentredRTLText{
+	text-align: center;
+	font-size: 150%;
+	direction: rtl;
+	font-family: "Simplified Arabic", "Traditional Arabic", "Times New Roman", Geneva,Arial; 
+}
+
+button p.RTLText{
+	text-align: center;
+}
+
+.RTLGapBox{
+	text-align: right;
+	font-size: 150%;
+	direction: rtl;
+	font-family: "Times New Roman", Geneva,Arial;
+}
+
+.Guess{
+	font-weight: bold;
+}
+
+.CorrectAnswer{
+	font-weight: bold;
+}
+
+div.Titles{
+	padding: 10px;
+	text-align: center;
+	color: #660066;
+}
+
+button{
+	display: inline;
+}
+
+.ExerciseTitle{
+	font-size: large;
+	color: #660066;
+}
+
+.ExerciseSubtitle{
+	color: #660066;
+}
+
+div#Timer{
+	padding: 6px;
+	margin-left: auto;
+	margin-right: auto;
+	text-align: center;
+}
+
+span#TimerText{
+	padding: 6px;
+	border-width: 1px;
+	border-style: solid;
+	font-weight: bold;
+	display: none;
+}
+
+span.Instructions{
+
+}
+
+div.ExerciseText{
+
+}
+
+.FeedbackText{
+	color: #660066;
+}
+
+span.LeftItem{
+	font-size: small;
+	color: #330033;
+}
+
+span.RightItem{
+	font-weight: bold;
+	font-size: small;
+	color: #330033;
+}
+
+span.CorrectMark{
+
+}
+
+div.Feedback {
+	background-color: #FFFFFF;
+	left: 33%;
+	width: 34%;
+	top: 33%;
+	z-index: 1;
+	border-style: solid;
+	border-width: 1px;
+	padding: 5px;
+	text-align: center;
+	color: #660066;
+	position: absolute;
+	display: none;
+	font-size: small;
+}
+
+
+[inclReading]
+div.LeftContainer{
+	border-style: none;
+	padding: 2px 0px 2px 0px;
+	float: left;
+	width: 49.8%;
+	margin-bottom: 0px;
+}
+
+div.RightContainer{
+	border-style: none;
+	padding: 2px 0px 2px 0px;
+	float: right;
+	width: 49.8%;
+	margin-bottom: 0px;
+}
+
+.ReadingText{
+
+}
+[/inclReading]
+
+div.ExerciseDiv{
+	color: #330033;
+}
+
+/* JMatch flashcard styles */
+table.FlashcardTable{
+	background-color: transparent;
+	color: #330033;
+	border-color: #330033;
+	margin-left: 5%;
+	margin-right: 5%;
+	margin-top: 2em;
+	margin-bottom: 2em;
+	width: 90%;
+	position: relative;
+	align: center;
+	padding: 0px;
+}
+
+table.FlashcardTable tr{
+	border-style: none;
+	margin: 0px;
+	padding: 0px;
+	background-color: #EECCEE;
+}
+
+table.FlashcardTable td.Showing{
+	font-size: large;
+	text-align: center;
+	width: 50%;
+	display: table-cell;
+	padding: 2em;
+	margin: 0px;
+	border-style: solid;
+	border-width: 1px;
+	color: #330033;
+	background-color: #EECCEE;
+}
+
+table.FlashcardTable td.Hidden{
+	display: none;
+}
+
+/* JMix styles */
+div#SegmentDiv{
+	margin-top: 2em;
+	margin-bottom: 2em;
+	text-align: center;
+}
+
+a.ExSegment{
+	font-size: medium;
+	font-weight: bold;
+	text-decoration: none;
+	color: #330033;
+}
+
+span.RemainingWordList{
+	font-style: italic;
+}
+
+div.DropLine {
+	position: absolute;
+	text-align: center;
+	border-bottom-style: solid;
+	border-bottom-width: 1px;
+	border-bottom-color: #660066;
+	width: 80%;
+}
+
+/* JCloze styles */
+
+input{
+	font-family: Geneva,Arial;
+	font-size: larger;
+}
+
+.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;
+}
+
+table.CrosswordGrid td{
+	width: 1.5em;
+	height: 1.5em;
+	text-align: center;
+	vertical-align: middle;
+	font-size: large;
+	padding: 0px;
+	margin: 0px;
+	border-style: solid;
+	border-width: 1px;
+	border-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;
+}
+
+.GridNum{
+	vertical-align: super;
+	font-size: x-small;
+	font-weight: bold;
+	text-decoration: none;
+	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;
+}
+
+div.Keypad button{
+	font-family: Geneva,Arial;
+	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;
+	font-size: larger;
+}
+
+.QuestionText{
+
+}
+
+.Answer{
+	font-size: 120%;
+	letter-spacing: 0.1em;
+}
+
+.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;
+}
+
+div.StdDiv{
+	background-color: #EECCEE;
+	text-align: center;
+	font-size: small;
+	color: #330033;
+	padding: 8px;
+	border-style: solid;
+	border-width: 1px 1px 1px 1px;
+	border-color: #330033;
+	margin: 1px;
+}
+
+.FuncButton {
+	text-align: center;
+	border-style: solid;
+
+	border-left-color: #f6e5f6;
+	border-top-color: #f6e5f6;
+	border-right-color: #776677;
+	border-bottom-color: #776677;
+	color: #330033;
+	background-color: #EECCEE;
+
+	border-width: 2px;
+	padding: 3px 6px 3px 6px;
+	cursor: pointer;
+}
+
+.FuncButtonUp {
+	color: #EECCEE;
+	text-align: center;
+	border-style: solid;
+
+	border-left-color: #f6e5f6;
+	border-top-color: #f6e5f6;
+	border-right-color: #776677;
+	border-bottom-color: #776677;
+
+	background-color: #330033;
+	color: #EECCEE;
+	border-width: 2px;
+	padding: 3px 6px 3px 6px;
+	cursor: pointer;
+}
+
+.FuncButtonDown {
+	color: #EECCEE;
+	text-align: center;
+	border-style: solid;
+
+	border-left-color: #776677;
+	border-top-color: #776677;
+	border-right-color: #f6e5f6;
+	border-bottom-color: #f6e5f6;
+	background-color: #330033;
+	color: #EECCEE;
+
+	border-width: 2px;
+	padding: 3px 6px 3px 6px;
+	cursor: pointer;
+}
+
+/*BeginNavBarStyle*/
+
+div.NavButtonBar{
+	background-color: #330033;
+	text-align: center;
+	margin: 2px 0px 2px 0px;
+	clear: both;
+	font-size: small;
+}
+
+.NavButton {
+	border-style: solid;
+	
+	border-left-color: #997f99;
+	border-top-color: #997f99;
+	border-right-color: #190019;
+	border-bottom-color: #190019;
+	background-color: #330033;
+	color: #ffffff;
+
+	border-width: 2px;
+	cursor: pointer;	
+}
+
+.NavButtonUp {
+	border-style: solid;
+
+	border-left-color: #997f99;
+	border-top-color: #997f99;
+	border-right-color: #190019;
+	border-bottom-color: #190019;
+	color: #330033;
+	background-color: #ffffff;
+
+	border-width: 2px;
+	cursor: pointer;	
+}
+
+.NavButtonDown {
+	border-style: solid;
+
+	border-left-color: #190019;
+	border-top-color: #190019;
+	border-right-color: #997f99;
+	border-bottom-color: #997f99;
+	color: #330033;
+	background-color: #ffffff;
+
+	border-width: 2px;
+	cursor: pointer;	
+}
+
+/*EndNavBarStyle*/
+
+a{
+	color: #0000CC;
+}
+
+a: visited{
+	color: #0000FF;
+}
+
+a:hover{
+	color: #0000CC;
+}
+
+div.CardStyle {
+	position: absolute;
+	font-family: Geneva,Arial;
+	font-size: small;
+	padding: 5px;
+	border-style: solid;
+	border-width: 1px;
+	color: #330033;
+	background-color: #EECCEE;
+	left: -50px;
+	top: -50px;
+	overflow: visible;
+}
+
+.rtl{
+	text-align: right;
+	font-size: large;
+}
+
+
+</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';
+//IE can't focus a hidden div; Moz needs to focus before display to avoid jumping
+	if (C.gecko){
+		document.getElementById('FeedbackOKButton').focus();
+	}
+	FDiv.style.display = 'block';
+
+	ShowElements(false, 'input');
+	ShowElements(false, 'select');
+	ShowElements(false, 'object');
+	if (C.ie){
+		document.getElementById('FeedbackOKButton').focus();
+	}
+	
+//
+}
+
+function ShowElements(Show, TagName){
+//Special for IE bug -- hide all the form elements that will show through the popup
+	if (C.ie){
+		var Els = document.getElementsByTagName(TagName);
+		for (var i=0; i<Els.length; i++){
+			if (Show == true){
+				Els[i].style.display = 'inline';
+			}
+			else{
+				Els[i].style.display = 'none';
+			}
+		}
+	} 
+}
+
+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 (document.documentElement && document.documentElement.scrollTop){
+		return document.documentElement.scrollTop;
+	}
+	else{
+		if (document.body){
+ 			return document.body.scrollTop;
+		}
+		else{
+			return window.pageYOffset;
+		}
+	}
+}
+
+function GetViewportHeight(){
+	if (window.innerWidth){
+		return window.innerWidth;
+	}
+	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{
+	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){
+	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; k++) {
+			Temp[k] = Temp[k+1];
+		}
+		j--;
+	}
+	return InArray;
+}
+
+function WriteToInstructions(Feedback) {
+//	Feedback = '<span class="FeedbackText">' + Feedback + '</span>';
+	document.getElementById('InstructionsDiv').innerHTML = Feedback;
+
+}
+
+
+
+
+function EscapeDoubleQuotes(InString){
+	return InString.replace(/"/g, '&quot;')
+}
+
+function FocusAButton(){
+	if (document.getElementById('CheckButton1') != null){
+		document.getElementById('CheckButton1').focus();
+	}
+	else{
+		document.getElementsByTagName('button')[0].focus();
+	}
+}
+
+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].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){
+		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();
+	}
+}
+
+
+
+function Card(ID, OverlapTolerance){
+	this.elm=document.getElementById(ID);
+	this.name=ID;
+	this.css=this.elm.style;
+	this.elm.style.left = 0 +'px';
+	this.elm.style.top = 0 +'px';
+	this.HomeL = 0;
+	this.HomeT = 0;
+	this.tag=-1;
+	this.index=-1;
+	this.OverlapTolerance = OverlapTolerance;
+}
+
+function CardGetL(){return parseInt(this.css.left)}
+Card.prototype.GetL=CardGetL;
+
+function CardGetT(){return parseInt(this.css.top)}
+Card.prototype.GetT=CardGetT;
+
+function CardGetW(){return parseInt(this.elm.offsetWidth)}
+Card.prototype.GetW=CardGetW;
+
+function CardGetH(){return parseInt(this.elm.offsetHeight)}
+Card.prototype.GetH=CardGetH;
+
+function CardGetB(){return this.GetT()+this.GetH()}
+Card.prototype.GetB=CardGetB;
+
+function CardGetR(){return this.GetL()+this.GetW()}
+Card.prototype.GetR=CardGetR;
+
+function CardSetL(NewL){this.css.left = NewL+'px'}
+Card.prototype.SetL=CardSetL;
+
+function CardSetT(NewT){this.css.top = NewT+'px'}
+Card.prototype.SetT=CardSetT;
+
+function CardSetW(NewW){this.css.width = NewW+'px'}
+Card.prototype.SetW=CardSetW;
+
+function CardSetH(NewH){this.css.height = NewH+'px'}
+Card.prototype.SetH=CardSetH;
+
+function CardInside(X,Y){
+	var Result=false;
+	if(X>=this.GetL()){if(X<=this.GetR()){if(Y>=this.GetT()){if(Y<=this.GetB()){Result=true;}}}}
+	return Result;
+}
+Card.prototype.Inside=CardInside;
+
+function CardSwapColours(){
+	var c=this.css.backgroundColor;
+	this.css.backgroundColor=this.css.color;
+	this.css.color=c;
+}
+Card.prototype.SwapColours=CardSwapColours;
+
+function CardHighlight(){
+	this.css.backgroundColor='#330033';
+	this.css.color='#EECCEE';
+}
+Card.prototype.Highlight=CardHighlight;
+
+function CardUnhighlight(){
+	this.css.backgroundColor='#EECCEE';
+	this.css.color='#330033';
+}
+Card.prototype.Unhighlight=CardUnhighlight;
+
+function CardOverlap(OtherCard){
+	var smR=(this.GetR()<(OtherCard.GetR()+this.OverlapTolerance))? this.GetR(): (OtherCard.GetR()+this.OverlapTolerance);
+	var lgL=(this.GetL()>OtherCard.GetL())? this.GetL(): OtherCard.GetL();
+	var HDim=smR-lgL;
+	if (HDim<1){return 0;}
+	var smB=(this.GetB()<OtherCard.GetB())? this.GetB(): OtherCard.GetB();
+	var lgT=(this.GetT()>OtherCard.GetT())? this.GetT(): OtherCard.GetT();
+	var VDim=smB-lgT;
+	if (VDim<1){return 0;}
+	return (HDim*VDim);	
+}
+Card.prototype.Overlap=CardOverlap;
+
+function CardDockToR(OtherCard){
+	this.SetL(OtherCard.GetR() + 5);
+	this.SetT(OtherCard.GetT());
+}
+
+Card.prototype.DockToR=CardDockToR;
+
+function CardSetHome(){
+	this.HomeL=this.GetL();
+	this.HomeT=this.GetT();
+}
+Card.prototype.SetHome=CardSetHome;
+
+function CardGoHome(){
+	this.SetL(this.HomeL);
+	this.SetT(this.HomeT);
+}
+
+Card.prototype.GoHome=CardGoHome;
+
+
+function doDrag(e) {
+	if (CurrDrag == -1) {return};
+	if (C.ie){var Ev = window.event}else{var Ev = e}
+	var difX = Ev.clientX-window.lastX; 
+	var difY = Ev.clientY-window.lastY; 
+	var newX = DC[CurrDrag].GetL()+difX; 
+	var newY = DC[CurrDrag].GetT()+difY; 
+	DC[CurrDrag].SetL(newX); 
+	DC[CurrDrag].SetT(newY);
+	window.lastX = Ev.clientX; 
+	window.lastY = Ev.clientY; 
+	return false;
+} 
+
+function beginDrag(e, DragNum) { 
+	CurrDrag = DragNum;
+	if (C.ie){
+		var Ev = window.event;
+		document.onmousemove=doDrag;
+		document.onmouseup=endDrag;
+	}
+	else{
+		var Ev = e;
+		window.onmousemove=doDrag; 
+		window.onmouseup=endDrag;
+	} 
+	DC[CurrDrag].Highlight();
+	topZ++;
+	DC[CurrDrag].css.zIndex = topZ;
+	window.lastX=Ev.clientX; 
+	window.lastY=Ev.clientY;
+	return false;  
+} 
+
+function endDrag(e) { 
+	if (CurrDrag == -1) {return};
+	DC[CurrDrag].Unhighlight();
+	if (C.ie){document.onmousemove=null}else{window.onmousemove=null;}
+	onEndDrag();	
+	CurrDrag = -1;
+	return true;
+} 
+
+var CurrDrag = -1;
+var topZ = 100;
+
+
+
+//JMIX DRAG-DROP OUTPUT FORMAT CODE
+
+var Punctuation = '';
+
+var Openers = '';
+var CorrectResponse = 'Correcto';
+var IncorrectResponse = 'Lo siento, pruebe otra vez';
+var ThisMuchCorrect = 'Esta parte de su respuesta es correcta';
+var TheseAnswersToo = 'Esta respuesta tambi&#x00E9;n es correcta';
+var YourScoreIs = 'Su puntuaci&#x00F3;n es';
+var NextCorrect = 'La siguiente letra correcta es:';
+var FeedbackWidth = 200; //default
+var ExBGColor = '#EECCEE';
+var PageBGColor = '#FFFFFF';
+var TextColor = '#330033';
+var TitleColor = '#660066';
+var DropTotal = 3; // number of lines that will be available for dropping on
+var Gap = 4; //Gap between two segments when they're next to each other on a line
+var DropHeight = 30;
+var CapitalizeFirst = false;
+var CompiledOutput = '';
+var TempSegment = '';
+var FirstSegment = -1;
+var FirstDiv = -1;
+var Penalties = 0;
+var Score = 0;
+
+var CurrDrag = -1;
+var topZ = 100;
+var Cds = new Array();
+var L = new Array();
+var Finished = false;
+
+var Locked = false;
+var Interval = null;
+var DivWidth = 600;
+var LeftColPos = 100;
+var DragTop = 120;
+var DragNumber = -1;
+
+Lines = new Array();
+
+function CapFirst(InString){
+	var i = 0;
+	if ((Openers.indexOf(InString.charAt(i))>-1)||(InString.charAt(i) == ' ')){
+		i++;
+	}
+	if ((Openers.indexOf(InString.charAt(i))>-1)||(InString.charAt(i) == ' ')){
+		i++;
+	}
+	var Temp = InString.charAt(i);
+	Temp = Temp.toUpperCase();
+	InString = InString.substring(0, i) + Temp + InString.substring(i+1, InString.length);
+	return InString;
+}
+
+function CheckResults(ChkType){
+//Get sequence student has chosen
+	GetGuessSequence();
+
+//Compile the answer
+	CompiledOutput = CompileString(GuessSequence);
+
+//Check the answer
+	CheckAnswer(ChkType);
+}
+
+function GetGuessSequence(){
+//Put pointers to draggables in arrays based on the lines they're sitting on
+	var Drops = new Array();
+	for (var i=0; i<L.length; i++){
+		Drops[i] = new Array();
+	}
+
+	for (i=0; i<Cds.length; i++){
+		for (var j=0; j<L.length; j++){
+			if (Cds[i].GetT() == L[j].GetB() - (Cds[i].GetH()+2)){
+				Drops[j][Drops[j].length] = Cds[i];
+			}
+		}
+	}
+
+//Sort the drop arrays based on the Left of each div
+	for (i=0; i<Drops.length; i++){
+		Drops[i].sort(CompDrags);
+	}
+
+//Put the tags into the GuessSequence array
+	GuessSequence.length = 0;
+	for (i=0; i<Drops.length; i++){
+		for (j=0; j<Drops[i].length; j++){
+			GuessSequence[GuessSequence.length] = Drops[i][j].tag;
+		}
+	}
+
+//Set the variable recording which div is first
+	var NewFirstDiv = -1;
+	for (i=0; i<Drops.length; i++){
+		if (Drops[i].length > 0){
+			NewFirstDiv = Drops[i][0].index;
+			break;
+		}
+	}
+	return NewFirstDiv;
+}
+
+function CompDrags(a,b){
+	return a.GetL() - b.GetL(); 
+}
+
+function FindSegment(SegID){
+	var Seg = '';
+	for (var i=0; i<Segments.length; i++){
+		if (Segments[i][1] == SegID){
+			Seg = Segments[i][0];
+			break;
+		}
+	}
+	return Seg;
+}
+
+function CompileString(InArray){
+	var OutString = '';
+	var i = 0;
+	OutArray = new Array();
+
+	for (i=0; i<InArray.length; i++){
+		OutArray[OutArray.length] = FindSegment(InArray[i]);
+	}
+
+	if (OutArray.length > 0){
+		OutString = OutArray[0];
+	}
+	else{
+		OutString = '';
+	}
+	var Spacer = '';
+
+	for (i=1; i<OutArray.length; i++){
+		Spacer = ' ';
+		if ((Openers.indexOf(OutString.charAt(OutString.length-1)) > -1)||(Punctuation.indexOf(OutArray[i].charAt(0)) > -1)){
+			Spacer = '';
+		}
+		OutString = OutString + Spacer + OutArray[i];		
+	}
+
+//Capitalize the first letter if necessary
+	if (CapitalizeFirst == true){
+		OutString = CapFirst(OutString);
+	}
+	return OutString;
+}
+
+function CheckAnswer(CheckType){
+	if (Locked == true){return;}
+	if (GuessSequence.length < 1){
+		if (CheckType == 1){
+			Penalties++;
+			ShowMessage(NextCorrect + '<br /><br />' + FindSegment(Answers[0][0]));
+		}
+		return;
+	}
+	var i = 0;
+	var j = 0;
+	var k = 0;
+	var WellDone = '';
+	var WhichCorrect = -1;
+	var TryAgain = '';
+	var LongestCorrectBit = '';
+	TempCorrect = new Array();
+	LongestCorrect = new Array();
+	var TempHint = '';
+	var HintToReturn = 1;
+	var OtherAnswers = '';
+
+	for (i=0; i<Answers.length; i++){
+		TempCorrect.length = 0;
+		for (j=0; j<Answers[i].length; j++){
+			if (Answers[i][j] == GuessSequence[j]){
+				TempCorrect[j] = GuessSequence[j];
+			}
+			else{
+				TempHint = Answers[i][j];
+				break;
+			}
+		}
+		if ((TempCorrect.length == GuessSequence.length)&&(TempCorrect.length == Answers[i].length)){
+			WhichCorrect = i;
+			break;
+		}
+		else{
+			if (TempCorrect.length > LongestCorrect.length){
+				LongestCorrect.length = 0;
+				for (k=0; k<TempCorrect.length; k++){
+					LongestCorrect[k] = TempCorrect[k];
+				}
+				HintToReturn = TempHint;
+			} 
+		}	
+	}
+	if (WhichCorrect > -1){
+		for (i=0; i<Answers.length; i++){
+			if (i!=WhichCorrect){
+				OtherAnswers += '<br />' + CompileString(Answers[i]);
+			}
+		}
+		WellDone = '<span class="CorrectAnswer">' + CompiledOutput + '</span><br /><br />' + CorrectResponse + '<br />';
+
+//Do score calculation here
+		Score = Math.floor(((Segments.length-Penalties) * 100)/Segments.length);
+		WellDone += YourScoreIs + ' ' + Score + '%.<br />';
+
+
+
+		ShowMessage(WellDone);
+		WriteToInstructions(YourScoreIs + ' ' + Score + '%.');
+		
+
+
+		Finished = true;
+		setTimeout('Finish()', SubmissionTimeout);
+		return;
+	}
+
+	else{
+		TryAgain = '<span class="Guess">' + CompileString(GuessSequence) + '</span><br /><br />';
+		Penalties++;
+
+		if ((CheckType == 0)||(LongestCorrect.length==0)){
+			TryAgain += IncorrectResponse + '<br />';
+		}
+
+		if (LongestCorrect.length > 0){
+			LongestCorrectBit = CompileString(LongestCorrect);
+			GuessSequence.length = LongestCorrect.length;
+			TryAgain += '<br />' + ThisMuchCorrect + '<br /><span class="Guess">' + LongestCorrectBit + '</span><br />';
+		}
+
+		if (CheckType == 1){
+			TryAgain += '<br />' + NextCorrect + '<br />' + FindSegment(HintToReturn);
+		}
+
+		ShowMessage(TryAgain);
+	}
+
+}
+
+
+var Segments = new Array();
+Segments[0] = new Array();
+Segments[0][0] = '\u0061';
+Segments[0][1] = 6;
+Segments[0][2] = 0;
+Segments[1] = new Array();
+Segments[1][0] = '\u0077';
+Segments[1][1] = 5;
+Segments[1][2] = 0;
+Segments[2] = new Array();
+Segments[2][0] = '\u0065';
+Segments[2][1] = 8;
+Segments[2][2] = 0;
+Segments[3] = new Array();
+Segments[3][0] = '\u0072';
+Segments[3][1] = 7;
+Segments[3][2] = 0;
+Segments[4] = new Array();
+Segments[4][0] = '\u006F';
+Segments[4][1] = 2;
+Segments[4][2] = 0;
+Segments[5] = new Array();
+Segments[5][0] = '\u0073';
+Segments[5][1] = 1;
+Segments[5][2] = 0;
+Segments[6] = new Array();
+Segments[6][0] = '\u0074';
+Segments[6][1] = 4;
+Segments[6][2] = 0;
+Segments[7] = new Array();
+Segments[7][0] = '\u0066';
+Segments[7][1] = 3;
+Segments[7][2] = 0;
+
+
+var GuessSequence = new Array();
+
+var Answers = new Array();
+Answers[0] = new Array(1,2,3,4,5,6,7,8);
+
+
+function doDrag(e) {
+	if (CurrDrag == -1) {return};
+	if (C.ie){var Ev = window.event}else{var Ev = e}
+	var difX = Ev.clientX-window.lastX; 
+	var difY = Ev.clientY-window.lastY; 
+	var newX = Cds[CurrDrag].GetL()+difX; 
+	var newY = Cds[CurrDrag].GetT()+difY; 
+	Cds[CurrDrag].SetL(newX); 
+	Cds[CurrDrag].SetT(newY);
+	window.lastX = Ev.clientX; 
+	window.lastY = Ev.clientY; 
+	return false;
+} 
+
+function beginDrag(e, DragNum) { 
+	CurrDrag = DragNum;
+	if (C.ie){
+		var Ev = window.event;
+		document.onmousemove=doDrag;
+		document.onmouseup=endDrag;
+	}
+	else{
+		var Ev = e;
+		window.onmousemove=doDrag; 
+		window.onmouseup=endDrag;
+	} 
+	Cds[CurrDrag].SwapColours();
+	topZ++;
+	Cds[CurrDrag].css.zIndex = topZ;
+	window.lastX=Ev.clientX; 
+	window.lastY=Ev.clientY;
+	return true;  
+} 
+
+function endDrag(e) { 
+	if (CurrDrag == -1) {return};
+	Cds[CurrDrag].SwapColours();
+	if (C.ie){document.onmousemove=null}else{window.onmousemove=null;}
+	onEndDrag();	
+	CurrDrag = -1;
+	return true;
+} 
+
+function onEndDrag(){
+//Snap to lines
+	var i = 0;
+	var SnapLine = Cds[CurrDrag].GetT();
+	var BiggestOverlap = -1;
+	var OverlapRect = 0;
+	for (i=0; i<L.length; i++){
+		if (Cds[CurrDrag].Overlap(L[i]) > OverlapRect){
+			OverlapRect = Cds[CurrDrag].Overlap(L[i]);
+			BiggestOverlap = i;
+		}
+	}
+	if (BiggestOverlap > -1){
+		SnapLine = L[BiggestOverlap].GetB() - (Cds[CurrDrag].GetH() + 2);
+		Cds[CurrDrag].SetT(SnapLine);
+		CheckOver(-1);
+	}
+	if (CapitalizeFirst==true){
+		setTimeout('DoCapitalization()', 50);
+	}
+}
+
+function DoCapitalization(){
+//Capitalize first segment if necessary
+	var FD = GetGuessSequence();
+	if ((FD == -1)&&(FirstDiv > -1)){
+		Cds[FirstDiv].elm.innerHTML = Segments[FirstDiv][0];
+	}
+	if (((FD != FirstDiv)&&(CapitalizeFirst == true))&&(FD > -1)){
+		if (FirstDiv > -1){
+			Cds[FirstDiv].elm.innerHTML = Segments[FirstDiv][0];
+		}
+	}
+	if ((FD > -1)&&(CapitalizeFirst == true)){
+		var Temp = CapFirst(Segments[FD][0]);
+		Cds[FD].elm.innerHTML = Temp;
+		FirstDiv = FD;
+	}
+}
+
+function CheckOver(NoMove){
+//This recursive function spreads out the Cards on a line if two of them are overlapping;
+//if the spread operation moves one beyond the end of a line, it wraps it to the next line.
+	for (var i=0; i<Cds.length; i++){
+		for (var j=0; j<Cds.length; j++){
+			if (i!=j){
+				if (Cds[i].Overlap(Cds[j]) > 0){
+					if ((i==NoMove)||(Cds[i].GetL() < Cds[j].GetL())){
+						Cds[j].DockToR(Cds[i]);
+						if (Cds[j].GetR() > (LeftColPos + DivWidth)){
+							Cds[j].SetL(LeftColPos);
+							Cds[j].SetT(Cds[j].GetT() + DropHeight);
+						}
+						CheckOver(j);
+					}
+					else{
+						Cds[i].DockToR(Cds[j]);
+						if (Cds[i].GetR() > (LeftColPos + DivWidth)){
+							Cds[i].SetL(LeftColPos);
+							Cds[i].SetT(Cds[i].GetT() + DropHeight);
+						}
+						CheckOver(i);	
+					}
+				}
+			}	
+		}
+	}
+}
+
+function StartUp(){
+
+
+
+
+
+	Segments = Shuffle(Segments);
+
+//Calculate page dimensions and positions
+	pg = new PageDim();
+	DivWidth = Math.floor((pg.W*4)/5);
+	LeftColPos = Math.floor(pg.W/10);
+	DragTop = parseInt(document.getElementById('CheckButtonDiv').offsetHeight) + parseInt(document.getElementById('CheckButtonDiv').offsetTop) + 10;
+
+	var CurrTop = DragTop + 10;
+
+//Position the drop divs
+	for (var i=0; i<DropTotal; i++){
+		L[i] = new Card('Drop' + i, 0);
+		L[i].SetT(CurrTop)
+		L[i].tag = CurrTop-5;
+		L[i].SetL(LeftColPos);
+		L[i].css.backgroundColor = '#FFFFFF';
+		CurrTop += L[i].GetH();
+		topZ++;
+		L[i].css.zIndex = topZ;
+	}
+	DropHeight = L[0].GetH();
+
+	CurrTop = DragTop;
+	var TempInt = 0;
+	var DropHome = 0;
+
+	for (i=0; i<Segments.length; i++){
+//Create a new pointer in the C array to ref the card div
+		Cds[i] = new Card('D'+i, 0);
+		Cds[i].elm.innerHTML = Segments[i][0];
+		Cds[i].SetT(CurrTop);
+		Cds[i].SetL(LeftColPos);
+		Cds[i].css.cursor = 'move';
+		TempInt = Cds[i].GetH();
+		CurrTop = CurrTop + TempInt + 5;
+		Cds[i].css.backgroundColor = '#EECCEE';
+		Cds[i].css.color = '#330033';
+		topZ++;
+		Cds[i].css.zIndex = topZ;
+		Cds[i].tag = Segments[i][1];
+		Cds[i].index = i;
+	}
+//Place them at the bottom of the page
+	SetInitialPositions();
+
+
+}
+
+function SetInitialPositions(){
+//Places all the divs at the bottom of the page in centred rows
+//First, get the vertical position of the first row
+	var RTop = L[L.length-1].GetB() + 10;
+
+//Create an array to hold the numbers of Cards for each row
+	CRows = new Array();
+	CRows[0] = new Array();
+	Widths = new Array();
+	var i=0;
+	var r=0;
+	var RowWidth=0;
+//Sort the Cards into rows, storing their numbers in the array
+
+	while (i<Cds.length){
+//if it fits on this row, add it
+		if ((RowWidth + Cds[i].GetW() + 5) < DivWidth){
+			CRows[r][CRows[r].length] = i;
+			RowWidth += Cds[i].GetW() + 5;
+//Store the width in the Widths array for later
+			Widths[r] = RowWidth;
+		}
+//if not, increment the row number, and add it to the next row
+		else{
+			r++;
+			CRows[r] = new Array();
+			CRows[r][CRows[r].length] = i;
+			RowWidth = Cds[i].GetW() + 5;
+//Store the width in the Widths array for later
+			Widths[r] = RowWidth;
+		}
+//move to the next Card
+		i++;
+	}
+//Now we have the numbers in rows, set out each row
+	r=0;
+	var Indent=0;
+	for (r=0; r<CRows.length; r++){
+//Get the required indent for this row
+		Indent = Math.floor((DivWidth-Widths[r])/2);
+//Set the first card in position
+		Cds[CRows[r][0]].SetL(Indent + LeftColPos);
+		Cds[CRows[r][0]].SetT(RTop);
+		Cds[CRows[r][0]].SetHome();
+		for (i=1; i<CRows[r].length; i++){
+			Cds[CRows[r][i]].DockToR(Cds[CRows[r][i-1]]);
+			Cds[CRows[r][i]].SetHome();
+		}
+//Increment the row height
+		RTop += Cds[0].GetH() + 5;
+	}
+}
+
+function Restart(){
+	for (var i=0; i<Cds.length; i++){
+		Cds[i].GoHome();
+		Cds[i].elm.innerHTML = Segments[i][0];
+	}
+}
+
+function TimerStartUp(){
+	setTimeout('StartUp()', 300);
+}
+
+
+
+
+
+
+
+
+//-->
+
+//]]>
+
+</script>
+
+</head> 
+
+<body onload="TimerStartUp()" id="TheBody"> 
+<!-- BeginTopNavButtons -->
+
+
+<div class="NavButtonBar" id="TopNavBar">
+
+
+
+
+
+
+<button class="NavButton" onfocus="NavBtnOver(this)" onblur="NavBtnOut(this)" onmouseover="NavBtnOver(this)" onmouseout="NavBtnOut(this)" onmousedown="NavBtnDown(this)" onmouseup="NavBtnOut(this)" onclick="location='jmatch1.htm'; return false;">Siguiente ejemplo</button>
+
+
+</div>
+
+
+
+<!-- EndTopNavButtons -->
+
+<div class="Titles">
+	<h2 class="ExerciseTitle">Ejercicio de ordenar la letras de una palabra elaborado con JMix</h2>
+	<h3 class="ExerciseSubtitle">Ejercicio de ordenar las letras de una palabra</h3>
+
+
+</div>
+
+<div id="InstructionsDiv" class="StdDiv">
+	<p id="Instructions">Ponga las letras en el orden correcto para formar una palabra. Cuando considere que la palabra es correcta, pulse en "Comprobar" para revisar su respuesta. Si lo considera necesario, pulse en el bot&#x00F3;n "Pista" para ver cu&#x00E1;l es la siguiente letra correcta.</p>
+</div>
+
+<div class="StdDiv" id="CheckButtonDiv">
+<button id="CheckButton1" class="FuncButton" onmouseover="FuncBtnOver(this)" onfocus="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)" onblur="FuncBtnOut(this)" onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)" onclick="CheckResults(0)">&nbsp;Comprobar&nbsp;</button>
+
+
+<button class="FuncButton" onmouseover="FuncBtnOver(this)" onfocus="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)" onblur="FuncBtnOut(this)" onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)" onclick="Restart()">&nbsp;Volver a empezar&nbsp;</button>
+
+
+
+<button class="FuncButton" onmouseover="FuncBtnOver(this)" onfocus="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)" onblur="FuncBtnOut(this)" onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)" onclick="CheckResults(1)">&nbsp;Pista&nbsp;</button>
+
+</div>
+
+<script type="text/javascript">
+
+//<![CDATA[
+
+<!--
+
+
+for (var i=0; i<DropTotal; i++){
+	document.write('<div id="Drop' + i + '" class="DropLine" align="center">&nbsp;<br />&nbsp;</div>');
+}
+
+for (var i=0; i<Segments.length; i++){
+	document.write('<div id="D' + i + '" class="CardStyle" onmousedown="beginDrag(event, ' + i + ')"></div>');
+}
+
+//-->
+
+//]]>
+</script>
+
+<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;">&nbsp;OK&nbsp;</button>
+</div>
+
+<!-- BeginBottomNavButtons -->
+
+<!-- EndBottomNavButtons -->
+
+<!-- BeginSubmissionForm -->
+
+<!-- EndSubmissionForm -->
+
+</body>
+</html>
Index: /trunk/max-javahotpot-tutorial/tutorial/jquiz_steps.jqz
===================================================================
--- /trunk/max-javahotpot-tutorial/tutorial/jquiz_steps.jqz (revision 35)
+++ /trunk/max-javahotpot-tutorial/tutorial/jquiz_steps.jqz (revision 35)
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<hotpot-jquiz-file>
+<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">
+  <rdf:Description rdf:about="">
+    <dc:creator>Martin Holmes</dc:creator>
+    <dc:title>Tutorial exercise</dc:title>
+  </rdf:Description>
+</rdf:RDF><version>6</version>
+
+<data>
+<title>Tutorial exercise</title>
+
+<reading>
+<include-reading>0</include-reading>
+<reading-title></reading-title>
+<reading-text></reading-text>
+
+</reading>
+
+<questions><question-record><question>Which Potato is used for making multiple-choice exercises?</question><clue></clue><category></category><weighting>100</weighting><fixed>0</fixed><question-type>1</question-type><answers><answer><text>JMIx</text><feedback>Sorry! JMix makes jumbled-sentence or jumbled-word exercises.</feedback><correct>0</correct><percent-correct>0</percent-correct><include-in-mc-options>1</include-in-mc-options></answer><answer><text>JQuiz</text><feedback>Correct! This exercise was made with JQuiz.</feedback><correct>1</correct><percent-correct>100</percent-correct><include-in-mc-options>1</include-in-mc-options></answer><answer><text>JCloze</text><feedback>Sorry! JCloze is used for making gap-fill exercises.</feedback><correct>0</correct><percent-correct>0</percent-correct><include-in-mc-options>1</include-in-mc-options></answer><answer><text>JCross</text><feedback>Sorry! JCross is used for making crosswords.</feedback><correct>0</correct><percent-correct>0</percent-correct><include-in-mc-options>1</include-in-mc-options></answer></answers></question-record></questions>
+</data>
+
+<hotpot-config-file>
+<jquiz>
+<exercise-subtitle></exercise-subtitle>
+<instructions></instructions>
+<guess-correct>Correct!</guess-correct>
+<guess-incorrect>Sorry! Try again.</guess-incorrect>
+<partly-incorrect>Your answer is partly wrong: </partly-incorrect>
+<enter-a-guess>Please enter a guess.</enter-a-guess>
+<next-correct-letter>Next correct letter in the answer: </next-correct-letter>
+<correct-answers>Correct answers: </correct-answers>
+<show-answer-caption>Show answer</show-answer-caption>
+<include-hint>1</include-hint>
+<include-show-answer>1</include-show-answer>
+<next-ex-url></next-ex-url>
+<send-email>0</send-email>
+<continuous-scoring>1</continuous-scoring>
+<show-correct-first-time>0</show-correct-first-time>
+<shuffle-questions>0</shuffle-questions>
+<shuffle-answers>0</shuffle-answers>
+<show-limited-questions>0</show-limited-questions>
+<questions-to-show>1</questions-to-show>
+<short-answer-tries-on-hybrid-q>2</short-answer-tries-on-hybrid-q>
+<separate-javascript-file>0</separate-javascript-file>
+<case-sensitive>0</case-sensitive>
+<include-keypad>0</include-keypad>
+</jquiz>
+
+<global>
+<your-score-is>Your score is: </your-score-is>
+<correct-indicator>:-)</correct-indicator>
+<incorrect-indicator>X</incorrect-indicator>
+<correct-first-time>Questions answered correctly first time: </correct-first-time>
+<keypad-characters></keypad-characters>
+<times-up>Your time is over!</times-up>
+<next-ex-caption>=&amp;#x003E;</next-ex-caption>
+<back-caption>&amp;#x003C;=</back-caption>
+<contents-caption>Index</contents-caption>
+<include-next-ex>1</include-next-ex>
+<include-contents>1</include-contents>
+<include-back>1</include-back>
+<contents-url></contents-url>
+<graphic-url></graphic-url>
+<font-face>Geneva,Arial</font-face>
+<page-bg-color>#ffffff</page-bg-color>
+<title-color>#000000</title-color>
+<ex-bg-color>#dddddd</ex-bg-color>
+<text-color>#000000</text-color>
+<link-color>#0000cc</link-color>
+<vlink-color>#0000ff</vlink-color>
+<nav-bar-color>#999999</nav-bar-color>
+<formmail-url></formmail-url>
+<email></email>
+<name-please>Please enter your name:</name-please>
+<user-string-1></user-string-1>
+<user-string-2></user-string-2>
+<user-string-3></user-string-3>
+<header-code></header-code>
+<correct-first-time>Questions answered correctly first time: </correct-first-time>
+<check-caption>Check</check-caption>
+<ok-caption>OK</ok-caption>
+<next-q-caption>=&amp;#x003E;</next-q-caption>
+<last-q-caption>&amp;#x003C;=</last-q-caption>
+<hint-caption>Hint</hint-caption>
+<show-all-questions-caption>Show all questions</show-all-questions-caption>
+<show-one-by-one-caption>Show questions one by one</show-one-by-one-caption>
+<show-also-correct>1</show-also-correct>
+<process-for-rtl>0</process-for-rtl>
+</global>
+</hotpot-config-file>
+</hotpot-jquiz-file>
Index: /trunk/max-javahotpot-tutorial/tutorial/tutorial.htm
===================================================================
--- /trunk/max-javahotpot-tutorial/tutorial/tutorial.htm (revision 35)
+++ /trunk/max-javahotpot-tutorial/tutorial/tutorial.htm (revision 35)
@@ -0,0 +1,1491 @@
+<!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 Quandary by Half-Baked Software, registered to Martin Holmes."></meta><meta name="keywords" content="Quandary, Hot Potatoes, Half-Baked Software, Windows, University of Victoria"></meta>
+
+<!-- This is the core XHTML code which is used to build the exercise page. -->
+
+<link rel="schema.DC" href="http://purl.org/dc/elements/1.1/" />
+<meta name="DC:Creator" content="Martin Holmes" />
+<meta name="DC:Title" content="Hot Potatoes 6 Tutorial" />
+
+
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
+
+<title>
+Hot Potatoes 6 Tutorial
+</title>
+
+<!-- Made with executable version 2.0 Release 8 Build 0 -->
+
+<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. */
+
+
+body{
+	font-family: Arial,sans-serif;
+	background-color: #d9d9d9;
+	color: #000000;
+ 
+	margin-right: 5%;
+	margin-left: 5%;
+	font-size: small;
+
+}
+
+p{
+	text-align: left;
+	margin: 0px;
+	font-size: small;
+}
+
+div, span, td{
+	font-size: small;
+	color: #000000;
+}
+
+div.Titles{
+	padding: 10px;
+	text-align: center;
+	color: #000000;
+}
+
+button{
+	display: inline;
+}
+
+.ExerciseTitle{
+	font-size: large;
+	color: #000000;
+}
+
+div#Timer{
+	padding: 6px;
+	margin-left: auto;
+	margin-right: auto;
+	text-align: center;
+}
+
+span#TimerText{
+	padding: 6px;
+	border-width: 1px;
+	border-style: solid;
+	font-weight: bold;
+	display: none;
+}
+
+div.ControlButtons{
+	text-align: center;
+}
+
+.Instructions{
+	margin-top: 1em;
+}
+
+.DecisionPointTitle{
+	font-size: medium;
+}
+
+.DecisionPointText{
+	text-align: left;
+	margin: auto;
+}
+
+div.Assets{
+	margin: 20px;
+}
+
+table.AssetTable{
+	border-width: 3px;
+	border-style: double;
+	border-color: #000000;
+	padding: 5px;
+}
+
+table.AssetTable th{
+	background-color: #000000;
+	color: #ffffff;
+	padding: 5px;
+}
+
+div.LinkList{
+	margin-top: 10px;
+}
+
+table.LinkTable{
+	margin-left: auto;
+	margin-right: auto;
+	text-align: left;
+}
+
+.FeedbackText{
+	color: #000000;
+}
+
+table.DPTable{
+	margin-left: auto;
+	margin-right: auto;
+	border-width: 0px;
+	padding: 10px;
+	vertical-align: top;
+}
+
+div.Feedback {
+	background-color: #d9d9d9;
+	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: small;
+}
+
+div.DecisionPoint{
+	background-color: #ffffff;
+	text-align: center;
+	font-size: small;
+	color: #000000;
+	padding: 8px;
+	border-style: solid;
+	border-width: 1px 1px 1px 1px;
+	border-color: #000000;
+	margin: 1px;
+}
+
+.FuncButton {
+	
+	text-align: center;
+	border-style: solid;
+
+	color: #ffffff;
+	border-color: #ffffff;
+	background-color: #000000;
+
+	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;
+
+	border-width: 2px;
+	padding: 2px 7px 4px 5px;
+	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;
+
+	border-width: 2px;
+	padding: 4px 5px 2px 7px;
+	cursor: pointer;
+}
+
+div.NavButtonBar{
+	background-color: #0060A4;
+	text-align: center;
+	margin: 2px 0px 2px 0px;
+	clear: both;
+	font-size: small;
+}
+
+.NavButton {
+	border-style: solid;
+	border-color: #0060A4;
+	background-color: #0060A4;
+	border-width: 2px;
+	padding: 2px 2px 2px 2px;
+	color: #ffffff;
+	cursor: pointer;	
+}
+
+.NavButtonUp {
+	border-style: solid;
+
+	border-left-color: #7fafd1;
+	border-top-color: #7fafd1;
+	border-right-color: #003052;
+	border-bottom-color: #003052;
+	background-color: #0060A4;
+
+	border-width: 2px;
+	padding: 1px 3px 3px 1px;
+	color: #ffffff;
+	cursor: pointer;	
+}
+
+.NavButtonDown {
+	border-style: solid;
+
+	border-left-color: #003052;
+	border-top-color: #003052;
+	border-right-color: #7fafd1;
+	border-bottom-color: #7fafd1;
+	background-color: #0060A4;
+
+	background-color: #0060A4;
+	border-width: 2px;
+	padding: 3px 1px 1px 3px;
+	color: #ffffff;
+	cursor: pointer;	
+}
+
+a{
+	color: #0060A4;
+}
+
+a:visited{
+	color: #0000ff;
+}
+
+a:hover{
+	color: #0060A4;
+}
+
+
+       </style>
+
+<!-- The following insertion allows you to add your own code directly to this head tag from the configuration screen -->
+
+<style type="text/css">
+strong{background-color: #ffff00;color:inherited;}
+       </style>
+
+<script type="text/javascript">
+
+//<![CDATA[
+
+<!--
+
+
+//This is the JavaScript code needed to make the exercise function
+
+//Simple browser check comes first -- you may want to make this more sophisticated
+//if you have many users with old or obscure browsers
+
+if (document.getElementById == false){
+	alert('Your browser is not able to show this page properly. A modern browser that supports W3C standards is required.');
+}
+
+//USING USER-DEFINED STRINGS:
+//If you are using the user-defined strings on the Other tab of the Config screen, 
+//make sure the strings are correctly escaped for use in JavaScript.
+
+//CODE FOR ASSETS AND ASSET BASKETS
+
+//ASSETS SECTION
+function Asset(ID, Name, InitVal, DecPlace, ShowDuring, ShowEnd, CurrVal, Parent){
+	this.ID = ID;
+	this.Name=Name;
+	this.InitVal=InitVal;
+	this.DecPlace=DecPlace;
+	this.ShowDuring=ShowDuring;
+	this.ShowEnd=ShowEnd;
+	this.CurrVal=CurrVal;
+	this.Parent = Parent;
+}
+
+function AssetGetCurrValString(){
+	var Num = this.CurrVal;
+	if (this.DecPlace > 0){
+		for (var i=0; i<this.DecPlace; i++){Num /= 10;}
+	}
+	var Result = Num.toString();
+	if (this.DecPlace > 0){
+		var DecLoc = Result.indexOf('.');
+		if (DecLoc < 0){Result += '.';}
+//Add leading zeros if required
+		while (((Result.length-1) - Result.indexOf('.'))<this.DecPlace){Result += '0';} 
+//Truncate trailing places if required
+		while (((Result.length-1) - Result.indexOf('.'))>this.DecPlace){Result = Result.substring(0, Result.length-1);}
+	}
+	return Result;
+}
+Asset.prototype.GetCurrValString=AssetGetCurrValString;
+
+function AssetGetCurrValFloat(){
+	var Num = this.CurrVal;
+	if (this.DecPlace > 0){
+		for (var i=0; i<this.DecPlace; i++){Num /= 10;}
+	}
+		return Num;
+}
+Asset.prototype.GetCurrValFloat=AssetGetCurrValFloat;
+
+function AssetSetCurrValFromFloat(Num){
+	if (this.DecPlace > 0){
+		for (var i=0; i<this.DecPlace; i++){Num *= 10;}
+	}
+	this.CurrVal = Num;
+}
+Asset.prototype.SetCurrValFromFloat=AssetSetCurrValFromFloat;
+
+function AssetReportCurrState(){
+	return this.Name + ': ' + this.GetCurrValString();
+}
+Asset.prototype.ReportCurrState=AssetReportCurrState;
+
+function AssetMeetsRequirement(ReqType, Req){
+	var Result = true;
+	switch(ReqType){
+		case 0: break;
+		case 1: Result = (this.CurrVal > Req); break;
+		case 2: Result = (this.CurrVal < Req); break;
+		case 3: Result = (this.CurrVal == Req); break;
+	}
+	return Result;
+}
+Asset.prototype.MeetsRequirement=AssetMeetsRequirement;
+
+function AssetPerformTransaction(OperatorType, Operand){
+	if ((this.Name == '_Timer_Seconds')&&(this.Parent.Active == true)){
+		this.CurrVal = Seconds;
+	}
+	switch(OperatorType){
+//Operands coming into this function should already be massaged to be at the same decimal place level as 
+//the asset being manipulated; therefore +, -, and = operators can use the values directly, but *, /, % 
+//and ^ transactions will have to reduce the operand to its true value by dividing it.
+		case 1: this.CurrVal += Operand; break; //add
+		case 2: this.CurrVal -= Operand; break; //subtract
+		case 3: for (var x=0; x<this.DecPlace; x++){Operand /= 10;}this.CurrVal *= Operand; break; //multiply
+		case 4: for (var x=0; x<this.DecPlace; x++){Operand /= 10;}this.CurrVal /= Operand; break; //divide
+		case 5: this.CurrVal = Operand; break; //set equal to
+		case 6: for (var x=0; x<this.DecPlace; x++){Operand /= 10;}this.CurrVal *= (Operand/100); break; //percentage
+//Difficult case (power of); need to change the operand and the value to core values, do the calculation, then
+//change the value back
+		case 7: 
+//Change the operand to core value
+			for (var x=0; x<this.DecPlace; x++){Operand /= 10;}
+//Change the asset value to core value
+			var y = this.CurrVal; for (var x=0; x<this.DecPlace; x++){y /= 10;}
+//Do the math
+			x = y; for (var j=1; j<Operand; j++){y *= x;} 
+//Raise the val again
+			for (var x=0; x<this.DecPlace; x++){y *= 10;}
+//Set the value
+			this.CurrVal = y;
+			break; 
+	}
+	this.CurrVal = Math.round(this.CurrVal);
+	if ((this.Name == '_Timer_Seconds')&&(this.Parent.Active == true)){
+		Seconds = this.CurrVal;
+	}
+}
+Asset.prototype.PerformTransaction=AssetPerformTransaction;
+
+function AssetCanBeShown(){
+	var Result = true;
+	if (IsEndPoint == true){
+		switch (this.ShowEnd){
+			case 0: Result = true; break;
+			case 1: Result = false; break;
+			case 2: Result = (this.CurrVal != 0); break;
+		}
+	}
+	else{
+		switch (this.ShowDuring){
+			case 0: Result = true; break;
+			case 1: Result = false; break;
+			case 2: Result = (this.CurrVal != 0); break;
+		}
+	}
+	return Result;
+}
+Asset.prototype.CanBeShown=AssetCanBeShown;
+
+function Basket(AList, Active){
+	this.Active = Active;
+	this.Assets = new Array();
+	if (AList.length > 0){
+		for (var i=0; i<AList.length; i++){
+			this.Assets[i] = new Asset(i, AList[i][0], AList[i][1], AList[i][2], AList[i][3], AList[i][4], A[i][5], this);
+		}
+	}
+}
+
+function BasketGetEffectiveOperand(Trans){
+//The "effective operand" is the operand converted to the right decimal place level (so an operand of 
+//5, which is to act on an asset with 2dps, should be converted to 500). This is especially difficult 
+//when the operand is the value of another asset, since that may have its own dp setting, and the two 
+//settings must be harmonized
+	var Operand = 0;
+	switch(Trans[2]){
+//First, a fixed value (this should already be specified at the right dp level)
+		case 0: Operand = Trans[3]; break;
+//Second, a random value; again, this should be specified at the right dp level already)
+		case 1: Operand = GetRand(Trans[3], Trans[4]); break;
+//Finally, the problem case: the value of another asset. In this case, we need to find out the dp 
+//settings of both the source and target asset
+//First get the real value of the source asset (so 500 for an asset with 2dp would be 5)
+		case 2: Operand = this.Assets[Trans[5]].GetCurrValFloat(); 
+//Now multiply this up according to the dp setting of the target asset (so 5 operating on a target asset
+//with dp2 would become 500)
+			for (var i=0; i<this.Assets[Trans[0]].DecPlace; i++){Operand *= 10;}
+			break;
+	}
+	return Operand;
+}
+Basket.prototype.GetEffectiveOperand=BasketGetEffectiveOperand;
+
+function BasketReportCurrState(){
+	if (this.Assets.length < 1){return '';}
+	var Result = '';
+	for (var i=0; i<this.Assets.length; i++){
+		if (this.Assets[i].CanBeShown()==true){
+			Result += '<tr><td style="text-align: right;">' + this.Assets[i].Name + ': </td>';
+			Result += '<td style="text-align: left;">' + this.Assets[i].GetCurrValString() + '</td></tr>';
+		}
+	}
+	if (Result.length > 0){
+		Result = '<table class="AssetTable"><tr><th colspan="2">' + strYouHave + '</th></tr>' + Result + '</table>';
+	}
+	return Result;
+}
+Basket.prototype.ReportCurrState=BasketReportCurrState;
+
+function BasketCloneSelf(Copy, Active){
+	Copy = new Basket(A, false);
+	Copy.Active = Active;
+	for (var i=0; i<this.Assets.length; i++){
+		Copy.Assets[i].CurrVal = this.Assets[i].CurrVal;
+	}
+	return Copy;
+}
+Basket.prototype.CloneSelf=BasketCloneSelf;
+
+function BAssetMeetsRequirement(ANum, ReqType, Req){
+	return this.Assets[ANum].MeetsRequirement(ReqType, Req);
+}
+Basket.prototype.AssetMeetsRequirement=BAssetMeetsRequirement;
+
+function BAssetPerformTransaction(ANum, OpType, Operand){
+	this.Assets[ANum].PerformTransaction(OpType, Operand);
+}
+Basket.prototype.PerformTransaction=BAssetPerformTransaction;
+
+function BGetAssetValByName(AssetName){
+	var Result = 0;
+	for (var i=0; i<this.Assets.length; i++){
+		if (this.Assets[i].Name == AssetName){
+			Result = this.Assets[i].CurrVal;
+		}
+	}
+	return Result;
+}
+Basket.prototype.GetAssetValByName=BGetAssetValByName;
+
+//VARIABLES AND INTERFACE STRINGS
+
+var CurrBasket;
+var TempBasket;
+var CurrNode=0;
+var strYouHave='You have: ';
+var strLinkCaption='Entrar';
+var strFinishCaption='Entrar';
+var strDefaultRefusalMessage='¡Lo siento! No puede hacer eso.';
+var strTimesUp = 'Su tiempo ha terminado';
+var strBookmarkExplanation = 'Su posición actual y configuración ha sido codificada en <br />la URL de la página. Ahora deberá definir un marcador en su<br />navegador, así podrá volver aquí.<br />';
+var strExerciseComplete = 'Ha llegado al final del ejercicio.';
+var ShowImpossibleLinks=true;
+var Interval;
+var StartTime = (new Date()).toLocaleString();
+var HPNStartTime = (new Date()).getTime();
+var SubmissionTimeout = 30000;
+var FollowingTrack = false;
+var CurrTime;
+var Started=false;
+
+var IsEndPoint = false;
+
+function TransactionList(NNum, LNum){
+	this.List = new Array();
+	var i;
+	for (i=0; i<N[NNum][4].length; i++){this.List[this.List.length] = N[NNum][4][i];}
+	for (i=0; i<N[NNum][3][LNum][2].length; i++){this.List[this.List.length] = N[NNum][3][LNum][2][i];}
+	for (i=0; i<N[N[NNum][3][LNum][0]][2].length; i++){this.List[this.List.length] = N[N[NNum][3][LNum][0]][2][i];}
+}
+
+function TestTransactions(NNum, LNum){
+	var T = new TransactionList(NNum, LNum);
+	var Result = '';
+//Create a clone of the current asset basket to operate on
+	var B = CurrBasket.CloneSelf(B, false);
+
+//For each transaction
+	for (var i=0; i<T.List.length; i++){
+//Test the requirement
+		if (B.AssetMeetsRequirement(T.List[i][0], T.List[i][7], T.List[i][6]) == true){
+//If it succeeds, do the transaction
+			B.PerformTransaction(T.List[i][0], T.List[i][1], B.GetEffectiveOperand(T.List[i]));
+		}
+		else{
+//If it fails, check the refusal message
+			if (T.List[i][8].length > 0){
+				return T.List[i][8];
+			}
+//If no refusal message, return a string with spaces, otherwise return refusal message
+			else{
+				return strDefaultRefusalMessage;
+			}
+		}
+	}
+//If all have passed, return an empty string
+	return '';
+}
+
+function StartExercise(){
+	CurrBasket = new Basket(A, true);
+	ParseSearch();
+	CurrTime = new Date();
+	ShowCurrNode();
+
+	Started = true;
+}
+
+function StartUp(){
+	if (document.location.search.indexOf('___') > -1){
+		StartExercise();
+	}
+}
+
+function Restart(){
+	var d = document.location;
+	d.search = '';
+	document.location = d;
+}
+
+//CODE FOR HANDLING UNDO FUNCTIONALITY AND TRACKING NODE SEQUENCE
+function HNode(NNum, LNum, Bask){
+	this.NNum = NNum; //Number of the node
+	this.LNum = LNum; //Number of the link selected to leave the node
+	this.Basket = Bask.CloneSelf(A, false); //Copy of current basket of assets
+//	this.EntryTime = CurrTime.getTime() - HPNStartTime; //Stores time of entry to this node, offset by start time, in milliseconds
+	this.EntryTime = CurrTime.getTime(); //Stores absolute time of entry to this node
+	this.EntryTimeString = CurrTime.toLocaleString();
+	var D = new Date();
+//	this.ExitTime = D.getTime() - HPNStartTime; //Stores the time of exit from this node
+	this.ExitTime = D.getTime(); //Stores the absolute time of exit from this node
+
+	this.ExitTimeString = D.toLocaleString(); //Stores the time in human-readable format
+}
+
+function HNodeReportSelf(AddTime){
+	var S = this.NNum + ':' + this.LNum;
+	if (AddTime == true){
+		S += ':' + this.EntryTime;
+	}
+	return S;
+}
+HNode.prototype.ReportSelf=HNodeReportSelf;
+
+//Object containing the list of tracking node objects
+function HNodeList(){
+	this.Nodes = new Array();
+	var D = new Date();
+	this.StartTime = D.getTime(); // Stores the entry time of the exercise; =entry time to node 0
+	this.StartTimeString = D.toLocaleString();
+}
+
+function HNodeListReportAsSearch(IncludeTime){
+	var S = '___t;';
+	if (this.Nodes.length > 0){
+		S += this.Nodes[0].ReportSelf(IncludeTime);
+		for (var i=1; i<this.Nodes.length; i++){
+			S += ',' + this.Nodes[i].ReportSelf(IncludeTime);
+		}
+	}
+	return S;
+}
+HNodeList.prototype.ReportAsSearch=HNodeListReportAsSearch;
+
+var H = new HNodeList(); //array of HNode elements
+
+function Undo(){
+	if (H.Nodes.length < 1){
+		return;
+	}
+	var LastNode = H.Nodes.pop();
+	CurrNode = LastNode.NNum;
+	CurrBasket = LastNode.Basket.CloneSelf(A, true);
+	ShowCurrNode();
+}
+
+//CODE FOR HANDLING URL ENCODING OF STATE
+function ParseSearch(){
+	if (document.location.search.length < 1){return;}
+//First, get the part of the search string we're interested in
+	var Temp = document.location.search.substring(document.location.search.lastIndexOf('___'), document.location.search.length);
+	if (Temp.length < 1){return;}
+
+	var S = Temp.split(';');
+//S[0] tells us this is a bookmark, or a track
+	if (S.length > 0){
+		if (S[0] == '___b'){
+//It's a bookmark
+			ShowMessage(strBookmarkExplanation);
+		}
+		if (S[0] == '___t'){
+//It's tracking data
+			ParseTrack(S[1]);
+			return;
+		}
+	}
+//S[1] is the current node
+	if (S.length > 1){
+		if (S[1].length > 0){
+			var CN=parseInt(S[1]);
+			if ((CN>-1)&&(CN<N.length)){
+				CurrNode = CN;
+			}
+		}
+	}
+	if (S.length > 2){
+		if (S[2].length > 0){
+			var AA=S[2].split(',');
+			if (AA.length > 0){
+				for (var i=0; i<AA.length; i++){
+					var Val = parseInt(AA[i]);
+					if ((i<A.length)&&(Val != NaN)){
+						CurrBasket.Assets[i].CurrVal = Val;
+					}
+				}
+			}
+		}
+	}
+
+}
+
+var Footprints = new Array();
+
+function ParseTrack(Track){
+	if (Track.length < 3){
+		return;
+	}
+
+	var Steps = Track.split(',');
+	if (Steps.length < 2){
+		return;
+	}
+//We have valid track data, so the exercise can be displayed accordingly
+	FollowingTrack = true;
+	var NNum = 0;
+	var LNum = 0;
+	var T = 0;
+	for (var i=0; i<Steps.length; i++){
+		var Step = Steps[i].split(':');
+		NNum = parseInt(Step[0]);
+		if (NNum > -1){
+			LNum = parseInt(Step[1]);
+			if (LNum > -1){
+				if (Step.length > 2){
+					T = parseInt(Step[2]);
+				}
+				Footprints.push(new Array(NNum, LNum, T));
+			}
+		}
+	}
+}
+
+function CreateBookmark(){
+	var S = '___b;' + CurrNode + ';';
+	if (CurrBasket.Assets.length > 0){
+		S += CurrBasket.Assets[0].CurrVal;
+		for (var i=1; i<CurrBasket.Assets.length; i++){
+			S += ',' + CurrBasket.Assets[i].CurrVal;
+		}
+	}
+
+	return S;
+}
+
+function SetBookmark(){
+	if (Started == false){return;}
+	var Temp = document.location.search;
+	if (Temp.length < 1){
+		Temp = '?';
+	}
+	else{
+		Temp += '&';
+	}
+	document.location.search = Temp + CreateBookmark();
+}
+
+//CODE FOR HANDLING NAV BUTTONS AND FUNCTION BUTTONS
+
+function NavBtnOver(Btn){
+	if (Btn.className != 'NavButtonDown'){Btn.className = 'NavButtonUp';}
+}
+
+function NavBtnOut(Btn){
+	Btn.className = 'NavButton';
+}
+
+function NavBtnDown(Btn){
+	Btn.className = 'NavButtonDown';
+}
+
+function FuncBtnOver(Btn){
+	if (Btn.className != 'FuncButtonDown'){Btn.className = 'FuncButtonUp';}
+}
+
+function FuncBtnOut(Btn){
+	Btn.className = 'FuncButton';
+}
+
+function FuncBtnDown(Btn){
+	Btn.className = 'FuncButtonDown';
+}
+
+
+//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.display = 'block';
+	document.getElementById('FeedbackOKButton').focus();
+
+//[inclPreloadImages]
+//	RefreshImages();
+//[/inclPreloadImages]
+}
+
+function HideFeedback(){
+	document.getElementById('FeedbackDiv').style.display = 'none';
+	if (IsEndPoint == true){
+		Finish();
+	}
+}
+
+function MillisecondsToTimeReadout(MS){
+	var DT = new Date(MS);
+	return DT.getHours() + ':' + DT.getMinutes() + ':' + DT.getSeconds() + ':' + DT.getMilliseconds();
+}
+
+function ShowCurrNode(){
+	var DPT = N[CurrNode][0];
+	if ((FollowingTrack==true)&&(Footprints.length > 0)){
+		if (Footprints[0][2] > 0){
+			DPT += ' (' + MillisecondsToTimeReadout(Footprints[0][2]) + ')';
+		}
+	}
+	document.getElementById('DPTitle').innerHTML = DPT;
+	document.getElementById('DPContentsDiv').innerHTML = N[CurrNode][1];
+	var Links = '';
+	var Refusal = '';
+	var ValidLinks = 0;
+	for (var LNum=0; LNum<N[CurrNode][3].length; LNum++){
+		if ((FollowingTrack==true)&&(Footprints.length > 0)){
+//We're following a track, so we only want to make a working link for the correct item
+			if (LNum == Footprints[0][1]){
+				Links += MakeLink(CurrNode, LNum);
+				ValidLinks++;
+			}
+			else{
+				Links += MakeDummyLink(CurrNode, LNum);
+			}
+
+		}
+		else{
+			Refusal = TestTransactions(CurrNode, LNum);
+			if (Refusal.length > 0){
+				if (N[CurrNode][3][LNum][4] < 1){
+					N[CurrNode][3][LNum][3] = Refusal;
+					Links += MakeRefusalLink(CurrNode, LNum);
+				}
+			}
+			else{
+				Links += MakeLink(CurrNode, LNum);
+				ValidLinks++;
+			}
+		}
+	}
+	if (Links.length > 0){
+		Links = '<table class="LinkTable">' + Links + '</table>';
+	}
+
+	if (ValidLinks < 1){
+		IsEndPoint = true;
+		if (document.getElementById('store') != null){
+			Links = '<table class="LinkTable">' + MakeEndLink() + '</table>';
+		}
+		else{
+			if (document.getElementById('UndoButton') == null){
+				Links = '<table class="LinkTable"><tr><td>' + strExerciseComplete + '</td></tr></table>';
+			}
+		}
+	}
+	document.getElementById('LinkListDiv').innerHTML = Links;
+
+//Show assets now -- endpoint issue may affect which are shown
+	document.getElementById('AssetsDiv').innerHTML = CurrBasket.ReportCurrState();
+
+//Remove the last footprint from the track
+	if (Footprints.length > 0){Footprints.shift();}
+
+	if ((IsEndPoint==true)&&(document.getElementById('UndoButton') == null)){
+//Record current state in the history array
+		H.Nodes.push(new HNode(CurrNode, LNum, CurrBasket));
+
+//Reset the current time
+		CurrTime = new Date();
+		setTimeout('Finish()', SubmissionTimeout);
+	}
+}
+
+function MakeRefusalLink(NNum, LNum){
+	var Result = '<tr><td><button class="FuncButton" onfocus="FuncBtnOver(this)" onblur="FuncBtnOut(this)"  onmouseover="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)" onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOver(this)" onclick="ShowMessage(N[' + NNum + '][3][' + LNum + '][3])">' + strLinkCaption + '</button></td>';
+	Result += '<td>' + N[NNum][3][LNum][1] + '</td></tr>';
+	return Result;
+}
+
+function MakeLink(NNum, LNum){
+	var Result = '<tr><td><button class="FuncButton" onfocus="FuncBtnOver(this)" onblur="FuncBtnOut(this)"  onmouseover="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)" onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOver(this)" onclick="FollowLink(' + LNum + ')">' + strLinkCaption + '</button></td>';
+	Result += '<td>' + N[NNum][3][LNum][1] + '</td></tr>';
+	return Result;
+}
+
+function MakeDummyLink(NNum, LNum){
+	var Result = '<tr><td style="text-align: right;">&nbsp;&#x25cf;&nbsp;</td>';
+	Result += '<td>' + N[NNum][3][LNum][1] + '</td></tr>';
+	return Result;
+}
+
+function MakeEndLink(){
+	var Result = '<tr><td><button class="FuncButton" onfocus="FuncBtnOver(this)" onblur="FuncBtnOut(this)"  onmouseover="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)" onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOver(this)" onclick="Finish()">' + strFinishCaption + '</button></td>';
+	Result += '<td>' + strExerciseComplete + '</td></tr>';
+	return Result;
+}
+
+function FollowLink(LNum){
+
+//Record current state in the history array
+	H.Nodes.push(new HNode(CurrNode, LNum, CurrBasket));
+
+//Reset the current time
+	CurrTime = new Date();
+
+	var T = new TransactionList(CurrNode, LNum);
+//For each transaction
+	for (var i=0; i<T.List.length; i++){
+//Do the transaction
+		CurrBasket.PerformTransaction(T.List[i][0], T.List[i][1], CurrBasket.GetEffectiveOperand(T.List[i]));
+	}
+//Now change the node
+	CurrNode = N[CurrNode][3][LNum][0];
+	ShowCurrNode();
+}
+
+//CODE FOR HANDLING TIMER
+
+
+//HOTPOTNET FUNCTIONS
+function Finish(){
+//If there's a form, fill it out and submit it
+	try{
+		var F = document.getElementById('store');
+		if (F != null){
+			F.starttime.value = HPNStartTime;
+			F.endtime.value = (new Date()).getTime();
+			F.mark.value = CurrBasket.GetAssetValByName('Score'); //if an asset called "Score" exists, this value will be submitted as the mark
+			var Temp = '<?xml version="1.0"?><hpnetresult><fields>';
+			Temp += '<field><fieldname>endbookmark</fieldname><fieldtype>url-search</fieldtype><fieldlabel>Click here to see the final position in the maze</fieldlabel><fieldlabelid>QuandaryViewFinalPosition</fieldlabelid><fielddata>' + CreateBookmark() + '</fielddata></field>';
+			Temp += '<field><fieldname>track</fieldname><fieldtype>url-search</fieldtype><fieldlabel>Click here to track the student through the maze.</fieldlabel><fieldlabelid>QuandaryViewTrack</fieldlabelid><fielddata>' + H.ReportAsSearch(false) + '</fielddata></field>';
+			Temp += '<field><fieldname>timedtrack</fieldname><fieldtype>url-search</fieldtype><fieldlabelid>QuandaryViewTimedTrack</fieldlabelid><fieldlabel>Click here to track the student through the maze with timing data.</fieldlabel><fielddata>' + H.ReportAsSearch(true) + '</fielddata></field>';
+			Temp += '</fields></hpnetresult>';
+			F.detail.value = Temp;
+			F.submit();
+
+		}
+	}
+	catch(er){
+		return;
+	}
+}
+
+//UTILITY FUNCTIONS
+function GetRand(Lower, Upper){
+	var Rng = Upper-Lower;
+	return (Math.round(Math.random()*Rng)) + Lower;
+}
+
+var A = new Array();
+
+
+var N = new Array();
+N[0] = new Array();
+N[0][0] = 'Bienvenid@ a Hot Potatoes!';
+N[0][1] = 'Esta presentación le describirá los principales tipos de ejercicios que se pueden realizar con los programas, y le llevará a través de los pasos básicos necesarios para elaborar un ejercicio interactivo. Elija una de las opciones que se muestran a continuación.';
+N[0][2] = new Array();
+
+N[0][3] = new Array();
+N[0][3][0] = new Array();
+N[0][3][0][0] = 1;
+N[0][3][0][1] = '¿Qué es Hot Potatoes?';
+N[0][3][0][2] = new Array();
+
+N[0][3][0][3] = '';
+N[0][3][0][4] = 0;
+
+N[0][3][1] = new Array();
+N[0][3][1][0] = 2;
+N[0][3][1][1] = 'Novedades de la versión 6';
+N[0][3][1][2] = new Array();
+
+N[0][3][1][3] = '';
+N[0][3][1][4] = 0;
+
+N[0][3][2] = new Array();
+N[0][3][2][0] = 3;
+N[0][3][2][1] = 'Para empezar';
+N[0][3][2][2] = new Array();
+
+N[0][3][2][3] = '';
+N[0][3][2][4] = 0;
+
+N[0][3][3] = new Array();
+N[0][3][3][0] = 4;
+N[0][3][3][1] = 'Las patatas, una a una';
+N[0][3][3][2] = new Array();
+
+N[0][3][3][3] = '';
+N[0][3][3][4] = 0;
+
+N[0][3][4] = new Array();
+N[0][3][4][0] = 17;
+N[0][3][4][1] = 'El servidor de <strong>hotpotatoes.net</strong>';
+N[0][3][4][2] = new Array();
+
+N[0][3][4][3] = '';
+N[0][3][4][4] = 0;
+
+
+N[0][4] = new Array();
+
+
+N[1] = new Array();
+N[1][0] = '¿Qué es Hot Potatoes?';
+N[1][1] = '<strong>Hot Potatoes</strong> es un conjunto de seis herramientas para elaborar contenidos digitales. La aplicación ha sido desarrollada por el equipo de Investigación y Desarrollo del <a href="http://web.uvic.ca/hrd/hcmc/">Humanities Computing and Media Centre</a> de la Universidad de Victoria. Estas utilidades le permitirán elaborar ejercicios interactivos de tipo página Web y de diferentes modalidades. Los ejercicios generados son páginas Web estándar que utilizan código XHTML 1.1 para la visualización, y JavaScript (ECMAScript) para la interactividad. Estos estándares W3C son soportados por todos los navegadores modernos, incluyendo Mozilla 1.2+, Internet Explorer 6+, Phoenix, Safari, y muchos otros. Estas herramientas funcionan también con Unicode. Así, se pueden crear ejercicios en cualquier idioma, o en una mezcla de idiomas.<br /><br />Usted no necesita saber nada sobre XHTML o JavaScript para utilizar los programas. Todo lo que necesita hacer es introducir sus datos -- textos, preguntas, respuestas, etc. -- y los programas crearán automáticamente las páginas Web. Posteriormente podrá publcair dichas páginas en su servidor Web. Además, los programas están diseñados para que se puedan personalizar casi todas las características de las páginas. Por tanto, si usted sabe algo de código HTML o de JavaScript, podrá hacer cualquier cambio que desee en la forma de trabajar de los ejercicios o en el formato de las páginas Web.<br /><br />Si usted trabaja en una institución educativa sin ánimo de lucro, y está dispuest@ a compartir sus ejercicios colocándolos en un servidor Web de acceso público, entonces podrá utilizar la suite Hot Potatoes sin cargo alguno. Si usted trabaja para una compañía comercial, o si usted protege mediante contraseña sus ejercicios o los distribuye exclusivamente en una intranet, necesitará adquirir una licencia (contacte con <a href="http://www.halfbakedsoftware.com/">Half-Baked Software</a> para más información). No obstante, tanto si usted es de una empresa comercial como si no, le pedimos que registre el programa; lo único que tiene que hacer es <a href="http://web.uvic.ca/hrd/hotpot/register.htm">rellenar un formulario en nuestra página Web</a>. Esto nos permite mantenernos en contacto con nuestros usaurios y hacernos una idea de quién está utilizando nuestros programas. Puede consultar el archivo de ayuda para obtener más información sobre el proceso de registro de la aplicación.<br /><br />Ahora, continúe para ver algunos ejemplos del tipo de ejercicios que puede elaborar utilizando <strong>Hot Potatoes</strong>. (Tenga en cuenta que los archivos de datos de todos estos ejercicios se encuentran disponibles en la carpeta tutorial y podrá verlos con las diferentes patatas, si así lo desea más tarde.)<br />';
+N[1][2] = new Array();
+
+N[1][3] = new Array();
+N[1][3][0] = new Array();
+N[1][3][0][0] = 11;
+N[1][3][0][1] = 'Ejemplos de ejercicios';
+N[1][3][0][2] = new Array();
+
+N[1][3][0][3] = '';
+N[1][3][0][4] = 0;
+
+
+N[1][4] = new Array();
+
+
+N[2] = new Array();
+N[2][0] = 'Novedades de la versión 6';
+N[2][1] = 'El archivo de ayuda contiene una lista más detallada de las nuevas características y de los cambios, y a continuación se enumeran las diferencias básicas entre las versiones 5.5 y 6.0:<ul><li><strong>Soporte Unicode</strong>, así podrá crear ejercicios en casí cualquier idioma o en una mezcla de idiomas. El soporte Unicode solamente está disponible en Windows 2000 o XP; las versiones anteriores de Windows no lo soportan.</li><li><strong>Tipos de preguntas mezcladas en un test.</strong> La antigua aplicación JBC (respuestas múltiples) ha sido combinada con JQuiz, y la nueva aplicación le permite crear un test o prueba con una mezcla de preguntas de tipo respuestas múltiples, respuestas cortas y de selección múltiple, junto con un nuevo tipo de pregunta ("híbrida").</li><li><strong>Sistema de puntuación más sofisticado en JQuiz.</strong> Ahora se puede predeerminar el valor de cada pregunta en el conjunto del test, y se puede definir un "porcentaje de acierto" a las espuestas individuales.</li><li><strong>Formato de salida más simple.</strong> En vez del antiguo sistema basado en marcos, en el que el contenido de las páginas de los ejercicios estaba escrito en JavaScript, las nuevas páginas basadas en XHTML son más sencillas, esto permite una edición más facil de las páginas resultantes en editores de tipo WYSIWYG como DreamWeaver.</li><li>Ahora se puede incluir un <strong>contador de tiempo</strong> en los ejercicios, en vez de hacerlo en las lecturas de texto asociadas de las versiones anteriores.</li><li>Los ejercicios y todos los archivos de medios asociados pueden ser publicados automáticamente en una cuenta de la red <a href="http://www.hotpotatotes.net">www.hotpotatotes.net</a>, y así sus alumn@s podrán entra en dicha red y ver los resultados obtenidos en los ejercicios.</li></ul>';
+N[2][2] = new Array();
+
+N[2][3] = new Array();
+N[2][3][0] = new Array();
+N[2][3][0][0] = 0;
+N[2][3][0][1] = 'Volver al Índice';
+N[2][3][0][2] = new Array();
+
+N[2][3][0][3] = '';
+N[2][3][0][4] = 0;
+
+N[2][3][1] = new Array();
+N[2][3][1][0] = 3;
+N[2][3][1][1] = 'Para empezar';
+N[2][3][1][2] = new Array();
+
+N[2][3][1][3] = '';
+N[2][3][1][4] = 0;
+
+
+N[2][4] = new Array();
+
+
+N[3] = new Array();
+N[3][0] = 'Para empezar';
+N[3][1] = 'La mejor forma de comenzar con Hot Potatoes es trabajar con los ejemplos de ejercicios; estos ejercicios le mostrarán los diferentes tipos que se pueden elaborar, y, a la vez, le enseñarán algunos de los conceptos básicos. Después podrá realizar su primer ejercicio.';
+N[3][2] = new Array();
+
+N[3][3] = new Array();
+N[3][3][0] = new Array();
+N[3][3][0][0] = 11;
+N[3][3][0][1] = 'Ejemplos de Ejercicios';
+N[3][3][0][2] = new Array();
+
+N[3][3][0][3] = '';
+N[3][3][0][4] = 0;
+
+N[3][3][1] = new Array();
+N[3][3][1][0] = 12;
+N[3][3][1][1] = 'El desafío en 2-minutos: elabore su primer ejercicio';
+N[3][3][1][2] = new Array();
+
+N[3][3][1][3] = '';
+N[3][3][1][4] = 0;
+
+N[3][3][2] = new Array();
+N[3][3][2][0] = 13;
+N[3][3][2][1] = 'Tres pasos para elaborar un ejercicio';
+N[3][3][2][2] = new Array();
+
+N[3][3][2][3] = '';
+N[3][3][2][4] = 0;
+
+
+N[3][4] = new Array();
+
+
+N[4] = new Array();
+N[4][0] = 'Las Patatas, una a una';
+N[4][1] = 'En la versión 6 de Hot Potatoes existen seis Patatas. Elija la patata sobre la que quiere saber algo más:';
+N[4][2] = new Array();
+
+N[4][3] = new Array();
+N[4][3][0] = new Array();
+N[4][3][0][0] = 5;
+N[4][3][0][1] = 'JQuiz (ejercicios basados en preguntas)';
+N[4][3][0][2] = new Array();
+
+N[4][3][0][3] = '';
+N[4][3][0][4] = 0;
+
+N[4][3][1] = new Array();
+N[4][3][1][0] = 6;
+N[4][3][1][1] = 'JCloze (ejercicios de rellenar huecos)';
+N[4][3][1][2] = new Array();
+
+N[4][3][1][3] = '';
+N[4][3][1][4] = 0;
+
+N[4][3][2] = new Array();
+N[4][3][2][0] = 7;
+N[4][3][2][1] = 'JMatch (ejercicios de emparejamiemtos)';
+N[4][3][2][2] = new Array();
+
+N[4][3][2][3] = '';
+N[4][3][2][4] = 0;
+
+N[4][3][3] = new Array();
+N[4][3][3][0] = 8;
+N[4][3][3][1] = 'JMix (ejercicios para desordenar palabras o frases)';
+N[4][3][3][2] = new Array();
+
+N[4][3][3][3] = '';
+N[4][3][3][4] = 0;
+
+N[4][3][4] = new Array();
+N[4][3][4][0] = 9;
+N[4][3][4][1] = 'JCross (crucigramas)';
+N[4][3][4][2] = new Array();
+
+N[4][3][4][3] = '';
+N[4][3][4][4] = 0;
+
+N[4][3][5] = new Array();
+N[4][3][5][0] = 10;
+N[4][3][5][1] = 'The Masher (para crear unidades enlazadas a partir de diferentes ejercicios)';
+N[4][3][5][2] = new Array();
+
+N[4][3][5][3] = '';
+N[4][3][5][4] = 0;
+
+
+N[4][4] = new Array();
+
+
+N[5] = new Array();
+N[5][0] = ' Introducción a JQuiz (ejercicios basados en preguntas)';
+N[5][1] = 'JQuiz es una herramienta que permite elaborar ejercicios basados en preguntas. Cada test puede estar formado por un número ilimitado de preguntas. Se puden formular cuatro tipos de preguntas:<br /><br />En las <strong>preguntas de respuestas múltiples</strong>, los alumnos han de elegir una respuesta pulsando en un botón. Si la respuesta es correcta, el botón se convertirá en una carita sonriente :-), y si es errónea, cambiará a una X (estas opciones puden cambiarse en la ventana de configuración). En cualquier caso, el alumno verá algua indicación específica para dicha respuesta, explicándole porque está bien o mal (¡siempre suponiendo que usted ha escrito dichas indicaciones al realizar el ejercicio!). Si la respuesta es incorrecta, el alumno podrá seguir seleccioanndo opciones hasta dar con la respuesta correcta. La puntuación de cada pregunta dependerá del número de intentos hasta acertar la pregunta. Una vez que se ha elegido una respuesta correcta, la puntuación queda "congelada", pero el alumno podría seguir pulsando en los botones para ver las indicaciones de las demás respuestas sin que por ello se le penalice.<br /><br />En las <strong>preguntas de respuestas cortas</strong>, los alumnos deberán escribir una respuesta en una casilla de texto en la página, y pulsar en el botón <strong>Comprobar</strong> para ver si es correcta. La página intentará comprobar que la respuesta del alumno es una de las contenidas en la lista de respuestas correctas o incorrectas que usted haya definido. Si la respuesta está en la lista, se mostrarán las indicaciones para dicha respuesta. Si no es así, la página intentará encontrar la la respuesta más parecida entre las posibles respuestas correctas, e indicará al alumno la parte de su respuesta que se acerque a la correcta y qué partes son incorrectas. La puntuación obtenida depende del número de intentos realizados por el alumno antes de dar la respuesta correcta. También podría incluirse un botón <strong>Pista</strong>, para proporcionar al alumno una letra de la respuesta correcta; la utilización del botón Pista conllevará una penalización en la puntuación.<br /><br />Una <strong>pregunta híbrida</strong> es una combinación de una pregunta de respuestas múltiples y una pregunta de respuesta corta. En este tipo de preguntas, al alumno se le presenta una casilla de texto para que escriba la respuesta. Si el alumno no responde correctamente después de un especificado número de intentos (que usted puede definir en la pantalla de configuración), la pregunta cambia a otra de respuestas múltiples para que sea más fácil para el alumno.<br /><br />Por último, una pregunta de <strong>multi-selección</strong> consiste en que el alumno ha de seleccionar varias respuestas de la lista definida previamente. La idea aquí es que el alumno seleccione todas las posibles respuestas correctas, y no las respuestas inocrrectas. Este tipo de preguntas deberían formularse como "¿Cuál de los siguientes términos son nombres?", seguido de una lista de palabras. El alumno deberá marcar todas las palabras que sean nombres, y dejar sin marcar las palabras que no lo sean, y después pulsar en el botón <strong>Comprobar</strong>. Si la respuesta no es totalmente correcta, el alumno verá indicaciones del número de opciones correctas, e indiaciones para completar la pregunta; las indicaciones pueden hace referencia tanto a los elementos que <strong>han sido seleccionados cuando no lo deberían haber sido </strong>, como a los elementos <strong>no seleccionados cuando deberían haberlo sido</strong>.<br /><br />Para hacer pruebas con todos estos tipos de preguntas, véase este <a style="cursor: pointer; text-decoration: underline;" onclick="window.open(\'jquiz2.htm\'); return false;">ejemplo de test</a>.<br /><br />Para ver un ejemplo sobre como elaborar Tests con JQuiz, pulse en el enlace "Tres pasos". Para más información sobre la forma de trabajar de JQuiz, revise los <strong>Archivos de Ayuda</strong> -- arranque JQuiz y pulse en la tecla <strong>F1</strong>.';
+N[5][2] = new Array();
+
+N[5][3] = new Array();
+N[5][3][0] = new Array();
+N[5][3][0][0] = 13;
+N[5][3][0][1] = 'Tres pasos para elaborar un ejercicio';
+N[5][3][0][2] = new Array();
+
+N[5][3][0][3] = '';
+N[5][3][0][4] = 0;
+
+N[5][3][1] = new Array();
+N[5][3][1][0] = 0;
+N[5][3][1][1] = 'Índice';
+N[5][3][1][2] = new Array();
+
+N[5][3][1][3] = '';
+N[5][3][1][4] = 0;
+
+
+N[5][4] = new Array();
+
+
+N[6] = new Array();
+N[6][0] = 'Introducción a JCloze (ejercicios de rellenar huecos)';
+N[6][1] = 'JCloze se utiliza para elaborar ejercicos de completar huecos. La idea de este tipo de ejercicios es que el alumno complete todas las respuestas antes de comprobar el resultado; en otras palabras, es un ejercicio holístico. Cuando se han completado todos los huecos, el alumno pulsará sobre el botón <strong>Comprobar</strong> para ver las respuestas. Las respuestas correctas serán introducidas en el texto; las respuesats incorrectas se dejarán en las casillas de texto, para que puedan corregirse. Cuando el alumno comprueba una respuesta que no es totalmente correcta, se incurre en una penalización. Por tanto, la puntuación final dependerá del número de veces que se ha comprobado la respuesta antes de dar con la correcta. <br /><br />En los ejercicios JCloze, se pude incluir un botón <strong>Pista</strong> que proporcionará al alumno una letra de la respuesta correcta (en función de la posición del cursor). También puede incluir una pista específica para cada hueco. <br /><br />La creación de los huecos es muy sencilla -- veáse la figura siguiente:<br /><br /><img src="jcloze1.png" alt="Elaborando un ejercicio con JCloze." title="Elaborando un ejercico con JCLoze." width="608" height="484"></img><br /><br />También puede echarle un vistazo a este <a style="cursor: pointer; text-decoration: underline;" onclick="window.open(\'jcloze1.htm\'); return false;">ejemplo de ejercicio con JCloze</a>. Para más información sobre la forma de trabajar de JCloze, consulte el <strong>Archivo de Ayuda</strong> -- simplemente arranque JCloze y pulse la tecla <strong>F1</strong>.';
+N[6][2] = new Array();
+
+N[6][3] = new Array();
+N[6][3][0] = new Array();
+N[6][3][0][0] = 0;
+N[6][3][0][1] = 'Índice';
+N[6][3][0][2] = new Array();
+
+N[6][3][0][3] = '';
+N[6][3][0][4] = 0;
+
+
+N[6][4] = new Array();
+
+
+N[7] = new Array();
+N[7][0] = ' Introducción a JMatch (ejercicios de emparejamiento)';
+N[7][1] = 'JMatch se utiliza para crear ejercicios de emparejamiento. Básicamente esto quiere decir que se disponen una serie de elementos a un lado y cada uno de ellos ha de emparejarse con los elementos dispuestos en el lado opuesto.<br /><br />Los ejercicios generados con JMatch pueden ser de dos tipos: <strong>modelo estándar</strong> y <strong>modelo arrastrar y soltar</strong>. El modelo estándar (véase un <a style="cursor: pointer; text-decoration: underline;" onclick="window.open(\'jmatch1.htm\'); return false;">ejemplo</a>) utiliza una lista desplegable de elementos a la derecha. Este es el formato a utilizar cuando usted tenga más de siete u ocho elementos, y cuando los elementos de la derecha son solo de tipo texto; si solamente tiene unos pocos elementos, y especialmente cuando los elementos son gráficos, ustede deberá utilziar el modelo arrastrar y soltar (véase este <a style="cursor: pointer; text-decoration: underline;" onclick="window.open(\'jmatch2.htm\'); return false;">ejemplo</a>). No utilice el modelo arrastrar y soltar si tiene más de ocho elementos, ya que tendrá que utilizar la barra de desplazamiento vertical y esto dificultará el arrastre de los elementos.<br /><br />Para elaborar un ejercicio con JMatch, introduzca cada uno de los pares de elementos en la misma línea, tal como se muestra en la figura siguiente. Cuando exporte para crear la página Web, el progrqama se encargará de ordenar los elementos a la derecha.<br /><br /><img src="jmatch1.png" alt="Elaborando un ejercicio con JMatch" title="Elaborando un ejercicio con JMatch" width="750" height="465"></img><br /><br />Para más información sobre la forma de trabajar de JMatch, consulte los <strong>Archivos de Ayuda</strong> -- simplemente arranque JMatch y pulse la tecla <strong>F1</strong>.';
+N[7][2] = new Array();
+
+N[7][3] = new Array();
+N[7][3][0] = new Array();
+N[7][3][0][0] = 0;
+N[7][3][0][1] = 'Índice';
+N[7][3][0][2] = new Array();
+
+N[7][3][0][3] = '';
+N[7][3][0][4] = 0;
+
+
+N[7][4] = new Array();
+
+
+N[8] = new Array();
+N[8][0] = ' Introducción a JMix (ejercicos para ordenar las letras de una palabra o las palabras de una frase)';
+N[8][1] = 'JMix se utiliza para elaborar ejercicos de ordenar palabras o frases. Puede ordenar las palabras de una frase, o las letras de una palabra. Como JMatch, JMix puede presentarse en dos modalidades: <strong>modelo estándar</strong>, y <strong>modelo arrastrar y soltar</strong>. Para ver ejemplos, pulse aquí <a style="cursor: pointer; text-decoration: underline;" onclick="window.open(\'jmix1.htm\'); return false;">Ejercicios modelo estándar</a> o aquí <a style="cursor: pointer; text-decoration: underline;" onclick="window.open(\'jmix2.htm\'); return false;">Ejercicios modelo arrastrar y soltar</a>.<br /><br />Para obtener instrucciones detalladas sobre como hacer un ejercicio sencillo con JMix, acceda al enlace del Desafío en 2 minutos que se muestra a continuación.<br /><br />Para más información sobre la forma de trabajar de JMix, consulte los <strong><STRONG>Archivos de Ayuda</STRONG> </strong> -- simplemente arranque JMix y pulse la tecla <strong>F1</strong>.';
+N[8][2] = new Array();
+
+N[8][3] = new Array();
+N[8][3][0] = new Array();
+N[8][3][0][0] = 12;
+N[8][3][0][1] = 'El Desafío en 2 minutos: Elabore su primer ejercicio';
+N[8][3][0][2] = new Array();
+
+N[8][3][0][3] = '';
+N[8][3][0][4] = 0;
+
+N[8][3][1] = new Array();
+N[8][3][1][0] = 0;
+N[8][3][1][1] = 'Índice';
+N[8][3][1][2] = new Array();
+
+N[8][3][1][3] = '';
+N[8][3][1][4] = 0;
+
+
+N[8][4] = new Array();
+
+
+N[9] = new Array();
+N[9][0] = ' Introducción a JCross (crucigramas)';
+N[9][1] = 'JCross se utiliza para realizar crucigramas. Hay dos fases en la elaboración de un ejercico de crucigrama; primero deberá introducir las letras en la cuadrícula, segundo: añadir las definiciones. Para introducir las letras en la cuadrícula, pulse en una de las casillas y escriba la letra. Pruebe a realizar el ejemplo de la figura siguiente:<br /><br /><img src="jcross1.png" alt="Elaboración de la cuadrícula de un crucigrama." title="Elaboración de la cuadrícula de un crucigrama ." width="575" height="518"></img><br /><br />Cuando haya terminado la cuadrícula, pulse en el botón <strong>Añadir pistas</strong>. Después, para añadir cada una de las definiciones de las palabras de la cuadrícula, pulse en la palabra, escriba la definición o pista y pulse el botón OK:<br /><br /><img src="jcross2.png" alt="Adding clues." title="Adding clues." width="600" height="428"></img><br /><br />A continuación se muestra un <a style="cursor: pointer; text-decoration: underline;" onclick="window.open(\'jcross1.htm\'); return false;">Ejemplo de crucigrama con JCross</a>. Para más información sobre la forma de trabajar de JCross, consulte los <strong>Archivos de Ayuda</strong> -- simplemente arranque JCross y pulse la tecla <strong>F1</strong>.<br /><br />';
+N[9][2] = new Array();
+
+N[9][3] = new Array();
+
+N[9][4] = new Array();
+
+
+N[10] = new Array();
+N[10][0] = 'The Masher (para crear unidades enlazadas a partir de diferentes ejercicios)';
+N[10][1] = 'The Masher es un tipo de aplicación diferente de las otras patatas de Hot Potatoes. Sirve para ayudarle a elaborar unidades mas complejas con sus materiales, para enlazar sus ejercicios. Para utilizar The Masher necesita una clave de registro independiente, que solamente puede conseguir si adquiere la versión comercial de Hot Potatoes. Sin dicha clave de registro, solamente podrá elaborar pequeñas unidades de ejercicios. The Masher se utiliza también para publicar archivos que no son ejercicios de Hot Potatoes en la red <a style="cursor: pointer; text-decoration: underline;" onclick="window.open(\'http://www.hotpotatoes.net\'); return false;">www.hotpotatoes.net</a>.<br /><br />The Masher tiene su propio tutorial (pulse sobre <strong>Ayuda / Tutorial</strong> en el programa The Masher, o <a href="mashertutorial.htm">pulse ahora aquí</a>), también incluye un dettalado Archivo de Ayuda. Para ver el Archivo de Ayuda, arranque el programa The Masher y pulse la tecla <strong>F1</strong>.';
+N[10][2] = new Array();
+
+N[10][3] = new Array();
+
+N[10][4] = new Array();
+
+
+N[11] = new Array();
+N[11][0] = 'Ejemplos de ejercicios';
+N[11][1] = 'Pulsando en los enlacces podrá acceder a los ejercicios en una nueva ventana (así no perderá el rumbo en este tutorial). Una vez que haya accedido a un ejercicio en su navegador, podrá moverse por todos ellos pulsando en el botón Siguiente en la parte superior del ejercicio. Al terminar de ver los ejercicios, cierre esa ventana del navegador y volverá a ver esta ventana. Posteriormente podrá empezar a realizar su primer ejercicio. <ul><li><a href="" style="cursor: pointer;" onclick="window.open(\'jquiz1.htm\'); return false;">Ejercicio sobre JQuiz</a></li><li><a href="" style="cursor: pointer;" onclick="window.open(\'jcloze1.htm\'); return false;">Ejercicio 1 sobre JCloze</a></li><li><a href="" style="cursor: pointer;" onclick="window.open(\'jcloze2.htm\'); return false;">Ejercicio 2 sobre JCloze</a></li><li><a href="" style="cursor: pointer;" onclick="window.open(\'jcross1.htm\'); return false;">Ejercicio sobre JCross</a></li><li><a href="" style="cursor: pointer;" onclick="window.open(\'jmix1.htm\'); return false;">Ejercicio 1 sobre JMix</a></li><li><a href="" style="cursor: pointer;" onclick="window.open(\'jmix2.htm\'); return false;">Ejercicio 2 sobre JMix (arrastrar y soltar)</a></li><li><a href="" style="cursor: pointer;" onclick="window.open(\'jmatch1.htm\'); return false;">Ejercicio 1 sobre JMatch</a></li><li><a href="" style="cursor: pointer;" onclick="window.open(\'jmatch2.htm\'); return false;">Ejercicio 2 sobre JMatch (arrastrar y soltar)</a></li></ul>';
+N[11][2] = new Array();
+
+N[11][3] = new Array();
+N[11][3][0] = new Array();
+N[11][3][0][0] = 12;
+N[11][3][0][1] = 'El Desafío en 2 minutos: elabore su primer ejercicio';
+N[11][3][0][2] = new Array();
+
+N[11][3][0][3] = '';
+N[11][3][0][4] = 0;
+
+
+N[11][4] = new Array();
+
+
+N[12] = new Array();
+N[12][0] = 'El Desafío en 2 minutos: elabore su primer ejercicio';
+N[12][1] = 'Ahora que ya ha visto el aspecto de todas las modalidades de ejercicios, es el momento de intentar eleborar sus propios ejercicios. Estamos deseando demostrarle que puede hacerlo en dos minutos exactos, utilizando <strong>JMix</strong>. Esto es lo que tiene que hacer:<br /><br />Arranque el programa <strong>JMix</strong>, después<br /><ol><br /> <li>Introduzca un <strong>título</strong>.</li> <li>Introduzca una <strong>frase</strong>. Parta su frase en segmentos, colocando cada segmento en una línea separada.</li> <li>Pulse sobre uno de los dos botones Web, o seleccione "Crear página web" en el menú Archivo. Existen dos formatos de salida, estádar y arrastrar y soltar. Para este ejercicio, no importa cuál se elija.</li> <li>Elija un nombre para su página Web.</li> <li>En el cuadro de dialogo que aparece, puse sobre "Ver el ejercicio en mi navegador".</li></ol><br />Cuando haya terminado, vuelva aquí para continuar con la presentación. Puede que prefiera utilizar el botón <strong>Marcador</strong> de la parte superior de esta página para crear un marcador o favorito en su navegador, así no tendrá que estar navegando para llegar a esta sección de nuevo.<br /><br /><img src="jmix1.png" alt="Cómo crear un ejercicio en JMix" width="649" height="471" title="Cómo crear un ejercicio en JMix"></img>';
+N[12][2] = new Array();
+
+N[12][3] = new Array();
+N[12][3][0] = new Array();
+N[12][3][0][0] = 13;
+N[12][3][0][1] = 'Tres pasos para elaborar un ejercicio';
+N[12][3][0][2] = new Array();
+
+N[12][3][0][3] = '';
+N[12][3][0][4] = 0;
+
+
+N[12][4] = new Array();
+
+
+N[13] = new Array();
+N[13][0] = 'Tres pasos para elaborar un ejercicio';
+N[13][1] = 'Aunque probablemente piense que con el desafío en dos minutos ya puede empezar a trabajar, necesitará saber algo más sobre la forma de trabajar de estas aplicaciones para poder sacarles el máximo partido. Esta última sección del tutorial le conducirá paso a paso a través del proceso de elaboración de un ejercicio mediante <strong>JQuiz</strong>, para presentarle algunos de los conceptos básicos con los que debe familiarizarse.<br /><br />Para elaborar un ejercicio podemos distinguir tres fases o pasos:<br /><br /><ol><li><strong>Introducción de los datos</strong> (preguntas, respuestas y todo lo demás)</li><li><strong>Configuración del formato de salida</strong> (preparación de las leyendas de los botones, instrucciones, y otras características de su página Web)</li><li><strong>Creación de las páginas Web</strong> (compilar sus ejercicios en páginas HTML).</li></ol>';
+N[13][2] = new Array();
+
+N[13][3] = new Array();
+N[13][3][0] = new Array();
+N[13][3][0][0] = 14;
+N[13][3][0][1] = 'Primera fase: Introducción de los datos';
+N[13][3][0][2] = new Array();
+
+N[13][3][0][3] = '';
+N[13][3][0][4] = 0;
+
+
+N[13][4] = new Array();
+
+
+N[14] = new Array();
+N[14][0] = 'Primera fase: Introducción de los datos';
+N[14][1] = 'En esta parte del tutorial vamos a elaborar un ejercicio de respuestas múltiples utilizando <strong>JQuiz</strong>. La primera fase consiste en introducir las preguntas y las respuestas de su ejercicio. Primero, arranque el programa <strong>JQuiz</strong>. Deberá ver un interfaz como el que se muestra en la figura siguiente. Si su interfaz aparece más complejo que este, está probablemente en la <strong>Modalidad Avanzada</strong>; en ese caso, basta con pulsar en <strong>Opciones  / Modalidad / Modalidad Principiantes</strong>.<br /><br />Observe la figura siguiente, y escriba la siguiente información:<br /><br /><ol><li>Escriba el título en la casilla de título.</li><li>Escriba la pregunta en la casilla de preguntas.</li><li>Compruebe que está seleccionado "Respuestas múltiples" en el menú desplegable a la derecha de la pregunta. Esto define el tipo de pregunta que desee realizar.</li><li>Escriba las posibles respuestas en las casillas de la izquierda, y las indicaciones en las de la derecha. Tenga en cuenta que cada una de las respuestas, correcta o incorrecta, tiene sus propias indicaciones.</li><li>Marque la casilla "Correcto" que está junto a la respuesta B.</li></ol><br /><br /><img src="jquiz1.png" alt="Interfaz de JQuiz que muestra una pregunta de respuestas múltiples." width="871" height="638" title="Interfaz de JQuiz que muestra una pregunta de respuestas múltiples."></img>';
+N[14][2] = new Array();
+
+N[14][3] = new Array();
+N[14][3][0] = new Array();
+N[14][3][0][0] = 15;
+N[14][3][0][1] = 'Segunda fase: Configuración del formato de salida';
+N[14][3][0][2] = new Array();
+
+N[14][3][0][3] = '';
+N[14][3][0][4] = 0;
+
+
+N[14][4] = new Array();
+
+
+N[15] = new Array();
+N[15][0] = 'Segunda fase: Configuración del formato de salida';
+N[15][1] = 'Cuando los programas de Hot Potatoes crean las páginas Web pages, lo hacen combinando 3 tipos de recursos:<ul><li>Los <strong>datos</strong> introducidos</li><li>La información de <strong>configuración</strong></li><li>Un conjunto de "<strong>archivos fuente</strong>", o plantillas, que contienen la estructura de la página. </li></ul>Ya hemos visto como se trabaja con los datos; el siguiente paso es la Configuración. La información de configuración esta formada por un conjunto de fragmentos de texto, incluyendo las instrucciones para realizar el ejercicio, las leyendas de los botones, los enlaces a las URLs, que no suelen variar mucho de un ejercicio a otro. Por ejemplo, algunos de los ejercicios de muestra que usted ha visto anteriormente incluyen un botón etiquetado como "Comprobar", para que el alumno pueda comprobar sus respuestas. La leyenda "Comprobar" puede que no cambie de un ejercicIo a otro, por ello no es necesario almacenarlo con los datos; sin embargo, puede que usted necesite cambiarlo (por ejemplo, si usted está creando ejercicios en otro idioma).<br /><br />En el ejemplo de ejercicio de respuestas múltiples, deberá recordar que los ejercicios tienen un título, un subtítulo, y algunas instrucciones en la parte superior de la página. El título de cada ejercicio deberá ser único, por eso forma parte de los <strong>datos</strong>. Sin embargo, el subtítulo (e.g. "Ejercicio de Respuestas Multiples") y las instrucciones ("Elija la respuesta correcta para cada pregunta") probablemente sean las mismas en los ejercicios similares, por ello son parte de la <strong>configuración</strong>. En esta segunda fase vamos a cambiar la configruación.<br /><br />Primero, pulse en <strong>Opciones / Configurar el formato del archivo originado</strong> para acceder a la ventana de configuración. La primera de las fichas, etiquetada como <strong>Títulos / Instrucciones</strong>, contiene el subtítulo del ejercicio y las instrucciones. Escriba algún texto, como en el ejemplo de la figura, después pulse sobre el botón OK.<br /><br /><img src="jquiz_config.png" alt="Ventana de configuración de JQuiz" title="Ventana de configuración de JQuiz" width="628" height="550"></img>';
+N[15][2] = new Array();
+
+N[15][3] = new Array();
+N[15][3][0] = new Array();
+N[15][3][0][0] = 16;
+N[15][3][0][1] = 'Tercera fase: Creación de las páginas Web';
+N[15][3][0][2] = new Array();
+
+N[15][3][0][3] = '';
+N[15][3][0][4] = 0;
+
+
+N[15][4] = new Array();
+
+
+N[16] = new Array();
+N[16][0] = 'Tercera fase: Creación de las páginas Web';
+N[16][1] = 'El último paso consiste en crear las páginas Web a partir de sus datos. Todo lo que necesita hacer es pulsar en <strong>Crear página web / Página web para navegadores v6</strong> en el menú Archivo, y ponerle un nombre a la página. Ponga como nombre de archivo "<strong>test.htm</strong>":<br /><br /><img src="jquiz_output.png" alt="Creando una página Web con JQuiz" title="Creando una página Web con JQuiz" width="424" height="413"></img><br /><br />El programa le informará de que ha generado un archivo, y le permitirá verlo en su navegador. Esto es todo<br />';
+N[16][2] = new Array();
+
+N[16][3] = new Array();
+N[16][3][0] = new Array();
+N[16][3][0][0] = 0;
+N[16][3][0][1] = 'Índice';
+N[16][3][0][2] = new Array();
+
+N[16][3][0][3] = '';
+N[16][3][0][4] = 0;
+
+N[16][3][1] = new Array();
+N[16][3][1][0] = 4;
+N[16][3][1][1] = 'Las Patatas, una a una';
+N[16][3][1][2] = new Array();
+
+N[16][3][1][3] = '';
+N[16][3][1][4] = 0;
+
+
+N[16][4] = new Array();
+
+
+N[17] = new Array();
+N[17][0] = 'El servidor de hotpotatoes.net';
+N[17][1] = 'Siempre que elabore un ejercicio con Hot Potatoes, verá el siguiente cuadro de dialogo:<br /><br /><img src="hotpotnet1.png" alt="Ver o publicar el ejercicio." title="Ver o publicar el ejercicio." width="455" height="264"></img><br /><br />Generalmente, usted deseará ver el ejercicio en su navegador para comprobar que funciona tal como usted espera. Sin embargo, la segunda opción le permite utilizar el servicio de publicación de páginas web de <a style="cursor: pointer; text-decoration: underline;" onclick="window.open(\'http://www.hotpotatoes.net\'); return false;">www.hotpotatoes.net</a>. Se trata de un servidor de páginas Web que puede publicar sus ejercicios de Hot Potatoes, y que le permite proteger mediante contraseña sus ejercicios; sus alumnos podrán conectarse al servidor y realizar los ejerciicos, posteriormente usted podrá revisarlos y comprobar los resultados obtenidos. Este servicio no es gratuito, pero es bastante barato, y puede probarlo creando una cuenta de demostración y publicando unos cuantos ejercicios. Para crear una cuenta demo, simplemente pulse sobre "<strong>Publicar el ejercicio en hotpotatoes.net Website</strong>", después seleccione la opción "<strong>Crear una cuenta demo para mi en hotpotatoes.net</strong>". <br /><br />Para más información sobre el servicio hotpotatoes.net, vea <a style="cursor: pointer; text-decoration: underline;" onclick="window.open(\'http://www.hotpotatoes.info\'); return false;">www.hotpotatoes.info</a>.';
+N[17][2] = new Array();
+
+N[17][3] = new Array();
+N[17][3][0] = new Array();
+N[17][3][0][0] = 0;
+N[17][3][0][1] = 'Índice';
+N[17][3][0][2] = new Array();
+
+N[17][3][0][3] = '';
+N[17][3][0][4] = 0;
+
+
+N[17][4] = new Array();
+
+
+
+
+
+
+//-->
+
+//]]>
+
+       </script>
+</head>
+<body onload="StartUp()">
+<!-- BeginTopNavButtons -->
+
+
+<div class="NavButtonBar">
+
+
+
+
+<button class="NavButton" onfocus="NavBtnOver(this)" onblur="NavBtnOut(this)"  onmouseover="NavBtnOver(this)" onmouseout="NavBtnOut(this)" onmousedown="NavBtnDown(this)" onmouseup="NavBtnOver(this)" onclick="location='tutorial.htm?___q;0;'; return false;"> 
+Índice </button>
+
+
+
+
+</div>
+
+
+<!-- EndTopNavButtons -->
+
+<div class="Titles">
+	<h2 class="ExerciseTitle">Tutorial en castellano de Hot Potatoes 6</h2>
+
+
+
+</div>
+
+<div class="DecisionPoint">
+
+
+<div class="ControlButtons">
+
+<button class="FuncButton" onfocus="FuncBtnOver(this)" onblur="FuncBtnOut(this)"  onmouseover="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)" onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOver(this)" onclick="SetBookmark()">
+Marcador</button>
+
+<button class="FuncButton" onfocus="FuncBtnOver(this)" onblur="FuncBtnOut(this)"  onmouseover="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)" onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOver(this)" onclick="Restart()">
+Volver a empezar</button>
+
+<button id="UndoButton" class="FuncButton" onfocus="FuncBtnOver(this)" onblur="FuncBtnOut(this)"  onmouseover="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)" onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOver(this)" onclick="Undo()">
+Atrás</button>
+
+</div>
+
+	<h2 id="DPTitle" class="DecisionPointTitle"></h2>
+
+<table class="DPTable"><tr>
+<td style="font-size: small; color: #000000">
+
+	<div id="DPContentsDiv" class="DecisionPointText">
+
+		<div class="Instructions">
+		Bienvenido al tutorial sobre Hot Potatoes. Este tutorial se ejecuta en su navegador Web. Pulse en el botón Comenzar para entrar en el tutorial.<BR>.<br />
+		</div>
+
+		<div class="Instructions">
+		
+		</div>
+
+	</div>
+
+	<div id="LinkListDiv" class="LinkList">
+
+		<div style="text-align: center; font-size:small; color:#000000">
+<button class="FuncButton" onfocus="FuncBtnOver(this)" onblur="FuncBtnOut(this)"  onmouseover="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)" onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOver(this)" onclick="StartExercise()">
+Comenzar</button>
+		</div>
+	</div>
+
+</td>
+<td style="font-size: small; color: #000000">
+	<div id="AssetsDiv" class="Assets">
+
+	</div>
+</td></tr></table>
+</div>
+
+
+<div class="Feedback" id="FeedbackDiv">
+<div class="FeedbackText" id="FeedbackContent"></div>
+<p>
+<button id="FeedbackOKButton" class="FuncButton" onfocus="FuncBtnOver(this)" onblur="FuncBtnOut(this)" onmouseover="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)" onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOver(this)" onclick="HideFeedback(); return false;">&nbsp;OK&nbsp;</button>
+</div>
+
+<!-- BeginBottomNavButtons -->
+
+
+<!-- <div class="NavButtonBar" id="BottomNavBar">
+
+
+
+
+<button class="NavButton" onfocus="NavBtnOver(this)" onblur="NavBtnOut(this)"  onmouseover="NavBtnOver(this)" onmouseout="NavBtnOut(this)" onmousedown="NavBtnDown(this)" onmouseup="NavBtnOver(this)" onclick="location='tutorial.htm?___q;0;'; return false;"> Index </button>
+
+
+
+
+</div> -->
+
+
+<!-- EndBottomNavButtons -->
+
+<!-- BeginSubmissionForm -->
+
+<!-- EndSubmissionForm -->
+
+
+</body>
+</html>
Index: /trunk/max-javahotpot-tutorial/tutorial/jcloze1.htm
===================================================================
--- /trunk/max-javahotpot-tutorial/tutorial/jcloze1.htm (revision 35)
+++ /trunk/max-javahotpot-tutorial/tutorial/jcloze1.htm (revision 35)
@@ -0,0 +1,1453 @@
+<?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 Ismail Ali Gago."></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="Ismail Ali Gago" />
+<meta name="DC:Creator" content="UNREGISTERED" />
+<meta name="DC:Title" content="Ejercicio de completar huecos realizado con JCloze" />
+
+
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
+
+<title>
+Ejercicio de completar huecos realizado con JCloze
+</title>
+
+<!-- Made with executable version 6.0 Release 2 Build 0 -->
+
+<!-- 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. */
+
+
+body{
+	font-family: Geneva,Arial;
+	background-color: #ffffff;
+	color: #000000;
+ 
+	margin-right: 5%;
+	margin-left: 5%;
+	font-size: small;
+}
+
+p{
+	text-align: left;
+	margin: 0px;
+	font-size: small;
+}
+
+div, span, td{
+	font-size: small;
+	color: #000000;
+}
+
+.RTLText{
+	text-align: right;
+	font-size: 150%;
+	direction: rtl;
+	font-family: "Simplified Arabic", "Traditional Arabic", "Times New Roman", Geneva,Arial; 
+}
+
+.CentredRTLText{
+	text-align: center;
+	font-size: 150%;
+	direction: rtl;
+	font-family: "Simplified Arabic", "Traditional Arabic", "Times New Roman", Geneva,Arial; 
+}
+
+button p.RTLText{
+	text-align: center;
+}
+
+.RTLGapBox{
+	text-align: right;
+	font-size: 150%;
+	direction: rtl;
+	font-family: "Times New Roman", Geneva,Arial;
+}
+
+.Guess{
+	font-weight: bold;
+}
+
+.CorrectAnswer{
+	font-weight: bold;
+}
+
+div.Titles{
+	padding: 10px;
+	text-align: center;
+	color: #003300;
+}
+
+button{
+	display: inline;
+}
+
+.ExerciseTitle{
+	font-size: large;
+	color: #003300;
+}
+
+.ExerciseSubtitle{
+	color: #003300;
+}
+
+div#Timer{
+	padding: 6px;
+	margin-left: auto;
+	margin-right: auto;
+	text-align: center;
+}
+
+span#TimerText{
+	padding: 6px;
+	border-width: 1px;
+	border-style: solid;
+	font-weight: bold;
+	display: none;
+}
+
+span.Instructions{
+
+}
+
+div.ExerciseText{
+
+}
+
+.FeedbackText{
+	color: #003300;
+}
+
+span.LeftItem{
+	font-size: small;
+	color: #000000;
+}
+
+span.RightItem{
+	font-weight: bold;
+	font-size: small;
+	color: #000000;
+}
+
+span.CorrectMark{
+
+}
+
+div.Feedback {
+	background-color: #ffffff;
+	left: 33%;
+	width: 34%;
+	top: 33%;
+	z-index: 1;
+	border-style: solid;
+	border-width: 1px;
+	padding: 5px;
+	text-align: center;
+	color: #003300;
+	position: absolute;
+	display: none;
+	font-size: small;
+}
+
+
+
+
+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;
+	align: center;
+	padding: 0px;
+}
+
+table.FlashcardTable tr{
+	border-style: none;
+	margin: 0px;
+	padding: 0px;
+	background-color: #aaddaa;
+}
+
+table.FlashcardTable td.Showing{
+	font-size: large;
+	text-align: center;
+	width: 50%;
+	display: table-cell;
+	padding: 2em;
+	margin: 0px;
+	border-style: solid;
+	border-width: 1px;
+	color: #000000;
+	background-color: #aaddaa;
+}
+
+table.FlashcardTable td.Hidden{
+	display: none;
+}
+
+/* JMix styles */
+div#SegmentDiv{
+	margin-top: 2em;
+	margin-bottom: 2em;
+	text-align: center;
+}
+
+a.ExSegment{
+	font-size: medium;
+	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: #003300;
+	width: 80%;
+}
+
+/* JCloze styles */
+
+input{
+	font-family: Geneva,Arial;
+	font-size: larger;
+}
+
+.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;
+}
+
+table.CrosswordGrid td{
+	width: 1.5em;
+	height: 1.5em;
+	text-align: center;
+	vertical-align: middle;
+	font-size: large;
+	padding: 0px;
+	margin: 0px;
+	border-style: solid;
+	border-width: 1px;
+	border-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;
+}
+
+.GridNum{
+	vertical-align: super;
+	font-size: x-small;
+	font-weight: bold;
+	text-decoration: none;
+	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;
+}
+
+div.Keypad button{
+	font-family: Geneva,Arial;
+	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;
+	font-size: larger;
+}
+
+.QuestionText{
+
+}
+
+.Answer{
+	font-size: 120%;
+	letter-spacing: 0.1em;
+}
+
+.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;
+}
+
+div.StdDiv{
+	background-color: #aaddaa;
+	text-align: center;
+	font-size: small;
+	color: #000000;
+	padding: 8px;
+	border-style: solid;
+	border-width: 1px 1px 1px 1px;
+	border-color: #000000;
+	margin: 1px;
+}
+
+.FuncButton {
+	text-align: center;
+	border-style: solid;
+
+	border-left-color: #d4eed4;
+	border-top-color: #d4eed4;
+	border-right-color: #556e55;
+	border-bottom-color: #556e55;
+	color: #000000;
+	background-color: #aaddaa;
+
+	border-width: 2px;
+	padding: 3px 6px 3px 6px;
+	cursor: pointer;
+}
+
+.FuncButtonUp {
+	color: #aaddaa;
+	text-align: center;
+	border-style: solid;
+
+	border-left-color: #d4eed4;
+	border-top-color: #d4eed4;
+	border-right-color: #556e55;
+	border-bottom-color: #556e55;
+
+	background-color: #000000;
+	color: #aaddaa;
+	border-width: 2px;
+	padding: 3px 6px 3px 6px;
+	cursor: pointer;
+}
+
+.FuncButtonDown {
+	color: #aaddaa;
+	text-align: center;
+	border-style: solid;
+
+	border-left-color: #556e55;
+	border-top-color: #556e55;
+	border-right-color: #d4eed4;
+	border-bottom-color: #d4eed4;
+	background-color: #000000;
+	color: #aaddaa;
+
+	border-width: 2px;
+	padding: 3px 6px 3px 6px;
+	cursor: pointer;
+}
+
+/*BeginNavBarStyle*/
+
+div.NavButtonBar{
+	background-color: #006600;
+	text-align: center;
+	margin: 2px 0px 2px 0px;
+	clear: both;
+	font-size: small;
+}
+
+.NavButton {
+	border-style: solid;
+	
+	border-left-color: #7fb27f;
+	border-top-color: #7fb27f;
+	border-right-color: #003300;
+	border-bottom-color: #003300;
+	background-color: #006600;
+	color: #ffffff;
+
+	border-width: 2px;
+	cursor: pointer;	
+}
+
+.NavButtonUp {
+	border-style: solid;
+
+	border-left-color: #7fb27f;
+	border-top-color: #7fb27f;
+	border-right-color: #003300;
+	border-bottom-color: #003300;
+	color: #006600;
+	background-color: #ffffff;
+
+	border-width: 2px;
+	cursor: pointer;	
+}
+
+.NavButtonDown {
+	border-style: solid;
+
+	border-left-color: #003300;
+	border-top-color: #003300;
+	border-right-color: #7fb27f;
+	border-bottom-color: #7fb27f;
+	color: #006600;
+	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;
+	font-size: small;
+	padding: 5px;
+	border-style: solid;
+	border-width: 1px;
+	color: #000000;
+	background-color: #aaddaa;
+	left: -50px;
+	top: -50px;
+	overflow: visible;
+}
+
+.rtl{
+	text-align: right;
+	font-size: large;
+}
+
+
+       </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';
+//IE can't focus a hidden div; Moz needs to focus before display to avoid jumping
+	if (C.gecko){
+		document.getElementById('FeedbackOKButton').focus();
+	}
+	FDiv.style.display = 'block';
+
+	ShowElements(false, 'input');
+	ShowElements(false, 'select');
+	ShowElements(false, 'object');
+	if (C.ie){
+		document.getElementById('FeedbackOKButton').focus();
+	}
+	
+//
+}
+
+function ShowElements(Show, TagName){
+//Special for IE bug -- hide all the form elements that will show through the popup
+	if (C.ie){
+		var Els = document.getElementsByTagName(TagName);
+		for (var i=0; i<Els.length; i++){
+			if (Show == true){
+				Els[i].style.display = 'inline';
+			}
+			else{
+				Els[i].style.display = 'none';
+			}
+		}
+	} 
+}
+
+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 (document.documentElement && document.documentElement.scrollTop){
+		return document.documentElement.scrollTop;
+	}
+	else{
+		if (document.body){
+ 			return document.body.scrollTop;
+		}
+		else{
+			return window.pageYOffset;
+		}
+	}
+}
+
+function GetViewportHeight(){
+	if (window.innerWidth){
+		return window.innerWidth;
+	}
+	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{
+	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){
+	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; k++) {
+			Temp[k] = Temp[k+1];
+		}
+		j--;
+	}
+	return InArray;
+}
+
+function WriteToInstructions(Feedback) {
+//	Feedback = '<span class="FeedbackText">' + Feedback + '</span>';
+	document.getElementById('InstructionsDiv').innerHTML = Feedback;
+
+}
+
+
+
+
+function EscapeDoubleQuotes(InString){
+	return InString.replace(/"/g, '&quot;')
+}
+
+function FocusAButton(){
+	if (document.getElementById('CheckButton1') != null){
+		document.getElementById('CheckButton1').focus();
+	}
+	else{
+		document.getElementsByTagName('button')[0].focus();
+	}
+}
+
+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].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){
+		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();
+	}
+}
+
+
+
+//JCLOZE CORE JAVASCRIPT CODE
+
+function ItemState(){
+	this.ClueGiven = false;
+	this.HintsAndChecks = 0;
+	this.MatchedAnswerLength = 0;
+	this.ItemScore = 0;
+	this.AnsweredCorrectly = false;
+	this.Guesses = new Array();
+	return this;
+}
+
+var Feedback = '';
+var Correct = 'Correcto';
+var Incorrect = 'Algunas de sus respuestas no son correctas. Las respuestas incorrectas se han dejado en su sitio para que las corrija.'; 
+var GiveHint = 'La siguiente letra correcta ha sido a&#x00F1;adida a la respuesta.';
+var CaseSensitive = false;
+var YourScoreIs = 'Su puntuaci&#x00F3;n es';
+var Finished = false;
+var Locked = false;
+var Score = 0;
+var CurrentWord = 0;
+var Guesses = '';
+
+I = new Array();
+
+I[0] = new Array();
+I[0][1] = new Array();
+I[0][1][0] = new Array();
+I[0][1][0][0] = '\u004A\u0043\u006C\u006F\u007A\u0065';
+I[0][2]='\u0045\u006C\u0020\u006E\u006F\u006D\u0062\u0072\u0065\u0020\u0064\u0065\u006C\u0020\u0070\u0072\u006F\u0067\u0072\u0061\u006D\u0061\u0020\u0075\u0074\u0069\u006C\u0069\u007A\u0061\u0064\u006F\u0020\u0070\u0061\u0072\u0061\u0020\u0068\u0061\u0063\u0065\u0072\u0020\u0065\u0073\u0074\u0065\u0020\u0065\u006A\u0065\u0072\u0063\u0069\u0063\u0069\u006F';
+
+I[1] = new Array();
+I[1][1] = new Array();
+I[1][1][0] = new Array();
+I[1][1][0][0] = '\u0062\u006F\u0074\u00F3\u006E';
+I[1][2]='\u0041\u006C\u0067\u006F\u0020\u0073\u006F\u0062\u0072\u0065\u0020\u006C\u006F\u0020\u0071\u0075\u0065\u0020\u0073\u0065\u0020\u0070\u0075\u006C\u0073\u0061\u0020\u0070\u0061\u0072\u0061\u0020\u0071\u0075\u0065\u0020\u006F\u0063\u0075\u0072\u0072\u0061\u0020\u0061\u006C\u0067\u006F\u0020\u0065\u006E\u0020\u0075\u006E\u0020\u0070\u0072\u006F\u0067\u0072\u0061\u006D\u0061\u0020\u0064\u0065\u0020\u006F\u0072\u0064\u0065\u006E\u0061\u0064\u006F\u0072';
+
+I[2] = new Array();
+I[2][1] = new Array();
+I[2][1][0] = new Array();
+I[2][1][0][0] = '\u0063\u006F\u0072\u0072\u0065\u0063\u0074\u0061\u0073';
+I[2][2]='';
+
+I[3] = new Array();
+I[3][1] = new Array();
+I[3][1][0] = new Array();
+I[3][1][0][0] = '\u0068\u0075\u0065\u0063\u006F';
+I[3][2]='';
+
+I[4] = new Array();
+I[4][1] = new Array();
+I[4][1][0] = new Array();
+I[4][1][0][0] = '\u0076\u0065\u0072\u00E1';
+I[4][2]='';
+
+I[5] = new Array();
+I[5][1] = new Array();
+I[5][1][0] = new Array();
+I[5][1][0][0] = '\u0070\u0075\u006C\u0073\u0061\u0072';
+I[5][2]='';
+
+I[6] = new Array();
+I[6][1] = new Array();
+I[6][1][0] = new Array();
+I[6][1][0][0] = '\u0061\u006C\u0075\u006D\u006E\u006F\u0073';
+I[6][2]='\u004C\u0061\u0073\u0020\u0070\u0065\u0072\u0073\u006F\u006E\u0061\u0073\u0020\u0061\u0020\u006C\u0061\u0073\u0020\u0071\u0075\u0065\u0020\u0065\u006E\u0073\u0065\u00F1\u0061\u002E';
+
+I[7] = new Array();
+I[7][1] = new Array();
+I[7][1][0] = new Array();
+I[7][1][0][0] = '\u0064\u0065\u0073\u0063\u0072\u0069\u0070\u0063\u0069\u006F\u006E\u0065\u0073';
+I[7][2]='\u0049\u006E\u0066\u006F\u0072\u006D\u0061\u0063\u0069\u00F3\u006E\u0020\u0071\u0075\u0065\u0020\u006C\u0065\u0020\u0061\u0079\u0075\u0064\u0061\u0072\u00E1\u0020\u0061\u0020\u0064\u0065\u0073\u0063\u0075\u0062\u0072\u0069\u0072\u0020\u006C\u0061\u0020\u0070\u0061\u006C\u0061\u0062\u0072\u0061';
+
+I[8] = new Array();
+I[8][1] = new Array();
+I[8][1][0] = new Array();
+I[8][1][0][0] = '\u006D\u0069\u006E\u00FA\u0073\u0063\u0075\u006C\u0061\u0073';
+I[8][2]='';
+
+
+State = new Array();
+
+function StartUp(){
+	RemoveBottomNavBarForIE();
+
+
+
+
+
+	var i = 0;
+
+	State.length = 0;
+	for (i=0; i<I.length; i++){
+		State[i] = new ItemState();
+	}
+
+
+}
+
+function ShowClue(ItemNum){
+	if (Locked == true){return;}
+	State[ItemNum].ClueGiven = true;
+	ShowMessage(I[ItemNum][2]);
+}
+
+function SaveCurrentAnswers(){
+	var Ans = ''
+	for (var i=0; i<I.length; i++){
+		Ans = GetGapValue(i);
+		if ((Ans.length > 0)&&(Ans != State[i].Guesses[State[i].Guesses.length-1])){
+			State[i].Guesses[State[i].Guesses.length] = Ans;
+		}
+	}
+}
+
+function CompileGuesses(){
+	var F = document.getElementById('store');
+	if (F != null){
+		var Temp = '<?xml version="1.0"?><hpnetresult><fields>';
+		var GapLabel = '';
+		for (var i=0; i<State.length; i++){
+			GapLabel = 'Gap ' + (i+1).toString();
+			Temp += '<field><fieldname>' + GapLabel + '</fieldname>';
+			Temp += '<fieldtype>student-responses</fieldtype><fieldlabel>' + GapLabel + '</fieldlabel>';
+			Temp += '<fieldlabelid>JClozeStudentResponses</fieldlabelid><fielddata>';
+			for (var j=0; j<State[i].Guesses.length; j++){
+				if (j>0){Temp += '| ';}
+				Temp += State[i].Guesses[j] + ' ';	
+			}	
+  		Temp += '</fielddata></field>';
+		}
+		Temp += '</fields></hpnetresult>';
+		F.detail.value = Temp;
+	}
+}
+
+function CheckAnswers(){
+	if (Locked == true){return;}
+	SaveCurrentAnswers();
+	var AllCorrect = true;
+
+//Check each answer
+	for (var i = 0; i<I.length; i++){
+
+		if (State[i].AnsweredCorrectly == false){
+//If it's right, calculate its score
+			if (CheckAnswer(i, true) > -1){
+				var TotalChars = GetGapValue(i).length;
+				State[i].ItemScore = (TotalChars-State[i].HintsAndChecks)/TotalChars;
+				if (State[i].ClueGiven == true){State[i].ItemScore /= 2;}
+				if (State[i].ItemScore <0 ){State[i].ItemScore = 0;}
+				State[i].AnsweredCorrectly = true;
+//Drop the correct answer into the page, replacing the text box
+				SetCorrectAnswer(i, GetGapValue(i));
+			}
+			else{
+//Otherwise, increment the hints for this item, as a penalty
+				State[i].HintsAndChecks++;
+
+//then set the flag
+				AllCorrect = false;
+			}
+		}
+	}
+
+//Calculate the total score
+	var TotalScore = 0;
+	for (i=0; i<State.length; i++){
+		TotalScore += State[i].ItemScore;
+	}
+	TotalScore = Math.floor((TotalScore * 100)/I.length);
+
+//Compile the output
+	Output = '';
+
+	if (AllCorrect == true){
+		Output = Correct + '<br />';
+	}
+
+	Output += YourScoreIs + ' ' + TotalScore + '%.<br />';
+	if (AllCorrect == false){
+		Output += '<br />' + Incorrect;
+	}
+	ShowMessage(Output);
+	setTimeout('WriteToInstructions(Output)', 50);
+	
+	Score = TotalScore;
+	CompileGuesses();
+	
+	if (AllCorrect==true){
+
+
+
+		Finished = true;
+		setTimeout('Finish()', SubmissionTimeout);
+	}
+}
+
+function TrackFocus(BoxNumber){
+	CurrentWord = BoxNumber;
+	InTextBox = true;
+}
+
+function LeaveGap(){
+	InTextBox = false;
+}
+
+function CheckBeginning(Guess, Answer){
+	var OutString = '';
+	var i = 0;
+	var UpperGuess = '';
+	var UpperAnswer = '';
+
+	if (CaseSensitive == false) {
+		UpperGuess = Guess.toUpperCase();
+		UpperAnswer = Answer.toUpperCase();
+	}
+	else {
+		UpperGuess = Guess;
+		UpperAnswer = Answer;
+	}
+
+	while (UpperGuess.charAt(i) == UpperAnswer.charAt(i)) {
+		OutString += Guess.charAt(i);
+		i++;
+	}
+	OutString += Answer.charAt(i);
+	return OutString;
+}
+
+function GetGapValue(GNum){
+	var RetVal = '';
+	if ((GNum<0)||(GNum>=I.length)){return RetVal;}
+	if (document.getElementById('Gap' + GNum) != null){
+		RetVal = document.getElementById('Gap' + GNum).value;
+		RetVal = TrimString(RetVal);
+	}
+	else{
+		RetVal = State[GNum].Guesses[State[GNum].Guesses.length-1];
+	}
+	return RetVal;
+}
+
+function SetGapValue(GNum, Val){
+	if ((GNum<0)||(GNum>=I.length)){return;}
+	if (document.getElementById('Gap' + GNum) != null){
+		document.getElementById('Gap' + GNum).value = Val;
+		document.getElementById('Gap' + GNum).focus();
+	}
+}
+
+function SetCorrectAnswer(GNum, Val){
+	if ((GNum<0)||(GNum>=I.length)){return;}
+	if (document.getElementById('GapSpan' + GNum) != null){
+		document.getElementById('GapSpan' + GNum).innerHTML = Val;
+	}
+}
+
+function FindCurrent() {
+	var x = 0;
+	FoundCurrent = -1;
+
+//Test the current word:
+//If its state is not set to already correct, check the word.
+	if (State[CurrentWord].AnsweredCorrectly == false){
+		if (CheckAnswer(CurrentWord, false) < 0){
+			return CurrentWord;
+		}
+	}
+	
+	x=CurrentWord + 1;
+	while (x<I.length){
+		if (State[x].AnsweredCorrectly == false){
+			if (CheckAnswer(x, false) < 0){
+				return x;
+			}
+		}
+	x++;	
+	}
+
+	x = 0;
+	while (x<CurrentWord){
+		if (State[x].AnsweredCorrectly == false){
+			if (CheckAnswer(x, false) < 0){
+				return x;
+			}
+		}
+	x++;	
+	}
+	return FoundCurrent;
+}
+
+function CheckAnswer(GapNum, MarkAnswer){
+	var Guess = GetGapValue(GapNum);
+	var UpperGuess = '';
+	var UpperAnswer = '';
+	if (CaseSensitive == false){
+		UpperGuess = Guess.toUpperCase();
+	}
+	else{
+		UpperGuess = Guess;
+	}
+	var Match = -1;
+	for (var i = 0; i<I[GapNum][1].length; i++){
+		if (CaseSensitive == false){
+			UpperAnswer = I[GapNum][1][i][0].toUpperCase();
+		}
+		else{
+			UpperAnswer = I[GapNum][1][i][0];
+		}
+		if (TrimString(UpperGuess) == UpperAnswer){
+			Match = i;
+			if (MarkAnswer == true){
+				State[GapNum].AnsweredCorrectly = true;
+			}
+		}
+	}
+	return Match;
+}
+
+function GetHint(GapNum){
+	Guess = GetGapValue(GapNum);
+
+	if (CheckAnswer(GapNum, false) > -1){return ''}
+	RightBits = new Array();
+	for (var i=0; i<I[GapNum][1].length; i++){
+		RightBits[i] = CheckBeginning(Guess, I[GapNum][1][i][0]);
+	}
+	var RightOne = FindLongest(RightBits);
+	var Result = I[GapNum][1][RightOne][0].substring(0,RightBits[RightOne].length);
+//Add another char if the last one is a space
+	if (Result.charAt(Result.length-1) == ' '){
+		Result = I[GapNum][1][RightOne][0].substring(0,RightBits[RightOne].length+1);
+	}
+	return Result;
+}
+
+function ShowHint(){
+	if (Locked == true){return;}
+	var CurrGap = FindCurrent();
+	if (CurrGap < 0){return;}
+
+	var HintString = GetHint(CurrGap);
+
+	if (HintString.length > 0){
+		SetGapValue(CurrGap, HintString);
+		State[CurrGap][1] = State[CurrGap][1] + 1;
+	}
+	ShowMessage(GiveHint);
+}
+
+function TypeChars(Chars){
+	var CurrGap = FindCurrent();
+	if (CurrGap < 0){return;}
+	SetGapValue(CurrGap, GetGapValue(CurrGap) + Chars);
+}
+
+
+
+
+
+
+
+
+//-->
+
+//]]>
+
+       </script>
+
+
+</head>
+
+<body onload="StartUp()" id="TheBody">
+
+<!-- BeginTopNavButtons -->
+
+
+<div class="NavButtonBar" id="TopNavBar">
+
+
+
+
+
+
+<button class="NavButton" onfocus="NavBtnOver(this)" onblur="NavBtnOut(this)" onmouseover="NavBtnOver(this)" onmouseout="NavBtnOut(this)" onmousedown="NavBtnDown(this)" onmouseup="NavBtnOut(this)" onclick="location='jcloze2.htm'; return false;">Siguiente ejemplo</button>
+
+
+</div>
+
+
+
+<!-- EndTopNavButtons -->
+
+<div class="Titles">
+	<h2 class="ExerciseTitle">Ejercicio de completar huecos realizado con JCloze</h2>
+	<h3 class="ExerciseSubtitle">Ejercicios de completar huecos</h3>
+
+
+</div>
+
+<div id="InstructionsDiv" class="StdDiv">
+	<p id="Instructions">Complete los huecos, despu&#x00E9;s pulse "Comprobar" para revisar sus respuestas. Utilice el bot&#x00F3;n "Pista" para averiguar una letra de la palabra si es que la palabra le resulta complicada. Tambi&#x00E9;n puede pulsar en el bot&#x00F3;n "[?]" para ver una descripci&#x00F3;n de la palabra. &#x00A1;Tenga en cuenta que perder&#x00E1; puntos si solicita pistas o descripciones!</p>
+</div>
+
+
+
+
+
+<div id="MainDiv" class="StdDiv">
+
+<!-- These top buttons hidden; reveal if required -->
+<!--
+<button id="CheckButton1" class="FuncButton" onmouseover="FuncBtnOver(this)" onfocus="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)" onblur="FuncBtnOut(this)" onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)" onclick="CheckAnswers()">&nbsp;Comprobar&nbsp;</button>
+
+
+<button class="FuncButton" onmouseover="FuncBtnOver(this)" onfocus="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)" onblur="FuncBtnOut(this)" onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)" onclick="ShowHint()">&nbsp;Pista&nbsp;</button>
+
+
+ -->
+ 
+<div id="ClozeDiv">
+<form id="Cloze" method="post" action="" onsubmit="return false;">
+<div class="ClozeBody">
+Este es un ejercicio sencillo para completar huecos realizado con el programa <span class="GapSpan" id="GapSpan0"><input type="text" id="Gap0" onfocus="TrackFocus(0)" onblur="LeaveGap()" class="GapBox" size="6"></input><button style="line-height: 1.0" class="FuncButton"onfocus="FuncBtnOver(this)" onmouseover="FuncBtnOver(this)"onblur="FuncBtnOut(this)" onmouseout="FuncBtnOut(this)"onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)"onclick="ShowClue(0)">[?]</button></span>. El usuario introduce sus respuestas en los huecos, despu&#x00E9;s pulsa el <span class="GapSpan" id="GapSpan1"><input type="text" id="Gap1" onfocus="TrackFocus(1)" onblur="LeaveGap()" class="GapBox" size="6"></input><button style="line-height: 1.0" class="FuncButton"onfocus="FuncBtnOver(this)" onmouseover="FuncBtnOver(this)"onblur="FuncBtnOut(this)" onmouseout="FuncBtnOut(this)"onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)"onclick="ShowClue(1)">[?]</button></span> "Comprobar" para observar las respuestas correctas, y para obtener la puntuaci&#x00F3;n. Para cada hueco, se puede establecer cualquier n&#x00FA;mero de respuestas <span class="GapSpan" id="GapSpan2"><input type="text" id="Gap2" onfocus="TrackFocus(2)" onblur="LeaveGap()" class="GapBox" size="9"></input></span>. Por ejemplo, este <span class="GapSpan" id="GapSpan3"><input type="text" id="Gap3" onfocus="TrackFocus(3)" onblur="LeaveGap()" class="GapBox" size="6"></input></span> permite las respuestas "hueco", "espacio", "blanco" y "ranura". Pruebe con alguna de ellas y <span class="GapSpan" id="GapSpan4"><input type="text" id="Gap4" onfocus="TrackFocus(4)" onblur="LeaveGap()" class="GapBox" size="6"></input></span>. Si el usuario necesita ayuda, podr&#x00E1; <span class="GapSpan" id="GapSpan5"><input type="text" id="Gap5" onfocus="TrackFocus(5)" onblur="LeaveGap()" class="GapBox" size="6"></input></span> en el bot&#x00F3;n "Pista" para obtener una letra de la palabra. Para ver una de las letras de la palabra en alguno de los huecos, sit&#x00FA;e el cursor en el hueco deseado antes de presionar en el bot&#x00F3;n "Pista". El bot&#x00F3;n "Pista" es opcional -- si desea que los ejercicios resulten m&#x00E1;s dif&#x00ED;ciles para sus <span class="GapSpan" id="GapSpan6"><input type="text" id="Gap6" onfocus="TrackFocus(6)" onblur="LeaveGap()" class="GapBox" size="7"></input><button style="line-height: 1.0" class="FuncButton"onfocus="FuncBtnOver(this)" onmouseover="FuncBtnOver(this)"onblur="FuncBtnOut(this)" onmouseout="FuncBtnOut(this)"onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)"onclick="ShowClue(6)">[?]</button></span>, no incluya este bot&#x00F3;n. Tambi&#x00E9;n puede incluir, si lo desea <span class="GapSpan" id="GapSpan7"><input type="text" id="Gap7" onfocus="TrackFocus(7)" onblur="LeaveGap()" class="GapBox" size="13"></input><button style="line-height: 1.0" class="FuncButton"onfocus="FuncBtnOver(this)" onmouseover="FuncBtnOver(this)"onblur="FuncBtnOut(this)" onmouseout="FuncBtnOut(this)"onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)"onclick="ShowClue(7)">[?]</button></span> concretas para cada hueco. Por &#x00FA;ltimo, puede hacer que la respuesta se de como correcta o err&#x00F3;nea dependiendo de que se escriba en may&#x00FA;sculas o en min&#x00FA;sculas. En este ejercicio da lo mismo que se escriban las respuestas en may&#x00FA;sculas o en <span class="GapSpan" id="GapSpan8"><input type="text" id="Gap8" onfocus="TrackFocus(8)" onblur="LeaveGap()" class="GapBox" size="10"></input></span>.
+</div>
+</form>
+</div>
+
+
+<div class="Keypad">
+&nbsp;</div>
+
+
+<button id="CheckButton2" class="FuncButton" onmouseover="FuncBtnOver(this)" onfocus="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)" onblur="FuncBtnOut(this)" onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)" onclick="CheckAnswers()">&nbsp;Comprobar&nbsp;</button>
+
+
+<button class="FuncButton" onmouseover="FuncBtnOver(this)" onfocus="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)" onblur="FuncBtnOut(this)" onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)" onclick="ShowHint()">&nbsp;Pista&nbsp;</button>
+
+
+</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;">&nbsp;OK&nbsp;</button>
+</div>
+
+<!-- BeginBottomNavButtons -->
+
+
+<div class="NavButtonBar" id="BottomNavBar">
+
+
+
+
+
+
+<button class="NavButton" onfocus="NavBtnOver(this)" onblur="NavBtnOut(this)" onmouseover="NavBtnOver(this)" onmouseout="NavBtnOut(this)" onmousedown="NavBtnDown(this)" onmouseup="NavBtnOut(this)" onclick="location='jcloze2.htm'; return false;">Siguiente ejemplo</button>
+
+
+</div>
+
+
+
+<!-- EndBottomNavButtons -->
+
+<!-- BeginSubmissionForm -->
+
+<!-- EndSubmissionForm -->
+
+</body>
+
+</html>
Index: /trunk/max-javahotpot-tutorial/tutorial/jcloze2.htm
===================================================================
--- /trunk/max-javahotpot-tutorial/tutorial/jcloze2.htm (revision 35)
+++ /trunk/max-javahotpot-tutorial/tutorial/jcloze2.htm (revision 35)
@@ -0,0 +1,1426 @@
+<?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 Ismail Ali Gago."></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="Ismail Ali Gago" />
+<meta name="DC:Creator" content="UNREGISTERED" />
+<meta name="DC:Title" content="Ejercicio de rellenar huecos con preguntas individuales" />
+
+
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
+
+<title>
+Ejercicio de rellenar huecos con preguntas individuales
+</title>
+
+<!-- Made with executable version 6.0 Release 2 Build 0 -->
+
+<!-- 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. */
+
+
+body{
+	font-family: Geneva,Arial;
+	background-color: #FFFFFF;
+	color: #000000;
+ 
+	margin-right: 5%;
+	margin-left: 5%;
+	font-size: small;
+}
+
+p{
+	text-align: left;
+	margin: 0px;
+	font-size: small;
+}
+
+div,span,td{
+	font-size: small;
+	color: #000000;
+}
+
+.RTLText{
+	text-align: right;
+	font-size: 150%;
+	direction: rtl;
+	font-family: "Simplified Arabic", "Traditional Arabic", "Times New Roman", Geneva,Arial; 
+}
+
+.CentredRTLText{
+	text-align: center;
+	font-size: 150%;
+	direction: rtl;
+	font-family: "Simplified Arabic", "Traditional Arabic", "Times New Roman", Geneva,Arial; 
+}
+
+button p.RTLText{
+	text-align: center;
+}
+
+.RTLGapBox{
+	text-align: right;
+	font-size: 150%;
+	direction: rtl;
+	font-family: "Times New Roman", Geneva,Arial;
+}
+
+.Guess{
+	font-weight: bold;
+}
+
+.CorrectAnswer{
+	font-weight: bold;
+}
+
+div.Titles{
+	padding: 10px;
+	text-align: center;
+	color: #330000;
+}
+
+button{
+	display: inline;
+}
+
+.ExerciseTitle{
+	font-size: large;
+	color: #330000;
+}
+
+.ExerciseSubtitle{
+	color: #330000;
+}
+
+div#Timer{
+	padding: 6px;
+	margin-left: auto;
+	margin-right: auto;
+	text-align: center;
+}
+
+span#TimerText{
+	padding: 6px;
+	border-width: 1px;
+	border-style: solid;
+	font-weight: bold;
+	display: none;
+}
+
+span.Instructions{
+
+}
+
+div.ExerciseText{
+
+}
+
+.FeedbackText{
+	color: #330000;
+}
+
+span.LeftItem{
+	font-size: small;
+	color: #000000;
+}
+
+span.RightItem{
+	font-weight: bold;
+	font-size: small;
+	color: #000000;
+}
+
+span.CorrectMark{
+
+}
+
+div.Feedback {
+	background-color: #FFFFFF;
+	left: 33%;
+	width: 34%;
+	top: 33%;
+	z-index: 1;
+	border-style: solid;
+	border-width: 1px;
+	padding: 5px;
+	text-align: center;
+	color: #330000;
+	position: absolute;
+	display: none;
+	font-size: small;
+}
+
+
+
+
+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;
+	align: center;
+	padding: 0px;
+}
+
+table.FlashcardTable tr{
+	border-style: none;
+	margin: 0px;
+	padding: 0px;
+	background-color: #DDAAAA;
+}
+
+table.FlashcardTable td.Showing{
+	font-size: large;
+	text-align: center;
+	width: 50%;
+	display: table-cell;
+	padding: 2em;
+	margin: 0px;
+	border-style: solid;
+	border-width: 1px;
+	color: #000000;
+	background-color: #DDAAAA;
+}
+
+table.FlashcardTable td.Hidden{
+	display: none;
+}
+
+/* JMix styles */
+div#SegmentDiv{
+	margin-top: 2em;
+	margin-bottom: 2em;
+	text-align: center;
+}
+
+a.ExSegment{
+	font-size: medium;
+	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: #330000;
+	width: 80%;
+}
+
+/* JCloze styles */
+
+input{
+	font-family: Geneva,Arial;
+	font-size: larger;
+}
+
+.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;
+}
+
+table.CrosswordGrid td{
+	width: 1.5em;
+	height: 1.5em;
+	text-align: center;
+	vertical-align: middle;
+	font-size: large;
+	padding: 0px;
+	margin: 0px;
+	border-style: solid;
+	border-width: 1px;
+	border-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;
+}
+
+.GridNum{
+	vertical-align: super;
+	font-size: x-small;
+	font-weight: bold;
+	text-decoration: none;
+	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;
+}
+
+div.Keypad button{
+	font-family: Geneva,Arial;
+	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;
+	font-size: larger;
+}
+
+.QuestionText{
+
+}
+
+.Answer{
+	font-size: 120%;
+	letter-spacing: 0.1em;
+}
+
+.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;
+}
+
+div.StdDiv{
+	background-color: #DDAAAA;
+	text-align: center;
+	font-size: small;
+	color: #000000;
+	padding: 8px;
+	border-style: solid;
+	border-width: 1px 1px 1px 1px;
+	border-color: #000000;
+	margin: 1px;
+}
+
+.FuncButton {
+	text-align: center;
+	border-style: solid;
+
+	border-left-color: #eed4d4;
+	border-top-color: #eed4d4;
+	border-right-color: #6e5555;
+	border-bottom-color: #6e5555;
+	color: #000000;
+	background-color: #DDAAAA;
+
+	border-width: 2px;
+	padding: 3px 6px 3px 6px;
+	cursor: pointer;
+}
+
+.FuncButtonUp {
+	color: #DDAAAA;
+	text-align: center;
+	border-style: solid;
+
+	border-left-color: #eed4d4;
+	border-top-color: #eed4d4;
+	border-right-color: #6e5555;
+	border-bottom-color: #6e5555;
+
+	background-color: #000000;
+	color: #DDAAAA;
+	border-width: 2px;
+	padding: 3px 6px 3px 6px;
+	cursor: pointer;
+}
+
+.FuncButtonDown {
+	color: #DDAAAA;
+	text-align: center;
+	border-style: solid;
+
+	border-left-color: #6e5555;
+	border-top-color: #6e5555;
+	border-right-color: #eed4d4;
+	border-bottom-color: #eed4d4;
+	background-color: #000000;
+	color: #DDAAAA;
+
+	border-width: 2px;
+	padding: 3px 6px 3px 6px;
+	cursor: pointer;
+}
+
+/*BeginNavBarStyle*/
+
+div.NavButtonBar{
+	background-color: #660000;
+	text-align: center;
+	margin: 2px 0px 2px 0px;
+	clear: both;
+	font-size: small;
+}
+
+.NavButton {
+	border-style: solid;
+	
+	border-left-color: #b27f7f;
+	border-top-color: #b27f7f;
+	border-right-color: #330000;
+	border-bottom-color: #330000;
+	background-color: #660000;
+	color: #ffffff;
+
+	border-width: 2px;
+	cursor: pointer;	
+}
+
+.NavButtonUp {
+	border-style: solid;
+
+	border-left-color: #b27f7f;
+	border-top-color: #b27f7f;
+	border-right-color: #330000;
+	border-bottom-color: #330000;
+	color: #660000;
+	background-color: #ffffff;
+
+	border-width: 2px;
+	cursor: pointer;	
+}
+
+.NavButtonDown {
+	border-style: solid;
+
+	border-left-color: #330000;
+	border-top-color: #330000;
+	border-right-color: #b27f7f;
+	border-bottom-color: #b27f7f;
+	color: #660000;
+	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;
+	font-size: small;
+	padding: 5px;
+	border-style: solid;
+	border-width: 1px;
+	color: #000000;
+	background-color: #DDAAAA;
+	left: -50px;
+	top: -50px;
+	overflow: visible;
+}
+
+.rtl{
+	text-align: right;
+	font-size: large;
+}
+
+
+</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';
+//IE can't focus a hidden div; Moz needs to focus before display to avoid jumping
+	if (C.gecko){
+		document.getElementById('FeedbackOKButton').focus();
+	}
+	FDiv.style.display = 'block';
+
+	ShowElements(false, 'input');
+	ShowElements(false, 'select');
+	ShowElements(false, 'object');
+	if (C.ie){
+		document.getElementById('FeedbackOKButton').focus();
+	}
+	
+//
+}
+
+function ShowElements(Show, TagName){
+//Special for IE bug -- hide all the form elements that will show through the popup
+	if (C.ie){
+		var Els = document.getElementsByTagName(TagName);
+		for (var i=0; i<Els.length; i++){
+			if (Show == true){
+				Els[i].style.display = 'inline';
+			}
+			else{
+				Els[i].style.display = 'none';
+			}
+		}
+	} 
+}
+
+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 (document.documentElement && document.documentElement.scrollTop){
+		return document.documentElement.scrollTop;
+	}
+	else{
+		if (document.body){
+ 			return document.body.scrollTop;
+		}
+		else{
+			return window.pageYOffset;
+		}
+	}
+}
+
+function GetViewportHeight(){
+	if (window.innerWidth){
+		return window.innerWidth;
+	}
+	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{
+	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){
+	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; k++) {
+			Temp[k] = Temp[k+1];
+		}
+		j--;
+	}
+	return InArray;
+}
+
+function WriteToInstructions(Feedback) {
+//	Feedback = '<span class="FeedbackText">' + Feedback + '</span>';
+	document.getElementById('InstructionsDiv').innerHTML = Feedback;
+
+}
+
+
+
+
+function EscapeDoubleQuotes(InString){
+	return InString.replace(/"/g, '&quot;')
+}
+
+function FocusAButton(){
+	if (document.getElementById('CheckButton1') != null){
+		document.getElementById('CheckButton1').focus();
+	}
+	else{
+		document.getElementsByTagName('button')[0].focus();
+	}
+}
+
+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].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){
+		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();
+	}
+}
+
+
+
+//JCLOZE CORE JAVASCRIPT CODE
+
+function ItemState(){
+	this.ClueGiven = false;
+	this.HintsAndChecks = 0;
+	this.MatchedAnswerLength = 0;
+	this.ItemScore = 0;
+	this.AnsweredCorrectly = false;
+	this.Guesses = new Array();
+	return this;
+}
+
+var Feedback = '';
+var Correct = 'Correcto';
+var Incorrect = 'Algunas de sus respuestas no son correctas. Las respuestas incorrectas se han dejado en su sitio para que las corrija.'; 
+var GiveHint = 'La siguiente letra correcta ha sido a&#x00F1;adida a la respuesta.';
+var CaseSensitive = false;
+var YourScoreIs = 'Su puntuaci&#x00F3;n es';
+var Finished = false;
+var Locked = false;
+var Score = 0;
+var CurrentWord = 0;
+var Guesses = '';
+
+I = new Array();
+
+I[0] = new Array();
+I[0][1] = new Array();
+I[0][1][0] = new Array();
+I[0][1][0][0] = '\u004A\u0043\u006C\u006F\u007A\u0065';
+I[0][2]='';
+
+I[1] = new Array();
+I[1][1] = new Array();
+I[1][1][0] = new Array();
+I[1][1][0][0] = '\u0063\u006F\u006C\u006F\u0072\u0065\u0073';
+I[1][2]='';
+
+I[2] = new Array();
+I[2][1] = new Array();
+I[2][1][0] = new Array();
+I[2][1][0][0] = '\u0048\u0054\u004D\u004C';
+I[2][1][1] = new Array();
+I[2][1][1][0]='\u0058\u0048\u0054\u004D\u004C';
+I[2][2]='';
+
+I[3] = new Array();
+I[3][1] = new Array();
+I[3][1][0] = new Array();
+I[3][1][0][0] = '\u0070\u0072\u0065\u0067\u0075\u006E\u0074\u0061\u0073';
+I[3][2]='';
+
+
+State = new Array();
+
+function StartUp(){
+	RemoveBottomNavBarForIE();
+
+
+
+
+
+	var i = 0;
+
+	State.length = 0;
+	for (i=0; i<I.length; i++){
+		State[i] = new ItemState();
+	}
+
+
+}
+
+function ShowClue(ItemNum){
+	if (Locked == true){return;}
+	State[ItemNum].ClueGiven = true;
+	ShowMessage(I[ItemNum][2]);
+}
+
+function SaveCurrentAnswers(){
+	var Ans = ''
+	for (var i=0; i<I.length; i++){
+		Ans = GetGapValue(i);
+		if ((Ans.length > 0)&&(Ans != State[i].Guesses[State[i].Guesses.length-1])){
+			State[i].Guesses[State[i].Guesses.length] = Ans;
+		}
+	}
+}
+
+function CompileGuesses(){
+	var F = document.getElementById('store');
+	if (F != null){
+		var Temp = '<?xml version="1.0"?><hpnetresult><fields>';
+		var GapLabel = '';
+		for (var i=0; i<State.length; i++){
+			GapLabel = 'Gap ' + (i+1).toString();
+			Temp += '<field><fieldname>' + GapLabel + '</fieldname>';
+			Temp += '<fieldtype>student-responses</fieldtype><fieldlabel>' + GapLabel + '</fieldlabel>';
+			Temp += '<fieldlabelid>JClozeStudentResponses</fieldlabelid><fielddata>';
+			for (var j=0; j<State[i].Guesses.length; j++){
+				if (j>0){Temp += '| ';}
+				Temp += State[i].Guesses[j] + ' ';	
+			}	
+  		Temp += '</fielddata></field>';
+		}
+		Temp += '</fields></hpnetresult>';
+		F.detail.value = Temp;
+	}
+}
+
+function CheckAnswers(){
+	if (Locked == true){return;}
+	SaveCurrentAnswers();
+	var AllCorrect = true;
+
+//Check each answer
+	for (var i = 0; i<I.length; i++){
+
+		if (State[i].AnsweredCorrectly == false){
+//If it's right, calculate its score
+			if (CheckAnswer(i, true) > -1){
+				var TotalChars = GetGapValue(i).length;
+				State[i].ItemScore = (TotalChars-State[i].HintsAndChecks)/TotalChars;
+				if (State[i].ClueGiven == true){State[i].ItemScore /= 2;}
+				if (State[i].ItemScore <0 ){State[i].ItemScore = 0;}
+				State[i].AnsweredCorrectly = true;
+//Drop the correct answer into the page, replacing the text box
+				SetCorrectAnswer(i, GetGapValue(i));
+			}
+			else{
+//Otherwise, increment the hints for this item, as a penalty
+				State[i].HintsAndChecks++;
+
+//then set the flag
+				AllCorrect = false;
+			}
+		}
+	}
+
+//Calculate the total score
+	var TotalScore = 0;
+	for (i=0; i<State.length; i++){
+		TotalScore += State[i].ItemScore;
+	}
+	TotalScore = Math.floor((TotalScore * 100)/I.length);
+
+//Compile the output
+	Output = '';
+
+	if (AllCorrect == true){
+		Output = Correct + '<br />';
+	}
+
+	Output += YourScoreIs + ' ' + TotalScore + '%.<br />';
+	if (AllCorrect == false){
+		Output += '<br />' + Incorrect;
+	}
+	ShowMessage(Output);
+	setTimeout('WriteToInstructions(Output)', 50);
+	
+	Score = TotalScore;
+	CompileGuesses();
+	
+	if (AllCorrect==true){
+
+
+
+		Finished = true;
+		setTimeout('Finish()', SubmissionTimeout);
+	}
+}
+
+function TrackFocus(BoxNumber){
+	CurrentWord = BoxNumber;
+	InTextBox = true;
+}
+
+function LeaveGap(){
+	InTextBox = false;
+}
+
+function CheckBeginning(Guess, Answer){
+	var OutString = '';
+	var i = 0;
+	var UpperGuess = '';
+	var UpperAnswer = '';
+
+	if (CaseSensitive == false) {
+		UpperGuess = Guess.toUpperCase();
+		UpperAnswer = Answer.toUpperCase();
+	}
+	else {
+		UpperGuess = Guess;
+		UpperAnswer = Answer;
+	}
+
+	while (UpperGuess.charAt(i) == UpperAnswer.charAt(i)) {
+		OutString += Guess.charAt(i);
+		i++;
+	}
+	OutString += Answer.charAt(i);
+	return OutString;
+}
+
+function GetGapValue(GNum){
+	var RetVal = '';
+	if ((GNum<0)||(GNum>=I.length)){return RetVal;}
+	if (document.getElementById('Gap' + GNum) != null){
+		RetVal = document.getElementById('Gap' + GNum).value;
+		RetVal = TrimString(RetVal);
+	}
+	else{
+		RetVal = State[GNum].Guesses[State[GNum].Guesses.length-1];
+	}
+	return RetVal;
+}
+
+function SetGapValue(GNum, Val){
+	if ((GNum<0)||(GNum>=I.length)){return;}
+	if (document.getElementById('Gap' + GNum) != null){
+		document.getElementById('Gap' + GNum).value = Val;
+		document.getElementById('Gap' + GNum).focus();
+	}
+}
+
+function SetCorrectAnswer(GNum, Val){
+	if ((GNum<0)||(GNum>=I.length)){return;}
+	if (document.getElementById('GapSpan' + GNum) != null){
+		document.getElementById('GapSpan' + GNum).innerHTML = Val;
+	}
+}
+
+function FindCurrent() {
+	var x = 0;
+	FoundCurrent = -1;
+
+//Test the current word:
+//If its state is not set to already correct, check the word.
+	if (State[CurrentWord].AnsweredCorrectly == false){
+		if (CheckAnswer(CurrentWord, false) < 0){
+			return CurrentWord;
+		}
+	}
+	
+	x=CurrentWord + 1;
+	while (x<I.length){
+		if (State[x].AnsweredCorrectly == false){
+			if (CheckAnswer(x, false) < 0){
+				return x;
+			}
+		}
+	x++;	
+	}
+
+	x = 0;
+	while (x<CurrentWord){
+		if (State[x].AnsweredCorrectly == false){
+			if (CheckAnswer(x, false) < 0){
+				return x;
+			}
+		}
+	x++;	
+	}
+	return FoundCurrent;
+}
+
+function CheckAnswer(GapNum, MarkAnswer){
+	var Guess = GetGapValue(GapNum);
+	var UpperGuess = '';
+	var UpperAnswer = '';
+	if (CaseSensitive == false){
+		UpperGuess = Guess.toUpperCase();
+	}
+	else{
+		UpperGuess = Guess;
+	}
+	var Match = -1;
+	for (var i = 0; i<I[GapNum][1].length; i++){
+		if (CaseSensitive == false){
+			UpperAnswer = I[GapNum][1][i][0].toUpperCase();
+		}
+		else{
+			UpperAnswer = I[GapNum][1][i][0];
+		}
+		if (TrimString(UpperGuess) == UpperAnswer){
+			Match = i;
+			if (MarkAnswer == true){
+				State[GapNum].AnsweredCorrectly = true;
+			}
+		}
+	}
+	return Match;
+}
+
+function GetHint(GapNum){
+	Guess = GetGapValue(GapNum);
+
+	if (CheckAnswer(GapNum, false) > -1){return ''}
+	RightBits = new Array();
+	for (var i=0; i<I[GapNum][1].length; i++){
+		RightBits[i] = CheckBeginning(Guess, I[GapNum][1][i][0]);
+	}
+	var RightOne = FindLongest(RightBits);
+	var Result = I[GapNum][1][RightOne][0].substring(0,RightBits[RightOne].length);
+//Add another char if the last one is a space
+	if (Result.charAt(Result.length-1) == ' '){
+		Result = I[GapNum][1][RightOne][0].substring(0,RightBits[RightOne].length+1);
+	}
+	return Result;
+}
+
+function ShowHint(){
+	if (Locked == true){return;}
+	var CurrGap = FindCurrent();
+	if (CurrGap < 0){return;}
+
+	var HintString = GetHint(CurrGap);
+
+	if (HintString.length > 0){
+		SetGapValue(CurrGap, HintString);
+		State[CurrGap][1] = State[CurrGap][1] + 1;
+	}
+	ShowMessage(GiveHint);
+}
+
+function TypeChars(Chars){
+	var CurrGap = FindCurrent();
+	if (CurrGap < 0){return;}
+	SetGapValue(CurrGap, GetGapValue(CurrGap) + Chars);
+}
+
+
+
+
+
+
+
+
+//-->
+
+//]]>
+
+</script>
+
+
+</head>
+
+<body onload="StartUp()" id="TheBody">
+
+<!-- BeginTopNavButtons -->
+
+
+<div class="NavButtonBar" id="TopNavBar">
+
+
+
+
+
+
+<button class="NavButton" onfocus="NavBtnOver(this)" onblur="NavBtnOut(this)" onmouseover="NavBtnOver(this)" onmouseout="NavBtnOut(this)" onmousedown="NavBtnDown(this)" onmouseup="NavBtnOut(this)" onclick="location='jcross1.htm'; return false;">Siguiente ejemplo</button>
+
+
+</div>
+
+
+
+<!-- EndTopNavButtons -->
+
+<div class="Titles">
+	<h2 class="ExerciseTitle">Ejercicio de rellenar huecos con preguntas individuales</h2>
+	<h3 class="ExerciseSubtitle">Ejercicios de rellenar huecos</h3>
+
+
+</div>
+
+<div id="InstructionsDiv" class="StdDiv">
+	<p id="Instructions">Complete los huecos, despu&#x00E9;s pulse "Comprobar" para revisar sus respuestas. Utilice el bot&#x00F3;n "Pista" para averiguar una letra de la palabra si es que la palabra le resulta complicada. Tambi&#x00E9;n puede pulsar en el bot&#x00F3;n "[?]" para ver una descripci&#x00F3;n de la palabra. &#x00A1;Tenga en cuenta que perder&#x00E1; puntos si solicita pistas o descripciones!</p>
+</div>
+
+
+
+
+
+<div id="MainDiv" class="StdDiv">
+
+<!-- These top buttons hidden; reveal if required -->
+<!--
+<button id="CheckButton1" class="FuncButton" onmouseover="FuncBtnOver(this)" onfocus="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)" onblur="FuncBtnOut(this)" onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)" onclick="CheckAnswers()">&nbsp;Comprobar&nbsp;</button>
+
+
+<button class="FuncButton" onmouseover="FuncBtnOver(this)" onfocus="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)" onblur="FuncBtnOut(this)" onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)" onclick="ShowHint()">&nbsp;Pista&nbsp;</button>
+
+
+ -->
+ 
+<div id="ClozeDiv">
+<form id="Cloze" method="post" action="" onsubmit="return false;">
+<div class="ClozeBody">
+<br /><ol><li>Este ejercicio se ha realizado con <span class="GapSpan" id="GapSpan0"><input type="text" id="Gap0" onfocus="TrackFocus(0)" onblur="LeaveGap()" class="GapBox" size="6"></input></span>.</li><li>Al igual que las dem&#x00E1;s aplicaciones de Hot Potatoes, JCloze le permite controlar los <span class="GapSpan" id="GapSpan1"><input type="text" id="Gap1" onfocus="TrackFocus(1)" onblur="LeaveGap()" class="GapBox" size="7"></input></span> de la p&#x00E1;gina Web, as&#x00ED; podr&#x00E1; cambiar la apariencia de sus p&#x00E1;ginas facilmente.</li><li>Tambi&#x00E9;n puede introducir c&#x00F3;digo <span class="GapSpan" id="GapSpan2"><input type="text" id="Gap2" onfocus="TrackFocus(2)" onblur="LeaveGap()" class="GapBox" size="6"></input></span> directamente en las programas de Hot Potatoes, para crear efectos como esta lista numerada de preguntas.</li><li>Si usted quiere crear una serie de <span class="GapSpan" id="GapSpan3"><input type="text" id="Gap3" onfocus="TrackFocus(3)" onblur="LeaveGap()" class="GapBox" size="9"></input></span> numeradas como &#x00E9;sta, pero quiere que los alumnos puedan comprobar las respuestas de una en una, deber&#x00E1; utilizar JQuiz en vez de JCloze.</li></ol>
+</div>
+</form>
+</div>
+
+
+<div class="Keypad">
+
+</div>
+
+
+<button id="CheckButton2" class="FuncButton" onmouseover="FuncBtnOver(this)" onfocus="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)" onblur="FuncBtnOut(this)" onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)" onclick="CheckAnswers()">&nbsp;Comprobar&nbsp;</button>
+
+
+<button class="FuncButton" onmouseover="FuncBtnOver(this)" onfocus="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)" onblur="FuncBtnOut(this)" onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)" onclick="ShowHint()">&nbsp;Pista&nbsp;</button>
+
+
+</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;">&nbsp;OK&nbsp;</button>
+</div>
+
+<!-- BeginBottomNavButtons -->
+
+
+<div class="NavButtonBar" id="BottomNavBar">
+
+
+
+
+
+
+<button class="NavButton" onfocus="NavBtnOver(this)" onblur="NavBtnOut(this)" onmouseover="NavBtnOver(this)" onmouseout="NavBtnOut(this)" onmousedown="NavBtnDown(this)" onmouseup="NavBtnOut(this)" onclick="location='jcross1.htm'; return false;">Siguiente ejemplo</button>
+
+
+</div>
+
+
+
+<!-- EndBottomNavButtons -->
+
+<!-- BeginSubmissionForm -->
+
+<!-- EndSubmissionForm -->
+
+</body>
+
+</html>
Index: /trunk/max-javahotpot-tutorial/tutorial/mashertutorial.2qn
===================================================================
--- /trunk/max-javahotpot-tutorial/tutorial/mashertutorial.2qn (revision 35)
+++ /trunk/max-javahotpot-tutorial/tutorial/mashertutorial.2qn (revision 35)
@@ -0,0 +1,165 @@
+﻿<quandary-file><rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">
+  <rdf:Description rdf:about="">
+    <dc:creator>Martin Holmes</dc:creator>
+    <dc:title>Tutorial for the Hot Potatoes Masher Program</dc:title>
+  </rdf:Description>
+</rdf:RDF><version>2</version>
+
+<quandary><title>Tutorial for the Hot Potatoes Masher Program</title><assets><intro-text></intro-text></assets><qnodes><qnode><node-name>Contents of the tutorial</node-name><node-contents>Choose the topic you want to learn about.</node-contents><entry><transactions></transactions></entry><exit><transactions></transactions></exit><qlinks><qlink><target-id>2</target-id><qlink-text>What is the Masher?</qlink-text><hide-when-inaccessible>0</hide-when-inaccessible><transactions></transactions></qlink><qlink><target-id>3</target-id><qlink-text>Building Masher units</qlink-text><hide-when-inaccessible>0</hide-when-inaccessible><transactions></transactions></qlink><qlink><target-id>4</target-id><qlink-text>Uploading files to hotpotatoes.net</qlink-text><hide-when-inaccessible>0</hide-when-inaccessible><transactions></transactions></qlink><qlink><target-id>5</target-id><qlink-text>Registration of the Masher</qlink-text><hide-when-inaccessible>0</hide-when-inaccessible><transactions></transactions></qlink><qlink><target-id>6</target-id><qlink-text>Advanced functions</qlink-text><hide-when-inaccessible>0</hide-when-inaccessible><transactions></transactions></qlink></qlinks></qnode><qnode><node-name>What is the Masher?</node-name><node-contents>The Masher has two basic functions:
+
+&lt;ol&gt;
+&lt;li&gt;It is used to create complete units of Hot Potatoes exercises (and other Web pages). A unit created with the Masher can share the same appearance settings, and be linked together automatically by navigation buttons; an Index page is also created automatically. If you regularly create sequences of exercises and other pages -- &quot;units&quot; or &quot;chapters&quot; of teaching materials -- then the Masher can help you organize and build your sites quickly and easily.&lt;/li&gt;
+&lt;li&gt;It is also used to upload non-Hot Potatoes files to the &lt;a style=&quot;cursor: pointer; text-decoration: underline;&quot; onclick=&quot;window.open(&apos;[http://www.hotpotatoes.net&apos;);return false;&quot;&gt;hotpotatoes.net&lt;/a&gt; server. When you export an exercise to create a Web page from inside a Hot Potato, you can automatically upload the page and its linked media files to hotpotatoes.net; however, you may also want to upload other types of file (PDF documents, Word documents, images, etc.) for your students, and you can do this using the Masher&lt;/li&gt;
+&lt;/ol&gt;
+
+</node-contents><entry><transactions></transactions></entry><exit><transactions></transactions></exit><qlinks><qlink><target-id>3</target-id><qlink-text>Learn about building Masher units</qlink-text><hide-when-inaccessible>0</hide-when-inaccessible><transactions></transactions></qlink><qlink><target-id>4</target-id><qlink-text>Learn about uploading files to hotpotatoes.net</qlink-text><hide-when-inaccessible>0</hide-when-inaccessible><transactions></transactions></qlink></qlinks></qnode><qnode><node-name>Building Masher units</node-name><node-contents>Using the Masher to build a unit takes a few steps:
+
+&lt;ol&gt;
+&lt;li&gt;Choosing your materials&lt;/li&gt;
+&lt;li&gt;Putting them in order&lt;/li&gt;
+&lt;li&gt;Deciding on the appearance of the pages&lt;/li&gt;
+&lt;li&gt;Setting the navigation options&lt;/li&gt;
+&lt;li&gt;Adding a title for your unit&lt;/li&gt;
+&lt;li&gt;Saving your settings&lt;/li&gt;
+&lt;li&gt;Building the unit&lt;/li&gt;
+&lt;/ol&gt;
+
+</node-contents><entry><transactions></transactions></entry><exit><transactions></transactions></exit><qlinks><qlink><target-id>7</target-id><qlink-text>Basic advice before you start</qlink-text><hide-when-inaccessible>0</hide-when-inaccessible><transactions></transactions></qlink></qlinks></qnode><qnode><node-name>Uploading files to hotpotatoes.net</node-name><node-contents>The &lt;a style=&quot;cursor: pointer; text-decoration: underline;&quot; onclick=&quot;window.open(&apos;http://www.hotpotatoes.net&apos;);return false;&quot;&gt;hotpotatoes.net&lt;/a&gt; hosting service provides a location for you to store your Hot Potatoes pages and related files. Your students can log in to the server, do their exercises, and have their results stored, and you can check their progress. You can upload exercises from any Hot Potato program by exporting the exercise, and then choosing the upload option when the process is complete.
+
+However, you may also want to provide other kinds of material for your students on your hotpotatoes.net account. You can do this by uploading it from inside the Masher:
+
+&lt;img src=&quot;mash_ul1.png&quot; alt=&quot;Masher menu item: Upload file to hotpotatoes.net&quot; title=&quot;Masher menu item: Upload file to hotpotatoes.net&quot; width=&quot;367&quot; height=&quot;70&quot;&gt;&lt;/img&gt;
+
+Click on the menu item, then choose your file. You&apos;ll see this dialog box:
+
+&lt;img src=&quot;mash_ul2.png&quot; alt=&quot;Masher upload file to hotpotatoes.net: title and description dialog box.&quot; title=&quot;Masher upload file to hotpotatoes.net: title and description dialog box.&quot; width=&quot;437&quot; height=&quot;305&quot;&gt;&lt;/img&gt;
+
+Here you can specify a title and description for your file; these will appear for you and your students in the index of materials on the hotpotatoes.net server. You can also click on the View button to view the file if you want to check it&apos;s the right one.
+
+Next, you&apos;ll see the normal hotpotatoes.net logon dialog box (the same one you see when you upload an exercise from a Potato). Here, you can log on with your user name and password (if you have one), or create a demo account if you don&apos;t:
+
+&lt;img src=&quot;mash_ul3.png&quot; alt=&quot;Hotpotatoes.net logon screen&quot; title=&quot;Hotpotatoes.net logon screen&quot; width=&quot;404&quot; height=&quot;245&quot;&gt;&lt;/img&gt;
+
+If you press OK, and the logon is successful, the file will upload, and it will be available to your students. That&apos;s all there is to it!</node-contents><entry><transactions></transactions></entry><exit><transactions></transactions></exit><qlinks><qlink><target-id>1</target-id><qlink-text>Back to the contents of the tutorial</qlink-text><hide-when-inaccessible>0</hide-when-inaccessible><transactions></transactions></qlink></qlinks></qnode><qnode><node-name>Registration of the Masher</node-name><node-contents>The Masher is a professional-level tool, used by people making larger Websites and more complex teaching materials. For that reason, it is &lt;strong&gt;not included in the free use terms of Hot Potatoes&lt;/strong&gt;. With the unregistered version of the Masher, you can build units with up to three exercises or pages in them. If you want to build larger units, you will need to &lt;a style=&quot;cursor: pointer; text-decoration: underline;&quot; onclick=&quot;window.open(&apos;http://www.halfbakedsoftware.com/hotpot/&apos;);return false;&quot;&gt;buy a licence for Hot Potatoes&lt;/a&gt;. When you buy a licence, we will send you a special key for the Masher, which you can enter into the program (&lt;strong&gt;Help / Register&lt;/strong&gt;) to remove the limitation.
+
+The Masher&apos;s other function, uploading files to the &lt;a style=&quot;cursor: pointer; text-decoration: underline;&quot; onclick=&quot;window.open(&apos;[http://www.hotpotatoes.net&apos;);return false;&quot;&gt;hotpotatoes.net&lt;/a&gt; server, does &lt;strong&gt;not&lt;/strong&gt; require registration.</node-contents><entry><transactions></transactions></entry><exit><transactions></transactions></exit><qlinks><qlink><target-id>1</target-id><qlink-text>Back to the contents of the tutorial</qlink-text><hide-when-inaccessible>0</hide-when-inaccessible><transactions></transactions></qlink></qlinks></qnode><qnode><node-name>Advanced functions</node-name><node-contents>There are three important advanced features in the Masher:
+
+&lt;h3&gt;User strings&lt;/h3&gt;
+The &lt;strong&gt;User strings&lt;/strong&gt; tab works the same way as the same item on the Custom tab in the Configuration screen of the rest of the Hot Potatoes programs. If you use modified source files (another advanced Hot Potatoes option), you can include in those files a placeholder such as &lt;strong&gt;[strUserDefined1]&lt;/strong&gt;. When you build the pages, this placeholder will be replaced automatically by whatever you type in the &lt;strong&gt;User defined string #1&lt;/strong&gt; box. The contents of the bottom box will be automatically inserted into the &lt;strong&gt;head&lt;/strong&gt; element of all the pages; this can be useful for inserting a custom stylesheet or a little block of JavaScript code into all your pages.
+
+&lt;h3&gt;The Source tab&lt;/h3&gt;
+The &lt;strong&gt;Source&lt;/strong&gt; tab allows you to do two things: first, you can specify a particular source folder where all the programs will look for source files when building pages, and you can also see the contents of the source file used to create the Index page, and make modifications to it if you wish. For more information on customizing source files, see the Hot Potatoes Help file.
+
+&lt;h3&gt;The Batch tool&lt;/h3&gt;
+If you click on &lt;strong&gt;Actions&lt;/strong&gt; / &lt;strong&gt;Batch processing&lt;/strong&gt;, you&apos;ll see a new window appear: the &lt;strong&gt;Batch&lt;/strong&gt; window. The idea of this feature is to allow you to process a whole set of units in one operation. Imagine, for example, that you&apos;re creating a huge site to teach Latin. Your site has 25 units, and each unit contains a sequence of pages and exercises. You have created 25 &lt;strong&gt;.jms&lt;/strong&gt; files in the Masher, one for each unit, so you can build each unit easily. However, sometimes you need to make a change to the whole site. You can do that using the Batch tool. Use the &lt;strong&gt;Add Files&lt;/strong&gt; button in the Batch window to select and add all of your .jms files (or drag and drop them into the window). Then press &lt;strong&gt;Go!&lt;/strong&gt;, and each one will be processed in turn, building all the units. This may take a while, so be prepared! If you wish, you can also set up (for example) Appearance settings in the main screen before running your batch operation, then choose &lt;strong&gt;Lock colour information&lt;/strong&gt;, and the settings you specified will be used for all the output operations, whatever settings you specified in each individual &lt;strong&gt;.jms&lt;/strong&gt; file. In this way, you could change the colour settings for a whole site very easily. When you have set up a batch operation, you can save the file list and the other settings using &lt;strong&gt;File&lt;/strong&gt; / &lt;strong&gt;Save (As)&lt;/strong&gt; in the Batch window. See the Masher Help file for more detailed information on batch processing.</node-contents><entry><transactions></transactions></entry><exit><transactions></transactions></exit><qlinks><qlink><target-id>1</target-id><qlink-text>Contents of the tutorial</qlink-text><hide-when-inaccessible>0</hide-when-inaccessible><transactions></transactions></qlink></qlinks></qnode><qnode><node-name>Basic advice before you start</node-name><node-contents>Although the Masher can accept files from any locations and output the results to any folder you specify, the cleanest and simplest way to work is this:
+
+&lt;ol&gt;
+&lt;li&gt;Put all the Hot Potatoes data files for the unit you want to build in a single folder.&lt;/li&gt;
+&lt;li&gt;Copy any other files (other Web pages etc.) that you want to include into the same folder.&lt;/li&gt;
+&lt;li&gt;Make sure you save the Masher file in the same folder.&lt;/li&gt;
+&lt;/ol&gt;
+
+In other words, you might have a folder like this:
+
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b&gt;unit_01&lt;/b&gt;
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b&gt;instructions.htm&lt;/b&gt;
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b&gt;jcloze1.jcl&lt;/b&gt;
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b&gt;jmatch1.jmt&lt;/b&gt;
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b&gt;unit_01.jms&lt;/b&gt;
+
+This consists of an HTML file you have created in some other program (such as DreamWeaver), two exercises (one JMatch and one JQuiz), and the Masher file that&apos;s going to be used to build the unit. When you have built the unit, it will look like this:
+
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b&gt;unit_01&lt;/b&gt;
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b&gt;&lt;strong&gt;index.htm&lt;/strong&gt;&lt;/b&gt;
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b&gt;instructions.htm&lt;/b&gt;
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b&gt;jcloze1.jcl&lt;/b&gt;
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b&gt;&lt;strong&gt;jcloze1.htm&lt;/strong&gt;&lt;/b&gt;
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b&gt;jmatch1.jmt&lt;/b&gt;
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b&gt;&lt;strong&gt;jmatch1.htm&lt;/strong&gt;&lt;/b&gt;
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b&gt;unit_01.jms&lt;/b&gt;
+
+The new files are the HTML files created by the Masher, including an index page which links them together. We recommend that you always keep all these files in the same folder; it makes life simple, and makes backups easy.</node-contents><entry><transactions></transactions></entry><exit><transactions></transactions></exit><qlinks><qlink><target-id>8</target-id><qlink-text>Next: Choosing your materials</qlink-text><hide-when-inaccessible>0</hide-when-inaccessible><transactions></transactions></qlink></qlinks></qnode><qnode><node-name>Choosing your materials</node-name><node-contents>The first stage in building a Masher unit is to bring the materials into the Masher. Start the program, and make sure you&apos;ve selected the first tab in the interface (&lt;strong&gt;Files&lt;/strong&gt;). Next, click on the &lt;strong&gt;Add Files&lt;/strong&gt; button, and select one or more of the files you want to include in your unit. It&apos;s best if these are sitting in the same folder, as we mentioned. When you add a file, you&apos;ll see a dialog box like this:
+
+&lt;img src=&quot;mash_f1.png&quot; alt=&quot;Loading a file into the Masher&quot; title=&quot;Loading a file into the Masher&quot; width=&quot;452&quot; height=&quot;294&quot;&gt;&lt;/img&gt;
+
+For the moment, it&apos;s fine just to accept the defaults and press OK, but this is what the components mean:
+
+&lt;ul&gt;
+&lt;li&gt;The first box shows the path to the HotPot data file (or other Web page).&lt;/li&gt;
+&lt;li&gt;The second box shows the filename that will be used when that file is exported to create a Web page as part of the unit.&lt;/li&gt;
+&lt;li&gt;The third box can be used to fix the name of the subsequent exercise page. Under normal circumstances, you wouldn&apos;t need to change this.&lt;/li&gt;
+&lt;li&gt;The fourth box allows you to choose the output format for a Hot Potatoes exercise. The options depend on which Potato is involved (so JMatch has three options, but JCloze has only one).&lt;/li&gt;
+&lt;/ul&gt;
+
+Accept the defaults, and add your files.
+
+</node-contents><entry><transactions></transactions></entry><exit><transactions></transactions></exit><qlinks><qlink><target-id>9</target-id><qlink-text>Putting your files in order</qlink-text><hide-when-inaccessible>0</hide-when-inaccessible><transactions></transactions></qlink></qlinks></qnode><qnode><node-name>Putting your files in order</node-name><node-contents>When you&apos;ve added your files, you should see something like this:
+
+&lt;img src=&quot;mash_f2.png&quot; alt=&quot;Masher file list&quot; title=&quot;Masher file list&quot; width=&quot;500&quot; height=&quot;490&quot;&gt;&lt;/img&gt;
+
+You can see the sequence of files that will be included in the unit: it starts with a plain HTML page of instructions, and then there&apos;s a JCloze exercise, and a JMatch exercise. You can change the order of files in the sequence using the up/down buttons on the right. Note that every time you move a file in the sequence, the file names in the &lt;strong&gt;Next exercise&lt;/strong&gt; column are automatically updated.
+
+If you want to change the output format of an exercise, just double-click on it, and you&apos;ll see the same dialog box you saw when you added it to the list.</node-contents><entry><transactions></transactions></entry><exit><transactions></transactions></exit><qlinks><qlink><target-id>10</target-id><qlink-text>Deciding on the appearance of the pages</qlink-text><hide-when-inaccessible>0</hide-when-inaccessible><transactions></transactions></qlink></qlinks></qnode><qnode><node-name>Deciding on the appearance of the pages</node-name><node-contents>The next stage is the &lt;strong&gt;Appearance&lt;/strong&gt; tab. This is almost identical to the Appearance tab in the Configuration screen of the other Hot Potatoes programs, and it works the same way. The only difference is that you can make this choice:
+
+&lt;img src=&quot;mash_ap1.png&quot; alt=&quot;Masher appearance settings&quot; title=&quot;Masher appearance settings&quot; width=&quot;363&quot; height=&quot;77&quot;&gt;&lt;/img&gt;
+
+If you choose the first option, all the pages will be compiled using the colours you specify in this screen (so they will all look the same). If you choose the second button, then each file will be compiled using the colours that were set up in the program that created it. Nornally, the first option would be the logical one, because you will probably want all the exercises in your unit to look similar.</node-contents><entry><transactions></transactions></entry><exit><transactions></transactions></exit><qlinks><qlink><target-id>11</target-id><qlink-text>Setting the navigation options</qlink-text><hide-when-inaccessible>0</hide-when-inaccessible><transactions></transactions></qlink></qlinks></qnode><qnode><node-name>Setting the navigation options</node-name><node-contents>The next tab is the &lt;strong&gt;User Strings&lt;/strong&gt; tab, but let&apos;s ignore that for the moment; it&apos;s a pretty advanced function. Moving on to the &lt;strong&gt;Buttons&lt;/strong&gt; tab, you&apos;ll see these options:
+
+&lt;img src=&quot;mash_bt1.png&quot; alt=&quot;Masher buttons tab&quot; title=&quot;Masher buttons tab&quot; width=&quot;500&quot; height=&quot;215&quot;&gt;&lt;/img&gt;
+
+The first part allows you to specify the navigation buttons you want to include in your unit pages. You can choose to include any of the three normal navigation buttons, and set the captions for them. Note that you don&apos;t have to worry about specifying the location of files here; the links are established automatically by the sequence of files in the Files tab.
+
+The final checkbox here relates to any HTML pages you have included (like the Instructions page in our example). You may have created a page like this in another authoring program such as DreamWeaver, but you presumably still want to include the same navigation system on the page, so that it can become part of the unit sequence. If you check this checkbox, the program will try to add navigation bars to the HTML page. If the HTML code is correct, this should work without problems, and your HTML page will have navigation bars like a Hot Potatoes exercise.</node-contents><entry><transactions></transactions></entry><exit><transactions></transactions></exit><qlinks><qlink><target-id>12</target-id><qlink-text>Adding a title for your unit</qlink-text><hide-when-inaccessible>0</hide-when-inaccessible><transactions></transactions></qlink></qlinks></qnode><qnode><node-name>Adding a title for your unit</node-name><node-contents>The next tab is the &lt;strong&gt;Source&lt;/strong&gt; tab, but this is for advanced functions, so we&apos;ll ignore it for the moment. The final tab is the &lt;strong&gt;Index&lt;/strong&gt; tab, which looks like this:
+
+&lt;img src=&quot;mash_ix1.png&quot; alt=&quot;Masher Index tab&quot; title=&quot;Masher Index tab&quot; width=&quot;500&quot; height=&quot;105&quot;&gt;&lt;/img&gt;
+
+All you need to do here is specify the name for your Unit. This will appear on the Index page that the program creates.</node-contents><entry><transactions></transactions></entry><exit><transactions></transactions></exit><qlinks><qlink><target-id>13</target-id><qlink-text>Saving your settings</qlink-text><hide-when-inaccessible>0</hide-when-inaccessible><transactions></transactions></qlink></qlinks></qnode><qnode><node-name>Saving your settings</node-name><node-contents>&lt;img src=&quot;mash_sv1.png&quot; alt=&quot;Save your Masher file&quot; title=&quot;Save your Masher file&quot; width=&quot;175&quot; height=&quot;260&quot; style=&quot;float: right;&quot;&gt;&lt;/img&gt;
+
+Before we go any further, it&apos;s a good idea to save your settings as a Masher file. Choose &lt;strong&gt;File&lt;/strong&gt; / &lt;strong&gt;Save&lt;/strong&gt; or &lt;strong&gt;Save As&lt;/strong&gt;, and save your work as a &lt;strong&gt;.jms&lt;/strong&gt; file. This saves all the settings in the Masher tabs, so that you can reload them later and build your unit again if you need to.</node-contents><entry><transactions></transactions></entry><exit><transactions></transactions></exit><qlinks><qlink><target-id>14</target-id><qlink-text>Building the unit</qlink-text><hide-when-inaccessible>0</hide-when-inaccessible><transactions></transactions></qlink></qlinks></qnode><qnode><node-name>Building the unit</node-name><node-contents>Finally, we&apos;ll build the unit. Just click on the &lt;strong&gt;Build unit&lt;/strong&gt; button, and watch it happen!
+
+What actually happens is this:
+
+The Masher looks at each file in turn, and then starts the required Hot Potato, passing it all the information it needs to build the exercise into a Web page. The Potato starts up, exports the exercise to the target folder, then closes again. If there are any non-Hot Potatoes files, the Masher will load them and add a navigation bar if necessary. Finally, the Masher creates an Index page for the unit, listing all the contents, and saves this with the filename &lt;strong&gt;index.htm&lt;/strong&gt; in the same folder. You should now have a complete unit of exercises, with an index and a functioning navigation system so that users can work through the materials in order. Simple!</node-contents><entry><transactions></transactions></entry><exit><transactions></transactions></exit><qlinks><qlink><target-id>1</target-id><qlink-text>Contents of the tutorial</qlink-text><hide-when-inaccessible>0</hide-when-inaccessible><transactions></transactions></qlink><qlink><target-id>6</target-id><qlink-text>Advanced functions</qlink-text><hide-when-inaccessible>0</hide-when-inaccessible><transactions></transactions></qlink></qlinks></qnode></qnodes></quandary>
+
+<quandary-config-file><welcome>&lt;div style=&quot;text-align: center;&quot;&gt;&lt;img src=&quot;masher_logo.png&quot; alt=&quot;masher_logo.png&quot; title=&quot;masher_logo&quot; width=&quot;410&quot; height=&quot;310&quot; style=&quot;margin: auto;&quot;&gt;&lt;/img&gt;&lt;/div&gt;
+
+Welcome to the Masher tutorial. This tutorial runs in your Web browser. Click on the Start button to enter the tutorial.
+</welcome><current-assets>You have: </current-assets><default-refusal-message>Sorry! You can&apos;t do that.</default-refusal-message><exercise-complete>You have reached the end of the exercise.</exercise-complete>
+<start-caption>Start</start-caption>
+<undo-caption>Go back</undo-caption>
+<restart-caption>Restart</restart-caption>
+<ok-caption>OK</ok-caption>
+<link-caption>Go!</link-caption>
+<bookmark-caption>Bookmark</bookmark-caption>
+<bookmark-explanation>Your current position and settings have been encoded in 
+the URL of the page. Now set a bookmark in your 
+browser, so you can return here.
+</bookmark-explanation>
+<include-undo>1</include-undo>
+<include-restart>1</include-restart>
+<include-bookmark>1</include-bookmark>
+<times-up>Your time has run out!</times-up><seconds>60</seconds><include-timer>0</include-timer>
+<next-ex-caption>=&gt;</next-ex-caption>
+<back-caption>&lt;=</back-caption>
+<contents-caption>Index</contents-caption>
+<include-next-ex>0</include-next-ex>
+<include-contents>1</include-contents>
+<include-back>0</include-back>
+<contents-url>mashertutorial.htm?___q;0;</contents-url>
+<next-ex-url>articles.htm</next-ex-url>
+<graphic-url></graphic-url>
+<font-face>Arial,sans-serif</font-face>
+<page-bg-color>#d9d9d9</page-bg-color>
+<title-color>#000000</title-color>
+<ex-bg-color>#ffffff</ex-bg-color>
+<text-color>#000000</text-color>
+<link-color>#0060A4</link-color>
+<vlink-color>#0000ff</vlink-color>
+<nav-bar-color>#0060A4</nav-bar-color>
+<remove-javascript-comments>0</remove-javascript-comments>
+<user-string-1></user-string-1>
+<user-string-2></user-string-2>
+<user-string-3></user-string-3>
+<header-code>&lt;style type=&quot;text/css&quot;&gt;
+strong{background-color: #ffff00;color:inherited;}
+&lt;/style&gt;</header-code></quandary-config-file></quandary-file>
Index: /trunk/max-javahotpot-tutorial/tutorial/examples.jms
===================================================================
--- /trunk/max-javahotpot-tutorial/tutorial/examples.jms (revision 35)
+++ /trunk/max-javahotpot-tutorial/tutorial/examples.jms (revision 35)
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<hotpot-masher-file><hotpot-file-list><version>6</version><hotpot-file><data-file-name>C:\Data\Delphi5\HP6\tutorial\jquiz1.jqz</data-file-name><output-file-name>jquiz1.htm</output-file-name><next-ex-file-name>jcloze1.htm</next-ex-file-name><output-type>2</output-type></hotpot-file><hotpot-file><data-file-name>C:\Data\Delphi5\HP6\tutorial\jcloze1.jcl</data-file-name><output-file-name>jcloze1.htm</output-file-name><next-ex-file-name>jcloze2.htm</next-ex-file-name><output-type>2</output-type></hotpot-file><hotpot-file><data-file-name>C:\Data\Delphi5\HP6\tutorial\jcloze2.jcl</data-file-name><output-file-name>jcloze2.htm</output-file-name><next-ex-file-name>jcross1.htm</next-ex-file-name><output-type>2</output-type></hotpot-file><hotpot-file><data-file-name>C:\Data\Delphi5\HP6\tutorial\jcross1.jcw</data-file-name><output-file-name>jcross1.htm</output-file-name><next-ex-file-name>jmix1.htm</next-ex-file-name><output-type>2</output-type></hotpot-file><hotpot-file><data-file-name>C:\Data\Delphi5\HP6\tutorial\jmix1.jmx</data-file-name><output-file-name>jmix1.htm</output-file-name><next-ex-file-name>jmix2.htm</next-ex-file-name><output-type>2</output-type></hotpot-file><hotpot-file><data-file-name>C:\Data\Delphi5\HP6\tutorial\jmix2.jmx</data-file-name><output-file-name>jmix2.htm</output-file-name><next-ex-file-name>jmatch1.htm</next-ex-file-name><output-type>4</output-type></hotpot-file><hotpot-file><data-file-name>C:\Data\Delphi5\HP6\tutorial\jmatch1.jmt</data-file-name><output-file-name>jmatch1.htm</output-file-name><next-ex-file-name>jmatch2.htm</next-ex-file-name><output-type>2</output-type></hotpot-file><hotpot-file><data-file-name>C:\Data\Delphi5\HP6\tutorial\jmatch2.jmt</data-file-name><output-file-name>jmatch2.htm</output-file-name><next-ex-file-name></next-ex-file-name><output-type>4</output-type></hotpot-file></hotpot-file-list><output-folder></output-folder><source-folder>C:\Data\Delphi5\HP6\source\</source-folder><unit-title>Example exercises</unit-title><link-target>0</link-target><appearance><use-masher-settings>0</use-masher-settings><graphic-url></graphic-url><font-face>Arial,Geneva</font-face><page-bg-color>#ffffff</page-bg-color><title-color>#330000</title-color><ex-bg-color>#CFD5E3</ex-bg-color><text-color>#000000</text-color><link-color>#0000ff</link-color><vlink-color>#ff00ff</vlink-color><nav-bar-color>#8096ba</nav-bar-color></appearance><nav-buttons><next-ex-caption>Next example</next-ex-caption><back-caption>&amp;#x003C;=</back-caption><contents-caption>Index</contents-caption><include-next-ex>1</include-next-ex><include-contents>0</include-contents><include-back>0</include-back><add-nav-to-non-hotpot>0</add-nav-to-non-hotpot><non-hotpot-nav-style>5</non-hotpot-nav-style></nav-buttons><user-strings><use-masher-settings>1</use-masher-settings><user-string-1></user-string-1><user-string-2></user-string-2><user-string-3></user-string-3><header-code></header-code></user-strings></hotpot-masher-file>
Index: /trunk/max-javahotpot-tutorial/tutorial/test.htm
===================================================================
--- /trunk/max-javahotpot-tutorial/tutorial/test.htm (revision 35)
+++ /trunk/max-javahotpot-tutorial/tutorial/test.htm (revision 35)
@@ -0,0 +1,1791 @@
+<?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 Martin Holmes."></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="UNREGISTERED" />
+<meta name="DC:Creator" content="Martin Holmes" />
+<meta name="DC:Title" content="A Text-Entry Quiz made with JQuiz" />
+
+
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
+
+<title>
+A Text-Entry Quiz made with JQuiz
+</title>
+
+<!-- Made with executable version 6.0 Release 1 Build 10 -->
+
+<!-- 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. */
+
+
+body{
+	font-family: Geneva,Arial;
+	background-color: #C0C0C0;
+	color: #000000;
+ 
+	margin-right: 5%;
+	margin-left: 5%;
+	font-size: small;
+}
+
+p{
+	text-align: left;
+	margin: 0px;
+	font-size: small;
+}
+
+div,span,td{
+	font-size: small;
+	color: #000000;
+}
+
+.RTLText{
+	text-align: right;
+	font-size: 150%;
+	direction: rtl;
+	font-family: "Simplified Arabic", "Traditional Arabic", "Times New Roman", Geneva,Arial; 
+}
+
+.CentredRTLText{
+	text-align: center;
+	font-size: 150%;
+	direction: rtl;
+	font-family: "Simplified Arabic", "Traditional Arabic", "Times New Roman", Geneva,Arial; 
+}
+
+button p.RTLText{
+	text-align: center;
+}
+
+.RTLGapBox{
+	text-align: right;
+	font-size: 150%;
+	direction: rtl;
+	font-family: "Times New Roman", Geneva,Arial;
+}
+
+.Guess{
+	font-weight: bold;
+}
+
+.CorrectAnswer{
+	font-weight: bold;
+}
+
+div.Titles{
+	padding: 10px;
+	text-align: center;
+	color: #000000;
+}
+
+button{
+	display: inline;
+}
+
+.ExerciseTitle{
+	font-size: large;
+	color: #000000;
+}
+
+.ExerciseSubtitle{
+	color: #000000;
+}
+
+div#Timer{
+	padding: 6px;
+	margin-left: auto;
+	margin-right: auto;
+	text-align: center;
+}
+
+span#TimerText{
+	padding: 6px;
+	border-width: 1px;
+	border-style: solid;
+	font-weight: bold;
+	display: none;
+}
+
+span.Instructions{
+
+}
+
+div.ExerciseText{
+
+}
+
+.FeedbackText{
+
+}
+
+span.LeftItem{
+	font-size: small;
+	color: #000000;
+}
+
+span.RightItem{
+	font-weight: bold;
+	font-size: small;
+	color: #000000;
+}
+
+span.CorrectMark{
+
+}
+
+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: small;
+}
+
+
+
+div.LeftContainer{
+	border-style: none;
+	padding: 2px 0px 2px 0px;
+	float: left;
+	width: 49.8%;
+	margin-bottom: 0px;
+}
+
+div.RightContainer{
+	border-style: none;
+	padding: 2px 0px 2px 0px;
+	float: right;
+	width: 49.8%;
+	margin-bottom: 0px;
+}
+
+.ReadingText{
+
+}
+
+
+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;
+	align: center;
+	padding: 0px;
+}
+
+table.FlashcardTable tr{
+	border-style: none;
+	margin: 0px;
+	padding: 0px;
+	background-color: #FFFFFF;
+}
+
+table.FlashcardTable td.Showing{
+	font-size: large;
+	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: medium;
+	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 */
+
+input{
+	font-family: Geneva,Arial;
+	font-size: larger;
+}
+
+div.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;
+}
+
+table.CrosswordGrid td{
+	width: 1.5em;
+	height: 1.5em;
+	text-align: center;
+	vertical-align: middle;
+	font-size: large;
+	padding: 0px;
+	margin: 0px;
+	border-style: solid;
+	border-width: 1px;
+	border-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;
+}
+
+.GridNum{
+	vertical-align: super;
+	font-size: x-small;
+	font-weight: bold;
+	text-decoration: none;
+	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;
+}
+
+div.Keypad button{
+	font-family: Geneva,Arial;
+	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;
+	font-size: larger;
+}
+
+.QuestionText{
+
+}
+
+.Answer{
+	font-size: 120%;
+	letter-spacing: 0.1em;
+}
+
+.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;
+}
+
+div.StdDiv{
+	background-color: #FFFFFF;
+	text-align: center;
+	font-size: small;
+	color: #000000;
+	padding: 8px;
+	border-style: solid;
+	border-width: 1px 1px 1px 1px;
+	border-color: #000000;
+	margin: 1px;
+}
+
+.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: small;
+}
+
+.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;
+	font-size: small;
+	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: large;
+}
+
+
+</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 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';
+//IE can't focus a hidden div; Moz needs to focus before display to avoid jumping
+	if (C.gecko){
+		document.getElementById('FeedbackOKButton').focus();
+	}
+	FDiv.style.display = 'block';
+
+	ShowElements(false, 'input');
+	ShowElements(false, 'select');
+
+	if (C.ie){
+		document.getElementById('FeedbackOKButton').focus();
+	}
+	
+//
+}
+
+function ShowElements(Show, TagName){
+//Special for IE bug -- hide all the form elements that will show through the popup
+	if (C.ie){
+		var Els = document.getElementsByTagName(TagName);
+		for (var i=0; i<Els.length; i++){
+			if (Show == true){
+				Els[i].style.display = 'inline';
+			}
+			else{
+				Els[i].style.display = 'none';
+			}
+		}
+	} 
+}
+
+function HideFeedback(){
+	document.getElementById('FeedbackDiv').style.display = 'none';
+	ShowElements(true, 'input');
+	ShowElements(true, 'select');
+	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 (document.documentElement && document.documentElement.scrollTop){
+		return document.documentElement.scrollTop;
+	}
+	else{
+		if (document.body){
+ 			return document.body.scrollTop;
+		}
+		else{
+			return window.pageYOffset;
+		}
+	}
+}
+
+function TopSettingWithScrollOffset(TopPercent){
+	var T = Math.floor(document.getElementsByTagName('body')[0].clientHeight * (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{
+	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){
+	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; k++) {
+			Temp[k] = Temp[k+1];
+		}
+		j--;
+	}
+	return InArray;
+}
+
+function WriteToInstructions(Feedback) {
+	Feedback = '<span class="FeedbackText">' + Feedback + '</span>';
+	document.getElementById('InstructionsDiv').innerHTML = Feedback;
+
+}
+
+
+
+
+function EscapeDoubleQuotes(InString){
+	return InString.replace(/"/g, '&quot;')
+}
+
+function FocusAButton(){
+	if (document.getElementById('CheckButton1') != null){
+		document.getElementById('CheckButton1').focus();
+	}
+	else{
+		document.getElementsByTagName('button')[0].focus();
+	}
+}
+
+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].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){
+		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 ';
+var ContinuousScoring = true;
+var CorrectFirstTime = 'Questions answered correctly first time: ';
+var ShowCorrectFirstTime = true;
+var ShuffleQs = true;
+var ShuffleAs = false;
+var DefaultRight = 'Correct!';
+var DefaultWrong = 'Sorry! Try again.';
+var QsToShow = 5;
+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 = '';
+
+function CompleteEmptyFeedback(){
+	var QNum, ANum;
+	for (QNum=0; QNum<I.length; QNum++){
+		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;
+	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];
+	}
+	
+//Now hide all except the first item
+	for (i=1; i<QArray.length; i++){
+		QArray[i].style.display = 'none';
+	}		
+	SetQNumReadout();
+}
+
+function ChangeQ(ChangeBy){
+	if (((CurrQNum + ChangeBy) < 0)||((CurrQNum + ChangeBy) >= QArray.length)){return;}
+	QArray[CurrQNum].style.display = 'none';
+	CurrQNum += ChangeBy;
+	QArray[CurrQNum].style.display = '';
+	SetQNumReadout();
+//if there's a textbox, set the focus in it
+	if (QArray[CurrQNum].getElementsByTagName('input')[0] != null){
+		QArray[CurrQNum].getElementsByTagName('input')[0].focus();
+	}
+}
+
+function SetQNumReadout(){
+	document.getElementById('QNumReadout').innerHTML = (CurrQNum+1) + ' / ' + QArray.length;
+}
+
+I=new Array();
+I[0]=new Array();I[0][0]=10;
+I[0][1]='';
+I[0][2]='1';
+I[0][3]=new Array();
+I[0][3][0]=new Array('Hint','',1,100,1);
+I[0][3][1]=new Array('Hint button','',1,100,1);
+I[0][3][2]=new Array('The Hint button','',1,100,1);
+I[0][3][3]=new Array('"Hint"','',1,100,1);
+I[1]=new Array();I[1][0]=20;
+I[1][1]='';
+I[1][2]='1';
+I[1][3]=new Array();
+I[1][3][0]=new Array('produce','',1,100,1);
+I[1][3][1]=new Array('create','',1,100,1);
+I[1][3][2]=new Array('type','',1,100,1);
+I[1][3][3]=new Array('give','',1,100,1);
+I[1][3][4]=new Array('make','',1,100,1);
+I[1][3][5]=new Array('enter','',1,100,1);
+I[1][3][6]=new Array('insert','',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('any number','',1,100,1);
+I[2][3][1]=new Array('an infinite number','',1,100,1);
+I[2][3][2]=new Array('as many as you like','',1,100,1);
+I[2][3][3]=new Array('millions','',1,100,1);
+I[2][3][4]=new Array('there is no limit','',1,100,1);
+I[2][3][5]=new Array('no limit','',1,100,1);
+I[2][3][6]=new Array('unlimited numbers','',1,100,1);
+I[2][3][7]=new Array('an unlimited number','',1,100,1);
+I[2][3][8]=new Array('unlimited','',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('making','',1,100,1);
+I[3][3][1]=new Array('creating','',1,100,1);
+I[3][3][2]=new Array('producing','',1,100,1);
+I[3][3][3]=new Array('writing','',1,100,1);
+I[3][3][4]=new Array('authoring','',1,100,1);
+I[3][3][5]=new Array('constructing','',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('JavaScript','',1,100,1);
+I[4][3][1]=new Array('Java script','',1,100,1);
+
+
+function StartUp(){
+	RemoveBottomNavBarForIE();
+	
+
+	
+
+	
+	CompleteEmptyFeedback();
+
+	SetUpQuestions();
+	ClearTextBoxes();
+	CreateStatusArray();
+	
+
+	
+}
+
+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
+		}
+	}
+}
+
+
+
+
+
+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]);
+			}
+		}
+	}
+	Score = Math.floor((TotalScore/TotalWeighting)*100);
+}
+
+function CheckFinished(){
+	var FB = '';
+
+	var AllDone = true;
+	for (var QNum=0; QNum<State.length; QNum++){
+		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][0] >= 1){
+					CFT++;
+				}
+			}
+			FB += '<br />' + CorrectFirstTime + ' ' + CFT + '/' + State.length;
+		}
+		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][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 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){
+//		if (CurrBox.style.display != 'none'){
+			CurrBox.value += Chars;
+//		}
+	}
+}
+
+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);
+//Figure out how much of the end is correct
+	var j = this.WorkingGuess.length-1;
+	var k = this.WorkingAnswer.length-1;
+	while ((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="Answer">' + 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="Answer">' + 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
+	var G = 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 (CA.MatchNum > -1){
+		State[QNum][5] += String.fromCharCode(65+CA.MatchNum) + ',';
+	}
+
+//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);
+//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 />' +  '<span class="Answer">' + AlsoCorrectList + '</span>';
+				}
+			}	
+		
+//Get the overall score and add it to the feedback
+			if (ContinuousScoring == true){
+				CalculateOverallScore();
+				CA.Feedback += '<br />' + YourScoreIs + ' ' + Score + '%.';
+				WriteToInstructions(YourScoreIs + ' ' + Score + '%.');
+			}
+			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;} 
+	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 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 + '<br /><span class="Answer">' + Ans + '</span>';
+	
+//Display feedback
+	ShowMessage(Ans);
+	
+//Set the score for this question to 0 if no 
+	if (State[QNum][0] < 1){
+		State[QNum][0] = 0;
+	}
+
+//Get the first correct answer
+	var FirstAns = GetFirstCorrectAnswer(QNum);
+	
+//Replace the textbox
+	ReplaceGuessBox(QNum, FirstAns);
+	
+//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 + '<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)[0]);
+		}
+	}
+}
+
+
+
+
+
+
+
+
+
+//-->
+
+//]]>
+
+</script>
+
+
+</head>
+
+<body onload="StartUp()" id="TheBody">
+
+<!-- BeginTopNavButtons -->
+
+
+<div class="NavButtonBar">
+
+
+<button class="NavButton" onfocus="NavBtnOver(this)" onblur="NavBtnOut(this)" onmouseover="NavBtnOver(this)" onmouseout="NavBtnOut(this)" onmousedown="NavBtnDown(this)" onmouseup="NavBtnOut(this)" onclick="history.back(); return false;">&lt;=</button>
+
+
+
+<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>
+
+
+
+<button class="NavButton" onfocus="NavBtnOver(this)" onblur="NavBtnOut(this)" onmouseover="NavBtnOver(this)" onmouseout="NavBtnOut(this)" onmousedown="NavBtnDown(this)" onmouseup="NavBtnOut(this)" onclick="location='jcross1.htm'; return false;">=&gt;</button>
+
+
+</div>
+
+
+<!-- EndTopNavButtons -->
+
+<div class="Titles">
+	<h2 class="ExerciseTitle">A Text-Entry Quiz made with JQuiz</h2>
+	<h3 class="ExerciseSubtitle">Short-answer quiz</h3>
+
+
+</div>
+
+<div id="InstructionsDiv" class="StdDiv">
+	<p id="Instructions">Type your answer for each question, then press "Check". If you need help, you can click on the "Hint" button to get a free letter.</p>
+</div>
+
+
+<div class="LeftContainer">
+
+	<div id="Reading" class="StdDiv">
+
+		<div id="ReadingDiv">
+<h3 class="ExerciseSubtitle">Reading</h3><p>Text blah tosh garbage crap nonsense utter rubbish. Text blah tosh garbage crap nonsense utter rubbish. Text blah tosh garbage crap nonsense utter rubbish. Text blah tosh garbage crap nonsense utter rubbish. Text blah tosh garbage crap nonsense utter rubbish. Text blah tosh garbage crap nonsense utter rubbish. Text blah tosh garbage crap nonsense utter rubbish. Text blah tosh garbage crap nonsense utter rubbish. Text blah tosh garbage crap nonsense utter rubbish. Text blah tosh garbage crap nonsense utter rubbish. Text blah tosh garbage crap nonsense utter rubbish. <br /><br />Text blah tosh garbage crap nonsense utter rubbish. Text blah tosh garbage crap nonsense utter rubbish. Text blah tosh garbage crap nonsense utter rubbish. Text blah tosh garbage crap nonsense utter rubbish. Text blah tosh garbage crap nonsense utter rubbish. Text blah tosh garbage crap nonsense utter rubbish. Text blah tosh garbage crap nonsense utter rubbish. Text blah tosh garbage crap nonsense utter rubbish. <br /><br />Text blah tosh garbage crap nonsense utter rubbish. Text blah tosh garbage crap nonsense utter rubbish. Text blah tosh garbage crap nonsense utter rubbish. Text blah tosh garbage crap nonsense utter rubbish. Text blah tosh garbage crap nonsense utter rubbish. Text blah tosh garbage crap nonsense utter rubbish. Text blah tosh garbage crap nonsense utter rubbish. Text blah tosh garbage crap nonsense utter rubbish. </p>
+		</div>
+	</div>
+
+</div>
+
+
+<div class="RightContainer">
+
+
+
+<div id="MainDiv" class="StdDiv">
+ 
+<div 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;">&lt;=</button>
+
+<span id="QNumReadout" class="QNum">&nbsp;</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;">=&gt;</button>
+<br />
+</div>
+
+</div>
+ 
+<ol class="QuizQuestions" id="Questions">
+<li class="QuizQuestion" id="Q_0"><p class="QuestionText">Which button should you click on if you want the exercise to help you by giving you one letter in the answer?</p><div class="ShortAnswer" id="Q_0_SA"><form method="post" action="" onsubmit="return false;"><div><input type="text" id="Q_0_Guess" onfocus="TrackFocus('Q_0_Guess')" onblur="LeaveGap()" class="GapBox" size="15"></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(0)">Check</button><button class="FuncButton" onfocus="FuncBtnOver(this)" onblur="FuncBtnOut(this)" onmouseover="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)"  onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)" onclick="ShowHint(0)">Hint</button><button class="FuncButton" onfocus="FuncBtnOver(this)" onblur="FuncBtnOut(this)" onmouseover="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)"  onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)" onclick="ShowAnswers(0)">Show answer</button></div></form></div></li>
+<li class="QuizQuestion" id="Q_1"><p class="QuestionText">What word would be appropriate in this sentence:<br /><br />"JQuiz is the tool to use when you want your students to be able to ________ the answer themselves, rather than selecting it from a list."</p><div class="ShortAnswer" id="Q_1_SA"><form method="post" action="" onsubmit="return false;"><div><input type="text" id="Q_1_Guess" onfocus="TrackFocus('Q_1_Guess')" onblur="LeaveGap()" class="GapBox" size="9"></input><br /><br /><button class="FuncButton" onfocus="FuncBtnOver(this)" onblur="FuncBtnOut(this)" onmouseover="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)"  onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)" onclick="CheckShortAnswer(1)">Check</button><button class="FuncButton" onfocus="FuncBtnOver(this)" onblur="FuncBtnOut(this)" onmouseover="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)"  onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)" onclick="ShowHint(1)">Hint</button><button class="FuncButton" onfocus="FuncBtnOver(this)" onblur="FuncBtnOut(this)" onmouseover="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)"  onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)" onclick="ShowAnswers(1)">Show answer</button></div></form></div></li>
+<li class="QuizQuestion" id="Q_2"><p class="QuestionText">A quiz made with JQuiz will accept more than one correct answer for each question. How many correct answers can you include?</p><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="GapBox" size="19"></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)">Check</button><button class="FuncButton" onfocus="FuncBtnOver(this)" onblur="FuncBtnOut(this)" onmouseover="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)"  onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)" onclick="ShowHint(2)">Hint</button><button class="FuncButton" onfocus="FuncBtnOver(this)" onblur="FuncBtnOut(this)" onmouseover="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)"  onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)" onclick="ShowAnswers(2)">Show answer</button></div></form></div></li>
+<li class="QuizQuestion" id="Q_3"><p class="QuestionText">With JBC, it takes a long time to make a quiz, but the student can do it in a very short time. With JQuiz, the situation is reversed: ________ a quiz doesn't take long, but doing the quiz takes longer.</p><div class="ShortAnswer" id="Q_3_SA"><form method="post" action="" onsubmit="return false;"><div><input type="text" id="Q_3_Guess" onfocus="TrackFocus('Q_3_Guess')" onblur="LeaveGap()" class="GapBox" size="12"></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(3)">Check</button><button class="FuncButton" onfocus="FuncBtnOver(this)" onblur="FuncBtnOut(this)" onmouseover="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)"  onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)" onclick="ShowHint(3)">Hint</button><button class="FuncButton" onfocus="FuncBtnOver(this)" onblur="FuncBtnOut(this)" onmouseover="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)"  onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)" onclick="ShowAnswers(3)">Show answer</button></div></form></div></li>
+<li class="QuizQuestion" id="Q_4"><p class="QuestionText">What scripting language do the Hot Potatoes use to make the quizzes interactive?</p><div class="ShortAnswer" id="Q_4_SA"><form method="post" action="" onsubmit="return false;"><div><input type="text" id="Q_4_Guess" onfocus="TrackFocus('Q_4_Guess')" onblur="LeaveGap()" class="GapBox" size="11"></input><br /><br /><button class="FuncButton" onfocus="FuncBtnOver(this)" onblur="FuncBtnOut(this)" onmouseover="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)"  onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)" onclick="CheckShortAnswer(4)">Check</button><button class="FuncButton" onfocus="FuncBtnOver(this)" onblur="FuncBtnOut(this)" onmouseover="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)"  onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)" onclick="ShowHint(4)">Hint</button><button class="FuncButton" onfocus="FuncBtnOver(this)" onblur="FuncBtnOut(this)" onmouseover="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)"  onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)" onclick="ShowAnswers(4)">Show answer</button></div></form></div></li></ol>
+
+
+
+</div>
+
+
+</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;">&nbsp;OK&nbsp;</button>
+</div>
+
+<!-- BeginBottomNavButtons -->
+
+
+<div class="NavButtonBar" id="BottomNavBar">
+
+
+<button class="NavButton" onfocus="NavBtnOver(this)" onblur="NavBtnOut(this)" onmouseover="NavBtnOver(this)" onmouseout="NavBtnOut(this)" onmousedown="NavBtnDown(this)" onmouseup="NavBtnOut(this)" onclick="history.back(); return false;">&lt;=</button>
+
+
+
+<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>
+
+
+
+<button class="NavButton" onfocus="NavBtnOver(this)" onblur="NavBtnOut(this)" onmouseover="NavBtnOver(this)" onmouseout="NavBtnOut(this)" onmousedown="NavBtnDown(this)" onmouseup="NavBtnut(this)" onclick="location='jcross1.htm'; return false;">=&gt;</button>
+
+
+</div>
+
+
+<!-- EndBottomNavButtons -->
+
+<!-- BeginSubmissionForm -->
+
+<!-- EndSubmissionForm -->
+
+</body>
+
+</html>
Index: /trunk/max-javahotpot-tutorial/tutorial/jcross1.htm
===================================================================
--- /trunk/max-javahotpot-tutorial/tutorial/jcross1.htm (revision 35)
+++ /trunk/max-javahotpot-tutorial/tutorial/jcross1.htm (revision 35)
@@ -0,0 +1,1472 @@
+<?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 Ismail Ali Gago."></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="Ismail Ali Gago" />
+<meta name="DC:Creator" content="UNREGISTERED" />
+<meta name="DC:Title" content="Crucigrama elaborado con JCross" />
+
+
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
+
+<title>
+Crucigrama elaborado con JCross
+</title>
+
+<!-- Made with executable version 6.0 Release 2 Build 0 -->
+
+<!-- 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. */
+
+
+body{
+	font-family: Geneva,Arial;
+	background-color: #ffffff;
+	color: #000000;
+ 
+	margin-right: 5%;
+	margin-left: 5%;
+	font-size: small;
+}
+
+p{
+	text-align: left;
+	margin: 0px;
+	font-size: small;
+}
+
+div,span,td{
+	font-size: small;
+	color: #000000;
+}
+
+.RTLText{
+	text-align: right;
+	font-size: 150%;
+	direction: rtl;
+	font-family: "Simplified Arabic", "Traditional Arabic", "Times New Roman", Geneva,Arial; 
+}
+
+.CentredRTLText{
+	text-align: center;
+	font-size: 150%;
+	direction: rtl;
+	font-family: "Simplified Arabic", "Traditional Arabic", "Times New Roman", Geneva,Arial; 
+}
+
+button p.RTLText{
+	text-align: center;
+}
+
+.RTLGapBox{
+	text-align: right;
+	font-size: 150%;
+	direction: rtl;
+	font-family: "Times New Roman", Geneva,Arial;
+}
+
+.Guess{
+	font-weight: bold;
+}
+
+.CorrectAnswer{
+	font-weight: bold;
+}
+
+div.Titles{
+	padding: 10px;
+	text-align: center;
+	color: #330000;
+}
+
+button{
+	display: inline;
+}
+
+.ExerciseTitle{
+	font-size: large;
+	color: #330000;
+}
+
+.ExerciseSubtitle{
+	color: #330000;
+}
+
+div#Timer{
+	padding: 6px;
+	margin-left: auto;
+	margin-right: auto;
+	text-align: center;
+}
+
+span#TimerText{
+	padding: 6px;
+	border-width: 1px;
+	border-style: solid;
+	font-weight: bold;
+	display: none;
+}
+
+span.Instructions{
+
+}
+
+div.ExerciseText{
+
+}
+
+.FeedbackText{
+	color: #330000;
+}
+
+span.LeftItem{
+	font-size: small;
+	color: #000000;
+}
+
+span.RightItem{
+	font-weight: bold;
+	font-size: small;
+	color: #000000;
+}
+
+span.CorrectMark{
+
+}
+
+div.Feedback {
+	background-color: #ffffff;
+	left: 33%;
+	width: 34%;
+	top: 33%;
+	z-index: 1;
+	border-style: solid;
+	border-width: 1px;
+	padding: 5px;
+	text-align: center;
+	color: #330000;
+	position: absolute;
+	display: none;
+	font-size: small;
+}
+
+
+
+
+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;
+	align: center;
+	padding: 0px;
+}
+
+table.FlashcardTable tr{
+	border-style: none;
+	margin: 0px;
+	padding: 0px;
+	background-color: #ffe8dd;
+}
+
+table.FlashcardTable td.Showing{
+	font-size: large;
+	text-align: center;
+	width: 50%;
+	display: table-cell;
+	padding: 2em;
+	margin: 0px;
+	border-style: solid;
+	border-width: 1px;
+	color: #000000;
+	background-color: #ffe8dd;
+}
+
+table.FlashcardTable td.Hidden{
+	display: none;
+}
+
+/* JMix styles */
+div#SegmentDiv{
+	margin-top: 2em;
+	margin-bottom: 2em;
+	text-align: center;
+}
+
+a.ExSegment{
+	font-size: medium;
+	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: #330000;
+	width: 80%;
+}
+
+/* JCloze styles */
+
+input{
+	font-family: Geneva,Arial;
+	font-size: larger;
+}
+
+.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;
+}
+
+table.CrosswordGrid td{
+	width: 1.5em;
+	height: 1.5em;
+	text-align: center;
+	vertical-align: middle;
+	font-size: large;
+	padding: 0px;
+	margin: 0px;
+	border-style: solid;
+	border-width: 1px;
+	border-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;
+}
+
+.GridNum{
+	vertical-align: super;
+	font-size: x-small;
+	font-weight: bold;
+	text-decoration: none;
+	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;
+}
+
+div.Keypad button{
+	font-family: Geneva,Arial;
+	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;
+	font-size: larger;
+}
+
+.QuestionText{
+
+}
+
+.Answer{
+	font-size: 120%;
+	letter-spacing: 0.1em;
+}
+
+.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;
+}
+
+div.StdDiv{
+	background-color: #ffe8dd;
+	text-align: center;
+	font-size: small;
+	color: #000000;
+	padding: 8px;
+	border-style: solid;
+	border-width: 1px 1px 1px 1px;
+	border-color: #000000;
+	margin: 1px;
+}
+
+.FuncButton {
+	text-align: center;
+	border-style: solid;
+
+	border-left-color: #fff3ee;
+	border-top-color: #fff3ee;
+	border-right-color: #7f746e;
+	border-bottom-color: #7f746e;
+	color: #000000;
+	background-color: #ffe8dd;
+
+	border-width: 2px;
+	padding: 3px 6px 3px 6px;
+	cursor: pointer;
+}
+
+.FuncButtonUp {
+	color: #ffe8dd;
+	text-align: center;
+	border-style: solid;
+
+	border-left-color: #fff3ee;
+	border-top-color: #fff3ee;
+	border-right-color: #7f746e;
+	border-bottom-color: #7f746e;
+
+	background-color: #000000;
+	color: #ffe8dd;
+	border-width: 2px;
+	padding: 3px 6px 3px 6px;
+	cursor: pointer;
+}
+
+.FuncButtonDown {
+	color: #ffe8dd;
+	text-align: center;
+	border-style: solid;
+
+	border-left-color: #7f746e;
+	border-top-color: #7f746e;
+	border-right-color: #fff3ee;
+	border-bottom-color: #fff3ee;
+	background-color: #000000;
+	color: #ffe8dd;
+
+	border-width: 2px;
+	padding: 3px 6px 3px 6px;
+	cursor: pointer;
+}
+
+/*BeginNavBarStyle*/
+
+div.NavButtonBar{
+	background-color: #ffd2bb;
+	text-align: center;
+	margin: 2px 0px 2px 0px;
+	clear: both;
+	font-size: small;
+}
+
+.NavButton {
+	border-style: solid;
+	
+	border-left-color: #ffe8dd;
+	border-top-color: #ffe8dd;
+	border-right-color: #7f695d;
+	border-bottom-color: #7f695d;
+	background-color: #ffd2bb;
+	color: #000000;
+
+	border-width: 2px;
+	cursor: pointer;	
+}
+
+.NavButtonUp {
+	border-style: solid;
+
+	border-left-color: #ffe8dd;
+	border-top-color: #ffe8dd;
+	border-right-color: #7f695d;
+	border-bottom-color: #7f695d;
+	color: #ffd2bb;
+	background-color: #000000;
+
+	border-width: 2px;
+	cursor: pointer;	
+}
+
+.NavButtonDown {
+	border-style: solid;
+
+	border-left-color: #7f695d;
+	border-top-color: #7f695d;
+	border-right-color: #ffe8dd;
+	border-bottom-color: #ffe8dd;
+	color: #ffd2bb;
+	background-color: #000000;
+
+	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;
+	font-size: small;
+	padding: 5px;
+	border-style: solid;
+	border-width: 1px;
+	color: #000000;
+	background-color: #ffe8dd;
+	left: -50px;
+	top: -50px;
+	overflow: visible;
+}
+
+.rtl{
+	text-align: right;
+	font-size: large;
+}
+
+
+</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';
+//IE can't focus a hidden div; Moz needs to focus before display to avoid jumping
+	if (C.gecko){
+		document.getElementById('FeedbackOKButton').focus();
+	}
+	FDiv.style.display = 'block';
+
+	ShowElements(false, 'input');
+	ShowElements(false, 'select');
+	ShowElements(false, 'object');
+	if (C.ie){
+		document.getElementById('FeedbackOKButton').focus();
+	}
+	
+//
+}
+
+function ShowElements(Show, TagName){
+//Special for IE bug -- hide all the form elements that will show through the popup
+	if (C.ie){
+		var Els = document.getElementsByTagName(TagName);
+		for (var i=0; i<Els.length; i++){
+			if (Show == true){
+				Els[i].style.display = 'inline';
+			}
+			else{
+				Els[i].style.display = 'none';
+			}
+		}
+	} 
+}
+
+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 (document.documentElement && document.documentElement.scrollTop){
+		return document.documentElement.scrollTop;
+	}
+	else{
+		if (document.body){
+ 			return document.body.scrollTop;
+		}
+		else{
+			return window.pageYOffset;
+		}
+	}
+}
+
+function GetViewportHeight(){
+	if (window.innerWidth){
+		return window.innerWidth;
+	}
+	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{
+	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){
+	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; k++) {
+			Temp[k] = Temp[k+1];
+		}
+		j--;
+	}
+	return InArray;
+}
+
+function WriteToInstructions(Feedback) {
+//	Feedback = '<span class="FeedbackText">' + Feedback + '</span>';
+	document.getElementById('InstructionsDiv').innerHTML = Feedback;
+
+}
+
+
+
+
+function EscapeDoubleQuotes(InString){
+	return InString.replace(/"/g, '&quot;')
+}
+
+function FocusAButton(){
+	if (document.getElementById('CheckButton1') != null){
+		document.getElementById('CheckButton1').focus();
+	}
+	else{
+		document.getElementsByTagName('button')[0].focus();
+	}
+}
+
+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].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){
+		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();
+	}
+}
+
+
+
+//JCROSS CORE JAVASCRIPT CODE
+
+
+
+var InGap = false;
+
+
+var CurrentBox = null;
+var Feedback = '';
+var AcrossCaption = 'Horizontales:';
+var DownCaption = 'Verticales:';
+var Correct = 'Correcto, bien hecho.';
+var Incorrect = 'Algunas de sus respuestas son incorrectas. Las casillas incorrectas se han dejado en blanco.'; 
+var GiveHint = 'Se ha a&#x00F1;adido un letra correcta.';
+var YourScoreIs = 'Su puntuaci&#x00F3;n es';
+var BuiltGrid = '';
+var BuiltExercise = '';
+var Penalties = 0;
+var Score = 0;
+var InTextBox = false;
+var Locked = false;
+var TimeOver = false;
+
+var InputStuff = '<form method="post" action="" onsubmit="return false;"><span class="ClueNum">[strClueNum]: </span>';
+InputStuff += '[strClue] <input onfocus="CurrentBox=this;InTextBox=true;" onblur="InTextBox=false;" id="[strBoxId]" type="edit" size="[strEditSize]" maxlength="[strMaxLength]"></input>';
+InputStuff += '<button class="FuncButton" onfocus="FuncBtnOver(this)" onblur="FuncBtnOut(this)" onmouseover="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)" onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)" onclick="EnterGuess([strParams])">Introducir</button>';
+InputStuff += '<button class="FuncButton" onfocus="FuncBtnOver(this)" onblur="FuncBtnOut(this)" onmouseover="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)" onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)" onclick="ShowHint([strParams])">Pista</button>';
+InputStuff += '</form>';
+
+var CurrBoxElement = null;
+var Finished = false;
+
+function StartUp(){
+	RemoveBottomNavBarForIE();
+	
+
+
+
+
+
+	StartTimer();
+
+
+}
+
+function GetAnswerLength(Across,x,y){
+	Result = 0;
+	if (Across == false){
+		while ((x<L.length)&&(L[x][y].length > 0)){
+			Result += L[x][y].length;
+			x++;
+		} 
+		return Result;
+	}
+	else{
+		while ((y<L[x].length)&&(L[x][y].length > 0)){
+			Result += L[x][y].length;
+			y++;
+		} 	
+		return Result;
+	}
+}
+
+function GetEditSize(Across,x,y){
+	var Len = GetAnswerLength(Across,x,y);
+	if (IsCJK(L[x][y].charCodeAt(0))){
+		Len *= 2;
+	}
+	return Len;
+}
+
+function ShowClue(ClueNum,x,y){
+	var Result = '';
+	var Temp;
+	var strParams;
+	var Clue = document.getElementById('Clue_A_' + ClueNum);
+	if (Clue != null){
+		Temp = InputStuff.replace(/\[ClueNum\]/g, ClueNum);
+		Temp = Temp.replace(/\[strClueNum\]/g, AcrossCaption + ' ' + ClueNum);
+		strParams = 'true,' + ClueNum + ',' + x + ',' + y + ',\'[strBoxId]\'';
+		Temp = Temp.replace(/\[strParams\]/g, strParams);
+		Temp = Temp.replace(/\[strBoxId\]/g, 'GA_' + ClueNum + '_' + x + '_' + y);
+		Temp = Temp.replace(/\[strEditSize\]/g, GetEditSize(true,x,y));
+		Temp = Temp.replace(/\[strMaxLength\]/g, GetAnswerLength(true,x,y));
+		Temp = Temp.replace(/\[strClue\]/g, Clue.innerHTML, Temp);
+		Result += Temp;
+	}
+	Clue = document.getElementById('Clue_D_' + ClueNum);
+	if (Clue != null){
+		Temp = InputStuff.replace(/\[ClueNum\]/g, ClueNum);
+		Temp = Temp.replace(/\[strClueNum\]/g, DownCaption + ' ' + ClueNum);
+		strParams = 'false,' + ClueNum + ',' + x + ',' + y + ',\'[strBoxId]\'';
+		Temp = Temp.replace(/\[strParams\]/g, strParams);
+		Temp = Temp.replace(/\[strBoxId\]/g, 'GD_' + ClueNum + '_' + x + '_' + y);
+		Temp = Temp.replace(/\[strEditSize\]/g, GetAnswerLength(false,x,y));
+		Temp = Temp.replace(/\[strClue\]/g, Clue.innerHTML, Temp);
+		Result += Temp;
+	}
+	document.getElementById('ClueEntry').innerHTML = Result;
+}
+
+function EnterGuess(Across,ClueNum,x,y,BoxId){
+	if (document.getElementById(BoxId) != null){
+		var Guess = document.getElementById(BoxId).value;
+		var AnsLength = GetAnswerLength(Across,x,y);
+		EnterAnswer(Guess,Across,AnsLength,x,y);
+	}
+}
+
+function SplitStringToPerceivedChars(InString, PC){
+	var Temp = InString.charAt(0);
+	if (InString.length > 1){
+		for (var i=1; i<InString.length; i++){
+			if (IsCombiningDiacritic(InString.charCodeAt(i)) == true){
+				Temp += InString.charAt(i);
+			}
+			else{
+				PC.push(Temp);
+				Temp = InString.charAt(i);
+			}
+		}
+	}
+	PC.push(Temp);
+}
+
+function EnterAnswer(Guess,Across,AnsLength,x,y){
+	Guess = Guess.toUpperCase();
+
+	var PC = new Array();
+	SplitStringToPerceivedChars(Guess, PC);
+	
+	var i=x;
+	var j=y;
+	var Letter = 0;
+	while (Letter < AnsLength){
+		if (Letter < PC.length){
+			G[i][j] = PC[Letter];
+			if (document.getElementById('L_' + i + '_' + j) != null){
+				document.getElementById('L_' + i + '_' + j).innerHTML = PC[Letter];
+			}
+		}
+		if (Across == true){
+			j++;
+		}
+		else{
+			i++;
+		}
+		Letter++;
+	}
+}
+
+function SetGridSquareValue(x,y,Val){
+	var GridId = 'L_' + x + '_' + y;
+	if (document.getElementById(GridId) != null){
+		document.getElementById(GridId).innerHTML = Val;
+	}
+}
+
+function ShowHint(Across,ClueNum,x,y,BoxId){
+	var i=x;
+	var j=y;
+	var OutString = '';
+	if (Across==true){
+		while (j<L[i].length){
+			if (L[i][j] != ''){
+				OutString += L[i][j];
+				if (G[i][j] != L[i][j]){
+					G[i][j] = L[i][j];
+					Penalties++;
+					break;
+				}
+			}
+			else{
+				break;
+			}
+		j++;
+		}
+	}
+	else{
+		while (i<L.length){
+			if (L[i][j] != ''){
+				OutString += L[i][j];
+				if (G[i][j] != L[i][j]){
+					G[i][j] = L[i][j];
+					Penalties++;
+					break;
+				}
+			}
+			else{
+				break;
+			}
+		i++;
+		}
+	}
+	if (document.getElementById(BoxId) != null){
+		document.getElementById(BoxId).value = OutString;
+	}
+}
+
+L = new Array();
+L[0] = new Array('','','','','','','J','M','I','X');
+L[1] = new Array('','','','','','','C','','','');
+L[2] = new Array('J','A','V','A','S','C','R','I','P','T');
+L[3] = new Array('Q','','','','','','O','','','');
+L[4] = new Array('U','','','','J','','S','','W','');
+L[5] = new Array('I','','','','M','A','S','H','E','R');
+L[6] = new Array('Z','','','','A','','','','B','');
+L[7] = new Array('','','','','T','','','','','');
+L[8] = new Array('','','','J','C','L','O','Z','E','');
+L[9] = new Array('','','','','H','','','','','');
+
+
+CL = new Array();
+CL[0] = new Array(0,0,0,0,0,0,1,0,0,0);
+CL[1] = new Array(0,0,0,0,0,0,0,0,0,0);
+CL[2] = new Array(2,0,0,0,0,0,0,0,0,0);
+CL[3] = new Array(0,0,0,0,0,0,0,0,0,0);
+CL[4] = new Array(0,0,0,0,3,0,0,0,4,0);
+CL[5] = new Array(0,0,0,0,5,0,0,0,0,0);
+CL[6] = new Array(0,0,0,0,0,0,0,0,0,0);
+CL[7] = new Array(0,0,0,0,0,0,0,0,0,0);
+CL[8] = new Array(0,0,0,6,0,0,0,0,0,0);
+CL[9] = new Array(0,0,0,0,0,0,0,0,0,0);
+
+
+G = new Array();
+G[0] = new Array('','','','','','','','','','');
+G[1] = new Array('','','','','','','','','','');
+G[2] = new Array('','','','','','','','','','');
+G[3] = new Array('','','','','','','','','','');
+G[4] = new Array('','','','','','','','','','');
+G[5] = new Array('','','','','','','','','','');
+G[6] = new Array('','','','','','','','','','');
+G[7] = new Array('','','','','','','','','','');
+G[8] = new Array('','','','','','','','','','');
+G[9] = new Array('','','','','','','','','','');
+
+
+function CheckAnswers(){
+	if (Locked == true){return;}
+
+	var AllCorrect = true;
+	var TotLetters = 0;
+	var CorrectLetters = 0;
+
+//Check each letter
+	for (var i=0; i<L.length; i++){
+		for (var j=0; j<L[i].length; j++){
+			if (L[i][j] != ''){
+				TotLetters++;
+				if (G[i][j] != L[i][j]){
+					G[i][j] = '';
+//Blank that square in the grid
+					SetGridSquareValue(i,j,'');
+					AllCorrect = false;
+				}
+				else{
+					CorrectLetters++;
+				}
+			}
+		}
+	}
+
+	Score = Math.floor(((CorrectLetters-Penalties) * 100)/TotLetters);
+
+//Compile the output
+	var Output = '';
+
+	if (AllCorrect == true){
+		Output = Correct + '<br />';
+	}
+
+	Output += YourScoreIs + ' ' + Score + '%.<br />';
+	if (AllCorrect == false){
+		Output += Incorrect;
+		Penalties++;
+	}
+
+	ShowMessage(Output);
+	WriteToInstructions(Output);
+	
+	if (AllCorrect == true){
+
+		Finished = true;
+		setTimeout('Finish()', SubmissionTimeout);
+		return;
+	}
+}
+
+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.submit();
+	}
+}
+
+function TypeChars(Chars){
+	if (CurrentBox != null){
+		CurrentBox.value += Chars;
+	}
+}
+
+
+function TimesUp() {
+	document.getElementById('Timer').innerHTML = 'El tiempo ha terminado';
+
+	TimeOver = true;
+	Finished = true;
+	CheckAnswers();
+	Locked = true;
+}
+
+
+
+
+
+
+//CODE FOR HANDLING TIMER
+
+//Timer code
+var Seconds = 300;
+var TimeOver = false;
+var Interval = null;
+
+function StartTimer(){
+	Interval = window.setInterval('DownTime()',1000);
+	document.getElementById('TimerText').style.display = 'inline';
+}
+
+function DownTime(){
+	var ss = Seconds % 60;
+	if (ss<10){
+		ss='0' + ss + '';
+	}
+
+	var mm = Math.floor(Seconds / 60);
+
+	if (document.getElementById('Timer') == null){
+		return;
+	}
+
+	document.getElementById('TimerText').innerHTML = mm + ':' + ss;
+	if (Seconds < 1){
+		window.clearInterval(Interval);
+		TimeOver = true;
+		TimesUp();
+	}
+	Seconds--;
+}
+
+
+
+
+
+
+//-->
+
+//]]>
+
+</script>
+
+
+</head>
+
+<body onload="StartUp()" id="TheBody">
+
+<!-- BeginTopNavButtons -->
+
+
+<div class="NavButtonBar" id="TopNavBar">
+
+
+
+
+
+
+<button class="NavButton" onfocus="NavBtnOver(this)" onblur="NavBtnOut(this)" onmouseover="NavBtnOver(this)" onmouseout="NavBtnOut(this)" onmousedown="NavBtnDown(this)" onmouseup="NavBtnOut(this)" onclick="location='jmix1.htm'; return false;">Siguiente ejemplo</button>
+
+
+</div>
+
+
+
+<!-- EndTopNavButtons -->
+
+<div class="Titles">
+	<h2 class="ExerciseTitle">Crucigrama elaborado con JCross<br /></h2>
+	<h3 class="ExerciseSubtitle">Crucigrama</h3>
+
+<div id="Timer"><span id="TimerText">&nbsp;&nbsp;</span></div>
+
+
+</div>
+
+<div id="InstructionsDiv" class="StdDiv">
+	<p id="Instructions">Complete el crucigrama, despu&#x00E9;s pulse sobre "Comprobar" para ver sus respuestas. En caso necesario, puede pulsar en el bot&#x00F3;n "Pista" para ver una de las letras que forman la palabra. Pulse sobre el n&#x00FA;mero correspondiente para ver una descripci&#x00F3;n sobr dicho t&#x00E9;rmino.<br /><br />This crossword also demonstrates the exercise timer, which you can add to any exercise.</p>
+</div>
+
+
+
+<div id="MainDiv" class="StdDiv">
+
+
+
+<div id="ClueEntry">
+
+</div>
+
+<!-- This top buttons hidden; reveal if required -->
+<!--
+<button id="CheckButton1" class="FuncButton" onmouseover="FuncBtnOver(this)" onfocus="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)" onblur="FuncBtnOut(this)" onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)" onclick="CheckAnswers()">&nbsp;Comprobar&nbsp;</button>
+
+ -->
+ 
+<table class="CrosswordGrid">
+<tbody>
+
+<tr id="Row_0"><td class="BlankCell">&nbsp;</td><td class="BlankCell">&nbsp;</td><td class="BlankCell">&nbsp;</td><td class="BlankCell">&nbsp;</td><td class="BlankCell">&nbsp;</td><td class="BlankCell">&nbsp;</td><td class="NumLetterCell"><a href="javascript:void(0);" class="GridNum" onclick="ShowClue(1,0,6)">1</a><span class="NumLetterCellText" id="L_0_6" onclick="ShowClue(1,0,6)">&nbsp;&nbsp;&nbsp;</span></td><td class="LetterOnlyCell"><span id="L_0_7">&nbsp;</span></td><td class="LetterOnlyCell"><span id="L_0_8">&nbsp;</span></td><td class="LetterOnlyCell"><span id="L_0_9">&nbsp;</span></td></tr><tr id="Row_1"><td class="BlankCell">&nbsp;</td><td class="BlankCell">&nbsp;</td><td class="BlankCell">&nbsp;</td><td class="BlankCell">&nbsp;</td><td class="BlankCell">&nbsp;</td><td class="BlankCell">&nbsp;</td><td class="LetterOnlyCell"><span id="L_1_6">&nbsp;</span></td><td class="BlankCell">&nbsp;</td><td class="BlankCell">&nbsp;</td><td class="BlankCell">&nbsp;</td></tr><tr id="Row_2"><td class="NumLetterCell"><a href="javascript:void(0);" class="GridNum" onclick="ShowClue(2,2,0)">2</a><span class="NumLetterCellText" id="L_2_0" onclick="ShowClue(2,2,0)">&nbsp;&nbsp;&nbsp;</span></td><td class="LetterOnlyCell"><span id="L_2_1">&nbsp;</span></td><td class="LetterOnlyCell"><span id="L_2_2">&nbsp;</span></td><td class="LetterOnlyCell"><span id="L_2_3">&nbsp;</span></td><td class="LetterOnlyCell"><span id="L_2_4">&nbsp;</span></td><td class="LetterOnlyCell"><span id="L_2_5">&nbsp;</span></td><td class="LetterOnlyCell"><span id="L_2_6">&nbsp;</span></td><td class="LetterOnlyCell"><span id="L_2_7">&nbsp;</span></td><td class="LetterOnlyCell"><span id="L_2_8">&nbsp;</span></td><td class="LetterOnlyCell"><span id="L_2_9">&nbsp;</span></td></tr><tr id="Row_3"><td class="LetterOnlyCell"><span id="L_3_0">&nbsp;</span></td><td class="BlankCell">&nbsp;</td><td class="BlankCell">&nbsp;</td><td class="BlankCell">&nbsp;</td><td class="BlankCell">&nbsp;</td><td class="BlankCell">&nbsp;</td><td class="LetterOnlyCell"><span id="L_3_6">&nbsp;</span></td><td class="BlankCell">&nbsp;</td><td class="BlankCell">&nbsp;</td><td class="BlankCell">&nbsp;</td></tr><tr id="Row_4"><td class="LetterOnlyCell"><span id="L_4_0">&nbsp;</span></td><td class="BlankCell">&nbsp;</td><td class="BlankCell">&nbsp;</td><td class="BlankCell">&nbsp;</td><td class="NumLetterCell"><a href="javascript:void(0);" class="GridNum" onclick="ShowClue(3,4,4)">3</a><span class="NumLetterCellText" id="L_4_4" onclick="ShowClue(3,4,4)">&nbsp;&nbsp;&nbsp;</span></td><td class="BlankCell">&nbsp;</td><td class="LetterOnlyCell"><span id="L_4_6">&nbsp;</span></td><td class="BlankCell">&nbsp;</td><td class="NumLetterCell"><a href="javascript:void(0);" class="GridNum" onclick="ShowClue(4,4,8)">4</a><span class="NumLetterCellText" id="L_4_8" onclick="ShowClue(4,4,8)">&nbsp;&nbsp;&nbsp;</span></td><td class="BlankCell">&nbsp;</td></tr><tr id="Row_5"><td class="LetterOnlyCell"><span id="L_5_0">&nbsp;</span></td><td class="BlankCell">&nbsp;</td><td class="BlankCell">&nbsp;</td><td class="BlankCell">&nbsp;</td><td class="NumLetterCell"><a href="javascript:void(0);" class="GridNum" onclick="ShowClue(5,5,4)">5</a><span class="NumLetterCellText" id="L_5_4" onclick="ShowClue(5,5,4)">&nbsp;&nbsp;&nbsp;</span></td><td class="LetterOnlyCell"><span id="L_5_5">&nbsp;</span></td><td class="LetterOnlyCell"><span id="L_5_6">&nbsp;</span></td><td class="LetterOnlyCell"><span id="L_5_7">&nbsp;</span></td><td class="LetterOnlyCell"><span id="L_5_8">&nbsp;</span></td><td class="LetterOnlyCell"><span id="L_5_9">&nbsp;</span></td></tr><tr id="Row_6"><td class="LetterOnlyCell"><span id="L_6_0">&nbsp;</span></td><td class="BlankCell">&nbsp;</td><td class="BlankCell">&nbsp;</td><td class="BlankCell">&nbsp;</td><td class="LetterOnlyCell"><span id="L_6_4">&nbsp;</span></td><td class="BlankCell">&nbsp;</td><td class="BlankCell">&nbsp;</td><td class="BlankCell">&nbsp;</td><td class="LetterOnlyCell"><span id="L_6_8">&nbsp;</span></td><td class="BlankCell">&nbsp;</td></tr><tr id="Row_7"><td class="BlankCell">&nbsp;</td><td class="BlankCell">&nbsp;</td><td class="BlankCell">&nbsp;</td><td class="BlankCell">&nbsp;</td><td class="LetterOnlyCell"><span id="L_7_4">&nbsp;</span></td><td class="BlankCell">&nbsp;</td><td class="BlankCell">&nbsp;</td><td class="BlankCell">&nbsp;</td><td class="BlankCell">&nbsp;</td><td class="BlankCell">&nbsp;</td></tr><tr id="Row_8"><td class="BlankCell">&nbsp;</td><td class="BlankCell">&nbsp;</td><td class="BlankCell">&nbsp;</td><td class="NumLetterCell"><a href="javascript:void(0);" class="GridNum" onclick="ShowClue(6,8,3)">6</a><span class="NumLetterCellText" id="L_8_3" onclick="ShowClue(6,8,3)">&nbsp;&nbsp;&nbsp;</span></td><td class="LetterOnlyCell"><span id="L_8_4">&nbsp;</span></td><td class="LetterOnlyCell"><span id="L_8_5">&nbsp;</span></td><td class="LetterOnlyCell"><span id="L_8_6">&nbsp;</span></td><td class="LetterOnlyCell"><span id="L_8_7">&nbsp;</span></td><td class="LetterOnlyCell"><span id="L_8_8">&nbsp;</span></td><td class="BlankCell">&nbsp;</td></tr><tr id="Row_9"><td class="BlankCell">&nbsp;</td><td class="BlankCell">&nbsp;</td><td class="BlankCell">&nbsp;</td><td class="BlankCell">&nbsp;</td><td class="LetterOnlyCell"><span id="L_9_4">&nbsp;</span></td><td class="BlankCell">&nbsp;</td><td class="BlankCell">&nbsp;</td><td class="BlankCell">&nbsp;</td><td class="BlankCell">&nbsp;</td><td class="BlankCell">&nbsp;</td></tr>
+
+</tbody>
+</table>
+
+<button id="CheckButton2" class="FuncButton" onmouseover="FuncBtnOver(this)" onfocus="FuncBtnOver(this)" onmouseout="FuncBtnOut(this)" onblur="FuncBtnOut(this)" onmousedown="FuncBtnDown(this)" onmouseup="FuncBtnOut(this)" onclick="CheckAnswers()">&nbsp;Comprobar&nbsp;</button>
+
+<table id="Clues" style="display: none;">
+<tbody>
+<tr>
+<td>
+
+<table class="ClueList">
+<tbody id="CluesAcross">
+<tr><td colspan="2"><h3 class="ExerciseSubtitle">Horizontales:</h3></td></tr>
+
+<tr><td class="ClueNum">1. </td><td id="Clue_A_1" class="Clue">The program used to make jumbled-sentence exercises.</td></tr><tr><td class="ClueNum">2. </td><td id="Clue_A_2" class="Clue">The scripting language used to create these exercises.</td></tr><tr><td class="ClueNum">5. </td><td id="Clue_A_5" class="Clue">The program used to build linked sequences of exercises (units or chapters).</td></tr><tr><td class="ClueNum">6. </td><td id="Clue_A_6" class="Clue">The program used to make gap-fill exercises.</td></tr>
+
+</tbody>
+</table>
+
+</td>
+
+<td>
+
+<table class="ClueList">
+<tbody id="CluesDown">
+<tr><td colspan="2"><h3 class="ExerciseSubtitle">Verticales:</h3></td></tr>
+
+<tr><td class="ClueNum">1. </td><td id="Clue_D_1" class="Clue">The program used to make this crossword.</td></tr><tr><td class="ClueNum">2. </td><td id="Clue_D_2" class="Clue">The program used to make exercises with short-answer or multiple-choice questions.</td></tr><tr><td class="ClueNum">3. </td><td id="Clue_D_3" class="Clue">The program used to make matching exercises.</td></tr><tr><td class="ClueNum">4. </td><td id="Clue_D_4" class="Clue">The Hot Potatoes programs make ________ pages.</td></tr>
+
+</tbody>
+</table>
+
+</td>
+</tr>
+</tbody>
+</table>
+
+</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;">&nbsp;OK&nbsp;</button>
+</div>
+
+<!-- BeginBottomNavButtons -->
+
+
+<div class="NavButtonBar" id="BottomNavBar">
+
+
+
+
+
+
+<button class="NavButton" onfocus="NavBtnOver(this)" onblur="NavBtnOut(this)" onmouseover="NavBtnOver(this)" onmouseout="NavBtnOut(this)" onmousedown="NavBtnDown(this)" onmouseup="NavBtnOut(this)" onclick="location='jmix1.htm'; return false;">Siguiente ejemplo</button>
+
+
+</div>
+
+
+
+<!-- EndBottomNavButtons -->
+
+<!-- BeginSubmissionForm -->
+
+<!-- EndSubmissionForm -->
+
+</body>
+
+</html>
Index: /trunk/max-javahotpot-tutorial/tutorial/jcloze1.jcl
===================================================================
--- /trunk/max-javahotpot-tutorial/tutorial/jcloze1.jcl (revision 35)
+++ /trunk/max-javahotpot-tutorial/tutorial/jcloze1.jcl (revision 35)
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<hotpot-jcloze-file>
+<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">
+  <rdf:Description rdf:about="">
+    <dc:creator>Ismail Ali Gago</dc:creator>
+    <dc:creator>UNREGISTERED</dc:creator>
+    <dc:title>Ejercicio de completar huecos realizado con JCloze</dc:title>
+  </rdf:Description>
+</rdf:RDF><version>6</version>
+
+<data>
+<title>Ejercicio de completar huecos realizado con JCloze</title>
+
+<timer><seconds>60</seconds><include-timer>0</include-timer></timer>
+
+<reading>
+<include-reading>0</include-reading>
+<reading-title></reading-title>
+<reading-text></reading-text>
+
+</reading>
+
+<gap-fill>Este es un ejercicio sencillo para completar huecos realizado con el programa <question-record><question></question><answer><text>JCloze</text><feedback></feedback><correct>1</correct></answer><clue>El nombre del programa utilizado para hacer este ejercicio</clue></question-record>. El usuario introduce sus respuestas en los huecos, despu&amp;#x00E9;s pulsa el <question-record><question></question><answer><text>bot&amp;#x00F3;n</text><feedback></feedback><correct>1</correct></answer><clue>Algo sobre lo que se pulsa para que ocurra algo en un programa de ordenador</clue></question-record> &quot;Comprobar&quot; para observar las respuestas correctas, y para obtener la puntuaci&amp;#x00F3;n. Para cada hueco, se puede establecer cualquier n&amp;#x00FA;mero de respuestas <question-record><question></question><answer><text>correctas</text><feedback></feedback><correct>1</correct></answer><clue></clue></question-record>. Por ejemplo, este <question-record><question></question><answer><text>hueco</text><feedback></feedback><correct>1</correct></answer><clue></clue></question-record> permite las respuestas &quot;hueco&quot;, &quot;espacio&quot;, &quot;blanco&quot; y &quot;ranura&quot;. Pruebe con alguna de ellas y <question-record><question></question><answer><text>ver&amp;#x00E1;</text><feedback></feedback><correct>1</correct></answer><clue></clue></question-record>. Si el usuario necesita ayuda, podr&amp;#x00E1; <question-record><question></question><answer><text>pulsar</text><feedback></feedback><correct>1</correct></answer><clue></clue></question-record>  en el bot&amp;#x00F3;n &quot;Pista&quot; para obtener una letra de la palabra. Para ver una de las letras de la palabra en alguno de los huecos, sit&amp;#x00FA;e el cursor en el hueco deseado antes de presionar en el bot&amp;#x00F3;n &quot;Pista&quot;. El bot&amp;#x00F3;n &quot;Pista&quot; es opcional -- si desea que los ejercicios resulten m&amp;#x00E1;s dif&amp;#x00ED;ciles para sus <question-record><question></question><answer><text>alumnos</text><feedback></feedback><correct>1</correct></answer><clue>Las personas a las que ense&amp;#x00F1;a.</clue></question-record>, no incluya este bot&amp;#x00F3;n. Tambi&amp;#x00E9;n puede incluir, si lo desea <question-record><question></question><answer><text>descripciones</text><feedback></feedback><correct>1</correct></answer><clue>Informaci&amp;#x00F3;n que le ayudar&amp;#x00E1; a descubrir la palabra</clue></question-record> concretas para cada hueco. Por &amp;#x00FA;ltimo, puede hacer que la respuesta se de como correcta o err&amp;#x00F3;nea dependiendo de que se escriba en may&amp;#x00FA;sculas o en min&amp;#x00FA;sculas. En este ejercicio da lo mismo que se escriban las respuestas en may&amp;#x00FA;sculas o en <question-record><question></question><answer><text>min&amp;#x00FA;sculas</text><feedback></feedback><correct>1</correct></answer><clue></clue></question-record>.</gap-fill>
+</data>
+
+<hotpot-config-file>
+<jcloze>
+<exercise-subtitle>Ejercicios de completar huecos</exercise-subtitle>
+<instructions>Complete los huecos, despu&amp;#x00E9;s pulse &quot;Comprobar&quot; para revisar sus respuestas. Utilice el bot&amp;#x00F3;n &quot;Pista&quot; para averiguar una letra de la palabra si es que la palabra le resulta complicada. Tambi&amp;#x00E9;n puede pulsar en el bot&amp;#x00F3;n &quot;[?]&quot; para ver una descripci&amp;#x00F3;n de la palabra. &amp;#x00A1;Tenga en cuenta que perder&amp;#x00E1; puntos si solicita pistas o descripciones!</instructions>
+<guesses-correct>Correcto</guesses-correct>
+<guesses-incorrect>Algunas de sus respuestas no son correctas. Las respuestas incorrectas se han dejado en su sitio para que las corrija.</guesses-incorrect>
+<next-correct-letter>La siguiente letra correcta ha sido a&amp;#x00F1;adida a la respuesta.</next-correct-letter>
+<include-hint>1</include-hint>
+<case-sensitive>0</case-sensitive>
+<include-word-list>0</include-word-list>
+<include-word-list>0</include-word-list>
+<minimum-gap-size>6</minimum-gap-size>
+<next-ex-url>jcloze2.htm</next-ex-url>
+<send-email>0</send-email>
+<top-frame-size>25</top-frame-size><top-frame-units>%</top-frame-units>
+<include-clues>1</include-clues>
+<include-keypad>1</include-keypad>
+<separate-javascript-file>0</separate-javascript-file>
+</jcloze>
+
+<global>
+
+<times-up>Your time is over!</times-up>
+<check-caption>Comprobar</check-caption>
+<ok-caption>OK</ok-caption>
+<hint-caption>Pista</hint-caption>
+<clue-caption>[?]</clue-caption>
+<process-for-rtl>0</process-for-rtl>
+<your-score-is>Su puntuaci&amp;#x00F3;n es</your-score-is>
+<keypad-characters></keypad-characters>
+<next-ex-caption>Siguiente ejemplo</next-ex-caption>
+<back-caption>&amp;#x003C;=</back-caption>
+<contents-caption>Index</contents-caption>
+<include-next-ex>1</include-next-ex>
+<include-contents>0</include-contents>
+<include-back>0</include-back>
+<contents-url>contents.htm</contents-url>
+<contents-url>contents.htm</contents-url>
+<graphic-url></graphic-url>
+<font-face>Geneva,Arial</font-face>
+<page-bg-color>#ffffff</page-bg-color>
+<title-color>#003300</title-color>
+<ex-bg-color>#aaddaa</ex-bg-color>
+<text-color>#000000</text-color>
+<link-color>#0000ff</link-color>
+<vlink-color>#0000cc</vlink-color>
+<nav-bar-color>#006600</nav-bar-color>
+<formmail-url>http://web.uvic.ca/cgi-bin/FormMail.pl</formmail-url>
+<email>mholmes@uvic.ca</email>
+<name-please>Please enter your name:</name-please>
+<user-string-1></user-string-1>
+<user-string-2></user-string-2>
+<user-string-3></user-string-3>
+<header-code></header-code>
+</global>
+</hotpot-config-file>
+</hotpot-jcloze-file>
Index: /trunk/max-javahotpot-tutorial/tutorial/jcloze2.jcl
===================================================================
--- /trunk/max-javahotpot-tutorial/tutorial/jcloze2.jcl (revision 35)
+++ /trunk/max-javahotpot-tutorial/tutorial/jcloze2.jcl (revision 35)
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<hotpot-jcloze-file>
+<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">
+  <rdf:Description rdf:about="">
+    <dc:creator>Ismail Ali Gago</dc:creator>
+    <dc:creator>UNREGISTERED</dc:creator>
+    <dc:title>Ejercicio de rellenar huecos con preguntas individuales</dc:title>
+  </rdf:Description>
+</rdf:RDF><version>6</version>
+
+<data>
+<title>Ejercicio de rellenar huecos con preguntas individuales</title>
+
+<timer><seconds>60</seconds><include-timer>0</include-timer></timer>
+
+<reading>
+<include-reading>0</include-reading>
+<reading-title></reading-title>
+<reading-text></reading-text>
+
+</reading>
+
+<gap-fill>
+&amp;#x003C;ol&amp;#x003E;
+&amp;#x003C;li&amp;#x003E;Este ejercicio se ha realizado con <question-record><question></question><answer><text>JCloze</text><feedback></feedback><correct>1</correct></answer><clue></clue></question-record>.&amp;#x003C;/li&amp;#x003E;
+&amp;#x003C;li&amp;#x003E;Al igual que las dem&amp;#x00E1;s aplicaciones de Hot Potatoes, JCloze le permite controlar los <question-record><question></question><answer><text>colores</text><feedback></feedback><correct>1</correct></answer><clue></clue></question-record>  de la p&amp;#x00E1;gina Web, as&amp;#x00ED; podr&amp;#x00E1; cambiar la apariencia de sus p&amp;#x00E1;ginas facilmente.&amp;#x003C;/li&amp;#x003E;
+&amp;#x003C;li&amp;#x003E;Tambi&amp;#x00E9;n puede introducir c&amp;#x00F3;digo <question-record><question></question><answer><text>HTML</text><feedback></feedback><correct>1</correct></answer><answer><text>XHTML</text><feedback></feedback><correct>1</correct></answer><clue></clue></question-record> directamente en las programas de Hot Potatoes, para crear efectos como esta lista numerada de preguntas.&amp;#x003C;/li&amp;#x003E;
+&amp;#x003C;li&amp;#x003E;Si usted quiere crear una serie de <question-record><question></question><answer><text>preguntas</text><feedback></feedback><correct>1</correct></answer><clue></clue></question-record> numeradas como &amp;#x00E9;sta, pero quiere que los alumnos puedan comprobar las respuestas de una en una, deber&amp;#x00E1; utilizar JQuiz en vez de JCloze.&amp;#x003C;/li&amp;#x003E;
+&amp;#x003C;/ol&amp;#x003E;</gap-fill>
+</data>
+
+<hotpot-config-file>
+<jcloze>
+<exercise-subtitle>Ejercicios de rellenar huecos</exercise-subtitle>
+<instructions>Complete los huecos, despu&amp;#x00E9;s pulse &quot;Comprobar&quot; para revisar sus respuestas. Utilice el bot&amp;#x00F3;n &quot;Pista&quot; para averiguar una letra de la palabra si es que la palabra le resulta complicada. Tambi&amp;#x00E9;n puede pulsar en el bot&amp;#x00F3;n &quot;[?]&quot; para ver una descripci&amp;#x00F3;n de la palabra. &amp;#x00A1;Tenga en cuenta que perder&amp;#x00E1; puntos si solicita pistas o descripciones!</instructions>
+<guesses-correct>Correcto</guesses-correct>
+<guesses-incorrect>Algunas de sus respuestas no son correctas. Las respuestas incorrectas se han dejado en su sitio para que las corrija.</guesses-incorrect>
+<next-correct-letter>La siguiente letra correcta ha sido a&amp;#x00F1;adida a la respuesta.</next-correct-letter>
+<include-hint>1</include-hint>
+<case-sensitive>0</case-sensitive>
+<include-word-list>0</include-word-list>
+<include-word-list>0</include-word-list>
+<minimum-gap-size>6</minimum-gap-size>
+<next-ex-url>jcross1.htm</next-ex-url>
+<send-email>0</send-email>
+<top-frame-size>25</top-frame-size><top-frame-units>%</top-frame-units>
+<include-clues>1</include-clues>
+<include-keypad>1</include-keypad>
+<separate-javascript-file>0</separate-javascript-file>
+</jcloze>
+
+<global>
+
+<times-up>Your time is over!</times-up>
+<check-caption>Comprobar</check-caption>
+<ok-caption>OK</ok-caption>
+<hint-caption>Pista</hint-caption>
+<clue-caption>[?]</clue-caption>
+<process-for-rtl>0</process-for-rtl>
+<your-score-is>Su puntuaci&amp;#x00F3;n es</your-score-is>
+<keypad-characters></keypad-characters>
+<next-ex-caption>Siguiente ejemplo</next-ex-caption>
+<back-caption>&amp;#x003C;=</back-caption>
+<contents-caption>Index</contents-caption>
+<include-next-ex>1</include-next-ex>
+<include-contents>0</include-contents>
+<include-back>0</include-back>
+<contents-url>contents.htm</contents-url>
+<contents-url>contents.htm</contents-url>
+<graphic-url></graphic-url>
+<font-face>Geneva,Arial</font-face>
+<page-bg-color>#FFFFFF</page-bg-color>
+<title-color>#330000</title-color>
+<ex-bg-color>#DDAAAA</ex-bg-color>
+<text-color>#000000</text-color>
+<link-color>#0000FF</link-color>
+<vlink-color>#0000CC</vlink-color>
+<nav-bar-color>#660000</nav-bar-color>
+<formmail-url>http://web.uvic.ca/cgi-bin/FormMail.pl</formmail-url>
+<email>mholmes@uvic.ca</email>
+<name-please>Please enter your name:</name-please>
+<user-string-1></user-string-1>
+<user-string-2></user-string-2>
+<user-string-3></user-string-3>
+<header-code></header-code>
+</global>
+</hotpot-config-file>
+</hotpot-jcloze-file>
Index: /trunk/max-javahotpot-tutorial/tutorial/jmatch1.jmt
===================================================================
--- /trunk/max-javahotpot-tutorial/tutorial/jmatch1.jmt (revision 35)
+++ /trunk/max-javahotpot-tutorial/tutorial/jmatch1.jmt (revision 35)
@@ -0,0 +1,127 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<hotpot-jmatch-file>
+<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">
+  <rdf:Description rdf:about="">
+    <dc:creator>Ismail Ali Gago</dc:creator>
+    <dc:creator>UNREGISTERED</dc:creator>
+    <dc:title>Ejercicio de asociación realizado con JMatch</dc:title>
+  </rdf:Description>
+</rdf:RDF><version>6</version>
+
+<data>
+<title>Ejercicio de asociaci&amp;#x00F3;n realizado con JMatch</title>
+
+<timer><seconds>60</seconds><include-timer>0</include-timer></timer>
+
+<reading>
+<include-reading>0</include-reading>
+<reading-title></reading-title>
+<reading-text></reading-text>
+
+</reading>
+
+<matching-exercise>
+<default-right-item>???</default-right-item>
+
+<pair>
+<left-item><text>Primero:</text>
+<fixed>1</fixed>
+</left-item>
+<right-item><text>Arranque una Papata</text>
+<fixed>0</fixed>
+</right-item></pair>
+
+<pair>
+<left-item><text>Segundo:</text>
+<fixed>1</fixed>
+</left-item>
+<right-item><text>Introudzca sus datos, preguntas, respuestas, etc...</text>
+<fixed>0</fixed>
+</right-item></pair>
+
+<pair>
+<left-item><text>Tercero:</text>
+<fixed>1</fixed>
+</left-item>
+<right-item><text>Guarde sus datos.</text>
+<fixed>0</fixed>
+</right-item></pair>
+
+<pair>
+<left-item><text>Cuarto:</text>
+<fixed>1</fixed>
+</left-item>
+<right-item><text>Defina la correcta configuraci&amp;#x00F3;n que usted desee</text>
+<fixed>0</fixed>
+</right-item></pair>
+
+<pair>
+<left-item><text>Quinto:</text>
+<fixed>1</fixed>
+</left-item>
+<right-item><text>Pulse en &quot;Archivo / Crar p&amp;#x00E1;gina web&quot;.</text>
+<fixed>0</fixed>
+</right-item></pair>
+
+<pair>
+<left-item><text>Por &amp;#x00FA;ltimo:</text>
+<fixed>1</fixed>
+</left-item>
+<right-item><text>Rel&amp;#x00E1;jese y t&amp;#x00F3;mese un caf&amp;#x00E9;.</text>
+<fixed>0</fixed>
+</right-item></pair>
+</matching-exercise>
+</data>
+
+<hotpot-config-file>
+<jmatch>
+<exercise-subtitle>Ejercicio de emparejamiento.</exercise-subtitle>
+<instructions>Seleccione la secuencia correcta de etapas para crear un ejercicio de Hot Potatoes, seleccionando la opci&amp;#x00F3;n correcta en los men&amp;#x00FA;s desplegables </instructions>
+<next-ex-url>jmatch2.htm</next-ex-url>
+<send-email>0</send-email>
+<top-frame-size>25</top-frame-size><top-frame-units>%</top-frame-units>
+<show-limited-questions>0</show-limited-questions>
+<questions-to-show>1</questions-to-show>
+<shuffle-questions>0</shuffle-questions>
+<separate-javascript-file>0</separate-javascript-file>
+<next-caption>Siguiente</next-caption>
+<delete-caption>Borrar</delete-caption>
+<guess-correct>Correcto, bien hecho</guess-correct>
+<guess-incorrect>Lo siento, pruebe de nuevo. Los emparejamentos incorrectos han sido eliminados</guess-incorrect>
+</jmatch>
+
+<global>
+<your-score-is>Su puntuaci&amp;#x00F3;n es  </your-score-is>
+<correct-indicator>:-)</correct-indicator>
+<incorrect-indicator>:-(</incorrect-indicator>
+<process-for-rtl>0</process-for-rtl>
+<times-up>Your time is over!</times-up>
+<check-caption>Comprobar</check-caption>
+<ok-caption>OK</ok-caption>
+<next-ex-caption>Siguiente ejemplo</next-ex-caption>
+<back-caption>&amp;#x003C;=</back-caption>
+<contents-caption>&amp;#x00CD;ndice</contents-caption>
+<include-next-ex>1</include-next-ex>
+<include-contents>0</include-contents>
+<include-back>0</include-back>
+<contents-url>contents.htm</contents-url>
+<graphic-url></graphic-url>
+<font-face>Geneva,Arial</font-face>
+<page-bg-color>#ffffff</page-bg-color>
+<title-color>#660066</title-color>
+<ex-bg-color>#eeccee</ex-bg-color>
+<text-color>#330033</text-color>
+<link-color>#0000cc</link-color>
+<vlink-color>#0000ff</vlink-color>
+<nav-bar-color>#330033</nav-bar-color>
+<formmail-url>http://web.uvic.ca/cgi-bin/FormMail.pl</formmail-url>
+<email>mholmes@uvic.ca</email>
+<name-please>Please enter your name:</name-please>
+<user-string-1></user-string-1>
+<user-string-2></user-string-2>
+<user-string-3></user-string-3>
+<header-code></header-code>
+</global>
+</hotpot-config-file>
+</hotpot-jmatch-file>
Index: /trunk/max-javahotpot-tutorial/tutorial/jmatch2.jmt
===================================================================
--- /trunk/max-javahotpot-tutorial/tutorial/jmatch2.jmt (revision 35)
+++ /trunk/max-javahotpot-tutorial/tutorial/jmatch2.jmt (revision 35)
@@ -0,0 +1,129 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<hotpot-jmatch-file>
+<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">
+  <rdf:Description rdf:about="">
+    <dc:creator>Ismail Ali Gago</dc:creator>
+    <dc:creator>UNREGISTERED</dc:creator>
+    <dc:title>Ejercicio de emparejamiento realizado con JMatch</dc:title>
+  </rdf:Description>
+</rdf:RDF><version>6</version>
+
+<data>
+<title>Ejercicio de emparejamiento realizado con JMatch</title>
+
+<timer><seconds>60</seconds><include-timer>0</include-timer></timer>
+
+<reading>
+<include-reading>0</include-reading>
+<reading-title></reading-title>
+<reading-text></reading-text>
+
+</reading>
+
+<matching-exercise>
+<default-right-item>???</default-right-item>
+
+<pair>
+<left-item><text>&amp;#x003C;img src=&quot;beef-vt.gif&quot; alt=&quot;beef-vt.gif&quot; title=&quot;beef-vt&quot; width=&quot;50&quot; height=&quot;31&quot;&amp;#x003E;&amp;#x003C;/img&amp;#x003E;</text>
+<fixed>1</fixed>
+</left-item>
+<right-item><text>carne</text>
+<fixed>0</fixed>
+</right-item></pair>
+
+<pair>
+<left-item><text>&amp;#x003C;img src=&quot;carrots-vt.gif&quot; alt=&quot;carrots-vt.gif&quot; title=&quot;carrots-vt&quot; width=&quot;50&quot; height=&quot;15&quot;&amp;#x003E;&amp;#x003C;/img&amp;#x003E;</text>
+<fixed>1</fixed>
+</left-item>
+<right-item><text>zanahorias</text>
+<fixed>0</fixed>
+</right-item></pair>
+
+<pair>
+<left-item><text>&amp;#x003C;img src=&quot;lettuce-vt.gif&quot; alt=&quot;lettuce-vt.gif&quot; title=&quot;lettuce-vt&quot; width=&quot;50&quot; height=&quot;46&quot;&amp;#x003E;&amp;#x003C;/img&amp;#x003E;</text>
+<fixed>1</fixed>
+</left-item>
+<right-item><text>lechuga</text>
+<fixed>0</fixed>
+</right-item></pair>
+
+<pair>
+<left-item><text>&amp;#x003C;img src=&quot;beans-red-vt.gif&quot; alt=&quot;beans-red-vt.gif&quot; title=&quot;beans-red-vt&quot; width=&quot;50&quot; height=&quot;38&quot;&amp;#x003E;&amp;#x003C;/img&amp;#x003E;</text>
+<fixed>1</fixed>
+</left-item>
+<right-item><text>jud&amp;#x00ED;as</text>
+<fixed>1</fixed>
+</right-item></pair>
+
+<pair>
+<left-item><text>&amp;#x003C;img src=&quot;pie-vt.gif&quot; alt=&quot;pie-vt.gif&quot; title=&quot;pie-vt&quot; width=&quot;50&quot; height=&quot;25&quot;&amp;#x003E;&amp;#x003C;/img&amp;#x003E;</text>
+<fixed>1</fixed>
+</left-item>
+<right-item><text>pastel</text>
+<fixed>0</fixed>
+</right-item></pair>
+
+<pair>
+<left-item><text>&amp;#x003C;img src=&quot;tomato-vt.gif&quot; alt=&quot;tomato-vt.gif&quot; title=&quot;tomato-vt&quot; width=&quot;50&quot; height=&quot;42&quot;&amp;#x003E;&amp;#x003C;/img&amp;#x003E;</text>
+<fixed>1</fixed>
+</left-item>
+<right-item><text>tomate</text>
+<fixed>0</fixed>
+</right-item></pair>
+</matching-exercise>
+</data>
+
+<hotpot-config-file>
+<jmatch>
+<exercise-subtitle>Ejercicio de emparejamiento. Arrastrar y Soltar</exercise-subtitle>
+<instructions>Arrastre los t&amp;#x00E9;rminos de la derecha hasta emparejarlos con las im&amp;#x00E1;genes de la izquierda.
+
+Cuando termine este ejercicio, cierre esta ventana para volver al tutorial.</instructions>
+<next-ex-url>2min.htm</next-ex-url>
+<send-email>0</send-email>
+<top-frame-size>25</top-frame-size><top-frame-units>%</top-frame-units>
+<show-limited-questions>0</show-limited-questions>
+<questions-to-show>1</questions-to-show>
+<shuffle-questions>0</shuffle-questions>
+<separate-javascript-file>0</separate-javascript-file>
+<next-caption>Siguiente</next-caption>
+<delete-caption>Borrar</delete-caption>
+<guess-correct>Correcto, bien hecho.</guess-correct>
+<guess-incorrect>&amp;#x00A1;Lo siento! Pruebe otra vez. Los emparejamientos incorrectos han sido eliminados.</guess-incorrect>
+</jmatch>
+
+<global>
+<your-score-is>Su puntuaci&amp;#x00F3;n es  </your-score-is>
+<correct-indicator>:-)</correct-indicator>
+<incorrect-indicator>.-(</incorrect-indicator>
+<process-for-rtl>0</process-for-rtl>
+<times-up>Your time is over!</times-up>
+<check-caption>Comprobar</check-caption>
+<ok-caption>OK</ok-caption>
+<next-ex-caption>=&amp;#x003E;</next-ex-caption>
+<back-caption>&amp;#x003C;=</back-caption>
+<contents-caption>&amp;#x00CD;ndice</contents-caption>
+<include-next-ex>0</include-next-ex>
+<include-contents>0</include-contents>
+<include-back>0</include-back>
+<contents-url>contents.htm</contents-url>
+<graphic-url></graphic-url>
+<font-face>Geneva,Arial</font-face>
+<page-bg-color>#ffffff</page-bg-color>
+<title-color>#003300</title-color>
+<ex-bg-color>#aaddaa</ex-bg-color>
+<text-color>#000000</text-color>
+<link-color>#0000cc</link-color>
+<vlink-color>#0000ff</vlink-color>
+<nav-bar-color>#006600</nav-bar-color>
+<formmail-url>http://web.uvic.ca/cgi-bin/FormMail.pl</formmail-url>
+<email>mholmes@uvic.ca</email>
+<name-please>Please enter your name:</name-please>
+<user-string-1></user-string-1>
+<user-string-2></user-string-2>
+<user-string-3></user-string-3>
+<header-code></header-code>
+</global>
+</hotpot-config-file>
+</hotpot-jmatch-file>
Index: /trunk/max-javahotpot-tutorial/tutorial/jmix1.jmx
===================================================================
--- /trunk/max-javahotpot-tutorial/tutorial/jmix1.jmx (revision 35)
+++ /trunk/max-javahotpot-tutorial/tutorial/jmix1.jmx (revision 35)
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<hotpot-jmix-file>
+<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">
+  <rdf:Description rdf:about="">
+    <dc:creator>Ismail Ali Gago</dc:creator>
+    <dc:creator>UNREGISTERED</dc:creator>
+    <dc:title>Ejercicio de ordenar frases realizado con JMix</dc:title>
+  </rdf:Description>
+</rdf:RDF><version>6</version>
+
+<data>
+<title>Ejercicio de ordenar frases realizado con JMix</title>
+
+<reading>
+<include-reading>0</include-reading>
+<reading-title></reading-title>
+<reading-text></reading-text>
+
+</reading>
+
+<jumbled-order-exercise><main-order><segment>Hot Potatoes</segment>
+<segment>est&amp;#x00E1;</segment>
+<segment>disponible</segment>
+<segment>para</segment>
+<segment>Windows</segment>
+<segment>y</segment>
+<segment>Macintosh</segment>
+<segment>.</segment>
+</main-order><alternate>Hot Potatoes est&amp;#x00E1; disponible para Macintosh y Windows.</alternate>
+</jumbled-order-exercise>
+</data>
+
+<hotpot-config-file>
+<jmix>
+<exercise-subtitle>Ejercicio de ordenar palabras</exercise-subtitle>
+<instructions>Coloque las palabras del ejercicio en orden hasta formar una frase. Cuando crea que la frase est&amp;#x00E1; ordenada, pulse en &quot;Comprobar&quot; para ver las respuestas. Si lo considera necesario, pulse en &quot;Pista&quot; para encontrar la siguiente palabra correcta.</instructions>
+<guess-correct>Correcto</guess-correct>
+<guess-incorrect>Lo siento, pruebe otra vez</guess-incorrect>
+<this-much-correct>Esta parte de su respuesta es corecta:</this-much-correct>
+<next-correct-part>La siguiente palabra correcta es:</next-correct-part>
+<remaining-words>Palabras restantes:</remaining-words>
+<click-to-add>Pulse sobre las palabras para a&amp;#x00F1;adirlas a la frase</click-to-add>
+<also-correct>Estas respuestas son tambi&amp;#x00E9;n correctas:</also-correct>
+<include-undo>1</include-undo>
+<include-restart>1</include-restart>
+<include-hint>1</include-hint>
+<next-ex-url>jmix2.htm</next-ex-url>
+<send-email>0</send-email>
+<top-frame-size>25</top-frame-size><top-frame-units>%</top-frame-units>
+<capitalize-first-letter>1</capitalize-first-letter>
+<separate-javascript-file>0</separate-javascript-file>
+</jmix>
+
+<global>
+
+<times-up>Your time is over!</times-up>
+<check-caption>Comprobar</check-caption>
+<ok-caption>OK</ok-caption>
+<undo-caption>Deshacer</undo-caption>
+<hint-caption>Pista</hint-caption>
+<restart-caption>Volver a empezar</restart-caption>
+<your-score-is>Su puntuaci&amp;#x00F3;n es:</your-score-is>
+<show-also-correct>0</show-also-correct>
+<process-for-rtl>0</process-for-rtl>
+<next-ex-caption>Siguiente ejemplo</next-ex-caption>
+<back-caption>&amp;#x003C;=</back-caption>
+<contents-caption>&amp;#x00CD;ndice</contents-caption>
+<include-next-ex>1</include-next-ex>
+<include-contents>0</include-contents>
+<include-back>0</include-back>
+<contents-url>contents.htm</contents-url>
+<contents-url>contents.htm</contents-url>
+<graphic-url></graphic-url>
+<font-face>Geneva,Arial</font-face>
+<page-bg-color>#ffffff</page-bg-color>
+<title-color>#330000</title-color>
+<ex-bg-color>#bfcaae</ex-bg-color>
+<text-color>#000000</text-color>
+<link-color>#0000ff</link-color>
+<vlink-color>#0000cc</vlink-color>
+<nav-bar-color>#008000</nav-bar-color>
+<formmail-url>http://web.uvic.ca/cgi-bin/FormMail.pl</formmail-url>
+<email>mholmes@uvic.ca</email>
+<name-please>Please enter your name:</name-please>
+<user-string-1></user-string-1>
+<user-string-2></user-string-2>
+<user-string-3></user-string-3>
+<header-code></header-code>
+</global>
+</hotpot-config-file>
+</hotpot-jmix-file>
Index: /trunk/max-javahotpot-tutorial/tutorial/jquiz1.jqz
===================================================================
--- /trunk/max-javahotpot-tutorial/tutorial/jquiz1.jqz (revision 35)
+++ /trunk/max-javahotpot-tutorial/tutorial/jquiz1.jqz (revision 35)
@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<hotpot-jquiz-file>
+<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">
+  <rdf:Description rdf:about="">
+    <dc:creator>Ismail Ali Gago</dc:creator>
+    <dc:creator>UNREGISTERED</dc:creator>
+    <dc:title>Un Test realizado con JQuiz</dc:title>
+  </rdf:Description>
+</rdf:RDF><version>6</version>
+
+<data>
+<title>Un Test realizado con JQuiz</title>
+
+<reading>
+<include-reading>1</include-reading>
+<reading-title>Un Test realizado con JQuiz</reading-title>
+<reading-text>Este es el t&amp;#x00ED;pico cuestionario de JQuiz. En esta ventana hay un texto para leer. El texto de esta lectura podr&amp;#x00ED;a escribirse directamente en el programa JQuiz seleccionando &amp;#x003C;strong&amp;#x003E;Archivo / A&amp;#x00F1;adir lectura&amp;#x003C;/strong&amp;#x003E;. Tambi&amp;#x00E9;n podr&amp;#x00ED;a optar por no incluir un texto para ser le&amp;#x00ED;do. Todas las herramientas de Hot Potatoes le permiten incluir una lectura.
+
+En la otra zona de la pantalla ver&amp;#x00E1; la primera de las preguntas. Puede contestarla pulsando sobre uno de los botones de respuestas; puede elegir la respuesta tantas veces como quiera hasta dar con la respuesta correcta. Cuando termine, puede pasar a la siguiente pregunta mediante los botones de flecha que se encuentran en la parte superior de la pregunta. Tambi&amp;#x00E9;n puede optar por ver todas las pregunta seguidas pulsando en el bot&amp;#x00F3;n &quot;Mostrar todas las preguntas&quot;.</reading-text>
+
+</reading>
+
+<questions><question-record><question>&amp;#x00BF;Cu&amp;#x00E1;l es el n&amp;#x00FA;mero m&amp;#x00E1;ximo de respuestas que pueden incluirse en un pregunta de respuestas m&amp;#x00FA;ltiples?</question><clue></clue><category></category><weighting>100</weighting><fixed>0</fixed><question-type>1</question-type><answers><answer><text>cuatro</text><feedback>Son m&amp;#x00E1;s</feedback><correct>0</correct><percent-correct>0</percent-correct><include-in-mc-options>1</include-in-mc-options></answer><answer><text>cinco</text><feedback>Mas de cinco</feedback><correct>0</correct><percent-correct>0</percent-correct><include-in-mc-options>1</include-in-mc-options></answer><answer><text>ilimitadas</text><feedback>Correcto. Se pueden incluir todas las respuestas que se quieran </feedback><correct>1</correct><percent-correct>100</percent-correct><include-in-mc-options>1</include-in-mc-options></answer><answer><text></text><feedback></feedback><correct>0</correct><percent-correct>0</percent-correct><include-in-mc-options>1</include-in-mc-options></answer></answers></question-record><question-record><question>Verdadero o falso: Usted deber&amp;#x00E1; incluir una lectura.</question><clue></clue><category></category><weighting>100</weighting><fixed>0</fixed><question-type>1</question-type><answers><answer><text>Verdadero</text><feedback>Lo siento, pruebe de nuevo.</feedback><correct>0</correct><percent-correct>0</percent-correct><include-in-mc-options>1</include-in-mc-options></answer><answer><text>Falso</text><feedback>Correcto, bien hecho.</feedback><correct>1</correct><percent-correct>100</percent-correct><include-in-mc-options>1</include-in-mc-options></answer><answer><text></text><feedback></feedback><correct>0</correct><percent-correct>0</percent-correct><include-in-mc-options>1</include-in-mc-options></answer><answer><text></text><feedback></feedback><correct>0</correct><percent-correct>0</percent-correct><include-in-mc-options>1</include-in-mc-options></answer></answers></question-record><question-record><question>Imagine que usted pulsa en la Pregunta 1 la Respuesta A, que es correcta, y su puntuaci&amp;#x00F3;n es 100%. Si despu&amp;#x00E9;s pulsa en la Respuesta  B de la misma pregunta, &amp;#x00BF;qu&amp;#x00E9; ocurrir&amp;#x00E1; con su puntuaci&amp;#x00F3;n?</question><clue></clue><category></category><weighting>100</weighting><fixed>0</fixed><question-type>1</question-type><answers><answer><text>Disminuir&amp;#x00E1;</text><feedback>Eso ser&amp;#x00ED;a un poco raro &amp;#x00BF;no?. Por qu&amp;#x00E9; no lo prueba para ver lo que ocurre.</feedback><correct>0</correct><percent-correct>0</percent-correct><include-in-mc-options>1</include-in-mc-options></answer><answer><text>Permanecer&amp;#x00E1; igual</text><feedback>Correcto, esto le permitir&amp;#x00E1; ver las indicaciones para las respuestas incorrectas despu&amp;#x00E9;s de haber acertado la pregunta.</feedback><correct>1</correct><percent-correct>100</percent-correct><include-in-mc-options>1</include-in-mc-options></answer><answer><text>Aumentar&amp;#x00E1;.</text><feedback>Eso producir&amp;#x00ED;a confusi&amp;#x00F3;n. Por qu&amp;#x00E9; no lo prueba para ver lo que ocurre.</feedback><correct>0</correct><percent-correct>0</percent-correct><include-in-mc-options>1</include-in-mc-options></answer><answer><text>Se pondr&amp;#x00E1; a cero.</text><feedback>Eso ser&amp;#x00ED;a un poco raro &amp;#x00BF;no?. Por qu&amp;#x00E9; no lo prueba para ver lo que ocurre.</feedback><correct>0</correct><percent-correct>0</percent-correct><include-in-mc-options>1</include-in-mc-options></answer></answers></question-record><question-record><question>&amp;#x00BF;Cu&amp;#x00E1;ntas preguntas puede haber en un ejercicio de JQuiz?</question><clue></clue><category></category><weighting>100</weighting><fixed>0</fixed><question-type>1</question-type><answers><answer><text>3</text><feedback>En la versi&amp;#x00F3;n para Windows, solamene tres hasta que registre el programain. Despu&amp;#x00E9;s puede poner mas.</feedback><correct>0</correct><percent-correct>0</percent-correct><include-in-mc-options>1</include-in-mc-options></answer><answer><text>100</text><feedback>Lo siento, puede haber mas de 100.</feedback><correct>0</correct><percent-correct>0</percent-correct><include-in-mc-options>1</include-in-mc-options></answer><answer><text>1000</text><feedback>Lo siento, puede haber mas de 100.</feedback><correct>0</correct><percent-correct>0</percent-correct><include-in-mc-options>1</include-in-mc-options></answer><answer><text>ilimitadas</text><feedback>Correcto, no hay l&amp;#x00ED;mite al n&amp;#x00FA;mero de pregunta. No obstante, si hay muchas preguntas las p&amp;#x00E1;ginas tardar&amp;#x00E1; mucho en cargarse</feedback><correct>1</correct><percent-correct>100</percent-correct><include-in-mc-options>1</include-in-mc-options></answer></answers></question-record><question-record><question>Este es otro tipo de pregunta. Es una pregunta de respuesta corta
+
+&amp;#x00BF;Cu&amp;#x00E1;l es el nombre del programa utilizado para elaborar este ejercicio?</question><clue></clue><category></category><weighting>100</weighting><fixed>0</fixed><question-type>2</question-type><answers><answer><text>JQuiz</text><feedback>Correcto, JQuiz puede elaborar ejercicios con preguntas de respuestas m&amp;#x00FA;ltiples, respuestas cortas y de multiselecci&amp;#x00F3;n.</feedback><correct>1</correct><percent-correct>100</percent-correct><include-in-mc-options>1</include-in-mc-options></answer><answer><text>Hot Potatoes</text><feedback>Eso no es del todo correcto. Hot Potatoes es el &amp;#x003C;em&amp;#x003E;conjunto&amp;#x003C;/em&amp;#x003E; de programas.</feedback><correct>0</correct><percent-correct>50</percent-correct><include-in-mc-options>1</include-in-mc-options></answer><answer><text>JBC</text><feedback>JBC era la antigua Patata utilizada para elaborar ejercicios de respuestas m&amp;#x00FA;ltiples en las versiones anteriores de Hot Potatoes.</feedback><correct>0</correct><percent-correct>0</percent-correct><include-in-mc-options>1</include-in-mc-options></answer><answer><text></text><feedback></feedback><correct>0</correct><percent-correct>0</percent-correct><include-in-mc-options>1</include-in-mc-options></answer></answers></question-record><question-record><question>Este tipo de pregunta es una nueva caracter&amp;#x00ED;stica de la versi&amp;#x00F3;n 6 de Hot Potatoes. Se denomina pregunta &amp;#x003C;strong&amp;#x003E;h&amp;#x00ED;brida&amp;#x003C;/strong&amp;#x003E;. Comienza como una pregunta de respuesta corta, pero si se equivoca dos veces, se convierte en pregunta de respuesta m&amp;#x00FA;ltiple para que sea mas facil .
+
+&amp;#x00BF;Cu&amp;#x00E1;l es la Patata que se utiliza para elaborar ejercicios de ordenar las letras de una palabra?</question><clue></clue><category></category><weighting>100</weighting><fixed>0</fixed><question-type>3</question-type><answers><answer><text>JCross</text><feedback>No es correcto, JCross crea crucigramas.</feedback><correct>0</correct><percent-correct>0</percent-correct><include-in-mc-options>1</include-in-mc-options></answer><answer><text>JJumble</text><feedback>No es correcto, ese nombre no existe.</feedback><correct>0</correct><percent-correct>0</percent-correct><include-in-mc-options>1</include-in-mc-options></answer><answer><text>JCloze</text><feedback>No es correcto, JCloze es para ejerciicos de rellenar huecos.</feedback><correct>0</correct><percent-correct>0</percent-correct><include-in-mc-options>1</include-in-mc-options></answer><answer><text>JMix</text><feedback>Correcto, JMix puede utilizarse para elaborar ese tipo de ejercicios.</feedback><correct>1</correct><percent-correct>100</percent-correct><include-in-mc-options>1</include-in-mc-options></answer></answers></question-record><question-record><question>Esta pergunta nos muestra el tipo de pregunta de &amp;#x003C;strong&amp;#x003E;multiselecci&amp;#x00F3;n&amp;#x003C;/strong&amp;#x003E;.
+
+&amp;#x00BF;Cu&amp;#x00E1;l de los siguientes son programas de Hot Potatoes?</question><clue></clue><category></category><weighting>100</weighting><fixed>0</fixed><question-type>4</question-type><answers><answer><text>JQuiz</text><feedback>Pista: No se olvide de la Patata que realiza test basados en preguntas cortas.</feedback><correct>1</correct><percent-correct>100</percent-correct><include-in-mc-options>1</include-in-mc-options></answer><answer><text>JCloth</text><feedback>Pista: JCloths son sumnistros de limpieza</feedback><correct>0</correct><percent-correct>0</percent-correct><include-in-mc-options>1</include-in-mc-options></answer><answer><text>JCloze</text><feedback>Pista: No se olvide de la Patata que elabora ejercicios de rellenar huecos.</feedback><correct>1</correct><percent-correct>100</percent-correct><include-in-mc-options>1</include-in-mc-options></answer><answer><text>JMatch</text><feedback>Pista: No se olvide de la Patata que elabora ejercicios de empaerjamientos.</feedback><correct>1</correct><percent-correct>100</percent-correct><include-in-mc-options>1</include-in-mc-options></answer><answer><text>JCPenney</text><feedback>Pista: J C Penney es un almacen.</feedback><correct>0</correct><percent-correct>0</percent-correct><include-in-mc-options>1</include-in-mc-options></answer><answer><text>JCross</text><feedback>Pista: No se olvide de la Patata que elabora crucigramas.</feedback><correct>1</correct><percent-correct>100</percent-correct><include-in-mc-options>1</include-in-mc-options></answer><answer><text>JMix</text><feedback>Pista: No se olvide de la Patata que elabora ejercicos de ordenar palabras o frases.</feedback><correct>1</correct><percent-correct>100</percent-correct><include-in-mc-options>1</include-in-mc-options></answer><answer><text>The Masher</text><feedback>Pista: The Masher es un componente importante de Hot Potatoes.</feedback><correct>1</correct><percent-correct>100</percent-correct><include-in-mc-options>1</include-in-mc-options></answer><answer><text>JLeno</text><feedback>Pista: Jay Leno no tiene nada que ver con Hot Potatoes</feedback><correct>0</correct><percent-correct>0</percent-correct><include-in-mc-options>1</include-in-mc-options></answer></answers><must-select-all>1</must-select-all></question-record></questions>
+</data>
+
+<hotpot-config-file>
+<jquiz>
+<exercise-subtitle>Elija la respuesta correcta para cada pregunta.</exercise-subtitle>
+<instructions></instructions>
+<guess-correct>Correcto</guess-correct>
+<guess-incorrect>Lo siento, pruebe otra vez</guess-incorrect>
+<partly-incorrect>Su respuesta es parcialmente incorrecta: </partly-incorrect>
+<enter-a-guess>Por favor escriba una respuesta.</enter-a-guess>
+<next-correct-letter>Siguiente letra correcta en la respuesta: </next-correct-letter>
+<correct-answers>Respuestas correctas: </correct-answers>
+<show-answer-caption>Mostrar respuesta</show-answer-caption>
+<include-hint>1</include-hint>
+<include-show-answer>1</include-show-answer>
+<next-ex-url>jcloze1.htm</next-ex-url>
+<send-email>0</send-email>
+<continuous-scoring>1</continuous-scoring>
+<show-correct-first-time>0</show-correct-first-time>
+<shuffle-questions>0</shuffle-questions>
+<shuffle-answers>0</shuffle-answers>
+<show-limited-questions>0</show-limited-questions>
+<questions-to-show>1</questions-to-show>
+<short-answer-tries-on-hybrid-q>2</short-answer-tries-on-hybrid-q>
+<separate-javascript-file>0</separate-javascript-file>
+<case-sensitive>0</case-sensitive>
+<include-keypad>0</include-keypad>
+</jquiz>
+
+<global>
+<your-score-is>Su puntuaci&amp;#x00F3;n es</your-score-is>
+<correct-indicator>:-)</correct-indicator>
+<incorrect-indicator>:-(</incorrect-indicator>
+<correct-first-time>Preguntas respondidas correctamente a la primera:</correct-first-time>
+<keypad-characters></keypad-characters>
+<times-up>Your time is over!</times-up>
+<next-ex-caption>Siguiente ejemplo</next-ex-caption>
+<back-caption>&amp;#x003C;=</back-caption>
+<contents-caption>Index</contents-caption>
+<include-next-ex>1</include-next-ex>
+<include-contents>0</include-contents>
+<include-back>0</include-back>
+<contents-url>contents.htm</contents-url>
+<graphic-url></graphic-url>
+<font-face>Geneva,Arial</font-face>
+<page-bg-color>#ffffff</page-bg-color>
+<title-color>#000033</title-color>
+<ex-bg-color>#bbbbee</ex-bg-color>
+<text-color>#000000</text-color>
+<link-color>#0000ff</link-color>
+<vlink-color>#0000cc</vlink-color>
+<nav-bar-color>#000066</nav-bar-color>
+<formmail-url>http://web.uvic.ca/cgi-bin/FormMail.pl</formmail-url>
+<email>mholmes@uvic.ca</email>
+<name-please>Please enter your name:</name-please>
+<user-string-1></user-string-1>
+<user-string-2></user-string-2>
+<user-string-3></user-string-3>
+<header-code></header-code>
+<correct-first-time>Preguntas respondidas correctamente a la primera:</correct-first-time>
+<check-caption>Comprobar</check-caption>
+<ok-caption>OK</ok-caption>
+<next-q-caption>=&amp;#x003E;</next-q-caption>
+<last-q-caption>&amp;#x003C;=</last-q-caption>
+<hint-caption>Pista</hint-caption>
+<show-all-questions-caption>Mostrar todas las preguntas</show-all-questions-caption>
+<show-one-by-one-caption>Mostrar las preguntas de una en una</show-one-by-one-caption>
+<show-also-correct>1</show-also-correct>
+<process-for-rtl>0</process-for-rtl>
+</global>
+</hotpot-config-file>
+</hotpot-jquiz-file>
Index: /trunk/max-javahotpot-tutorial/tutorial/jmix2.jmx
===================================================================
--- /trunk/max-javahotpot-tutorial/tutorial/jmix2.jmx (revision 35)
+++ /trunk/max-javahotpot-tutorial/tutorial/jmix2.jmx (revision 35)
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<hotpot-jmix-file>
+<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">
+  <rdf:Description rdf:about="">
+    <dc:creator>Ismail Ali Gago</dc:creator>
+    <dc:creator>UNREGISTERED</dc:creator>
+    <dc:title>Ejercicio de ordenar la letras de una palabra elaborado con JMix</dc:title>
+  </rdf:Description>
+</rdf:RDF><version>6</version>
+
+<data>
+<title>Ejercicio de ordenar la letras de una palabra elaborado con JMix</title>
+
+<reading>
+<include-reading>0</include-reading>
+<reading-title></reading-title>
+<reading-text></reading-text>
+
+</reading>
+
+<jumbled-order-exercise><main-order><segment>s</segment>
+<segment>o</segment>
+<segment>f</segment>
+<segment>t</segment>
+<segment>w</segment>
+<segment>a</segment>
+<segment>r</segment>
+<segment>e</segment>
+</main-order></jumbled-order-exercise>
+</data>
+
+<hotpot-config-file>
+<jmix>
+<exercise-subtitle>Ejercicio de ordenar las letras de una palabra</exercise-subtitle>
+<instructions>Ponga las letras en el orden correcto para formar una palabra. Cuando considere que la palabra es correcta, pulse en &quot;Comprobar&quot; para revisar su respuesta. Si lo considera necesario, pulse en el bot&amp;#x00F3;n &quot;Pista&quot; para ver cu&amp;#x00E1;l es la siguiente letra correcta.</instructions>
+<guess-correct>Correcto</guess-correct>
+<guess-incorrect>Lo siento, pruebe otra vez</guess-incorrect>
+<this-much-correct>Esta parte de su respuesta es correcta</this-much-correct>
+<next-correct-part>La siguiente letra correcta es:</next-correct-part>
+<remaining-words>Letras restantes:</remaining-words>
+<click-to-add>Pulse sobre las letras para a&amp;#x00F1;adirlas a la palabra</click-to-add>
+<also-correct>Esta respuesta tambi&amp;#x00E9;n es correcta</also-correct>
+<include-undo>1</include-undo>
+<include-restart>1</include-restart>
+<include-hint>1</include-hint>
+<next-ex-url>jmatch1.htm</next-ex-url>
+<send-email>0</send-email>
+<top-frame-size>25</top-frame-size><top-frame-units>%</top-frame-units>
+<capitalize-first-letter>0</capitalize-first-letter>
+<separate-javascript-file>0</separate-javascript-file>
+</jmix>
+
+<global>
+
+<times-up>Your time is over!</times-up>
+<check-caption>Comprobar</check-caption>
+<ok-caption>OK</ok-caption>
+<undo-caption>Deshacer</undo-caption>
+<hint-caption>Pista</hint-caption>
+<restart-caption>Volver a empezar</restart-caption>
+<your-score-is>Su puntuaci&amp;#x00F3;n es</your-score-is>
+<show-also-correct>0</show-also-correct>
+<process-for-rtl>0</process-for-rtl>
+<next-ex-caption>Siguiente ejemplo</next-ex-caption>
+<back-caption>&amp;#x003C;=</back-caption>
+<contents-caption>Index</contents-caption>
+<include-next-ex>1</include-next-ex>
+<include-contents>0</include-contents>
+<include-back>0</include-back>
+<contents-url>contents.htm</contents-url>
+<contents-url>contents.htm</contents-url>
+<graphic-url></graphic-url>
+<font-face>Geneva,Arial</font-face>
+<page-bg-color>#FFFFFF</page-bg-color>
+<title-color>#660066</title-color>
+<ex-bg-color>#EECCEE</ex-bg-color>
+<text-color>#330033</text-color>
+<link-color>#0000CC</link-color>
+<vlink-color>#0000FF</vlink-color>
+<nav-bar-color>#330033</nav-bar-color>
+<formmail-url>http://web.uvic.ca/cgi-bin/FormMail.pl</formmail-url>
+<email>mholmes@uvic.ca</email>
+<name-please>Please enter your name:</name-please>
+<user-string-1></user-string-1>
+<user-string-2></user-string-2>
+<user-string-3></user-string-3>
+<header-code></header-code>
+</global>
+</hotpot-config-file>
+</hotpot-jmix-file>
Index: /trunk/max-javahotpot-tutorial/tutorial/jquiz2.jqz
===================================================================
--- /trunk/max-javahotpot-tutorial/tutorial/jquiz2.jqz (revision 35)
+++ /trunk/max-javahotpot-tutorial/tutorial/jquiz2.jqz (revision 35)
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<hotpot-jquiz-file>
+<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">
+  <rdf:Description rdf:about="">
+    <dc:creator>Ismail Ali Gago</dc:creator>
+    <dc:creator>Martin Holmes</dc:creator>
+    <dc:title>Ejemplo de ejercicio JQuiz que muestra los cuatro tipos de preguntas</dc:title>
+  </rdf:Description>
+</rdf:RDF><version>6</version>
+
+<data>
+<title>Ejemplo de ejercicio JQuiz que muestra los cuatro tipos de preguntas</title>
+
+<reading>
+<include-reading>0</include-reading>
+<reading-title></reading-title>
+<reading-text></reading-text>
+
+</reading>
+
+<questions><question-record><question>Esta es una pregunta de respuestas m&amp;#x00FA;ltiples.
+&amp;#x00BF;Qu&amp;#x00E9; compa&amp;#x00F1;&amp;#x00ED;a ha desarrollado Hot Potatoes?</question><clue></clue><category></category><weighting>100</weighting><fixed>0</fixed><question-type>1</question-type><answers><answer><text>Microsoft</text><feedback>Lo siento, Microsoft es ua compa&amp;#x00F1;&amp;#x00ED;a muy seria y nunca utilizar&amp;#x00ED;a una patata como logotipo. Pruebe otra vez.</feedback><correct>0</correct><percent-correct>0</percent-correct><include-in-mc-options>1</include-in-mc-options></answer><answer><text>Apple</text><feedback>Lo siento, Apple no desarrolla aplicaciones para Windows. Pruebe otra vez.</feedback><correct>0</correct><percent-correct>0</percent-correct><include-in-mc-options>1</include-in-mc-options></answer><answer><text>Half-Baked Software</text><feedback>&amp;#x00A1;Esos somos nostros! Half-Baked Software Inc ha desarrollado Hot Potatoes y Quandary.</feedback><correct>1</correct><percent-correct>100</percent-correct><include-in-mc-options>1</include-in-mc-options></answer><answer><text>Adobe</text><feedback>Lo siento,  el software de Adobe est&amp;#x00E1; relacionado con el dise&amp;#x00F1;o gr&amp;#x00E1;fico. Pruebe otra vez.</feedback><correct>0</correct><percent-correct>0</percent-correct><include-in-mc-options>1</include-in-mc-options></answer></answers></question-record><question-record><question>Esta es una pregunta de respuesta corta. La respuesta correcta es &quot;JQuiz&quot;. Pruebe a escribir una respuesta incorrecta (como, por ejemplo, &quot;JCloze&quot;) para ver las indicaciones que se le dan para esa respuesta, y pruebe tambi&amp;#x00E9;n a escribir una res`puesta que sea parcialmente correcta (como, por ejemplo, &quot;JQuoz&quot;) para ver la respuesta que obtiene.
+
+&amp;#x00BF;Qu&amp;#x00E9; programa se ja utilizado para elaborar este test?</question><clue></clue><category></category><weighting>100</weighting><fixed>0</fixed><question-type>2</question-type><answers><answer><text>JCross</text><feedback>Lo siento, JCross se usa para hacer crucigramas.</feedback><correct>0</correct><percent-correct>0</percent-correct><include-in-mc-options>1</include-in-mc-options></answer><answer><text>JQuiz</text><feedback>Correcto, JQuiz es el programa utilizado para crear ejercicios basados en preguntas.</feedback><correct>1</correct><percent-correct>100</percent-correct><include-in-mc-options>1</include-in-mc-options></answer><answer><text>JCloze</text><feedback>Lo siento, JCloze se usa para hacer ejercicios de rellenar huecos.</feedback><correct>0</correct><percent-correct>0</percent-correct><include-in-mc-options>1</include-in-mc-options></answer></answers></question-record><question-record><question>Esta es una pregunta &quot;h&amp;#x00ED;brida&quot;. Tendr&amp;#x00E1; dos intentos para acertar la respuesta; si no lo consigue, el ejercicio se convertir&amp;#x00E1; en uno de respuestas m&amp;#x00FA;ltiples.
+
+&amp;#x00BF;Que programa se utiliza para elaborar ejercicios de rellenar huecos?</question><clue></clue><category></category><weighting>100</weighting><fixed>0</fixed><question-type>3</question-type><answers><answer><text>JCloze</text><feedback>Correcto, JCloze se usa para hacer ejercicios de rellenar huecos.</feedback><correct>1</correct><percent-correct>100</percent-correct><include-in-mc-options>1</include-in-mc-options></answer><answer><text>JCross</text><feedback>Lo siento, JCross se usa para hacer crucigramas.</feedback><correct>0</correct><percent-correct>0</percent-correct><include-in-mc-options>1</include-in-mc-options></answer><answer><text>JQuiz</text><feedback>Lo siento, JQuiz es el programa utilizado para crear ejercicios basado sne preguntas.</feedback><correct>0</correct><percent-correct>0</percent-correct><include-in-mc-options>1</include-in-mc-options></answer><answer><text>JMix</text><feedback>Lo siento, JMix es el programa utilizado para crear ejercicios de ordenadr palabras o letras.</feedback><correct>0</correct><percent-correct>0</percent-correct><include-in-mc-options>1</include-in-mc-options></answer><answer><text>JMatch</text><feedback>Lo siento, JMatch se usa para hacer ejercicios de asociaci&amp;#x00F3;n.</feedback><correct>0</correct><percent-correct>0</percent-correct><include-in-mc-options>1</include-in-mc-options></answer></answers></question-record><question-record><question>Esta &amp;#x00FA;ltima pergunta es de multiselecci&amp;#x00F3;n.
+&amp;#x00BF;Cu&amp;#x00E1;l de los siguientes programas forman parte de Hot Potatoes?</question><clue></clue><category></category><weighting>100</weighting><fixed>0</fixed><question-type>4</question-type><answers><answer><text>JCloth</text><feedback>Pista:JCloth se usa para limpiar la cocina.</feedback><correct>0</correct><percent-correct>0</percent-correct><include-in-mc-options>1</include-in-mc-options></answer><answer><text>JCPenney</text><feedback>Pista: JCPenney es una almacen.</feedback><correct>0</correct><percent-correct>0</percent-correct><include-in-mc-options>1</include-in-mc-options></answer><answer><text>JQuiz</text><feedback>Pista: JQuiz es una patata.</feedback><correct>1</correct><percent-correct>100</percent-correct><include-in-mc-options>1</include-in-mc-options></answer><answer><text>JMix</text><feedback>Pista: JMix es una patata.</feedback><correct>1</correct><percent-correct>100</percent-correct><include-in-mc-options>1</include-in-mc-options></answer><answer><text>JLo</text><feedback>Pista: JLo es un cantante famoso.</feedback><correct>0</correct><percent-correct>0</percent-correct><include-in-mc-options>1</include-in-mc-options></answer><answer><text>JMatch</text><feedback>Pista: JMatch es una patata.</feedback><correct>1</correct><percent-correct>100</percent-correct><include-in-mc-options>1</include-in-mc-options></answer><answer><text>JCross</text><feedback>Pista: JCross es una patata.</feedback><correct>1</correct><percent-correct>100</percent-correct><include-in-mc-options>1</include-in-mc-options></answer><answer><text>JCloze</text><feedback>Pista: JCloze es una patata.</feedback><correct>1</correct><percent-correct>100</percent-correct><include-in-mc-options>1</include-in-mc-options></answer><answer><text>The Masher</text><feedback>Pista: The Masher es una patata.</feedback><correct>1</correct><percent-correct>100</percent-correct><include-in-mc-options>1</include-in-mc-options></answer></answers><must-select-all>1</must-select-all></question-record></questions>
+</data>
+
+<hotpot-config-file>
+<jquiz>
+<exercise-subtitle></exercise-subtitle>
+<instructions></instructions>
+<guess-correct>Correcto</guess-correct>
+<guess-incorrect>Lo siento, pruebe de nuevo</guess-incorrect>
+<partly-incorrect>Su respuesta es parcialmente incorrecta</partly-incorrect>
+<enter-a-guess>Por favor, escriba una respuesta</enter-a-guess>
+<next-correct-letter>Siguiente letra correcta de la respuesta</next-correct-letter>
+<correct-answers>Respuestas correctas:</correct-answers>
+<show-answer-caption>Mostrar respuesta</show-answer-caption>
+<include-hint>1</include-hint>
+<include-show-answer>1</include-show-answer>
+<next-ex-url></next-ex-url>
+<send-email>0</send-email>
+<continuous-scoring>1</continuous-scoring>
+<show-correct-first-time>0</show-correct-first-time>
+<shuffle-questions>0</shuffle-questions>
+<shuffle-answers>0</shuffle-answers>
+<show-limited-questions>0</show-limited-questions>
+<questions-to-show>1</questions-to-show>
+<short-answer-tries-on-hybrid-q>2</short-answer-tries-on-hybrid-q>
+<separate-javascript-file>0</separate-javascript-file>
+<case-sensitive>0</case-sensitive>
+<include-keypad>0</include-keypad>
+</jquiz>
+
+<global>
+<your-score-is>Su puntuaci&amp;#x00F3;n es:</your-score-is>
+<correct-indicator>:-)</correct-indicator>
+<incorrect-indicator>:-(</incorrect-indicator>
+<correct-first-time>Preguntas respondidas correctamente a la primera</correct-first-time>
+<keypad-characters></keypad-characters>
+<times-up>Your time is over!</times-up>
+<next-ex-caption>=&amp;#x003E;</next-ex-caption>
+<back-caption>&amp;#x003C;=</back-caption>
+<contents-caption>&amp;#x00CD;ndice</contents-caption>
+<include-next-ex>0</include-next-ex>
+<include-contents>0</include-contents>
+<include-back>0</include-back>
+<contents-url></contents-url>
+<graphic-url></graphic-url>
+<font-face>Geneva,Arial</font-face>
+<page-bg-color>#ffffff</page-bg-color>
+<title-color>#000000</title-color>
+<ex-bg-color>#dddddd</ex-bg-color>
+<text-color>#000000</text-color>
+<link-color>#0000cc</link-color>
+<vlink-color>#0000ff</vlink-color>
+<nav-bar-color>#999999</nav-bar-color>
+<formmail-url></formmail-url>
+<email></email>
+<name-please>Please enter your name:</name-please>
+<user-string-1></user-string-1>
+<user-string-2></user-string-2>
+<user-string-3></user-string-3>
+<header-code></header-code>
+<correct-first-time>Preguntas respondidas correctamente a la primera</correct-first-time>
+<check-caption>Comprobar</check-caption>
+<ok-caption>OK</ok-caption>
+<next-q-caption>=&amp;#x003E;</next-q-caption>
+<last-q-caption>&amp;#x003C;=</last-q-caption>
+<hint-caption>Pista</hint-caption>
+<show-all-questions-caption>Mostrar todas las preguntas</show-all-questions-caption>
+<show-one-by-one-caption>Mostrar las preguntas de una en una</show-one-by-one-caption>
+<show-also-correct>1</show-also-correct>
+<process-for-rtl>0</process-for-rtl>
+</global>
+</hotpot-config-file>
+</hotpot-jquiz-file>
Index: /trunk/max-javahotpot-tutorial/tutorial/mashertutorial.htm
===================================================================
--- /trunk/max-javahotpot-tutorial/tutorial/mashertutorial.htm (revision 35)
+++ /trunk/max-javahotpot-tutorial/tutorial/mashertutorial.htm (revision 35)
@@ -0,0 +1,1368 @@
+<!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 Quandary by Half-Baked Software, registered to Martin Holmes."></meta><meta name="keywords" content="Quandary, Hot Potatoes, Half-Baked Software, Windows, University of Victoria"></meta>
+
+<!-- This is the core XHTML code which is used to build the exercise page. -->
+
+<link rel="schema.DC" href="http://purl.org/dc/elements/1.1/" />
+<meta name="DC:Creator" content="Martin Holmes" />
+<meta name="DC:Title" content="Tutorial for the Hot Potatoes Masher Program" />
+
+
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
+
+<title>
+Tutorial for the Hot Potatoes Masher Program
+</title>
+
+<!-- Made with executable version 2.0 Release 8 Build 0 -->
+
+<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. */
+
+
+body{
+	font-family: Arial,sans-serif;
+	background-color: #d9d9d9;
+	color: #000000;
+ 
+	margin-right: 5%;
+	margin-left: 5%;
+	font-size: small;
+
+}
+
+p{
+	text-align: left;
+	margin: 0px;
+	font-size: small;
+}
+
+div, span, td{
+	font-size: small;
+	color: #000000;
+}
+
+div.Titles{
+	padding: 10px;
+	text-align: center;
+	color: #000000;
+}
+
+button{
+	display: inline;
+}
+
+.ExerciseTitle{
+	font-size: large;
+	color: #000000;
+}
+
+div#Timer{
+	padding: 6px;
+	margin-left: auto;
+	margin-right: auto;
+	text-align: center;
+}
+
+span#TimerText{
+	padding: 6px;
+	border-width: 1px;
+	border-style: solid;
+	font-weight: bold;
+	display: none;
+}
+
+div.ControlButtons{
+	text-align: center;
+}
+
+.Instructions{
+	margin-top: 1em;
+}
+
+.DecisionPointTitle{
+	font-size: medium;
+}
+
+.DecisionPointText{
+	text-align: left;
+	margin: auto;
+}
+
+div.Assets{
+	margin: 20px;
+}
+
+table.AssetTable{
+	border-width: 3px;
+	border-style: double;
+	border-color: #000000;
+	padding: 5px;
+}
+
+table.AssetTable th{
+	background-color: #000000;
+	color: #ffffff;
+	padding: 5px;
+}
+
+div.LinkList{
+	margin-top: 10px;
+}
+
+table.LinkTable{
+	margin-left: auto;
+	margin-right: auto;
+	text-align: left;
+}
+
+.FeedbackText{
+	color: #000000;
+}
+
+table.DPTable{
+	margin-left: auto;
+	margin-right: auto;
+	border-width: 0px;
+	padding: 10px;
+	vertical-align: top;
+}
+
+div.Feedback {
+	background-color: #d9d9d9;
+	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: small;
+}
+
+div.DecisionPoint{
+	background-color: #ffffff;
+	text-align: center;
+	font-size: small;
+	color: #000000;
+	padding: 8px;
+	border-style: solid;
+	border-width: 1px 1px 1px 1px;
+	border-color: #000000;
+	margin: 1px;
+}
+
+.FuncButton {
+	
+	text-align: center;
+	border-style: solid;
+
+	color: #ffffff;
+	border-color: #ffffff;
+	background-color: #000000;
+
+	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;
+
+	border-width: 2px;
+	padding: 2px 7px 4px 5px;
+	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;
+
+	border-width: 2px;
+	padding: 4px 5px 2px 7px;
+	cursor: pointer;
+}
+
+div.NavButtonBar{
+	background-color: #0060A4;
+	text-align: center;
+	margin: 2px 0px 2px 0px;
+	clear: both;
+	font-size: small;
+}
+
+.NavButton {
+	border-style: solid;
+	border-color: #0060A4;
+	background-color: #0060A4;
+	border-width: 2px;
+	padding: 2px 2px 2px 2px;
+	color: #ffffff;
+	cursor: pointer;	
+}
+
+.NavButtonUp {
+	border-style: solid;
+
+	border-left-color: #7fafd1;
+	border-top-color: #7fafd1;
+	border-right-color: #003052;
+	border-bottom-color: #003052;
+	background-color: #0060A4;
+
+	border-width: 2px;
+	padding: 1px 3px 3px 1px;
+	color: #ffffff;
+	cursor: pointer;	
+}
+
+.NavButtonDown {
+	border-style: solid;
+
+	border-left-color: #003052;
+	border-top-color: #003052;
+	border-right-color: #7fafd1;
+	border-bottom-color: #7fafd1;
+	background-color: #0060A4;
+
+	background-color: #0060A4;
+	border-width: 2px;
+	padding: 3px 1px 1px 3px;
+	color: #ffffff;
+	cursor: pointer;	
+}
+
+a{
+	color: #0060A4;
+}
+
+a:visited{
+	color: #0000ff;
+}
+
+a:hover{
+	color: #0060A4;
+}
+
+
+       </style>
+
+<!-- The following insertion allows you to add your own code directly to this head tag from the configuration screen -->
+
+<style type="text/css">
+strong{background-color: #ffff00;color:inherited;}
+       </style>
+
+<script type="text/javascript">
+
+//<![CDATA[
+
+<!--
+
+
+//This is the JavaScript code needed to make the exercise function
+
+//Simple browser check comes first -- you may want to make this more sophisticated
+//if you have many users with old or obscure browsers
+
+if (document.getElementById == false){
+	alert('Your browser is not able to show this page properly. A modern browser that supports W3C standards is required.');
+}
+
+//USING USER-DEFINED STRINGS:
+//If you are using the user-defined strings on the Other tab of the Config screen, 
+//make sure the strings are correctly escaped for use in JavaScript.
+
+//CODE FOR ASSETS AND ASSET BASKETS
+
+//ASSETS SECTION
+function Asset(ID, Name, InitVal, DecPlace, ShowDuring, ShowEnd, CurrVal, Parent){
+	this.ID = ID;
+	this.Name=Name;
+	this.InitVal=InitVal;
+	this.DecPlace=DecPlace;
+	this.ShowDuring=ShowDuring;
+	this.ShowEnd=ShowEnd;
+	this.CurrVal=CurrVal;
+	this.Parent = Parent;
+}
+
+function AssetGetCurrValString(){
+	var Num = this.CurrVal;
+	if (this.DecPlace > 0){
+		for (var i=0; i<this.DecPlace; i++){Num /= 10;}
+	}
+	var Result = Num.toString();
+	if (this.DecPlace > 0){
+		var DecLoc = Result.indexOf('.');
+		if (DecLoc < 0){Result += '.';}
+//Add leading zeros if required
+		while (((Result.length-1) - Result.indexOf('.'))<this.DecPlace){Result += '0';} 
+//Truncate trailing places if required
+		while (((Result.length-1) - Result.indexOf('.'))>this.DecPlace){Result = Result.substring(0, Result.length-1);}
+	}
+	return Result;
+}
+Asset.prototype.GetCurrValString=AssetGetCurrValString;
+
+function AssetGetCurrValFloat(){
+	var Num = this.CurrVal;
+	if (this.DecPlace > 0){
+		for (var i=0; i<this.DecPlace; i++){Num /= 10;}
+	}
+		return Num;
+}
+Asset.prototype.GetCurrValFloat=AssetGetCurrValFloat;
+
+function AssetSetCurrValFromFloat(Num){
+	if (this.DecPlace > 0){
+		for (var i=0; i<this.DecPlace; i++){Num *= 10;}
+	}
+	this.CurrVal = Num;
+}
+Asset.prototype.SetCurrValFromFloat=AssetSetCurrValFromFloat;
+
+function AssetReportCurrState(){
+	return this.Name + ': ' + this.GetCurrValString();
+}
+Asset.prototype.ReportCurrState=AssetReportCurrState;
+
+function AssetMeetsRequirement(ReqType, Req){
+	var Result = true;
+	switch(ReqType){
+		case 0: break;
+		case 1: Result = (this.CurrVal > Req); break;
+		case 2: Result = (this.CurrVal < Req); break;
+		case 3: Result = (this.CurrVal == Req); break;
+	}
+	return Result;
+}
+Asset.prototype.MeetsRequirement=AssetMeetsRequirement;
+
+function AssetPerformTransaction(OperatorType, Operand){
+	if ((this.Name == '_Timer_Seconds')&&(this.Parent.Active == true)){
+		this.CurrVal = Seconds;
+	}
+	switch(OperatorType){
+//Operands coming into this function should already be massaged to be at the same decimal place level as 
+//the asset being manipulated; therefore +, -, and = operators can use the values directly, but *, /, % 
+//and ^ transactions will have to reduce the operand to its true value by dividing it.
+		case 1: this.CurrVal += Operand; break; //add
+		case 2: this.CurrVal -= Operand; break; //subtract
+		case 3: for (var x=0; x<this.DecPlace; x++){Operand /= 10;}this.CurrVal *= Operand; break; //multiply
+		case 4: for (var x=0; x<this.DecPlace; x++){Operand /= 10;}this.CurrVal /= Operand; break; //divide
+		case 5: this.CurrVal = Operand; break; //set equal to
+		case 6: for (var x=0; x<this.DecPlace; x++){Operand /= 10;}this.CurrVal *= (Operand/100); break; //percentage
+//Difficult case (power of); need to change the operand and the value to core values, do the calculation, then
+//change the value back
+		case 7: 
+//Change the operand to core value
+			for (var x=0; x<this.DecPlace; x++){Operand /= 10;}
+//Change the asset value to core value
+			var y = this.CurrVal; for (var x=0; x<this.DecPlace; x++){y /= 10;}
+//Do the math
+			x = y; for (var j=1; j<Operand; j++){y *= x;} 
+//Raise the val again
+			for (var x=0; x<this.DecPlace; x++){y *= 10;}
+//Set the value
+			this.CurrVal = y;
+			break; 
+	}
+	this.CurrVal = Math.round(this.CurrVal);
+	if ((this.Name == '_Timer_Seconds')&&(this.Parent.Active == true)){
+		Seconds = this.CurrVal;
+	}
+}
+Asset.prototype.PerformTransaction=AssetPerformTransaction;
+
+function AssetCanBeShown(){
+	var Result = true;
+	if (IsEndPoint == true){
+		switch (this.ShowEnd){
+			case 0: Result = true; break;
+			case 1: Result = false; break;
+			case 2: Result = (this.CurrVal != 0); break;
+		}
+	}
+	else{
+		switch (this.ShowDuring){
+			case 0: Result = true; break;
+			case 1: Result = false; break;
+			case 2: Result = (this.CurrVal != 0); break;
+		}
+	}
+	return Result;
+}
+Asset.prototype.CanBeShown=AssetCanBeShown;
+
+function Basket(AList, Active){
+	this.Active = Active;
+	this.Assets = new Array();
+	if (AList.length > 0){
+		for (var i=0; i<AList.length; i++){
+			this.Assets[i] = new Asset(i, AList[i][0], AList[i][1], AList[i][2], AList[i][3], AList[i][4], A[i][5], this);
+		}
+	}
+}
+
+function BasketGetEffectiveOperand(Trans){
+//The "effective operand" is the operand converted to the right decimal place level (so an operand of 
+//5, which is to act on an asset with 2dps, should be converted to 500). This is especially difficult 
+//when the operand is the value of another asset, since that may have its own dp setting, and the two 
+//settings must be harmonized
+	var Operand = 0;
+	switch(Trans[2]){
+//First, a fixed value (this should already be specified at the right dp level)
+		case 0: Operand = Trans[3]; break;
+//Second, a random value; again, this should be specified at the right dp level already)
+		case 1: Operand = GetRand(Trans[3], Trans[4]); break;
+//Finally, the problem case: the value of another asset. In this case, we need to find out the dp 
+//settings of both the source and target asset
+//First get the real value of the source asset (so 500 for an asset with 2dp would be 5)
+		case 2: Operand = this.Assets[Trans[5]].GetCurrValFloat(); 
+//Now multiply this up according to the dp setting of the target asset (so 5 operating on a target asset
+//with dp2 would become 500)
+			for (var i=0; i<this.Assets[Trans[0]].DecPlace; i++){Operand *= 10;}
+			break;
+	}
+	return Operand;
+}
+Basket.prototype.GetEffectiveOperand=BasketGetEffectiveOperand;
+
+function BasketReportCurrState(){
+	if (this.Assets.length < 1){return '';}
+	var Result = '';
+	for (var i=0; i<this.Assets.length; i++){
+		if (this.Assets[i].CanBeShown()==true){
+			Result += '<tr><td style="text-align: right;">' + this.Assets[i].Name + ': </td>';
+			Result += '<td style="text-align: left;">' + this.Assets[i].GetCurrValString() + '</td></tr>';
+		}
+	}
+	if (Result.length > 0){
+		Result = '<table class="AssetTable"><tr><th colspan="2">' + strYouHave + '</th></tr>' + Result + '</table>';
+	}
+	return Result;
+}
+Basket.prototype.ReportCurrState=BasketReportCurrState;
+
+function BasketCloneSelf(Copy, Active){
+	Copy = new Basket(A, false);
+	Copy.Active = Active;
+	for (var i=0; i<this.Assets.length; i++){
+		Copy.Assets[i].CurrVal = this.Assets[i].CurrVal;
+	}
+	return Copy;
+}
+Basket.prototype.CloneSelf=BasketCloneSelf;
+
+function BAssetMeetsRequirement(ANum, ReqType, Req){
+	return this.Assets[ANum].MeetsRequirement(ReqType, Req);
+}
+Basket.prototype.AssetMeetsRequirement=BAssetMeetsRequirement;
+
+function BAssetPerformTransaction(ANum, OpType, Operand){
+	this.Assets[ANum].PerformTransaction(OpType, Operand);
+}
+Basket.prototype.PerformTransaction=BAssetPerformTransaction;
+
+function BGetAssetValByName(AssetName){
+	var Result = 0;
+	for (var i=0; i<this.Assets.length; i++){
+		if (this.Assets[i].Name == AssetName){
+			Result = this.Assets[i].CurrVal;
+		}
+	}
+	return Result;
+}
+Basket.prototype.GetAssetValByName=BGetAssetValByName;
+
+//VARIABLES AND INTERFACE STRINGS
+
+var CurrBasket;
+var TempBasket;
+var CurrNode=0;
+var strYouHave='Usted tiene: ';
+var strLinkCaption='Entrar!';
+var strFinishCaption='Entrar!';
+var strDefaultRefusalMessage='Disculpe, no puede hacer eso.';
+var strTimesUp = 'Su tiempo se ha terminado!';
+var strBookmarkExplanation = 'Su posición actual y su configuración han sido codificadas en la <br />URL de la página. Ahora defina un marcador en su<br />navegador, así podrá volver aquí.<br />';
+var strExerciseComplete = 'Ha llegado al final del ejercicio.';
+var ShowImpossibleLinks=true;
+var Interval;
+var StartTime = (new Date()).toLocaleString();
+var HPNStartTime = (new Date()).getTime();
+var SubmissionTimeout = 30000;
+var FollowingTrack = false;
+var CurrTime;
+var Started=false;
+
+var IsEndPoint = false;
+
+function TransactionList(NNum, LNum){
+	this.List = new Array();
+	var i;
+	for (i=0; i<N[NNum][4].length; i++){this.List[this.List.length] = N[NNum][4][i];}
+	for (i=0; i<N[NNum][3][LNum][2].length; i++){this.List[this.List.length] = N[NNum][3][LNum][2][i];}
+	for (i=0; i<N[N[NNum][3][LNum][0]][2].length; i++){this.List[this.List.length] = N[N[NNum][3][LNum][0]][2][i];}
+}
+
+function TestTransactions(NNum, LNum){
+	var T = new TransactionList(NNum, LNum);
+	var Result = '';
+//Create a clone of the current asset basket to operate on
+	var B = CurrBasket.CloneSelf(B, false);
+
+//For each transaction
+	for (var i=0; i<T.List.length; i++){
+//Test the requirement
+		if (B.AssetMeetsRequirement(T.List[i][0], T.List[i][7], T.List[i][6]) == true){
+//If it succeeds, do the transaction
+			B.PerformTransaction(T.List[i][0], T.List[i][1], B.GetEffectiveOperand(T.List[i]));
+		}
+		else{
+//If it fails, check the refusal message
+			if (T.List[i][8].length > 0){
+				return T.List[i][8];
+			}
+//If no refusal message, return a string with spaces, otherwise return refusal message
+			else{
+				return strDefaultRefusalMessage;
+			}
+		}
+	}
+//If all have passed, return an empty string
+	return '';
+}
+
+function StartExercise(){
+	CurrBasket = new Basket(A, true);
+	ParseSearch();
+	CurrTime = new Date();
+	ShowCurrNode();
+
+	Started = true;
+}
+
+function StartUp(){
+	if (document.location.search.indexOf('___') > -1){
+		StartExercise();
+	}
+}
+
+fun