(function($)
{
	$.fn.carousel = function(options)
	{
		if (!options)
			return;

		var $imgs = options['imgs'];
		var $listItems = options['listItems'];
		var $listClick = options['listClick'];
		var rollover = options['rollover'] ? true : false;
		var interval = options['interval'] ? options['interval'] : false;
		var showall = options['showall'] ? true : false;
		
		if (!$listItems || !$listItems.length)
			return;
			
		if ($imgs && $imgs.length != $listItems.length)
			return;
			
		var $cImg, cIndex, cTime, tmp = this.css('position');
		if (tmp != 'relative' && tmp != 'absolute')
			this.css({ position: 'relative' });
			
		$imgs.hide();
		
		if (showall)
		    $imgs.show();
		
		setActiveIndex(0);
		
		function setActiveIndex(index)
		{
			if (index == cIndex)
				return;
				
			if (interval)
				clearTimeout(cTime);
			
			if ($imgs)
			{
				if ($cImg)
				{
					tmp = $cImg.position();
					$cImg.fadeOut(500);
				}
				
				if (!showall)
				{
				    $cImg = $($imgs.get(index));
				    $cImg.fadeIn(500);
				    $cImg.css({
					    position: 'absolute',
					    top: tmp.top,
					    left: tmp.left
				    });
				}
			}
			
			$($listItems.get(cIndex)).removeClass('active');
			$($listItems.get(index)).addClass('active');
			
			cIndex = index;
			
			if (interval)
				cTime = setTimeout(function() { setActiveIndex((index + 1 >= $listItems.length) ? 0 : index + 1); }, interval);
		}
		
		$listItems.each(function(i) {
			if (rollover)
			{
				$(this).mouseenter(function(){ setActiveIndex(i); });
			}
			else
			{
				tmp = ($listClick) ? $(this).find($listClick) : $(this);
				tmp.click(function() {
					setActiveIndex(i);
					return false;
				});
			}
		});
	};
})(jQuery);
