var cur = 1;
var	dStartTime 	= 0; 
var count = 0;
/* Laedt Bilder in den Cache, so dass diese ohne weitere Serverzugriffe genutzt werden können */
function FP_preloadImgs() 
{

 	var d=document,a=arguments; 
 	
 	if(!d.FP_imgs) 
 		d.FP_imgs=new Array();
 		
 	for(var i=0; i<a.length; i++) 
 	{ 
 		d.FP_imgs[i] = new Image; 
 		d.FP_imgs[i].src=a[i]; 
 	}
}

function SetPicture (index)
{
	if (spielstand[index] == cur)
	{
		/* nix zu tun */
		return;
	}
	
	/* Neuen Wert sichern */
	spielstand[index] = cur;
	
	/* und natürlich auch darstellen */
	FP_swapImg("FELD" + index, cur);

	/* und den richtigen Rahmen setzen */
	set_bild_format (index)
	
}

/* Wechselt das Bild in einem IMG-Tag */
function FP_swapImg(id, nr) 
{
	if (nr == '.')
		nr = 0;
		
	/* Ermittele den IMG-Tag */
	elm=FP_getObjectByID(id); 

	/* Falls Element gefunden wurde Bild wechseln */
	if(elm) 
		elm.src = document.FP_imgs[nr].src; 
}

function set_bild_format (index)
{
	var feldid = "td_cell_" + index;
	
	SetClass(feldid, "cell_zu_loesen");
}

function FP_getObjectByID(id,o) 
{
 	var c,el,els,f,m,n; if(!o)o=document; if(o.getElementById) el=o.getElementById(id);
 	else if(o.layers) c=o.layers; else if(o.all) el=o.all[id]; if(el) return el;
 	if(o.id==id || o.name==id) return o; if(o.childNodes) c=o.childNodes; if(c)
 	for(n=0; n<c.length; n++) { el=FP_getObjectByID(id,c[n]); if(el) return el; }
 	f=o.forms; if(f) for(n=0; n<f.length; n++) { els=f[n].elements;
 	for(m=0; m<els.length; m++){ el=FP_getObjectByID(id,els[n]); if(el) return el; } }
 	return null;
}

function SetClass(id, myclassname)
{
	var node = document.getElementById(id);
	
	if(node == null)
		return;
	
	node.className = myclassname;
}

function SetMarked (index)
{
	if (index == cur)
		return;
	
	/* alten Markierung entfernen */
	SetClass ("td_auswahl_" + cur, "cell_auswahl")

	/* Neue Markierung setzen */
	SetClass ("td_auswahl_" + index, "cell_auswahl_marked")

	cur = index;
}

function StartTimer(suRes)
{
  	bClock 		= true;          // merken, dass Stoppuhr laeuft
  	//dStartTime  = new Date();    // Startzeit merken
  	ShowTime(suRes);                  // Vertrichene Zeit anzeigen 
}

function StopTimer()
{
  	bClock = false;         // Stoppuhr als angehalten merken
}

// ShowTime() zeigt die aktuelle Zeit der Stoppuhr an und veranlasst,
// dass diese Routine automatisch nach Ablauf von 1 Sekunde wieder
// aufgerufen wird - ausser die Stoppuhr wurde zwischenzeitlich 
// angehalten
function ShowTime(suRes)
{
	// Minutenanteil der Differenz
  	if(! bClock) 
  		return;
  
  	var dDeltaTime = new Date();  // Variable dDeltaTime als Datumsvariable deklarieren

  	dDeltaTime.setTime( new Date() - dStartTime ); // Differenz: Aktuelle Zeit und Startzeit

	// verstrichene Minuten Sekunden und Stunden berechnen
  	var sMin 	= dDeltaTime.getMinutes(); 
  	var sSec	= dDeltaTime.getSeconds(); 
  	var sHours  = Math.floor( dDeltaTime / 3600000 );

	// Fehlende fuehrende Null ergaenzen
  	sMin = ( sMin < 10 ) ? "0" + sMin : sMin;
  	sSec = ( sSec < 10 ) ? "0" + sSec : sSec;

	if (suRes)
		SetText("sudoku_clock", "Lösung ist nicht korrekt!");
	else
		// Und anzeigen
		SetText("sudoku_clock", "Bisher benötigte Zeit " + sHours + " Stunden " + sMin + " Minuten " + sSec + " Sekunden");
	
  
  	// Und das jetzt jede Sekunde wiederholen
  	if (suRes && count < 5) {
  		count++;
 		setTimeout('ShowTime(1)', 1000);
 	}
	else
 		setTimeout('ShowTime(0)', 1000);
}

function setLoesungToForm()
{
	var node = document.getElementById('loesForm');
	
	var ergebnis = '';
	for (var i=0; i<spielstand.length; i++)
			ergebnis = ergebnis + spielstand[i];

	node.erg.value = ergebnis;
}


function SetText(id, text)
{
	var node = document.getElementById(id);
	if (node == null)
		return;
	
	deleteChildNodes(node);
	
	var inhalt    = document.createTextNode(text);
	node.appendChild(inhalt);
}

function deleteChildNodes(startNode) 
{
	while (startNode.hasChildNodes()) 
	{
		startNode.removeChild(startNode.lastChild);
	}
}
