var picsNames = new Array(); // in diesen Array können die Namen der Bilder eingetragen werden, wenn die Bilder nicht von 0 bis maxPics/2 benannt werden sollen
var picType = ".gif";
var picPath = "pics/";
var bgType = ".jpg";
var back = new Image();
back.src = picPath+"memBack"+picType;
var back2 = new Image();
back2.src = picPath+"memBack2"+picType;
var rows = 4;
var cols = 6;
maxBgPics = 14;
var bgPic = 1;
var maxPics = 0;
var firstPic = secondPic = "y";
var pix;
var open = false;
var round = 1;
var checks = 0;
var pairs = 0;
var allResults = new Array();
var preloadImages = new Array();

function shuffle(arr) // mischt einen Array möglichst gut durch und gibt diesen zurück
 {
	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 chooseMemPics() // wählt aus der Gesamtzahl der Bilder, die für das Spiel vorgesehen wurden, die notwendige Anzahl aus, verdoppelt sie, mischt sie und gibt sie zurück
{
	var numbers = new Array();
	var chosenNumbers = new Array();
	var z = 0;
	for(var i=0;i<maxPics;i++)
	{
		numbers[i] = i;
		preloadImages[i] = new Image();
		preloadImages[i].src = picPath+i+picType;
	}
	numbers = shuffle(numbers);
	for(var j=0;j<(maxPics/2);j++)
	{
			chosenNumbers[j] = numbers[j];
	}
	for(var y=0;y<chosenNumbers.length;y++)
	{
		for(var x=0;x<2;x++)
			numbers[z++] = chosenNumbers[y];
	}
	return shuffle(numbers);
}

function picOver(x)
{
	if(x != firstPic && x != secondPic)
	{
		document.images["e"+x].src = picPath+"memBack2"+picType;
	}
}

function picOut(x)
{
	if(x != firstPic && x != secondPic) {
		document.images["e"+x].src = picPath+"memBack"+picType;
	}
}

function turnPic(x)
{
	if(!open && x != firstPic)
	{
		if(firstPic == "y")
		{
			firstPic = x;
		}
		else
		{
			secondPic = x;
			open = true;
			setTimeout("checken()",1000);
		}
		document.images["e"+x].src = picPath+pix[x]+picType;
	}
}

function checken()
{
	if(pix[firstPic] != pix[secondPic])
	{
		document.images["e"+firstPic].src = picPath+"memBack"+picType;
		document.images["e"+secondPic].src = picPath+"memBack"+picType;
	}
	else
	{
		document.getElementById("t"+firstPic).innerHTML = '<img border="0" src="'+picPath+'spacer'+picType+'">';
		document.getElementById("t"+secondPic).innerHTML = '<img border="0" src="'+picPath+'spacer'+picType+'">';
		pairs++;
	}
	open = false;
	firstPic = secondPic = "y";
	checks++;
	document.getElementById("result").innerHTML = "Runde: "+round+"<br />Versuche: "+checks+"<br />Paare: "+pairs;
	if(pairs == Math.ceil(maxPics/2))
	{
		document.getElementById("result").innerHTML = "Mit "+checks+" Versuchen geschafft!";
		allResults[round-1] = checks;
		round++;
	}
}

function initMemGame()
{
	maxPics = rows * cols; // Anzahl der Bilder, die bei Memory mitspielen sollen
	if(picsNames.length)
		maxPics = picsNames.length;
	if((maxPics%2) == 1)
		alert("Bitte eine durch 2 teilbare Zahl einsetzen bzw. eine entsprechende Anzahl Bilder angeben!");
	document.getElementById("result").innerHTML = "";
	pix = chooseMemPics();
	var z = 0;
	var str = '<table id="field" border="0" cellpadding="0" cellspacing="0">';
	for(var i=0;i<((2*rows)-1);i++)
	{
		if(i%2 == 0)
		{
			str += '<tr>';
			for(var j=0;j<((2*cols)-1);j++)
			{
				if(j%2 == 0)
				{
					str += '<td class="pixCell" id="t'+z+'"><img onMouseOver="picOver('+z+')" onMouseOut="picOut('+z+')" onClick="turnPic('+z+');return false" border="0" name="e'+z+'" src="'+picPath+'memBack'+picType+'"></td>';
					z++;
				}
				else
				{
					str += '<td class="spaceCell"><img border="0" src="'+picPath+'spacer.gif"></td>';
				}
			}
			str += '</tr>';
		}
		else
			str += '<tr><td colspan="'+((2*cols)-1)+'" class="hCell"><img border="0" src="'+picPath+'spacer.gif"></td></tr>';
	}
	str += '</table>';
	document.getElementById("gameplay").innerHTML = str;
	bgPic++;
	if(bgPic > maxBgPics)
		bgPic = 1;
	document.getElementById("field").style.backgroundImage = "url("+picPath+'bg'+round+bgType+")";
	pairs = 0;
	checks = 0;
	firstPic = secondPic = "y";
}

function showAllResults()
{
	var str = "";
	if(allResults.length)
	{
		for(var i=0;i<allResults.length;i++)
			str += allResults[i]+",&nbsp;";
		document.getElementById("resultsToday").innerHTML = str.substr(0,str.length-7)+" Versuche";
	}
	else
		document.getElementById("resultsToday").innerHTML = "Erst mal ein Spiel zu Ende bringen!";
}