////////////////////////////////////////////////////////
// JavaScript Copyright Kevin Stone 2007
////////////////////////////////////////////////////////

document.oncontextmenu = function(){return false};

function createtd(lnsquare)
{
	lcchar = lcpuzzle.charAt(lnsquare);
	
	latdcell[lnsquare] = document.createElement("td");
	latdcell[lnsquare].id = "square" + lnsquare;
	latdcell[lnsquare].onmouseup = mouseupfunc;
	latdcell[lnsquare].onmousedown = function(){return false};
	latdcell[lnsquare].oncontextmenu = function(){return false};

	if (lcchar == ".")
	{
		latdcell[lnsquare].className = "ngrey";
		latdcell[lnsquare].innerHTML = "";
	}
	else
	{
		latdcell[lnsquare].className = "nfixedwhite";
		latdcell[lnsquare].innerHTML = lcchar;
	}
}

function getEventId(e)
{
	var lnclicksquare;

	if (!e)
	{
		var e = window.event;
	}
	if (e.target)
	{
		lnclicksquare = e.target;
	}
	else if (e.srcElement)
	{
		lnclicksquare = e.srcElement;
	}
	if (lnclicksquare.nodeType == 3)
	{
		lnclicksquare = lnclicksquare.parentNode;
	}

	return parseInt(lnclicksquare.id.substring(6));
}

function mouseupfunc(e)
{
	llrightclicked = false;
	
	if (!e)
	{
		var e = window.event;
	}

	if (e.which)
	{
		llrightclicked = (e.which == 3);
	}
	else if (e.button)
	{
		llrightclicked = (e.button == 2);
	}

	var lnsquare = getEventId(e);

	if (lcclickallowed == "Y")
	{
		clicksquare(lnsquare , llrightclicked);
	}

	return false;
}

function clicksquare(lnsquare , llrightclicked)
{
	if (latdcell[lnsquare].className != "nfixedwhite")
	{
		latdcell[lnsquare].innerHTML = "";
	}
	
	if (llrightclicked == false)
	{
		if (latdcell[lnsquare].className == "ngrey")
		{
			latdcell[lnsquare].className = "nblack";
		}
		else if (latdcell[lnsquare].className == "nblack")
		{
			latdcell[lnsquare].className = "nwhite";
		}
		else if (latdcell[lnsquare].className == "nwhite")
		{
			latdcell[lnsquare].className = "ngrey";
		}
	}
	else
	{
		if (latdcell[lnsquare].className == "ngrey")
		{
			latdcell[lnsquare].className = "nwhite";
		}
		else if (latdcell[lnsquare].className == "nwhite")
		{
			latdcell[lnsquare].className = "nblack";
		}
		else if (latdcell[lnsquare].className == "nblack")
		{
			latdcell[lnsquare].className = "ngrey";
		}
	}
	
	check("N");
}

// create the table with all the cells
function drawtable()
{
	var lcdiv = document.getElementById("puzzlediv");
	var lctable = document.createElement("table");
	
	lctable.className = "nurikabetable";

	var lctbody = document.createElement("tbody");

	for (var lnrow = 0; lnrow < lnsize; lnrow++)
	{
		var lctr = document.createElement("tr");
		for (var lncol = 0; lncol < lnsize; lncol++)
		{
			createtd(lnrow * lnsize + lncol);
			lctr.appendChild(latdcell[lnrow * lnsize + lncol]);
		}
		lctbody.appendChild(lctr);
	}
	lctable.appendChild(lctbody);
	lcdiv.appendChild(lctable);
	document.getElementById("showtext").innerHTML = lcpuzzletext;
}


function checknew()
{
	if (document.getElementById("showtext").innerHTML.toUpperCase().indexOf("SOLVED") == -1)
	{
		document.getElementById("showtext").innerHTML = lcpuzzletext;
		return confirm ("Are you sure? Your current Nurikabe will be lost!");
	}
	else
	{
		return true;
	}
}

function startclock()
{
	lnclock = new Date();
}

function showclock()
{
	lnnow = new Date();	
	lnseconds = Math.round((lnnow.getTime() - lnclock.getTime()) / 1000);

	lnmins = Math.floor(lnseconds / 60);
	lnsecs = lnseconds - (60 * lnmins);
	if (lnsecs < 10)
	{
		lnsecs = "0" + lnsecs;
	}

	return lnmins + ":" + lnsecs;
}

function check(lcclicked)
{
	// check for any mistakes
	lcerror = "N";
	lcallcorrect = "Y";
	llshowincorrect = document.getElementById('showincorrect').checked;
	
	for (lnsquare=0 ; lnsquare < lnsize * lnsize ; lnsquare++)
	{
		// what is it and what should it be?
		lcclass = latdcell[lnsquare].className;
		lcanswer = lcsolution.charAt(lnsquare);
		if (lcclass != "nfixedwhite" && llshowincorrect == false)
		{
			latdcell[lnsquare].innerHTML = "";
		}

		// error?
		if ((lcanswer == "#" && lcclass == "nwhite") || (lcanswer == "." && lcclass == "nblack"))
		{
			lcerror = "Y";
			if (lcclicked == "Y" && llshowincorrect == true)
			{
				latdcell[lnsquare].innerHTML = "X";
			}
		}
		
		// all correct?
		if (lcclass == "ngrey")
		{
			lcallcorrect = "N";
		}
	}
	
	if (lcerror == "Y")
	{
		lcallcorrect = "N";
	}

	if (lcclicked == "Y")
	{
		if (lcallcorrect == "Y")
		{
			document.getElementById("showtext").innerHTML = "<span class=sgreen>Puzzle Solved [Time = " + showclock() + "]</span>";
		}
		else
		{
			if (lcerror == "Y")
			{
				document.getElementById("showtext").innerHTML = "<span class=sred>Mistakes Found [Time = " + showclock() + "]</span>";
			}
			else
			{
				document.getElementById("showtext").innerHTML = "<span class=sgreen>No Mistakes Found [Time = " + showclock() + "]</span>";
			}
		}
	}
	else
	{
		if (lcallcorrect == "Y")
		{
			document.getElementById("showtext").innerHTML = "<span class=sgreen>Puzzle Solved [Time = " + showclock() + "]</span>";
		}
		else
		{
			document.getElementById("showtext").innerHTML = lcpuzzletext;
		}
	}
}

