var usedCards = new Array()
var cardNames = new Array('fotoapparat','koffer','kompass','reisefuehrer','rucksack','schuh','sonnenbrille','sonnenhut');
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 num = 0;

var cntImages = 8;
var cntCards = memwidth*memheight;
var cntPairs = cntCards/2;

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));  //random number will fall between 0-high
    //alert("hi:"+high + ", here:" + here);
    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() {
  // Spielstand auf Null setzen und Variablen initialisieren
  document.getElementById('right').value = 0;
  document.getElementById('num').value = 0;
  var openCards = 0;
  var isOpenCard = -1;
  var is2ndOpenCard = -1;

  //festlegen, welche Karten verwendet werden
  for(i=0; i<cntImages; i++) { 
	usedCards[i] = i; 
  }
  shuffleArray(usedCards,cardNames);

  
  for(i=0; i<cntPairs; i++) {
    usedCardsName[i] = cardNames[usedCards[i]];
  }

  //Karten vorladen
  for(i=0; i < cntPairs; i++) {
    if(i == 0){
		cardImages[i] = new Image();
		cardImages[i].src = "images/"+ cardNames[i] + 1 + imgext;
		j = i + 1;		
	} else {
		j = j + 1;
		cardImages[j] = new Image();
		cardImages[j].src = "images/"+ cardNames[i] + 1 + imgext;
		j = j + 1;
	}
	cardImages[j] = new Image();
	cardImages[j].src = "images/"+ cardNames[i] + 2 + imgext;
  }
  //document.write(cardImages[1].src);
  //Karten nacheinander verteilen
  //document.memoryform.status.value = "Karten zuordnen...";
  var j = 0;
  var img;
  for(i=0; i<cntCards; i++) {
    cardValues[i] = i;
    if(j >= cntPairs-1) { j=-1; }
    j++;
    // init
    checkedCards[i] = 0;
    img = document.getElementById("img_" + i);
    img.className = "card_0";
    img.title = "";
  }
  shuffleArray(cardValues);
  //document.write(cardValues);
  //closeAllUncheckedCards();

  //document.memoryform.status.value = "Los gehts.";
  document.memoryform.theTime.value = "00:00";
  //document.getElementById('restart').disabled = false;
}

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(tStart == null)
		Start();
		
  if((isOpenCard == imgId && openCards != 2) || checkedCards[imgId] == 1) {
    // nichts
    return;
  } else if(openCards == 2) {
    // Klick zum Weiterspielen
    playSound('click');
    setCardStyle(-1,0);
    openCards = 0;
    isOpenCard = -1;
    //is2ndOpenCard = -1;
    closeAllUncheckedCards();
    //document.memoryform.status.value = "Karte wählen...";
    return;
  } else if(openCards == 1) {
    // zweite Karte aufdecken
    //document.memoryform.status.value = "...";
    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]);
    }
    //openCards = 2;
    //is2ndOpenCard = imgId;
	check = false;
	if((cardValues[isOpenCard]%2) == 0){
		if((cardValues[isOpenCard]+1) == cardValues[imgId]){
			check = true;
		}
	} else {
		if((cardValues[isOpenCard]-1) == cardValues[imgId]){
			check = true;
		}
	}
	
    if(check == true) {
      // Richtig
      playSound('right');
      //document.memoryform.status.value = "Richtig. Nächste Karte wählen ...";
      val = document.getElementById('right').value;
      val++;
      document.getElementById('right').value = val;
		$.ajax({
		  url: "verify_hs.cfm",
		  cache: false,
		  success: function(mynum){
		    $("#num").attr("value",mynum.replace(/^\s*([\S ]+)\s*$/,'$1'));
		  }
		});
//	  document.getElementById('num').value =  parseInt(document.getElementById('right').value) + wrong;

      if(val == memwidth*memheight/2 && document.getElementById('num').value >= 8) {
        // gewonnen
        playSound('completed');
		Stop();
        //var pairs = memwidth*memheight/2;
        //var perc = Math.round((3*pairs-num)*100/(3*pairs-pairs));
		countSec = (min*60)+secCount;
		penalty = Math.floor(countSec/10);
//		highscore = Math.round(100000/(parseInt(document.getElementById('num').value) + penalty));
		$.ajax({
		  url: "verify_hs.cfm",
		  cache: false,
		  data: "finished=1&penalty=" + penalty,
		  success: function(mynum){
		    highscore = mynum.replace(/^\s*([\S ]+)\s*$/,'$1');
			window.location.href = "highscore.cfm";
		  }
		});
        //var perc = num * 100 / (memwidth*memheight/2);
		//document.memoryform.status.value = "Fertig!!! Dein Highscore: " + highscore;
		document.getElementById('show_link').style.display="block";
		//document.getElementById('link_schicken').setAttribute("href","../highscore.cfm?hs=" + highscore);
      }
      checkedCards[imgId] = 1;
      checkedCards[isOpenCard] = 1;

    setCardStyle(-1,0);
    openCards = 0;
    isOpenCard = -1;
    //is2ndOpenCard = -1;
    closeAllUncheckedCards();
    return;

    } else {
      playSound('wrong');
      //document.memoryform.status.value = "Falsch. Karte klicken zum Weiterspielen...";
      wrong++;
		$.ajax({
		  url: "verify_hs.cfm",
		  cache: false,
		  success: function(mynum){
		    $("#num").attr("value",mynum.replace(/^\s*([\S ]+)\s*$/,'$1'));
		  }
		});
//	  document.getElementById('num').value =  parseInt(document.getElementById('right').value) + wrong;
    }
  } else if(openCards == 0) {
    // erste Karte aufdecken
    playSound('click');
    //document.memoryform.status.value = "zweite Karte wählen...";
    //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;
	//alert(document.getElementById("img_" + imgId).src);
    isOpenCard = imgId;
    //openCards = 1;
  }
  openCards++;
}

