/*
	Robert M. Baldwin
	http://www.veganbob.com/
	http://www.deluxeboggle.com/
*/


// ------------------------------------------------------------------
// General Functions

function openToolbar()
{
	var tbdiv = document.getElementById("toolbar");
	tbdiv.style.display = "block";
}


// ------------------------------------------------------------------
// Board Functions

function makeNewBoard()
{
	getNewBoard();
	resetTimer();
}

function setNewBoard(board)
{
	var tbdiv = document.getElementById("gameboard_container");
	tbdiv.innerHTML = board;
}

function getNewBoard() 
{
	var req = null;
	
	// branch for native XMLHttpRequest object
	if(window.XMLHttpRequest) 
	{
		try 
		{
			req = new XMLHttpRequest();
		} 
		catch(e) 
		{
			req = null;
		}
	}
	
	// branch for IE/Windows ActiveX version 
	else if(window.ActiveXObject) 
	{
		try 
		{
			req = new ActiveXObject("Msxml2.XMLHTTP");
		} 
		catch(e) 
		{
			try 
			{
				req = new ActiveXObject("Microsoft.XMLHTTP");
			} 
			catch(e) 
			{
				req = null;
			}
		}
	}
	
	// if request is possible, send it
	if(req) 
	{
		req.onreadystatechange = 
			function() 
			{ 
				if(req.readyState == 4)
					if(req.status == 200)
					{
						setNewBoard(req.responseText);
					}
			}
		req.open("GET", "genboard.php" + "?r=" + new Date().getTime(), true);
		req.send(null);
	}
}


// ------------------------------------------------------------------
// Timer Functions

var timerid = -1;
var timerseconds = 180;

function startTimer()
{
	timerseconds--;
	var mins = Math.floor(timerseconds / 60);
	var secs = timerseconds % 60;
	var tm = document.getElementById("timer");
	if(secs < 10)
		tm.innerHTML = ''+mins+':0'+secs;
	else
		tm.innerHTML = ''+mins+':'+secs;
	if(timerseconds==0)
	{
		timeUp();
		return;
	}
	timerid = window.setTimeout('startTimer()', 1000);
}

function timeUp()
{
	stopTimer();
	var gbdiv = document.getElementById("gameboard");
	gbdiv.style.color = "red";
	
}

function stopTimer()
{
	if(timerid != -1)
	{
		window.clearTimeout(timerid);
		timerid = -1;
	}
}

function resetTimer()
{
	stopTimer();
	var tm = document.getElementById("timer");
	tm.innerHTML = '3:00';
	timerseconds = 180;
}


// ------------------------------------------------------------------
// Lookup Functions

function clearWordForm()
{
	var wdoutput = document.getElementById("lookup_result");
	wdoutput.innerHTML = '';
	wdoutput.style.display = 'none';
	var wdinput = document.getElementById("lookup_word");
	wdinput.value = '';
}

function lookupWord()
{
	var wdinput = document.getElementById("lookup_word");
	var req = null;
	
	if(wdinput.value=="")
	{
		return;	
	}
	
	// branch for native XMLHttpRequest object
	if(window.XMLHttpRequest) 
	{
		try 
		{
			req = new XMLHttpRequest();
		} 
		catch(e) 
		{
			req = null;
		}
	}
	
	// branch for IE/Windows ActiveX version 
	else if(window.ActiveXObject) 
	{
		try 
		{
			req = new ActiveXObject("Msxml2.XMLHTTP");
		} 
		catch(e) 
		{
			try 
			{
				req = new ActiveXObject("Microsoft.XMLHTTP");
			} 
			catch(e) 
			{
				req = null;
			}
		}
	}
	
	// if request is possible, send it
	if(req) 
	{
		req.onreadystatechange = 
			function() 
			{ 
				if(req.readyState == 4)
					if(req.status == 200)
					{
						lookupWordResult(wdinput.value, req.responseText);
					}
			}
		req.open("GET", "validate.php?word=" + wdinput.value, true);
		req.send(null);
	}
}

function lookupWordResult(word, result)
{
	var wdoutput = document.getElementById("lookup_result");
	wdoutput.style.display = 'block';
	if(result=="true")
	{
		wdoutput.innerHTML = '' + word + ' is in the dictionary.';
	}
	else
	{
		wdoutput.innerHTML = '' + word + ' is NOT in the dictionary.';
	}
}

// ------------------------------------------------------------------
// Scoring Functions

var players = new Array();
var scores = new Array();

function addScore()
{
	var player_id = -1;
	var player_name = document.getElementById("playername").value;
	var num_letters = parseInt(document.scoring_addscoreform.numletters.value);
	var num_words = parseInt(document.getElementById("numwords").value);
	
	// validate
	if(player_name=="" || num_words=="" || isNaN(num_letters) || isNaN(num_words)) 
	{
		return;
	}
	
	// find player
	for(var i=0; i<players.length; i++)
	{
		if(players[i].toLowerCase()==player_name.toLowerCase())
		{
			player_id = i;
			break;
		}
	}
	
	// new player
	if(player_id==-1)
	{
		player_id = players.length;
		players[player_id] = player_name;
		scores[player_id] = 0;
	}
	
	// update score
	switch(num_letters)
	{
		case 4: scores[player_id] +=  num_words * 1; break;
		case 5: scores[player_id] +=  num_words * 2; break;
		case 6: scores[player_id] +=  num_words * 3; break;
		case 7: scores[player_id] +=  num_words * 5; break;
		case 8: scores[player_id] +=  num_words * 11; break;	
	}
	
	// bubble sort (I'm being laaaaazy)
	for(var i=0; i<players.length; i++)
	{
		for(var j=0; j<players.length; j++)
		{
			if(scores[j]<scores[i])
			{
				var temp = scores[i];
				scores[i] = scores[j];
				scores[j] = temp;
				
				temp = players[i];
				players[i] = players[j];
				players[j] = temp;
			}
		}
	}
	
	// rewrite score div
	var score_div = document.getElementById("scoring_player_listings");
	var code = '<table>';
	for(var i=0; i<players.length; i++)
	{
		code += '<tr><td class="playernamelisting">'+players[i]+'</td><td>'+scores[i]+'</td></tr>';	
	}
	code += '</table>';
	score_div.innerHTML = code;
	score_div.style.display = "block";
}



