
/*
FILE NAME:		SpeedTest.js
PROGRAMMER:		Dave Rhodes
LAST MODIFIED:	9/5/06
VERSION:		1.3
*/

var images = new Array("tick.bmp", "cross.bmp", "blank.bmp", "bhed.gif", "COL_S_RCP_RGB.GIF");
var preload = new Array();
for(var i = 0; i <  images.length - 1; i++)
{
	preload[i] = new Image();
	preload[i].src = images[i];	
}	

var bClockStopped = false;

function ChangeColor(bOver, row, col)
{
	for(var i = 0; i < 13; i++)
	{
		for(var j = 0; j < 13; j++)
		{
			if(i == row || j == col)
			{
				var elm = document.getElementById("td" + ((i * 13) + j));
				if(elm)
				{
					if(bOver == true)
					{
						if((i == row && j <= col)||(j == col && i <= row))
						{ 
							elm.style.backgroundColor =	"#0088FF";
						}
					}
					else
					{
						if((i == row && j <= col) || (j == col && i <= row))
						{ 
							elm.style.backgroundColor = "#80FFFF";
						}
					}
				}
			}
		}
	}
}

function FormatAnswer(val)
{
	var retVal = "";
	
	var i = 0;
	for(i = 0; i < val.length && val.charAt(i) == ' '; i++);

	for(; i < val.length; i++)
	{
		retVal += val.charAt(i);
	}

	return retVal;
}

function OpenPopup(sPath, nHeight)
{
	window.open(sPath,"","top=20, left=20, width=500, height=" + nHeight + ", scrollbars, resizable");
}

function OpenNSPopup(sPath, nHeight)
{
	window.open(sPath,"","top=20, left=20, width=450, height=" + nHeight + ", scrollbars, resizable");
}

function StopTheClock()
{
	bClockStopped = true;
}

function CheckForDisplayingStopButton()
{
	var bAllAnswered = true;
	for(var i = 0; i < 10 && bAllAnswered == true; i++)
	{
		var elm = document.getElementById("txt" + i);
		if(elm)
		{
			if(FormatAnswer(elm.value).length == 0)
			{
				bAllAnswered = false;
			}
		}
	}
	
	var elm = document.getElementById("StopClock");
	if(elm)
	{
		if(bAllAnswered == true)
		{
			elm.style.display = '';
		}
		else
		{
			elm.style.display = 'none';
		}
	}
}

function CreateTimeString(minutes, secs, sMinutes, sSeconds)
{
	var str = ", with ";
	if(minutes > 0)
	{
		str += minutes + sMinutes;
				
		if(secs > 0)
			str += " and ";
	}
			
	str +=  + secs + sSeconds + " to spare";
	return str;
}

function CheckAnswers(elm, timeLeft)
{
	var sSeconds = " second";
	var sMinutes = " minute";
	var minutes = Math.floor(timeLeft / 60);
	var secs = timeLeft % 60;
	if(timeLeft == 0)
	{
		elm.innerHTML =  "Time's up!<br/>";
	}
	else
	{
		if(minutes > 1)
		{
			sMinutes += "s";
		}
		
		if(timeLeft % 60 > 1)
		{
			sSeconds += "s";
		}
		
		elm.innerHTML = "";
	}
	
	var correctCount = 0;
	
	for(var i = 0; i < 10; i++)
	{
		var elm1 = document.getElementById("txt" + i);
		var elm2 = document.getElementById("ans" + i);
		var elm3 = document.getElementById("img" + i);
		if(elm1 && elm2 && elm3)
		{
			//alert(elm2.value + " " + FormatAnswer(elm1.value));
			if(elm2.value == FormatAnswer(elm1.value))
			{
				elm3.src = "tick.bmp";
				correctCount++;
			}
			else
			{
				elm3.src = "cross.bmp";
				elm3 = document.getElementById("atd" + i);
				if(elm3 != null)
				{
					elm3.innerHTML = "answer<br/>= " + elm2.value;
				}
			}
		}
	}
	
	elm1 = document.getElementById("type");
	
	var sSubject;
	if(elm1.value.indexOf("Mixed") >= 0)
	{
		if(elm1.value.indexOf("Number Bond") >= 0)
		{
			sSubject = "number bond";
			
		}
		else
		{
			sSubject = "maths";
		}
	}
	else
	{
		sSubject = elm1.value.toLowerCase();
	}
	
	elm1 = document.getElementById("StopClock");
	if(elm1)
	{
		elm1.style.display = 'none';
	}
	
	if(correctCount == 10)
	{
		elm.innerHTML +=  "You scored 10 correct answers - full marks";
		if(timeLeft > 0)
		{
			elm.innerHTML += CreateTimeString(minutes, secs, sMinutes, sSeconds);
		}
		
		elm.innerHTML +=  "! Your " + sSubject; 
		
		if(sSubject.indexOf("number bond") < 0)
		{
			elm.innerHTML +=  " is excellent. Well done!";
		}
		else
		{
			elm.innerHTML +=  "s are excellent. Well done!";
		}
	}
	else if(correctCount >= 8)
	{
		elm.innerHTML +=  "Very good - you scored " + correctCount + " correct answers";
		if(timeLeft > 0)
		{
			elm.innerHTML += CreateTimeString(minutes, secs, sMinutes, sSeconds);
		}
		
		elm.innerHTML += "!";
	}
	else if(correctCount >= 6)
	{
		elm.innerHTML +=  "Quite good - you scored " + correctCount + " correct answers";
		if(timeLeft > 0)
		{
			elm.innerHTML += CreateTimeString(minutes, secs, sMinutes, sSeconds);
		}
		else
		{
			elm.innerHTML += ".";
		}
	}
	else if(correctCount >= 4)
	{
		elm.innerHTML +=  "You managed to score " + correctCount + " correct answers";
		if(timeLeft > 0)
		{
			elm.innerHTML += CreateTimeString(minutes, secs, sMinutes, sSeconds);
		}
		elm.innerHTML += ". Try to improve your score next time by studying the questions before clicking the 'Begin Test' button.";
	}
	else
	{ 
		elm.innerHTML +=  "You scored " + correctCount + " correct answer"
		
		if(correctCount != 1)
		{
			elm.innerHTML += "s";
		}
		
		if(timeLeft > 0)
		{
			elm.innerHTML += ", but still had ";
			if(minutes > 0)
			{
				elm.innerHTML += minutes + sMinutes;
				
				if(secs > 0)
					elm.innerHTML += " and ";
			}
			
			elm.innerHTML +=  + secs + sSeconds + " left.";
		}
		else
		{
			elm.innerHTML += ".";
		}
		
		elm.innerHTML += " You may need to ask for some help from a teacher or other adult.";
	}
	
	var elm4 = document.getElementById("table1");
	if(elm4)
	{
		elm4.style.display = 'none';
	}
	
	var elm4 = document.getElementById("table2");
	if(elm4)
	{
		elm4.width = '90%';
		elm4.style.border = "solid blue 1px"; 
	}
}

