/**
*
* @author Ondrej Frinta / ondrej.frint[at]e-invent.eu / e-invent.eu
* @date 2010-05-27
*
* @example
* $('#fader').fader({ 
* 	'timerDuration' : 4000, // 0 - disable timer
* 	'fadeDuration' : 500,
* });
*
**/
(function($) {
					
		var itemHolder = null;
		var itemList = Array();
		var actualItem = 0;		
		var totalItems = 0;		
		var canFade = true;		
		var timer = null;		
		
		var settings = {
			'timerDuration' : 4000,
			'fadeDuration' : 500,
		}
		
    $.fn.fader = function(options) {

      if (options) $.extend(settings, options);	
			
			$(this).wrapInner('<div class="faderItemHolder" />');
			itemHolder = $(this).children('div.faderItemHolder').get(0);
			totalItems = $(itemHolder).children("img").size();
			
			if (totalItems <= 1) return;
			$(this).addClass("fader");

			$(itemHolder).children("img").each(function(index) {
					if(index>0) $(this).hide();
					itemList.push(this)
			});

			var faderBtns = "";
			for(i=0; i<totalItems; i++) {
				faderBtns += '<a href="#" id="faderBtn'+(i+1)+'">'+(i+1)+'</a> ';
			}
			$(this).append('<div class="faderBtnHolder" >'+faderBtns+'</div>');
			$('.faderBtnHolder a:first').addClass('active');
			
			$('.faderBtnHolder a').click(function() {
			
				clearTimeout(timer);
				timer = null;
				
				$.fader.changeImage($(this).text()-1);
				return false;
			});

			if(settings.timerDuration>0) { 
				timer=setTimeout("$.fader.timer()", settings.timerDuration);
			}			
    };

    $.fader = function() {};
		
		$.fader.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();
			
			$($('.faderBtnHolder a')[actualItem]).removeClass('active');
			$($('.faderBtnHolder a')[indexNew]).addClass('active');
						
			actualItem = indexNew;
			
			if(timer==null && settings.timerDuration>0) {
				timer=setTimeout("$.fader.timer()", settings.timerDuration);
			}
			
		};
		$.fader.timer = function() {
				timer=setTimeout("$.fader.timer()", settings.timerDuration);
				$.fader.next();
		}
    $.fader.next = function() {						
				indexNew = (actualItem+1 < totalItems) ? actualItem+1 : 0;
				$.fader.changeImage(indexNew);
    };

})(jQuery);
