(function( $ )
{

	$.fn.carousel = function( options ) 
	{  
		var carousel_div;
		var current_slide = 0;		
		var settings = 
		{
		  'location'         : 'top',
		  'background-color' : 'blue',
		  'slider_left': 70,
		  'thumb_width': 113,		  
		  'transition_delay': 200,
		  'display_thumbs': true,
		  'carousel_width':720,
		  'transition':'fade'
		};
	
		return this.each(function() 
		{        
			// If options exist, lets merge them
			// with our default settings
			if ( options ) 
			{ 
				$.extend( settings, options );
			}
			carousel_div = this;	
		
			init();
			
		});
		
		/**
		* Kick everything off
		*/
		function init()
		{
			
			$(carousel_div).find('#prev').click(function(){previous();});
			$(carousel_div).find('#next').click(function(){next();});
						
			transitionIn(current_slide,current_slide);
			setupThumbnails();			
			
			$(".slide").click(function(){
							if($(".read-more",this).length>0){
								location.href=$(".read-more",this).attr("href")
							}
						});
						$(".slide").mouseenter(function(){
							if($(".read-more",this).length>0){
								$(this).css({cursor:"pointer"})
								$("h2,.read-more",this).toggleClass("hover")
							}
						});
		}
		
		
		
		/** 
		* Inject a thumb image into the thums div 
		* according to the settings
		*/
		function setupThumbnails()
		{
			
			if(settings.display_thumbs)
			{
			
				for(var i=0; i< settings.slides.length;i++)
				{
					$(carousel_div).find('#thumbs').append('<img src="'+settings.slides[i].thumb+'"/>');
				}
				
				// tween in the scroller
				$(carousel_div).find('#thumbs').animate({left:settings.slider_left+"px"}, 2000);
			}else
			{
				// if we don't want to display the thumbs then make thumbs wrapper invisible
				$(carousel_div).find('#thumbs-wrapper').visible = false;
				$(carousel_div).find('#thumbs-wrapper').css({background:'none'});;
			}
			
			// display the controls now that javascript is on
			$(carousel_div).find('#controls-wrapper').show();
			
				
		}
		
		
		function next()
		{
			// reset the previous btn in case it's been disabled
			$(carousel_div).find('#prev').attr('disabled', '').css({opacity:1});
			
			if(Number(current_slide+1)<settings.slides.length) //  not last slide
			{
				setSlide(Number(current_slide+1));
			}
			if(Number(current_slide+2)>settings.slides.length) // last slide
			{
				$(carousel_div).find('#next').attr('disabled', 'disabled').css({opacity:0.3});				
			}
			
		}
		
		function previous()
		{
			// reset the next btn in case it's been disabled
			$(carousel_div).find('#next').attr('disabled', '').css({opacity:1});
			
			if(current_slide>0) // not first slide
			{
				setSlide(Number(current_slide-1));
			}
			if(current_slide<=0) // first slide
			{
				$(carousel_div).find('#prev').attr('disabled', 'disabled').css({opacity:0.3});
				
			}
		}
		
		
		function setSlide(p_slide_number)
		{
			transitionIn(current_slide, p_slide_number);
			transitionOut(current_slide, p_slide_number);
			
			current_slide = p_slide_number;
			
			if(settings.display_thumbs)
			{
				// calculate the movement differential for the slider
				var y_differential = settings.slider_left-(p_slide_number*settings.thumb_width);
				
				// tween the thumbnails
				$(carousel_div).find('#thumbs').animate({left:y_differential+"px"}, 100);
				$(carousel_div).find('#thumbs img').each(function(index)
				{
					if(index == current_slide)
					{
						$(this).animate({opacity:1}, settings.transition_delay);
					}else
					{
						$(this).animate({opacity:0.4}, settings.transition_delay);
					}
				});
			}
				
		

		}
		
		function transitionOut(p_slide_id, p_new_slide_id)
		{			
			$(carousel_div).find('.slide').each(function(index)
			{
				if(index==p_slide_id)
				{
					left=settings.carousel_width;
					if(p_slide_id<p_new_slide_id){left=-settings.carousel_width}
					if(settings.transition == "slide")
					{
						//$(this).css({'left':0,opacity:1}).show().animate({opacity:1,left:left},	settings.transition_delay,function(){$(this).css({'display':'none'});});
						$(this).css({'left':0}).show().animate({left:left},	settings.transition_delay,function(){$(this).css({'display':'none'});});

					}else if(settings.transition == "fade")
					{
						//$(this).css({'left':0,opacity:1}).show().animate({opacity:0,left:0},	settings.transition_delay,function(){$(this).css({'display':'none'});});	
						$(this).css({'left':0}).show().animate({left:0},	settings.transition_delay,function(){$(this).css({'display':'none'});});	
					}
					
			
				}
			});						
			
		}
		
		function transitionIn(p_slide_id, p_new_slide_id)
		{			
			$(carousel_div).find('.slide').each(function(index)
			{
				if(index==p_new_slide_id)
				{		
					left=settings.carousel_width;
					if(p_slide_id>p_new_slide_id)
					{
						left=-settings.carousel_width;
					}
					// start left move centre
					if(settings.transition == "slide")
						{
							//$(this).css({'left':left,opacity:1}).show().animate({opacity:1,left:'0'},settings.transition_delay);
							$(this).css({'left':left}).show().animate({left:'0'},settings.transition_delay);
							
						}else if(settings.transition == "fade")
						{
							//$(this).css({'left':0,opacity:0}).show().animate({opacity:1,left:'0'},settings.transition_delay);
							$(this).css({'left':0}).show().animate({opacity:1},settings.transition_delay);
							
						}
						
						
				}else
				{
					$(this).hide();
				}
				
			});
		}
		
		
		
		/** 
		* Not currently used
		*/
		function hideSlides()
		{

			$(carousel_div).find('.slide').hide();			
		}
		
	};
})( jQuery );



