/*
http://www.memorise.org

File: code.js
Author: Metin Hassan
© Copyright 2003 memorise.org, All Rights Reserved.
*/

var listObj;
var randNumObj;
var stop;
var changeTime;
var flashTime;
var counter; //counts how many numbers have been displayed
var playsnd;
var shownum; //boolean
var factor;  //boolean
var numDigits;
var maxLength = "0000000000";
var incorrect;
var consecCorrect;
var correcty;
var PACE;

//==========================Internet=Explorer=Functions=====================================
function run(boolplay,boolshow)
{
	//initialise variables
	randNumObj = eval("document.getElementById(\"noway\")");
	listObj = eval("document.getElementById(\"strin\")");
	stop = eval("document.getElementById(\"halt\")");
	document.getElementById("box").bgColor = 'FFFFFF';
	document.getElementById("startButton").disabled=true;
	document.getElementById("answerArea").disabled=true;
	document.getElementById("correctButton").disabled=true;
	stop.value = "false";
	listObj.value = "";
	changeTime = document.getElementById("chngeTime").value;
	flashTime = document.getElementById("dispTime").value * changeTime;
	counter=0;
	factor=Math.pow(10,document.getElementById("simDigits").value);
	numDigits = document.getElementById("simDigits").value;
	playsnd = boolplay;
	shownum = boolshow;

	//begin
	begin();
}
//=========================================================================================
function begin()
{
	setTimeout('change_numbers()',changeTime);
}
//=========================================================================================
function change_numbers()
{
	randomNumber = getRandNum();

	if(shownum == true)
	{
		randNumObj.innerHTML = randomNumber;
	}
	if(playsnd == true)
	{
		if(document.all) {
			str = "./sounds/" + randomNumber + ".wav";
			playSound(str);
		}
		else {
			str = "sound" + randomNumber;
			playSound(str);
		}
	}
	
	setTimeout('flash()',flashTime);
	listObj.value += randomNumber;
	counter++;

	if(counter < document.getElementById("amount").value && stop.value == "false")
	{
		begin();
	}
	else
	{
		finish();
		document.getElementById("startButton").disabled=false;
		document.getElementById("box").bgColor = 'FFFFFF';
		document.getElementById("answerArea").disabled=false;
		document.getElementById("correctButton").disabled=false;
	}
}
//===========================================================================================
function getRandNum()
{
	temp = Math.floor(Math.random() * factor);
	nums = maxLength + temp;
	return (nums.substring(nums.length-numDigits,nums.length));
}
//===========================================================================================
function flash()
{
	randNumObj.innerHTML = " ";
}
//============================================================================================
function finish()
{
	document.getElementById("halt").value = "true";
	PACE = document.getElementById("chngeTime").value;
	setTimeout('tabs(1)',1000);
}
//============================================================================================
function validateChar(val)
{
	validChars = "0123456789"
	temp = "";

	for(i=0;i<val.length;i++) 
		if(validChars.indexOf(val.charAt(i))>=0) 
			temp+=val.charAt(i);

	return temp;
}
//============================================================================================
function neatenValidate(val)
{
	validChars = "0123456789";
	temp = "";

	for(i=0;i<val.length;i++) 
		if(validChars.indexOf(val.charAt(i))>=0) 
			temp+=val.charAt(i)+", ";

	return temp;
}
//===========================================================================================
function playSound(val)
{ 
	if(document.all) {
		document.getElementById("sound").src = val;
	}
	else {
		document.getElementById(val).Play();
	}
}
//===========================================================================================
function correct()
{
	incorrect = 0;
	correctAnswer = document.getElementById("strin").value;
	userAnswer = validateChar(document.getElementById("answerArea").value);
	document.getElementById("correctButton").disabled=true;

	var correctionWindow = "";
	var addForm = "";

	correctionWindow = "<TABLE class = mainFontText BORDER=\"0\" BORDERCOLOR=#AAAAAA "
		+ "CELLSPACING=0 align = center><TR><TD BGCOLOR='#99C0DD'>Sancho's recall</TD>"
 		+ generateReport() + "</TABLE><BR>"
		+ "<TABLE class = mainFontText BORDER=0 align = center>"
		+ "<TR><TD>Numbers attempted:</TD><TD>"+correctAnswer.length+"</TD></TR>"
		+ "<TR><TD>Correctly recalled:</TD><TD>"+correcty+"</TD></TR>"
		+ "<TR><TD>Consecutively recalled:</TD><TD>"+consecCorrect+"</TD></TR>"
		+ "<TR><TD>Incorrectly recalled:</TD><TD>"+incorrect+"</TD></TR>"
		+ "</TABLE>";


	correctionWindow += "<div align = center><INPUT TYPE=BUTTON VALUE=\"Close\" ONCLICK=\"clearAns()\"></INPUT></div>";

	addForm = "<form method=\"post\" action=\""+window.location.href+"\">\n"
		+ "<input type=\"hidden\" name=\"score\" value=\""+consecCorrect+"\">\n"
		+ "<input type=\"hidden\" name=\"pace\" value=\""+PACE+"\">\n"
		+ "<input type=\"hidden\" name=\"bunch\" value=\""+document.getElementById("simDigits").value+"\">\n"
		+ "<input type=\"hidden\" name=\"storeMyResult\" value=\"true\">\n"
		+ "<input type=\"submit\" value=\"Store Result\">\n"
		+ "</form>\n";

	document.getElementById("result").innerHTML = correctionWindow;

	if(document.getElementById("loggedIn").value == "true")
	{
		document.getElementById("result").innerHTML += addForm;
	}

	if(consecCorrect < correctAnswer.length)
	{
		document.getElementById("noway").innerHTML = "<IMG SRC=\"./images/face2.jpg\"></IMG>" 
			+ "<BR><FONT SIZE=4>You couldnt match me!</FONT>";
	}
	else if(consecCorrect >= correctAnswer.length)
	{
		document.getElementById("noway").innerHTML = "<IMG SRC=\"./images/face3.jpg\"></IMG>" 
			+ "<BR><FONT SIZE=4>You scored 100%!<BR>I want a rematch!</FONT>";
	}

	document.getElementById("resultWindow").border = 0;
//	alert(document.getElementById('result').innerHTML);
}
//============================================================================================
function generateReport()
{
	var str = "";
	var userStr = "";
	var countCells = 0;

	incorrect = 0;
	consecCorrect = 0;
	correcty = 0;

	added = false;


	for(i=0;i<correctAnswer.length ||i<userAnswer.length;i++)
	{
		str +="<TD BGCOLOR='#99C0DD'>"+correctAnswer.charAt(i)+"</TD>";

		if(userAnswer.charAt(i) != correctAnswer.charAt(i))
		{
			incorrect++;
			userStr += "<TD BGCOLOR='#ff6600'>" + userAnswer.charAt(i) + "</TD>";
		}
		else
		{
			if(incorrect == 0)
			{
				consecCorrect++;
			}
			correcty++;
			userStr += "<TD BGCOLOR='#ffff99'>" + userAnswer.charAt(i) + "</TD>";
		}

		countCells++;
		if(countCells == 20)
		{
			if(userAnswer.length > (i+1) || correctAnswer.length > (i+1))
			{
				str += "</TR><TR><TD BGCOLOR='yellow'>Your recall</TD>" + userStr + 
					"</TR><TR><TD BGCOLOR='#99C0DD'>Sancho's recall</TD>";
			}
			else
			{
				str += "</TR><TR><TD BGCOLOR='yellow'>Your recall</TD>" + userStr + "</TR>";
			}
			countCells = 0;
			added = true;
			userStr = "";
		}
		else
		{
			added = false;
		}

	}
	if(!added)
	{
		str += "</TR><TR><TD BGCOLOR='yellow'>Your recall</TD>" + userStr + "</TR>";
	}
	else
	{
		str += "</TR>";
	}
	return str;
}
//============================================================================================================
function clearAns()
{
	document.getElementById("result").innerHTML=""; 
	document.getElementById("resultWindow").border = 0;
}
//============================================================================================================
function help()
{
	str = "Once memorisation has stopped, type \nthe numbers you can recall in the textarea below.\nOnly ";
	str +="digits will be taken into account. \nSo feel free to seperate digits with spaces etc.";
	alert(str);
}
//============================================================================================================
function tabs(val)
{
	document.getElementById("ansArea").style.zIndex=val;
	if(val == -1)
	{
		document.getElementById("begin").style.visibility="visible";
	}
	else if(val == 1)
	{
		document.getElementById("begin").style.visibility="hidden";
	}
}
//========================================END=OF=FiLE=======================================================
