/* Türme von Hanoi - programmiert von Adrian Lötscher */
arrTuerme = new Array(10);
arrAnzScheiben = new Array(4);
arrScheibeNr = new Array(4);
arrZugSequenz = new Array(1000);
var stopp = 0;
var ZeigerArrZug = 0;
var AnzScheiben = 4;
var AktiverTurm = 0;
var AktiveScheibe = 0;
var AktiveScheibeNr = 0;
var Auto = 0;
var v = 500;

var aX = 2;
var aY = 1;
var aZ = 3;
var aTemp1 = 3;
var aTemp2 = 3;
var aZiel1;
var aZiel2;

function initTurm()
{
	v = 500;
  stopp = 0;
	
  // Anz Scheiben bestimmen
  var iSelect = document.frmTurm.selAnzScheiben.selectedIndex;
	AnzScheiben = parseInt(document.frmTurm.selAnzScheiben.options[iSelect].text);

  for(var i=0; i<=9; i++) 
	{
	  arrTuerme[i] = new Array(4);
		arrTuerme[i][0] = 0;
		arrTuerme[i][1] = 0;
		if (i >= 10-AnzScheiben) arrTuerme[i][2] = i-9+AnzScheiben; else arrTuerme[i][2] = 0;
		arrTuerme[i][3] = 0;	 
	}
	
	arrAnzScheiben[0] = 0;
	arrAnzScheiben[1] = 0;
	arrAnzScheiben[2] = AnzScheiben;
	arrAnzScheiben[3] = 0;
	
	arrScheibeNr[0] = 0;
	arrScheibeNr[1] = 0;
	arrScheibeNr[2] = arrTuerme[10-AnzScheiben][2];
	arrScheibeNr[3] = 0;	
	
	// Bilder initialisieren
	for(var i=1; i<=9; i++)
	{
	   for(var j=1; j<=3; j++)
		 {
		 	  if (arrTuerme[i][j] > 0)
				{
				   document.images['bild_' + j + '_' + i].src = "../grafiken/turm_hanoi/bild" + arrTuerme[i][j] + ".gif"; 

				}
				else
				{
					 document.images['bild_' + j + '_' + i].src = "../grafiken/turm_hanoi/bild.gif"; 	
				}
			}
		}

	// Array ZugSequenz initialisieren
	for(var i=0; i<arrZugSequenz.length; i++)
	{
	  arrZugSequenz[i] = new Array(2);
		arrZugSequenz[i][0] = 0;
		arrZugSequenz[i][1] = 0;
	}	
		

}

