var nums=new Array();

nums[0]=new Image();
nums[0].src='grafik/0.gif';
nums[1]=new Image();
nums[1].src='grafik/1.gif';
nums[2]=new Image();
nums[2].src='grafik/2.gif';
nums[3]=new Image();
nums[3].src='grafik/3.gif';
nums[4]=new Image();
nums[4].src='grafik/4.gif';
nums[5]=new Image();
nums[5].src='grafik/5.gif';
nums[6]=new Image();
nums[6].src='grafik/6.gif';
nums[7]=new Image();
nums[7].src='grafik/7.gif';
nums[8]=new Image();
nums[8].src='grafik/8.gif';
nums[9]=new Image();
nums[9].src='grafik/9.gif';
nums[10]=new Image();
nums[10].src='grafik/1-.gif';
nums[20]=new Image();
nums[20].src='grafik/2-.gif';
nums[30]=new Image();
nums[30].src='grafik/3-.gif';
nums[40]=new Image();
nums[40].src='grafik/4-.gif';
nums[50]=new Image();
nums[50].src='grafik/5-.gif';
nums[60]=new Image();
nums[60].src='grafik/6-.gif';
nums[70]=new Image();
nums[70].src='grafik/7-.gif';
nums[80]=new Image();
nums[80].src='grafik/8-.gif';
nums[90]=new Image();
nums[90].src='grafik/9-.gif';


kastenMarkiert = new Array();
var lastKasten=-1;

function getPos(x,y) {
	return (x*9)+y;
}

function makeVisible(wert) {
  if (document.getElementById(wert).style.setAttribute) {
    document.getElementById(wert).style.setAttribute("visibility", "visible", "false");
  } else {
    document.getElementById(wert).style.visibility = "visible";
  }
}

function makeHidden(wert) {
  if (document.getElementById(wert).style.setAttribute) {
    document.getElementById(wert).style.setAttribute("visibility", "hidden", "false");
  } else {
    document.getElementById(wert).style.visibility = "hidden";
  }
}

function setHighlighted(wert, farbclass) {
  wertclass=document.getElementById(wert).className;
  document.getElementById(wert).className=wertclass+" "+farbclass;
}

function setUnHighlighted(wert, farbclass) {
  wertclass=document.getElementById(wert).className;
  document.getElementById(wert).className=wertclass.replace(" "+farbclass, "");
}

function deleteElement(a,v){
	for (i=0; i<a.length; i++) {
		if (a[i]==v) a.splice(i, 1);
	}
	return a;
}

function showChoice(zahlen, i){
	choices= new Array(1,2,3,4,5,6,7,8,9);

	for (var j=0; j<choices.length; j++) {
		document.getElementById('Ziffer_'+i+'_'+choices[j]).src=nums[choices[j]*10].src;
	} 

	var x=Math.floor(i/9);
	var y= (i % 9);

	for (var j=0; j<9;j++) {
		str=zahlen[getPos(x,j)];
		if (str!='') {
			 choices = deleteElement(choices, str);
		}
		str=zahlen[getPos(j,y)];
		if (str!='') {
			choices = deleteElement(choices, str);
		}
	}

	for (var k=Math.floor(x/3)*3; k<Math.floor(x/3)*3+3; k++) {
		for (var j=Math.floor(y/3)*3; j<Math.floor(y/3)*3+3; j++) {
			str=zahlen[getPos(k,j)];
			if (str!='') {
				choices = deleteElement(choices, str);
			}
		}
	}

	for (var j=0; j<choices.length; j++) {
		document.getElementById('Ziffer_'+i+'_'+choices[j]).src=nums[choices[j]].src;
	} 


}

function notinarray(feld,wert){
	var ergebnis=true;
	for (var i=0; i<feld.length; i++) {
		if (feld[i]==wert) {
			ergebnis=false;
			break;
		} 
	}
	return ergebnis; 
}

