
(function($){

	$.fn.fanSlideShow = function(options) {
		
		var defaults = {
			items: '#pictures',
			links: '#titles',
			fade_time: 0,
			show_time: 4000
		};
		var options = $.extend(defaults, options);
		
		return this.each(function() {
			
			var timer = null;
			var current = 0;
			var cnt = $(this);
			var items = $(options.items, cnt).find('li');
			var links = $(options.links, cnt).find('li');
			
			$(items).hide();
			
			$(links[current]).addClass('current');
			$(items[current]).fadeIn(options.fade_time);
			
			$(links).each(function(idx) {
				$('a', this).bind('click', function() {
					transition(idx);
				});
			});
			
			function transition(next) {
				$(items[current]).fadeOut(options.fade_time, function() {
					$(links[current]).removeClass('current');
					$(links[next]).addClass('current');
					$(items[next]).fadeIn(options.fade_time);
					current = next;
					auto();
				});
			};
		
			function auto() {
				if ($(items).length < 2) return false;
				if (timer) clearTimeout(timer);
				timer = setTimeout(function() { transition((current + 1) % items.length | 0)} , options.show_time);
			};
			
			
			/*function preload() {
				var images = [];
				if ( arguments.length == 0 ) return;
				var waiting = arguments.length - 1,
					count = 0,
					callback = arguments[ arguments.length - 1 ];
				if ( typeof callback == "string" ) {
					callback = function() { };
					waiting++;
				}
				function loaded() {
					if ( ++count == waiting ) callback();
				}
				for ( var i = 0 ; i < waiting ; i++ ) {
					var image = new Image();
					image.onload = loaded;
					image.src = arguments[ i ];
					alert(image.src);
					images.push( image );
				}
			}
			
			
			var imgs = Array();
			
			$("img", items).each(function() {
				imgs.push("'"+$(this).attr('src')+"'");
			});
			
			preload(imgs.join(","), function() { auto() });
			
			*/
			
			auto();
			
		});
	}

})(jQuery);
