/**
 * @class	CS_Menu
 * @author	Paul Kruijt
 */
var CS_Menu = new Class(
{
	/**
	 * Constructor
	 * @param	string	root_node_id
	 * @return	void
	 */
	initialize: function(root_node_id)
	{
		// nodes
		this.root_node	= $(root_node_id);
		
		// classes
		this.has_submenu_class	= 'cs_has_submenu';
		this.active_class		= 'cs_active';
		this.hover_class		= 'cs_hover';
	},
	
	/**
	 * start
	 * @return	void
	 */
	start: function()
	{
		if (this.root_node)
		{
			// set event
			this.setEvents();
		}
	},
	
	/**
	 * set events
	 * @return	void
	 */
	setEvents: function()
	{
		// set vars
		var _this	= this;
		
		// get items
		var item_nodes			= this.root_node.getElements('li');
		var total_item_nodes	= item_nodes.length;
		
		if (total_item_nodes > 0)
		{
			item_nodes.each(function(item_node, index)
			{
				// check if item has submenu
				var submenu_node = item_node.getElement('ul');
				
				if (submenu_node)
				{
					// set class
					item_node.set('class', _this.has_submenu_class);
					
					// set events
					item_node.removeEvents();
					item_node.addEvents(
					{
						'mouseenter'	: function(e)
						{
							_this.toggleSubmenu(this, 1);
						},
						
						'mouseleave'	: function(e)
						{
							_this.toggleSubmenu(this, 2);
						}
					});
				}
			});
		}
	},
	
	/**
	 * toggle submenu (show or hide)
	 * @param	object	parent_node
	 * @param	integer	toggle_type
	 * @return	void
	 */
	toggleSubmenu: function(parent_node, toggle_type)
	{
		if (parent_node && toggle_type)
		{
			// get subnode
			var sub_node = parent_node.getElement('ul');
			
			if (sub_node)
			{
				var parent_anchor_node	= parent_node.getElement('a');
				var current_state		= parent_anchor_node.get('class');
				var new_state			= toggle_type != 2 ? this.hover_class : '';
				var display_state		= toggle_type != 2 ? 'block' : 'none';
				
				// toggle submenu
				sub_node.setStyle('display', display_state);
				
				// set hover state
				if (current_state != this.active_class) parent_anchor_node.set('class', new_state);
			}
		}
	}
});