function showMarkierung(i){
	
	if (lastKasten!=i && document.getElementById('highlight').checked) {
		while (kastenMarkiert.length!=0) {
			setUnHighlighted('kasten_'+kastenMarkiert[0], 'block-highlightcolor');
			setUnHighlighted('feld_'+kastenMarkiert[0], 'block-highlightcolor');
			kastenMarkiert.shift();
		} 
		
		if (i!=-1) {
			var x=Math.floor(i/9);
			var y= (i % 9);
		
			for (var j=0; j<9;j++) {
				if (notinarray(kastenMarkiert, getPos(x,j))) kastenMarkiert.push(getPos(x,j));
				if (notinarray(kastenMarkiert, getPos(j,y))) kastenMarkiert.push(getPos(j,y));
			}
		
			for (var k=Math.floor(x/3)*3; k<Math.floor(x/3)*3+3; k++) {
				for (var j=Math.floor(y/3)*3; j<Math.floor(y/3)*3+3; j++) {
					if (notinarray(kastenMarkiert, getPos(k,j))) kastenMarkiert.push(getPos(k,j));
				}
			}

			for (var j=0; j<kastenMarkiert.length; j++) {
				setHighlighted('kasten_'+kastenMarkiert[j], 'block-highlightcolor');
				setHighlighted('feld_'+kastenMarkiert[j], 'block-highlightcolor');
			} 
		}
	}
	lastKasten=i;
}



function berechneAll(a) {
	makeHidden("happy");
	if (a == -1 ) makeVisible("loading");
	window.setTimeout("berechneAll2("+a+");", 1);
}

function berechneAll2(a) {
	zahlen = new Array();
	felder = new Array();
	bfelder = new Array();
	
	if (a != -1 ) {	setUnHighlighted('feld_'+a, 'input-true'); setUnHighlighted('feld_'+a, 'input-wrong');}
	
	if (a!=-1) {
		for (var j=1; j<10; j++) {
			if (document.getElementById('feld_'+a).value=='' && document.getElementById('view').checked == true ) {
				document.getElementById('Ziffer_'+a+'_'+j).src=nums[j*10].src;
			} 
			else document.getElementById('Ziffer_'+a+'_'+j).src=nums[0].src;
		} 
	}
	
	if (document.getElementById('show').checked == true) {

		if (a != -1) {
			//betreffende felder ermitteln
			var x=Math.floor(a/9);
			var y= (a % 9);
		
			for (var j=0; j<9;j++) {
				str=getPos(x,j);
				if (notinarray(bfelder,str)) bfelder.push(str);
				str=getPos(j,y);
				if (notinarray(bfelder,str)) bfelder.push(str);
			}
		
			for (var k=Math.floor(x/3)*3; k<Math.floor(x/3)*3+3; k++) {
				for (var j=Math.floor(y/3)*3; j<Math.floor(y/3)*3+3; j++) {
					str=getPos(k,j);
					if (notinarray(bfelder,str)) bfelder.push(str);
				}
			}
		}

	
		for (var i=0; i<81; i++) {
			zahlen.push(document.getElementById('feld_'+i).value);
			if (zahlen[i]=='') {
				if (a != -1) {
	
					if (!notinarray(bfelder,i)) felder.push(i);
				
				}
				else {
					felder.push(i);
				}
			} 
		}
			
		for (var i=0; i<felder.length; i++) {
			if (zahlen[felder[i]]=='') showChoice(zahlen, felder[i]);
		} 
	
	}
	makeHidden("loading");
}


function checkAll() {
	makeHidden("happy");
	makeVisible("loading");
	window.setTimeout("checkAll2();", 1);
}

function checkAll2() {
	var wrong=false;
	for (var i=0; i<81; i++) {
		if (!document.getElementById('feld_'+i).readOnly) {
			setUnHighlighted('feld_'+i, 'input-true');
			setUnHighlighted('feld_'+i, 'input-wrong');
			if (document.getElementById('feld_'+i).value == document.getElementById('hiddenfeld_'+i).value) {
				setHighlighted('feld_'+i, 'input-true');
			}
			else {
				if (document.getElementById('feld_'+i).value!="") setHighlighted('feld_'+i, 'input-wrong');
				wrong=true;
			}
		}
	} 
	makeHidden("loading");
	if (!wrong) {
		tend=new Date();
		ts=tend.getSeconds()-tstart.getSeconds();
		tm=tend.getMinutes()-tstart.getMinutes();
		th=tend.getHours()-tstart.getHours();
		if (th<0) {
			th+=24;
		}
		if (tm<0) {
			tm+=60;
			th--;
		}
		if (ts<0) {
			ts+=60;
			tm--;
		}
		tm+=th*60;
		ts=(ts < 10) ? "0" + ts : ts;
		document.getElementById("happy-text").innerHTML=oldHappyText.replace("0:0",tm+":"+ts);
		makeVisible("happy");
	}
}


