/**
 * class	S_Slider
 * author	Paul Kruijt
 */
var S_Slider = new Class({
	
	/**
	 * initialize
	 * @return void
	 */
	initialize: function()
	{
		// nodes
		this.container_node	= $('trigger_container');
		
		// prefixes
		this.trigger_button_prefix	= 'trigger_button';
		this.trigger_box_prefix		= 'trigger_box';
		
		// vars
		this.timer_slider		= null;
		
		// settings
		this.slider_duration	= 300;
		this.slider_timer		= 1000;
	},
	
	/**
	 * start
	 * @return void
	 */
	start: function()
	{
		// position listener nodes
		this.position();
		
		// set events
		this.setEvents();
	},
	
	/**
	 * position listener nodes
	 * @return void
	 */
	position: function()
	{
		var listener_nodes	= this.container_node.getElements('.listener');
		
		for (var a=0; a<listener_nodes.length; a++)
		{
			var listener_node = listener_nodes[a];
			
			// get coordinates
			var listener_node_coordinates	= listener_node.getCoordinates();
			var listener_node_height		= listener_node_coordinates.height;
			var listener_node_top			= listener_node_coordinates.top;
			var listener_node_top_new		= parseInt(0 - listener_node_height);
			
			// set position
			listener_node.setStyles('top', listener_node_top_new+'px');
			
			listener_node.setStyles({
			   top: listener_node_top_new+'px',
			   visibility: 'visible'
			});
		}
	},
	
	/**
	 * set events
	 * @return void
	 */
	setEvents: function()
	{
		var _this			= this;
		var handler_nodes	= this.container_node.getElements('.handler');
		
		for (var a=0; a<handler_nodes.length; a++)
		{
			var handler_node	= handler_nodes[a];
			
			handler_node.addEvent('mouseenter', function()
			{
				var handler_item_nr	= this.id.replace(_this.trigger_button_prefix, '');
				
				if (handler_item_nr > 0)
				{
					var listener_node	= $(_this.trigger_box_prefix + handler_item_nr);
				
					if (listener_node)
					{
						_this.slideDown(listener_node);
					}
				}
			});
			
			handler_node.addEvent('mouseleave', function()
			{
				var handler_item_nr	= this.id.replace(_this.trigger_button_prefix, '');
				
				if (handler_item_nr > 0)
				{
					var listener_node	= $(_this.trigger_box_prefix + handler_item_nr);
				
					if (listener_node)
					{
						_this.timer_slider = setTimeout(
						function ()
						{
							_this.slideUp(listener_node);
						}
						, _this.slider_timer
						)
					}
				}
			});
		}
		
		var listener_nodes	= this.container_node.getElements('.listener');
		
		for (var b=0; b<listener_nodes.length; b++)
		{
			var listener_node = listener_nodes[b];
			
			if (listener_node)
			{
				listener_node.addEvent('mouseenter', function()
				{
					_this.clearTimers(this);
				});
				
				listener_node.addEvent('mouseleave', function()
				{
					var __this = this;
					
					_this.timer_slider = setTimeout(
					function ()
					{
						_this.slideUp(__this);
					}
					, _this.slider_timer
					)
					
				});
			}
		}
	},
	
	/**
	 * slide menu down
	 * @param	object	listener_node
	 * @return	void
	 */
	slideDown: function(listener_node)
	{
		// set object as var
		var _this = this;
		
		this.clearTimers(listener_node);
		
		// get coordinates of container node
		var container_node_coordinates	= this.container_node.getCoordinates();
		var container_node_top			= container_node_coordinates.top;
		
		// get coordinates of listener node
		var listener_node_coordinates	= listener_node.getCoordinates();
		var listener_node_height		= listener_node_coordinates.height;
		
		var listener_node_top_start		= listener_node_coordinates.top - container_node_top;
		var listener_node_top_end		= 0;
		
		// start effect
		this.slide_down_effect = new Fx.Morph(listener_node, {duration: this.slider_duration, transition: Fx.Transitions.Quad.easeOut});
 		
		this.slide_down_effect.start({'top': [listener_node_top_start, listener_node_top_end]});
	},
	
	/**
	 * slide menu up
	 * @param	object	listener_node
	 * @return	void
	 */
	slideUp: function(listener_node)
	{
		// set object as var
		var _this = this;
		
		// get coordinates of container node
		var container_node_coordinates	= this.container_node.getCoordinates();
		var container_node_top			= container_node_coordinates.top;
		
		// get coordinates of listener node
		var listener_node_coordinates	= listener_node.getCoordinates();
		var listener_node_height		= listener_node_coordinates.height;
		
		var listener_node_top_start		= listener_node_coordinates.top - container_node_top;
		var listener_node_top_end		= parseInt(0 - listener_node_height);
		
		// start effect
		this.slide_up_effect = new Fx.Morph(listener_node, {duration: this.slider_duration, transition: Fx.Transitions.Quad.easeOut});
 		
		this.slide_up_effect.start({'top': [listener_node_top_start, listener_node_top_end]});
	}
	
	,
	
	/**
	 * clear listener timers
	 * @param	object	current_listener_node
	 * @return	void
	 */
	clearTimers: function(current_listener_node)
	{
		var listener_nodes	= this.container_node.getElements('.listener');
		
		for (var a=0; a<listener_nodes.length; a++)
		{
			var listener_node = listener_nodes[a];
			
			if (listener_node != current_listener_node)
			{
				//alert('ja');
				this.slideUp(listener_node);
			}
			else
			{
				clearTimeout(this.timer_slider);
			}
		}
	}
	
});