(function($){
	function initSlideshow() {
		$(".slideshow").each(function(){
			var elem = this;
			var slides = $(".slide", elem);
			var slidesContainer = $(".slides", elem);
			var navContainer = $(".slides_nav", elem);
			var curSlide = 0;
			
			var autoMode = true;
			var autoMode_autoStart = 8000;
			var autoMode_autoNext = 8000;
			var autoMode_interactionPause = 8000;
			
			if (slides.length < 2) {
				if (navContainer.length) {
					navContainer.hide();
				}
				if (slides.length > 0) {
					$(slides[0]).show().css({
						opacity:"",
						display:"block"
					});
				}
				return;
			}
			
			if (navContainer) {
				for (var i=0,n=slides.length;i<n;i++){
					navContainer.append("<a href='#' title='" + ( ($(slides[i]).attr("title") || "") ? $(slides[i]).attr("title") : i+1 ) + "' class='nav_button'>"+(i+1)+"</a>");
				}
			}
			
			for (var i=0,n=slides.length;i<n;i++) {
				if (i == curSlide) {
					$(slides[i]).css({
						display:"block",
						opacity:""
					});
					$(".nav_button:eq("+i+")",navContainer).addClass("nav_button_selected");
				} else {
					$(slides[i]).css({
						display:"none",
						opacity:""
					});
					$(".nav_button:eq("+i+")",navContainer).removeClass("nav_button_selected");
				}
				
				$(".nav_button:eq("+i+")",navContainer).bind("click", function(){
					var idx = $(".nav_button", navContainer).index(this);
					showSlide(idx, true, autoMode_interactionPause);
					this.blur();
					return false;
				});
			}
			
			function showSlide(idx, anim, nextTimeout) {
				resetAutoTimeout();
				var toHide = undefined, toShow = undefined;
				var anim = anim || false;
				
				if (idx <= 0 || idx > slides.length-1) {
					idx = 0;
				}
				
				if (idx == curSlide) return true;
				
				if (curSlide >= 0) {
					$(".nav_button:eq("+curSlide+")",navContainer).removeClass("nav_button_selected");
					toHide = $(slides[curSlide]);
					curSlide = -1;
				}
				
				if (idx >= 0 && idx < slides.length) {
					$(".nav_button:eq("+idx+")",navContainer).addClass("nav_button_selected");
					toShow = $(slides[idx]);
					curSlide = idx;
				}
				
				if (toHide) {
					if (toHide.css("display") != "none") {
						toHide.stop();
						if (anim) {
							toHide.animate({opacity:0}, {queue:false, duration:1000, complete:function(){
								$(this).css({
									display:"none",
									opacity:""
								});
							}});
						} else {
							toHide.css({
								display:"none",
								opacity:""
							});
						}
					}
				}
				
				if (toShow) {
					if (toShow.css("display") == "none") {
						toShow.css({
							display:"block",
							opacity:0
						});
					}
					toShow.stop();
					if (anim) {
						toShow.animate({opacity:1}, {queue:false, duration:1000, complete:function(){
							$(this).css({
								display:"block",
								opacity:""
							});
						}});
					} else {
						toShow.css({
							display:"block",
							opacity:""
						});
					}
				}
				
				if (anim) {
					setAutoTimeout(nextTimeout+1000, autoMode_autoNext);
				} else {
					setAutoTimeout(nextTimeout, autoMode_autoNext);
				}
			}
			
			var autoModeTimeout = 0;
			var resetAutoTimeout = function(){
				if (autoModeTimeout > 0) {
					window.clearTimeout(autoModeTimeout);
					autoModeTimeout = 0;
				}
			}
			
			var setAutoTimeout = function(timeout, nextTimeout) {
				resetAutoTimeout();
				autoModeTimeout = window.setTimeout(function(){
					showSlide(curSlide+1, true, nextTimeout);
				}, timeout);
			}
			
			if (autoMode) {
				setAutoTimeout(autoMode_autoStart, autoMode_autoNext);
			}
		});
	}
	
	$(function(){
		initSlideshow();
	});
})(jQuery);