
//---------------------------------------
// GLOBAL SCOPE VARIABLES
//---------------------------------------
var labyrinth = null;
var currentWidth   = 10;
var currentHeight  = 10;
var currentCircle  = 3;
var currentHallLen = 7;
var LEFT_LIMIT         = 160; // 20 + 40 (size of arrow)
var CENTER_LEFT_LIMIT  = 300;
var CENTER_RIGHT_LIMIT = 428;
var RIGHT_LIMIT        = 568; // 468
var isNN4 = false;
var isNN6 = false;
var isIE4 = false;
var currentArrowLayer = "";

//---------------------------------------
// MAIN - INITIAL METHOD
//---------------------------------------
function main() {
  // Set Browser version
  var appVersion = parseInt(navigator.appVersion);
  // Netscape
  if (navigator.appName == "Netscape")  {
    if (appVersion > 4) { isNN6 = true; }
    else if (appVersion == 4) isNN4 = true; 
  }
  // Microsoft
  else if (navigator.appName.indexOf("Microsoft") != -1) { 
    if (appVersion >= 4) isIE4 = true; 
  }

  showLayer("buttonsLayer");
  hideLayer("loadingMessage");
  newLabyrinth();
  captureEvents();
}
//---------------------------------------
// CLEAN UP - FINAL METHOD
//---------------------------------------
function cleanUp() {
  releaseEvents();
}

//---------------------------------------
// LAYER UTILITIES.
//---------------------------------------
function getLayer(name) {
  if (isNN6)      { return document.getElementById(name).style; } 
  else if (isNN4) { return eval("document." + name); } 
  else            { return eval("document.all." + name + ".style"); }
}
function showLayer(name) {
  if (isNN6)      { document.getElementById(name).style["visibility"] = "visible"; } 
  else if (isNN4) { eval("document." + name).visibility = "show"; }
  else            { eval("document.all." + name).style.visibility = "visible"; }
}
function hideLayer(name) {
  if (isNN6)      { document.getElementById(name).style["visibility"] = "hidden"; } 
  else if (isNN4) { eval("document." + name).visibility = "hide"; }
  else            { eval("document.all." + name).style.visibility = "hidden"; }
}

//---------------------------------------
// ACTIONS FOR MOUSE EVENTS
//---------------------------------------
function captureEvents() {
  if (isNN4 || isNN6) {
    document.captureEvents(Event.MOUSEUP | Event.MOUSEMOVE);
  }
  document.onmouseup   = MouseUp;
  document.onmousemove = MouseMove;
}
function releaseEvents() {
  if (isNN4 || isNN6) {
    document.releaseEvents(Event.MOUSEUP | Event.MOUSEMOVE);
  }
}


function MouseUp(evt) {
  var clickX;
  var clickY;
  if      (isNN4 || isNN6) { clickX = evt.pageX; clickY = evt.pageY; } 
  else if (isIE4)          { clickX = window.event.clientX; clickY = window.event.clientY; }
  if      (currentArrowLayer == "arrowLeftLayer")  { labyrinth.turnLeft();   return false; } 
  else if (currentArrowLayer == "arrowUpLayer")    { labyrinth.goForward();  return false; } 
  else if (currentArrowLayer == "arrowRightLayer") { labyrinth.turnRight();  return false; }
  return true;
}
function MouseMove(evt) {
  var newArrowLayer = "";
  var moveX;
  var moveY;
  if      (isNN4 || isNN6) { moveX = evt.pageX; moveY = evt.pageY; } 
  else if (isIE4)          { moveX = window.event.clientX; moveY = window.event.clientY; }

  // SHOW CORRESPONDING ARROW.
  if (moveX >= LEFT_LIMIT && moveX < CENTER_LEFT_LIMIT && moveY >= 60 && moveY <= 372) {
    newArrowLayer = "arrowLeftLayer";
  } 
  else if (moveX >= CENTER_LEFT_LIMIT && moveX < CENTER_RIGHT_LIMIT && moveY >= 60 && moveY <= 372) {
    newArrowLayer = "arrowUpLayer";
  } 
  else if (moveX >= CENTER_RIGHT_LIMIT && moveX < RIGHT_LIMIT && moveY >= 60 && moveY <= 372) {
    newArrowLayer = "arrowRightLayer";
  }
  if (labyrinth.curr_row >= labyrinth.n_rows && newArrowLayer != "") { 
    newArrowLayer = "arrowUpLayer"; // starting point -> only up arrow !!!
  }
  else if (labyrinth.curr_row < 0) {
    newArrowLayer = "";             // winning point -> no arrow !!!
  }
  if (newArrowLayer != currentArrowLayer) {
    if (newArrowLayer     != "") { showLayer(newArrowLayer); }
    if (currentArrowLayer != "") { hideLayer(currentArrowLayer); }
    currentArrowLayer = newArrowLayer;
  }
  // move arrow to cursor position.
  if (currentArrowLayer != "") {
    var arrowLayer = getLayer(currentArrowLayer);
    arrowLayer.top = moveY - 10;
    arrowLayer.left= moveX - 40;
  }
  return true;
}

