active = null;

function clicked(what)
{
	
	if(what.id.charAt(0) == 'p')
		what = document.getElementById("r" + what.id.substring(1));


	if(active != null && active != what)
	{
		th = what;
		clicked(active);

		active = th;
	}
	else if(active == null)
	{
		active = what;
	}
	else
		active = null;
	
	bg = what.style.backgroundColor;
	new_bg = bg;

	
	if(bg == "silver" || bg == "#c0c0c0")
		new_bg = "lightsalmon";
	else if(bg == "lightgrey" || bg == "#d3d3d3")
		new_bg = "beige";
	else if(bg == "lightsalmon" || bg == "#ffa07a")
		new_bg = "silver";
	else
		new_bg = "lightgrey";

	

	what.style.backgroundColor = new_bg;
}

function add_number(square,number)
{
	square_color = square.style.color;
	if(square_color == "#ff0000")
	{
		square_color = "red";
	}

	if(square_color == "red")
	{
		add_number_prick(square,"&nbsp;");
			
		correct = false;
		x = parseInt(square.id.charAt(2));
		y = parseInt(square.id.charAt(3));
		
		if(rsv[x + "" + y] == (hex_md5("" + number)).substr((srand+(x-y)),4))
			correct = true;
		
		if(correct)
		{
			if(make_green)
				square.style.color = "#008000";
			
			square.innerHTML = number;

			if(!greened[((x*10) + y)])
			{
				greened[((x*10) + y)] = square;
				corrCount++;
			}

			if(corrCount == 81)
				alert("Grattis, du har löst sudokut!");
		}
		else
		{
			if(greened[((x*10) + y)])
			{
				greened[((x*10) + y)] = null;
				corrCount--;
			}

			square.innerHTML = number;
		}

		for(x=1;x<=9;x++)
		{
			for(y=1;y<=9;y++)
				(document.getElementById("r_" + x + "" + y)).style.borderColor = "black";
		}

		(document.getElementById("tips1")).innerHTML = "Visa tips";
		(document.getElementById("tips2")).innerHTML = "Visa detaljerat tips";
			
		tips1_active = false;
		tips2_active = false;

	}
	
	if(make_green)
		document.getElementById("co").innerHTML = " " + corrCount + " <a href=\"javascript:make_green_change();\" class=\"text_link\"> - klicka för att dölja</a>";
}

function add_number_prick(square,number)
{
	if(square.innerHTML == "&nbsp;" || square.innerHTML * 5 == 0)
	{
		// Sätt en prick i denna ruta
		
		prickrutan = document.getElementById("p_" + square.id.substring(2));

		x = parseInt(square.id.charAt(2));
		y = parseInt(square.id.charAt(3));

		if(number != "&nbsp;")
		{
			if(prickar[x + "" + y][number])
				prickar[x + "" + y][number] = false;
			else
				prickar[x + "" + y][number] = true;
		}

		
		pricktexten = "";

		for(i=1;i<=9;i++)
		{
			if(number != "&nbsp;")
			{
				if(prickar[x + "" + y][i])
					pricktexten += "&nbsp;" + i + "&nbsp;";
				else
					pricktexten += "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";

				if(i%3 == 0)
					pricktexten += "<br>";
			}
			else
				prickar[x + "" + y][i] = false;
		}

		pricktexten += "";

		//alert(pricktexten);

		prickrutan.innerHTML = pricktexten;







	}
}


function make_green_change()
{
	if(make_green) // sant, ändrar till falskt
	{
		for(x=1;x<=9;x++)
		{
			for(y=1;y<=9;y++)
			{
				sq = greened[((x*10) + y)];
				if(sq)
				{
					sq.style.color = "red";
				}
			}
		}
	}
	else // falskt, ändrar till sant
	{
		for(x=1;x<=9;x++)
		{
			for(y=1;y<=9;y++)
			{
				sq = greened[((x*10) + y)];
				if(sq)
				{
					sq.style.color = "green";
				}

				
			}
		}
	}

	make_green = !make_green;


	if(make_green)
		document.getElementById("co").innerHTML = " " + corrCount + " <a href=\"javascript:make_green_change();\" class=\"text_link\"> - klicka för att dölja</a>";
	else
		document.getElementById("co").innerHTML = " dolt <a href=\"javascript:make_green_change();\" class=\"text_link\"> - klicka för att visa</a>";

}


tips1_active = false;
tips2_active = false;

