$(window).load(function()
{
	slideshow.init();
	slideshow.stopTimer();
});

var slideshow = {
 
  // Internal variables
	slideCount: 0,
	activeSlideIndex: 0,
	timer: null,
	manualControl: true,

	init: function()
	{             
		this.setSlideCount();
		this.setFirstSlideActive();
		this.addSlideEventListeners();
		this.addControlEventListeners();
		this.startTimer();
	},
	
	setSlideCount: function()
	{
		this.slideCount = $(".slideshow .slide").length;
		this.slideCount -= 1; // 0-indexed array
		
		this.updatePagination();
	},  
	
	setFirstSlideActive: function()
	{
		var firstSlide = $(".slideshow .slide:first");
		
		firstSlide.addClass("active");
	},
	
	updatePagination: function()
	{
		$("span.current-slide").html(this.activeSlideIndex + 1);
		$("span.total-slides").html(this.slideCount + 1);
	},
	
	addSlideEventListeners: function()
	{
		var slides = $(".slideshow .slide");

		slides.each(function(i)
		{
			var slide = slides[i];
			
			$('img', slide).css('visibility', 'visible');

			$(slide).mouseenter(function(e)
			{
				slideshow.showInfo(slide);
				slideshow.stopTimer();
			});

			$(slide).mouseleave(function(e)
			{
				slideshow.hideInfo(slide);
				if (!slideshow.manualControl) slideshow.startTimer();
			});
		});
	},

	showInfo: function(slideScope)
	{
		var info =  $(".info", slideScope);

		info.css({visibility: 'visible'});
				
		if (!jQuery.browser.msie)
		{ 
			info.animate({opacity: 0.8}, 500); 	
		}
	},
	
	hideInfo: function(slideScope)
	{
		var info =  $(".info", slideScope);
		
		if (jQuery.browser.msie)
		{
			info.css({visibility: 'hidden'});
		}
		else
		{
			info.animate({opacity: 0}, 500);
		}
	},
	
	addControlEventListeners: function()
	{		
		$("a.previous-slide").click(function(e)
		{
			e.preventDefault();
			
			slideshow.manualControl = true;
			slideshow.stopTimer();
			slideshow.previousSlide();
		});

		$("a.next-slide").click(function(e)
		{
			e.preventDefault();

			slideshow.manualControl = true;			
			slideshow.stopTimer();
			slideshow.nextSlide();
		});
	},
	
	previousSlide: function()
	{
		if (this.hasMoreThanOneSlide())
		{
			this.activeSlideIndex = (this.activeSlideIndex == 0) ? this.slideCount : (this.activeSlideIndex-1);
		
			this.changeSlide();
		}
	},
	
	nextSlide: function()
	{
		if (this.hasMoreThanOneSlide())
		{
			this.activeSlideIndex = (this.activeSlideIndex == this.slideCount) ? 0 : (this.activeSlideIndex+1);
					
			this.changeSlide();
		}
	},
	
	startTimer: function()
	{
		if (this.hasMoreThanOneSlide())
		{
			this.timer = setInterval("slideshow.nextSlide()", 5000);
		}
	}, 
	
	stopTimer: function()
	{
		clearInterval(this.timer);
	},
	
	hasMoreThanOneSlide: function()
	{
		return this.slideCount > 0;
	},
	
	changeSlide: function()
	{
		var slides = $(".slideshow .slide");		
    var active = $('.slideshow .active');
		var next = $(slides[this.activeSlideIndex]);
			
		active.addClass('last-active');

    next.css({opacity: 0})
        .addClass('active')
        .animate({opacity: 1.0}, 1000, function() {
            active.removeClass('active last-active');
        }); 

		this.updatePagination(); 
	}
};
