var num_color = [ '#666666','#FFFFFF', '#FFFFFF' , '#FFFFFF' ,'#FFFFFF' , '#FFFFFF' , '#FFFFFF', '#FFFFFF' ,'#FFFFFF' , '#FFFFFF' , '#AFAEDF'];
//var bg_color = [ '#FFFFFF','#009999', '#3333CC' , '#996633' ,'#FF3399' , '#006633' , '#33FF00', '#FF0000' ,'#990099' , '#FF9900' ];
var bg_color = [ '#FFFFFF','#83031A', '#3333CC' , '#996633' ,'#FF3399' , '#006633' , '#33FF00', '#FF0000' ,'#990099' , '#FF9900' ];
var eleIds=[];
var pencilmode=[];
var pencilstr=[];
var tabColEIs=[];
var current_click_id=0;
var usepencil;
function creEleIds()
{
	var i;
	var j;
	var k=0;
	for (j = 1; j <= 9; j++) 
	{
		for (i = 1; i <= 9; i++) 
		{ 
			if(i==1)
			{
				//pencilmode[j-1]=[];
			}
			if(document.getElementById("tr" + j + "c"+ i))
			{
				eleIds[k++]="tr" + j + "c"+ i; 
				//pencilmode[j-1][i-1]=0;
				//pencilstr[j-1][i-1]="";
				pencilmode["tr"+j+"c"+i]=0;
				pencilstr["tr"+j+"c"+i]="";
			}
		}
	}
	for(i=1;i<10;i++)
	{
		tabColEIs[i]= "tabletcollection"+String(i);
	}
}
function initial_import()
{
	var tobefilledpuzzle;
	var elem_id;
	var newrow, newcol,newpos,newelement,newnumber;
	creEleIds();
	if(document.getElementById("solutionpuzzle").value!="") 
	{
		solution_help=true;
		tobefilledpuzzle= document.getElementById("solutionpuzzle").value;
		if(document.getElementById("pno_of_steps").value=="One")
		{
			newrow = document.getElementById("newrow").value ; 
			newcol = document.getElementById("newcol").value ;
			elem_id = "r" + newrow + "c" +newcol; 
			newpos= (newrow-1)*9+(newcol-1);
			newelement = tobefilledpuzzle.charAt(newpos);
			if(document.getElementById('alphaid'))
			{
				if(document.getElementById('alphaid').value==1)
				{
					newelement = toAlpha(newelement);
				}
			}
		}
	}
	else
	{
		switch(document.getElementById("hdnDiffLevel").value)
		{
			case "Easy":
				tobefilledpuzzle = document.getElementById("todayseasysudoku").value;
				break;
			case "Medium":
				tobefilledpuzzle = document.getElementById("todaysmediumsudoku").value;
				break;
			case "Hard":
				tobefilledpuzzle = document.getElementById("todayshardsudoku").value;
				break;
			case "Evil":
				tobefilledpuzzle = document.getElementById("todaysevilsudoku").value;
				break;
			case "None":
				tobefilledpuzzle = document.getElementById("todaysmediumsudoku").value;
				break;
			default:
				alert("error from switch case");
		}
	}
	fillin(tobefilledpuzzle);
	colorcode();
	if(document.getElementById("solutionpuzzle").value!="") 
	{
		if(document.getElementById("pno_of_steps").value=="One")
		{
			document.getElementById(elem_id).style.color = "#000000";
		}
	}
	Start();
}
function fillin(puzzlestr)
{
	if(document.getElementById('alphaid'))
	{
		if(document.getElementById('alphaid').value==1)
		{
			puzzlestr = toAlpha(puzzlestr);
		}
	}
	var i=0;
	var j=0;
	for (j = 1; j <= 9; j++) 
	{
		for (i = 1; i <= 9; i++) 
		{ 
			var elem_no = (j-1)*9+(i-1);
			if(puzzlestr.charAt(elem_no)!='0')
			{
				document.getElementById("tr" + j + "c"+ i).innerHTML= puzzlestr.charAt(elem_no);
			}
			else
			{
				document.getElementById("tr" + j + "c"+ i).innerHTML= ""; 
			}
		}
	}
}
function colorcode()
{
	var i=0;
	var cur_val;
	for(i=0;i<81;i++)
	{
		if(document.getElementById(eleIds[i]))
		{
			cur_val = Number(document.getElementById(eleIds[i]).innerHTML);
			if(document.getElementById('alphaid'))
			{
				if(document.getElementById('alphaid').value==1)
				{
					cur_val = document.getElementById(eleIds[i]).innerHTML;
					cur_val = toNum(cur_val);
				}
			}
			if(pencilmode[eleIds[i]]==0)
			{
				document.getElementById(eleIds[i]).style.background= bg_color[cur_val];
				document.getElementById(eleIds[i]).style.color = num_color[cur_val];
			}
		}
	}
}
function tdclick(elemid)
{
	drawgraph();
	document.getElementById('puzzlediv').style.display="none";
	//document.getElementById('addiv').style.display="none";
	document.getElementById('hiddendivid').style.display="block";
	current_click_id=elemid;
}
function numpadclick(num)
{
	var cur_pencil_str="";
	if(num==0)
	{
		num="";
	}
	if(usepencil)
	{
		pencilstr[current_click_id]=num+pencilstr[current_click_id];
		pencilmode[current_click_id]=1;
		document.getElementById(current_click_id).innerHTML = pencilstr[current_click_id];
		document.getElementById(current_click_id).style.fontSize = '10px';
		document.getElementById(current_click_id).style.background = bg_color[0];
		document.getElementById(current_click_id).style.color = num_color[0];
	}
	else
	{
		pencilmode[current_click_id]=0;
		pencilstr[current_click_id]="";
		document.getElementById(current_click_id).style.fontSize = '17px';
		document.getElementById(current_click_id).innerHTML=num;
	}
	document.getElementById('hiddendivid').style.display="none";
	document.getElementById('puzzlediv').style.display="block";
	//document.getElementById('addiv').style.display="block";
	colorcode();
	check_validity();
	drawgraph();
}
function check_validity()
{
	blink=false;
	var i=0;
	var j=0;
	found_error = false;
	for (j = 1; j <= 9; j++) 
	{
		for (i = 1; i <= 9; i++) 
		{ 
			var elem_no = (j-1)*9+(i-1);
			if(document.getElementById("tr" + j + "c"+ i))
			{
				if(pencilmode["tr"+j+"c"+i]==0)
				{
					value = document.getElementById("tr" + j + "c"+ i).innerHTML;
					if(value != 0)
					{
						check_row(j,value);
						check_column(i,value);
						check_block(j,i,value);
					}
				}
			}
		}
	}
	newentry = false;
}
function check_row(rowno,value)
{
	var count = 0;
	var i = 0;
	var error_cell=[];
	for(i=1;i<=9;i++)
	{
		if(document.getElementById("tr" + rowno + "c"+ i))
		{
			if(pencilmode["tr"+rowno+"c"+i]==0)
			{
				cur_val = document.getElementById("tr" + rowno + "c"+ i).innerHTML;
				if(cur_val == value)
				{
					error_cell[count++]="tr"+rowno+"c"+i;
				}
			}
		}
	}
	if(count>1)
	{
		found_error = true;
		blink=true;
		blink_numbers(error_cell[0],error_cell[1]);
	}
}
function check_column(colno,value)
{
	var count = 0;
	var i = 0;
	var error_cell=[];
	for(i=1;i<=9;i++)
	{
		if(document.getElementById("tr" + i + "c"+ colno))
		{
			if(pencilmode["tr"+i+"c"+colno]==0)
			{
				cur_val = document.getElementById("tr" + i + "c"+ colno).innerHTML;
				if(cur_val == value) 
				{
					error_cell[count++]="tr"+i+"c"+colno;
				}
			}
		}
	}
	if(count>1)
	{
		found_error = true;
		blink=true;
		blink_numbers(error_cell[0],error_cell[1]);
	}
}
function check_block(rowno,colno, value)
{
	var count = 0;
	var rowmin = 0;
	var colmin = 0 ;
	var error_cell=[];
	if((rowno%3)==0)
	{
		rowmin = rowno -2;
	}
	else
	{
		rowmin = rowno - (rowno%3)+1;
	}
	if((colno%3)==0)
	{
		colmin = colno -2;
	}
	else
	{
		colmin = colno - (colno%3)+1;
	}
	var i =0;
	var j=0;
	for(i=rowmin;i<rowmin+3;i++)
	{
		for(j=colmin;j<colmin+3;j++)
		{
			if(document.getElementById("tr" + i + "c"+ j))
			{
				if(pencilmode["tr"+i+"c"+j]==0)
				{
					cur_val = document.getElementById("tr" + i + "c"+ j).innerHTML;
					if(cur_val == value)
					{
						error_cell[count++]="tr" + i + "c"+ j;
					}
				}
			}
		}
	}
	if(count>1)
	{
		found_error = true;
		blink=true;
		blink_numbers(error_cell[0],error_cell[1]);
	}

}
function blink_numbers(elem1,elem2)
{
	document.getElementById(elem1).style.color="black";
	document.getElementById(elem2).style.color="black";
	var func = "blink_numbers_revert('"+elem1+"','"+elem2+"')";
	setTimeout(func,500);
}
function blink_numbers_revert(elem1,elem2)
{
	document.getElementById(elem2).style.color="white";
	document.getElementById(elem1).style.color="white";
	if(blink)
	{
		var func = "blink_numbers('"+elem1+"','"+elem2+"')";
		setTimeout(func,200);
	}
}
function drawgraph()
{
	var cur_val;
	var num_count = [0,0,0,0,0,0,0,0,0,0];
	var cur_alp;
	for(k=0;k<81;k++)
	{
		if(document.getElementById(eleIds[k]))
		{
			if(pencilmode[eleIds[k]]==0)
			{
				cur_val = Number(document.getElementById(eleIds[k]).innerHTML); 
				if(document.getElementById('alphaid'))
				{
					if(document.getElementById('alphaid').value==1)
					{
						cur_alp = document.getElementById(eleIds[k]).innerHTML; 
						cur_val = toNum(cur_alp);
					}
				}
				num_count[cur_val]++;
			}
		}
	}
	for(k=1;k<10;k++)
	{
		document.getElementById(tabColEIs[k]).innerHTML = bartable(num_count[k],k);
	}
}

