var Carousel = {

	tabHeight: 87,
	tabOffset: 28,
	delayInitial: 4000,
	delayAfterClick: 2000,
	morphDuration: 500,
	rotateTimerId: null,
	banners: null,
	tabIndicators: null,
	tabIndicatorElements: null,
	activeTab: 'tab01',

	init: function () {
		Carousel.initialise();
		Carousel.startRotation();
	},

	initialise: function () {
		Carousel.initialiseTabs();
		Carousel.initialiseBanners();
		Carousel.initialiseTabIndicators();
	},

	initialiseTabs: function() {
		$('tabs').getElements('li').each(function(el) {
			el.addEvent('mouseover', Carousel.clickBehaviour);
		});
	},

	initialiseBanners: function() {
		Carousel.banners = $('bannerUL').getElements('li.banner');
		Carousel.banners.each(function(el) {
			$(el).set('morph', {duration: Carousel.morphDuration});
		});
	},

	initialiseTabIndicators: function() {
		Carousel.initialiseTabIndicatorElements();
		Carousel.tabIndicator = $('tab-indicator');
    	Carousel.tabIndicator.set('morph', {duration: Carousel.morphDuration});
	},

	initialiseTabIndicatorElements: function() {
		Carousel.tabIndicatorElements = $('tab-indicator').getElements('li.tabI');
		Carousel.tabIndicatorElements.each(function(el) {
			$(el).set('morph', {duration: Carousel.morphDuration});
		});
	},

	clickBehaviour: function (e) {
		var activeTab = $(e.target).get('class');
		if( activeTab != 'externallink' ){
			e.stop();
			Carousel.stopRotation();
			Carousel.moveTab(activeTab);
			Carousel.activeTab = activeTab;
			Carousel.rotateTimerId = Carousel.startRotation.delay(Carousel.delayAfterClick);
		}
	},

	moveTab: function(activeTab) {
		Carousel.fadeOutAllBannersAndTabs();
		Carousel.moveTabIndicator(activeTab);
		Carousel.fadeInTab(activeTab);
	},

	fadeOutAllBannersAndTabs: function() {
		Carousel.banners.each(function(el) {
			$(el).morph({opacity: 0});
		});
		Carousel.tabIndicatorElements.each(function(el) {
			$(el).morph({opacity: 0});
		});
	},

	moveTabIndicator: function(activeTab) {
        var tabIndex = activeTab.substr(4,1) - 1;
        var tabIPos = ((tabIndex * Carousel.tabHeight) + Carousel.tabOffset);
    	Carousel.tabIndicator.morph({top: tabIPos});
	},

	fadeInTab: function(activeTab) {
	    var tabVarIndicator = activeTab + "_indicator";
        $(activeTab).morph({opacity: 1});
        $(tabVarIndicator).morph({opacity: 1});
	},

	startRotation: function() {
		Carousel.stopRotation();
		Carousel.rotateTimerId = Carousel.rotate.periodical(Carousel.delayInitial);
	},

	stopRotation: function() {
		$clear(Carousel.rotateTimerId);
	},

	rotate: function() {
		Carousel.activeTab = Carousel.getNextActiveTab();
		Carousel.moveTab(Carousel.activeTab);
	},

	getNextActiveTab: function() {
		var currentTab = Carousel.activeTab;
		var index = currentTab.substr(4,1).toInt();
		var nextIndex = (index % 4) + 1;
		return('tab0' + nextIndex);
	}
}


window.addEvent('domready',Carousel.init);

