// JavaScript Document
function isInArrayCount(arrayName, valueName){
	var countTimes = 0;
	for(var a=0; a<arrayName.length; a++){
		if(arrayName[a] == valueName)
		   countTimes++;
	}
	return countTimes;
}
var startTime;
var endTime; 
var imgarr = new Array();
var cardback = new Image();
cardback.src = "images/cardback.jpg";


imgarr[0] = "images/armoutbee.jpg";
imgarr[1] = "images/peacebee.jpg";
imgarr[2] = "images/beehive.jpg";
imgarr[3] = "images/sb.jpg";
imgarr[4] = "images/superbowl.jpg";
imgarr[5] = "images/honey.jpg";
imgarr[6] = "images/pin.jpg";
imgarr[7] = "images/wimpy.jpg";

var hiddenImg = new Array();
var numCheck = new Array();
var foundCards = new Array();
for(var i=0; i<=15; i++) {
  assignSrc(i);
}
function assignSrc(i){
  var randNum; 	
  randNum = Math.floor(Math.random()*8);
  if(isInArrayCount(numCheck, randNum)<2){
    numCheck[i] = randNum;
	hiddenImg[i] = new Image();
	hiddenImg[i].src = imgarr[randNum];
  }
  else
    assignSrc(i);
}
function changeImg(imageSrc, id) {
  if (document.images)
  {
      var target=0; 
      if (document.getElementById(id))
        target=document.getElementById(id);
	   
      // make sure target is valid.  It might not be valid
      //   if the page has not finished loading
      if (target)
      {	changeOpac(0, id);		
        target.src=imageSrc;
		opacity(id,0, 100, 500);	
        
      }
  } 	
}
var cardsTurned = 0;
var turnedId = new Array();
var setsFound = 0;
var totalMoves = 0;
var readyToGo = false;
var totaltime = new Array();
var TimeTot = 0;

function startGame(){
	document.getElementById("gameInfoDiv").innerHTML = "<h3>Welcome</h3><p>To win, find all the pairs of matching cards.</p> ";
	document.getElementById("gameControl").innerHTML = "<a href=\"#\" onclick=\"playAgain(); return false;\">Restart</a>";
	
	for(var i=0;i<=15;i++) {
       if (document.images)
       {
         var target=0; 
         if (document.getElementById(i))
            target=document.getElementById(i);
	   
         if (target)
         {			
           target.src=hiddenImg[i].src;	
         }
       } 	
	}
	setTimeout("hideCards();", 2000);
}

function hideCards() {
	for(var i=0;i<=15;i++) {
       if (document.images)
       {
         var target=0; 
         if (document.getElementById(i))
            target=document.getElementById(i);
	   
         if (target)
         {			
           target.src=cardback.src;	
         }
       } 	
	}
	startTime = returnTime();
	readyToGo = true;	
}

function turnCard(id) {
	if((turnedId[0] != id) && (isInArrayCount(foundCards, id) == 0) && (readyToGo == true)) {
		totalMoves++;
		readyToGo = false;
	document.getElementById("gameInfoDiv").innerHTML = "<p>&nbsp;</p>";
	changeImg(hiddenImg[id].src, id);
	cardsTurned++;
	if(cardsTurned == 1){
		turnedId[0] = id;
		readyToGo = true;
	}
	if(cardsTurned == 2){
		turnedId[1] = id;
		
		if(document.getElementById(turnedId[0]).src != document.getElementById(turnedId[1]).src) {
			document.getElementById("gameInfoDiv").innerHTML = "<h3>Sorry these cards don't match.</h3>";
			setTimeout('wrongCard('+turnedId[0]+', '+turnedId[1]+')', 1000);	
			
		}
		else {
			readyToGo = true;
		  document.getElementById("gameInfoDiv").innerHTML = "<h3>Well done you've found two matching cards.</h3>";
		  foundCards[(setsFound*2)] = turnedId[0];
		  foundCards[(setsFound*2)+1] = turnedId[1];
		  setsFound++;
			if(setsFound == 8) {
				totalMoves = totalMoves / 2;
				endTime = returnTime();
			  calcTime(startTime, endTime);
			  document.getElementById("gameInfoDiv").innerHTML = "<h3>Congratulations</h3> <p>You found all the pairs in "+totaltime[0]+" minutes and "+totaltime[1]+" seconds with "+totalMoves+" tries!<br /> Enter your initials (3 letters):</p><form name=\"form1\"><input name=\"name\" id=\"name\" type=\"text\" maxlength=\"3\"/></form><a href=\"\" onclick=\"sendValue(totalMoves, TimeTot); return false;\">Submit score</a><br /><a href=\"#\" onclick=\"playAgain(); return false;\">Play Again</a>";
			  document.getElementById("gameControl").innerHTML = "";
			  
			  
			}
	    }
		cardsTurned = 0;
	} 	
  }	
}

