cTurn = 0;
Victory = 0;
boardState = new Array(3);
freeTiles = 9;

var xcount = 0;
var ycount = 1;

for (var i=1;i<=3;i++) {
	boardState[i] = new Array(3);
} 

for (var i=1;i<=3;i++) {
	for (var ii=1;ii<=3;ii++) {
	boardState[i][ii] = 0;
	}
}

function resetBoard() {
	cTurn = 0;
	Victory = 0;
	boardState = new Array(3) ;
	freeTiles = 9;

	for (var i=1;i<=3;i++) {boardState [i] = new Array(3);} 

	for (var i=1;i<=3;i++) {
		for (var ii=1;ii<=3;ii++) {
		boardState[i][ii] = 0;
		document.getElementById("t"+i+"-"+ii).innerHTML = "&nbsp;";
		document.getElementById("t"+i+"-"+ii).style.color = "000000";
		document.getElementById("winPlace").innerHTML = "&nbsp;";
		document.getElementById("pbp").innerHTML = "<span class=\"LargerFont\">Play History</span><br /><br />";
		}
	}

}


function clickHandler(e_ID) {

	curVal = document.getElementById(e_ID);
	coords = e_ID.replace(/t/g,"");
	coords = coords.split("-");

	x = coords[0];
	y = coords[1];

	if (curVal.innerHTML == "&nbsp;" && Victory == 0) {
		if (cTurn == 0) {
			vplace = "X"
			boardState[x][y] = 10;
			cTurn = 1;
			freeTiles -= 1;
		}
		else if (cTurn == 1) {
			vplace = "O";
			cTurn = 0;
			boardState[x][y] = 1;
			freeTiles -= 1;
		}

		document.getElementById(e_ID).innerHTML = vplace;

		for (i=1;i<=3;i++) {
			for (ii=1;ii<=3;ii++) {
				if(boardState[i][ii] == 0 || boardState[i][ii] == 1) 
					padding = "&nbsp;"
				  else padding = "";
				boardStater("boardState["+i+"]["+ii+"] = "+padding+""+"<b>"+boardState[i][ii]+"</b> ");
			} 
			
			// Find Victory Conditions
			rowsum = boardState[i][1] + boardState[i][2] + boardState[i][3];
			if (rowsum == 3 || rowsum == 30) {
				document.getElementById("t"+i+"-1").style.color = "FF0000";
				document.getElementById("t"+i+"-2").style.color = "FF0000";
				document.getElementById("t"+i+"-3").style.color = "FF0000";
			}
			colsum = boardState[1][i] + boardState[2][i] + boardState[3][i];
			if (colsum == 3 || colsum == 30) {
				document.getElementById("t1-"+i).style.color = "FF0000";
				document.getElementById("t2-"+i).style.color = "FF0000";
				document.getElementById("t3-"+i).style.color = "FF0000";
			}

			if (i == 1) {
				diasum = boardState[i][i] + boardState[i+1][i+1] + boardState[i+2][i+2];
				if (diasum == 3 || diasum == 30) {
					document.getElementById("t"+i+"-"+i).style.color = "FF0000";
					document.getElementById("t"+(i+1)+"-"+(i+1)).style.color = "FF0000";
					document.getElementById("t"+(i+2)+"-"+(i+2)).style.color = "FF0000";
				}
			}
			if (i == 3) {
				diasum = boardState[1][i] + boardState[i-1][i-1] + boardState[i][1];
				if (diasum == 3 || diasum == 30) {
					document.getElementById("t1-"+i).style.color = "FF0000";
					document.getElementById("t"+(i-1)+"-"+(i-1)).style.color = "FF0000";
					document.getElementById("t"+i+"-1").style.color = "FF0000";
				}
			}
			
			if (rowsum == 3 || colsum == 3 || diasum == 3) {
				document.getElementById("winPlace").innerHTML = "I win! :D";
				Victory = 1;
			}
			if (rowsum == 30 || colsum == 30 || diasum == 30) {
				document.getElementById("winPlace").innerHTML = "You win. :(";
				Victory = 2;
			}
			if (freeTiles <= 0) {
				document.getElementById("winPlace").innerHTML = "Draw Game. :|";
				Victory = 2;
			}
		}	
	}
	if (cTurn == 1 && Victory == 0) makePlay();
}

