﻿(function( $ ) 
{
	var methods = {
		init : function( settings ) 
		{ 					
			var control = $(this);
			$.data(control[0], 'current', 2);
            $.data(control[0], 'lastitem', 1);
			if(settings)
			{
				$.data(control[0], 'max', settings.length);
				$.data(control[0], 'interval', settings.interval);
			}
            if(settings.buttons)
			{
	            drawButtons(control);
            }
		    return control.carousel('start', settings);      
		},
		start : function( settings ) 
		{  
			var control = $(this);
			return $(control).everyTime($.data(control[0], 'interval'), function()
            {
                control.carousel('next', settings);
            }, 0);
		},
		next : function( settings ) 
		{ 
			var control = $(this);
			var lastitem = $.data(control[0], 'lastitem');
			var current = $.data(control[0], 'current');
			var max = $.data(control[0], 'max');
				
			$(control).children('.carouselitem.item' + lastitem).fadeOut(function()
            {			
				$(control).children('.carouselbuttons').children('.button' + lastitem).removeClass('current');
            	$(control).children('.carouselbuttons').children('.button' + current).addClass('current');
				
                $(control).children('.carouselitem.item' + current).fadeIn();
                if(current < max)
                {
                    $.data(control[0], 'lastitem', current);
					current++;
                    $.data(control[0], 'current', current);                
                }
                else
                {
                    $.data(control[0], 'current', 1);
                    $.data(control[0], 'lastitem',  max);
                }
            }); 

		},
		nextpage : function( settings ) 
		{  
			var control = $(this);
		},
		setpage : function( settings ) 
		{  
			var control = $(this);
			$(control).stopTime();
            if(settings)
            {
                $.data(control[0], 'current', settings.pageNumber);
            }
            $(control).carousel('next', settings);
            $(control).carousel('start', settings);        

		}
	};
	
	$.fn.carousel = function(method, options)
	{
		var settings = 
		{
			interval         		: 5000,
			length		 			: 1,
			buttons 				: false,
			pageNumber				: 1
		};
		
		// always override defaults with any new values passed in
		if ( options ) 
		{ 
			$.extend( settings, options );
		}	
				
		// Method calling logic
		if ( methods[method] ) 
		{
			return methods[ method ].call( this, settings);
		} 
		else if (! method ) 
		{
			return methods.init.call( this, settings );
		} 
		else 
		{
			$.error( 'Method ' +  method + ' does not exist on jQuery.tooltip' );
		}   
	};
	
	function drawButtons(control)
	{
		var buttons = $("<div />").attr('class','carouselbuttons');
		
    	var max = $.data(control[0], 'max');

    	for(var i = 1; i <= max; i++)
    	{
    		var classname = "button"
    		if(i == 1)
    		{
    		    classname = "current button"
    		}
    		
    		var buttonTmp = $('<div/>').attr('class','carouselbutton ' + classname + i);
    		buttonTmp.text(i);
    		$(buttonTmp).click(function()
    		{
    			var pagenum = $(this).text();
    			$(control).carousel('setpage', { 'pageNumber': pagenum});
    		});
    		
    		$(buttons).append(buttonTmp);    		
    	}
    	
    	$(control).append(buttons);
	}

})(jQuery);