function calcTime(time1, time2) {
	var total = time2-time1;
	total = Math.floor(total/1000);
	var minutes = Math.floor(total / 60);
	var seconds = total - (minutes *60);
	totaltime[0] = minutes;
	totaltime[1] = seconds;
	TimeTot = totaltime[0] + ":" + totaltime[1];
	
}

function returnTime() {
	var currentTime = new Date();
	var timeHolder = currentTime.getTime();	
	return timeHolder;
}

function wrongCard(id1,id2) {	
	document.getElementById(id1).src = cardback.src;
	document.getElementById(id2).src = cardback.src;
	readyToGo = true; 	
}

function playAgain(){
turnedId = new Array();
readyToGo = false;
hiddenImg = new Array();
numCheck = new Array();
foundCards = new Array();
for(var i=0; i<=15; i++) {
  document.getElementById(i).src = cardback.src;
}
setsFound = 0;
cardsTurned = 0;
totalMoves = 0;

for(var i=0; i<=15; i++) {
  assignSrc(i);
}
document.getElementById("gameInfoDiv").innerHTML = "<h3>Welcome. To win, find all the pairs of matching cards. </h3><a href=\"\" onclick=\"startGame(); return false;\">Click to begin</a>";
document.getElementById("gameControl").innerHTML = "";
}

function opacity(id, opacStart, opacEnd, millisec) { 
    //speed for each frame 
    var speed = Math.round(millisec / 100); 
    var timer = 0; 

    //determine the direction for the blending, if start and end are the same nothing happens 
    if(opacStart > opacEnd) { 
        for(i = opacStart; i >= opacEnd; i--) { 
            setTimeout("changeOpac(" + i + ",'" + id + "')",(timer * speed)); 
            timer++; 
        } 
    } else if(opacStart < opacEnd) { 
        for(i = opacStart; i <= opacEnd; i++) 
            { 
            setTimeout("changeOpac(" + i + ",'" + id + "')",(timer * speed)); 
            timer++; 
        } 
    } 
} 

//change the opacity for different browsers 
function changeOpac(opacity, id) { 
    var object = document.getElementById(id).style; 
    object.opacity = (opacity / 100); 
    object.MozOpacity = (opacity / 100); 
    object.KhtmlOpacity = (opacity / 100); 
    object.filter = "alpha(opacity=" + opacity + ")";
}


var xmlhttp;
var timerID = 0;

function sendValue(scoreSend, timeSend) {
	sendData(scoreSend, timeSend);
	getData();
	document.getElementById("gameInfoDiv").innerHTML = "<a href=\"\" onclick=\"playAgain(); return false;\">Click to play again</a>";
	
	
}
function sendData(scoreSend, timeSend)
{
	var nameSend = document.forms['form1'].elements['name'].value;
xmlhttp=GetXmlHttpObject();
if (xmlhttp==null)
  {
  alert ("Your browser does not support XMLHTTP!");
  return;
  }
var url="score.php";
url=url+"?score="+scoreSend+"&time="+timeSend+"&name="+nameSend;
xmlhttp.onreadystatechange=stateChanged;
xmlhttp.open("GET",url,true);
xmlhttp.send(null);
}

function stateChanged()
{
if (xmlhttp.readyState==4)
  {
  
  }
}

function GetXmlHttpObject()
{
if (window.XMLHttpRequest)
  {
  // code for IE7+, Firefox, Chrome, Opera, Safari
  return new XMLHttpRequest();
  }
if (window.ActiveXObject)
  {
  // code for IE6, IE5
  return new ActiveXObject("Microsoft.XMLHTTP");
  }
return null;
}