
var score;
var store = -1;
var qs = new Array();
var q = new Array();
var timeoutId = false;
var timeLimit = 62000;
var startTime;
var fs=1;
var change=0.2;
var unique = 0;

function intBetween(low,high) {return low + Math.floor(Math.random()*(high-low));}

function setLimit(){
	var textTime = document.getElementById("tl").value;
	while (textTime.charAt(0) == "0") textTime = textTime.slice(1);
	textTime = parseInt(textTime);
	if (!(textTime > 0 && textTime <1000)){
		alert("The Time Limit must be between 1 and 999 seconds.");
		return false;
	}
	else timeLimit = (2+textTime)*1000;
	return true;
}

function changeFont(bigSmall){
	fs = Math.min(Math.max(0.5,fs+change*bigSmall),9);
	var fontString = fs+"em";
	var cellItems = document.getElementsByTagName("td");
	for(var i=0;i<cellItems.length;i++) cellItems[i].style.fontSize=fontString;
}

function checkNumerals(evt){
	evt = (evt) ? evt:event;
	var charCode = (evt.charCode)? evt.charCode:((evt.keyCode)? evt.keyCode:((evt.which)? evt.which:0));
	if (charCode == 13 || charCode == 7) {
		newGame();
		return true;
	}
	if (charCode>31 && (charCode<48 || charCode>57)){
		alert("Only numerals 0 to 9 can be entered.");
		return false;
	}
	return true;
}

function toggleNav(t){
	var navBar = document.getElementById("nav");
	var mainDiv = document.getElementById("main");
	var hSpan = document.getElementById("quickButtons");
	var headDiv = document.getElementById("header");
	if (t.value=="<<"){
		t.value = ">>";
		navBar.style.display = "none";
		headDiv.style.display = "none";
		mainDiv.style.paddingLeft = "12px";
		hSpan.style.display = "inline";
	}
	else {
		t.value = "<<";
		navBar.style.display = "block";
		headDiv.style.display = "block";
		mainDiv.style.paddingLeft = "10.05em";
		hSpan.style.display = "none";
	}
}

function hit(cell) {
	var cellNum = cell.id.slice(1);
	if (cell.className != "complete") {
		if (store == -1) {
			store = cellNum;
			cell.className = "hit";
		}
		else if (cellNum != store) {
			var storedCell = document.getElementById("c" + store);
			if ((cell.firstChild.data != storedCell.firstChild.data)&&(qs[cellNum][0] == qs[store][0])) {
				cell.className = "complete";
				storedCell.className = "complete";
				score++;
				if (score%8 == 0) fillGrid();
			}
		else storedCell.className = "normal";
		store = -1;
		}
	}
}

function initArray(){
	q = new Array();
	var checks = document.getElementById("levels").getElementsByTagName("input");
	for (var i=0;i<checks.length;i++) {
		if (checks[i].checked) q = q.concat(dataArray[i][0]);
	}
	q.sort(random);
}

function createCheckBoxes(){
	for (var i=0;i<dataArray.length;i++){
		document.write("<input type='checkbox' name='lev" + i + "' id='l" + i + "' value='0' checked='checked' onclick='initArray();setMax();' /><label for='lev" + i + "'>" + dataArray[i][1] + "</label><br />");
	}
}

function fillGrid() {
	var cells = document.getElementsByTagName("td");
	var j;
	for (var i=0;i<8;i++) {
		j = intBetween(0,q.length);
		qs[2*i] = [q[j][unique],q[j][1]];
		qs[2*i+1] = [q[j][unique],q[j][0]];
	}
	qs.sort(random);
	for (var i=0;i<16;i++) {
		while(cells[i].firstChild) cells[i].removeChild(cells[i].firstChild);
		if (qs[i][1].substring(0,4) == "img_")
		{
			var newImg = document.createElement("img");
			newImg.setAttribute("src","images/" + qs[i][1].substring(4));
			cells[i].appendChild(newImg);
		}
		else
		{
			var expStrings = qs[i][1].split("^");
			for (var j=0;j<expStrings.length;j++){
				if(j%2==0){
					var newText = document.createTextNode(expStrings[j]);
					cells[i].appendChild(newText);
				}
				else {
					var sups = document.createElement("sup");
					var newText = document.createTextNode(expStrings[j]);
					sups.appendChild(newText);
					cells[i].appendChild(sups);
				}	
			}
		}	
		cells[i].className = "normal";
	}
}

function random() {return intBetween(-1,1);}

function newGame() {
	if (setLimit()){
		score = 0;
		startTime = new Date();
		initArray();
		fillGrid();
		if (timeoutId) window.clearInterval(timeoutId);
		timeoutId = window.setInterval('checkTime()',1000);
	}
}
	
function checkTime() {
	var now = new Date();
	var timeLeft = Math.floor((timeLimit - now.getTime() + startTime.getTime())/1000);
	var timeText = document.createTextNode(timeLeft);
	var timeTD = document.getElementById("timer");
	timeTD.replaceChild(timeText,timeTD.firstChild);
	if (timeLeft<1) endGame();
}

function endGame() {
	window.clearInterval(timeoutId);
	var scoreText = document.createTextNode("Score: " + score);
	var timeTD = document.getElementById("timer");
	timeTD.replaceChild(scoreText,timeTD.firstChild);
	var cells = document.getElementsByTagName("td");
	for (var i=0;i<16;i++) {
		while(cells[i].firstChild) cells[i].removeChild(cells[i].firstChild);
		var newText = document.createTextNode("Game Over");
		cells[i].appendChild(newText);
		cells[i].className = "complete";
	}
}
