jQuery.fn.rotator = function(settings) {
	settings = $.extend({
		timeout: '5000',
		autoPlay: true,
		itemButtons:null,
		slides:null
	}, settings || {});
		
	var pauseState = 0;
	var current = 0;
	var last = -1;
	var timer = '';
	var container = null;
	var slides = null;
	
	var next = function () {
		var index = (( current + 1 ) < slides.length) ? current + 1 : 0;
		showItem(index, false);
	}
	
	var prev = function () {
		var index = (current > 0) ? current - 1 : slides.length-1;
		showItem(index, false);
	}
	
	var showItem = function (newIndex, holdLonger) {
		if ( pauseState == 0 ) {
			for (var i = 0; i < slides.length; i++) {
				if (i==current){
					$(slides[current]).css('display', 'block').css('zIndex', '0').fadeOut('slow');
				} else if (i == newIndex){
					$(slides[newIndex]).css('zIndex', '1').fadeIn('slow');
				} else {
					$(slides[i]).css('display', 'none');
				}
			}
			
			//alert('set container height to ' + $(slides[newIndex]).height());
			if ($(slides[newIndex]).height() > 0){
				$(container).animate({
					height:$(slides[newIndex]).height()
				});
			}
			
			if ( settings.itemButtons != null ) {
				$(settings.itemButtons[current]).parent().removeClass('active');
				$(settings.itemButtons[newIndex]).parent().addClass('active');
			}
			
			last = current;
			current = newIndex;
			
			clearTimeout(timer);
			if (settings.autoPlay) {
				var delay = (holdLonger) ? 2 * settings.timeout : settings.timeout;
				timer = setTimeout(next, delay);
			}
		}
	}
	
	container = this.find('.rotator-container').get();
	slides = (settings.slides != null) ? settings.slides : $(container).children().get();
	$(container).css('position', 'relative').height($(slides[0]).height());
	$.each(slides, function(i){
		$(slides[i]).css('zIndex', slides.length - i).css('position', 'absolute').css('top', '0').css('left', '0');
		if (i != current) { $(slides[i]).css('display', 'none'); }

	});

	if ( settings.itemButtons != null ) {
		$.each(settings.itemButtons, function(i){
			$(settings.itemButtons[i]).click(function(){ showItem(i, true); });
		});
	}
	
	this.find('.prev').click(prev);
	this.find('.next').click(next);

	if (settings.autoPlay) {
		timer = setTimeout(next, settings.timeout);
	}

	return this;
}

