var direct=0; //1..waagerecht 2..senkrecht
var nodirect0=false;
var kastenMarkiert = new Array();
var kastenFocus = new Array();
var lastkastenFocus = new Array();
var lastKasten=-1;
var lastFocus=-1;
var nounfocus=false;

function getPos(x,y) {
	return (x*100)+y;
}

function getPosS(x) {
	return (x-(x%100))/100;
}

function getPosW(x) {
	return x%100;
}

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 showMarkierung(s,w){
	if (kastenFocus.length==0) {
		aNum=0; dNum=0;
		if (lastKasten!=getPos(s,w)) {
			if (kastenMarkiert.length!=0) makeHidden('legend-popup');
			while (kastenMarkiert.length!=0) {
				setUnHighlighted('kasten_'+getPosS(kastenMarkiert[0])+'_'+getPosW(kastenMarkiert[0]), 'kwr-block-highlightcolor');
				setUnHighlighted('feld_'+getPosS(kastenMarkiert[0])+'_'+getPosW(kastenMarkiert[0]), 'kwr-block-highlightcolor');
				kastenMarkiert.shift();
			} 
			
			if (s!=-1) {
				kastenMarkiert.push(getPos(s,w));
				for (var j=s; ;j--) {
					if (document.getElementById('kasten_'+j+'_'+w)) {
						kastenMarkiert.push(getPos(j,w));
						if (document.getElementById('number_'+j+'_'+w) && (document.getElementById('kasten_'+(j+1)+'_'+w) || document.getElementById('kasten_'+(j-1)+'_'+w))) dNum=document.getElementById('number_'+j+'_'+w).value;
					} else break;
				}
				for (var j=s; ;j++) {
					if (document.getElementById('kasten_'+j+'_'+w)) kastenMarkiert.push(getPos(j,w)); else break;
				}
			
				for (var j=w; ;j--) {
					if (document.getElementById('kasten_'+s+'_'+j)) {
						kastenMarkiert.push(getPos(s,j));
						if (document.getElementById('number_'+s+'_'+j) && (document.getElementById('kasten_'+s+'_'+(j+1)) || document.getElementById('kasten_'+s+'_'+(j-1)))) aNum=document.getElementById('number_'+s+'_'+j).value;
					} else break;
				}
				for (var j=w; ;j++) {
					if (document.getElementById('kasten_'+s+'_'+j)) kastenMarkiert.push(getPos(s,j)); else break;
				}

				for (var j=0; j<kastenMarkiert.length; j++) {
					setHighlighted('kasten_'+getPosS(kastenMarkiert[j])+'_'+getPosW(kastenMarkiert[j]), 'kwr-block-highlightcolor');
					setHighlighted('feld_'+getPosS(kastenMarkiert[j])+'_'+getPosW(kastenMarkiert[j]), 'kwr-block-highlightcolor');
				}
				
				
				legend="";
				if (aNum>0) legend+=aNum+" waagerecht:\n"+across[aNum]+"\n\n";
				if (dNum>0) legend+=dNum+" senkrecht:\n"+down[dNum]; 
				document.getElementById('legend-popup').value=legend; 
				if (w<9) document.getElementById('legend-popup').style.left=((w*26)+10)+'px';
				else document.getElementById('legend-popup').style.left=(((w-1)*26)-(170+10))+'px';
				if (s<11) document.getElementById('legend-popup').style.top=((s*26)+10)+'px';
				else document.getElementById('legend-popup').style.top=(((s-1)*26)-(90+10))+'px';
				makeVisible('legend-popup');
			}
		}
		lastKasten=getPos(s,w);
	}
}

function inarray(feld,wert){
	var ergebnis=false;
	for (var i=0; i<feld.length; i++) {
		if (feld[i]==wert) {
			ergebnis=true;
			break;
		} 
	}
	return ergebnis; 
}


function focusInput(s,w) {
 	document.getElementById('feld_'+s+'_'+w).focus();
}

function unfocusBlock() {
	if (!nounfocus) focusBlock(-1,-1);
	nounfocus=false;
}

