		var timeout,hsInner,hs,scrUp,scrDown,all,mailDiv,mailContent;

		function navInit(){
			hsInner = document.getElementById('innerHs');
			hs = document.getElementById('hs');
			scrUp = document.getElementById('scrollUp');
			scrDown = document.getElementById('scrollDown');
			all = document.getElementById('all');
			mailDiv = document.getElementById('mail');
		}
		function startScroll(direction){timeout = window.setInterval("scroll" + direction + "()", 100);}
		function stopScroll(){clearInterval(timeout);}
		function scrollDown(){hsInner.scrollTop += 10;}
		function scrollUp(){hsInner.scrollTop -= 10;}
		function display(elem, value){elem.style.display = value;}
		function setHeight(elem, y)
		{
			y+='';
			y = (y == 'auto') ? y : y.replace(/px/, "") + 'px';
			elem.style.height = y;
		}
		function setWidth(elem, x)
		{
			x+='';
			elem.style.width = x.replace(/px/, "") + "px";
		}
		function mail()
		{
			setWidth(mailDiv, 350);

			setHeight(mailDiv, 230);
			// IE + 10
			mailDiv.innerHTML = '<table cellpadding="3" cellspacing="0" style="margin-left:15px;margin-top:20px;"><tr>	<td>E-Mail Adresse des<br> Empf&auml;ngers</td>	<td><input type="text" id="toMail"></td></tr><tr>	<td>Ihre E-Mail Adresse</td>	<td><input type="text" id="fromMail"></td></tr><tr>	<td>Nachricht</td>	<td><textarea id="nachricht" cols="20" rows="4"></textarea></td></tr><tr>	<td colspan="2">		<input type="button" onclick="sendMail()" value="abschicken &raquo;">	</td></tr></table>';
			mailDiv.style.backgroundImage = "url(images/button_gross_mail2.gif)";
			mailDiv.style.left = "620px";
			mailDiv.style.top = "368px";
		}
		function sendMail(){
			var fromMail = document.getElementById('fromMail').value;
			var toMail = document.getElementById('toMail').value;
			var nachricht = document.getElementById('nachricht').value;

			request("sendmail", 'to=' + toMail + '&from=' + fromMail + '&nachricht=' + nachricht, null, 'mail');
		}
		function hideMailLayer()
		{
			setWidth(mailDiv, 120);
			setHeight(mailDiv, 48);
			// IE + 10
			mailDiv.innerHTML = mailContent;
			mailDiv.style.backgroundImage = "url(images/button_gross.jpg)";
			mailDiv.style.left = "850px";
			mailDiv.style.top = "550px";
		}

	var usedCards     = new Array()
	var cardNames     = new Array();
	var cardImages    = new Array();
	var cardValues    = new Array();
	var usedCardsName = new Array();
	var openCards     = 0;
	var isOpenCard    = -1;
	var is2ndOpenCard = -1;
	var checkedCards  = new Array();
	var right         = 0;
	var wrong         = 0;

	var cntImages     = 0;
	var cntCards      = memwidth*memheight;
	var cntPairs      = cntCards/2;
	var time, timeInterval;

	var m, s, pen;

	function status(value){
		document.getElementById('status').innerHTML = value;
	}
	function addPenalty()   {
				if(pen > 0)
				{
						time--;
						incTimer();
						pen--;
						window.setTimeout("addPenalty()", 50);
				}
		}
	function startTimer(){
		if(timeInterval)window.clearIntervall(timeInterval);
				time = new Date().getTime();
				time = Math.round(time/1000);
		timeInterval = window.setInterval("incTimer()", 1000);
	}
		function incTimer(){
			var ntime = new Date().getTime();
				ntime = Math.round(ntime/1000);
		var dif = ntime - time;
				timer(dif);
		}
	function timer(dif){
		s = dif%60;
		m = (dif-s)/60;
		document.getElementById("timer").innerHTML = m + ":" + (s > 9 ? s : "0" + s);
	}
	// eTracker Workaround
	function refreshtracker() {
		var src = document.getElementById('memoTracking').src;
		document.getElementById('memoTracking').src = src;
	}
	function xalert(str) {
					document.getElementById('debug').value+=str;
	}
		   function xshuffleArray(arr) {
	var high, here, swap;
	for (high=arr.length-1; high>0; high--) {
			here = Math.floor(Math.random()*(high+1));
			swap = arr[here];
			arr[here] = arr[high];
			arr[high] = swap;
			}
	}
    function shuffleArray(arr,arr2) {
		var j,swap;
		for(i=0; i<=arr.length-1; i++) {
			j=Math.floor(Math.random()*cntPairs);
			swap = arr[i];
			arr[i] = arr[j];
			arr[j] = swap;
			//shuffle 2nd array in same order
					if(arr2) {
							swap    = arr2[i];
							arr2[i] = arr2[j];
							arr2[j] = swap;
					}
		}
	}

	function init() {
	  	for(i = 0; i < cntPairs; i++){
	      cardNames.push(i);
	      usedCards[i] = i;
	    }
			startTimer();
			request("response", "init=1", "cntCards="+cntCards);
							generateCardTable();
			// Spielstand auf Null setzen und Variablen initialisieren
			var openCards     = 0;
			var isOpenCard    = -1;
			var is2ndOpenCard = -1;

			shuffleArray(usedCards,cardNames);

			for(i=0; i<cntPairs; i++) {
					usedCardsName[i] = cardNames[usedCards[i]];
			}
			//Karten vorladen
			for(i=0; i < cntPairs; i++) {
					cardImages[i]     = new Image();
					cardImages[i].src = "images/" + (usedCards[i]+1) + imgext;
			}
			//Karten nacheinander verteilen
			status("Karten zuordnen...");
			var j = 0;
			var img;
			for(i=0; i<cntCards; i++)
			{
				cardValues[i] = j;

				if(j >= cntPairs-1) {
						j=-1;
				}
				j++;
				// init
				checkedCards[i] = 0;
				img             = document.getElementById("img_" + i);
				img.className   = "card_0";
				img.title       = "";
			}
	shuffleArray(cardValues);

	//closeAllUncheckedCards();
	status("Los gehts.");
	document.getElementById('restart').disabled = false;
	} // Ende der function init()

	function setCardStyle(imgId,stat) {
			if(imgId == -1) {
					for(i=0; i<=(memwidth*memheight-1); i++) {
							if(checkedCards[i] != 1) document.getElementById("img_" + i).className = "card_" + stat;
					}
			} else {
					document.getElementById("img_" + imgId).className = "card_" + stat;
					}
	}

	function clickCard(imgId) {
			//alert(imgId);
			if((isOpenCard == imgId && openCards != 2) || checkedCards[imgId] == 1) {
					// nichts
					return;
			} else if(openCards == 2) {
					setCardStyle(-1,0);
					openCards = 0;
					isOpenCard = -1;
					//is2ndOpenCard = -1;
					closeAllUncheckedCards();

					status("Karte waehlen...");
					return;
			} else if(openCards == 1) {
											// zweite Karte aufdecken
				status("...");
				document.getElementById("img_" + imgId).className = 'card_1';
				setCardStyle(-1,1);
				try {
					document.getElementById("img_" + imgId).src = cardImages[cardValues[imgId]].src;
				} catch(e) {
					alert("imgId: "+imgId+", cardValues[imgId]: "+cardValues[imgId]);
				}

				if(cardValues[isOpenCard] == cardValues[imgId]) {
				// Richtig
					status("Richtig.<br/>Naechste Karte waehlen ...");
					right++;
					//document.getElementById('right').innerHTML = right;
					request("response", "card=" + cardValues[imgId], "r="+right);
					if(right == memwidth*memheight/2) {
							// gewonnen
							window.clearInterval(timeInterval);
							var num = right+wrong;//parseInt(document.getElementById('right').innerHTML) + parseInt(document.getElementById('wrong').innerHTML);
							var pairs = memwidth*memheight/2;
							var perc = Math.round((3*pairs-num)*100/(3*pairs-pairs));

							showSubmit();
//							window.setTimeout('location.reload()', 1500);

							//var perc = num * 100 / (memwidth*memheight/2);
							status("Fertig.<br/>" + num + " Versuche, " + perc + "%.");
					}
					checkedCards[imgId] = 1;
					checkedCards[isOpenCard] = 1;
					setCardStyle(-1,0);
					openCards = 0;
					isOpenCard = -1;
					//is2ndOpenCard = -1;
					closeAllUncheckedCards();
					return;
				} else {
							wrong++;
							document.getElementById('penalty').innerHTML = (wrong*penalty) + " Sek";
							pen = penalty;
							addPenalty();
							status("Falsch.<br/>Zum Weiterspielen klicken...");
							//document.getElementById('wrong').innerHTML = wrong;
							request("response", "card=" + cardValues[imgId], "w=" + wrong);


				}
			} else if(openCards == 0) {
					// erste Karte aufdecken
					status("zweite Karte waehlen ...");
					request("response", "card=" + cardValues[imgId], "");
					//document.getElementById("img_" + imgId).className = 'card_1';
					setCardStyle(imgId,1);
					//alert(cardValues[imgId]);
					//alert(cardImages[cardValues[imgId]]);
					document.getElementById("img_" + imgId).src = cardImages[cardValues[imgId]].src;
					isOpenCard = imgId;
					//openCards = 1;
			}
	openCards++;
	}

	function closeAllUncheckedCards() {
			for(i=0; i<=(memwidth*memheight-1); i++) {
					if(checkedCards[i] != 1) {
					document.getElementById("img_" + i).src = cardImageBack.src;
					}
			}
	}

	function generateCardTableOnStartUp(imgCnt) {
    	cntImages = imgCnt;
    	cntPairs = cntImages/2;
			var imgId = 0;
			document.write("<table cellspacing=\"0\" cellpadding=\"4\" border=\"0\" >");
			for(i=1; i<=memheight; i++) {
					document.write("<tr>");
					for(j=1; j<=memwidth; j++) {
					document.write("<td><img style=\"cursor:pointer;\" onclick=\"init()\" title=\"Memo starten\" src=\"" + cardImageBack.src + "\" width=\"" + cardwidth + "\" height=\"" + cardheight + "\" border=\"0\"></td>");
					imgId++;
					}
			document.write("</tr>");
			}
			document.write("</table>");
	}

			function generateCardTable() {
			var imgId = 0;
							var ret = "<table cellspacing=\"0\" cellpadding=\"4\" border=\"0\">";
			for(i=1; i<=memheight; i++) {
					ret += "<tr>";
					for(j=1; j<=memwidth; j++) {
					//document.write("<td>" + i + ", " + j + "</td>");
					ret += "<td><img style=\"cursor:pointer;\" src=\"" + cardImageBack.src + "\" id=\"img_" + imgId + "\" width=\"" + cardwidth + "\" height=\"" + cardheight + "\" border=\"0\" onclick=\"clickCard(" + imgId + ");  refreshtracker();\" class=\"card_0\"></td>";
					imgId++;
					}
			ret += "</tr>";
			}
			ret += "</table>";
			document.getElementById('board').innerHTML = ret;

	}


