
var selected = 41;
var solved = false;
var solution = "";


function setField(idx) {
	if (selected > 0)
		document.getElementById(selected).bgColor = "white";
	document.getElementById(idx).bgColor = "#FFEEBB";
	selected = idx;
	document.getElementById("in").focus();
	if (!solved) {
		//solution = solve(".4..9....3.9..........4...11....5.9.4...8.6..8..31......3..62...21.....3.....8..6");
		solved = true;
	}
}

function checkInput() {
	var diff = "";
	for (var i = 1; i <= gridsize; i++) {
		if (document.getElementById(i).innerHTML != "&nbsp;" && document.getElementById(i).innerHTML != solution.substr(i-1, 1)) {
			if (diff != "")
				diff += ",";
			diff += i;
		}
	}
	if (diff != "")
		alert(diff);
}

function hasConflict(pos, digit) {
	var r = Math.floor((pos - 1) / dim);
	var c = pos % dim;
	var br = Math.floor(r / subunit) * subunit;
	var bc = Math.floor(c / subunit) * subunit;
	for (var i = 0; i < dim; i++) {
		rf = i + r * dim + 1;
		if (rf != pos && document.getElementById(rf).innerHTML == digit ) {
			//alert("Reihe: " + r + " " + digit + " " + rf + " " + document.getElementById(rf).innerHTML);
			return true;
		}
		cf = c + i * dim;
		if (cf != pos && document.getElementById(cf).innerHTML == digit ) {
			//alert("Spalte: " + c + " " + digit + " " + cf + " " + document.getElementById(cf).innerHTML);
			return true;
		}
		bf = bc + (i % subunit) + (br + Math.floor(i / subunit)) * dim + 1;
		//alert("Pos: " + bf);
		if (bf != pos && document.getElementById(bf).innerHTML == digit ) {
			//alert("Box: " + " " + digit + " " + bf + " " + document.getElementById(bf).innerHTML);
			return true;
		}
	}
	return false;
}

function handleArrowKeys(e) {
	var evt = (e) ? e : ((window.event) ? window.event : null);
	if (evt) {
		if (evt.keyCode == 37) {
			if (selected%9 != 1)
				setField(parseInt(selected) - 1);
		}
		else if (evt.keyCode == 38) {
			if (selected > 9)
				setField(parseInt(selected) - 9);
		}
		else if (evt.keyCode == 39) {
			if (selected%9 != 0)
				setField(parseInt(selected) + 1);
		}
		else if (evt.keyCode == 40) {
			if (selected < 72)
				setField(parseInt(selected) + 9);
		}
		else if ((evt.keyCode >= 49 && evt.keyCode <= 57) || (evt.keyCode >= 97 && evt.keyCode <= 105)) {
			if (document.getElementById(selected).className == "field") {
				document.getElementById(selected).innerHTML = evt.keyCode%48;
				//alert(parseInt(solution.substr(selected-1,1)) + "::"+ evt.keyCode%48);
				if (document.grid_control.help[2].checked && parseInt(solution.substr(selected-1,1)) != evt.keyCode%48) {
					document.getElementById(selected).style.color = "red";
				}
				else if (document.grid_control.help[1].checked) {
					if (hasConflict(selected, evt.keyCode%48)) {
						document.getElementById(selected).style.color = "red";
					}
					else {
						document.getElementById(selected).style.color = "blue";
					}
				}
				else {
					document.getElementById(selected).style.color = "blue";
				}
			}
		}
		else if (evt.keyCode == 48 || evt.keyCode == 96 || evt.keyCode == 32 || evt.keyCode == 8 || evt.keyCode == 46) {
			if (document.getElementById(selected).className == "field")
				document.getElementById(selected).innerHTML = "";
		}
		else
			return true;
		//	alert(evt.keyCode);
	}
	return false;
}



document.onkeyup = handleArrowKeys;


