var Board, S={n:0,x:0,y:0}, Moves = [];
var L = [8,8,8,4,6,5,7,3,4,3];

function win() {
	if (S.n) alert(S.n==S.x*S.y?"Winner":"Score: "+S.n);
	if (S.n==S.x*S.y && L.length)
		S = {x:L.pop(),y:L.pop()};
	buildBoard(document.getElementById("board")); S.n=0;
}

function buildBoard(b) {
	Board = new Array(S.x);
	var tb = document.createElement("tbody");
	for (var i=0; i<S.x; i++) {
		Board[i] = new Array(S.y);
		tb.appendChild(document.createElement("tr"));
		for (var j=0; j<S.y; j++)
			tb.lastChild.appendChild(makeSquare(i,j));
	}
	b.replaceChild(tb, b.firstChild);
}
function makeSquare(x,y) {
	var td = document.createElement("td");
	Board[x][y] = {cell:td, state:1};
	if ((x+y)%2) td.className = "b";
	td.x = x;	td.y = y;
	td.onclick = moveTo;
	return td;
}

function showMoves(x,y) {
	var m = getMoves(x,y);
	for (var q=0; q<m.length; q++) {
		var p = Board[x+m[q].x][y+m[q].y];
		p.cell.className = "p";
		p.state = 2;
		Moves.push(x+m[q].x,y+m[q].y);
	}
	return m.length;
}
function getMoves(a,b) {
	var m = [];
	for (var x=-2; x<=2; x++)
		for (var y=-2; y<=2; y++)
			if (x && y && (x+y)%2 && a+x>=0 && b+y>=0 &&
				a+x<S.x && b+y<S.y && Board[a+x][b+y].state)
				m.push({x:x,y:y});
	return m;
}

function moveTo() {
	var x = this.x, y = this.y;
	if (Board[x][y].state<2 && S.n) return; else S.n++;
	hideMoves();
	Board[x][y].state = 0;
	Board[x][y].cell.className = "x";
	showMoves(x,y) || win();
}

function hideMoves() {
	while (Moves.length) {
		var y = Moves.pop(), x = Moves.pop();
		var p = Board[x][y];
		p.cell.className = (x+y)%2?"b":"";
		p.state = 1;
	}
}

function removeTile() {
	return;
	var t = Board[this.x][this.y].tile;
	moveTo(t[0],t[1],1);
}