function geklickt(Turm, Scheibe)
{ 
  // Informationen sammeln
	var ScheibenNr = arrTuerme[Scheibe][Turm];
	var exitSub = 0;
	var ruecksetzen = 0;
	
  // Überprüfen, ob erste Scheibe angeklickt
	if (AktiveScheibe == 0)
	{
	  // Scheibe aktivieren
		
    // Überprüfen, ob auf eine richtige Scheibe geklickt
	  if (arrTuerme[Scheibe][Turm] == 0)  exitSub = 1;						// auf keine Scheibe geklickt
	  if (arrTuerme[Scheibe-1][Turm] > 0)  exitSub = 1;						// nicht auf die oberste Scheibe geklickt
		
		if (exitSub == 1)
		{
		   // auf falsche Scheibe geklickt --> richtige Scheibe zuweisen
			 Scheibe = 10 - arrAnzScheiben[Turm];
			 ScheibenNr = arrTuerme[Scheibe][Turm];
			 exitSub = 0;
		}
		
		// Scheibe aktivieren
		if (exitSub == 0)
		{
		  AktiverTurm = Turm;
			AktiveScheibe = Scheibe;
			AktiveScheibeNr = arrTuerme[Scheibe][Turm];
			document.images["status_" + Turm].src = "../grafiken/turm_hanoi/gruen.gif";
	  }
	}
	else
	{
	  // Scheibe ablegen
		var ObersteScheibeNr = arrScheibeNr[Turm];
		var NaechsteScheibe = 9-arrAnzScheiben[Turm];
		var verboten = 0;
		
		// Überprüfen, ob auf diesen Turm eine Scheibe abgelegt werden darf
		if (arrTuerme[10-AnzScheiben][Turm] > 0)
		{  // Oberste Scheibe schon besetzt
		   verboten = 1;
			 exitSub = 1;  	 
		}						 		 		 		 				  
		if (Turm == AktiverTurm)
		{  // Aktiver Turm angeklickt
		   ruecksetzen = 1;
		   exitSub = 2;			
		}			 				  													 	
		if ((ObersteScheibeNr < AktiveScheibeNr) && (ObersteScheibeNr > 0)) 
		{  // Grössere Scheibe
		 	 verboten = 1;
			 exitSub = 3;  		
		}  
		
		// Tauschen
		if (exitSub == 0)
		{
  		arrAnzScheiben[AktiverTurm]--;
  		arrAnzScheiben[Turm]++;
  		if (AktiveScheibe < 9) arrScheibeNr[AktiverTurm] = arrTuerme[AktiveScheibe+1][AktiverTurm]; else arrScheibeNr[AktiverTurm] = 0;
  		arrScheibeNr[Turm] = AktiveScheibeNr;
  		arrTuerme[AktiveScheibe][AktiverTurm] = 0;
  		arrTuerme[NaechsteScheibe][Turm] = AktiveScheibeNr;
  		document.images['bild_' + AktiverTurm + '_' + AktiveScheibe].src = "../grafiken/turm_hanoi/bild.gif";
  		document.images['bild_' + Turm + '_' + NaechsteScheibe].src = "../grafiken/turm_hanoi/bild" + AktiveScheibeNr + ".gif"; 
			ruecksetzen = 1;
  	}
		
		if (ruecksetzen == 1)
		{
			document.images["status_" + AktiverTurm].src = "../grafiken/turm_hanoi/transp.gif";		
  		AktiveScheibe = 0;
  		AktiveScheibeNr = 0;
  		AktiverTurm = 0;

		}
		
		if (verboten > 0)
		{
		   document.images["status_" + Turm].src = "../grafiken/turm_hanoi/rot.gif";
			 window.setTimeout("statusRuecksetzen(" + Turm + ")", 2000);
		}
		
		// Überprüfen, ob Turm fertig
		if ((arrAnzScheiben[1] == AnzScheiben) || (arrAnzScheiben[3] == AnzScheiben))
		{
		  if (Auto == 0) alert("Gratulation. Du hast das Spiel erfolgreich geschafft!");
		}
	
	}
	
}


function statusRuecksetzen(Turm)
{
  document.images['status_' + Turm].src = '../grafiken/turm_hanoi/transp.gif'
}

function showLoesung()
{
  stopp = 1;
  Auto = 1; 
	initTurm();
	ZeigerArrZug = 0;
	verschiebeTurm(AnzScheiben, 2, 1, 3);
	ZeigerArrZug = 0;
	macheZug();
}

function verschiebeTurm(Anz, von, nach, speicher)
{
  if (Anz > 0) 
	{
	  verschiebeTurm(Anz-1, von, speicher, nach);
		arrZugSequenz[ZeigerArrZug][0] = von;
		arrZugSequenz[ZeigerArrZug][1] = nach;
		ZeigerArrZug++;
		verschiebeTurm(Anz-1, speicher, nach, von);
	}
}

function macheZug()
{

  if (arrZugSequenz[ZeigerArrZug][0] > 0)
	{
	  var aVon = arrZugSequenz[ZeigerArrZug][0];
		var aNach = arrZugSequenz[ZeigerArrZug][1];
	  var ScheibeX = 10 - arrAnzScheiben[aVon];
	  geklickt(aVon, ScheibeX);
		geklickt(aNach, 9);
		ZeigerArrZug++;
		window.setTimeout("macheZug()", v);	
	}
	else
	{
	  window.setTimeout("endeShow()", 2000);

		
	}

}

function endeShow()
{
	  Auto = 0;
		initTurm();
}
