var libraryHint;
var galleryHint;

function init()
{
  initGallery();
  initTicker();
  
	galleryHint = getElement('galleryHint');
}

// Message ticker

var ticker_delay = 60;
var ticker_pause = 250;
var message_delay = 3000;
var message = '';
var charIndex = 0;
var pause = false;
var ticker;
var messages;
var links;
var nMessages;
var messageIndex;

function initTicker()
{
  ticker = getElement('tickerLink');
  if (ticker)
  {
    ticker.href = links[messageIndex];
    refreshTicker();
  }
}

function refreshTicker()
{
  if (pause)
  {
    pause = false;
    setTimeout(refreshTicker, ticker_pause);
    return;
  }
  
  // check if we've reached the end of the message
  if (charIndex > messages[messageIndex].length)
  {
    messageIndex++;
    if (messageIndex >= nMessages)
      messageIndex = 0;
    ticker.href = links[messageIndex];
    message = '';
    charIndex = 0;
  }
  
  var str = messages[messageIndex];
  var newChar;
  var loop = false;
  
  do
  {
    newChar = str.substring(charIndex, charIndex + 1);
    charIndex++;
    if (!loop && newChar == '&') loop = true;
    if (loop && (newChar == ';' || newChar == ' ')) loop = false;
    message = message + newChar;
  } while (loop);

  ticker.innerHTML = message + (charIndex < str.length ? '_' : '');
  
  setTimeout(refreshTicker, charIndex < str.length ? ticker_delay : message_delay);
}

// Rotating image gallery
var nSlots = 1;
var image_delay = 8000;
var fade_delay = 40;
var fade_increment = 20;
var urlImage = new Array(nSlots);
var urlLink = new Array(nSlots);
var imageList = new Array(nSlots);
var categoryList = new Array(nSlots);
var imageIndex = new Array(nSlots);
var imageNames = new Array(nSlots);
var imageLinks = new Array(nSlots);
var imageSlot = new Array(nSlots);
var imageSlotLink = new Array(nSlots);
var transpImg = new Image;
var nextImage = new Array(nSlots);
var nextLink = new Array(nSlots);
var nextImageIndex = new Array(nSlots);
var opacity, i;

function initGallery()
{
  transpImg.src = '/images/transparent.gif';
  
  for (i = 0; i < nSlots; i++)
  {
    imageSlot[i] = getElement('slot' + i);
    imageSlotLink[i] = getElement('link' + i);
        
    nextImage[i] = new Image;
    setNextImage(i);
    
	  setTimeout('refreshImage(' + i + ')', image_delay * (1 + i / nSlots));
  }
}

function refreshImage(slot)
{
	if (fade(slot, -fade_increment))
  {
    setTimeout('refreshImage(' + slot + ')', fade_delay);
    return;
  }
  
  // workaround for Safari image display bug
  imageSlot[slot].src = transpImg.src;

  imageIndex[slot] = nextImageIndex[slot];
  imageSlot[slot].src = nextImage[slot].src;
  imageSlotLink[slot].href = nextLink[slot];
  
  setNextImage(slot);
  
  setTimeout('showImage(' + slot + ')', fade_delay);
  setTimeout('refreshImage(' + slot + ')', image_delay);
}

function showImage(slot)
{
  if (fade(slot, fade_increment))
  {
    setTimeout('showImage(' + slot + ')', fade_delay);
  }
}

function fade(slot, step)
{
  if (imageSlot[slot].filters)
  {
    opacity = incrementOpacity(parseInt(imageSlot[slot].filters.alpha.opacity), step, 1);
    imageSlot[slot].filters.alpha.opacity = opacity;
  }
  else if (imageSlot[slot].style.MozOpacity)
  {
    opacity = incrementOpacity(parseFloat(imageSlot[slot].style.MozOpacity), step, 100);
    imageSlot[slot].style.MozOpacity = opacity;
    opacity *= 100;
  }
  else
  {
    opacity = incrementOpacity(parseFloat(imageSlot[slot].style.opacity), step, 100);
    imageSlot[slot].style.opacity = opacity;
    opacity *= 100;
  }
  
  return (opacity > 0 && opacity < 100);
}


function incrementOpacity(opacity, step, factor)
{
  if (isNaN(opacity)) opacity = 100 / factor;
  opacity *= factor;
  opacity += step;
  if (opacity > 100) opacity = 100;
  if (opacity < 0) opacity = 0;
  return opacity / factor;
}

function setNextImage(slot)
{
  var newIndex = getNewIndex(imageIndex[slot], imageNames[slot].length);
  var imageDir = getImageDirectory(imageNames[slot][newIndex]);
  nextImageIndex[slot] = newIndex;
  nextImage[slot].src = urlImage[slot] + '/' + imageDir + '/' + imageNames[slot][newIndex] + '.jpg';
  if (imageLinks[slot][newIndex])
  	nextLink[slot] = urlLink[slot] + imageLinks[slot][newIndex];
 	else
 		nextLink[slot] = urlLink[slot] + imageNames[slot][newIndex] + '.jpg';
}
  
function getNewIndex(currentIndex, nImages)
{
  var newIndex;
  do
  {
    // choose a new image that is not already displayed
    newIndex = Math.floor(Math.random() * nImages);
    // Remeber that Math.random() can return 1
  } while (newIndex == currentIndex || newIndex == nImages)

  return newIndex;        
}
 
