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 		= 500;
var carouselAnimTimeout 	= 4000;
var carouselAnimEasing 		= 'linear';

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

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();
		}
	}
	
	addCarouselNavigationButtons();
	updateCarouselNavigation();
}

function destroyCarousel()
{
	stopCarouselTimer();
	$(carouseParentSelector+' .gallery_nav_box a').unbind('click');
	$(carouseParentSelector+' .gallery_nav_box a.pauseplay').remove();
}

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

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

function stopCarouselTimer()
{
	carouselCurrentPos = 0;
	pauseCarouselTimer();
}

function pauseCarouselTimer()
{
	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;
	}

	startCarouselTimer();
	updateCarouselNavigation();
}

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, force)
{
	if(carouselAnimState == "pause" || force != null)
	{
		if(carouselTimer)
		{
			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 addCarouselNavigationButtons()
{
	if(carouselNoImages > 1)
	{
		$(carouseParentSelector+' .gallery_nav_box a').click(function(){processCarouselNavigationClick($(this)); return false;});
	}
}

function updateCarouselNavigation()
{
	if(carouselNoImages > 1)
	{
		var playpause = $(carouseParentSelector+' .gallery_nav_box .pauseplay');
		if(playpause.size() == 0)
		{
			$(carouseParentSelector+' .gallery_nav_box').prepend('<a href="#" class="button pauseplay">Pause</a>');
		}
		else if(playpause.html() == 'Play')
		{
			pauseCarouselTimer();
		}
		$(carouseParentSelector+' .gallery_nav_box').show();
	}
}

function processCarouselNavigationClick(atag)
{
	if(atag.hasClass('pauseplay'))
	{
		if(atag.html() == 'Pause')
		{
			atag.html('Play');
			pauseCarouselTimer();
		}
		else
		{
			atag.html('Pause');
			carouselAnimState = "pause";
			doCarouselTimerSlide();
		}
	}
	else
	{
		var inc = 0;
		if(atag.hasClass('prev'))
		{
			inc = -1;
		}
		else if(atag.hasClass('next'))
		{
			inc = 1;
		}
		incrementCarouselSlide(inc, true);
	}
}

