(function ($) {
	// Slideshow
	$.fn.extend({
		slideshow: function (options) {
			var settings = $.extend({
				displayFor: 4000,
				slideOnClass: 'on'
			}, options);

			var running = null;

			var slideshow = $(this);
			var slides = slideshow.find('.slide');

			slides.filter(':not(.' + settings.slideOnClass + ')').hide();

			var slideNav = $('<ul class="slide_nav"></ul>');
			for (var i = 0; i < slides.size(); i++) {
				var li = $('<li>' + (i + 1) + '</li>');
				slideNav.append(li);
				li.click(function () {
					clearTimeout(running);
					runSlideshow(slides.eq($(this).prevAll().size()));
				});
			}
			slideshow.append(slideNav);

			function runSlideshow(to) {
				to.siblings().hide();
				to.siblings().removeClass(settings.slideOnClass);

				to.show();
				to.addClass(settings.slideOnClass);

				slideNav.find('li.' + settings.slideOnClass).removeClass(settings.slideOnClass);
				slideNav.find('li').eq(slides.index(to)).addClass(settings.slideOnClass);

				clearTimeout(running);
				running = setTimeout(function () {
					var next = slides.eq((to.prevAll().size() + 1) % slides.size());
					runSlideshow(next);
				}, settings.displayFor);
			}

			slideshow.hover(function () {
				clearTimeout(running);
			}, function () {
				var current = slides.filter('.' + settings.slideOnClass);
				clearTimeout(running);
				running = setTimeout(function () {
					runSlideshow(slides.eq((current.prevAll().size() + 1) % slides.size()))
				}, settings.displayFor);
			});

			var firstSlide = slides.filter('.' + settings.slideOnClass);
			slideNav.find('li').eq(slides.index(firstSlide)).addClass(settings.slideOnClass);
			running = setTimeout(function () { runSlideshow(firstSlide.next()) }, settings.displayFor);
		}
	});
})(jQuery);
