var carouselCurrentIndex 	= 0;
var carouselActualIndex 	= 0;
var carouselNoImages 		= 0;
var carouselIncrementValue 	= 0;
var carouselTimer 			= false;

var carouselAnimType 		= 'fade'; //swipe, fade
var carouselAnimActivity 	= false;
var carouselAnimState 		= false;
var carouselAnimTime 		= 400;
var carouselAnimTimeout 	= 5000;
var carouselAnimEasing 		= 'linear';

var carouselCurrentPos 		= 0;
var carouselOverLimit 		= false;
var carouseParentSelector 	= '#content .gallerywrap';
var carouseSelector 		= carouseParentSelector+' .gallery';

function initGalleryCarousel()
{
	stopCarouselTimer();
	
	//calculate number of items
	carouselNoImages = $(carouseSelector+' .slider-holder li').size();
	if(carouselNoImages  > 1)
	{
		carouselAnimActivity = true;
		
		//make sure gallery is relative
		$(carouseSelector).css('position', 'relative');
		
		//the increment value
		carouselIncrementValue = $(carouseSelector).width();
		
		//wrap gallery
		var list = $(carouseSelector).html();
		$(carouseSelector).html('<div class="slider-wrap">'+list+'</div>');
		$(carouseSelector+' .slider-holder').css('overflow', 'visible');
		$(carouseSelector+' .slider-holder').css('position', 'absolute');
		$(carouseSelector+' .slider-holder').css('left', 0);
		$(carouseSelector+' .slider-holder').width(carouselIncrementValue*(carouselNoImages+1));
		carouselCurrentIndex = 0;
		
		if(carouselIncrementValue)
		{
			//update navigation
			startCarouselTimer();
		}
	}
	
	updateCarouselNavigation();
}

/////////////////////////////
// carouselTimer FUNC
/////////////////////////////

function startCarouselTimer()
{
	carouselAnimState = "pause";
	carouselTimer = setTimeout("doCarouselTimerSlide()", carouselAnimTimeout);
}

function stopCarouselTimer()
{
	carouselCurrentPos = 0;
	carouselAnimState = "stopped";
	carouselAnimActivity = false;
	if(carouselTimer)
	{
		clearTimeout(carouselTimer);
	}
}

function doCarouselTimerSlide()
{
	incrementCarouselSlide(1);
}

/////////////////////////////
//SLIDE FUNC
/////////////////////////////

function onCarouselSlideComplete()
{
	if(carouselOverLimit)
	{
		if(carouselActualIndex == carouselNoImages)
		{
			carouselCurrentIndex = 0;
			carouselCurrentPos = 0;
			$(carouseSelector+' .slider-holder li:last').remove();
			
		}
		else if(carouselActualIndex < 0)
		{
			carouselCurrentIndex = carouselNoImages-1;
			carouselCurrentPos = -carouselCurrentIndex*carouselIncrementValue;
			$(carouseSelector+' .slider-holder li:first').remove();
		}
		$(carouseSelector+' .slider-holder').css('left', carouselCurrentPos);
		carouselOverLimit = false;
	}

	updateCarouselNavigation();
	startCarouselTimer();
}

function doCarouselSlide()
{
	carouselAnimState = "playing";
	if(carouselAnimType == 'swipe')
	{
		$(carouseSelector+' .slider-holder').animate({"left":carouselCurrentPos+"px"}, carouselAnimTime, carouselAnimEasing, onCarouselSlideComplete);
	}
	else if(carouselAnimType == 'fade')
	{
		$(carouseSelector+' .slider-holder').animate({"opacity":0}, carouselAnimTime/2, carouselAnimEasing,
			function(){
				$(carouseSelector+' .slider-holder').css('left', carouselCurrentPos+"px");
				$(carouseSelector+' .slider-holder').animate({"opacity":1}, carouselAnimTime/2, carouselAnimEasing, onCarouselSlideComplete);
			}
		);
	}
}

/////////////////////////////
//PROCESSING FUNC
/////////////////////////////

function incrementCarouselSlide(value)
{
	if(carouselAnimState == "pause")
	{
		clearTimeout(carouselTimer);
		carouselCurrentIndex+=value;
		carouselActualIndex = carouselCurrentIndex;
		
		//process new position
		carouselCurrentPos-= carouselIncrementValue*value;
		
		if(carouselCurrentIndex == carouselNoImages)
		{
			carouselCurrentIndex = 0;
			carouselOverLimit = true;
			$(carouseSelector+' .slider-holder li:first').clone().appendTo(carouseSelector+' .slider-holder');
		}
		else if(carouselCurrentIndex < 0)
		{
			carouselCurrentIndex = (carouselNoImages-1);
			carouselOverLimit = true;
			$(carouseSelector+' .slider-holder li:last').clone().prependTo(carouseSelector+' .slider-holder');
			$(carouseSelector+' .slider-holder').css('left', carouselIncrementValue*value);
			carouselCurrentPos = 0;
		}
		doCarouselSlide();
	}
}

/////////////////////////////
//NAVIGATION FUNC
/////////////////////////////

function updateCarouselNavigation()
{
	$(carouseParentSelector+' .gallerynav a').unbind('click');
	if(carouselNoImages > 1)
	{
		$(carouseParentSelector).height(429);
		$(carouseParentSelector+' .gallerynav').show();
		$(carouseParentSelector+' .gallerynav a').click(function(){processCarouselNavigationClick($(this)); return false;});
		$(carouseParentSelector+" .gallerynav .optionBtn").toggleClass('selected', false);
		$(carouseParentSelector+" .gallerynav .optionBtn:eq("+carouselCurrentIndex+")").toggleClass('selected', true);
	}
}

function processCarouselNavigationClick(atag)
{
	var inc = 0;
	if(atag.find('.optionBtn').size() > 0)
	{
		inc = (atag.parent().index()-1)-carouselCurrentIndex;
	}
	else if(atag.find('.prevBtn').size() > 0)
	{
		inc = -1;
	}
	else if(atag.find('.nextBtn').size() > 0)
	{
		inc = 1;
	}
	incrementCarouselSlide(inc);
}

