var thedoc=document;
var entrybox;
var nocurrent=true;
var scanned=false;
var cellvals=new Array(81);
var blankcount;
var clockhour=0;
var clockmin=0;
var clocksec=0;
var clockhandle;
var running=true;
var PLevel=1;
var PStop=0;
function clockinc()
{
	if (clocksec==59)
	{
		clocksec=0;
		if (clockmin==59)
		{
			clockmin=0;
			clockhour++;
		}
		else clockmin++;
	}
	else clocksec++;
	var secstr=clocksec;
	if (clocksec<10) secstr="0"+clocksec+" ";
	var minstr=clockmin+":";
	if (clockmin<10) minstr="0"+clockmin+":";
	var hourstr=clockhour+":";
	if (clockhour<10) hourstr="0"+clockhour+":";
	
	
	thedoc.getElementById("theclock").innerHTML=hourstr+""+minstr+""+secstr;
}
function startclock(hardness)
{
	clockhandle=setInterval("clockinc()",1000);
	if (hardness=="easy") PLevel=1;
	else if (hardness=="medium") PLevel=2;
	else if (hardness=="hard") PLevel=3;
	
}
function setcurrent(thebox)
{
	if (!nocurrent)	entrybox.style.backgroundColor="#FDEEDE";
	nocurrent=false;
	entrybox=thebox;
	entrybox.style.backgroundColor="yellow";

}

function updatenum(e)
{
	if (!nocurrent)
	{	
		if ((e.keyCode==49) || (e.keyCode==97)) entrybox.innerHTML="1";
		if ((e.keyCode==50) || (e.keyCode==98)) entrybox.innerHTML="2";
		if ((e.keyCode==51) || (e.keyCode==99)) entrybox.innerHTML="3";
		if ((e.keyCode==52) || (e.keyCode==100)) entrybox.innerHTML="4";
		if ((e.keyCode==53) || (e.keyCode==101)) entrybox.innerHTML="5";
		if ((e.keyCode==54) || (e.keyCode==102)) entrybox.innerHTML="6";
		if ((e.keyCode==55) || (e.keyCode==103)) entrybox.innerHTML="7";
		if ((e.keyCode==56) || (e.keyCode==104)) entrybox.innerHTML="8";
		if ((e.keyCode==57) || (e.keyCode==105)) entrybox.innerHTML="9";	
		if ((e.keyCode==8) || (e.keyCode==46)) entrybox.innerHTML="&nbsp;";
		document.getElementById("msgarea").innerHTML="&nbsp;";
	}
}
function validrow(r)
{
	var counts= new Array(0,0,0,0,0,0,0,0,0);
	for (i=0; i<9; i++)
	{
		counts[cellvals[(r*9)+i]-1]++;
		if (counts[cellvals[(r*9)+i]-1]>1) return false;
	}
	return true;
}
function validcol(c)
{
	var counts= new Array(0,0,0,0,0,0,0,0,0);
	for (i=0; i<9; i++)
	{
		counts[cellvals[(i*9)+c]-1]++;
		if (counts[cellvals[(i*9)+c]-1]>1) return false;
	}
	return true;
}
function validbox(x)
{
	var counts= new Array(0,0,0,0,0,0,0,0,0);
	for (i=0; i<3; i++)
	{
		for (j=0; j<3; j++)
		{
			counts[cellvals[x+(i*9)+j]]++;
			if (counts[cellvals[x+(i*9)+j]]>1) return false;
		}
	}
	return true;
}
function reddenrow(r)
{
	for (i=0; i<9; i++)
	{
		document.getElementById("s"+r+i).style.backgroundColor="#FABAB4";
	}
}
function reddencol(c)
{
	for (i=0; i<9; i++)
	{		
		document.getElementById("s"+i+c).style.backgroundColor="#FABAB4";
	}
}
function reddenbox(r,c)
{
	for (i=0; i<3; i++)
	{		
		for (j=0; j<3; j++)
		{
			xr=(r*3)+i;
			xc=(c*3)+j
			document.getElementById("s"+xr+xc).style.backgroundColor="#FABAB4";
		}
	}
}
function sendscore()
{
	var totaltime=clocksec+(clockmin*60)+(clockhour*3600);
	var datastring = "Seconds=" + totaltime + "&Level=" + PLevel + "&Paused=" + PStop;	

	var xmlHttp;
	try
  	{
  		// Firefox, Opera 8.0+, Safari
  		xmlHttp=new XMLHttpRequest();
  	}
	catch (e)
  	{
  		
  		// Internet Explorer
  		try
    		{
    			xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
    		}
  		catch (e)
    		{
    			try
      			{
      				xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
      			}
    			catch (e)
      			{
      				alert("Your browser does not support AJAX!");
      				return false;
      			}
    		}
  	}
  	xmlHttp.onreadystatechange=function()
  	{
  		if (xmlHttp.readyState == 4)
	 	{
	 		if  (xmlHttp.status == 200) 
	 		{
	 			
	 		}
	 	}
  	}
  	xmlHttp.open("GET" , "sudscoresav.php?"+datastring , true);
	xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
	xmlHttp.send(null);
		
}
function verify()
{
	if (running)
	{


	blankcount=0;
	var allvalid=true;
	for (i=0; i<9; i++)
	{
		for (j=0; j<9; j++)
		{
			cellvals[(i*9)+j]=document.getElementById("s"+i+j).innerHTML;
			if (cellvals[(i*9)+j]=="&nbsp;") blankcount++;
			document.getElementById("s"+i+j).style.backgroundColor="#FDEEDE";
			//document.getElementById("msgarea").innerHTML+=cellvals[(i*9)+j];
		}
		
	}
	for (k=0; k<9; k++)
	{
		
		if (!validrow(k))
		{
			allvalid=false;
			reddenrow(k);
			document.getElementById("msgarea").innerHTML="Conflicts found";
		}
	}
	for (l=0; l<9; l++)
	{
		
		if (!validcol(l))
		{
			allvalid=false;	
			reddencol(l);
			document.getElementById("msgarea").innerHTML="Conflicts found";
		}
	}
	for (m=0; m<3; m++)
	{
		for (n=0; n<3; n++)
		{
			if (!validbox((m*27)+(n*3)))
			{
				allvalid=false;	
				reddenbox(m,n);
				document.getElementById("msgarea").innerHTML="Conflicts found";
			}
		}
	}
	if (allvalid)
	{
		if (blankcount==0)
		{
			clearInterval(clockhandle);
			document.getElementById("msgarea").innerHTML="Congratulations! The puzzle is solved.";
			sendscore();
		}
		else document.getElementById("msgarea").innerHTML="No conflicts found. "+blankcount+" remaining";
	}
	
	
	
	
	}
	return true;
}
function pause()
{
	
	PStop=true;
	if (running)
	{
		for (i=0; i<9; i++)
		{
			for (j=0; j<9; j++)
			{
				cellvals[(i*9)+j]=document.getElementById("s"+i+j).innerHTML;
				document.getElementById("s"+i+j).innerHTML="P";
			}
		
		}
		running=false;
		clearInterval(clockhandle);
		document.getElementById("pbutton").value="continue";		
	}
	else
	{
		for (i=0; i<9; i++)
		{
			for (j=0; j<9; j++)
			{
				document.getElementById("s"+i+j).innerHTML=cellvals[(i*9)+j];				
			}
		
		}
		running=true;
		clockhandle=setInterval("clockinc()",1000);
		document.getElementById("pbutton").value="pause";
	}
}
function newpuzzle()
{
	var npath="http://"+window.location.host+"/sudoku.php?Level="+document.getElementById("PLevel").value;
	window.location=npath;
}