(function($) {
	$.fn.imageScroller = function(timeout, fadeSpeed) {
		if(!timeout) {
			timeout = 10000;
		}
		
		if(!fadeSpeed) {
			fadeSpeed = 500;
		}
		
		if(fadeSpeed > timeout) {
			fadeSpeed = timeout - 1;
		}
		
		var $elem     = $(this);
		var $scroller = $('#header_scroller_images', $elem);
		var $selector = $('<ul>').attr('class', 'scroller_selector').css('z-index', 200);
		$elem.append($selector);
		
		var $images      = $scroller.children();
		var imageCount   = $images.length;
		var currentImage = Math.floor(Math.random() * imageCount);
		
		for(var i = 0; i < imageCount; i++) {
			var link = $('<li>').append($('<a>').attr('href', '#').text(i+1));
			$selector.append(link);
		}
		
		var timer;
		var enabled = true;
		
		var getImage = function(i) {
			return $images.slice(i, i + 1);
		};
		
		var doSwitch = function(i, isInit) {
			enabled = false;
			getImage(i).css('z-index', 100).show();
			if(isInit) {
				enabled = true;
			} else {
				getImage(currentImage).css('z-index', 101).fadeOut(fadeSpeed, function() {
					enabled = true;
				});
			}
			
			$selector.find('a').removeClass('active').slice(i, i+1).addClass('active');
			currentImage = i;
		};
		
		var startTimer = function() {
			timer = setInterval(function() {
				doSwitch((currentImage + 1) % imageCount, false);
			}, timeout)
		};
		
		var stopTimer = function() {
			clearInterval(timer);
		};
		
		$selector.find('a').click(function(e) {
		    e.preventDefault();
			var clickedOn = parseInt($(this).text(), 10) - 1;
			stopTimer();
			if(enabled && clickedOn != currentImage) {
				doSwitch(clickedOn, false);
			}
		});
		
		$images.hide();
		doSwitch(currentImage, true);
		startTimer();
		
		
		return $elem;
	};
}(jQuery))
