//---------------------------------------------------------------------------
// variablen fuer das spielbrett
//---------------------------------------------------------------------------

	var richtigePosition = new Array()
	richtigePosition[0] = new Array()	// erste Spalte initialisieren
	
	richtigePosition[1] = new Array()	// zweite Spalte initialisieren
	richtigePosition[1][0] = new Image()

	richtigePosition[2] = new Array()	// dritte Spalte initialisieren
	richtigePosition[2][0] = new Image()
	
	richtigePosition[3] = new Array()	// vierte Spalte initialisieren
	richtigePosition[3][0] = new Image()
	
	var leeresBild = new Image()			// dient zum Zwischenspeichern des leeren Bildes

	var aktPosition = new Array()
	aktPosition[0] = new Array()	// erste Spalte initialisieren
	aktPosition[0][0] = new Image()
	
	aktPosition[1] = new Array()	// zweite Spalte initialisieren
	aktPosition[1][0] = new Image()

	aktPosition[2] = new Array()	// dritte Spalte initialisieren
	aktPosition[2][0] = new Image()

	aktPosition[3] = new Array()	// vierte Spalte initialisieren
	aktPosition[3][0] = new Image()

	var xleer;
	var yleer;

	var spielen = false;	// loesen() oder mischeln(), kein Gewinnen()
	var mischelt= false;
	var timerid = null;		// zum loeschen der setTimeouts
	var mischelZaehler = 0;	// ueberprueft die Anzahl der zufaelligen Verschieber zu Beginn
	var mischelAnzahl = 50;	// Verschiebungen um das Puzzle zu mischeln
	var letztesMischeln = null;	// speichert richtung des letzten Mischelvorgangs

//---------------------------------------------------------------------------
// mix
//---------------------------------------------------------------------------
// mischeln und neues spiel starten
//---------------------------------------------------------------------------
function mix()
{
	richtigePosition[0][0] = new Image()
	richtigePosition[0][0].src = "Schiebespiel/image00.jpg";
	richtigePosition[0][1] = new Image()
	richtigePosition[0][1].src = "Schiebespiel/image01.jpg";
	richtigePosition[0][2] = new Image()
	richtigePosition[0][2].src = "Schiebespiel/image02.jpg";
	richtigePosition[0][3] = new Image()
	richtigePosition[0][3].src = "Schiebespiel/image03.jpg";

	richtigePosition[1][0].src = "Schiebespiel/image10.jpg";
	richtigePosition[1][1] = new Image()
	richtigePosition[1][1].src = "Schiebespiel/image11.jpg";
	richtigePosition[1][2] = new Image()
	richtigePosition[1][2].src = "Schiebespiel/image12.jpg";
	richtigePosition[1][3] = new Image()
	richtigePosition[1][3].src = "Schiebespiel/image13.jpg";

	richtigePosition[2][0].src = "Schiebespiel/image20.jpg";
	richtigePosition[2][1] = new Image()
	richtigePosition[2][1].src = "Schiebespiel/image21.jpg";
	richtigePosition[2][2] = new Image()
	richtigePosition[2][2].src = "Schiebespiel/image22.jpg";
	richtigePosition[2][3] = new Image()
	richtigePosition[2][3].src = "Schiebespiel/image23.jpg";

	richtigePosition[3][0].src = "Schiebespiel/image30.jpg";
	richtigePosition[3][1] = new Image()
	richtigePosition[3][1].src = "Schiebespiel/image31.jpg";
	richtigePosition[3][2] = new Image()
	richtigePosition[3][2].src = "Schiebespiel/image32.jpg";
	richtigePosition[3][3] = new Image()
	richtigePosition[3][3].src = "Schiebespiel/image33.jpg";

	leeresBild.src = "Schiebespiel/image33.jpg";

	aktPosition[0][0].src = "Schiebespiel/image00.jpg";
	aktPosition[0][1] = new Image()
	aktPosition[0][1].src = "Schiebespiel/image01.jpg";
	aktPosition[0][2] = new Image()
	aktPosition[0][2].src = "Schiebespiel/image02.jpg";
	aktPosition[0][3] = new Image()
	aktPosition[0][3].src = "Schiebespiel/image03.jpg";

	aktPosition[1][0].src = "Schiebespiel/image10.jpg";
	aktPosition[1][1] = new Image()
	aktPosition[1][1].src = "Schiebespiel/image11.jpg";
	aktPosition[1][2] = new Image()
	aktPosition[1][2].src = "Schiebespiel/image12.jpg";
	aktPosition[1][3] = new Image()
	aktPosition[1][3].src = "Schiebespiel/image13.jpg";

	aktPosition[2][0].src = "Schiebespiel/image20.jpg";
	aktPosition[2][1] = new Image()
	aktPosition[2][1].src = "Schiebespiel/image21.jpg";
	aktPosition[2][2] = new Image()
	aktPosition[2][2].src = "Schiebespiel/image22.jpg";
	aktPosition[2][3] = new Image()
	aktPosition[2][3].src = "Schiebespiel/image23.jpg";

	aktPosition[3][0].src = "Schiebespiel/image30.jpg";
	aktPosition[3][1] = new Image()
	aktPosition[3][1].src = "Schiebespiel/image31.jpg";
	aktPosition[3][2] = new Image()
	aktPosition[3][2].src = "Schiebespiel/image32.jpg";
	aktPosition[3][3] = new Image()
	aktPosition[3][3].src = "Schiebespiel/image33.jpg";

	xleer = 3;  // Startpos des leeren Bildes x
	yleer = 3;  // Startpos des leeren Bildes y
	
	spielen = false;	// loesen() oder mischeln(), kein Gewinnen()
	timerid = null;		// zum loeschen der setTimeouts
	mischelZaehler = 0;	// ueberprueft die Anzahl der zufaelligen Verschieber zu Beginn
	mischelAnzahl = 200;	// Verschiebungen um das Puzzle zu mischeln
	letztesMischeln = null;	// speichert richtung des letzten Mischelvorgangs

	document.images['image' + '' + 3 + '' + 3].src = "Schiebespiel/image33.jpg";

	// Bilder (-neu) anzeigen
	for( i = 0; i < richtigePosition.length; i++ )
	{
		for( j = 0; j < richtigePosition.length; j++ )
		{
			document.images['image' + '' + i + '' + j].src = richtigePosition[i][j].src;
		}
	}

	mischelt = true;

	mischeln();
}

