/*******************************/
/*      JavaScript-Memory      */
/*           06-2003           */
/*     by Christian Eichhorn   */
/*******************************/

var warte = false;             // Intialisiert die Warteschleife
var zug = new Array(6);        // Speichert alles über den aktuellen Zug:
	zug[0] = false;                // Ist der A-Zug schon gemacht?
	zug[1] = 0;                    // Auf welche Position?
	zug[2] = new Image();          // Mit welchem Bild?
	zug[3] = false;                // Ist der B-Zug schon gemacht?
	zug[4] = 0;                    // Auf welche Position?
	zug[5] = new Image();          // Mit welchem Bild?
var rueckseite = new Image();  // Definiert die Kartenrüeckseite
rueckseite.src="gfx/memory_r.gif"; // Initialisiert die Kartenrückseite
var leer = new Image();        // Definiert ein leeres Feld
leer.src="gfx/nocard.gif";     // Initialisiert die Kartenrückseite
var bild = new Array();        // Die Bilder hinter den Spielkarten
var runde = 0;                 // Initialisiert den Rundenzähler
var treffer = 0;			   // Initialisiert den Trefferzähler
var zufall_m = 714025;         // Initialisiert die Varialblen für die Zufallsberechnung
var zufall_a=4096; 			   
var zufall_c=150889;           
g = new Date()
var zufall_start = g.getTime()%zufall_m; 

var pool = new Array(36);       // Definiert das Zufallsarray für die Karten

for (kk=0; kk<18; kk++){
	/* Initialisiert das Zufallsarray für die Karten */
	var nm = kk+18;
	pool[kk] = "gfx/memory";
	if (kk<10){pool[kk]+="0";}
	pool[kk] += kk+".gif";
	pool[nm] = "gfx/memory";
	if (kk<10){pool[nm]+="0";}
	pool[nm] += kk+".gif"; 
}

function neu(){
	/* Neustart des Spieles */
	if (confirm("Das Spiel wirklich neu starten?")){
		location.href=location.href;
		start();
	}
}

function zufall(){
	/* Berechnet eine Pseudozufallszahl auf Basis linearer Kongruenzen */
	zufall_start = (zufall_start * zufall_a + zufall_c) % zufall_m;
	return zufall_start / zufall_m;
}

function zufallsKarte(){
	/* Gibt den src eines zufälligen Bildes aus dem Memoryspiel zurück */
	var karte;
	var ort = 0;
	for (g=0; g<pool.length-1; g++){
		ort += Math.round(zufall());
	}
	karte = pool[ort];
	pool[ort] = "";
	pool.sort();
	pool.reverse();	
	pool.length--;
	return karte;
}

function berechnePosition(spalte, zeile){
	/* Wandelt die Angabe Spalte-Zeile (B3) in eine hexagonale Zahl um (13) */
	var ort;
	switch(spalte){
		case "A" : ort =  0; break;
		case "B" : ort = 10; break;
		case "C" : ort = 20; break;
		case "D" : ort = 30; break;
		case "E" : ort = 40; break;
		case "F" : ort = 50; break;
	}
	ort += zeile;
	return ort;
	return 3;
}

function berechneBildname(position){
	/* Berechnet aus der Hexagonalen Position den Bildnamen (z.B 11 => B2) */
	var x = 0;
	var y = 0;
	var nn = new String();
	if (position<10){
		x = 0;
		y = position+1;
	}
	else{
		y = (position%10)+1;
		x = position-position%10;
		x/=10;
	}
	switch(x){
		case 0 : nn = "A"; break;
		case 1 : nn = "B"; break;
		case 2 : nn = "C"; break;
		case 3 : nn = "D"; break;
		case 4 : nn = "E"; break;
		case 5 : nn = "F"; break;
	}
	nn += y;
	return nn;
}

function deckeAuf(spalte,zeile){
	/* Deckt die Karte an der speziellen Position auf */
	var position = berechnePosition(spalte, zeile); 
	var bildname = new String(spalte+(zeile+1));
	document[bildname].src = bild[position].src;
	rundenzaehler();
}

