document.onkeydown = showkey;
window.onload = begin;

x = 1;
y = 1;
cellNum = 0;
width = 0;
height = 0;
cellsize = 0;
slantheight = 0;
slantwidth = 0;
playerleft = 0;
player = 0;

document.getElementById('solution').disabled = true;

function begin() {

  width = eval(document.getElementById('width').value);
  height = eval(document.getElementById('height').value);
  cellsize = eval(document.getElementById('cellsize').value);
  slantheight = Math.floor(cellsize/2-0.5);
  slantwidth = Math.floor(0.866*cellsize-0.6);
  playerleft = Math.floor(slantwidth-cellsize/2+0.5);
  cellsize--;
  player = document.getElementById('player');

}

function showkey(e) {

  num = (!e ? event.keyCode : e.which);

  if(num == 72) { // left = h

    temp = cellNum-1;
    if(!document.getElementById('a'+temp+'b'+cellNum) && x != 1) {
      x--;
      cellNum = temp;
      player.style.left = ((2*x-1-(y & 1))*slantwidth+playerleft) + 'px';
    }

  } else if(num == 71) { // right = g

    temp = cellNum+1;
    if(!document.getElementById('a'+cellNum+'b'+temp) && x != width) {
      x++;
      cellNum = temp;
      player.style.left = ((2*x-1-(y & 1))*slantwidth+playerleft) + 'px';
    }

  } else if(num == 89) { // up-left = y

    temp = cellNum-width-(y & 1);
    if(!document.getElementById('a'+temp+'b'+cellNum) && y != 1 && !(x == 1 && y & 1)) {
      if(y & 1) x--;
      y--;
      cellNum = temp;
      player.style.left = ((2*x-1-(y & 1))*slantwidth+playerleft) + 'px';
      player.style.top = ((slantheight+cellsize)*(y-1)+slantheight) + 'px';
    }

  } else if(num == 84) { // up-right = t

    temp = cellNum-width+1-(y & 1);
    if(!document.getElementById('a'+temp+'b'+cellNum) && y != 1 && (x != width || y & 1)) {
      if(!(y & 1)) x++;
      y--;
      cellNum = temp;
      player.style.left = ((2*x-1-(y & 1))*slantwidth+playerleft) + 'px';
      player.style.top = ((slantheight+cellsize)*(y-1)+slantheight) + 'px';
    }

  } else if(num == 78) { // down-left = n

    temp = cellNum+width-(y & 1);
    if(!document.getElementById('a'+cellNum+'b'+temp) && y != height && !(x == 1 && y & 1)) {
      if(y & 1) x--;
      y++;
      cellNum = temp;
      player.style.left = ((2*x-1-(y & 1))*slantwidth+playerleft) + 'px';
      player.style.top = ((slantheight+cellsize)*(y-1)+slantheight) + 'px';
    }

  } else if(num == 86) { // down-right = v

    temp = cellNum+width+1-(y & 1);
    if(!document.getElementById('a'+cellNum+'b'+temp) && y!= height && (x != width || y & 1)) {
      if(!(y & 1)) x++;
      y++;
      cellNum = temp;
      player.style.left = ((2*x-1-(y & 1))*slantwidth+playerleft) + 'px';
      player.style.top = ((slantheight+cellsize)*(y-1)+slantheight) + 'px';
    }

  }

}

function show() {

  document.getElementById('solution').disabled ^= true;

}

