// Requires an onsize function

var imagePath = "/games/images/memory/";

// tile images
for (var i = 1; i <= 10; i++)
{
    eval("tile" + i + " = new Image();");
    eval("tile" + i + ".src = imagePath + subject + \"/\" + imageNames[" + (i - 1) + "] + \".gif\";");
}

// win images

win0_0 = new Image(); win0_0.src = imagePath + "win0-0.gif";
win1_0 = new Image(); win1_0.src = imagePath + "win1-0.gif";
win2_0 = new Image(); win2_0.src = imagePath + "win2-0.gif";
win0_1 = new Image(); win0_1.src = imagePath + "win0-1.gif";
win1_1 = new Image(); win1_1.src = imagePath + "win1-1.gif";
win2_1 = new Image(); win2_1.src = imagePath + "win2-1.gif";

var tilegrid = new Array();
var paused = false;
var numclicked = 0;
var clicked = new Array();
var gameover = false;
var got_count = 0;
var guesses = 0;

clicked[0] = [0,0];
clicked[1] = [0,0];

tilegrid[0] = [1,1,2,2,3];
tilegrid[1] = [4,4,5,5,3];
tilegrid[2] = [6,6,7,7,8];
tilegrid[3] = [9,9,10,10,8];

function picclick(num1,num2)
{
  if ( gameover != true )
  {
    if ( paused != true )
    {
      if ( tilegrid[num2][num1] != 0 )
      {
        tempstr = "tile" + num1 + num2;
        document[tempstr].src = eval("tile" + tilegrid[num2][num1] + ".src");
        if (numclicked == 0 )
        {
          clicked[0][0] = num1;
          clicked[0][1] = num2;
          numclicked++;
        }
        else if (numclicked == 1 && (clicked[0][0] != num1 || clicked[0][1] != num2))
        {
          clicked[1][0] = num1;
          clicked[1][1] = num2;
          incrementGuesses();
          paused = true;
          setTimeout("end_pause()", 2000);
          numclicked++;
        }
      }
    }
  }
}

function end_pause()
{
    if (( tilegrid[clicked[0][1]][clicked[0][0]] == tilegrid[clicked[1][1]][clicked[1][0]] ) &&
        ((clicked[0][1] != clicked[1][1]) || (clicked[0][0] != clicked[1][0])))
    {
        document["tile" + clicked[0][0] + clicked[0][1]].style.visibility = "hidden";
        tilegrid[clicked[0][1]][clicked[0][0]] = 0;
        document["tile" + clicked[1][0] + clicked[1][1]].style.visibility = "hidden";
        tilegrid[clicked[1][1]][clicked[1][0]] = 0;

        got_count++;
        if ( got_count == 10 )
        {
            gameover = true;
            win();
        }
    }
    else
    {
        document["tile" + clicked[0][0] + clicked[0][1]].src = imagePath + "tile_back.gif";
        document["tile" + clicked[1][0] + clicked[1][1]].src = imagePath + "tile_back.gif";
    }
    numclicked = 0;
    paused = false;
}

function incrementGuesses()
{
    guesses++;
    document.getElementById("numberOfGoes").innerHTML = "You have had " + guesses + " go" + (guesses == 1 ? "" : "es") + ".";
}

function shuffle()
{
  var toggle = false;
  var ran1 = 0;
  var ran2 = 0;
  for (var count = 1; count <= 10; count++)
  {
    for (var xcount = 1; xcount <= 2; xcount++)
    {
      toggle = false;
      while ( toggle == false )
      {
        ran1 = Math.random() * 5;
        ran1 = Math.floor(ran1);
        ran2 = Math.random() * 4;
        ran2 = Math.floor(ran2);
        if ( tilegrid[ran2][ran1] == 0 )
        {
          tilegrid[ran2][ran1] = count;
          toggle = true;
        }
      }
    }
  }
}

function win()
{
    for (var i = 0; i <= 2; i++)
    {
        for (var j = 0; j <= 1; j++)
        {
            eval("document.tile" + (i+1) + (j+1) + ".src = win" + i + "_" + j + ".src;");
            eval("document.tile" + (i+1) + (j+1) + ".alt = \"Well done!\"");
            eval("document.tile" + (i+1) + (j+1) + ".style.visibility = \"visible\"");
        }
    }
    document.getElementById("numberOfGoes").innerHTML = "You took " + guesses + " go" + (guesses == 1 ? "" : "es") + " to match all of the tiles.";
}

function firstload()
{
    if ( paused != true )
    {
        for (var count = 0; count < 4; count++ )
        {
            for (var xcount = 0; xcount < 5; xcount++)
            {
                tilegrid[count][xcount] = 0;
                document["tile" + xcount + count].src = imagePath + "tile_back.gif";
                document["tile" + xcount + count].style.visibility = "visible";
            }
        }
        gameover = false;
        got_count = 0;
        guesses = -1;
        incrementGuesses();
        shuffle();
    }
}

// Writes the HTML.
var theHTML = "<table id=\"tileGrid\">";

for (var count = 0; count < 4; count++ )
{
    theHTML += "<tr>";
    for (var xcount = 0; xcount < 5; xcount++)
    {
        theHTML += "<td><a href=\"javascript:picclick(" + xcount + "," + count + ");\"><img src=\"" + eval("tile" + tilegrid[count][xcount]).src + "\" width=\"104\" height=\"104\" name=\"tile" + xcount + count + "\" /></a></td>";
    }
    theHTML += "</tr>";
}

theHTML += "</table>";

function drawHTML(divId)
{
    document.getElementById(divId).innerHTML = theHTML;
}
