﻿Status = new Array();


function CreateStatusArrays(){
	for (var x=0; x < I.length; x++){
		Status[x] = new Array();
		Status[x][0] = 0;                           // Question not done yet
		Status[x][1] = new Array();                //for tracking whether answers chosen
		for (var y=0; y< I[x][1].length; y++){
			Status[x][1][y] = '0';                //Answers not chosen yet
		}
		Status[x][2] = 0;                           //Wrong tries at this question so far
		Status[x][3] = 0;                          //For storing score out of one on this question
	}
}

function UpdateQuestionStatus(QNum){
	if (Status[QNum][2] >= Status[QNum][1].length-1){
		Status[QNum][0] = 1;
		for (var i=0; i< Status[QNum][1].length; i++){
			if (Status[QNum][1][i] == '0'){
				Status[QNum][1][i] = 'R';
			}
		}
	}
}

function ReplaceStuff(Token, Replacement, InString){
	var i = InString.indexOf(Token);
	var FirstBit = '';
	var LastBit = '';
	while (i>-1){
		FirstBit = InString.substring(0, i);
		LastBit = InString.substring(i + Token.length, InString.length);	
		InString = FirstBit + Replacement + LastBit;
		i = InString.indexOf(Token);
	}
	return InString;
}

function ChangeQ(ChangeBy){
	var NewNum = CurrQNum + ChangeBy;
	if ((NewNum >= 0)&&(NewNum< I.length)){
		CurrQNum = NewNum;
		ShowQuestion(CurrQNum);
	}
	var CurrScore = '';
	if ((ContinuousScoring == true)&&(EraseFeedback == true)){
		CalculateScore();
		var CurrScore = YourScoreIs + Score + '%.';
		WriteFeedback(CurrScore);
	}
}


function ChangeQNew(thisQ){
	var NewNum = thisQ;
	var PrevNum = CurrQNum;
	

      if ((NewNum >= 0)&&(NewNum< I.length)){	
           	if ((NewNum != CurrQNum)){	
	        	CurrQNum = NewNum;
		        ShowQuestion(CurrQNum);
	   }	

	  }
	var CurrScore = '';
	if ((ContinuousScoring == true)&&(EraseFeedback == true)){
		CalculateScore();
		var CurrScore = YourScoreIs + ' ' + Score + '%.';
		WriteFeedback(CurrScore);
	}
}

function BuildQuestion(QNum){
	if (I[QNum][2] == 0){
		var Temp = ReplaceStuff('[Question]', I[QNum][0], QRow);

		var AnsRows = '';
		for (var i=0; i< I[QNum][1].length; i++){
			TempAns = ARow;
			TempAns = ReplaceStuff('[ANum]', i, TempAns);
			TempAns = ReplaceStuff('[ALetter]', ' ' + ALetters.charAt(i) + ' ', TempAns);
			TempAns = ReplaceStuff('[Ans]', I[QNum][1][i][0], TempAns);
			AnsRows += TempAns;
		}
		Temp += AnsRows;
		Temp = ReplaceStuff('[QNumber]', QNum+1, Temp);
		Temp = ReplaceStuff('[QNum]', QNum, Temp);
	}
	else{
		var Temp = ReplaceStuff('[Question]', I[QNum][0], QRow);
		var AnsRows = '';
		for (var i=0; i< I[QNum][1].length; i++){
			TempAns = MARow;
			TempAns = ReplaceStuff('[ANum]', i, TempAns);
			TempAns = ReplaceStuff('[Correct]', I[QNum][1][i][2], TempAns);
			TempAns = ReplaceStuff('[Ans]', I[QNum][1][i][0], TempAns);
			AnsRows += TempAns;
		}
		Temp += AnsRows;
		Temp += CheckButton;
		Temp = ReplaceStuff('[QNumber]', QNum+1, Temp);
		Temp = ReplaceStuff('[QNum]', QNum, Temp);
	}
	return Temp;
}




function ShowQuestion(QNum){
                                                //First, create the Q number readout at the top
	// var Readout = (QNum+1) + '/' + I.length;
	// while (Readout.length < 7){
	// Readout = ' ' + Readout + ' ';
	// }
	// Readout = QButtonsOpener + Readout + QButtonsCloser;

	// var Output = BuildQuestion(QNum);

	// Output = TableOpener + Output + TableCloser;

	// DisplayExercise(Readout + Output);

                                                  // Mark the answers already done
	for (i=0; i< Status[QNum][1].length; i++){
		if (Status[QNum][1][i] == 'R'){
			MarkAnswer(QNum,i,true)
		}
		if (Status[QNum][1][i] == 'W'){
			MarkAnswer(QNum,i,false)
		}
		if (Status[QNum][1][i] == 'C'){
			CheckCheckbox(QNum,i);
		}
	}
                                         //Eliminate feedback from previous question
	if (EraseFeedback == true){
		WriteFeedback('erased');
	}
}








