/**
 * class	CS_NodeToggler
 * author	Paul Kruijt
 */
var CS_NodeToggler = new Class({
	
	/**
	 * initialize
	 * @param	string	root_node_id
	 * @param	array	arr_display_listener
	 * @return	void
	 */
	initialize: function(root_node_id, arr_display_listener)
	{
		// nodes
		this.root_node	= !root_node_id ? $('cs_toggler') : $(root_node_id);
		
		// classes
		this.item_wrapper_class			= 'cs_toggler_item_wrapper';
		this.item_class					= 'cs_toggler_item';
		this.handler_wrapper_class		= 'cs_toggler_handler_wrapper';
		this.handler_class				= 'cs_toggler_handler';
		this.handler_icon_class			= 'cs_toggler_handler_icon';
		this.listener_wrapper_class		= 'cs_toggler_listener_wrapper';
		this.listener_class				= 'cs_toggler_listener';
		
		// settings
		this.arr_display_listener	= !arr_display_listener ? new Array() : arr_display_listener;
	},
	
	/**
	 * start
	 * @return void
	 */
	start: function()
	{
		// set vars
		var _this	= this;
		
		if (this.root_node)
		{
			// get items
			var item_wrappers		= this.root_node.getElements('.'+this.item_wrapper_class);
			var total_item_wrappers	= item_wrappers.length;
			
			if (total_item_wrappers > 0)
			{
				item_wrappers.each(function(item_wrapper, index)
				{
					// get handler and listener
					var handler_wrapper		= item_wrapper.getElement('.'+_this.handler_wrapper_class);
					var listener_wrapper	= item_wrapper.getElement('.'+_this.listener_wrapper_class);
					
					if (handler_wrapper && listener_wrapper)
					{
						// get handler icon height
						var handler_icon = handler_wrapper.getElement('.'+_this.handler_icon_class);
						
						if (handler_icon) var handler_icon_height = handler_icon.getCoordinates().height;
						
						// set status of listener
						var listener_display		= _this.arr_display_listener.contains(index) ? 'block' : 'none';
						var handler_icon_position	= _this.arr_display_listener.contains(index) ? '-'+handler_icon_height+'px' : '0px';
							
						// set status of listener
						_this.setSatus(listener_wrapper, handler_icon, listener_display, handler_icon_position);
						
						// set events
						handler_wrapper.addEvent('click', function()
						{
							var listener_display		= listener_wrapper.getStyle('display');
							var listener_display_new	= listener_display == 'none' ? 'block' : 'none';
							var handler_icon_position	= listener_display == 'none' ? '-'+handler_icon_height+'px' : '0px';
							
							// set status of listener
							_this.setSatus(listener_wrapper, handler_icon, listener_display_new, handler_icon_position);
						});
					}
				});
			}
		}
	},
	
	/**
	 * set status of listener
	 * @param	object	listener_wrapper
	 * @param	object	handler_icon
	 * @param	string	listener_display
	 * @param	string	handler_icon_position
	 * @return	void
	 */
	setSatus: function(listener_wrapper, handler_icon, listener_display, handler_icon_position)
	{
		// set style
		if (listener_wrapper && listener_display) listener_wrapper.setStyle('display', listener_display);
		
		// change icon
		if (handler_icon && handler_icon_position) handler_icon.setStyle('background-position', '0px '+handler_icon_position);
	},
	
	/**
	 * close all listeners
	 * @return	void
	 */
	closeAll: function()
	{
		if (this.root_node)
		{
			// get items
			var listener_wrappers		= this.root_node.getElements('.'+this.listener_wrapper_class);
			var total_listener_wrappers	= listener_wrappers.length;
			
			if (total_listener_wrappers > 0)
			{
				listener_wrappers.each(function(listener_wrapper)
				{
					listener_wrapper.setStyle('display', 'none');
				});
			}
		}
	},
	
	/**
	 * open all listeners
	 * @return	void
	 */
	openAll: function()
	{
		if (this.root_node)
		{
			// get items
			var listener_wrappers		= this.root_node.getElements('.'+this.listener_wrapper_class);
			var total_listener_wrappers	= listener_wrappers.length;
			
			if (total_listener_wrappers > 0)
			{
				listener_wrappers.each(function(listener_wrapper)
				{
					listener_wrapper.setStyle('display', 'block');
				});
			}
		}
	}
});