/**
 * Base class, extended by specialised JS objects that may or may not be included
 * 
 * Namespace "Base"
 * @class Base
 * @desc Base class of this project
 */
var Base = function($){
	// VARIABLES DEFINED HERE ARE PRIVATE
	var arr_init = []; // Array containing all registered init-functions of subclasses
	var main = $('ul#menu');
	var dropdowns = $('#dropdowns');
	var menu_interval;
	var caroussel_interval;
	var caroussel_ani = false;
	
	function check_register() {
		for (var i=0; i<arr_init.length; i++) {
			arr_init[i]();
		}
	}
	
	function mainMenu() {
		var width = 235;
		
		dropdowns.show();
		
		main.find('li:not(:has(a.large))').bind('mouseenter', function(){
			hideDropDowns();
		});
		
		main.find('li:has(a.large)').each(function(i, elem){
			var dropdown = dropdowns.find('.dropdown:eq(' + i + ')').hide();	
			
			$(elem).bind('mouseenter', function(){
				hideDropDowns();
				$(this).addClass('active');
				dropdown.show();
			}).bind('mouseleave', function(){
				setMenuHideInterval();
			});		
				
			dropdown.width(width * dropdown.find('.section').length + 15).bind('mouseenter',function(){
				clearInterval(menu_interval);																		
			}).bind('mouseleave',function(){
				setMenuHideInterval();
			});	
		});
	}
	
	function setMenuHideInterval() {
		clearInterval(menu_interval);
		menu_interval = setInterval(function(){
			hideDropDowns();
		},400);
	}
	
	function hideDropDowns() {
		clearInterval(menu_interval);
		main.find('li.active:has(a.large)').removeClass('active');
		dropdowns.find('.dropdown:visible').hide();
	}
	
	
	
	function caroussel() {
		var caroussel = $('#caroussel');
		var posY = 0;
		
		caroussel.bind('mouseenter', function(){
			stopCaroussel();
		}).bind('mouseleave', function(){
			startCaroussel();
		});
		
		caroussel.find('ul.thumbs li').each(function(i, elem){
			
			$(this).css({top: posY}).bind('mouseenter', function(){
				$(this).closest('li').siblings('li').stop().animate({left: -12}, 200);
			}).bind('mouseleave', function(){
				$(this).closest('li').siblings('li').stop().animate({left: 0}, 200);
			}).find('a').bind('click', function(e){
				e.preventDefault();
				var li = $(this).closest('li');
				if (!li.hasClass('active') && caroussel_ani === false) {
					li.addClass('active').find('img').css({opacity: .4}).end()
						.siblings('li.active').removeClass('active').find('img').css({opacity: 1});
					activateSection($(this).attr('href'));
				}
			});
			posY += $(this).outerHeight();
			
			if ($(this).hasClass('active')) {
				$(this).find('img').css({opacity: .4})	
			}
			
		}).filter(':first').find('a').trigger('click');
		
		caroussel.find('div.section:not(:first) img.large').hide().end()
			.find('div.section:first .content').css({left: 700});
			
		startCaroussel();
	}
	
	
	function startCaroussel() {
		var pauze = 8000;
		
		stopCaroussel();
		
		caroussel_interval = setInterval(function(){
			var sections = $('#caroussel').find('.section'); // get all sections

			var curr = sections.index(sections.filter('.active')); // get the current index
			
			var next = curr === sections.length-1 ? 0 : curr+1; // set the next index to +1 or else the first one
			
			$('#caroussel').find('ul.thumbs li:eq(' + next + ') a').trigger('click'); // trigger the thumbnail click of the next slide		  
												  
		}, pauze);
	}
	
	function stopCaroussel() {
		clearInterval(caroussel_interval);
	}
	
	
	function activateSection(id) {
		caroussel_ani = true;
		var section_old = $('#caroussel').find('div.section.active').removeClass('active');

		var section_new = section_old.siblings(id).addClass('active');
		
		section_new.find('img.large').fadeIn(500, function(){
			section_old.find('img.large').hide();
		});
		section_old.find('div.content').animate({left: '+=240px'},250, function(){
			section_new.find('div.content').animate({left: '-=240px'},250);
			caroussel_ani = false;
		});
	}
	

	
	
	return { 
		register: function(obj_function) {
			arr_init.push(obj_function);
		},

		init: function() {
			mainMenu();
			check_register();
			if ($('#caroussel').length > 0) {
				caroussel();
			}
		}
	};
}(jQuery);

jQuery(document).ready(function(){
	Base.init();
});
