

//<![CDATA[

<!--




function Client(){
//if not a DOM browser, hopeless
	this.min = false; if (document.getElementById){this.min = true;};

	this.ua = navigator.userAgent;
	this.name = navigator.appName;
	this.ver = navigator.appVersion;  

//Get data about the browser
	this.mac = (this.ver.indexOf('Mac') != -1);
	this.win = (this.ver.indexOf('Windows') != -1);

//Look for Gecko
	this.gecko = (this.ua.indexOf('Gecko') > 1);
	if (this.gecko){
		this.geckoVer = parseInt(this.ua.substring(this.ua.indexOf('Gecko')+6, this.ua.length));
		if (this.geckoVer < 20020000){this.min = false;}
	}
	
//Look for Firebird
	this.firebird = (this.ua.indexOf('Firebird') > 1);
	
//Look for Safari
	this.safari = (this.ua.indexOf('Safari') > 1);
	if (this.safari){
		this.gecko = false;
	}
	
//Look for IE
	this.ie = (this.ua.indexOf('MSIE') > 0);
	if (this.ie){
		this.ieVer = parseFloat(this.ua.substring(this.ua.indexOf('MSIE')+5, this.ua.length));
		if (this.ieVer < 5.5){this.min = false;}
	}
	
//Look for Opera
	this.opera = (this.ua.indexOf('Opera') > 0);
	if (this.opera){
		this.operaVer = parseFloat(this.ua.substring(this.ua.indexOf('Opera')+6, this.ua.length));
		if (this.operaVer < 7.04){this.min = false;}
	}
	if (this.min == false){
		alert('Your browser may not be able to handle this page.');
	}
	
//Special case for the horrible ie5mac
	this.ie5mac = (this.ie&&this.mac&&(this.ieVer<6));
}

var C = new Client();

//for (prop in C){
//	alert(prop + ': ' + C[prop]);
//}



//CODE FOR HANDLING NAV BUTTONS AND FUNCTION BUTTONS

//[strNavBarJS]
function NavBtnOver(Btn){
	if (Btn.className != 'NavButtonDown'){Btn.className = 'NavButtonUp';}
}

function NavBtnOut(Btn){
	Btn.className = 'NavButton';
}

function NavBtnDown(Btn){
	Btn.className = 'NavButtonDown';
}
//[/strNavBarJS]

function FuncBtnOver(Btn){
	if (Btn.className != 'FuncButtonDown'){Btn.className = 'FuncButtonUp';}
}

function FuncBtnOut(Btn){
	Btn.className = 'FuncButton';
}

function FuncBtnDown(Btn){
	Btn.className = 'FuncButtonDown';
}

function FocusAButton(){
	if (document.getElementById('CheckButton1') != null){
		document.getElementById('CheckButton1').focus();
	}
	else{
		if (document.getElementById('CheckButton2') != null){
			document.getElementById('CheckButton2').focus();
		}
		else{
			document.getElementsByTagName('button')[0].focus();
		}
	}
}




//CODE FOR HANDLING DISPLAY OF POPUP FEEDBACK BOX

var topZ = 1000;

function ShowMessage(Feedback){
	var Output = Feedback + '<br /><br />';
	document.getElementById('FeedbackContent').innerHTML = Output;
	var FDiv = document.getElementById('FeedbackDiv');
	topZ++;
	FDiv.style.zIndex = topZ;
	FDiv.style.top = TopSettingWithScrollOffset(30) + 'px';

	FDiv.style.display = 'block';

	ShowElements(false, 'input');
	ShowElements(false, 'select');
	ShowElements(false, 'object');
	ShowElements(true, 'object', 'FeedbackContent');

//Focus the OK button
	setTimeout("document.getElementById('FeedbackOKButton').focus()", 50);
	
//
}

function ShowElements(Show, TagName, ContainerToReverse){
// added third argument to allow objects in the feedback box to appear
//IE bug -- hide all the form elements that will show through the popup
//FF on Mac bug : doesn't redisplay objects whose visibility is set to visible
//unless the object's display property is changed

	//get container object (by Id passed in, or use document otherwise)
	TopNode = document.getElementById(ContainerToReverse);
	var Els;
	if (TopNode != null) {
		Els = TopNode.getElementsByTagName(TagName);
	} else {
		Els = document.getElementsByTagName(TagName);
	}

	for (var i=0; i<Els.length; i++){
		if (TagName == "object") {
			//manipulate object elements in all browsers
			if (Show == true){
				Els[i].style.visibility = 'visible';
				//get Mac FireFox to manipulate display, to force screen redraw
				if (C.mac && C.gecko) {Els[i].style.display = '';}
			}
			else{
				Els[i].style.visibility = 'hidden';
				if (C.mac && C.gecko) {Els[i].style.display = 'none';}
			}
		} 
		else {
			// tagName is either input or select (that is, Form Elements)
			// ie6 has a problem with Form elements, so manipulate those
			if (C.ie) {
				if (C.ieVer < 7) {
					if (Show == true){
						Els[i].style.visibility = 'visible';
					}
					else{
						Els[i].style.visibility = 'hidden';
					}
				}
			}
		}
	}
}



