/**
 * fd_header
 * desciption:
 *
 *
 * @author communicatie bureau fourdesign_ Menno Tempelaar
 */
var fd_header = function (self, element) {

	var self				= this;
	
	// Protected variabeles
	this.gallery			= null; 
	this.navigation			= null; 
	this.description		= null;
	this.count				= null;

	var _construct = function () {
		_setup();
		_start();
	};

	var _setup = function () {
		if ($(element).find('.fd_header_gallery').length != 0)
			self.gallery		= new fd_header_gallery(self, $(element).find('.fd_header_gallery'));
		
		if ($(element).find('.fd_header_navigation').length != 0)
			self.navigation		= new fd_header_navigation(self, $(element).find('.fd_header_navigation'));
		
		if ($(element).find('.fd_header_description').length != 0)
			self.description	= new fd_header_description(self, $(element).find('.fd_header_description'));
		
		if ($(element).find('.fd_header_count').length != 0)
			self.count			= new fd_header_count(self, $(element).find('.fd_header_count'));
			
	};
	
	var _start = function () {
		if (self.gallery !== null) 
			self.gallery.start();
		else
			console.log('WARNING: fd_header kan geen gallery vinden.');
	};

	_construct();
	return {
		type: {
			'name': 'fd_header', 
			'description': 'Een header object.'
		}
	};
};



/**
 * fd_header_gallery
 * desciption:
 *
 *
 * @author communicatie bureau fourdesign_ Menno Tempelaar
 */
var fd_header_gallery = function (fd_header, gallery) {
	
	var self				= this;
	
	// Private variabelen
	var items					= [];
	var active					= 0;
	var interval				= null;
	var intervalSeconds			= 7000;
	var pause					= false;
	var pauseInterval			= null;
	var pauseIntervalSeconds	= 10000;
	
	var _construct = function () {
		_setItems();
	};
	
	var _setItems = function () {
		$(gallery).find('img').each(function () {
			items.push(new fd_header_gallery_item(self, this));
		});
	};	
	
	var _startInterval = function () {
		if(pause) return;
		interval = setTimeout(function()
		{
			var newActive = (active +1);
			if(newActive == items.length)
				newActive = 0;
			_set(newActive, function(){
				_startInterval();
			});
			clearTimeout(interval);
			interval = null;
		}, intervalSeconds);
	};

	var _clearInterval = function(){
		if(interval != null)
			clearTimeout(interval);
		return;
	};

	//pause slider
	var _pause		= function(){
		if(pauseInterval != null)
			clearTimeout(pauseInterval);
		pause = true;
		setTimeout(function(){
			_continue();
		}, pauseIntervalSeconds);
	};

	//continue slider
	var _continue	= function(){
		if(pauseInterval != null)
			clearTimeout(pauseInterval);
		pause = false;
		if(interval == null)
			_startInterval();
		return;
	};

	
	var _set = function (_newActive, callback) {
		if (fd_header.description !== null)
			fd_header.description.hide();

		items[active].down();
		items[active].hide(function(){});

		active = _newActive;
		items[active].up();
		items[active].show(function ()
		{
			if (fd_header.navigation !== null) {
				fd_header.navigation.change({
					items: items, 
					active: active
				}, function(){});
			}
			
			if (fd_header.description !== null)
				fd_header.description.set(items[active].get, function(){});
			
			if (fd_header.count !== null)
				fd_header.count.activate(active);
			callback();
		});	
	};
	
	_construct();
	return {
		start: function () {
			if (items.length > 0) {
				items[active].ready(function () {
					
					items[active].show(function () {
						
						if (fd_header.navigation !== null) {
							fd_header.navigation.change({
								items: items, 
								active: active
							}, function(){});
						}
						
						if (fd_header.description !== null) 
							fd_header.description.set(items[active].get);
						
						if (fd_header.count !== null)
							fd_header.count.activate(active);
						
					});
					
					if (items.length > 1)
						_startInterval();
				});
			}
		}, 
		Break: function () {
			
		}, 
		next: function () {
			var newActive = active;
				newActive++;
			if (newActive == items.length)
				newActive = 0;

			_set(newActive, function(){
				_pause();
			});
		}, 
		previous: function () {
			var newActive = active;
			if (newActive == 0)
				newActive = (items.length - 1);
			else
				newActive--;

			_set(newActive, function(){
				_pause();
			});
		}, 
		set: function (_index) {
			_set(_index, function(){
				_pause();
			});
		},
		get: {
			items: items, 
			active: active
		}
	};
}



/**
 * fd_header_gallery
 * desciption:
 *
 *
 * @author communicatie bureau fourdesign_ Menno Tempelaar
 */
var fd_header_gallery_item = function (fd_header_gallery, item) {

	var self			= this;

	var _construct = function () {
		_setup();
	};
	
	var _setup = function () {
		$(item)	.hide()
				.css('position', 'absolute');
	};
	
	_construct();
	return {
		show: function (cb) {
			$(item).fadeIn('slow', 'swing', function () {
				cb();
			});
			return;
		}, 
		hide: function (cb) {
			$(item).fadeOut('slow', 'swing', function () {
				cb();
			});
			return;
		}, 
		ready: function (callback) {
			$(item).ready(function () {
				callback();
			});
		}, 
		up: function () {
			$(item).css('zIndex', '1');
		}, 
		down: function () {
			$(item).css('zIndex', '0');
		}, 
		get: item
	};
};


