/*******************************/
/*    JavaScript-Mastermind    */
/*           01-2004           */
/*     by Christian Eichhorn   */
/*******************************/

// Set Globals
var feld1 = 99;
var feld2 = 99;
var runde = 0; // Rundenzähler
var zufall_m = 714025;         // Initialisiert die Varialblen für die Zufallsberechnung
var zufall_a = 4096; 			   
var zufall_c = 150889;           
var zufall_start = new Date().getTime()%zufall_m; 
var compi = new Array();
var farben = new Array();
var versuch = new Array();
var antwort = new Array();

// Intialize Globals
function init(){
	for (i=0; i<3; i++){
		compi[i] = 0;
	}
	for (i=0; i<11; i++){
		for (j=0; j<4; j++){
			pos = 10*i+j;
			versuch[pos] = 0;
			antwort[pos] = 0;
		}
	}
	farben[0] = "schwarz";
	farben[1] = "weiss";
	farben[2] = "rot";
	farben[3] = "gelb";
	farben[4] = "gruen";
	farben[5] = "blau";
	farben[6] = "braun";
	farben[7] = "violett";
}

function rnd(){
	/* Berechnet eine Pseudozufallszahl (0 oder 1) auf Basis linearer Kongruenzen */
	zufall_start = (zufall_start * zufall_a + zufall_c) % zufall_m;
	return Math.round(zufall_start / zufall_m);
}

function computerzug(){
	var czug = new Array();
	var zsumme = 0;
	/* Farbenarray kopieren */
	for (i=0; i<8; i++){
		czug[i] = farben[i];
	}
	/* Zufallsfarbe ziehen */
	for (i=0; i<4; i++){
		for(j = 0; j<czug.length; j++){
			zsumme += rnd();
		}
		compi[i] = czug[zsumme];
		czug[zsumme] = "";
		czug.sort();
		czug.reverse();
		czug.length --;
		zsumme = 0; 
	}
	nulltest();
}

function nulltest(){
	/* Sollte sich doch ein "undefinded" unter den Computerzug mischen wird es hier ausgefiltert" */
	if ((compi[0]=="undefined")||(compi[1]=="undefined")||(compi[2]=="undefined")||(compi[3]=="undefined")){
		init();
		computerzug();
	}
}

function auswerten(){
	// Prüft, wie viele richtige Antworten gemacht wurden und setzt das Antwortarray entsprechend
	if (runde<10){
		var reihe = "mm"+runde;
		var schwarz=0;
		var weiss=0;
		for (hh=0; hh<4; hh++){
			for (j=0; j<4; j++){
				t = reihe;
				t += hh;
				test = getColorName(document[t]);
				if (test == compi[j]){schwarz++;}
			}
		}
		for (hh=0; hh<4; hh++){
				t = reihe;
				t += hh;
				test = getColorName(document[t]);
			if (test == compi[hh]){
				weiss++;
				schwarz--;
			}
		}
		setzeAntwort(weiss, schwarz);
		runde++;
		colorReset();
	}
	if (runde>9){
		zeigeCompi();
	}
}

function setzeAntwort(w, s){
	url = "gfx/mma_"+w+s+".gif";
	document["mma"+runde].src = url;
	document["mma"+runde].border = 1;
	if (w==4){endGame();}
	
}

function endGame(){
	alert("Sie haben das Spiel nach "+(runde+1)+" Runden gewonnen.\nHerzlichen Glückwunsch");
	runde = 99;
}

function zeigeCompi(){
	for (i=0; i<4; i++){
		document["cz"+i].src = "gfx/mm_"+compi[i]+".gif";
	}
}

function colorReset(){
	for (i=0; i<8; i++){
		document["ff"+i].src = "gfx/mm_"+farben[i]+".gif";
	}
}
	

function spielerzug(){
	versuch[10*runde+0]	= document.forms.test.zero.value;
	versuch[10*runde+1]	= document.forms.test.eins.value;
	versuch[10*runde+2]	= document.forms.test.zwei.value;
	versuch[10*runde+3]	= document.forms.test.drei.value;
	vergleiche();
	alert(runde+":"+antwort[10*runde+0]+","+antwort[10*runde+1]+","+antwort[10*runde+2]+","+antwort[10*runde+3]);
}

function main(){
	init();
	computerzug();
	colorReset();
}

function feldwahl(nummer){
	// Auswahl des aktiven Feldes
	if (runde<10){
		if (feld1==99){
			feld1="mm"+runde;
			feld1 +=nummer;
			selected(feld1);
		}
		else{
			feld2="mm"+runde;
			feld2 += nummer;
			einfaerben();
		}		
	}
}

function farbwahl(nummer){
	if (runde<10){
		if (feld1==99){
			feld1="ff"+nummer;
			selected(feld1)
		}
		else{
			feld2="ff"+nummer;
			einfaerben();
		}		
	}
}

function einfaerben(){
	// Tauscht die beiden ausgewählten Felder
	z = document[feld1].src;
	document[feld1].src=document[feld2].src
	document[feld2].src=z;
	unselected();
	feld1 = 99;
	feld2 = 99;
	istFertig();
}

function istFertig(){
	f = "mm"+runde;
	cc = true;
	for (nn=0; nn<4; nn++){
		ff = getColorName(document[f+nn]);
		if (ff == "disabled"){cc = false;}
	}
	if (cc){auswerten();}
}

function getColorName(field){
	var str = field.src;
	var cname = new String();
	var z = str.indexOf("mm_")+3;
	var zwischen;
	var url;
	for (i = z; i < str.length-4; i++){
		cname += str.charAt(i);
	}
	return cname;	
}

function selected(){
	//findet die jeweile Grafik als "selected" - Variante
	var str = document[feld1].src;
	var cname = new String();
	var z = str.indexOf("mm_")+3;
	var zwischen;
	var url;
	for (i = z; i < str.length-4; i++){
		cname += str.charAt(i);
	}
	url = "gfx/mm_"+cname+"-b.gif";
	document[feld1].src=url;
}

function unselected(){
	var str = document[feld2].src;
	var cname = new String();
	var z = str.indexOf("mm_")+3;
	var zwischen;
	var url;
	for (i = z; i < str.length-6; i++){
		cname += str.charAt(i);
	}
	url = "gfx/mm_"+cname+".gif";
	document[feld2].src=url;
}