function HideFeedback(){
	document.getElementById('FeedbackDiv').style.display = 'none';
	ShowElements(true, 'input');
	ShowElements(true, 'select');
	ShowElements(true, 'object');
	if (Finished == true){
		Finish();
	}
}


//GENERAL UTILITY FUNCTIONS AND VARIABLES

//PAGE DIMENSION FUNCTIONS
function PageDim(){
//Get the page width and height
	this.W = 600;
	this.H = 400;
	this.W = document.getElementsByTagName('body')[0].clientWidth;
	this.H = document.getElementsByTagName('body')[0].clientHeight;
}

var pg = null;

function GetPageXY(El) {
	var XY = {x: 0, y: 0};
	while(El){
		XY.x += El.offsetLeft;
		XY.y += El.offsetTop;
		El = El.offsetParent;
	}
	return XY;
}

function GetScrollTop(){
	if (typeof(window.pageYOffset) == 'number'){
		return window.pageYOffset;
	}
	else{
		if ((document.body)&&(document.body.scrollTop)){
			return document.body.scrollTop;
		}
		else{
			if ((document.documentElement)&&(document.documentElement.scrollTop)){
				return document.documentElement.scrollTop;
			}
			else{
				return 0;
			}
		}
	}
}

function GetViewportHeight(){
	if (typeof window.innerHeight != 'undefined'){
		return window.innerHeight;
	}
	else{
		if (((typeof document.documentElement != 'undefined')&&(typeof document.documentElement.clientHeight !=
     'undefined'))&&(document.documentElement.clientHeight != 0)){
			return document.documentElement.clientHeight;
		}
		else{
			return document.getElementsByTagName('body')[0].clientHeight;
		}
	}
}

function TopSettingWithScrollOffset(TopPercent){
	var T = Math.floor(GetViewportHeight() * (TopPercent/100));
	return GetScrollTop() + T; 
}

//CODE FOR AVOIDING LOSS OF DATA WHEN BACKSPACE KEY INVOKES history.back()
var InTextBox = false;

function SuppressBackspace(e){ 
	if (InTextBox == true){return;}
	if (C.ie) {
		thisKey = window.event.keyCode;
	}
	else {
		thisKey = e.keyCode;
	}

	var Suppress = false;

	if (thisKey == 8) {
		Suppress = true;
	}

	if (Suppress == true){
		if (C.ie){
			window.event.returnValue = false;	
			window.event.cancelBubble = true;
		}
		else{
			e.preventDefault();
		}
	}
}

if (C.ie){
	document.attachEvent('onkeydown',SuppressBackspace);
	window.attachEvent('onkeydown',SuppressBackspace);
}
else{
	if (window.addEventListener){
		window.addEventListener('keypress',SuppressBackspace,false);
	}
}

function ReduceItems(InArray, ReduceToSize){
	var ItemToDump=0;
	var j=0;
	while (InArray.length > ReduceToSize){
		ItemToDump = Math.floor(InArray.length*Math.random());
		InArray.splice(ItemToDump, 1);
	}
}

function Shuffle(InArray){
	var Num;
	var Temp = new Array();
	var Len = InArray.length;

	var j = Len;

	for (var i=0; i<Len; i++){
		Temp[i] = InArray[i];
	}

	for (i=0; i<Len; i++){
		Num = Math.floor(j  *  Math.random());
		InArray[i] = Temp[Num];

		for (var k=Num; k < (j-1); k++) {
			Temp[k] = Temp[k+1];
		}
		j--;
	}
	return InArray;
}

function WriteToInstructions(Feedback) {
	document.getElementById('InstructionsDiv').innerHTML = Feedback;

}