//---------------------------------------
// ACTIONS FOR THE BUTTON LAYER
//---------------------------------------
function showLabyrinthMap() {
  var msg = "<html>";
  msg += "<body bgcolor=gold>";
  msg += "<table align=center border=0 cellpadding=0 cellspacing=0>\n<tr>";
  var colnum = 0;
  var rownum = 0;
  var currposition = 0;
  for (rownum = 0; rownum < labyrinth.n_rows; rownum++) {
    for (colnum = 0; colnum < labyrinth.n_cols; colnum++) {
      currposition = labyrinth.positions[rownum][colnum];
      if      (currposition >= 32) currposition -= 32;
      else if (currposition >= 16) currposition -= 16;
      msg += "<td><img width=19 height=19 src='./bilder/labyrint/rooms/room";
      if (rownum == labyrinth.curr_row && colnum == labyrinth.curr_col) {
        msg += "here";
      }
      msg += currposition + ".gif'></td>";
    }
    msg += "</tr>\n";
  }
  msg += "</table></body></html>"

  var width  = 19 * labyrinth.n_cols + 30;
  var height = 19 * labyrinth.n_rows + 30;
  var xpos = (screen.width  - width)  / 2;
  var ypos = (screen.height - height) / 2;
  var attr = "width=" + width + ",height=" + height;
  attr += ",screenX=" + xpos + ",screenY=" + ypos;
  attr += ",resizable";
  var labyrinthMapWindow = window.open("", "labyrinthMapWindow", attr);
  labyrinthMapWindow.document.write(msg);
  labyrinthMapWindow.document.close();
  labyrinthMapWindow.focus();
  return false;
}

function startLabyrinth() {
  labyrinth.initPosition();
  labyrinth.display();
}
function newLabyrinth() {
  if (labyrinth != null) labyrinth.close();
  labyrinth = new Labyrinth(currentWidth,currentHeight,currentHallLen,currentCircle);
  labyrinth.display();
}
function showSettings() {
  var xpos, ypos, width, height;
  width = 350; height = 250;
  xpos = (screen.width  - width)  / 2;
  ypos = (screen.height - height) / 2;
  var attr = "width=" + width + ",height=" + height;
  attr += ",screenX=" + xpos + ",screenY=" + ypos;
  window.open("script/labyrint/settingspanel.php", "settingWindow", attr);
  return false;
}
function applySettings(width, height, circles, hallslen) {
  currentWidth   = width;
  currentHeight  = height;
  currentCircle  = circles;
  currentHallLen = 7;
  newLabyrinth();
}

//---------------------------------------
// IMAGE SWAPPING
//---------------------------------------
function getFileExtension(name) {
  startPos = name.lastIndexOf('.');
  if (startPos > 0) { return name.substring(startPos+1, name.length); }
  else { return ""; }
}
function turnOn(imgName, layerName) {
  var doc;
  if (layerName && isNN4) { doc = getLayer(layerName).document; }
  else { doc = document; }
  var img = doc.images[imgName];
  img.src = "./bilder/labyrint/" + img.name + "_on." + getFileExtension(img.src);
}
function turnOff(imgName, layerName) {
  var doc;
  if (layerName && isNN4) { doc = getLayer(layerName).document; }
  else { doc = document; }
  var img = doc.images[imgName];
  img.src = "./bilder/labyrint/" + img.name + "_off." + getFileExtension(img.src);
}

