/***********************************************
*	@namespace - Carousel
* 	@description  - Defines a generic carousel
***********************************************/

var Carousel = 
{

	/***********************************************
	// Define the properties of the class
	***********************************************/
	_eCarouselH : null,
	_eCarouselV : null,
	_iItemWidth : null,
	_eCarouselListH : null,
	_eCarouselListV : null,
	_sTabControlsH : "#paygTabsH",
	_sTabControlsV : "#paygTabsV",
	_sCarouselContent : "#carouselContainer",	
	
	/***********************************************
	// Carousel.init : class constructor (description)
	***********************************************/
	init : function() 
	{	
		var aCarouselObjects = $$(Carousel._sCarouselContent + ' #carouselHorizontal', Carousel._sCarouselContent + ' #carouselVertical');
				
		aCarouselObjects.each(function(eCarousel){
			
			if (eCarousel.hasClassName('horizontal'))
			{
				var sOrientation = "horizontal";
				Carousel._eCarouselH = eCarousel;
							
				Carousel._iItemWidth = Carousel._eCarouselH.getWidth();
				Carousel._eCarouselListH = Carousel._eCarouselH.select('ul.carouselContent')[0];
				Carousel._eCarouselH.setStyle({width: Carousel._iItemWidth + 'px' });
				
				Carousel.tabScrollControls(Carousel._eCarouselH, sOrientation);
				
				var aItems = Carousel._eCarouselListH.select('li.content');
				
				aItems.each(function(item, index){
					item.setStyle({width: Carousel._iItemWidth + 'px' });
				});
				
				Carousel._eCarouselListH.setStyle({width: (aItems.length * aItems[0].getWidth()) + 'px' });	
				
				//Reset scroll				
				Carousel.resetScroll(Carousel._eCarouselH, sOrientation);
				
			} 
			else if (eCarousel.hasClassName('vertical')) {
				
				var sOrientation = "vertical";
				Carousel._eCarouselV = eCarousel;
							
				Carousel._iItemHeight = Carousel._eCarouselV.getHeight();
				Carousel._eCarouselListV = Carousel._eCarouselV.select('ul.carouselContent')[0];
				Carousel._eCarouselV.setStyle({height: Carousel._iItemHeight + 'px' });
				
				Carousel.tabScrollControls(Carousel._eCarouselV, "vertical");
				
				var aItems = Carousel._eCarouselListV.select('li.content');
				
				aItems.each(function(item, index){
					item.setStyle({height: Carousel._iItemHeight + 'px' });
				});
				
				Carousel._eCarouselListV.setStyle({height: (aItems.length * aItems[0].getWidth()) + 'px' });	
				
				//Reset scroll
				Carousel.resetScroll(Carousel._eCarouselV, sOrientation);
			}			
		});		
	},
	
	/***********************************************
	* 	@function - Carousel.tabScrollControls
	* 	@description  - 
	* 	@param- element
	* 	@returns - void
	***********************************************/
	tabScrollControls : function (eCarousel, sOrientation)
	{
		
		if (sOrientation === "horizontal") 
		{		
			var aTabControls = $$(Carousel._sTabControlsH + " li");
			var eActive = aTabControls[0];
			
			aTabControls.each(function(element, i){
				
				Event.observe(element, 'click', function(event){			
					Event.stop(event);		
					if (eActive.className.split(" ").length > 1) {
						 eActive.removeClassName(eActive.className.split(" ")[1])	
					}
					else {
						eActive.removeClassName(eActive.className);
					}
					
					eActive = this;
					eActive.addClassName("active-" + i);
					
					Carousel.scrollAnimate(Carousel._eCarouselH, (Carousel._iItemWidth * i), sOrientation );
	
				});				
			});
		}
		else if (sOrientation === "vertical") 
		{
			var aTabControls = $$(Carousel._sTabControlsV + " li");
			var eActive = aTabControls[0];
			
			aTabControls.each(function(element, i){
				
				Event.observe(element, 'click', function(event){			
					Event.stop(event);		
					eActive.removeClassName("active");
					eActive = this;
					eActive.addClassName("active");
					
					Carousel.scrollAnimate(Carousel._eCarouselV, (Carousel._iItemHeight * i), sOrientation );
	
				});				
			});
		}		
	},
	
	resetScroll : function(eCarouselContent, sOrientation) 
	{
		if (sOrientation === "horizontal") 
		{		
			var aTabControls = $$(Carousel._sTabControlsH + " li");
			aTabControls[0].addClassName("active-0");
			eCarouselContent.scrollLeft = 0;
		}
		else if (sOrientation === "vertical") 
		{
			var aTabControls = $$(Carousel._sTabControlsV + " li");
			aTabControls[0].addClassName("active");
			eCarouselContent.scrollTop = 0;
		}	
	},
	
	/***********************************************
	* 	@function - Carousel.scrollAnimate
	* 	@description  - 
	* 	@param- 
	* 	@returns - false
	***********************************************/
	scrollAnimate : function(eCarouselContent, iNewPos, sDirection) 
	{	
		
		if (sDirection === "horizontal") {
			eCarouselContent.tween({
				
				scrollLeft: {
					time: 0,
					duration: 0.3,
					start: this.scrollLeft,
					stop: iNewPos,
					transition: FX.quadInOut,
					onStop: function(element){
						element.setOpacity(100);
					}
				}
			});
			Animate.play();	
		}
		else if (sDirection === "vertical") {
			eCarouselContent.tween({
				
				scrollTop: {
					time: 0,
					duration: 0.4,
					start: this.scrollLeft,
					stop: iNewPos,
					transition: FX.quadInOut,
					onStop: function(element){
						element.setOpacity(100);
					}
				}
			});
			Animate.play();	
		}
		
	}

//--closes class
};
