var refreshGameVar;
var msgTimeOut;
var refreshGameVar;
var gameTimer;
var scoresShown = false;
var lastLetterChosen;
var dir;

var diceImg2 = new Image();
diceImg2.src = baseDir+ "images/dice-over.gif";

var l1;
var l2;
var l3;
var l4;
var l5;

function ajaxFunction() {
	var ajax;
	try {
		ajax = new XMLHttpRequest();
	} catch (e) {
		try {
			ajax = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try {
				ajax = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e) {
				alert("Your browser does not support AJAX!");
				return false;
			}
		}
	}
	return ajax;
}

function showMsg(msg,id,color) {
	document.getElementById(id).style.color = color;
	document.getElementById(id).innerHTML = msg;
}

function selectLetter(box,img) {
	var img1 = "url(" +baseDir+ "images/dice.gif)";
	var img2 = "url(" +baseDir+ "images/dice-over.gif)";
	var img1_name = "dice.gif";
	var img2_name = "dice-over.gif";
	var img1_color = "#6B2B01";
	var img2_color = "#105C00";
	showMsg('','errorMsg','');
	if (box) {
		showMsg('','newWordMsg','');
		if (img == 1) {
			if (document.getElementById(box)) {
				document.getElementById(box).style.backgroundImage = img1;
				document.getElementById(box).style.color = img1_color;
			} else {
				box.style.backgroundImage = img1;
				box.style.color = img1_color;
			}
		} else {
			//var tag = box.id;
			if (document.getElementById(box)) {
				var newBox = document.getElementById(box);
			} else {
				var newBox = box;
			}
			
			if (addLetters(newBox) == false) {
				showMsg('That letter can\'t be chosen with your current letters.','errorMsg','red');
				return;
			}
			
			if (document.getElementById(box)) {
				document.getElementById(box).style.backgroundImage = img2;
				document.getElementById(box).style.color = img2_color;
			} else {
				box.style.backgroundImage = img2;
				box.style.color = img2_color;
			}
		}
	} else {
		var tags = document.getElementsByTagName("td");
		var row = 1;
		var col = 1;
		var i;
		if (img == 1) {
			for (i=0;i<tags.length;i++) {
				if (tags[i].style.backgroundImage == img2 || tags[i].style.backgroundImage.indexOf("/" +img2_name) > -1) {
					tags[i].style.backgroundImage = img1;
					tags[i].style.color = img1_color;
				}
			}
		} else {
			for (i=0;i<tags.length;i++) {
				if (tags[i].style.backgroundImage == img1 || tags[i].style.backgroundImage.indexOf("/" +img1_name) > -1) {
					tags[i].style.backgroundImage = img2;
					tags[i].style.color = img2_color;
				}
			}
		}
	}
}

function getChat(room) {
	ajaxChat = ajaxFunction();
	ajaxChat.onreadystatechange = function () { getChat_stateChanged(room); };
	var url = baseDir+"inc/chat.php?r=" +room;
	
	ajaxChat.open("GET", url, true);
	ajaxChat.send(null);
}

function getChat_stateChanged(room) { 
	var tag = document.getElementById("chatWindow");
	if (ajaxChat.readyState == 4) {
		
		var addOn = ajaxChat.responseText;
		//addOn = addOn.replace("<br />","<br>");
		//addOn = addOn.replace("<BR />","<BR>");
		//var tester = addOn.toLowerCase();
		if (ajaxChat.responseText != tag.innerHTML) {
			var addOn = ajaxChat.responseText;
			//addOn = addOn.replace("<br />","<br>");
			//addOn = addOn.replace(tag.innerHTML,"");
			
			//alert(ajaxChat.responseText+ "\n\n" +tag.innerHTML);
			//tag.innerHTML = tag.innerHTML + addOn;
			tag.innerHTML = addOn;
			tag.scrollTop = tag.scrollHeight;
		}
	}
}
function chatRoom() {
	setInterval("getChat('" +roomID+ "')",chatRefreshRate);
}