/**
 * fd_header_navigation
 * desciption:
 *
 *
 * @author communicatie bureau fourdesign_ Menno Tempelaar
 */
var fd_header_navigation = function (fd_header, navigation) {
	
	var self			= this;
	
	var left;
	var right;
	
	var _construct = function () {
		_setup();
	};
	
	var _setup = function () {
		if ($(navigation).find('.fd_header_navigation_left').length != 0)
			left = new fd_header_navigation_button(self, $(navigation).find('.fd_header_navigation_left'), 'previous');
		
		if ($(navigation).find('.fd_header_navigation_right').length != 0)
			right = new fd_header_navigation_button(self, $(navigation).find('.fd_header_navigation_right'), 'next');
		
		$(navigation).hide();
	};
	
	var _change = function (data, callback) {
		if (data.items.length > 1) {
			left.activate(function(){
				right.activate(callback);
			});
			
		}
	};
	
	this.get = function () {
		return fd_header.gallery.get;
	};
	
	this.show = function (cb) {
		$(navigation).fadeIn('fast', function(){
			if(cb !== undefined)
				cb();
		});
	};
	
	this.next = function () {
		fd_header.gallery.next();
	};
	
	this.previous = function () {
		fd_header.gallery.previous();
	};
	
	_construct();
	return {
		change: function (data, callback) {
			_change(data, callback);
		}
	};
};




/**
 * fd_header_navigation_button
 * desciption:
 *
 *
 * @author communicatie bureau fourdesign_ Menno Tempelaar
 */
var fd_header_navigation_button = function (fd_header_navigation, button, type) {
	
	var self			= this;
	
	var _construct = function () {
		_setup();
	};
	
	var _setup = function () {
		$(button).hide();
		
		$(button).click(function () {
			eval('fd_header_navigation.' + type + '()');
		});
	};
	
	_construct();
	return {
		activate: function (callback) {
			fd_header_navigation.show();
			$(button).fadeIn('fast', function(){
				if(callback !== undefined)
					callback();
			});
		}, 
		deactivate: function (callback) {
			$(button).fadeOut('fast', function(){
				if(callback !== undefined)
					callback();
			});
		}
	};
};





/**
 * fd_header_description
 * desciption:
 *
 *
 * @author communicatie bureau fourdesign_ Menno Tempelaar
 */
var fd_header_description = function (fd_header, description) {
	
	var self			= this;
	var items			= [];
	
	var _construct		= function () {
		_setup();
	};
	
	var _setup = function () {
		if ($(description).find('.fd_header_description_alt').length != 0)
			items.push(new fd_header_description_item(self, $(description).find('.fd_header_description_alt')));
	};
	
	_construct();
	return {
		set: function (item, callback) {
			for ( var i = 0; i < items.length; i++ )
				items[i].set($(item).attr(items[i].attr), function(){
					if(callback !== undefined)
						callback();
				});
		}, 
		hide: function (callback) {
			for ( var i = 0; i < items.length; i++ )
				items[i].hide(function(){
					if(callback !== undefined)
						callback();
				});
		}
	};
};


/**
 * fd_header_description_item
 * desciption:
 *
 *
 * @author communicatie bureau fourdesign_ Menno Tempelaar
 */
var fd_header_description_item = function (fd_header_description, item) {

	var self			= this;
	
	var _construct = function () {
		_setup();
	};
	
	var _setup = function () {
		$(item).html('');
		$(item).hide();
		
		return;
	};
	
	_construct();
	return {
		set: function (_html, callback) {
			$(item).html(_html);
			$(item).fadeIn('fast', function(){
				if(callback !== undefined)
					callback();
			});
			return;
		}, 
		hide: function (callback) {
			$(item).fadeOut('fast', function(){
				if(callback !== undefined)
					callback();
			});
		}, 
		attr: 'alt'
	};
};





var fd_header_count = function (fd_header, element) {
	
	var self			= this;
	var items			= [];
	
	this.className		= null;
	
	var _construct = function () {
		_setup();
	};
	
	var _setup = function () {
		$(element).find('li').each(function () {
			if (items.length == 0)
				self.className = $(this).attr('class');
			
			items.push(new fd_header_count_item(self, this, items.length));
		});
	};
	
	this.set = function (_index) {
		fd_header.gallery.set(_index);
	};
	
	_construct();
	return {
		activate: function (_index) {
			for ( var i = 0; i < items.length; i++ )
				items[i].unactivate();
			
			items[_index].activate();
		}
	};
};

var fd_header_count_item = function (fd_header_count, element, index) {
	
	var self			= this;
	var active			= false;
	
	var _construct = function () {
		_setup();
		_events();
	};
	
	var _setup = function () {
		if ($(element).hasClass(fd_header_count.className))
			active = true;
	};
	
	var _events = function () {
		$(element).click(function () {
			fd_header_count.set(index);
		});
	};
	
	var _activate = function () {
		$(element).addClass(fd_header_count.className);
		active = true;
	};
	
	var _unactivate = function () {
		$(element).removeClass(fd_header_count.className);
	};
	
	_construct();
	return {
		activate: function () {
			_activate();
		}, 
		unactivate: function () {
			if (active)
				_unactivate();
		}
	};
};
