
(function($)
{ 
	$.fn.levitate = function(default_options) 
	{
		var defaults = 
		{  
			duration:600, 					// transition duration 
			transition:"easeInOutCubic", 	
			opacity:0.6,
			opacity_level2:0,
			interval: 1000
			
		};  
		
		var def = $.extend(defaults, default_options); 
		
		return this.each(function()
		{	
			// variables and elements we need
			var $container = $(this), $items = $container.find('.featured_item'), $values = [], $zindex = [], $offset = 0, $animating = false, $clicked=false;
			
			var interval = setInterval(function(){}, 50000);//fake interval needed to circumvent some js errors in not-so-good-browsers ;D
			
			jQuery(window).load(function(){
				if(def.interval && !$clicked )
					{
					interval = setInterval(function() { rotate(-1); }, def.interval); 
					}
				});
		
			//sets the opacity for elements in JS since its not yet a valid css declaration (if user wants opacity):
			if (def.opacity != 1 && def.opacity_level2 != 1)
			{	$items.not('.featured_item_active').css('opacity',def.opacity_level2);
				$container.find('.featured_item_active').css('opacity', 1);
				$container.find('.featured_item_last, .featured_item_upcoming').css('opacity', def.opacity);
				
			}
			//gets the values for each element by extracting the css, this way we can use unlimited items
			$items.each(function(i)
			{	
				var $item = $(this);
				 
				$values[i]= {
								width: $item.width(),
								top: parseInt($item.css('top')),
								left: parseInt($item.css('left')),
								opacity: $item.css('opacity')
							};
							
				$zindex[i] =	$item.css('zIndex');
							
			}); // end each loop
			
			
			$items.click(function(e)
			{	
				if (! $animating)
				{	
					$direction = e.pageX > $(window).width() / 2 ? -1 : 1;
					rotate($direction);
				}
				clearInterval(interval);
				$clicked = true;
			}); // end click
			
			
			function rotate($direction)
			{	
				if ($items.length <= 2) return;
				$animating = true;
				
				if($items.length == $offset || $items.length == ($offset*-1))
				{
					$offset = 1 * $direction;
				}
				else
				{
					$offset = $offset + $direction;
				}
								
				
				//$offset = $items.length == $offset ? 1 : $offset + 1;
				$items.each(function(i)
				{	
					var $item = $(this), $next;
					
					$next = i + $offset;
					
						if($next >= $items.length)
						{
							$next = i - $items.length + $offset;
						}
						else if($next < 0)
						{
							$next = i + $items.length + $offset;
						}
					
					//modifier of -12 for images because of border + padding				
					$item.animate($values[$next], def.duration, def.transition);
					$item.find("img").animate({width:$values[$next].width-12}, def.duration, def.transition, function()
					{
						$animating = false;
					});
					
					setTimeout(function()
					{
        				$item.css({zIndex: $zindex[$next]});
    				}, def.duration / 2);
    				
				});
			} //end rotate
		});	
	};
})(jQuery); 

