function postChat(room) {
	ajaxPostChat = ajaxFunction();
	var contentType = "application/x-www-form-urlencoded; charset=UTF-8";
	ajaxPostChat.onreadystatechange = function () { postChat_stateChanged(room); };
	var url = baseDir+"inc/chat.php?r=" +room+ "&addto=1";
	var msg = document.chat.msg.value;
	var nick = document.chat.nickname.value;
	
	/*
	// Remove bad words
	badWords = "fucking,fuking,fucing,fuckin,fucken,fukin,fucin,fuken,fucen,fuck,fukkin,fukken,fukking,fukker,fuk,shit,bitch,biotch,beotch,fucker,fuker,fucer,ass,asshole,ass hole,asswhole,ass whole,penis,pussy,vagina,cum,sex,nigger,nigga,cunt,dike,fag,faggot,faggoty,cock,dyke,retard,retarded,douche";
	badWords2 = badWords.split(",");
	
	for (i=0;i<badWords2.length;i++) {
		var badWordRegEx = new RegExp(badWords2[i], "gi");
		comment = comment.replace(badWordRegEx,"");
	}
	comment = comment.replace(/\s+/g," ");
	
	if (comment == "" || comment == " ") {
		alert("Your comment is empty after taking out all the bad words.");
		return;
	}
	*/
	
	// Disable HTML
	msg = msg.replace(/\[&\]/g,'&amp;');
	msg = msg.replace(/\[>\]/g,'&gt;');
	msg = msg.replace(/\[<\]/g,'&lt;');
	msg = msg.replace(/\["\]/g,'&quot;');
	msg = msg.replace(/&/g,'&amp;');
	msg = msg.replace(/>/g,'&gt;');
	msg = msg.replace(/</g,'&lt;');
	msg = msg.replace(/"/g,'&quot;');
	
	var query = "msg=" + escape(encodeURI(msg));
	query = query+ "&nick=" + escape(nick);
	ajaxPostChat.open("POST", url, true);
	ajaxPostChat.setRequestHeader("Content-Type", contentType);
	ajaxPostChat.send(query);
}

function postChat_stateChanged(room) {
	if (ajaxPostChat.readyState == 4) {
		document.chat.msg.value = "";
	}
}

function refreshGame(room) {
	ajaxRefreshGame = ajaxFunction();
	ajaxRefreshGame.onreadystatechange = function () { refreshGame_stateChanged(room); };
	var url = baseDir+"inc/ajax.php?get=timeleft&r=" +room;
	
	ajaxRefreshGame.open("GET", url, true);
	ajaxRefreshGame.send(null);
}

function refreshGame_stateChanged(room) {
	if (ajaxRefreshGame.readyState == 4) {
		var clock = document.getElementById("clock");
		if (ajaxRefreshGame.responseText == "new") {
			updateLetters(room);
			scoresShown = false;
			document.getElementById('startGameBox').style.display = "none";
			document.getElementById('gameBoard').style.display = "block";
		} else if (ajaxRefreshGame.responseText == "over") {
			//clearInterval(refreshGameVar);
			if (scoresShown == false) {
				showScores(roomID);
			}
			clock.innerHTML = '<a href="'+baseDir+'play/multiplayer/' +roomID+ '-' +power+ '-new.html">Begin a new Game</a>';
		} else if (ajaxRefreshGame.responseText == "waiting") {
			return;
		} else {
			if (ajaxRefreshGame.responseText.length <= 5) {
				var sep = ajaxRefreshGame.responseText.split(":");
				if (Number(sep[0]) == 0 && Number(sep[1]) != 0) {
					clock.innerHTML = 'Time:  <span class="red">' +ajaxRefreshGame.responseText+ '</span>';
				} else {
					clock.innerHTML = 'Time:  <span class="red">' +ajaxRefreshGame.responseText+ '</span>';
				}
			}
		}
	}
}

function refreshGameInterval() {
	refreshGameVar = setInterval("refreshGame('" +roomID+ "')",gameRefreshRate);
}

function updateLetters(room) {
	ajaxUpdateLetters = ajaxFunction();
	ajaxUpdateLetters.onreadystatechange = function () { updateLetters_stateChanged(room); };
	var url = baseDir+"inc/ajax.php?get=newletters&r=" +room;
	
	ajaxUpdateLetters.open("GET", url, true);
	ajaxUpdateLetters.send(null);
}

function updateLetters_stateChanged(room) { 
	if (ajaxUpdateLetters.readyState == 4) {
		var dice = document.getElementsByTagName("td");
		//var checks = document.getElementsByTagName("input");
		//alert(ajaxUpdateLetters.responseText);
		var letters = ajaxUpdateLetters.responseText.split(",");
		var count1 = 0;
		var count2 = 0;
		var row = 1;
		var col = 1;
		for (var i=0;i<dice.length;i++) {
			//if (dice[i].rel == "dice" || dice[i].className == "diceText") {
			if (dice[i].innerHTML.length == 1) {
				//dice[i].id = dice[i].id.replace(dice[i].innerHTML,letters[count]);
				dice[i].innerHTML = letters[count1];//alert(1);
				letters[count1] = letters[count1].toLowerCase();//alert(2);
				dice[i].id = letters[count1]+dice[i].id.substr(1);
				count1 ++;//alert(3);
				//break;
			}
		}
		selectLetter(false,1);
		hideScores();
		showMsg('','errorMsg','');
		showMsg('','newWordMsg','');
	}
}

function postWord(room) {
	ajaxPostWord = ajaxFunction();
	var contentType = "application/x-www-form-urlencoded; charset=UTF-8";
	ajaxPostWord.onreadystatechange = function () { postWord_stateChanged(room); };
	var url = baseDir+"inc/words.php?r=" +room+ "&addto=1";
	var word = document.newWords.word.value;
	var nick = document.newWords.nickname.value;
	
	/*
	// Disable HTML
	word = word.replace(/\[&\]/g,'&amp;');
	word = word.replace(/\[>\]/g,'&gt;');
	word = word.replace(/\[<\]/g,'&lt;');
	word = word.replace(/\["\]/g,'&quot;');
	word = word.replace(/&/g,'&amp;');
	word = word.replace(/>/g,'&gt;');
	word = word.replace(/</g,'&lt;');
	word = word.replace(/"/g,'&quot;');
	*/
	
	var query = "word=" + escape(encodeURI(word));
	query = query+ "&nick=" + escape(nick);
	ajaxPostWord.open("POST", url, true);
	ajaxPostWord.setRequestHeader("Content-Type", contentType);
	ajaxPostWord.send(query);
}

function postWord_stateChanged(room) { 
	if (ajaxPostWord.readyState == 4) {
		if (ajaxPostWord.responseText.indexOf("You earned") > -1) {
			var color = "green";
		} else {
			var color = "red";
		}
		showMsg(ajaxPostWord.responseText,'newWordMsg',color);
		showMsg('','errorMsg','');
		eraseLetters();
	}
}

function eraseLetters() {
	document.newWords.word.value = "";
	for (var i=0;i<document.newWords.elements.length;i++) {
		if (document.newWords.elements[i].type == "checkbox") {
			document.newWords.elements[i].checked = false;
		}
	}
	selectLetter(false,1);
	showMsg('','errorMsg','');
	lastLetterChosen = "";
	dir = "";
	l1 = "";
	l2 = "";
	l3 = "";
	l4 = "";
	l5 = "";
}

function addLetters(box) {
	var box2 = box.id.substr(1)+ "_chk";
	var inOrder;
	var size = document.newWords.word.value.length;
	
	//var boxData = box.name.split("_");
	var boxData = box.id.split("_");
	var boxNum = (5 * boxData[1]) - (5 - boxData[2]);
	//alert(boxNum);
	var boxes = document.getElementsByTagName("td");
	if (size >= 1) {
		if (size == 1) {
			dir = wordDir(boxNum);
			dir2 = dir;
		}
		
		if (boxNum > 5) {
			if (boxNum != 5 && boxNum != 10 && boxNum != 15 && boxNum != 20 && boxNum != 25) {
				var upRight = boxNum - 4;
			} else {
				var upRight = 0;
			}
			if (boxNum != 1 && boxNum != 6 && boxNum != 11 && boxNum != 16 && boxNum != 21) {
				var upLeft = boxNum - 6;
			} else {
				var upLeft = 0;
			}
			var up = boxNum - 5;
		} else {
			var up = 0;
			var upRight = 0;
			var upLeft = 0;
		}
		
		if (boxNum <= 20) {
			if (boxNum != 5 && boxNum != 10 && boxNum != 15 && boxNum != 20 && boxNum != 25) {
				var downRight = boxNum + 6;
			} else {
				var downRight = 0;
			}
			if (boxNum != 1 && boxNum != 6 && boxNum != 11 && boxNum != 16 && boxNum != 21) {
				var downLeft = boxNum + 4;
			} else {
				var downLeft = 0;
			}
			var down = boxNum + 5;
		} else {
			var downRight = 0;
			var downLeft = 0;
			var down = 0;
		}
		
		if (boxNum != 5 && boxNum != 10 && boxNum != 15 && boxNum != 20 && boxNum != 25) {
			var right = boxNum + 1;
		} else {
			var right = 0;
		}
		
		if (boxNum != 1 && boxNum != 6 && boxNum != 11 && boxNum != 16 && boxNum != 21) {
			var left = boxNum - 1;
		} else {
			var left = 0;
		}
		
		if (dir == "diag") {
			if (upRight == lastLetterChosen || upLeft == lastLetterChosen || downRight == lastLetterChosen || downLeft == lastLetterChosen) {
				inOrder = true;
			} else {
				inOrder = false;
			}
		} else {
			if (up == lastLetterChosen || down == lastLetterChosen || right == lastLetterChosen || left == lastLetterChosen) {
				inOrder = true;
			} else {
				inOrder = false;
			}
		}
	} else {
		inOrder = true;
	}
	
	if (inOrder == true && inOrder != null && document.getElementById(box2).checked == false) {
		if (size == 0) {
			l1 = boxNum
		} else if (size == 1) {
			l2 = boxNum;
		}/* else if (size == 2) {
			l3 = boxNum;
		} else if (size == 3) {
			l4 = boxNum;
		} else if (size == 4) {
			l5 = boxNum;
		}*/
		
		var current = document.newWords.word.value;
		document.newWords.word.value = current+boxData[0];
		document.getElementById("newWordMsg").innerHTML = "";
		//alert("true");
		//alert(l1+ ' - ' +l2+ ' - ' +l3+ ' - ' +l4+ ' - ' +l5);
		document.getElementById(box2).checked = true;
		lastLetterChosen = boxNum;
		document.newWords.submitWord.focus();
		
		return true;
	} else {
		document.getElementById(box2).checked = false;
		//alert("false");
		//alert(l1+ ' - ' +l2+ ' - ' +l3+ ' - ' +l4+ ' - ' +l5);
		return false;
	}
}

function wordDir(boxNum) {
	if (lastLetterChosen == boxNum-1 || lastLetterChosen == boxNum+1) {
		return "horiz";
	} else if (lastLetterChosen == boxNum-5 || lastLetterChosen == boxNum+5) {
		return "virt";
	} else if (lastLetterChosen == boxNum-6 || lastLetterChosen == boxNum+6 || lastLetterChosen == boxNum-4 || lastLetterChosen == boxNum+4) {
		return "diag";
	} else if (lastLetterChosen == null) {
		return "no letter";
	} else if (boxNum == null) {
		return "no number";
	} else {
		return "oops";	 	
	}
}

function showScores(room) {
	ajaxShowScores = ajaxFunction();
	ajaxShowScores.onreadystatechange = function () { showScores_stateChanged(room); };
	var url = baseDir+"inc/ajax.php?get=finalscores&r=" +room;
	
	ajaxShowScores.open("GET", url, true);
	ajaxShowScores.send(null);
	
	document.getElementById("gameBoard").style.display = "none";
	document.getElementById("finalScores").style.display = "block";
}

function showScores_stateChanged(room) { 
	if (ajaxShowScores.readyState == 4) {
		document.getElementById("finalScores").innerHTML = ajaxShowScores.responseText;
		scoresShown = true;
	}
}
function hideScores() {
	document.getElementById("gameBoard").style.display = "block";
	document.getElementById("finalScores").style.display = "none";
	showMsg('','errorMsg','');
	showMsg('','newWordMsg','');
}

function showHide(show,hide) {
	document.getElementById(hide).style.display = "none";
	document.getElementById(show).style.display = "table-row";
}

function countDown() {
	var minLeft = document.getElementById("minLeft");
	var secLeft = document.getElementById("secLeft");
	var minLeft2 = parseFloat(minLeft.innerHTML);
	var secLeft2 = parseFloat(secLeft.innerHTML);
	
	if (minLeft2 == 0 && secLeft2 == 0) {
		showHide('gameOver','gameBoard');
		clearInterval(gameTimer);
	} else if (secLeft2 >= 1) {
		newSec = secLeft.innerHTML - 1;
		if (newSec <= 9) {
			secLeft.innerHTML = "0" +newSec;
		} else {
			secLeft.innerHTML = newSec;
		}
	} else if (minLeft2 >= 1 && secLeft2 == 0) {
		minLeft.innerHTML = minLeft.innerHTML - 1;
		secLeft.innerHTML = 59;
	}
	
	if (minLeft2 == 1 && secLeft2 == 1) {
		document.getElementById("clock").style.color = "red";
	}
}

function showInviteForm() {
	var tag = document.getElementById("inviteTable");
	tag.style.display = "table";
	
	var btn = document.getElementById("invitebutton");
	btn.onclick = function (){ hideInviteForm(); };
	btn.style.backgroundImage = "url(" +baseDir+ "images/invite-close.gif)";
}

function hideInviteForm() {
	var tag = document.getElementById("inviteTable");
	tag.style.display = "none";
	
	var btn = document.getElementById("invitebutton");
	btn.onclick = function (){ showInviteForm(); };
	btn.style.backgroundImage = "url(" +baseDir+ "images/invitebtn.gif)";
	showMsg('','errorMsg','');
}

function sendInvite(room) {
	var friendEmail = document.sendInvite.friendEmail.value;
	var yourEmail = document.sendInvite.yourEmail.value;
	
	if (friendEmail == "") {
		showMsg('Please enter the email address of the person you are inviting.','inviteMsg','red');
		return;
	} else if (yourEmail == "") {
		showMsg('Please enter your email address.','inviteMsg','red');
		return;
	} else {
		ajaxSendInvite = ajaxFunction();
		var contentType = "application/x-www-form-urlencoded; charset=UTF-8";
		ajaxSendInvite.onreadystatechange = function () { sendInvite_stateChanged(room); };
		var url = baseDir+"inc/ajax.php?get=invite&r=" +room;
		
		var query = "friendEmail=" + escape(encodeURI(friendEmail));
		query = query+ "&yourEmail=" + escape(yourEmail);
		ajaxSendInvite.open("POST", url, true);
		ajaxSendInvite.setRequestHeader("Content-Type", contentType);
		ajaxSendInvite.send(query);
	}
}

function sendInvite_stateChanged(room) { 
	if (ajaxSendInvite.readyState == 4) {
		showMsg(ajaxSendInvite.responseText,'inviteMsg','');
		document.sendInvite.friendEmail.value = "";
	}
}