var cols=10;
var rows=10;

document.write('<form name="mine" style="display: inline; ">'
		+ '<table cellpadding="0" cellspacing="2" border="0">'
		+ '<tr>'
		+ '<tr><td colspan="' + cols + '" align="center">'
		+ '<input type="text" name="display" size="15">'
		+ '</td></tr>'
)


function Kachel(src) {
	var pic = new Image;
	pic.src = src;
	return pic;
}
var Fahne = Kachel("mine.Fahne1.gif");
var FahneZuviel =Kachel( "mine.FahneX.gif");
var Button = Kachel("mine.Kachel.gif");
var Button1 = Kachel("mine.Kachel1.gif");
var LeuchtCursor = "mine.LeuchtCursor.gif";
var ButtonQuest = Kachel(LeuchtCursor);
var Bombe = Kachel("mine.Bombe.gif");
var ExplosionsBild = "mine.Explosion.gif";
var Explosion = Kachel(ExplosionsBild);
var clicked = new Array;
var mined = new Array;
var flagged = new Array;
var CountField=new Array (	
	Kachel("mine.Bomben0.gif"),
	Kachel("mine.Bomben1.gif"), 
	Kachel("mine.Bomben2.gif"),
	Kachel("mine.Bomben3.gif"),
	Kachel("mine.Bomben4.gif"),
	Kachel("mine.Bomben5.gif"),
	Kachel("mine.Bomben6.gif"),
	Kachel("mine.Bomben7.gif"),
	Kachel("mine.Bomben8.gif")
);
var MineCounter=0, FieldCounter=(cols)*(rows), FlagCounter=0;
var FlagModeSet = false;
var DisplayContent="";

function unload(picname) {
	var pic = eval(picname);
	if (pic.complete == true) {
		pic.src = null;
	} else {
		setTimeout("unload(\"" + picname + "\")", 500);
	}
}

unload ("ButtonQuest");
unload ("Explosion");

function FlagMode() {
	if (FlagModeSet) {
		UpdateDisplay();
	} else {
		document.mine.display.value = "Fahne";
	}
	FlagModeSet = !FlagModeSet;
}

function ChPic(x,y, img) {
	ChPic1(x,y, img.src);
}; 

function ChPic1(x,y, gif) {
	if (clicked[x][y] == "1") return;
	if (clicked[x][y] == "untouched") return;
	if (flagged[x][y] == true) return;
	var img1=window.document.images[FirstButton+(cols)*x+y]
	img1.src=gif;
}; 

function UpdateDisplay() {
	document.mine.display.value=MineCounter + " M., " + FieldCounter + " Frei";
}

function click(x,y) {
	if (x<0 || x>=rows || y<0 || y>=cols || clicked[x][y] == 1) 
	{
		return;
	}
	if (FlagModeSet)
	{
		if (flagged[x][y] == false) 
		{
			ChPic(x, y, Fahne);
			flagged[x][y] = true;
			MineCounter--;
		}
		else
		{
			flagged[x][y] = false;
			ChPic(x, y, Button);
			MineCounter++;
		}
	//	FlagMode();
		return;
	}
	if (flagged[x][y] == true){ return };
	if (clicked[x][y] == "untouched") { return };
	if (hasBomb(x, y))					// Feld vermint
	{
		ChPic1(x, y, ExplosionsBild);
		clicked[x][y]="1";
		for (i=0; i<rows; i++)
		{
			for (j=0; j<cols; j++)
			{
				if (hasBomb(i, j))
				{
					ChPic(i,j, Bombe);
					clicked[i][j] = "1";
				}
				else if (flagged[i][j] == true)
				{
					flagged[i][j] = false;
					ChPic(i,j, FahneZuviel);
				}
				else
				{
					clicked[i][j] = "untouched";
				}
			}
		}
		document.mine.display.value="Krachbumm!";
	}
	else						// Feld minenfrei
	{
		FieldCounter--;
		var mines = CountMines(x, y);
		ChPic(x, y, CountField[mines]);
		clicked[x][y]="1";
		if (mines == 0)			// Umgebung minenfrei
		{
			click(x-1, y-1);
			click(x-1, y);
			click(x-1, y+1);
			click(x, y-1);
			click(x, y+1);
			click(x+1, y-1);
			click(x+1, y);
			click(x+1, y+1);
		}
		if (FieldCounter == 0)	// Spiel gewonnen
		{
			for (i=0; i<rows; i++)
			{
				for (j=0; j<cols; j++)
				{
					if (hasBomb(i, j)) 
					{
						ChPic(i, j, Fahne);
						flagged[i][j] = true;
					}
				}
			}
			document.mine.display.value="Bingo.";
		}
		else
		{
			UpdateDisplay();
		}
	}
};

