/*-----------------------------------------------------------------------------
 File      : navigation.js
 Function  : navigate through a list of images
 Copyright : MicroCAN 2005
 Author    : Carl van Heezik (CVH)

 Revision information
-------------------------------------------------------------------------------
 Date         | Author | Version | Description
-------------------------------------------------------------------------------
 Jun 22, 2005 | CVH    | 0.00    | design
 May 31, 2006 | CVH    | 0.00    | added showFade and hideFade
-----------------------------------------------------------------------------*/

var browserCanBlend = (is_ie5_5up);
var imageNames = new Array;
var images     = new Array;
var imageIndex = 0; 
var imagePlay  = 0;  
var timerId    = 0;
var transition = "progid:DXImageTransform.Microsoft.Fade(duration=1)";

function setImages()
{
  var i, j = 0, a = setImages.arguments;
  
  stopImages();
  for (i = 0; i < a.length; i++)
  {
    if (a[i].indexOf("#") != 0)
    { 
      imageNames[j++] = a[i];
    }
  }
  updateImage(); 
}

function loadImage(i)
{
  if ((i >= 0) && (i < imageNames.length))
  {
  	if (!images[i])
  	{
  	  images[i] = new Image;
  	  images[i].src = imageNames[i];
  	}
  }
}

function loadComplete()
{
}

function firstImage()
{
  imageIndex = 0;
  updateImage();
}

function previousImage()
{
  if (--imageIndex < 0)
  {
  	imageIndex = 0;
  }
  updateImage();
}

function nextImage()
{
  if (++imageIndex >= imageNames.length)
  {
  	if (imagePlay)
  	{
  	  imageIndex = 0;
  	}
  	else
  	{
  	  imageIndex = imageNames.length - 1;
  	}
  }
  updateImage();
}

function lastImage()
{
  imageIndex = imageNames.length - 1;
  updateImage();
}

function updateImage()
{
  loadImage(imageIndex);
  loadImage(imageIndex-1);
  loadImage(imageIndex+1);
  showImage();

  changeText("imageCount", (imageIndex+1) + " / " + imageNames.length);
    
  updateNavigation();
}

function showImage()
{
  if (!images[imageIndex] || !images[imageIndex].complete)
  {
	if (timerId)
	{
	  clearTimeout(timerId);
	  timerId = 0;
	}
  	timerId = setTimeout("showImage()", 500);
  }
  else
  {
	
    var slide = document.images.slide;
    
    if (browserCanBlend)
    {
      slide.style.filter = transition;
      slide.filters[0].Apply();
      slide.src    = images[imageIndex].src;
      slide.filters[0].Play();
    }
    else
    {
      slide.src = images[imageIndex].src;
    }
     slide.width  = images[imageIndex].width;
     slide.height = images[imageIndex].height;
  }
}

function playImages()
{
  stopImages();
  imagePlay = setInterval("nextImage()", 3000); 
  updateNavigation();
}

function stopImages()
{
  if (imagePlay)
  {
    clearInterval(imagePlay);
    imagePlay = 0;
    updateNavigation();
  }
}

function updateNavigation()
{
  var d = document;
  
  if (imagePlay)
  {
    setOpacity(d.firstButton, 15);
    setOpacity(d.previousButton, 15);
    setOpacity(d.nextButton, 15);
	setOpacity(d.lastButton, 15);
	setOpacity(d.playButton, 15); 
	setOpacity(d.stopButton, 100); 
  }
  else
  {
	if (imageIndex == 0)
	{
	  setOpacity(d.firstButton, 15);
	  setOpacity(d.previousButton, 15);
	}
	else
	{
	  setOpacity(d.firstButton, 100);
	  setOpacity(d.previousButton, 100);
	}  
	if (imageIndex >= imageNames.length-1)
	{
	  setOpacity(d.nextButton, 15);
	  setOpacity(d.lastButton, 15);
	}
	else
	{
	  setOpacity(d.nextButton, 100);
	  setOpacity(d.lastButton, 100);
	} 
	setOpacity(d.playButton, 100); 
	setOpacity(d.stopButton, 15); 
  }
}

function setOpacity(img, opacity)
{
  if (opacity > 100)
  {
    opacity = 100;
  }
  if (opacity <= 0)
  {
    opacity = 0;
    img.style.visibility = 'hidden';
  }
  img.opacity = opacity;
  if ("filters" in img)
  {
    img.filters.alpha.opacity = opacity;
  }
  else if (typeof img.style.opacity == "string")
  {
    /* bug in Netscape maximum 99 */
    if (opacity > 99)
    {
      opacity = 99;
    }
    img.style.opacity = opacity / 100.0;
  }
  else if (typeof img.style.MozOpacity == "string")
  {
    img.style.MozOpacity  = opacity / 100.0;
  }
}

function fadeIn(imgName)
{
  var img = document.images[imgName];

  if (img.opacity < 100)
  {
    img.opacity += 5;
  }
  else 
  {
    img.opacity = 100;
    if (img.fadeIn)
    {
      clearInterval(img.fadeIn);
    }
  }
  setOpacity(img, img.opacity);
}

function fadeOut(imgName)
{
  var img = document.images[imgName];

  if (img.opacity > 0)
  {
    img.opacity -= 5;
  }
  else 
  {
    if (img.fadeOut)
    {
      clearInterval(img.fadeOut);
    }
  }
  setOpacity(img, img.opacity);
}

function crossFade(img0, img1)
{
  if (img0.fadeIn);
  {
    clearInterval(img0.fadeIn);
  }
  if (img0.fadeOut);
  {
    clearInterval(img0.fadeOut);
  }
  
  if (img1.fadeIn);
  {
    clearInterval(img1.fadeIn);
  }
  if (img1.fadeOut);
  {
    clearInterval(img1.fadeOut);
  }
  img0.style.zIndex = 1;
  img1.style.zIndex = 2;
  img0.style.visibility = 'visible';
  img1.style.visibility = 'visible';
  
  img0.fadeOut = setInterval("fadeOut(\""+img0.name+"\")",10);
  img1.fadeIn = setInterval("fadeIn(\""+img1.name+"\")",10); 
}

function showFade(img)
{
  if (img.fadeIn);
  {
    clearInterval(img.fadeIn);
  }
  if (img.fadeOut);
  {
    clearInterval(img.fadeOut);
  }  
  img.fadeIn = setInterval("fadeIn(\""+img.name+"\")",10); 
}

function changeText(id, text) 
{
  element = document.getElementById(id);
  element.innerHTML = text;
}
