(function($) {
	$.fn.simplefade = function(options) {
		 return this.each(function() {   
		            $.simplefade(this, options);
		        });
	};
		    
	$.simplefade = function(sourceItem, options) {    
		var defaults = {
			  'height': 'auto'
			, 'scrollable': true
			, 'scrollablePadding': 15
			, 'imageScreenId': 'imageScreenBox'
			, 'imageScreenTextOverlay': false
			, 'animation': 'fade'
			, 'speed': 'normal'
			, 'timeout': 2000
			, 'wrapperTargetId' : null
			, 'isDisplayIcons': true
			, 'iconLeftId': 'iconLeft'
			, 'iconLeft': 'images/icons/2_arrow_left_32.png'
			, 'iconRightId': 'iconRight'
			, 'iconRight': 'images/icons/2_arrow_right_32.png'
	  };
	  
	  var opts = $.extend(defaults, options);
	  var elements = $(sourceItem).children().children('div');
		//Setup index for each element
		$(elements).each(function(index, item) {
			$(item).attr('pos', index);
		}); 
		
    if(elements.length >= 1) 
    {
    	if(opts.scrollable) 
    	{
	    	$.simplefade.scrollable($(sourceItem), opts);
	    	$.simplefade.displayItem($(elements[0]).find('img:first-child'), opts);
	    	$(sourceItem).wrap('<div id="scrollableWrapper" />');
	    	
	    	if(opts.isDisplayIcons && elements.length >= 2)
	    	{
	    		$('#scrollableWrapper').append('<img id="iconLeft" src="' + opts.iconLeft + '" pos="0" alt="move left" title="move left" class="iconLeft" >');
	    		$('#iconLeft').click(function() { $.simplefade.moveBackward($('#' + opts.iconLeftId), $(sourceItem), elements, opts, 0); } );
	    		$('#scrollableWrapper').append('<img id="iconRight" src="' + opts.iconRight + '" pos="0" alt="move right" title="move right" class="iconRight" >');
	    		$('#iconRight').click(function() { $.simplefade.moveForward($('#' + opts.iconRightId), $(sourceItem), elements, opts, 0); } );
	    	}
	    }
    	else
  		{
				$(sourceItem).css('position', 'relative');
				for (var i = 0; i < elements.length; i++) 
				{
					$(elements[i]).css('z-index', String(elements.length-i)).css('position', 'absolute').hide();
					//if enabled display additional text overlay from title attribute
					if(opts.imageScreenTextOverlay) 
					{
						$.simplefade.appendTextLayer($(elements[i]), null, opts);
					}
				};
  			$(elements[0]).show();
  		}
			
			//place innerWrapper content to area
			if(opts.wrapperTargetId != null)
			{
				$('#' + opts.wrapperTargetId).empty();
				$('#' + opts.wrapperTargetId).append($(elements[0]).find('.innerWrapper').clone().css('display', 'block'));
	    }
			
			if(opts.timeout > 0)
			{
				setTimeout(function() { $.simplefade.triggerNext(elements, opts, 1, 0); }, opts.timeout);
			}
    }
	 };
	
	//moveBackward
	$.simplefade.moveBackward = function(item, sourceItem, elements, opts, current, last) 
	{
		var currentPos = parseInt($(item).attr('pos')) - 1;
		if(currentPos > -1)
		{
			$.simplefade.setNewPosition(opts, currentPos);
			var scroll = ($(elements[current]).width() * currentPos);
			
			$(sourceItem).scrollLeft(scroll);
			$.simplefade.triggerNext(elements, opts, currentPos, 0);
		}
	}
	
	//moveRight
	$.simplefade.moveForward = function(item, sourceItem, elements, opts, current, last) 
	{
		var currentPos = parseInt($(item).attr('pos')) + 1;
		if(currentPos < elements.length)
		{
			$.simplefade.setNewPosition(opts, currentPos);
			var scroll = ($(elements[current]).width() * currentPos);
			$('#debug2').html('<br>currentPos: ' + currentPos + ' <br>left:' + scroll + ' <br>eleWidth:' + $(elements[current]).width());
			$(sourceItem).scrollLeft(scroll);
			$.simplefade.triggerNext(elements, opts, currentPos, 0);
		}
	}
	
	//setNewPosition
	$.simplefade.setNewPosition = function(opts, pos)
	{
		$('#' + opts.iconLeftId).attr('pos', pos);
		$('#' + opts.iconRightId).attr('pos', pos);
	}
	
	//triggerNext
	$.simplefade.triggerNext = function(elements, opts, current, last) 
	{
	  if(opts.scrollable)
		{
			$.simplefade.displayItem($(elements[current]).find('img:first-child'), opts);
  	}
    else 
  	{
  		$.simplefade.toggleImages(elements, opts, current, last);
  	}
    
		if((current + 1) < elements.length) 
		{
			current = current + 1;
			last = current - 1;
		} 
		else 
		{
			current = 0;
			last = elements.length - 1;
		}
		
		if(opts.timeout > 0)
		{
			setTimeout(function() { $.simplefade.triggerNext(elements, opts, current, last); }, opts.timeout);
		}
	}
	
	//toggleImages (toggle between last and next image)
	$.simplefade.toggleImages = function(elements, opts, next, last) 
	{
		if (opts.animation == 'slide') 
		{
			$(elements[last]).slideUp(opts.speed);
			$(elements[next]).slideDown(opts.speed);
		} 
		else if(opts.animation == 'fade') 
		{
			$(elements[last]).fadeOut(opts.speed);
			$(elements[next]).fadeIn(opts.speed);
    }
	}
	
	//appendTextLayer
	$.simplefade.appendTextLayer = function(item, targetItem, opts)
	{
		var txt = '';

		if(targetItem != null) 
		{
			txt = $(item).attr('title');
		} 
		else 
		{
			txt = $(item).find('img:first-child').attr('title');
			targetItem = item;
		}
		
		if(txt != '')
		{
			$(targetItem).append('<h2 style="display:none;"><span>' + txt + '</span></h2>');
			
			if (opts.animation == 'slide') 
			{
				$(targetItem).find('h2').slideDown(opts.speed);
			} 
			else if(opts.animation == 'fade') 
			{
				$(targetItem).find('h2').fadeIn(opts.speed);
	    }
		}
	}
	
	//scrollable
	$.simplefade.scrollable = function(item, opts) 
	{
		$(item).before('<div id="' + opts.imageScreenId + '"></div>');
		$(item).css('overflow', 'hidden');
		$(item).find('.scroll-item').css('float', 'left');
		
		//Find last item container
		var lastItem = $(item).find('.scroll-item:last-child');
		
    //When user move mouse over menu
    $(item).find('.scroll-item').mousemove(function(e) {
      //As images are loaded ul width increases, so we recalculate it each time
      var tmpWidth = lastItem[0].offsetLeft + lastItem.outerWidth() + opts.scrollablePadding;
      var left = (e.pageX - $(item).offset().left) * (tmpWidth-$(item).width()) / $(item).width();
      $(item).scrollLeft(left);
    });
    
    //prepare images targetId
    $(item).find('.scroll-item').find('img:first-child').attr('targetid', opts.imageScreenId);

		$(item).find('.scroll-item').click(function() {
    	//update current position
    	$.simplefade.setNewPosition(opts, $(this).attr('pos'));
    	//display image
  		$.simplefade.displayItem($(this).find('img:first-child'), opts);
		});
	}
	
	//displayItem
	$.simplefade.displayItem = function(item, opts) 
	{
		var wrapperTargetId = opts.wrapperTargetId;
		var targetItem = $('#'+ $(item).attr('targetid'));
		targetItem.empty().append($(item).clone().css('display', 'none'));
		
		//copy also title text into layer (if enabled)
		$.simplefade.appendTextLayer(item, targetItem, opts);
		
		$('#'+ $(item).attr('targetid') + ' img').fadeIn(2000);
		//place innerWrapper content to area
		if(wrapperTargetId != null)
    {
      $('#' + wrapperTargetId).empty();
      $('#' + wrapperTargetId).append($(item).parent().find('.innerWrapper').clone().css('display', 'block'));
    }
    
    //toggle active classes
		$(item).parent().parent().find('.scroll-item').find('img:first-child').each(function() {
			$(this).removeClass('img-active');
		});
		$(item).addClass('img-active');
	}
})(jQuery);
