(function($) {
	$.fn.slideShow = function(options) {
		var defaults= {
				duration: 5000,
				effect_duration: 80,
				image_button_on: 'images/button_on.png',
				image_button_off:'images/button_off.png',
				image_button_height: 15
			};
		var options = $.extend(defaults, options || {});
		
		var slideShow = this;
		var container = $("ul:first", slideShow)
			.css({'padding': '0 0'
				,'margin': '0 0'
				, 'list-style-type':'none'});
		var slides = $("li", container);
		var current = 0;
		var looper;

		//resequence with random order.
		slides.each(function(index, value){
			var newIndex = parseInt(Math.random() * slides.length);
			var o = $(value).html();
			
			$(value).html($(slides.get(newIndex)).html());
			$(slides.get(newIndex)).html(o);
		});
		
		function showSlide(n) {
			var active = $(".active", container).removeClass("active").fadeOut(options.effect_duration / 2);
			$(slides.get(n)).addClass("active").fadeIn(options.effect_duration / 2);
			setCurrent(n);
		}

		function animate(n) {
			showSlide(n);
			looper = setTimeout(function() {animate((parseInt(n) + 1) % slides.length )}, options.duration);
		}

		function setCurrent(n) {
			var controls = $('#slideControl ul', slideShow);
			
			$('img', controls).attr('src',options.image_button_off);
			$($('img', controls).get(n)).attr('src',options.image_button_on);
		}
		
		slides.css({'position' : 'absolute'}).hide();
		
		$(document.createElement('div'))
				.attr('id', 'slideControl')
				.css({'z-index':'1000',
					'display':'none',
					'position':'relative',
					'margin-left': '5px'
					})
				.insertAfter(container);
		
		$('#slideControl', slideShow).css('top', function(){return slideShow.height() - options.image_button_height});
		$('#slideControl', slideShow).append(
				$(document.createElement('ul'))
					.css({'list-style-type':'none'
						}));
		
		var controlContainer = $('#slideControl ul', slideShow);
		
		for (i = 0; i < slides.length; i++) {
			var control = $(document.createElement('li'))
					.css({'float':'left'})
					.append($(document.createElement('a')).attr({'href':'javascript:void()', 'rel': i})
								.append($(document.createElement('img')).attr({'src':'images/button_off.png'})));
					
			$('a', control).click(function() {
				var index = $(this).attr('rel');
				clearTimeout(looper);
				showSlide(index);
				looper =  setTimeout(function() {animate((parseInt(index) + 1) % slides.length )}, options.duration);
				return false;
			});
			controlContainer.append(control);
		}
		
		slideShow.mouseenter(function(){
			$('#slideControl').fadeIn(options.effect_duration);
		});
		slideShow.mouseleave(function(){
			$('#slideControl').fadeOut(options.effect_duration);
		});

		//init
		showSlide(0);
		if(slides.length > 1) {
			looper = setTimeout(function() {animate(1)}, options.duration);
		}
	};
})(jQuery);