function show_hint(typ)
{
	tipper_pos = 0;
	done = false;


	do
	{
		sq_x = parseInt(tipper.charAt(tipper_pos + 1));
		sq_y = parseInt(tipper.charAt(tipper_pos + 2));
		sq_nr = parseInt(tipper.charAt(tipper_pos + 3));

		if((document.getElementById("r_" + sq_x + "" + sq_y)).innerHTML == sq_nr)
			tipper_pos += 4;
		else
			done = true;

	}
	while (!done && tipper_pos < 400);

	if(typ == 1)
	{
		// Kvadrat
		sq = parseInt(tipper.charAt(tipper_pos));
		sq_x = parseInt(tipper.charAt(tipper_pos + 1));
		sq_y = parseInt(tipper.charAt(tipper_pos + 2));

		if(sq < 4)
			x_start = 1;
		else if(sq < 7)
			x_start = 4;
		else
			x_start = 7;

		x_end = x_start + 2;

		if(sq % 3 == 1)
			y_start = 1;

		if(sq % 3 == 2)
			y_start = 4;

		if(sq % 3 == 0)
			y_start = 7;

		y_end = y_start + 2;

		//alert(x_start + " " + y_start + " " + tipper.charAt(tipper_pos));

		for(x=x_start;x<=x_end;x++)
		{
			for(y=y_start;y<=y_end;y++)
			{
				if((!tips2_active && !tips1_active) || (tips2_active && (x == sq_x && y == sq_y)))
					(document.getElementById("p_" + x + "" + y)).style.borderColor = "blue";
				else
					(document.getElementById("p_" + x + "" + y)).style.borderColor = "black";
			}
		}

		if(!tips1_active)
			(document.getElementById("tips1")).innerHTML = "Göm tips";
		else
			(document.getElementById("tips1")).innerHTML = "Visa tips";

		tips1_active = !tips1_active;
	}

	if(typ == 2)
	{
		// Ruta
		sq = parseInt(tipper.charAt(tipper_pos));
		sq_x = parseInt(tipper.charAt(tipper_pos + 1));
		sq_y = parseInt(tipper.charAt(tipper_pos + 2));

		if(sq < 4)
			x_start = 1;
		else if(sq < 7)
			x_start = 4;
		else
			x_start = 7;

		x_end = x_start + 2;

		if(sq % 3 == 1)
			y_start = 1;

		if(sq % 3 == 2)
			y_start = 4;

		if(sq % 3 == 0)
			y_start = 7;

		y_end = y_start + 2;

		//alert(x_start + " " + y_start + " " + tipper.charAt(tipper_pos));

		for(x=x_start;x<=x_end;x++)
		{
			for(y=y_start;y<=y_end;y++)
			{
				if((!tips2_active && (x == sq_x && y == sq_y)) || (tips2_active && tips1_active))
					(document.getElementById("p_" + x + "" + y)).style.borderColor = "blue";
				else
					(document.getElementById("p_" + x + "" + y)).style.borderColor = "black";
			}
		}

		if(!tips2_active)
			(document.getElementById("tips2")).innerHTML = "Göm detaljerat tips";
		else
			(document.getElementById("tips2")).innerHTML = "Visa detaljerat tips";

		tips2_active = !tips2_active;
	}
}



function reveal_next(ret)
{
	tipper_pos = 0;
	done = false;


	do
	{
		sq_x = parseInt(tipper.charAt(tipper_pos + 1));
		sq_y = parseInt(tipper.charAt(tipper_pos + 2));
		sq_nr = parseInt(tipper.charAt(tipper_pos + 3));

		if((document.getElementById("r_" + sq_x + "" + sq_y)) && (document.getElementById("r_" + sq_x + "" + sq_y)).innerHTML == sq_nr)
			tipper_pos += 4;
		else
			done = true;

	}
	while (!done && tipper_pos < 500);

	if(tipper_pos < 500 && document.getElementById("r_" + sq_x + "" + sq_y))
	{

		add_number(document.getElementById("r_" + sq_x + "" + sq_y),sq_nr);

		if(ret)
			return true;

	}
	else if(ret)
		return false;
	
}


function reveal_all()
{
	
	do
	{
		res = reveal_next(true);
	}
	while (res);
	
}

function key_handler(evt)
{
	if(evt)
	{
		key = evt.keyCode;
		shift = evt.altKey || evt.shiftKey;
	}
	else if(event)
	{
		key = event.keyCode;
		shift = event.altKey || event.shiftKey;
	}
	else
	{
		key = window.event.keyCode;
		shift = window.event.altKey || window.event.shiftKey;
	}




	if(!shift)
	{
		if(active != null && key >= 49 && key <= 57)
			add_number(active,key-48);
		else if(active != null && key >= 97 && key <= 105)
			add_number(active,key-96);
		else if(active != null && (key == 32 || key == 46 || key == 8 || (key == 0 && event)))
			add_number(active,"&nbsp;");
	}
	else
	{
		if(active != null && key >= 49 && key <= 57)
			add_number_prick(active,key-48);
		else if(active != null && key >= 97 && key <= 105)
			add_number_prick(active,key-96);
		else if(active != null && (key == 32 || key == 46 || key == 8))
			add_number_prick(active,"&nbsp;");
	}


}

function focus_handler(evt)
{
	if(isOpera == true)
		document.getElementById('lll').focus();
}