/**
 * @author Ondrej Frinta / ondrej.frint[at]e-invent.eu / e-invent.eu
 * @date 2010-05-27
 *
 * @example
 * $('#fader').fader({
 * 	'timerDuration' : 5000, // 0 - disable timer
 * 	'fadeDuration' : 500,
 * 	'generateNavi': true,
 * 	'animation': 'change' | 'slide' 
 * 	'prevSelector' : '',
 *	'nextSelector' : ''
 * });
 *
 */
(function($) {

	var itemHolder = null;
	var itemList = Array();
	var actualItem = 0;
	var totalItems = 0;
	var canFade = true;
	var timer = null;

	var settings = {
		'timerDuration' : 5000,
		'fadeDuration' : 500,
		'generateNavi' : true,
		'animation' : 'change',
		'prevSelector' : '',
		'nextSelector' : ''
	}

	$.fn.fader = function(options) {

		if (options){
			$.extend(settings, options);
		}

		$(this).wrapInner('<div class="faderItemHolder" />');
		itemHolder = $(this).children('div.faderItemHolder').get(0);
		$(itemHolder).css('position','relative');
		totalItems = $(itemHolder).children(".faderItem").size();

		if (totalItems <= 1) return;
		$(this).addClass("fader");

		$(itemHolder).children(".faderItem").each(function(index) {
				$(this).css('position','absolute');
				$(this).css('overflow','hidden');
				$(this).css('top','0px');
				$(this).css('left','0px');
				
				if(index>0){ 
					$(this).hide();
				}
				itemList.push(this)
		});
		
		if(settings.generateNavi == true ){
			var faderBtns = "";
			for(i=0; i<totalItems; i++) {
				faderBtns += '<a href="#" id="faderBtn'+(i+1)+'"><span>'+(i+1)+'</span></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.prevSelector != '' && typeof(settings.prevSelector)=='string'){
			$(settings.prevSelector).click(function(){
				$.fader.prev();
			});
		}
		
		if(settings.nextSelector != '' && typeof(settings.nextSelector)=='string'){
			$(settings.nextSelector).click(function(){
				$.fader.next();
			});
		}

		if(settings.timerDuration>0) {
			timer=setTimeout("$.fader.timer()", settings.timerDuration);
		}
		
		if(settings.animation == 'slide'){
			for(var i=1;i<itemList.length;i++){
				$(itemList[i]).css('left', $(itemList[actualItem]).width() +'px');
			}
		}
	};

	$.fader = function() {};

	$.fader.changeImage = function(indexNew) {
		if(!canFade || indexNew < 0 || indexNew >= totalItems || indexNew==actualItem){
			 timer=setTimeout("$.fader.timer()", settings.timerDuration);
			 return false;
		}
		
		canFade = false;

		//$(itemHolder).append(itemList[actualItem]);
		if(settings.animation == 'slide'){
			var awidth = $(itemList[actualItem]).width();
			

			$(itemList[indexNew]).show();
			$(itemList[indexNew]).animate({
				left: '0px'
			},settings.fadeDuration);
			$(itemList[actualItem]).animate({
				left: '-'+ awidth +'px'
			},settings.fadeDuration, function(){ 
				for(var i=0;i<itemList.length;i++){
					if(i!=indexNew){
						$(itemList[i]).css('left', awidth+'px');
					}
				}
				canFade = true;
			});
		}else{
			$(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);
	};
	
	$.fader.prev = function() {
		//alert(actualItem);
		//alert(totalItems);
		indexNew = (actualItem-1 >= 0) ? actualItem-1 : totalItems-1;
		$.fader.changeImage(indexNew);
	};

})(jQuery);

$(document).ready(function() {
	//$('#imgChange').fader();
});

