var picsNames = new Array(); // in diesen Array können die Namen der Bilder eingetragen werden, wenn die Bilder nicht von 0 bis maxPics-1 benannt werden
var picType = ".jpg";
var picPath = "pics/";
var backType = ".gif";
var backgroundImageType = ".jpg";
var back = new Image();
back.src = picPath+"memBack"+backType;
var back2 = new Image();
back2.src = picPath+"memBack2"+backType;
var rows = 4;
var cols = 6;
var maxBgPics = 17;
var maxPics = 23;
var bgPic = 1;
var firstPic = secondPic = "y";
var pix = new Array();
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 zurck
{
	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 initMemGame()
{
	maxPics = chooseMaxPics();
	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+'"><a href="#" onMouseOver="picOver('+z+')" onMouseOut="picOut('+z+')" onClick="turnPic('+z+');return false"><img border="0" name="b'+z+'" src="'+picPath+'memBack'+backType+'"></a></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;
	document.getElementById("field").style.backgroundImage = "url("+picPath+'bg'+bgPic+backgroundImageType+")";
	pairs = 0;
	checks = 0;
	firstPic = secondPic = "y";
}

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 zurck
{
	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<(rows*cols)/2;j++)
	{
		for(var x=0;x<2;x++)
			chosenNumbers[z++] = numbers[j];
	}
	return shuffle(chosenNumbers);
}

function picOver(x)
{
	if(x != firstPic && x != secondPic)
	{
		document.images["b"+x].src = picPath+"memBack2"+backType;
	}
}

function picOut(x)
{
	if(x != firstPic && x != secondPic) {
		document.images["b"+x].src = picPath+"memBack"+backType;
	}
}

function turnPic(x)
{
	if(!open && x != firstPic)
	{
		if(firstPic == "y")
		{
			firstPic = x;
		}
		else
		{
			secondPic = x;
			open = true;
			setTimeout("checken()",1000);
		}
		document.images["b"+x].src = picPath+pix[x]+picType;
	}
}

function checken()
{
	if(pix[firstPic] != pix[secondPic])
	{
		document.images["b"+firstPic].src = picPath+"memBack"+backType;
		document.images["b"+secondPic].src = picPath+"memBack"+backType;
	}
	else
	{
		document.getElementById("t"+firstPic).innerHTML = '<img border="0" src="'+picPath+'spacer.gif">';
		document.getElementById("t"+secondPic).innerHTML = '<img border="0" src="'+picPath+'spacer.gif">';
		pairs++;
	}
	open = false;
	firstPic = secondPic = "y";
	checks++;
	document.getElementById("result").innerHTML = "Runde:&nbsp;"+round+"&nbsp;/&nbsp;Versuche:&nbsp;"+checks+"&nbsp;/&nbsp;Paare:&nbsp;"+pairs;
	if(pairs == (pix.length/2))
	{
		document.getElementById("result").innerHTML = "Mit "+checks+" Versuchen geschafft!";
		allResults[round-1] = checks;
		round++;
		bgPic++;
		if(bgPic > maxBgPics)
		{
			bgPic = 1;
		}
	}
}

function chooseMaxPics()
{
	if(maxPics == 0)
		maxPics = rows * cols; 
	if(picsNames.length)
		maxPics = picsNames.length;
	return maxPics;
}

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!";
}
