/* javascript for photo gallery */
var currentIndex = 0;
var stop = true;

window.onload = startup; // equivalent to onload on body element

function startup()
{
  // set handler for key presses
  document.onkeydown = keyDown;

  /* check if we should display a specific picture */
  var uri = location.href;

  // first get anchor from page location

  var i = uri.indexOf("#");

  // check if anchor is entire page

  if (i < 0)
    return 0;  // yes nothing to do

  var image = uri.substr(i+1);

  // given image name find its index
  for (i = 0; i < images.length; i++)
  {
    if (images[i] == image)
    {
      currentIndex = i;
      changeImage();
      break;
    }
  }
}

function prevIndex()
{
  if (currentIndex > 0)
    return currentIndex - 1;

  return 0;
}

function nextIndex()
{
  if (currentIndex < images.length - 1)
    return currentIndex + 1;

  return images.length - 1;
}

function setImage(id, index)
{
  var image = document.getElementById(id);
  image.src = images[index];
}

function changeImage()
{
  setImage("current", currentIndex);
  setImage("prev", prevIndex());
  setImage("next", nextIndex());
}

function first()
{
  currentIndex = 0;
  changeImage()
}

function previous()
{
  if (currentIndex > 0)
  {
    currentIndex = currentIndex - 1;
    changeImage();
  }
}

function next()
{
  if (currentIndex < images.length - 1)
  {
    currentIndex = currentIndex + 1;
    changeImage();
  }
}

function last()
{
  if (currentIndex < images.length - 1)
  {
    currentIndex = images.length - 1;
    changeImage();
  }
}

function toImage(name)
{
  var i = 0;

  for (i = 0; i < images.length; ++i)
  {
    if (images[i] == name)
    {
      currentIndex = i;
      changeImage();
      location.href="#"+name;
      scroll(0,0);
      break;
    }
  }
}

function advance()
{
  if (stop)
    return;

  if (currentIndex < images.length - 1)
  {
    currentIndex = currentIndex + 1;
    changeImage();
  }
  else
  {
    currentIndex = 0;
    changeImage()
  }

  setTimeout(advance, interval);
}

var interval = 5000;  /* 5 seconds */

function auto()
{
  stop = false;
  setTimeout(advance, interval);
}

function manual()
{
  stop = true;
}

function cancel(event)
{
  event.cancel = true;
  event.returnValue = false;
  return false;
}

//  See e.g. http://www.quirksmode.org/js/events/keys.html for keycodes
function keyDown(event)
{
    var key;

    if (!event)
      var event = window.event;

    // kludge around NS/IE differences 
    if (window.event)
       key = window.event.keyCode;
    else if (event.which)
       key = event.which;
    else
       return true; // Yikes! unknown browser

    // ignore event if key value is zero
    // as for alt on Opera and Konqueror
    if (!key)
       return true;

    // check for concurrent control/command/alt key
    // but are these only present on mouse events?

    if (event.ctrlKey || event.altKey)
       return true;

    //alert("key code = " + key);
/*
    if (key == 34) // Page Down
    {
       next();
       return cancel(event);
    }
    else if (key == 33) // Page Up
    {
       previous();
       return cancel(event);
    }
    else 
*/
    if (key == 37) // Left arrow
    {
       previous(true);
       return cancel(event);
    }
    else if (key == 39) // Right arrow
    {
       next(true);
       return cancel(event);
    }
    else if (key == 36) // Home
    {
       first();
       return cancel(event);
    }
    else if (key == 35) // End
    {
       last();
       return cancel(event);
    }

    return true;
}
