function SlideShow(destinationElement,width,height,delay,fadeTime,lightBoxMode)
{
	this.destinationElement = destinationElement;
	this.width = width;
	this.height = height;
	this.delay = delay;
	this.fadeTime = fadeTime;
	if( (this.lightBoxMode = lightBoxMode) != true )
	{
		this.lightBoxMode = false;
	}

	this.imageContainer = null;
	this.currentImageElement = null;
	this.newImageElement = null;

	this.isSetup = false;
	this.images = Array();
	this.imagesPreloader = Array();
	this.currentImage = 0;
	this.intervalTimer = null;

	this.addImage = function(imageURL,clickURL,title){
		this.images[this.images.length] = Array(imageURL,clickURL,title);
		var image = new Image();
		image.src = imageURL;
		this.imagesPreloader[this.imagesPreloader.length] = image;
		
		return this.images.length-1;
	}

	this.setup = function(){
		this.imageContainer = new Element("div");
		this.imageContainer.setStyle("position","relative");
		this.imageContainer.setStyle("display","block");
		this.imageContainer.setStyle("width",this.width);
		this.imageContainer.setStyle("height",this.height);
		this.imageContainer.setStyle("overflow","hidden");
		this.imageContainer.instance = this;
		this.imageContainer.addEvent("mouseover",function(){
			this.instance.pause();
		});
		this.imageContainer.addEvent("mouseout",function(){
			this.instance.play();
		});

		this.destinationElement.appendChild(this.imageContainer);

		this.currentImageElement = new Element("img");
		this.currentImageElement.setStyle("position","absolute");
		this.currentImageElement.setStyle("left","0px");
		this.currentImageElement.setStyle("top","0px");
		this.currentImageElement.setStyle("display","block");
		this.currentImageElement.instance = this;
		this.currentImageElement.addEvent("click",function(){
			this.instance.click();
		});

		if( this.images.length > 0 )
		{
			this.currentImageElement.src = this.images[0][0];
		}
		else
		{
			this.currentImageElement.setStyle("display","none");
		}

		this.imageContainer.appendChild(this.currentImageElement);

		this.newImageElement = new Element("img");
		this.newImageElement.setStyle("position","absolute");
		this.newImageElement.setStyle("left","0px");
		this.newImageElement.setStyle("top","0px");
		this.newImageElement.setStyle("display","none");
		this.newImageElement.setStyle("opacity","0");
		this.newImageElement.fx = new Fx.Tween(this.newImageElement,{
			duration: this.fadeTime,
			wait: false,
			onComplete: function(){
				this.slideshowInstance.currentImageElement.src = this.slideshowInstance.newImageElement.src;
				this.slideshowInstance.newImageElement.setStyle("display","none");
				this.slideshowInstance.newImageElement.setStyle("opacity","0");
			}
		});
		this.newImageElement.fx.slideshowInstance = this;
		this.imageContainer.appendChild(this.newImageElement);
		this.isSetup = true;
	}

	this.runInterval = function(){
		this.currentImage++;

		if( this.currentImage >= this.images.length )
		{
			this.currentImage = 0;
		}

		this.newImageElement.src = this.images[this.currentImage][0];
		this.newImageElement.setStyle("display","block");
		this.newImageElement.fx.start("opacity",0,1);

		if( this.images[this.currentImage][1] != "" )
		{
			this.currentImageElement.setStyle("cursor","pointer");
		}
		else
		{
			this.currentImageElement.setStyle("cursor","arrow");
		}
	}
	
	this.play = function(){
		if( this.images.length == 0 )
		{
			return;
		}
		if( this.intervalTimer == null )
		{
			this.intervalTimer = this.runInterval.periodical(this.delay,this);
		}
	}

	this.pause = function(){
		$clear(this.intervalTimer);
		this.intervalTimer = null;
	}

	this.click = function(){
		if( this.images[this.currentImage][1] != "" )
		{
			if( this.lightBoxMode == true )
			{
				// Open url as lightbox image
				var imageArray = Array();
				for( var i = 0; i < this.images.length; i++ )
				{
					imageArray[imageArray.length] = Array(this.images[i][1],this.images[i][2]);
				}

				Slimbox.open(imageArray,this.currentImage);
			}
			else
			{
				// Open url
				location.href = this.images[this.currentImage][1];
			}
		}
	}

	this.addOpener = function(element){
		element.instance = this;
		element.addEvent("click",function(){
			this.instance.click();
		});
	}
}