function Slide(image, thumbnail, caption)
{
	this.image = image;
	this.thumbnail = thumbnail;
	this.caption = caption;
}

function Slideshow()
{
	this.container;
	this.mainImgContainer;
	this.thumbnailPanel;
	this.thumbnailPanelWidth;
	this.thumbnails;
	this.captionContainer;
	this.currentSlide;
	this.currentColumn;
	this.slideshowInterval;
}

function buildThumbnails()
{
	var html = "";
	var columnLimit = 8;
	var columnCount = 0;
	var objectCount = 0;
	var remainder = slides.length % columnLimit;
	var spacers = columnLimit - remainder;
	for (var i = 0; i < slides.length+spacers; i++)
	{
		var htmlObject;
		if (i < slides.length)
		{
			htmlObject = "<img src=\""+slides[i].thumbnail+"\" alt=\"\" />\n";
		}
		else
		{
			htmlObject = "<div class=\"spacer\"></div>\n";
		}
		if (objectCount == 0)
		{
			objectCount++;
			columnCount++;
			html+= 	"<div class=\"column\">\n";
			html+= 	htmlObject;
		}
		else if (objectCount == columnLimit-1)
		{
			objectCount = 0;
			html+= 	htmlObject;
			html+= 	"</div>\n";
		}
		else
		{
			objectCount++;
			html+= 	htmlObject;
		}
	}
	Slideshow.thumbnailPanel.html(html);
	Slideshow.thumbnails = $('img', Slideshow.thumbnailPanel);
	Slideshow.thumbnailPanelWidth = $('div.column', Slideshow.thumbnailPanel).width() * columnCount;
	Slideshow.thumbnailPanel.width(Slideshow.thumbnailPanelWidth);
}

function setImage(slideIndex) {
	slideshowAutoplay(false);
	Slideshow.currentSlide = slideIndex;
	slideshowAutoplay(true);
	Slideshow.mainImgContainer.html("<img src=\""+slides[slideIndex].image+"\" alt=\"\" />\n");	
	$('img', Slideshow.mainImgContainer).hide().fadeIn('normal');
	Slideshow.captionContainer.html(slides[slideIndex].caption);
	var nextColumn = setCurrentColumn(slideIndex);
	if (nextColumn != Slideshow.currentColumn)
	{
		if (nextColumn == 0)
		{
			Slideshow.thumbnailPanel.animate({left:'0px'}, 500);	
		}
		else
		{
			Slideshow.thumbnailPanel.animate({left:'-242px'}, 500);	
		}
	}
	Slideshow.currentColumn = nextColumn;
}


function setCurrentColumn(slideIndex) {
	if (slideIndex < 8)
	{
		return 0;	
	}
	else
	{
		return 1;	
	}
}

function calculateNextSlide(increment) {
	if (Slideshow.currentSlide + increment >= slides.length)
	{
		setImage(0);
		return;
	}
	if (Slideshow.currentSlide + increment < 0)
	{
		setImage(slides.length-1);
		return;
	}
	setImage(Slideshow.currentSlide + increment);
}

function slideshowEvents() {
	$('img', Slideshow.thumbnailPanel)
	.click(
		function(event) {
			var index = $('img', Slideshow.thumbnailPanel).index(this);
			setImage(index);
		}
	);
	$("a[rel='slideshowNext']")
	.click(
		function(event) {
			event.preventDefault();
			calculateNextSlide(1);
		}
	);
	$("a[rel='slideshowBack']")
	.click(
		function(event) {
			event.preventDefault();
			calculateNextSlide(-1);
		}
	);
}

function slideshowAutoplay(toggle)
{
	if (toggle == true)
	{
		Slideshow.slideshowInterval = setInterval("calculateNextSlide(1)", 7500);
	}
	else
	{
		clearInterval(Slideshow.slideshowInterval);
	}
}

function initSlideshow() {
	Slideshow.container = $('#slideshow');
	Slideshow.mainImgContainer = $('.slideshowMainImg', Slideshow.container);
	Slideshow.thumbnailPanel = $('.slideshowThumbnails', Slideshow.container);
	Slideshow.captionContainer = $('.slideshowCaption span', Slideshow.container);
	Slideshow.currentSlide = 0;
	buildThumbnails();
	slideshowEvents();
	setImage(0);
}
