/**
* ACCORDION MENU
*
* USAGE:
* 	<div id="accordion-menu">
*		<div id="menu_label_1" class="ac_menu-label">Node label</div>
*		<div id="menu_body_1" class="ac_menu-body">
*			Node content
*		</div>
*	</div>
*
* Be sure you init the menu after the items
*
*/

var ACCORDION_MENU = {

	menu_container : 'accordion-menu', // menu container
	menu_trigger   : 'click',		   // trigger for opening and closing (click/onmouseover ect.)

	init : function () {

		// hide all nodes by default
		this.hide_all_nodes();
		
		// set the watch for onmouseover/click
		$(this.menu_container).getElementsByClassName('ac_menu-label').each(function(node) {
			Event.observe(node.id, ACCORDION_MENU.menu_trigger, function() {
				ACCORDION_MENU.toggle_node(node.id);
			});
		});
		
	},
		
	toggle_node : function (node) {
		
		// get the current node
		var body_node = $(node.replace('label', 'body'));
		var show = false;
		
		if ( body_node == null || body_node == '' ) {
			// we do not have submenu, but we do have a URL so we follow that
			window.location = $(node).firstDescendant();
			return;
		}
	
		// hide last node
		this.hide_last(node);
						
		// show or hide current node
		body_node.getStyle('display') == 'none' ? show = true : show = false;
		
		// state
		if ( show ) {
			this.show_node(body_node);
			this.change_class(node, true);
		}  else  {
			this.hide_node(body_node);
			this.change_class(node, false);
		}
		
	},
	
	hide_all_nodes : function () {
	
		var last_node = cookie.read('ac_last_item');
		
		if ( last_node == null || last_node == '' ) { } else {
			var node_parent = last_node;
			var last_node = last_node.replace('label', 'body');
		}
		
		$(this.menu_container).getElementsByClassName('ac_menu-body').each(function(node) {

			// close all other nodes
			if ( last_node == null || last_node == '' ) {
				node.hide();
			// keep last node open
			} else {
				if ( node.id == last_node ) {
					ACCORDION_MENU.show_node(last_node);
					ACCORDION_MENU.change_class(node_parent, true);
				} else {
					node.hide();
				}
			}
			
		});
		
	},
	
	hide_last : function (current) {
	
		// last opened node
		var last = cookie.read('ac_last_item');

		// we do not have a last node so we create one
		if ( last == null || last == '' ) {
			cookie.set('ac_last_item', current);
			
		// hide last node and set current in cookie
		} else {
			if ( last != current ) {
				last_body = last.replace('label', 'body');
				
				if ( $(last_body) == null || $(last_body) == '' ) {
					// do nothing
				} else {
					this.hide_node(last_body);
					this.change_class(last, false);
					cookie.set('ac_last_item', current);
				}
			}
		}
		
	},
	
	show_node : function (node) {
		Effect.BlindDown(node, { duration : 0.2 } );
	},
	
	hide_node : function (node) {
		Effect.BlindUp(node, { duration : 0.2 } );
		cookie.set('ac_last_item', '');
	},
	
	change_class : function (node, on) {		
		if ( on ) {
			$(node).removeClassName('ac_menu-expand');
			$(node).addClassName('ac_menu-contract');
		} else {
			$(node).removeClassName('ac_menu-contract');
			$(node).addClassName('ac_menu-expand');
		}
	},
	
	hover : function (node, state, sub) {
		if ( state ) {
			$(node).setStyle({ backgroundColor: '#eeeeee' });
		} else {
			if ( sub ) {
				$(node).setStyle({ backgroundColor: '#ffffff' });
			} else {
				$(node).setStyle({ backgroundColor: '#F7F7F7' });
			}
		}
	} 
}