function changeShow() {
	makeHidden("happy");
	makeVisible("loading");
	window.setTimeout("changeShow2();", 1);
}

function changeShow2() {
	if (document.getElementById('show').checked == true) {
		document.getElementById('show').checked=false;
		makeHidden("loading");
	} else {
		document.getElementById('view').checked=true;
		for (var a=0; a<81; a++) {
			if (document.getElementById('feld_'+a).value=='') {
				for (var j=1; j<10; j++) {
					document.getElementById('Ziffer_'+a+'_'+j).src=nums[j*10].src;
				} 
			}
		} 
		document.getElementById('show').checked=true;
		
		berechneAll(-1);
	}	
}


function changeView() {
	makeHidden("happy");
	makeVisible("loading");
	window.setTimeout("changeView2();", 1);
}

function changeView2() {

	if (document.getElementById('view').checked == true) {
		document.getElementById('show').checked=false;
		document.getElementById('view').checked=false;
		for (var a=0; a<81; a++) {
			if (!document.getElementById('feld_'+a).readOnly) {
				for (var j=1; j<10; j++) {
					document.getElementById('Ziffer_'+a+'_'+j).src=nums[0].src;
				} 
			}
		} 
	} else {
		document.getElementById('view').checked=true;
		for (var a=0; a<81; a++) {
			if (document.getElementById('feld_'+a).value=='') {
				for (var j=1; j<10; j++) {
					document.getElementById('Ziffer_'+a+'_'+j).src=nums[j*10].src;
				} 
			}
		} 
	}	
	makeHidden("loading");
	
}

function changeHighlight() {

	if (document.getElementById('highlight').checked == true) {
		document.getElementById('highlight').checked=false;
		while (kastenMarkiert.length!=0) {
			setUnHighlighted('kasten_'+kastenMarkiert[0], 'block-highlightcolor');
			setUnHighlighted('feld_'+kastenMarkiert[0], 'block-highlightcolor');
			kastenMarkiert.shift();
		} 
		lastKasten=-1;
	} else {
		document.getElementById('highlight').checked=true;
	}	
	
}

function changeImage(i,j,obj) {

	if (document.getElementById('show').checked == true && obj.src==nums[j].src ) {
		document.getElementById('feld_'+i).value=j;
		berechneAll(i);
	} else if (document.getElementById('view').checked == true && document.getElementById('show').checked == false) {
		if (obj.src==nums[j].src) {
			document.getElementById('Ziffer_'+i+'_'+j).src=nums[j*10].src;
		} else {
			document.getElementById('Ziffer_'+i+'_'+j).src=nums[j].src;		
		}
	}

}

function resetForm() {
	makeHidden("happy");
	makeVisible("loading");
	window.setTimeout("resetForm2();", 1);
}

function resetForm2() {
	
	for (var a=0; a<81; a++) {
		setUnHighlighted('feld_'+a, 'input-true'); 
		setUnHighlighted('feld_'+a, 'input-wrong');
		showMarkierung(-1);
		if (!document.getElementById('feld_'+a).readOnly) {
			for (var j=1; j<10; j++) {
				document.getElementById('Ziffer_'+a+'_'+j).src=nums[0].src;
			} 
		}
	} 

	document.sudoku.reset();
	tstart=new Date();
	makeHidden("loading");
}





//kontextmenue

// Nur für IE 5+ und NN 6+
ie5=(document.getElementById && document.all && document.styleSheets)?1:0;
nn6=(document.getElementById && !document.all)?1:0;



// Kontextmenü initialisieren

