var me;
var mySlideshowRef;

function Slideshow(slideshowID)
{
	this.playing = true;
  this.opacity = 50;
	this.slideshowSpeed = 4000;
	this.thumbnailList;
	this.slidesList;
	this.slideshow;
	this.thumbnails;
	this.slides;
	this.timer;
	this.thumbsTimer = 0;
	this.fadeTimer;
	this.fadeOpacity;
	this.Initialise = Initialise;
	this.Play = Play;
	this.Stop = Stop;
	this.PlayNext = PlayNext;
	this.ThumbnailHover = ThumbnailHover;
	this.thumbsScrollRight = thumbsScrollRight;
	this.thumbsScrollLeft = thumbsScrollLeft;
	this.thumbsScroll = thumbsScroll;
  this.ThumbnailClass = "noncurrent";
  this.ThumbnailHoverClass = "current";
	this.changeOpacity = changeOpacity;
	this.CrossFade = CrossFade;
	this.thumbsImageCount = 0;
	this.thumbsImageWidth = 73;
	this.thumbsScrollSpeed = 15;
	this.thumbsScrollWidth = 348;
	this.thumbsScrollIncrement = 12; // this must be a factor of thumbsScrollWidth
	this.thumbsLeftPos = 0;
	this.thumbsTargetLeftPos = 0;
	
	
	function Initialise()
	{
		mySlideshowRef = this;
		this.slideshow  = document.getElementById(slideshowID);
		this.slideshow.onmouseover = function(){mySlideshowRef.Stop()};
		this.slideshow.onmouseout = function(){mySlideshowRef.Play()};
		lists = this.slideshow.getElementsByTagName("UL");
		this.thumbnailList = lists[1];
		this.slidesList = lists[0];
		this.slides = this.slidesList.getElementsByTagName("LI");
		this.thumbnails = this.thumbnailList.getElementsByTagName("LI");
		this.thumbsImageCount = this.thumbnails.length;
		for(x=0; x < this.thumbnails.length; x++)
		{
			thumb = this.thumbnails[x];
			thumb.id = this.thumbnailList.id + x;
            
			thumb.onmouseover = function(){ clearTimeout(mySlideshowRef.fadeTimer); mySlideshowRef.ThumbnailHover(this);};
			thumb.style.cursor = 'pointer';
			if (x > 0)
			{
				this.slides[x].style.display = 'none';
				//this.changeOpacity(this.opacity,this.thumbnails[x]);
                this.thumbnails[x].className = this.ThumbnailClass;
                
			}
			else 
            {
                this.slides[x].style.display = 'block';
                this.thumbnails[x].className = this.ThumbnailHoverClass;
            }
		}
	}
	function Play()
	{
		this.playing = true;
        this.timer = setTimeout('mySlideshowRef.PlayNext()', this.slideshowSpeed);
	}

	function PlayNext()
	{
		for(x=0; x < this.slides.length; x++)
		{
				
				if (this.slides[x].style.display == 'block'){
					nextslide = ( x == this.slides.length - 1) ? 0 : x + 1;
					if(nextslide == 5) this.thumbsScrollRight();
					if(nextslide == 0) this.thumbsScrollLeft();
					this.fadeOpacity = 0;
					this.CrossFade(x,nextslide);
					return;
				}
		}
	}
	
	function Stop()
	{
		clearTimeout(this.timer);
        this.playing = false;
	}
	
	function CrossFade(fromID, toID)
	{
        if (this.fadeOpacity == 0) this.slides[toID].style.display = "block";
        
		this.fadeOpacity += 10;
		//this.changeOpacity(100, this.thumbnails[toID]);
        this.thumbnails[toID].className = this.ThumbnailHoverClass;
		//this.changeOpacity(this.opacity,this.thumbnails[fromID]);
		this.thumbnails[fromID].className = this.ThumbnailClass;
        this.changeOpacity(this.fadeOpacity, this.slides[toID])
		this.changeOpacity(100 - this.fadeOpacity, this.slides[fromID])
		if(this.fadeOpacity < 100)
		{
			this.fadeTimer = setTimeout('mySlideshowRef.CrossFade('+fromID+', '+toID+')', 100);
		}
		else
		{
			clearOpacity(this.slides[toID]);
			this.slides[fromID].style.display = "none";
			this.changeOpacity(100, this.slides[fromID]);
            if(this.playing) this.Play();
		}
	}
	
	
	function ThumbnailHover(sourceElement)
	{
        itemId = sourceElement.id.replace(this.thumbnailList.id,'');
		
		for(x=0; x < this.slides.length; x++)
		{
			clearOpacity(this.slides[x]);
			if (x == itemId)
			{
				this.slides[x].style.display = 'block'
				//this.changeOpacity(100,this.thumbnails[x])
                this.thumbnails[x].className = this.ThumbnailHoverClass;
			}
			else
			{
				this.slides[x].style.display = 'none';
				//this.changeOpacity(this.opacity,this.thumbnails[x]);
                this.thumbnails[x].className = this.ThumbnailClass;
			}
		}

	}
	
	function changeOpacity(opacity, object) { 
    object.style.opacity = (opacity / 100); 
    object.style.MozOpacity = (opacity / 100); 
    object.style.KhtmlOpacity = (opacity / 100); 
    object.style.filter = "alpha(opacity=" + opacity + ")"; 
	}	
	
	function clearOpacity(object) { 
    object.style.opacity = 100; 
    object.style.MozOpacity = 100; 
    object.style.KhtmlOpacity = 100; 
    object.style.filter = ""; 
	}
	
	
	function thumbsScrollRight()
	{
		if(this.thumbsLeftPos > -((this.thumbsImageWidth * this.thumbsImageCount) - this.thumbsScrollWidth) && this.thumbsTimer == 0 )
 		{
 			this.thumbsTargetLeftPos = this.thumbsLeftPos - this.thumbsScrollWidth;
			this.thumbsTimer = setTimeout("mySlideshowRef.thumbsScroll()", this.thumbsScrollSpeed);
		}
	}
	
	function thumbsScrollLeft()
	{
		if(this.thumbsLeftPos < 0 &&  this.thumbsTimer == 0)
		{
	 		this.thumbsTargetLeftPos = this.thumbsLeftPos + this.thumbsScrollWidth;
			this.thumbsTimer = setTimeout("mySlideshowRef.thumbsScroll()",this.thumbsScrollSpeed);
		}
	}
	
	function thumbsScroll()
	{	
	 	this.thumbsLeftPos = (this.thumbsLeftPos > this.thumbsTargetLeftPos) ? this.thumbsLeftPos - this.thumbsScrollIncrement : this.thumbsLeftPos + this.thumbsScrollIncrement;
	 	document.getElementById("thumbs").style.left = this.thumbsLeftPos+"px";
	 	if(this.thumbsLeftPos != this.thumbsTargetLeftPos)
	 	{
			this.thumbsTimer = setTimeout("mySlideshowRef.thumbsScroll()",this.thumbsScrollSpeed);
		}
		else
		{
			//clear the timer used to test if already moving
			clearTimeout(this.thumbsTimer);
			this.thumbsTimer = 0;
		}
	}
}