function Slideshow (settings)
{
	var obj = new Object;
	obj.items 			= settings.items;	
	obj.currentImage 	= settings.currentImage == null ? -1 	: settings.currentImage;
	obj.timeout 		= 0;
	obj.playing 		= settings.playing == null 		? true 	: settings.playing;
	obj.delay 			= settings.delay == null 		? 7000 	: settings.delay;
	obj.restartdelay 	= settings.restartdelay == null ? 20000 : settings.restartdelay;

	obj.showNextImage = function (mode, obj)
	{
		isauto = true;
		if (mode == undefined || mode == null)
		{
			isauto = true;
		}
		else if (mode == "manual")
		{
			isauto = false;
		}
		if (!obj.playing && isauto) return;
		clearTimeout(obj.timeout);
	
		if (obj.items.length>1)
		{
			var nextImageIndex = obj.currentImage + 1;
			
			if (nextImageIndex < obj.items.length)
			{
				// Fade in next image
				$(obj.items[nextImageIndex]).appear({duration:.5});
				obj.currentImage = nextImageIndex;
				
				if (isauto)
				{
					// Set timeout to next image
					obj.playing = true;
					obj.timeout = setTimeout(function() { obj.showNextImage(mode,obj) }, obj.delay);
				}
			}
			else
			{
				// It's the last image, so hide all the images but the first and last
				for (var i=1; i<obj.items.length-1; i++)
				{
					$(obj.items[i]).style.display = 'none';
				}
				// Fade out the last image
				$(obj.items[obj.items.length-1]).fade({duration:.5});
				obj.currentImage = 0;
				
				if (isauto)
				{
					// Set timeout to next image
					obj.playing = true;
					obj.timeout = setTimeout(function() { obj.showNextImage(mode,obj) }, obj.delay);
				}
			}
		}
		else
		{
			$(obj.items[0]).appear({duration:.5});
		}
	};
	
	obj.showPreviousImage = function (obj)
	{
		// Stop autoplaying
		obj.playing = false;
		clearTimeout(obj.timeout);
	
		if (obj.items.length>1)
		{
		
			var nextImageIndex = obj.currentImage - 1;
			
			if (nextImageIndex > -1)
			{
				// Show previous image
				$(obj.items[nextImageIndex]).show();
				
				// Fade out current image
				$(obj.items[currentImage]).fade({duration:.5});
			
				// Set currentimage index
				obj.currentImage = nextImageIndex;
			}
			else
			{
				// It's the first image, so hide all the images but the last
				$(obj.items[obj.items.length-1]).appear({duration:.5});
				var timeout = setTimeout(function(){
					for (var i=0; i<obj.items.length-2; i++)
					{
						$(obj.items[i]).style.display = 'none';
					}
				},500);
				
				obj.currentImage = obj.items.length-1;
			}
		}
		else
		{
			$(obj.items[0]).appear({duration:.5});
		}
		// Set timeout to restart animation
		obj.timeout = setTimeout(function(){ obj.playing=true; obj.showNextImage(null,obj) },obj.restartdelay);
	};
	
	obj.showImage = function (no, obj)
	{
		// Stop autoplaying
		obj.playing = false;
		clearTimeout(obj.timeout);
		
		if (obj.currentImage == no)
		{
			// It's already visible
			return;
		}
		else if (obj.currentImage < no)
		{
			// Next photo is over
			$(obj.items[no]).appear({duration:.5});
			obj.currentImage = no;
		}
		else
		{
			// Next photo is under
			$(obj.items[no]).setStyle({'display':''});
			// Hide all between
			var nextImageIndex = no+1;
			for (var i=nextImageIndex; i<obj.currentImage; i++)
			{
				$(obj.items[i]).setStyle({'display':'none'});
			}
			// Hide current photo
			$(obj.items[currentImage]).fade({duration:.5});
			obj.currentImage = no;
		}
	
		// Set timeout to restart animation
		obj.timeout = setTimeout(function(){ obj.playing=true; obj.showNextImage(null, obj) },obj.restartdelay);
	};
	if (obj.items.length > 0) obj.showNextImage(true, obj);
	
	return obj;
}