﻿function new_win()
{
	spiel= window.open("mastermind.html","standalone","width=900,height=700,left="+(screen.width-900)/2+",top="+(screen.height-600)/2+"","menubar=no,scrollbars=no,toolbar=no");
}


var picsNames = new Array(); // in diesen Array knnen die Namen der Bilder einsetragen werden, wenn die Bilder nicht von 0 bis maxPics benannt werden sollen
var picType = ".gif";
var picPath = "pics/";
var allPics = 24; // Gesamtzahl der Bilder, aus denen die "mitspielenden" Bilder gewhlt werden
var maxPics = 5; // Anzahl der "mitspielenden" Bilder (knnen auch Farben oder Ziffern sein)
var rows = 7; // Anzahl der Reihen, aus denen das Spielfeld aufgebaut ist
var cols = 10; // Anzahl der Spalten des Spielfeldes
var secrets = 5; // Anzahl der zu erschlieenden Elemente

var hidden = new Array();
var chosen = new Array();
var black = white = 0;
var gamePics = new Array();
var setRow,setCol,chooseRow,giveUp;

function copyArray(arr)
{
	var tempArr = new Array();
	for(var i=0; i<arr.length; i++)
		tempArr[i] = arr[i];
	return tempArr;
}

function pruefen() // prft, wieviele Elemente auf den richtigen Platz gesetzt (black) und wieviele Elemente korrekt in die Auswahl gew
{
	var tempHiddenCode = copyArray(hidden);
	var tempChosenCode = copyArray(chosen);
	for(var i=0; i<tempChosenCode.length; i++)
	{
		if(tempChosenCode[i] == tempHiddenCode[i])
		{
			black++;
			tempHiddenCode[i] = 'x';
			tempChosenCode[i] = 'z';
		}
	}
	
	for(i=0;i<tempChosenCode.length;i++)
	{
		for(var j=0;j<tempHiddenCode.length;j++)
		{
			if(tempChosenCode[i] == tempHiddenCode[j])
			{
				white++;
				tempHiddenCode[j] = 'x';
				break;
			}
		}
	}
}

function shuffle(arr) // mischt einen Array mglichst gut durch und gibt diesen zur
 {
	var temp = new Array();
	var _max = (arr.length-1);
 	for (var z = 0; z < 10; z++)
  	{
  		for (var x = 0; x < arr.length; x++)
   		{
   			temp[0] = Math.floor(Math.random()*arr.length);
   			if(temp[0] > _max)
   			{
    				temp[0] = _max;
   			}
   			temp[1] = arr[temp[0]];
   			temp[2] = arr[x];
  			arr[x] = temp[1];
   			arr[temp[0]] = temp[2];
   		}
  	}
	return arr;
 }

 function chooseMasterPics() // whlt aus der angegebenen Anzahl an M?glichkeiten eine gewnschte Anzahl aus; die ausgew
{
	var numbers = new Array();
	var chosenNumbers = new Array();
	for(var i=0;i<allPics;i++)
	{
		numbers[i] = i;
	}
	numbers = shuffle(numbers);
	gamePics.length = maxPics; // der Array wird auf die bentigte L?nge reduziert, damit keine Bilder aus der vorhergehenden Spielrunde in die neue Auswahl verschleppt werden (falls dort mit mehr Bildern gespielt wurde)
	for(var x=0;x<maxPics;x++)
	{
		gamePics[x] = numbers[x];
	}
	for(var j=0;j<secrets;j++)
	{
		chosenNumbers[j] = gamePics[j];
	}
	gamePics = shuffle(gamePics);
	return chosenNumbers;
}

function initMasterGame() // erstellt das Spiel und gibt es komplett in die Tabellenzelle "gameplay" aus;
{
	hidden = chooseMasterPics();
	setRow = 0;
	setCol = 1;
	giveUp = "";
	for(j=0;j<hidden.length;j++)
		chosen[j] = 100;
	var z = 0;
	var str = '<table id="field" border="0" cellpadding="0" cellspacing="1">';
	for(var i=0;i<rows;i++)
	{
		if(i < (rows-2))
		{
			str += '<tr>';
			for(var j=0;j<cols;j++)
			{
				if(j == 0)
				{
					str += '<td class="pixCell"><img title="Aufgeben?" alt="Give up" width="40" height="40" onclick="cheat()" id="h0'+i+'" src="'+picPath+'masterBack'+picType+'"></td>';
				}
				else
				{
					str += '<td class="setCell"><img title="Bild zurücklegen" onclick="cleanPic('+i+','+j+')" width="40" height="40" id="b'+i+"_"+j+'" src="'+picPath+'spacer'+picType+'"></td>';
					z++;
				}
			}
			str += '</tr>';
		}
		else if(i < (rows-1))
		{
			str += '<tr>';
			for(var j=0;j<cols;j++)
			{
				if(j == 0)
				{
					str += '<td align="center" valign="middle" class="tableContainer"><table class="result" border="0" cellpadding="0" cellspacing="0"><tr><td><img title="Reihenfolge prüfen" alt="Check" onclick="check()" src="pics/haken.gif"></td></tr></table></td>';
				}
				else
				{
					str += '<td align="center" valign="middle" class="tableContainer"><table class="result" border="0" cellpadding="0" cellspacing="0"><tr><td class="resultCell"><img  id="p'+j+'0" width="12" height="12" src="pics/spacer.gif"></td><td class="resultCell"><img border="0" width="12" height="12" src="pics/spacer.gif"></td><td class="resultCell"><img id="p'+j+'1" width="12" height="12" src="pics/spacer.gif"></td></tr>';
					str += '<tr><td class="resultCell"><img src="pics/spacer.gif"></td><td class="resultCell"><img id="p'+j+'2" width="12" height="12" src="pics/spacer.gif"></td><td class="resultCell"><img src="pics/spacer.gif"></td></tr>';
					str += '<tr><td class="resultCell"><img id="p'+j+'3" width="12" height="12" src="pics/spacer.gif"></td><td class="resultCell"><img width="12" height="12" src="pics/spacer.gif"></td><td class="resultCell"><img id="p'+j+'4" width="12" height="12" src="pics/spacer.gif"></td></tr></table></td>';
				}
			}
			str += '</tr>';
		}
		else
		{
			str += '<tr>';
			for(var j=0;j<cols;j++)
			{
				if(j < maxPics)
					str += '<td class="pixCell" id="t'+j+'"><img onclick="setPic('+gamePics[j]+','+j+');" width="40" height="40" id="b'+i+"_"+j+'" src="'+picPath+gamePics[j]+picType+'"></td>';
				else
					str += '<td class="pixCell" id="t'+j+'"><img width="40" height="40" src="'+picPath+'spacer'+picType+'"></td>';
			}
			str += '</tr>';
		}
	}
	str += '</table>';
	document.getElementById("gameplay").innerHTML = str;
	setWeekDays();
}

