/*
*	Simple menu, using nested list-items
*	Viknesk, 2008-10-30
*/

var JSListMenu = {
	expandedClass: 'expanded',
	collapsedClass: 'collapsed',
	labelExpandAll: 'Expand all',
	labelCollapseAll: 'Collapse all',
	speed: 'fast',
	group: [],
	init2: function (menuContainerUL)
	{
		var ul = $(menuContainerUL)
		if (!ul || ul.length == 0) return;
		ul.children('li').each ( function(index)
		{
			var li = $(this);
			if (li.children().length < 2) return;
			li.children(':eq(0)').click(JSListMenu.toggle);
			if (!li.hasClass(JSListMenu.expandedClass))
			{
				li.addClass(JSListMenu.collapsedClass)
					.children(':eq(1)').hide();
			}
			JSListMenu.init(li.children('ul').get(0));
		});
	},
	init: function (list, sublist, expandedEl)
	{
		var list = $(list);
		if (!list || list.length == 0) return;
		var curGroup = JSListMenu.group.length;
		JSListMenu.group[curGroup] = [];
		list.each (function (index)
		{
			var li = $(this);
			if (li.children().length < 2) return;
			JSListMenu.group[curGroup].push(li.get(0));
			li.children(':eq(0)').click (function () { return JSListMenu.toggle($(this).parent(), curGroup); });
			if (!li.hasClass(JSListMenu.expandedClass))
			{
				li.addClass(JSListMenu.collapsedClass)
					.children(':eq(1)').hide();
			}
			if (sublist && $(sublist, li).length > 0) { JSListMenu.init($(sublist, li)); }
		});
		if (expandedEl)
		{
			list.filter(expandedEl)
				.removeClass (JSListMenu.collapsedClass)
				.addClass (JSListMenu.expandedClass)
				.children(':eq(1)')
					.show(); 
		}
	},
	toggle: function (self, gid, filter)
	{
		var curItems = filter? $(self).filter(filter): $(self);
		var items = (gid >= 0)? $(JSListMenu.group[gid]): $(); 

		// Close other menu items if open
		items = items.filter('.'+JSListMenu.expandedClass);
		items.not(self)
			.removeClass (JSListMenu.expandedClass)
			.addClass (JSListMenu.collapsedClass)
			.children(':nth-child(2)').animate({height: 'toggle', opacity: 'toggle'}, JSListMenu.speed);

		// Toggle current items' state if the only 1 open, else leave it open
		curItems = (items.length > 1)? curItems.filter('.'+JSListMenu.collapsedClass): curItems;
		curItems.each (function() {
			$(this)
				.toggleClass (JSListMenu.collapsedClass)
				.toggleClass (JSListMenu.expandedClass)
				.children(':eq(1)').animate({height: 'toggle', opacity: 'toggle'}, JSListMenu.speed);
		});

		return false;
	},
	expandAll: function (self)
	{
		return JSListMenu.toggle ($(self), -1, '.'+JSListMenu.collapsedClass);
	},
	collapseAll: function (self)
	{
		return JSListMenu.toggle ($(self), -1, '.'+JSListMenu.expandedClass);
	},
	select: function (id)
	{
		$(JSListMenu.group).each (function (i)
		{
			$(this).each (function ()
			{
				if (this.id == id) JSListMenu.toggle ($(this), i, '.'+JSListMenu.collapsedClass);
			});
		});
	},
	expandCollapse: function (gid)
	{
		// Create expand/collapse all control
		var expAll = $('<a href="" class="expand-all">'+JSListMenu.labelExpandAll+'</a>')
			.click(function(){ $(this).hide().siblings().show(); return JSListMenu.expandAll(JSListMenu.group[gid]); });
		var colAll = $('<a href="" class="collapse-all" style="display:none">'+JSListMenu.labelCollapseAll+'</a>')
			.click(function(){ $(this).hide().siblings().show(); return JSListMenu.collapseAll(JSListMenu.group[gid]); });
		return $('<div class="expand-collapse"></div>').append(expAll).append(colAll);
	}
}