function makePlay() {
	targetPlay = "";
	targetPlayRandom = "";
	targetPlayExtend = "";
	targetPlayBlock = "";
	targetPlayWin = "";
	finalPlay = "";
	xlimit = 0;
	diasum1 = 0;
	diasum2 = 0;

// ----- Random Move, xlimit variable to protect from endless looping.
	while (targetPlayRandom == "" && xlimit < 100) {
		xlimit = xlimit + 1;
		randx = 1 + Math.floor(Math.random()*3)
		randy = 1 + Math.floor(Math.random()*3)
		if(boardState[randx][randy] == 0) targetPlayRandom = "t"+randx+"-"+randy;
		debugOutput("["+randx+"]["+randy+"] ["+boardState[randx][randy]+"] "+xlimit+" TPR:"+targetPlayRandom);
	}

	for (i=1;i<=3;i++) {
		for (ii=1;ii<=3;ii++) {
			if(boardState[i][ii] == 0 || boardState[i][ii] == 1) 
				padding = "&nbsp;";
			  else padding = "";
			boardStater("boardState["+i+"]["+ii+"] = "+padding+""+"<b>"+boardState[i][ii]+"</b> ");
		} 
			
		rowsum = boardState[i][1] + boardState[i][2] + boardState[i][3];
		colsum = boardState[1][i] + boardState[2][i] + boardState[3][i];
		if (i == 1) {
			diasum1 = boardState[i][i] + boardState[i+1][i+1] + boardState[i+2][i+2];
		}
		if (i == 3) {
			diasum2 = boardState[1][i] + boardState[i-1][i-1] + boardState[i][1];
		}

// ---- Extend to Connect 2 Tiles
		

		if (rowsum == 1) {
			for (iii=1;iii<=3;iii++) {
			if (boardState[i][iii] == 0) targetPlayExtend = "t"+i+"-"+iii;
			}
		}
		if (colsum == 1) {
			for (iii=1;iii<=3;iii++) {
			if (boardState[iii][i] == 0) targetPlayExtend = "t"+iii+"-"+i;
			}
		}


// ---- Block opponents game winning move
		
		if (rowsum == 20) {
			for (iii=1;iii<=3;iii++) {
			if (boardState[i][iii] == 0) targetPlayBlock = "t"+i+"-"+iii;
			}
		}

		if (colsum == 20) {
			for (iii=1;iii<=3;iii++) {
			if (boardState[iii][i] == 0) targetPlayBlock = "t"+iii+"-"+i;
			}
		}

		if (diasum1 == 20 && i == 1) {
			if (boardState[i][i] == 0) targetPlayBlock = "t1-"+i;
			if (boardState[i+1][i+1] == 0) targetPlayBlock = "t"+[i+1]+"-"+[i+1];
			if (boardState[i+2][i+2] == 0) targetPlayBlock = "t"+[i+2]+"-"+[i+2];
		}

		if (diasum2 == 20 && i == 3) {
			if (boardState[1][i] == 0) targetPlayBlock = "t1-"+i;
			if (boardState[i-1][i-1] == 0) targetPlayBlock = "t"+[i-1]+"-"+[i-1];
			if (boardState[i][1] == 0) targetPlayBlock = "t"+i+"-1";
		}

// ----- Play my game winning move

		if (rowsum == 2) {
			for (iii=1;iii<=3;iii++) {
			if (boardState[i][iii] == 0) targetPlayWin = "t"+i+"-"+iii;
			}
		}

		if (colsum == 2) {
			for (iii=1;iii<=3;iii++) {
			if (boardState[iii][i] == 0) targetPlayWin = "t"+iii+"-"+i;
			}
		}

		if (diasum1 == 2 && i == 1) {
			if (boardState[i][i] == 0) targetPlayWin = "t1-"+i;
			if (boardState[i+1][i+1] == 0) targetPlayWin = "t"+[i+1]+"-"+[i+1];
			if (boardState[i+2][i+2] == 0) targetPlayWin = "t"+[i+2]+"-"+[i+2];
		}

		if (diasum2 == 2 && i == 3) {
			if (boardState[1][i] == 0) targetPlayWin = "t1-"+i;
			if (boardState[i-1][i-1] == 0) targetPlayWin = "t"+[i-1]+"-"+[i-1];
			if (boardState[i][1] == 0) targetPlayWin = "t"+i+"-1";
		}
	}	

// ----- Decide which play to use, play it, and explain why.

	if (targetPlayWin != "") {
		finalPlay = targetPlayWin;
		Ending = "to win!";
	} else if (targetPlayBlock != "") {
		finalPlay = targetPlayBlock;
		Ending = "to block.";
	} else if (targetPlayExtend != "") {
		finalPlay = targetPlayExtend;
		Ending = "to connect.";
	}	else if (targetPlayRandom != "") {
		finalPlay = targetPlayRandom;
		Ending = "randomly.";
	}	
		playByPlay("I played "+finalPlay.replace(/t/g,"tile ")+" "+Ending);
		clickHandler(finalPlay);
}




function boardStater(tts) {
	return 1;
	if (ycount == 4) {
		cur.innerHTML = "";
		ycount = 1;
	}
	xcount = xcount + 1;
	cur = document.getElementById("boardState");
	cur.innerHTML = cur.innerHTML + " " + tts;
	if (xcount == 3) {
		ycount = ycount + 1;
		xcount = 0
		cur.innerHTML = cur.innerHTML + "<br>";
	}
	return 1;
}

function playByPlay(tts) {
	ccurVal = document.getElementById("pbp").innerHTML;
	document.getElementById("pbp").innerHTML = ccurVal + "<br>" + tts;
	return 1;
}

function debugOutput(tts) {
	return 1;
	ccurVal = document.getElementById("debugInfo").innerHTML;
	document.getElementById("debugInfo").innerHTML = ccurVal + "<br>" + tts;
	return 1;
}

