var board = new Array();
var BOARD_WIDTH=4;
var BOARD_HEIGHT=4;
var BOARD_SIZE = (BOARD_WIDTH * BOARD_HEIGHT);
var moveTally = 0;


function boardReset()
  {
  for (i = 0; i < (BOARD_SIZE - 1); i++)
    {
    board[i] = i + 1;
    }
  board[(BOARD_SIZE - 1)] = 0;
  document.output.display.value = "Doe een Zet!";
  shuffle();
  }


function boardClear()
  {
  for (i = 0; i < (BOARD_SIZE - 1); i++)
    {
    board[i] = i + 1;
    }
  board[(BOARD_SIZE - 1)] = 0;
  }


function shuffle()
  {
  var square1;
  var square2;
  var tempNumber;
  var inversionCount = 0;
  document.output.display.value = "RESHUFFLING TILES";
  moveTally = 0;
  for (i = 0; i < 100; i++)
    {
    square1 = Math.round(parseInt(Math.random() * 15));
    square2 = Math.round(parseInt(Math.random() * 15));
    tempNumber = board[square1];
    board[square1] = board[square2];
    board[square2] = tempNumber;
    }
  for (i = 0; i < (BOARD_SIZE - 1); i++)
    {
    for (j = i + 1; j < (BOARD_SIZE - 1); j++)
      {
      if (board[i] > board[j])
        {
        inversionCount++;
        }
      }
    }
  if ((inversionCount % 2) != 0 || inversionCount == 1)
    {
    shuffle();
    }
  else displayBoard();
  }


function displayBoard()
  {
  document.output.display.value = "Doe een Zet!";
  for (var i = 0; i < (BOARD_SIZE - 1); i++)
    {
    eval("document.tile" + (i + 1) + ".src = \"" + pictures[(board[i])] + "\";");
    }
  eval("document.tile" + BOARD_SIZE + ".src = \"/system/scripts/slide_puzzle/blank.gif\";");
  }


function moveTile(tile)
  {
  if (board[tile] != 0)
    {
    var changeTile;
    var changed = 0;
    var space = 0;
    while (board[space] !=0)
      {
      space++;
      }
    if (((space&3) == (tile&3))||
    ((space&12) == (tile&12)))
      {
      var checkAbove = tile - 4;
      var checkBelow = tile + 4;
      var checkLeft = tile - 1;
      var checkRight = tile + 1;
      if (checkAbove >= 0)
        {
        if (board[checkAbove] == 0)
          {
          board[checkAbove] = board[tile];
          board[tile] = 0;
          changeTile = checkAbove;
          changed = 1;
          }
        }
      if (checkBelow < BOARD_SIZE)
        {
        if (board[checkBelow] == 0)
          {
          board[checkBelow] = board[tile];
          board[tile] = 0;
          changeTile = checkBelow;
          changed = 1;
          }
        }
      if (checkLeft >= 0)
        {
        if (board[checkLeft] == 0)
          {
          board[checkLeft] = board[tile];
          board[tile] = 0;
          changeTile = checkLeft;
          changed = 1;
          }
        }
      if (checkRight < BOARD_SIZE)
        {
        if (board[checkRight] == 0)
          {
          board[checkRight] = board[tile];
          board[tile] = 0;
          changeTile = checkRight;
          changed = 1;
          }
        }
      }
    if (changed == 1)
      {
      var winningCount = 0;
      moveTally++;
      document.output.display.value = "Aantal Zetten: " + moveTally; 
      eval("document.tile" + (tile + 1) + ".src = \"/system/scripts/slide_puzzle/blank.gif\";");
      eval("document.tile" + (changeTile + 1) + ".src = \"" + pictures[(board[changeTile])] + "\";");
      for (i = 0; i < (BOARD_SIZE - 1); i++)
        {
        if (board[i] == (i + 1))
          {
          winningCount++;
          }
        }
      if (board[BOARD_SIZE - 1] == 0)
        {
        winningCount++;
        }
      if (winningCount == BOARD_SIZE)
        {
        var finalString = "GEFELICITEERD! Je hebt de schuifpuzzel opgelost in " + moveTally + " Zetten."; 
        window.alert(finalString);
        }
      }
    }
  }