function deckeAb(){
	/* Dreht die aufgedeckten Karten wieder um */
	var bildname_1 = berechneBildname(zug[1]);
	var bildname_2 = berechneBildname(zug[4]);
	document[bildname_1].src = rueckseite.src;
	document[bildname_2].src = rueckseite.src;
	rundenzaehler();
	reset()
}

function rundenzaehler(){
	/* Aktualisiert die Runden- und Trefferzahl auf dem Bildschrim */
	zaehle(runde, "zug");
	zaehle(treffer, "hit");
	if(treffer==18){highscore()};
}

function loesche(){
	/* Löscht das ausgewählte Bildpaar von der Spielfläche */
	/* und setzt Cursor und Eventhandler ausser Kraft      */
	var bildname_1 = berechneBildname(zug[1]);
	var bildname_2 = berechneBildname(zug[4]);
	document[bildname_1].style.cursor = "default";  // Setzte Cursor auf Standart
	document[bildname_2].style.cursor = "default";	
	document[bildname_1].onclick = "";	            // Lösche Eventhandler
	document[bildname_2].onclick = "";	
	document[bildname_1].src = leer.src;	        // Lösche Bild
	document[bildname_2].src = leer.src;
	rundenzaehler();
	reset();
}

function reset(){
	/* Löscht den aktiven Zug aus dem Speicher */
	zug[0] = zug[3] = false;
	zug[1] = zug[4] = 0;
	zug[2] = zug[5] = null;
	warte = false;
}
	
function vergleicheBilder(){
	/* Vergleicht die beiden Bilder, die der Spieler aufgedeckt hat */
	if (zug[2].src==zug[5].src){
		return true;
	}
	else{
		return false;
	}
}

function ziehe(spalte, zeile){
	/* Hauptfunktion des Spieles */
	if (!warte){                  // Wärend des SetTimeout kann nicht gezogen werden
		if(!(zug[0])){
			/* A-Zug */
			runde ++;  // Erhöhe die Rundenanzahl
			zug[0] = true;
			zug[1] = berechnePosition(spalte, zeile);
			zug[2] = bild[zug[1]]; 
			deckeAuf(spalte, zeile);
		}
		else{
			if (!(zug[1] == berechnePosition(spalte, zeile))){      // 2x die selbe Karte gilt nicht
				/* B-Zug */
				zug[3] = true;
				zug[4] = berechnePosition(spalte, zeile);
				zug[5] = bild[zug[4]];
				deckeAuf(spalte, zeile);
				if (vergleicheBilder()){
					// Bilder sind gleich
					warte = setTimeout("loesche()", 1000)
					treffer ++; // Erhöhe die Trefferanzahl
				}
				else {
					// Bilder sind nicht gleich
					warte = setTimeout("deckeAb()", 1000);
				}
			}
		}
	}
}

function start(){
	/* Beim Start ausgeführt mischt diese Funktion die Spielkarten auf den Bildshirm */
	pool.sort();
	pool.reverse();
	for (ii=0; ii<6; ii++){
		for (jj=0; jj<6; jj++){
			ff = (ii*10)+jj;          // Bildet die Hexagonale Matrix : [0] = [0][0] = A1 | [55] = [5][5] = F6
			bild[ff] = new Image();
			bild[ff].src = zufallsKarte();
		}
	}
}

function highscore(){
	var highscorefeld;
	document.forms.hi.anzuege.value = runde;
	if(document.getElementById){
		highscorefeld = document.getElementById("highscore");
	}
	else{
		if(document.all){
			highscorefeld=document.all.highscore;
		}
		else{
			if(document.hi.highscore){	
				highscorefeld=document.hi.highscore;
			}
		}
	}
	highscorefeld.style.visibility = "visible";
}


























































































		
		function eintragen(){
			url="http://ki219.fernuni-hagen.de/php/eichhorn/hmein.php?";
			url+="zuege="+(((((runde+13)*7)+11)*3)-1);
			location.href=url;
		}

