// Browser Slide-Show script. With image cross fade effect for those browsers
// that support it.
// Script copyright (C) 2004-2010 www.cryer.co.uk.
// Script is free to use provided this copyright header is included.
var FadeDurationMS=1000;
function SetOpacity(object,opacityPct)
{
  // IE.
  object.style.filter = 'alpha(opacity=' + opacityPct + ')';
  // Old mozilla and firefox
  object.style.MozOpacity = opacityPct/100;
  // Everything else.
  object.style.opacity = opacityPct/100;
}
function ChangeOpacity(id,msDuration,msStart,fromO,toO)
{
  var element=document.getElementById(id);
  var msNow = (new Date()).getTime();
  var opacity = fromO + (toO - fromO) * (msNow - msStart) / msDuration;
  if (opacity>=100)
  {
    SetOpacity(element,100);
    element.timer = undefined;
  }
  else if (opacity<=0)
  {
    SetOpacity(element,0);
    element.timer = undefined;
  }
  else 
  {
    SetOpacity(element,opacity);
    element.timer = window.setTimeout("ChangeOpacity('" + id + "'," + msDuration + "," + msStart + "," + fromO + "," + toO + ")",10);
  }
}
function FadeInImage(foregroundID,newImage,backgroundID)
{
  var foreground=document.getElementById(foregroundID);
  if (foreground.timer) window.clearTimeout(foreground.timer);
  if (backgroundID)
  {
    var background=document.getElementById(backgroundID);
    if (background)
    {
      if (background.src)
      {
        foreground.src = background.src; 
        SetOpacity(foreground,100);
      }
      background.src = newImage;
      var startMS = (new Date()).getTime();
      foreground.timer = window.setTimeout("ChangeOpacity('" + foregroundID + "'," + FadeDurationMS + "," + startMS + ",100,0)",10);
    }
  } else {
    foreground.src = newImage;
  }
}
var slideCache = new Array();
function DoSlideShowWithLinks(pictureID,backgroundID,linkID,imageLinks,displaySecs)
{
	document.getElementById(pictureID).style.left = GetPosX(document.getElementById(backgroundID)) + 'px';
	document.getElementById(pictureID).style.top = GetPosY(document.getElementById(backgroundID)) + 'px';

	var separator = imageLinks.indexOf(";");
	var nextImage = imageLinks.substring(0,separator);
	if (slideCache[nextImage] && slideCache[nextImage].loaded)
	{
		FadeInImage(pictureID,nextImage,backgroundID);
		var futureImages= imageLinks.substring(separator+1,imageLinks.length) + ';' + nextImage;
		separator = futureImages.indexOf(";");
		var nextLink = futureImages.substring(0,separator);
		futureImages= futureImages.substring(separator+1,imageLinks.length) + ';' + nextLink;
		document.getElementById(linkID).href = nextLink;
		setTimeout("DoSlideShowWithLinks('"+pictureID+"','"+backgroundID+"','"+linkID+"','"+futureImages+"',"+displaySecs+")",
			displaySecs*1000);
		// Identify the next image to cache.
		separator = futureImages.indexOf(";");
		nextImage = futureImages.substring(0,separator);
	} else {
		setTimeout("DoSlideShowWithLinks('"+pictureID+"','"+backgroundID+"','"+linkID+"','"+imageLinks+"',"+displaySecs+")",250);
	}
	// Cache the next image to improve performance.
	if (slideCache[nextImage] == null) {
		slideCache[nextImage] = new Image;
		slideCache[nextImage].loaded = false;
		slideCache[nextImage].onload = function(){this.loaded=true};
		slideCache[nextImage].src = nextImage;
	}
}
function GetPosX(obj)
{
    var curleft = 0;
    if(obj.offsetParent)
        while(1) 
        {
          var pos;
          if (obj.currentStyle)
            pos = obj.currentStyle.position;
          else
            pos = window.getComputedStyle(obj,null).position;
          if (pos=='absolute') break;
          curleft += obj.offsetLeft;
          if(!obj.offsetParent)
            break;
          obj = obj.offsetParent;
        }
    else if(obj.x)
        curleft += obj.x;
    return curleft;
}
function GetPosY(obj)
{
    var curtop = 0;
    if(obj.offsetParent)
        while(1)
        {
          var pos;
          if (obj.currentStyle)
            pos = obj.currentStyle.position;
          else
            pos = window.getComputedStyle(obj,null).position;
          if (pos=='absolute') break;
          if (obj.style.position=="absolute") break;
          curtop += obj.offsetTop;
          if(!obj.offsetParent)
            break;
          obj = obj.offsetParent;
        }
    else if(obj.offsetTop)
        curtop += obj.offsetTop
    else if(obj.y)
        curtop += obj.y;
    return curtop;
}
function RunSlideShowWithLinks(pictureID,linkID,imageLinks,displaySecs)
{
	// Insert a background.
	var picture = document.getElementById(pictureID);
	var background = picture.cloneNode(true);
	background.ForegroundID=pictureID;
	background.id = picture.id + '.bgnd';
	picture.parentNode.insertBefore(background,picture);

	background.style.float = "none";
	background.style.position = "absolute";
	background.style.left = GetPosX(picture) + 'px';
	background.style.top = GetPosX(picture) + 'px';
	background.style.filter = 'alpha(opacity=0)';
	background.style.MozOpacity = 0;
	background.style.opacity = 0;
	DoSlideShowWithLinks(background.id,pictureID,linkID,imageLinks,displaySecs);
}