function focusBlock(s,w){
	while (kastenFocus.length!=0) {
		setUnHighlighted('kasten_'+getPosS(kastenFocus[0])+'_'+getPosW(kastenFocus[0]), 'kwr-block-focuscolor');
		setUnHighlighted('feld_'+getPosS(kastenFocus[0])+'_'+getPosW(kastenFocus[0]), 'kwr-block-focuscolor');
		kastenFocus.shift();
	} 
	document.getElementById('legend-focus').value="";

	if (lastFocus>0) {
		setUnHighlighted('kasten_'+getPosS(lastFocus)+'_'+getPosW(lastFocus), 'kwr-block-focusactivcolor');
		setUnHighlighted('feld_'+getPosS(lastFocus)+'_'+getPosW(lastFocus), 'kwr-block-focusactivcolor');
	}
		
	if (kastenMarkiert.length!=0) {
		makeHidden('legend-popup');
		lastKasten=0;
		while (kastenMarkiert.length!=0) {
			setUnHighlighted('kasten_'+getPosS(kastenMarkiert[0])+'_'+getPosW(kastenMarkiert[0]), 'kwr-block-highlightcolor');
			setUnHighlighted('feld_'+getPosS(kastenMarkiert[0])+'_'+getPosW(kastenMarkiert[0]), 'kwr-block-highlightcolor');
			kastenMarkiert.shift();
		} 
	}

	if (s != -1) {
		if (lastFocus!=getPos(s,w) && inarray(lastkastenFocus,getPos(s,w))) {
			
			kastenFocus=((new Array()).concat(lastkastenFocus));
			
		}
		else {
		
			if (lastFocus!=getPos(s,w) && !nodirect0) direct=0;
		
			if ( !nodirect0 && document.getElementById('number_'+s+'_'+w) && document.getElementById('kasten_'+s+'_'+(w-1)) ) {
				if (direct==0) direct=1;
				else if (direct==1) direct=2;
				else if (direct==2) direct=0;
			}
			
			if ( (direct==0 || (nodirect0 && direct==2)) && !document.getElementById('kasten_'+s+'_'+(w+1)) && !document.getElementById('kasten_'+s+'_'+(w-1)) ) {
				direct=1;
			}
			
			if ( direct==1 && !document.getElementById('kasten_'+(s+1)+'_'+w) && !document.getElementById('kasten_'+(s-1)+'_'+w) ) {
				direct=2;
			}
			
			if (direct==2 && !nodirect0) {
				direct=0;
				document.getElementById('feld_'+s+'_'+w).blur();
				showMarkierung(s,w);
			}
			else if (direct==1) {
				direct=2;
				var k=s;
				for (var j=s; ;j--) {
					if (!document.getElementById('kasten_'+j+'_'+w)) break;
					k=j;
				}
				for (var j=k; ;j++) {
					if (document.getElementById('kasten_'+j+'_'+w)) kastenFocus.push(getPos(j,w)); else break;
				}
			}
			else {
				direct=1;
				var k=w;
				for (var j=w; ;j--) {
					if (!document.getElementById('kasten_'+s+'_'+j)) break;
					k=j;
				}
				for (var j=k; ;j++) {
					if (document.getElementById('kasten_'+s+'_'+j)) kastenFocus.push(getPos(s,j)); else break;
				}
			}
			
		}		
		

		for (var j=0; j<kastenFocus.length; j++) {
			setHighlighted('kasten_'+getPosS(kastenFocus[j])+'_'+getPosW(kastenFocus[j]), 'kwr-block-focuscolor');
			setHighlighted('feld_'+getPosS(kastenFocus[j])+'_'+getPosW(kastenFocus[j]), 'kwr-block-focuscolor');
		}

		if (kastenFocus.length>0) {				
			showMarkierung(-1,-1);
			setHighlighted('kasten_'+s+'_'+w, 'kwr-block-focusactivcolor');
			setHighlighted('feld_'+s+'_'+w, 'kwr-block-focusactivcolor');
		}
		
		if (direct==1 && kastenFocus.length>0) {
			document.getElementById('legend-focus').value=across[document.getElementById("number_"+getPosS(kastenFocus[0])+"_"+getPosW(kastenFocus[0])).value];
		}
		else if (direct==2 && kastenFocus.length>0) {
			document.getElementById('legend-focus').value=down[document.getElementById("number_"+getPosS(kastenFocus[0])+"_"+getPosW(kastenFocus[0])).value];
		}
		lastkastenFocus=((new Array()).concat(kastenFocus));
		lastFocus=getPos(s,w);
		nodirect0=false;
		
	}
	
}