function closeAllUncheckedCards() {
  var x = 0;
  for(i=0; i<=(memwidth*memheight-1); i++) {
    if(checkedCards[i] != 1) {
	  x = i + 1;
	  cardImageBack.src = 'images/madeira_' + x + '.jpg';
      document.getElementById("img_" + i).src = cardImageBack.src;
    }
  }
}

function generateCardTable() {
  var imgId = 0;
  var y = 1;
  document.write("<table cellspacing=\"0\" cellpadding=\"5\" border=\"0\"");
  for(i=1; i<=memheight; i++) {
    document.write("<tr>");
    for(j=1; j<=memwidth; j++) {
      //document.write("<td>" + i + ", " + j + "</td>");
	  cardImageBack.src = 'images/madeira_' + y + '.jpg';
      document.write("<td><img src=\"" + cardImageBack.src + "\" id=\"img_" + imgId + "\" width=\"" + cardwidth + "\" height=\"" + cardheight + "\" border=\"0\" onclick=\"clickCard(" + imgId + ");\" class=\"card_0\"></td>");
      imgId++;
	  y++;
    }
    document.write("</tr>");
  }
  document.write("</table>");
}

function playSound(soundname) {
  // Tja, funktioniert anscheinend nur im MSIE
  if(navigator.appName != 'Microsoft Internet Explorer') return;
  if(document.getElementById('sound_' + soundname)) document.getElementById('sound_' + soundname).play();
}

function cheat() {
  for(i=0; i<=(memwidth*memheight-1); i++) {
    if(cardNames[cardValues[i]-1]) {
      document.getElementById("img_" + i).title = cardNames[cardValues[i]-1];
    } else {
      document.getElementById("img_" + i).title = cardValues[i];
    }
  }
}

//Timer
var timerID = 0;
var tStart  = null;
var min = 0;
var sec = 0;
var secCount = 0;

function UpdateTimer() {
   if(timerID) {
      clearTimeout(timerID);
      clockID  = 0;
   }

   if(!tStart)
      tStart   = new Date();

   var   tDate = new Date();
   var   tDiff = tDate.getTime() - tStart.getTime();

   tDate.setTime(tDiff);
	
	if(tDate.getMinutes() < 10)
		min = "0"+tDate.getMinutes();
	else
		min = tDate.getMinutes();
		
	if(tDate.getSeconds() < 10)
		sec = "0"+tDate.getSeconds();
	else
		sec = tDate.getSeconds();
	
	secCount = tDate.getSeconds();
	
   document.memoryform.theTime.value = "" 
								+ min + ":" 
                                + sec;
   
   timerID = setTimeout("UpdateTimer()", 1000);
}

function Start() {
   tStart   = new Date();

   document.memoryform.theTime.value = "00:00";

   timerID  = setTimeout("UpdateTimer()", 1000);
}

function Stop() {
   if(timerID) {
      clearTimeout(timerID);
      timerID  = 0;
   }

   tStart = null;
}

function Reset() {
   tStart = null;

   document.memoryform.theTime.value = "00:00";
}


