$.fn.infiniteCarousel = function () {
	return this.each(function() {

		var	$wrapper = $('> div', this).css({'overflow': 'hidden'}),
			$slider = $wrapper.find('ul'),
			$items = $slider.find('> li'),
			$single = $items.filter(':first'),
			
			$singleHeight = $single.outerHeight(true),
			$sliderOffset = parseFloat($slider.css('top')),
			$sliderPrependOffset = -(Math.abs($sliderOffset) + $singleHeight),
			
			$viewHeight = $wrapper.outerHeight() - 92,
			$noVisibleItems = (Math.floor( $(window).height() / $singleHeight )),
			$countedItems = [],
			$currentItem = 0;
		
		function noVisibleItems() {
			$noVisibleItems = (Math.floor( $(window).height() / $singleHeight ));
			return $noVisibleItems;
		}
		
		function sliderAppendOffset() {
			$offset = -(Math.abs(parseFloat($slider.css('top'))) - ($singleHeight));
			return $offset;
		}

		// Convert Current Position to equivalent offset.
		function convertValueToPosition(curPos) {
			calculatedPosition = ((curPos * $singleHeight) + $sliderOffset);
			return calculatedPosition;
		}

		function slideCarousel(direction) {

			$sliderAppendThreshold = Math.abs(noVisibleItems() - $items.length) - 2;

			switch (direction) {
				case 'inc':
					if ($currentItem >= 0) {
						$currentItem = 0;
						$slider.css({ top: $sliderPrependOffset }).find('> li:last').prependTo($slider);
					} else {
						$currentItem++;
					}
					break;
					
				case 'dec':
					if (Math.abs($currentItem) >= $sliderAppendThreshold) {
						$currentItem = -$sliderAppendThreshold;
						$slider.css({ top: sliderAppendOffset() }).find('> li:first').appendTo($slider);
					} else {
						$currentItem--;
					}
					break;
			}
			
			var $pixelValue = convertValueToPosition($currentItem) + 'px';
			
			$slider.animate({ top: $pixelValue });
			return;
		}
		
		$wrapper.append('<span id="featured-controls"><a class="featured-up">Up</a><a class="featured-down">Down</a></span>');
        
        $('a.featured-up', this).click(function () {
			slideCarousel('inc');
        });
        
        $('a.featured-down', this).click(function () {
			slideCarousel('dec');
        });
		
		
		
	});
};
