/**
 * @author Ondrej Frinta / ondrej.frint[at]e-invent.eu / e-invent.eu
 * @date 2011-04-19
 * @version 1.1
 *
 * @example
 * $('#rotator').rotator({
 * 	'timerDuration' : 45000, // 0 - disable timer
 * 	'fadeDuration' : 350,
 * 	'itemClass' : 'myRotatorItem'
 * });
 *
 */
(function($) {

		var itemHolder = null;
		var itemList = Array();
		var actualItem = 0;
		var totalItems = 0;
		var canFade = true;
		var timer = null;

		var settings = {
			'timerDuration' : 5500,
			'fadeDuration' : 350,
			'itemClass': 'rotatorItem'
		}

    $.fn.rotator = function(options) {

      if (options) $.extend(settings, options);

			var itemSel = '.'+settings.itemClass;
			var itemHolderSel = itemSel+'Holder';
			$(this).wrapInner('<div class="'+settings.itemClass+'Holder" />');

			itemHolder = $(this).children(itemHolderSel);
			itemList = itemHolder.children(itemSel).get();
			totalItems = itemList.length;

			if (totalItems <= 1) return;

			$(itemList).hide();
			$(itemList[0]).show();

			// Create buttons
			var rotatorBtnList = Array();
			var rotatorBtnHolder = $('<div class="rotatorBtnHolder" />');
			$(this).append(rotatorBtnHolder);

			for(i=0; i<totalItems; i++) {
				var rotatorBtn = '<a href="#" class="rotatorBtn'+(i+1)+'"><span>'+(i+1)+'</span></a> ';
				rotatorBtnHolder.append(rotatorBtn);
			}
			rotatorBtnList = $(rotatorBtnHolder.children('a').get());
			$(rotatorBtnList[0]).addClass('active');
			
			rotatorBtnHolder.css({
				left: 490 - (rotatorBtnHolder.width() / 2)
			});
			
			// Click handler
			$(rotatorBtnList).click(function() {
				clearTimeout(timer);
				timer = null;
				$.rotator.changeImage($(rotatorBtnList).index(this));
				return false;
			});

			// init timer
			if(settings.timerDuration>0) {
				timer=setTimeout("$.rotator.timer()", settings.timerDuration);
			}
    };

    $.rotator = function() {};

		$.rotator.changeImage = function(indexNew) {
			if(!canFade || indexNew < 0 || indexNew >= totalItems || indexNew==actualItem) return false;
			canFade = false;

			$(itemHolder).append(itemList[actualItem]);
			$(itemList[actualItem]).fadeOut(settings.fadeDuration, function() {canFade = true;});
			$(itemList[indexNew]).show();

			$($('.rotatorBtnHolder a')[actualItem]).removeClass('active');
			$($('.rotatorBtnHolder a')[indexNew]).addClass('active');

			actualItem = indexNew;

			if(timer==null && settings.timerDuration>0) {
				timer=setTimeout("$.rotator.timer()", settings.timerDuration);
			}

		};
		$.rotator.timer = function() {
				timer=setTimeout("$.rotator.timer()", settings.timerDuration);
				$.rotator.next();
		}
    $.rotator.next = function() {
				indexNew = (actualItem+1 < totalItems) ? actualItem+1 : 0;
				$.rotator.changeImage(indexNew);
    };

})(jQuery);

$(document).ready(function() {
	$('#jqRotator').rotator();
});