function setWeekDays()
{
	for(i=1;i<6;i++)
	{
		document.getElementById("b"+(i-1)+"_"+setCol).src = picPath+"T"+i+picType;
	}
}

function rowToSet()
{
	var x = "x";
	for(i=0;i<chosen.length;i++)
	{
		if(chosen[i] == 100)
		{
			x = i;
			break;
		}
	}
	return x;
}

function setPic(n,j)
{
	if(!giveUp && setCol < cols)
	{
		if(!chooseRow)
			setRow = rowToSet();
		else
		{
			setRow = chooseRow;
			chooseRow = "";
		}
		if(setRow != "x" && chosen[setRow] != n)
		{
			document.getElementById("b"+setRow+"_"+setCol).src = picPath+n+picType;
			chosen[setRow] = n;
			document.getElementById("t"+j).innerHTML = '<img width="40" height="40" border="0" src="'+picPath+'spacer'+picType+'">';
		}
	}
}

function cleanPic(a,b)
{
	if(b == setCol && chosen[a] != 100)
	{
		var p = 0;
		for(i=0;i<gamePics.length;i++)
		{
			if(gamePics[i] == chosen[a])
			{
				p = i;
				break;
			}
		}
		document.getElementById("b"+a+"_"+b).src = picPath+'T'+(a+1)+picType;
		document.getElementById("t"+p).innerHTML = '<img onClick="setPic('+gamePics[p]+','+p+');" border="0" width="40" height="40" name="b6_"'+p+'" src="'+picPath+chosen[a]+picType+'"></td>';
		chosen[a] = 100;
	}
	else
		if(b == setCol && chosen[a] == 100)
			chooseRow = a;
}

function setBlackPins(pos,z)
{
	for(i=0;i<black;i++)
	{
		if(i == 2)
			document.getElementById('p'+setCol+i).src = picPath+'blackPin'+picType;
		else
		{
			document.getElementById('p'+setCol+i).src = picPath+'blackPin'+pos[z]+picType;
			z++;
		}
	}
	return z;
}

function setNonPic()
{
	document.getElementById('p'+setCol+2).src = picPath+'non'+picType;
}

function setWhitePins(pos,z)
{
	for(e=black;e<(black+white);e++)
	{
		if(e == 2)
			document.getElementById('p'+setCol+e).src = picPath+'whitePin'+picType;
		else
		{
			document.getElementById('p'+setCol+e).src = picPath+'whitePin'+pos[z]+picType;
			z++;
		}
	}
}

function check()
{
	var x = rowToSet();
	if(x == "x")
	{
		pruefen();
		var pos = new Array("A","B","C","D");
		var z = 0;
		if(black < 5)
		{
			if(black == 0 && white == 0) // kein Bild richtig gesetzt
				setNonPic();
			else // eine oder mehrere richtig
			{
				z = setBlackPins(pos,z);
				setWhitePins(pos,z);
			}
			setCol++;
			if(setCol == cols) // verloren
			{
				var Check = confirm("Leider nicht geschafft! Aber es ist noch kein Meister vom Himmel gefallen; deshalb versuch es gleich noch mal!\nWillst Du?")
				if(Check)
					initMasterGame();
			}
			else  // wiederauffrischen
			{
				for(j=0;j<chosen.length;j++)
					chosen[j] = 100;
				black = white = 0;
				for(p=0;p<gamePics.length;p++)
					document.getElementById("t"+p).innerHTML = '<img onClick="setPic('+gamePics[p]+','+p+');" border="0" width="40" height="40" name="b6_"'+p+'" src="'+picPath+gamePics[p]+picType+'"></td>';
				setWeekDays();
			}
		}
		else
		{
			setBlackPins(pos,z);
			alert("Gratulation!! In "+setCol+" Versuchen geschafft.");
			showHidden();
		}
	}
	else
		alert("Bitte erst alle Wochentage besetzen!");
}

function showHidden()
{
	for(i=0;i<5;i++)
	{
		document.getElementById("h0"+i).src = picPath+hidden[i]+picType;
	}
}

function cheat()
{
	showHidden();
	giveUp = true;
	var Check = confirm("OK, du hast aufgegeben, aber Übung macht den Meister! Versuch es doch gleich noch mal!\nWillst Du?")
		if(Check)
			initMasterGame();
}