function bartable(count,num)
{
	var ret_str="";
	var num_val = num;
	if(document.getElementById('alphaid'))
	{
		if(document.getElementById('alphaid').value==1)
		{
			num = toSudChar(num);
		}
	}
	if(count>9)count=9;
	ret_str = ret_str+"<table class=\"tablet0\">";
	for(i=0;i<count;i++)
	{
		ret_str+="<tr><td  class=\"font0\">"+num+"</td></tr>";
	}
	for(i=count;i<9;i++)
	{
		ret_str+="<tr><td  class=\"font"+num_val+"\">"+num+"</td></tr>";
	}
	ret_str = ret_str+"</table>";
	return ret_str;

}
function toggle_pencil()
{
	if(document.getElementById("pencilid").innerHTML=='Pencil off')
	{
		document.getElementById("pencilid").innerHTML='Pencil on';
		usepencil = true;
	}
	else if(document.getElementById("pencilid").innerHTML=='Pencil on')
	{
		document.getElementById("pencilid").innerHTML='Pencil off';
		usepencil = false;
	}
	else
	{
		alert('wrong score pal');
	}
}
function hidemenu()
{
	document.getElementById('puzzlediv').style.display="block";
	//document.getElementById('addiv').style.display="block";
	document.getElementById('menudiv').style.display="none";
}
function easy()
{
	tobefilledpuzzle = document.getElementById("todayseasysudoku").value;
	fillin(tobefilledpuzzle);
	colorcode();
	hidemenu();
	Start();
}
function medium()
{
	tobefilledpuzzle = document.getElementById("todaysmediumsudoku").value;
	fillin(tobefilledpuzzle);
	colorcode();
	hidemenu();
	Start();
}
function hard()
{
	tobefilledpuzzle = document.getElementById("todayshardsudoku").value;
	fillin(tobefilledpuzzle);
	colorcode();
	hidemenu();
	Start();
}
function evil()
{
	tobefilledpuzzle = document.getElementById("todaysevilsudoku").value;
	fillin(tobefilledpuzzle);
	colorcode();
	hidemenu();
	Start();
}
function menuclick()
{
	document.getElementById('puzzlediv').style.display="none";
	//document.getElementById('addiv').style.display="none";
	document.getElementById('menudiv').style.display="block";
}
function UpdateTimer() 
{
	if(timerID) 
	{
		clearTimeout(timerID);
		clockID  = 0;
	}

	if(!tStart)
	{
		tStart   = new Date();
	}
	var   tDate = new Date();
	var   tDiff = tDate.getTime() - tStart.getTime();
	var totHrs = "" + ((tDiff)/3600000) + "";
	var totSec = (Number(tDiff)/1000)%60;
	var totMin = Number(tDiff)/60000%60;
	var totSecstr = String(totSec).split('.');
	var totMinstr = String(totMin).split('.');
	var totHrsstr = totHrs.split('.');
	if(totSecstr[0].length==1)
	{
		totSecstr[0] = '0'+totSecstr[0];
	}
	if(totMinstr[0].length==1)
	{
		totMinstr[0] = '0'+totMinstr[0];
	}
	if(totHrsstr[0].length==1)
	{
		totHrsstr[0] = '0'+totHrsstr[0];
	}
	timetaken = ""+totHrsstr[0]+ ":" +totMinstr[0]+ ":" + totSecstr[0];
	//document.getElementById("divTime").innerHTML=" tDiff="+tDiff+" totSec="+totSec+" totMin="+totMin+" "+totMinstr[0]+ ":" + totSecstr[0];
	//document.getElementById("divTime").innerHTML=""+totMinstr[0]+ ":" + totSecstr[0];
	document.getElementById("divTime").innerHTML="Time Taken: "+timetaken;
	timerID = setTimeout("UpdateTimer()", 1000);
}

function Start() 
{
	tStart   = new Date();
	if(document.getElementById("divTime"))
	{
		document.getElementById("divTime").innerHTML="00:00";
		timerID  = setTimeout("UpdateTimer()", 1000);
	}
}

function Stop() 
{
	if(timerID) 
	{
		clearTimeout(timerID);
		timerID  = 0;
	}
	tStart = null;
}

function Reset() 
{	
	tStart = null;
	document.getElementById("divTime").innerHTML="00:00";
}
