/***********************************************************/
/* Minesweeper made by Bjarne Fich                         */
/* www.rednebula.com                                       */
/***********************************************************/
/* Start game with:                                        */
/*  makeMinesGame(mines, sizex, sizey);                    */
/* Ex:                                                     */
/*  makeMinesGame(20,10,10);                               */
/***********************************************************/

var minesNoOf = 0;

function makeMinesGame(mines, sizex, sizey) {
	minesNoOf = mines;

	minesGridId = makeGrid(sizex, sizey, 0);
	var fail = 10000;
	var placed = 0;
	while ((placed<mines) && (fail>0)) {
		var x = Math.round(Math.random()*sizex-0.5);
		var y = Math.round(Math.random()*sizey-0.5);
		if (getGrid(minesGridId, x, y)==0) {
			setGrid(minesGridId, x, y, 1);
			placed++;
		} else {
			fail--;
		}
	}

	document.write("<table cellspacing='0' cellpadding='1' border='0'><tr><td>");
	minesMapGridId = makeGrid(sizex, sizey, "#808080?", 2);
	drawGrid(minesMapGridId, 20, "minesClick");
	updateGrid(minesMapGridId);
	document.write("</td><td>");
	minesMarkGridId = makeGrid(1, 3, "#00ff00",2);
	setGrid(minesMarkGridId, 0, 1, "#E0E0E0");
	setGrid(minesMarkGridId, 0, 2, "#E0E0E0"+placed);
	drawGrid(minesMarkGridId, 20, "minesMark");
	updateGrid(minesMarkGridId);
	document.write("</td></tr></table>");
}

function minesClick(x,y) {
	var sum = 0;
	if (getGrid(minesMapGridId, x, y)=="#ff0000!") {
		setGrid(minesMapGridId, x, y, "#808080?");
		sum = "?";
	} else if (getGrid(minesMarkGridId, 0, 0)=="#ff0000") {
		setGrid(minesMapGridId, x, y, "#ff0000!");
		updateGrid(minesMarkGridId);
		sum = "!";
	} else if (getGrid(minesGridId, x, y)!=0) {
		sum = "*";
		alert ("Bang - You lost.");
	} else {
		for (var xx=x-1; xx<=x+1; xx++)
			for (var yy=y-1; yy<=y+1; yy++)
				if (getGrid(minesGridId, xx, yy)!=0)
					sum++;
	}
	if (sum=="*") {
		setGrid(minesMapGridId, x, y, "#ff0000"+sum);
	} else if (sum>0) {
		setGrid(minesMapGridId, x, y, "#ffff00"+sum);
	} else if (sum==0) {
		setGrid(minesMapGridId, x, y, "#00ff00"+sum);
		for (var xx=x-1; xx<=x+1; xx++)
			for (var yy=y-1; yy<=y+1; yy++)
				if (getGrid(minesMapGridId, xx, yy)=="#808080?")
					minesClick(xx,yy);
	}
	updateGrid(minesMapGridId);
	minesWin();
}

function minesMark(x,y) {
	if (getGrid(minesMarkGridId, 0, 0)=="#00ff00") {
		setGrid(minesMarkGridId, 0, 0, "#ff0000");
	} else {
		setGrid(minesMarkGridId, 0, 0, "#00ff00");
	}
	updateGrid(minesMarkGridId);
}

function minesWin() {
	var pos = findGridEntry(minesMapGridId);
	var sizex = gridData[pos+1];
	var sizey = gridData[pos+2];
	var sum=0;
	for (var x=0; x<sizex; x++)
		for (var y=0; y<sizey; y++)
			if (getGrid(minesMapGridId, x, y)=="#ff0000!")
				sum++;
	setGrid(minesMarkGridId, 0, 1, "#E0E0E0"+sum);
	updateGrid(minesMarkGridId);
}