function Test(timeLeft, max)
{
	var elm1 = document.getElementById("BtnStart");
	var elm2 = document.getElementById("BtnSub");
	var elm3 = document.getElementById("p11");
	var elm4 = document.getElementById("td" + Math.floor((max - timeLeft) / (max / 60)));
	var elm5 = document.getElementById("table1");
	
	if(elm1 && elm2 && elm3 && elm5)
	{	
		if(elm4)
		{
			elm4.style.backgroundColor = '#FF0000';
		}
		
		if(timeLeft <= 0 || bClockStopped)
		{
			CheckAnswers(elm3, timeLeft);
			
			elm2.style.display = '';
		}
		else
		{	
			if(timeLeft == max)
			{
				for(var i = 0; i < 10; i++)
				{
					var elm6 = document.getElementById("txt" + i);
					if(elm6)
					{
						elm6.style.visibility = 'visible';
					}	
				}
			}
			
			elm1.style.display = 'none';
			elm3.innerHTML = "";
			
			var minutes = Math.floor(timeLeft / 60);
			if(minutes > 0)
			{
				elm3.innerHTML += minutes + " minute";
				elm3.innerHTML += (minutes > 1?"s":"");	
			}
			
			if(timeLeft % 60 > 0)
			{
				elm3.innerHTML +=  " " + timeLeft % 60 + " second";
				elm3.innerHTML += (timeLeft % 60 > 1?"s":"");
			}
			
			elm3.innerHTML +=  " to go....";
			elm5.style.display = '';
			
			CheckForDisplayingStopButton();
			setTimeout('Test(' + (timeLeft - 1) + ', ' + max + ')', 1000);
		}
	}
}

function ShowLimits()
{

	var elm0 = document.getElementById("opt2");
	var elm1 = document.getElementById("opt3");
	var elm4 = document.getElementById("opt4");
	var elm2 = document.getElementById("bondLimit");
	var elm3 = document.getElementById("t1");
	
	var optBonds = document.getElementById("bondLimitBonds");
	var optMissing = document.getElementById("bondLimitMissing");
	
	var opBonds = document.getElementById("opBonds");
	var op = document.getElementById("op");

	if(elm3)
	{	
		if(elm0.selected == true || elm1.selected == true || elm4.selected == true)
		{
			elm3.style.display = '';
		}
		else
		{
			elm3.style.display = 'none';
		}
		
		var idx = elm3.innerHTML.indexOf(":");
		if(elm0.selected == true)
		{
			var str = elm3.innerHTML.substr(idx + 1, elm3.innerHTML.length - idx);
			elm3.innerHTML = "Target&#160;Value:" + str;
		}
		else if(elm1.selected == true || elm4.selected == true)
		{
			var str = elm3.innerHTML.substr(idx + 1, elm3.innerHTML.length - idx);
			elm3.innerHTML = "Max&#160;Value:" + str;
		}
		
		optBonds = document.getElementById("bondLimitBonds");
		optMissing = document.getElementById("bondLimitMissing");
		op.style.display = (elm0.selected == true? 'none': '');
		opBonds.style.display = (elm0.selected == true? '': 'none');
		optBonds.style.display = (elm0.selected == true? '': 'none');
		optMissing.style.display = (elm0.selected == true? 'none': '');
	}
}

