// Gercek Carousel v0.1 - Yet Another Lightweight jQuery Carousel Implementation
/*
 * Requires jQuery to work
 * Code hosted on http://www.gercekkarakus.com
 * By Gercek Karakus (http://www.gercekkarakus.com) 
 * Copyright (c) 2010 Gercek Karakus 
 * Dual licensed under the MIT and GPL licenses: 
 * http://www.gnu.org/licenses/gpl.html
 * http://www.opensource.org/licenses/mit-license.php
*/ 

(function($){
		
	$.fn.gercekCarousel = function(options){
		
		var defaults = { 	
			paginatorContainer: this,	// paginator container
			slideHeight: '130px',  		// height of each slide
			auto: 0
		},
		settings = $.extend({}, defaults, options);
		
		
		var currentContainer = this;  
		currentContainer.css({	'height': settings.slideHeight, 
								'overflow':'hidden',
								'width':'100%'}); 
		
		
		var $currentPaginatorContainer = $(settings.paginatorContainer);
		
		
				  
		// hide unnecessary rows and show the first one by default
		var tableRows = currentContainer.children();
		
		// hide all the rows and show only the first one
		tableRows.hide();
		tableRows.eq(0).addClass('carousel-active').fadeIn();
		
		
		// PAGINATOR - append next & prev buttons
		var next = "<div class='carousel-next'>Next</div>";
		var paginator = "<div class='carousel-paginator'></div>";
		var prev = "<div class='carousel-prev'>Prev</div>";
		
		// center the navigation - calculate the margin-left
			
	 
		// fix the margin of the carousel paginator
        var len = tableRows.length;
		var m_left = (640 - 18*(len+2))/2;  
		var extraStyles = "margin-left: " + m_left +"px;"; 
		
		// remove the paginator if there is only one row
		if (len<2) 
			extraStyles += "display:none";
	
		
		
		
		var carouselNavigation = "<div class='carousel-navigation clearfix' style='"+ extraStyles +"'>"+prev+paginator+next+"</div>";
		
		$currentPaginatorContainer.append(carouselNavigation);
		
		var currentPaginator = $('.carousel-paginator', $currentPaginatorContainer);
		
		var nextButton = $('.carousel-next', $currentPaginatorContainer);
		var prevButton = $('.carousel-prev', $currentPaginatorContainer);
		// Disable the prev button
		prevButton.addClass('disabled');
		 
		
		// PAGINATOR - add new links for each row
		tableRows.each( function(i, val){
			
			var paginatorItem = "<div class='paginator-item ";
			if (i == 0) 
				paginatorItem += "active-paginator";
			paginatorItem += "'>"+i+"</div>";
			
			currentPaginator.append(paginatorItem);
		});
		
		
		/* If auto is enabled 
		var isMouseOver = false;
		if (settings.auto != 0){ 
			setInterval( function() { $('.carousel-next', $currentPaginatorContainer).trigger('click'); }, settings.auto);
		}
		
		
		currentContainer.hover(	function(){ isMouseOver = true;},
								function(){ isMouseOver = false;});
		
		*/
		
		
		
		// onclick next - simply call the next paginator-item click function		  
		$('.carousel-next', $currentPaginatorContainer).click(function(){
			if ( !$(this).hasClass('disabled') ){
				
				var nextItemId = $('.carousel-active', $currentPaginatorContainer).prevAll().length + 1;
				if (nextItemId < $('.paginator-item', $currentPaginatorContainer).length )		
					$('.paginator-item', $currentPaginatorContainer).eq(nextItemId).trigger('click');
			
			
			}
		});
		
		
		// onclick prev - simply call the prev paginator-item click function
		$('.carousel-prev', $currentPaginatorContainer).click(function(){ 
			
			if ( !$(this).hasClass('disabled') ){
				var prevItemId = $('.carousel-active', $currentPaginatorContainer).prevAll().length - 1;
				if (prevItemId > -1)		
					$('.paginator-item', $currentPaginatorContainer).eq(prevItemId).trigger('click');
			} 
		});
	
	
		// onclick paginator-item
		$('.paginator-item').click(function() {
			
			// if this row is not active, start the action ;)
			if( !$(this).hasClass('active-paginator') ){
				   
				$('.active-paginator', $currentPaginatorContainer).removeClass('active-paginator');
				$(this).addClass('active-paginator');
				
				
				var contentId = $(this).html();
				var currentRow = currentContainer.find('carousel-active');
				var newRow = currentContainer.children().eq(contentId);
				
				// hide the active row and display the clicked one
				$('.carousel-active', $currentPaginatorContainer).removeClass('carousel-active').fadeOut(function(){	
					newRow.addClass('carousel-active').fadeIn();													   		
				});
				
				
				// setup the prev/next button status
				if( newRow.prev().length == 0)
					prevButton.addClass('disabled');	
				else 
					prevButton.removeClass('disabled');
				
				
				if( newRow.next().length == 0)
					nextButton.addClass('disabled');	
				else 
					nextButton.removeClass('disabled');
			
			}
			
		});
		
	}
})(jQuery);