function EscapeDoubleQuotes(InString){
	return InString.replace(/"/g, '&quot;')
}

function TrimString(InString){
        var x = 0;

        if (InString.length != 0) {
                while ((InString.charAt(InString.length - 1) == '\u0020') || (InString.charAt(InString.length - 1) == '\u000A') || (InString.charAt(InString.length - 1) == '\u000D')){
                        InString = InString.substring(0, InString.length - 1)
                }

                while ((InString.charAt(0) == '\u0020') || (InString.charAt(0) == '\u000A') || (InString.charAt(0) == '\u000D')){
                        InString = InString.substring(1, InString.length)
                }

                while (InString.indexOf('  ') != -1) {
                        x = InString.indexOf('  ')
                        InString = InString.substring(0, x) + InString.substring(x+1, InString.length)
                 }

                return InString;
        }

        else {
                return '';
        }
}

function FindLongest(InArray){
	if (InArray.length < 1){return -1;}

	var Longest = 0;
	for (var i=1; i<InArray.length; i++){
		if (InArray[i].length > InArray[Longest].length){
			Longest = i;
		}
	}
	return Longest;
}

//UNICODE CHARACTER FUNCTIONS
function IsCombiningDiacritic(CharNum){
	var Result = (((CharNum >= 0x0300)&&(CharNum <= 0x370))||((CharNum >= 0x20d0)&&(CharNum <= 0x20ff)));
	Result = Result || (((CharNum >= 0x3099)&&(CharNum <= 0x309a))||((CharNum >= 0xfe20)&&(CharNum <= 0xfe23)));
	return Result;
}

function IsCJK(CharNum){
	return ((CharNum >= 0x3000)&&(CharNum < 0xd800));
}

//SETUP FUNCTIONS
//BROWSER WILL REFILL TEXT BOXES FROM CACHE IF NOT PREVENTED
function ClearTextBoxes(){
	var NList = document.getElementsByTagName('input');
	for (var i=0; i<NList.length; i++){
		if ((NList[i].id.indexOf('Guess') > -1)||(NList[i].id.indexOf('Gap') > -1)){
			NList[i].value = '';
		}
		if (NList[i].id.indexOf('Chk') > -1){
			NList[i].checked = '';
		}
	}
}

//EXTENSION TO ARRAY OBJECT
function Array_IndexOf(Input){
	var Result = -1;
	for (var i=0; i<this.length; i++){
		if (this[i] == Input){
			Result = i;
		}
	}
	return Result;
}
Array.prototype.indexOf = Array_IndexOf;

//IE HAS RENDERING BUG WITH BOTTOM NAVBAR
function RemoveBottomNavBarForIE(){
	if ((C.ie)&&(document.getElementById('Reading') != null)){
		if (document.getElementById('BottomNavBar') != null){
			document.getElementById('TheBody').removeChild(document.getElementById('BottomNavBar'));
		}
	}
}




//HOTPOTNET-RELATED CODE

var HPNStartTime = (new Date()).getTime();
var SubmissionTimeout = 30000;
var Detail = ''; //Global that is used to submit tracking data

function Finish(){
//If there's a form, fill it out and submit it
	if (document.store != null){
		Frm = document.store;
		Frm.starttime.value = HPNStartTime;
		Frm.endtime.value = (new Date()).getTime();
		Frm.mark.value = Score;
		Frm.detail.value = Detail;
		Frm.submit();
	}
}





//JQUIZ CORE JAVASCRIPT CODE

var CurrQNum = 0;
var CorrectIndicator = 'O';
var IncorrectIndicator = 'X';
var YourScoreIs = 'Voici votre score : ';
var ContinuousScoring = false;
var CorrectFirstTime = 'Questions pour lesquelles vous avez donn&#x00E9; la bonne r&#x00E9;ponse lors de votre premi&#x00E8;re tentative :';
var ShowCorrectFirstTime = true;
var ShuffleQs = true;
var ShuffleAs = true;
var DefaultRight = 'Correct!';
var DefaultWrong = 'D&#x00E9;sol&#x00E9; ! Refaites un essai.';
var QsToShow = 3;
var Score = 0;
var Finished = false;
var Qs = null;
var QArray = new Array();
var ShowingAllQuestions = false;
var ShowAllQuestionsCaption = 'Afficher toutes les questions';
var ShowOneByOneCaption = 'Afficher les questions unes par unes';
var State = new Array();
var Feedback = '';
var TimeOver = false;
var strInstructions = '';
var Locked = false;

//The following variable can be used to add a message explaining that
//the question is finished, so no further marking will take place.
var strQuestionFinished = '';

function CompleteEmptyFeedback(){
	var QNum, ANum;
	for (QNum=0; QNum<I.length; QNum++){
//Only do this if not multi-select
		if (I[QNum][2] != '3'){
  		for (ANum = 0; ANum<I[QNum][3].length; ANum++){
  			if (I[QNum][3][ANum][1].length < 1){
  				if (I[QNum][3][ANum][2] > 0){
  					I[QNum][3][ANum][1] = DefaultRight;
  				}
  				else{
  					I[QNum][3][ANum][1] = DefaultWrong;
  				}
  			}
  		}
		}
	}
}

function SetUpQuestions(){
	var AList = new Array(); 
	var QList = new Array();
	var i, j;
	Qs = document.getElementById('Questions');
	while (Qs.getElementsByTagName('li').length > 0){
		QList.push(Qs.removeChild(Qs.getElementsByTagName('li')[0]));
	}
	var DumpItem = 0;
	if (QsToShow > QList.length){
		QsToShow = QList.length;
	}
	while (QsToShow < QList.length){
		DumpItem = Math.floor(QList.length*Math.random());
		for (j=DumpItem; j<(QList.length-1); j++){
			QList[j] = QList[j+1];
		}
		QList.length = QList.length-1;
	}
	if (ShuffleQs == true){
		QList = Shuffle(QList);
	}
	if (ShuffleAs == true){
		var As;
		for (var i=0; i<QList.length; i++){
			As = QList[i].getElementsByTagName('ol')[0];
			if (As != null){
  			AList.length = 0;
				while (As.getElementsByTagName('li').length > 0){
					AList.push(As.removeChild(As.getElementsByTagName('li')[0]));
				}
				AList = Shuffle(AList);
				for (j=0; j<AList.length; j++){
					As.appendChild(AList[j]);
				}
			}
		}
	}
	
	for (i=0; i<QList.length; i++){
		Qs.appendChild(QList[i]);
		QArray[QArray.length] = QList[i];
	}

//Show the first item
	QArray[0].style.display = '';
	
//Now hide all except the first item
	for (i=1; i<QArray.length; i++){
		QArray[i].style.display = 'none';
	}		
	SetQNumReadout();
	
	SetFocusToTextbox();
}

function SetFocusToTextbox(){
//if there's a textbox, set the focus in it
	if (QArray[CurrQNum].getElementsByTagName('input')[0] != null){
		QArray[CurrQNum].getElementsByTagName('input')[0].focus();
//and show a keypad if there is one
		if (document.getElementById('CharacterKeypad') != null){
			document.getElementById('CharacterKeypad').style.display = 'block';
		}
	}
	else{
  	if (QArray[CurrQNum].getElementsByTagName('textarea')[0] != null){
  		QArray[CurrQNum].getElementsByTagName('textarea')[0].focus();	
//and show a keypad if there is one
			if (document.getElementById('CharacterKeypad') != null){
				document.getElementById('CharacterKeypad').style.display = 'block';
			}
		}
//This added for 6.0.4.11: hide accented character buttons if no textbox
		else{
			if (document.getElementById('CharacterKeypad') != null){
				document.getElementById('CharacterKeypad').style.display = 'none';
			}
		}
	}
}

function ChangeQ(ChangeBy){
//The following line prevents moving to another question until the current
//question is answered correctly. Uncomment it to enable this behaviour. 
//	if (State[CurrQNum][0] == -1){return;}
	if (((CurrQNum + ChangeBy) < 0)||((CurrQNum + ChangeBy) >= QArray.length)){return;}
	QArray[CurrQNum].style.display = 'none';
	CurrQNum += ChangeBy;
	QArray[CurrQNum].style.display = '';
//Undocumented function added 10/12/2004
	ShowSpecialReadingForQuestion();
	SetQNumReadout();
	SetFocusToTextbox();
}

var HiddenReadingShown = false;
function ShowSpecialReadingForQuestion(){
//Undocumented function for showing specific reading text elements which change with each question
//Added on 10/12/2004
	if (document.getElementById('ReadingDiv') != null){
		if (HiddenReadingShown == true){
			document.getElementById('ReadingDiv').innerHTML = '';
		}
		if (QArray[CurrQNum] != null){
//Fix for 6.0.4.25
			var Children = QArray[CurrQNum].getElementsByTagName('div');
			for (var i=0; i<Children.length; i++){
			if (Children[i].className=="HiddenReading"){
					document.getElementById('ReadingDiv').innerHTML = Children[i].innerHTML;
					HiddenReadingShown = true;
//Hide the ShowAllQuestions button to avoid confusion
					if (document.getElementById('ShowMethodButton') != null){
						document.getElementById('ShowMethodButton').style.display = 'none';
					}
				}
			}	
		}
	}
}

function SetQNumReadout(){
	document.getElementById('QNumReadout').innerHTML = (CurrQNum+1) + ' / ' + QArray.length;
	if ((CurrQNum+1) >= QArray.length){
		if (document.getElementById('NextQButton') != null){
			document.getElementById('NextQButton').style.visibility = 'hidden';
		}
	}
	else{
		if (document.getElementById('NextQButton') != null){
			document.getElementById('NextQButton').style.visibility = 'visible';
		}
	}
	if (CurrQNum <= 0){
		if (document.getElementById('PrevQButton') != null){
			document.getElementById('PrevQButton').style.visibility = 'hidden';
		}
	}
	else{
		if (document.getElementById('PrevQButton') != null){
			document.getElementById('PrevQButton').style.visibility = 'visible';
		}
	}
}

var I=new Array();
I[0]=new Array();I[0][0]=100;
I[0][1]='';
I[0][2]='3';
I[0][3]=new Array();
I[0][3][0]=new Array('I will not marry him within the next two years.','Soit vous avez s\u00E9lectionn\u00E9 des phrases qui ne devraient pas l\'\u00EAtre soit vous en avez oubli\u00E9. Dans tous les cas vous n\'avez pas s\u00E9lectionnez uniquement des bonnes r\u00E9ponses et toutes les bonnes r\u00E9ponses. Modifiez vos r\u00E9ponses.',0,0,1);
I[0][3][1]=new Array('Are you from Italy?','Soit vous avez s\u00E9lectionn\u00E9 des phrases qui ne devraient pas l\'\u00EAtre soit vous en avez oubli\u00E9. Dans tous les cas vous n\'avez pas s\u00E9lectionnez uniquement des bonnes r\u00E9ponses et toutes les bonnes r\u00E9ponses. Modifiez vos r\u00E9ponses.',1,100,1);
I[0][3][2]=new Array('The teacher is not checking the homework.','Soit vous avez s\u00E9lectionn\u00E9 des phrases qui ne devraient pas l\'\u00EAtre soit vous en avez oubli\u00E9. Dans tous les cas vous n\'avez pas s\u00E9lectionnez uniquement des bonnes r\u00E9ponses et toutes les bonnes r\u00E9ponses. Modifiez vos r\u00E9ponses.',0,0,1);
I[0][3][3]=new Array('Does your mother cook good courses?','Soit vous avez s\u00E9lectionn\u00E9 des phrases qui ne devraient pas l\'\u00EAtre soit vous en avez oubli\u00E9. Dans tous les cas vous n\'avez pas s\u00E9lectionnez uniquement des bonnes r\u00E9ponses et toutes les bonnes r\u00E9ponses. Modifiez vos r\u00E9ponses.',1,100,1);
I[0][3][4]=new Array('Paul has two sisters.','Soit vous avez s\u00E9lectionn\u00E9 des phrases qui ne devraient pas l\'\u00EAtre soit vous en avez oubli\u00E9. Dans tous les cas vous n\'avez pas s\u00E9lectionnez uniquement des bonnes r\u00E9ponses et toutes les bonnes r\u00E9ponses. Modifiez vos r\u00E9ponses.',1,100,1);
I[0][3][5]=new Array('Last summer, I went to Australia.','Soit vous avez s\u00E9lectionn\u00E9 des phrases qui ne devraient pas l\'\u00EAtre soit vous en avez oubli\u00E9. Dans tous les cas vous n\'avez pas s\u00E9lectionnez uniquement des bonnes r\u00E9ponses et toutes les bonnes r\u00E9ponses. Modifiez vos r\u00E9ponses.',0,0,1);
I[0][3][6]=new Array('Is he wearing an old T-shirt?','Soit vous avez s\u00E9lectionn\u00E9 des phrases qui ne devraient pas l\'\u00EAtre soit vous en avez oubli\u00E9. Dans tous les cas vous n\'avez pas s\u00E9lectionnez uniquement des bonnes r\u00E9ponses et toutes les bonnes r\u00E9ponses. Modifiez vos r\u00E9ponses.',0,0,1);
I[0][3][7]=new Array('Does the train leave at 6:42?','Soit vous avez s\u00E9lectionn\u00E9 des phrases qui ne devraient pas l\'\u00EAtre soit vous en avez oubli\u00E9. Dans tous les cas vous n\'avez pas s\u00E9lectionnez uniquement des bonnes r\u00E9ponses et toutes les bonnes r\u00E9ponses. Modifiez vos r\u00E9ponses.',1,100,1);
I[0][3][8]=new Array('The sun is yellow.','Soit vous avez s\u00E9lectionn\u00E9 des phrases qui ne devraient pas l\'\u00EAtre soit vous en avez oubli\u00E9. Dans tous les cas vous n\'avez pas s\u00E9lectionnez uniquement des bonnes r\u00E9ponses et toutes les bonnes r\u00E9ponses. Modifiez vos r\u00E9ponses.',1,100,1);
I[0][3][9]=new Array('Who are you visiting tomorrow?','Soit vous avez s\u00E9lectionn\u00E9 des phrases qui ne devraient pas l\'\u00EAtre soit vous en avez oubli\u00E9. Dans tous les cas vous n\'avez pas s\u00E9lectionnez uniquement des bonnes r\u00E9ponses et toutes les bonnes r\u00E9ponses. Modifiez vos r\u00E9ponses.',0,0,1);
I[1]=new Array();I[1][0]=100;
I[1][1]='';
I[1][2]='3';
I[1][3]=new Array();
I[1][3][0]=new Array('I don\'t play the guitar at night.','Soit vous avez s\u00E9lectionn\u00E9 des phrases qui ne devraient pas l\'\u00EAtre soit vous en avez oubli\u00E9. Dans tous les cas vous n\'avez pas s\u00E9lectionnez uniquement des bonnes r\u00E9ponses et toutes les bonnes r\u00E9ponses. Modifiez vos r\u00E9ponses.',0,0,1);
I[1][3][1]=new Array('Who are you visiting tomorrow?','Soit vous avez s\u00E9lectionn\u00E9 des phrases qui ne devraient pas l\'\u00EAtre soit vous en avez oubli\u00E9. Dans tous les cas vous n\'avez pas s\u00E9lectionnez uniquement des bonnes r\u00E9ponses et toutes les bonnes r\u00E9ponses. Modifiez vos r\u00E9ponses.',1,100,1);
I[1][3][2]=new Array('He did not stop.','Soit vous avez s\u00E9lectionn\u00E9 des phrases qui ne devraient pas l\'\u00EAtre soit vous en avez oubli\u00E9. Dans tous les cas vous n\'avez pas s\u00E9lectionnez uniquement des bonnes r\u00E9ponses et toutes les bonnes r\u00E9ponses. Modifiez vos r\u00E9ponses.',1,100,1);
I[1][3][3]=new Array('Mark is driving too fast!','Soit vous avez s\u00E9lectionn\u00E9 des phrases qui ne devraient pas l\'\u00EAtre soit vous en avez oubli\u00E9. Dans tous les cas vous n\'avez pas s\u00E9lectionnez uniquement des bonnes r\u00E9ponses et toutes les bonnes r\u00E9ponses. Modifiez vos r\u00E9ponses.',1,100,1);
I[1][3][4]=new Array('Please, call me back.','Soit vous avez s\u00E9lectionn\u00E9 des phrases qui ne devraient pas l\'\u00EAtre soit vous en avez oubli\u00E9. Dans tous les cas vous n\'avez pas s\u00E9lectionnez uniquement des bonnes r\u00E9ponses et toutes les bonnes r\u00E9ponses. Modifiez vos r\u00E9ponses.',0,0,1);
I[1][3][5]=new Array('They will wait for her.','Soit vous avez s\u00E9lectionn\u00E9 des phrases qui ne devraient pas l\'\u00EAtre soit vous en avez oubli\u00E9. Dans tous les cas vous n\'avez pas s\u00E9lectionnez uniquement des bonnes r\u00E9ponses et toutes les bonnes r\u00E9ponses. Modifiez vos r\u00E9ponses.',1,100,1);
I[1][3][6]=new Array('What happened yesterday?','Soit vous avez s\u00E9lectionn\u00E9 des phrases qui ne devraient pas l\'\u00EAtre soit vous en avez oubli\u00E9. Dans tous les cas vous n\'avez pas s\u00E9lectionnez uniquement des bonnes r\u00E9ponses et toutes les bonnes r\u00E9ponses. Modifiez vos r\u00E9ponses.',1,100,1);
I[1][3][7]=new Array('She has got beautiful hair.','Soit vous avez s\u00E9lectionn\u00E9 des phrases qui ne devraient pas l\'\u00EAtre soit vous en avez oubli\u00E9. Dans tous les cas vous n\'avez pas s\u00E9lectionnez uniquement des bonnes r\u00E9ponses et toutes les bonnes r\u00E9ponses. Modifiez vos r\u00E9ponses.',0,0,1);
I[1][3][8]=new Array('We are going to fall.','Soit vous avez s\u00E9lectionn\u00E9 des phrases qui ne devraient pas l\'\u00EAtre soit vous en avez oubli\u00E9. Dans tous les cas vous n\'avez pas s\u00E9lectionnez uniquement des bonnes r\u00E9ponses et toutes les bonnes r\u00E9ponses. Modifiez vos r\u00E9ponses.',1,100,1);
I[1][3][9]=new Array('Do you really enjoy skiing?','Soit vous avez s\u00E9lectionn\u00E9 des phrases qui ne devraient pas l\'\u00EAtre soit vous en avez oubli\u00E9. Dans tous les cas vous n\'avez pas s\u00E9lectionnez uniquement des bonnes r\u00E9ponses et toutes les bonnes r\u00E9ponses. Modifiez vos r\u00E9ponses.',0,0,1);
I[2]=new Array();I[2][0]=100;
I[2][1]='';
I[2][2]='3';
I[2][3]=new Array();
I[2][3][0]=new Array('Look! She is feeding her kitten.','Soit vous avez s\u00E9lectionn\u00E9 des phrases qui ne devraient pas l\'\u00EAtre soit vous en avez oubli\u00E9. Dans tous les cas vous n\'avez pas s\u00E9lectionnez uniquement des bonnes r\u00E9ponses et toutes les bonnes r\u00E9ponses. Modifiez vos r\u00E9ponses.',0,0,1);
I[2][3][1]=new Array('I don\u2019t hate him, I just don\u2019t love him!','Soit vous avez s\u00E9lectionn\u00E9 des phrases qui ne devraient pas l\'\u00EAtre soit vous en avez oubli\u00E9. Dans tous les cas vous n\'avez pas s\u00E9lectionnez uniquement des bonnes r\u00E9ponses et toutes les bonnes r\u00E9ponses. Modifiez vos r\u00E9ponses.',1,100,1);
I[2][3][2]=new Array('What are they expecting from us?','Soit vous avez s\u00E9lectionn\u00E9 des phrases qui ne devraient pas l\'\u00EAtre soit vous en avez oubli\u00E9. Dans tous les cas vous n\'avez pas s\u00E9lectionnez uniquement des bonnes r\u00E9ponses et toutes les bonnes r\u00E9ponses. Modifiez vos r\u00E9ponses.',0,0,1);
I[2][3][3]=new Array('We don\u2019t really like mustard.','Soit vous avez s\u00E9lectionn\u00E9 des phrases qui ne devraient pas l\'\u00EAtre soit vous en avez oubli\u00E9. Dans tous les cas vous n\'avez pas s\u00E9lectionnez uniquement des bonnes r\u00E9ponses et toutes les bonnes r\u00E9ponses. Modifiez vos r\u00E9ponses.',1,100,1);
I[2][3][4]=new Array('Children stand up when the teacher enters the classroom.','Soit vous avez s\u00E9lectionn\u00E9 des phrases qui ne devraient pas l\'\u00EAtre soit vous en avez oubli\u00E9. Dans tous les cas vous n\'avez pas s\u00E9lectionnez uniquement des bonnes r\u00E9ponses et toutes les bonnes r\u00E9ponses. Modifiez vos r\u00E9ponses.',1,100,1);
I[2][3][5]=new Array('You are singing a very nice song.','Soit vous avez s\u00E9lectionn\u00E9 des phrases qui ne devraient pas l\'\u00EAtre soit vous en avez oubli\u00E9. Dans tous les cas vous n\'avez pas s\u00E9lectionnez uniquement des bonnes r\u00E9ponses et toutes les bonnes r\u00E9ponses. Modifiez vos r\u00E9ponses.',0,0,1);
I[2][3][6]=new Array('Do they understand what she means?','Soit vous avez s\u00E9lectionn\u00E9 des phrases qui ne devraient pas l\'\u00EAtre soit vous en avez oubli\u00E9. Dans tous les cas vous n\'avez pas s\u00E9lectionnez uniquement des bonnes r\u00E9ponses et toutes les bonnes r\u00E9ponses. Modifiez vos r\u00E9ponses.',1,100,1);
I[2][3][7]=new Array('I was looking for my keys.','Soit vous avez s\u00E9lectionn\u00E9 des phrases qui ne devraient pas l\'\u00EAtre soit vous en avez oubli\u00E9. Dans tous les cas vous n\'avez pas s\u00E9lectionnez uniquement des bonnes r\u00E9ponses et toutes les bonnes r\u00E9ponses. Modifiez vos r\u00E9ponses.',0,0,1);
I[2][3][8]=new Array('Does he read a lot of books?','Soit vous avez s\u00E9lectionn\u00E9 des phrases qui ne devraient pas l\'\u00EAtre soit vous en avez oubli\u00E9. Dans tous les cas vous n\'avez pas s\u00E9lectionnez uniquement des bonnes r\u00E9ponses et toutes les bonnes r\u00E9ponses. Modifiez vos r\u00E9ponses.',1,100,1);
I[2][3][9]=new Array('Who was sitting there?','Soit vous avez s\u00E9lectionn\u00E9 des phrases qui ne devraient pas l\'\u00EAtre soit vous en avez oubli\u00E9. Dans tous les cas vous n\'avez pas s\u00E9lectionnez uniquement des bonnes r\u00E9ponses et toutes les bonnes r\u00E9ponses. Modifiez vos r\u00E9ponses.',0,0,1);


function StartUp(){
	RemoveBottomNavBarForIE();

//If there's only one question, no need for question navigation controls
	if (QsToShow < 2){
		document.getElementById('QNav').style.display = 'none';
	}
	
//Stash the instructions so they can be redisplayed
	strInstructions = document.getElementById('InstructionsDiv').innerHTML;
	

	

	

	
	CompleteEmptyFeedback();

	SetUpQuestions();
	ClearTextBoxes();
	CreateStatusArray();
	

	
//Check search string for q parameter
	if (document.location.search.length > 0){
		if (ShuffleQs == false){
			var JumpTo = parseInt(document.location.search.substring(1,document.location.search.length))-1;
			if (JumpTo <= QsToShow){
				ChangeQ(JumpTo);
			}
		}
	}
//Undocumented function added 10/12/2004
	ShowSpecialReadingForQuestion();
}

function ShowHideQuestions(){
	FuncBtnOut(document.getElementById('ShowMethodButton'));
	document.getElementById('ShowMethodButton').style.display = 'none';
	if (ShowingAllQuestions == false){
		for (var i=0; i<QArray.length; i++){
				QArray[i].style.display = '';
			}
		document.getElementById('Questions').style.listStyleType = 'decimal';
		document.getElementById('OneByOneReadout').style.display = 'none';
		document.getElementById('ShowMethodButton').innerHTML = ShowOneByOneCaption;
		ShowingAllQuestions = true;
	}
	else{
		for (var i=0; i<QArray.length; i++){
				if (i != CurrQNum){
					QArray[i].style.display = 'none';
				}
			}
		document.getElementById('Questions').style.listStyleType = 'none';
		document.getElementById('OneByOneReadout').style.display = '';
		document.getElementById('ShowMethodButton').innerHTML = ShowAllQuestionsCaption;
		ShowingAllQuestions = false;	
	}
	document.getElementById('ShowMethodButton').style.display = 'inline';
}

function CreateStatusArray(){
	var QNum, ANum;
//For each item in the item array
	for (QNum=0; QNum<I.length; QNum++){
//Check if the question still exists (hasn't been nuked by showing a random selection)
		if (document.getElementById('Q_' + QNum) != null){
			State[QNum] = new Array();
			State[QNum][0] = -1; //Score for this q; -1 shows question not done yet
			State[QNum][1] = new Array(); //answers
			for (ANum = 0; ANum<I[QNum][3].length; ANum++){
				State[QNum][1][ANum] = 0; //answer not chosen yet; when chosen, will store its position in the series of choices
			}
			State[QNum][2] = 0; //tries at this q so far
			State[QNum][3] = 0; //incrementing percent-correct values of selected answers
			State[QNum][4] = 0; //penalties incurred for hints
			State[QNum][5] = ''; //Sequence of answers chosen by number
		}
		else{
			State[QNum] = null;
		}
	}
}





function CheckMultiSelAnswer(QNum){
//bail if question doesn't exist or exercise finished
	if ((State[QNum].length < 1)||(Finished == true)){return;}

//Increment the tries for this question
	State[QNum][2]++;
	
	var ShouldBeChecked;
	var Matches = 0;
	if (State[QNum][5].length > 0){State[QNum][5] += ' | ';}
	
//Check if there are any mismatches
	Feedback = '';
	var CheckBox = null;
	for (var ANum=0; ANum<I[QNum][3].length; ANum++){
		CheckBox = document.getElementById('Q_' + QNum + '_' + ANum + '_Chk');
		if (CheckBox.checked == true){
			State[QNum][5] += 'Y';
		}
		else{
			State[QNum][5] += 'N';
		}
		ShouldBeChecked = (I[QNum][3][ANum][2] == 1);
		if (ShouldBeChecked == CheckBox.checked){
			Matches++;
		}
		else{
			Feedback = I[QNum][3][ANum][1];
		}
	}
//Add the hit readout
	Feedback = Matches + ' / ' + I[QNum][3].length + '<br />' + Feedback;
	if (Matches == I[QNum][3].length){
//It's right
		CalculateMultiSelQuestionScore(QNum);
		if (ContinuousScoring == true){
			CalculateOverallScore();
			if ((ContinuousScoring == true)||(Finished == true)){
				Feedback += '<br />' + YourScoreIs + ' ' + Score + '%.';
				WriteToInstructions(YourScoreIs + ' ' + Score + '%.');
			}
		}
	}
	else{
//It's wrong -- Remove any previous score unless exercise is finished (6.0.3.8+)
		if (Finished == false){
			WriteToInstructions(strInstructions);
		}	
	}
		
//Show the feedback
	ShowMessage(Feedback);
	
//Check whether all questions are now done
	CheckFinished();
}

function CalculateMultiSelQuestionScore(QNum){
	var Tries = State[QNum][2];
	var TotAns = State[QNum][1].length;
	
//Make sure it's not already complete
	if (State[QNum][0] < 0){
		State[QNum][0] = (TotAns - (Tries-1)) / TotAns;
		if (State[QNum][0] < 0){
			State[QNum][0] = 0;
		}
	}
}



function CalculateOverallScore(){
	var TotalWeighting = 0;
	var TotalScore = 0;
	
	for (var QNum=0; QNum<State.length; QNum++){
		if (State[QNum] != null){
			if (State[QNum][0] > -1){
				TotalWeighting += I[QNum][0];
				TotalScore += (I[QNum][0] * State[QNum][0]);
			}
		}
	}
	if (TotalWeighting > 0){
		Score = Math.floor((TotalScore/TotalWeighting)*100);
	}
	else{
//if TotalWeighting is 0, no questions so far have any value, so 
//no penalty should be shown.
		Score = 100; 
	}
}

function CheckFinished(){
	var FB = '';
	var AllDone = true;
	for (var QNum=0; QNum<State.length; QNum++){
		if (State[QNum] != null){
			if (State[QNum][0] < 0){
				AllDone = false;
			}
		}
	}
	if (AllDone == true){
	
//Report final score and submit if necessary
		CalculateOverallScore();
		FB = YourScoreIs + ' ' + Score + '%.';
		if (ShowCorrectFirstTime == true){
			var CFT = 0;
			for (QNum=0; QNum<State.length; QNum++){
				if (State[QNum] != null){
					if (State[QNum][0] >= 1){
						CFT++;
					}
				}
			}
			FB += '<br />' + CorrectFirstTime + ' ' + CFT + '/' + QsToShow;
		}
		WriteToInstructions(FB);
		
		Finished == true;




		TimeOver = true;
		Locked = true;
		


		Finished = true;
		Detail = '<?xml version="1.0"?><hpnetresult><fields>';
		for (QNum=0; QNum<State.length; QNum++){
			if (State[QNum] != null){
				if (State[QNum][5].length > 0){
					Detail += '<field><fieldname>Question #' + (QNum+1) + '</fieldname><fieldtype>question-tracking</fieldtype><fieldlabel>Q ' + (QNum+1) + '</fieldlabel><fieldlabelid>QuestionTrackingField</fieldlabelid><fielddata>' + State[QNum][5] + '</fielddata></field>';
				}
			}
		}
		Detail += '</fields></hpnetresult>';
		setTimeout('Finish()', SubmissionTimeout);
	}

}










//-->

//]]>