//---------------------------------------------------------------------------
// mischeln
//---------------------------------------------------------------------------
function mischeln()
{
	if( !spielen )
	{
		richtung = Math.floor( 4 * Math.random() );
		switch( richtung )
		{
			case 0 :
			{
				if( letztesMischeln != 2 )
				{
					check( xleer, yleer + 1, 0 )
				}
				else
					mischelZaehler--;
				
				break;
			}
			case 1 :
			{
				if( letztesMischeln != 3 )
				{
					check( xleer + 1, yleer, 1 )
				}
				else
					mischelZaehler--;
				
				break;
			}
			case 2 :
			{
				if( letztesMischeln != 0 )
				{
					check( xleer, yleer - 1, 2 )
				}
				else
					mischelZaehler--;
				
				break;
			}
			case 3 :
			{
				if( letztesMischeln != 1 )
				{
					check( xleer - 1, yleer, 3 )
				}
				else
					mischelZaehler--;
				
				break;
			}
			default : ;
		}
		
		mischelZaehler++;
	}

	if( mischelZaehler <= mischelAnzahl )
		timerid = window.setTimeout( "mischeln()", 20 );
	else
	{
		window.clearTimeout( timerid );
		spielen = true;
		mischelt = false;
	}
}

//---------------------------------------------------------------------------
// check
//---------------------------------------------------------------------------
function check( x, y, richtung )
{
	if( spielen || mischelt )
	{
		bildx = parseInt(x);
		bildy = parseInt(y);
			
		if( (0 <= bildx) && (bildx < 4) && (0 <= bildy) && (bildy < 4) ) // auf gueltige Eingaben pruefen
		{
			// nur Eingaben innerhalb des Bildes beachten -> mischeln()
		
			if( (bildx == xleer + 1) && (bildy == yleer) ) // nach rechts
			{
				letztesMischeln = richtung;
				move( xleer, yleer, bildx, bildy );
			}
			else if( (bildx == xleer - 1) && (bildy == yleer) ) // nach links
			{
				letztesMischeln = richtung;
				move( xleer, yleer, bildx, bildy );
			}
		
			else if( (bildy == yleer + 1) && (bildx == xleer) ) // nach oben
			{
				letztesMischeln = richtung;
				move( xleer, yleer, bildx, bildy );
			}
		
			else if( (bildy == yleer - 1) && (bildx == xleer) ) // nach unten
			{
				letztesMischeln = richtung;
				move( xleer, yleer, bildx, bildy );
			}
		}
	}
}

//---------------------------------------------------------------------------
// move
//---------------------------------------------------------------------------
function move( lx, ly, bx, by )
{
	// lx, ly koord des leeren Bildes
	//	alert("Leeres Bild: x: " + lx + ", y: " + ly + "\nzu tauschendes Bild: x: " + bx + ", y: " + by);

	// Bild anstelle des leeren Bildes
	document.images['image' + '' + lx + '' + ly].src = aktPosition[bx][by].src;	// Bild->leeresBild
	aktPosition[lx][ly].src = document.images['image' + '' + bx + '' + by].src;
	
	// leeres Bild an neuen Platz
	document.images['image' + '' + bx + '' + by].src = leeresBild.src;	// leeresBild->Bild
	aktPosition[bx][by].src = leeresBild.src;

	xleer = bx
	yleer = by;

	if( spielen )
		gewonnen();
}

//---------------------------------------------------------------------------
// gewonnen
//---------------------------------------------------------------------------
function gewonnen()
{
	sieg = true;

	for( i = 0; i < richtigePosition.length; i++ )
	{
		for( j = 0; j < richtigePosition.length; j++ )
		{
			if( richtigePosition[i][j].src != aktPosition[i][j].src )
			{
				sieg = false;
				break;
			}
		}
	}

	if( sieg )
	{
		document.images['image' + '' + 3 + '' + 3].src = "Schiebespiel/image33_win.jpg";

		spielen = false;
	}
}