function hasBomb (x, y) {
	if (x<0 || x > cols || y<0 || y > cols) 
	{
		return(0);
	}
	else if (mined[x][y] == "1")
	{
		return(1);
	}
	else
	{
		return(0);
	}
};

function CountMines(x, y) {
	return	hasBomb(x+1, y-1) 
		+	hasBomb(x+1, y) 
		+	hasBomb(x+1, y+1) 
		+	hasBomb(x, y-1) 
		+	hasBomb(x, y+1) 
		+	hasBomb(x-1, y-1) 
		+	hasBomb(x-1, y) 
		+	hasBomb(x-1, y+1);
}

function refresh() {
	for (i=0; i<rows; i++)
	{
		for (j=0; j<cols; j++)
		{
			if (flagged[i][j] == true) 
			{
				flagged[i][j] = false;
				ChPic(i, j, Fahne);
				flagged[i][j] = true;
			}
			else if(clicked[i][j] == true)
			{
				clicked[i][j]=false;
				if(hasBomb(i, j))
				{
					ChPic(i, j, Bombe);
				}
				else
				{
					ChPic(i, j, CountField[CountMines(i, j)]);
				}
				clicked[i][j]=true;
			}
			else
			{
				ChPic(i, j, Button);
			}
		}
	}
}

function Lege1Mine(x, y) {
	x = x % rows;
	y = y % cols;
	if (mined[x][y] != "1")
	{
		mined[x][y] = "1";
		MineCounter++;
		FieldCounter--;
	}
}

function MinenLegen() {
	var bombcount=Math.sqrt((cols+1)*(rows+1))*2;
	for(i=0;i<bombcount;i++)
	{
		with(Math) Lege1Mine(round(1000*(random())), round(1000*(random())));
	}
};

function init() {
	MineCounter=0;
	FlagCounter=0;
	FieldCounter=rows*cols;
	clicked= new Array(rows);
	mined = new Array(rows);
	flagged = new Array(rows);
	for (i=0; i<=rows; i++)
	{
		clicked[i] = new Array(cols);
		mined[i] = new Array(cols);
		flagged[i] = new Array(cols);
		for (j=0; j<cols; j++)
		{
			clicked[i][j] = "";
			mined[i][j] = "0";
			flagged[i][j] = "0";
		}
	}
	MinenLegen();
	UpdateDisplay();
}

function NewGame() {
	init();
	for (i=0; i<rows; i++)
	{
		for (j=0; j<cols; j++)
		{
			ChPic(i, j, Button);
		}
	}
}

init();
var FirstButton = window.document.images.length;
var BlurText = "";
if (document.all) {
	BlurText="; window.focus()"
};

for (i=0; i<rows; i++) {
	document.write("<tr>\n");
	for (j=0; j<cols; j++) 
	{
		document.write("<td>"
			+ "<a href='javascript:click("
					+ i + ", " + j + ");' "
				+ "onmouseout='ChPic(" 
					+ i + ", " + j + ", Button);' "
				+ "onmouseover='ChPic1("
					+ i + ", " + j + ", LeuchtCursor);' " 
				+ "onmousedown='ChPic("
					+ i + ", " + j + ", Button1)" + BlurText + "' "
				+ "onmouseup='ChPic("
					+ i + ", " + j + ", Button); this.blur();'>"
			+ "<img src='" + Button.src + "' border='0' width='20' height='20' />"
			+ "</a>"
			+ "</td>\n"
		)
	}
	document.write("</tr>");
}
document.write('</table>'
	+ '</form>');
window.onresize=refresh;