if (ie5 || nn6) {

	menuWidth=40, menuHeight=123;

	menuStatus=0;
	menuKasten=0;

	oF="onfocus='if(this.blur)this.blur()'"; // Um hässlichen Linkrahmen in einigen Browsern zu vermeiden



	document.write(

		"<div id='menu' class='right-click-menue-div'>"+

		"<table cellpadding='0' cellspacing='0' class='right-click-menue'>"+

		"<tr><td class='right-click-menue-closer' "+oF+">x</td></tr>"+
		"<tr><td class='right-click-menue-items' onmouseover='this.className=\"right-click-menue-items-highlighted\";' onmouseout='this.className=\"right-click-menue-items\";' onclick='clickMenue(1);' "+oF+">1</td></tr>"+
		"<tr><td class='right-click-menue-items' onmouseover='this.className=\"right-click-menue-items-highlighted\";' onmouseout='this.className=\"right-click-menue-items\";' onclick='clickMenue(2);' "+oF+">2</td></tr>"+
		"<tr><td class='right-click-menue-items' onmouseover='this.className=\"right-click-menue-items-highlighted\";' onmouseout='this.className=\"right-click-menue-items\";' onclick='clickMenue(3);' "+oF+">3</td></tr>"+
		"<tr><td class='right-click-menue-items' onmouseover='this.className=\"right-click-menue-items-highlighted\";' onmouseout='this.className=\"right-click-menue-items\";' onclick='clickMenue(4);' "+oF+">4</td></tr>"+
		"<tr><td class='right-click-menue-items' onmouseover='this.className=\"right-click-menue-items-highlighted\";' onmouseout='this.className=\"right-click-menue-items\";' onclick='clickMenue(5);' "+oF+">5</td></tr>"+
		"<tr><td class='right-click-menue-items' onmouseover='this.className=\"right-click-menue-items-highlighted\";' onmouseout='this.className=\"right-click-menue-items\";' onclick='clickMenue(6);' "+oF+">6</td></tr>"+
		"<tr><td class='right-click-menue-items' onmouseover='this.className=\"right-click-menue-items-highlighted\";' onmouseout='this.className=\"right-click-menue-items\";' onclick='clickMenue(7);' "+oF+">7</td></tr>"+
		"<tr><td class='right-click-menue-items' onmouseover='this.className=\"right-click-menue-items-highlighted\";' onmouseout='this.className=\"right-click-menue-items\";' onclick='clickMenue(8);' "+oF+">8</td></tr>"+
		"<tr><td class='right-click-menue-items' onmouseover='this.className=\"right-click-menue-items-highlighted\";' onmouseout='this.className=\"right-click-menue-items\";' onclick='clickMenue(9);' "+oF+">9</td></tr>"+
		"</table></div>");



	// Rechter Mausklick: Menü anzeigen, linker Mausklick: Menü verstecken

	document.oncontextmenu=showMenu; //oncontextmenu geht nicht bei NN 6.01

	document.onmouseup=hideMenu;
}

// Kontextmenü anzeigen
function showMenu(e) {
	
	if (lastKasten!=-1 && menuStatus==0 && !document.getElementById('feld_'+lastKasten).readOnly) {
		if(ie5) {
	
			if(event.clientX>menuWidth) xPos=event.clientX-menuWidth+document.body.scrollLeft;
	
			else xPos=event.clientX+document.body.scrollLeft;
	
			if (event.clientY>menuHeight) yPos=event.clientY-menuHeight+document.body.scrollTop;
	
			else yPos=event.clientY+document.body.scrollTop;
	
		}
	
		else {
	
			if(e.pageX>menuWidth+window.pageXOffset) xPos=e.pageX-menuWidth;
	
			else xPos=e.pageX;
	
			if(e.pageY>menuHeight+window.pageYOffset) yPos=e.pageY-menuHeight;
	
			else yPos=e.pageY;
	
		}
	
		document.getElementById("menu").style.left=xPos;
	
		document.getElementById("menu").style.top=yPos;
		
		if (document.getElementById('menu').style.setAttribute) {
			document.getElementById('menu').style.setAttribute("visibility", "visible", "false");
		} else {
			document.getElementById('menu').style.visibility = "visible";
		}
		
		menuKasten=lastKasten;
		menuStatus=1;
	
		return false;
	} else if (lastKasten!=-1) { 
		return false;
	} else 
		return true;

}


function clickMenue(i) {

	document.getElementById('feld_'+menuKasten).value=i;
	berechneAll(menuKasten);

}


// Kontextmenü verstecken

function hideMenu(e) {

	if (menuStatus==1 && ((ie5 && event.button==1) || (nn6 && e.which==1))) {

	  if (document.getElementById('menu').style.setAttribute) {
	    document.getElementById('menu').style.setAttribute("visibility", "hidden", "false");
	  } else {
	    document.getElementById('menu').style.visibility = "hidden";
	  }

	  menuStatus=0;

	}

}

function start() {
	oldHappyText=document.getElementById("happy-text").innerHTML;
	tstart=new Date();
}