function inputBlock(s,w,charCode) {
	if (s==-1 && (charCode>=37 && charCode<=40)) {
		nodirect0=true;
		document.getElementById('feld_'+getPosS(lastFocus)+'_'+getPosW(lastFocus)).focus();
	}
	else if (s!=-1) {
		x=0; y=0;
		setUnHighlighted('feld_'+s+'_'+w, 'input-true');
		setUnHighlighted('feld_'+s+'_'+w, 'input-wrong');
		if ( (charCode>=65 && charCode<=90) || (charCode>=97 && charCode<=122) || (charCode>=37 && charCode<=40) || (charCode==8) || (charCode==32) ) {
			//38=oben,39=rechts,40=unten,37=links,32=leer,8=backspace
			if (direct==1) {
				if (charCode==38) {
					x=-1;
					nodirect0=true;
				}
				else if (charCode==40) {
					x=1;
					nodirect0=true;
				}
				else if (charCode==37) {
					y=-1;
				}
				else if (charCode==8) {
					y=-1;
					if (!document.getElementById('feld_'+s+'_'+w).readOnly) document.getElementById('feld_'+s+'_'+w).value="";
				}
				else if (charCode==39) {
					y=1;
				}
				else if (charCode==32) {
					y=1;
					if (!document.getElementById('feld_'+s+'_'+w).readOnly) document.getElementById('feld_'+s+'_'+w).value="";
				}
				else {
					y=1;
					if (!document.getElementById('feld_'+s+'_'+w).readOnly) document.getElementById('feld_'+s+'_'+w).value=String.fromCharCode(charCode);
				}
			
			}
			else if (direct==2) {
				if (charCode==37) {
					y=-1;
					nodirect0=true;
				}
				else if (charCode==39) {
					y=1;
					nodirect0=true;
				}
				else if (charCode==38) {
					x=-1;
				}
				else if (charCode==8) {
					x=-1;
					if (!document.getElementById('feld_'+s+'_'+w).readOnly) document.getElementById('feld_'+s+'_'+w).value="";
				}
				else if (charCode==40) {
					x=1;
				}
				else if (charCode==32) {
					x=1;
					if (!document.getElementById('feld_'+s+'_'+w).readOnly) document.getElementById('feld_'+s+'_'+w).value="";
				}
				else {
					x=1;
					if (!document.getElementById('feld_'+s+'_'+w).readOnly) document.getElementById('feld_'+s+'_'+w).value=String.fromCharCode(charCode);
				}
			
			
			}
			
			
			if ((x==0 && y==0) || !document.getElementById('feld_'+(s+x)+'_'+(w+y))) {
				document.getElementById('feld_'+s+'_'+w).blur();
				document.getElementById('hiddenfeld').focus();
				nodirect0=false;
			}
			else { 
				nounfocus=true;
				document.getElementById('feld_'+(s+x)+'_'+(w+y)).focus();
			}
		}
		else document.getElementById('feld_'+s+'_'+w).value="";
	}
}

function showWord() {
	if (lastkastenFocus.length>0) {
		for (var i=0; i<lastkastenFocus.length;i++) {
			document.getElementById('feld_'+getPosS(lastkastenFocus[i])+'_'+getPosW(lastkastenFocus[i])).value=document.getElementById('hiddenfeld_'+getPosS(lastkastenFocus[i])+'_'+getPosW(lastkastenFocus[i])).value;
			document.getElementById('feld_'+getPosS(lastkastenFocus[i])+'_'+getPosW(lastkastenFocus[i])).readOnly=true;
			setUnHighlighted('feld_'+getPosS(lastkastenFocus[i])+'_'+getPosW(lastkastenFocus[i]), 'input-true');
			setUnHighlighted('feld_'+getPosS(lastkastenFocus[i])+'_'+getPosW(lastkastenFocus[i]), 'input-wrong');
			setHighlighted('kasten_'+getPosS(lastkastenFocus[i])+'_'+getPosW(lastkastenFocus[i]), 'input-cheat');
			setHighlighted('feld_'+getPosS(lastkastenFocus[i])+'_'+getPosW(lastkastenFocus[i]), 'input-cheat');
		}
		unfocusBlock();
		document.getElementById('hiddenfeld').focus();
	} 
}


function checkAll() {
	makeHidden("happy");
	showMarkierung(-1,-1);
	makeVisible("loading");
	window.setTimeout("checkAll2();", 10);
}

function checkAll2() {
	var wrong=false;
	unfocusBlock();
	for (var s=1; s<=15; s++) {
		for (var w=1; w<=15; w++) {
			if (document.getElementById('feld_'+s+'_'+w) && !document.getElementById('feld_'+s+'_'+w).readOnly) {
				setUnHighlighted('feld_'+s+'_'+w, 'input-true');
				setUnHighlighted('feld_'+s+'_'+w, 'input-wrong');
				if (document.getElementById('feld_'+s+'_'+w).value.toUpperCase() == document.getElementById('hiddenfeld_'+s+'_'+w).value) {
					setHighlighted('feld_'+s+'_'+w, 'input-true');
				}
				else {
					setHighlighted('feld_'+s+'_'+w, '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 resetForm() {
	makeHidden("happy");
	makeVisible("loading");
	window.setTimeout("resetForm2();", 10);
}

function resetForm2() {
	
	unfocusBlock();
	for (var s=1; s<=15; s++) {
		for (var w=1; w<=15; w++) {
			if (document.getElementById('feld_'+s+'_'+w)) {
				setUnHighlighted('feld_'+s+'_'+w, 'input-true');
				setUnHighlighted('feld_'+s+'_'+w, 'input-wrong');
				setUnHighlighted('feld_'+s+'_'+w, 'input-cheat');
				document.getElementById('feld_'+s+'_'+w).readOnly=false;
			}
		}
	} 
	document.kwr.reset();
	tstart=new Date();
	makeHidden("loading");
}


function start() {
	oldHappyText=document.getElementById("happy-text").innerHTML;
	tstart=new Date();
}

function closeHelp() {
	makeHidden("help");
}

function showHelp() {
	makeVisible("help");
}