function CheckMulti(QNum){
	var TotWrong = 0;
	var Output = '';
	var TotAns = I[QNum][1].length;
	for (var i=TotAns-1; i>=0; i--){
                                           //Find any incorrect choices

		
		var b = eval('document.QForm.A_' + QNum + '_' + i);

		if (b != null){
                                              //if it's wrong, count it
			if (b.checked == true){
				Status[QNum][1][i] = 'C';
			}
			else{
				Status[QNum][1][i] = 'U';
			}
			if (((b.checked == true) && (b.value == "0"))||((b.checked == false)&&(b.value == "1"))){
				TotWrong++;
			}
		}				
	}

	if (TotWrong == 0){
		Output = DefaultRight;
	}
	else{
		Output = DefaultWrong + '    ' + (TotAns-TotWrong) + '/' + TotAns;
	}

//If you haven't tried the question before
	if (Status[QNum][0] == 0){
		if (TotWrong > 0){
			Status[QNum][2]++;
		}
		if (TotWrong == 0){
			Status[QNum][0] = 1;
//Calculate the score for this question as a floating-point fraction of 1
			Status[QNum][3] =  ((Status[QNum][1].length - Status[QNum][2]) - 1) / (Status[QNum][1].length - 1);
//If less than zero, set to zero
			if (Status[QNum][3] < 0){Status[QNum][3] = 0;}
		}
	}

//Check whether the quiz is finished
	var Finished = true;
	for (var i=0; i< Status.length; i++){
		if (Status[i][0] == 0){Finished = false;}
	}

//Calculate the score if needed
		
	if (Status[QNum][0] == 1){
		if ((Finished==true)||(ContinuousScoring==true)){
			CalculateScore();
			Output = Output + '   ' + YourScoreIs + Score + '%.';
		}

		if (Finished == true){
			EraseFeedback = false;
			var CFT = 0;
			for (i=0; i< I.length; i++){
				if (Status[i][2] == 0){
					CFT++;
				}
			}
		Output += ' ' + CorrectFirstTime + CFT + '/' + I.length;

		}
	}

//Show the feedback
	if (Output.length > 0){
		WriteFeedback(Output);
	}

}

function showMssg(mssg){

alert(mssg);

}



function CheckAnswer(QNum, ANum){


	var Output = I[QNum][1][ANum][1];

	if (Output==''){
		if (I[QNum][1][ANum][2] == 1){
			Output = DefaultRight;
		}
		else{
			Output = DefaultWrong;
		}
	}

                                              //If it's not been previously answered correctly
	if (Status[QNum][0] == 0){
                                             //If it's a correct answer
		if (I[QNum][1][ANum][2] == 1){
			Status[QNum][0] = 1;//Mark the Q as done
			Status[QNum][1][ANum] = 'R';
			MarkAnswer(QNum, ANum, true);
//Calculate the score for this question as a floating-point fraction of 1
			var PossibleWrongs = 0;
			for (var i=0; i< I[QNum][1].length; i++){
				if (I[QNum][1][i][2] == 0){
					PossibleWrongs++;
				}
			}

			if (PossibleWrongs == 0){PossibleWrongs = 1;}

			Status[QNum][3] = 1 - (Status[QNum][2]/PossibleWrongs);

                                               //If less than zero, set to zero
			if (Status[QNum][3] < 0){Status[QNum][3] = 0;}
		}
		else{
			if (Status[QNum][1][ANum] != 'W'){
				Status[QNum][1][ANum] = 'W';
				MarkAnswer(QNum, ANum, false);
				Status[QNum][2]++;                  //increment wrong tries for this Q
			}
		}
	}

	UpdateQuestionStatus(QNum);

//Check whether the quiz is finished
	var Finished = true;
	for (var i=0; i< Status.length; i++){
		if (Status[i][0] == 0){Finished = false;}

	}

//Calculate the score if needed
		
	if (Status[QNum][0] == 1){
		if ((Finished==true)||(ContinuousScoring==true)){
			CalculateScore();
			var thisQ = QNum + 1;   // MK
			Output = Output + ' ' + YourScoreIs + ' ' + Score + '%';
			
			if (QsToShow > 1) {
				Output = Output + '  after Question ' + thisQ + '.';
			}
			else {
				Output = Output + '.';	
			}
			
			
		}

		if (Finished == true){
			EraseFeedback = false;
			var CFT = 0;
			for (i=0; i< I.length; i++){
				if (Status[i][2] == 0){
					CFT++;
				}
			}
			
			if (QsToShow > 1) {
				Output += ' ' + CorrectFirstTime + CFT + '/' + I.length;
			}
			else {
				Output += ' ' + CorrectFirstTime + CFT;	
			}		
			

		}
	}
	
	

                                   //Show the feedback
								   								   								   
	if (Output.length > 0){
       WriteFeedbackSpecific(Output,Finished,QNum);
	// WriteFeedback(Output);
	}
}

function CalculateScore(){
	var TriedQs = 0;
	var TotalScore = 0;
	for (var i=0; i< Status.length; i++){
		if ((Status[i][2] > 0)||(Status[i][3] == 1)){
			TriedQs++;
			TotalScore += Status[i][3];
		}
	}
	if (TriedQs == 0){
		Score = 0;
	}
	else{
		Score = (Math.floor(100 * (TotalScore/TriedQs)));
	}
}

function MarkAnswer(QNum, ANum, Right){
	var Mark = CorrectIndicator;
	if (Right == false){Mark = IncorrectIndicator;}


	if (eval('document.QForm.FB_' + QNum + '_' + ANum) != null){
		eval('document.QForm.FB_' + QNum + '_' + ANum).value = Mark;
	}
}

function CheckCheckbox(QNum, ANum){
		
	if (eval('document.QForm.A_' + QNum + '_' + ANum) != null){
		eval('document.QForm.A_' + QNum + '_' + ANum).checked = true;
	}
}

