var current_level1_element = false;
var current_level2_element = false;
var current_level3_element = false;

function on_menu_level1_click(level1_element)
{
	if ( current_level1_element==level1_element && $('menu_level2').style.display=='block' )
	{
		$('#menu_level2:visible').slideUp('fast');
		$('#menu_level3:visible').slideUp('fast');
		current_level1_element = false;
		initialize_menu_level1();
		return;
	}
	
	if (current_level1_element)
		Element.removeClassName(current_level1_element,'current');	
	current_level1_element = level1_element;
	Element.addClassName(current_level1_element,'current');
	
	initialize_menu_level1();
	
	if ( $('menu_level2').style.display=='block' )
	{
		$('#menu_level2:visible').slideUp('fast');
		$('#menu_level3:visible').slideUp('fast');
		setTimeout('show_menu_level2()',300);
	}
	else
		show_menu_level2();
}

function show_menu_level2()
{
	var uls = current_level1_element.getElementsByTagName('ul');
	var elements = new Array(0);
	if (uls && uls.length>0)
		elements = uls[0].childNodes;
	else
		return;
	var i;
	var html = '<table cellpadding="0" cellspacing="0" border="0"><tr>';
	var addition = 0;
	for(i=0;i<elements.length;i++)
	{
		element = elements[i];
		if ( element.tagName=='LI' )
		{
			html += '<td id="'+element.id+'">'+element.innerHTML+'</td>';
			if ( menu_has_children(elements[i]) )
				addition += 10;
		}
	}
	html += '</tr></table>';
	$('menu_level2').innerHTML = html;

	var parentOffset = menu_element_offset(current_level1_element);
	var menuWidth = calculate_menu_size('menu_level2','menu_level2')+addition;
	var left = parentOffset - menuWidth/2;
	var maxWidth = $('menu_level1').offsetWidth;
	if ( left+menuWidth>maxWidth )
		left = maxWidth - menuWidth;
	if ( left<0 )
		left = 0;
	$('menu_level2').style.paddingLeft = ''+left+'px';
	
	// Menu level 2 background color
	if ( menu_is_special(current_level1_element) )
		$('menu_level2').className = 'menu_level2_special';
	else
		$('menu_level2').className = 'menu_level2_normal';
			
	$('#menu_level2 a').click(function()
	{
		if ( this.parentNode.getElementsByTagName('li').length>0 )
		{
			on_menu_level2_click(this.parentNode);
			return false;
		}
		else
			document.location = this.href;
	});
	
	// Repaint menus
	initialize_menu_level2();
		
	$('#menu_level2:hidden').slideDown('fast');
}

function on_menu_level2_click(level2_element)
{
	if ( current_level2_element==level2_element && $('menu_level3').style.display=='block' )
	{
		$('#menu_level3:visible').slideUp('fast');
		current_level2_element = false;
		initialize_menu_level2();
		return;
	}
		
	if (current_level2_element)
		Element.removeClassName(current_level2_element,'current');
	current_level2_element = level2_element;
	Element.addClassName(current_level2_element,'current');
		
	if ( $('menu_level3').style.display=='block' )
	{
		$('#menu_level3:visible').slideUp('fast');
		setTimeout('show_menu_level3()',300);
	}
	else
		show_menu_level3();
}

function show_menu_level3()
{
	var uls = current_level2_element.getElementsByTagName('ul');
	var elements = new Array(0);
	if (uls && uls.length>0)
		elements = uls[0].childNodes;
	else
		return;
	var i;
	var html = '<table cellpadding="0" cellspacing="0" border="0"><tr>';
	var addition = 0;
	for(i=0;i<elements.length;i++)
	{
		element = elements[i];
		if ( element.tagName=='LI' )
		{
			html += '<td id="'+element.id+'">'+element.innerHTML+'</td>';
			if ( menu_has_children(elements[i]) )
				addition += 10;
		}
	}
	html += '</tr></table>';
	$('menu_level3').innerHTML = html;
	var parentOffset = menu_element_offset(current_level2_element)+parseInt($('menu_level2').style.paddingLeft);
	var menuWidth = calculate_menu_size('menu_level3','menu_level3')+addition;
	var left = parentOffset - menuWidth/2;
	var maxWidth = $('menu_level1').offsetWidth;
	if ( left+menuWidth>maxWidth )
		left = maxWidth - menuWidth;
	if ( left<0 )
		left = 0;
		
	initialize_menu_level2();
	initialize_menu_level3();
	$('menu_level3').style.paddingLeft = ''+left+'px';
	$('#menu_level3:hidden').slideDown('fast');
}

function calculate_menu_size( containerId, className )
{
	var container = document.getElementById(containerId);
	new Insertion.Bottom(container.parentNode,'<div id="menu_size_calculator"><span id="menu_size_calculator_inner" class="'+className+'">'+container.innerHTML+'</span></div>');
	var elements = $('menu_size_calculator_inner').getElementsByTagName('td');
	var width = 0;
	var i;
	for(i=0;i<elements.length;i++)
		width += elements[i].offsetWidth;
	Element.remove('menu_size_calculator');
	return width;
}

function menu_element_offset( element )
{
	var nodes = element.parentNode.childNodes;
	var i;
	var width = 0;
	for( i=0;i<nodes.length;i++)
	{
		var node = nodes[i];
		if (node.tagName==element.tagName)
		{
			if ( node==element )
			{
				width += node.offsetWidth/2;
				break;
			}
			width += node.offsetWidth;
			if ( element==current_level2_element && menu_has_children(node) )
				width+=10;
		}
	}
	return width;
}



function generate_menu_item_class_name(level,is_leftmost,is_special,is_selected,is_current,has_children)
{
	var name = level;
	var suffix1 = 'normal';
	if ( is_leftmost )
		suffix1 = 'leftmost';
	if ( is_special )
		suffix1 = 'special';
	if ( level=='menu_level3' && is_leftmost && is_special )
		suffix1 = 'leftmost_special';
	var suffix2 = is_current?'current':'';
	var suffix3 = is_selected?'selected':'';
	name += '_'+suffix1;
	if ( suffix2.length>0 )
		name += '_'+suffix2;
	if ( suffix3.length>0 )
		name += '_'+suffix3;
	if (has_children)
		name += '_has_children';
	return name;
}

function menu_is_current( element )
{
	var id = element.id;
	if ( id.length==0 )
		return false;
	var i;
	for(i=0;i<menu_current_ids.length;i++)
		if ( id==menu_current_ids[i] )
			return true;
	return false;
}

function menu_is_special( element )
{
	var id = element.id;
	if ( id.length==0 )
		return false;
	var i;
	for(i=0;i<menu_special_ids.length;i++)
		if ( id==menu_special_ids[i] )
			return true;
	return false;
}

function menu_has_children( element )
{
	if ( element.getElementsByTagName('LI').length>0 )
		return true;
	return false;
}

function menu_is_leftmost( element )
{
	var list = element.parentNode.getElementsByTagName(element.tagName);
	if ( list[0]==element )
		return true;
	return false;
}

function initialize_menu_level1()
{
	var elements = $('menu_level1').getElementsByTagName('TD');
	var i;
	for(i=0;i<elements.length;i++)
	{
		var element = elements[i];
		var is_selected = element==current_level1_element?true:false;
		if ( menu_first_run )
			is_selected = menu_is_current(element);
		var class_name = generate_menu_item_class_name
		(
		 	'menu_level1',					// menu level
			i==0?true:false,				// is_leftmost
			menu_is_special(element),		// is_special
			is_selected,					// is_selected
			menu_is_current(element),		// is_current
			menu_has_children(element)		// has children
		);
		element.className = class_name;
		if ( debug_menus )
			alert(class_name);
	}
}

function initialize_menu_level2()
{
	var elements = $('menu_level2').getElementsByTagName('TD');
	var i;
	for(i=0;i<elements.length;i++)
	{
		var element = elements[i];
		var is_selected = element==current_level2_element?true:false;
		if ( menu_first_run )
			is_selected = menu_is_current(element);
		var class_name = generate_menu_item_class_name
		(
		 	'menu_level2',					// menu level
			false,							// is_leftmost
			menu_is_special(element),		// is_special
			is_selected,					// is_selected
			menu_is_current(element),		// is_current
			menu_has_children(element)		// has children
		);
		element.className = class_name;
		if ( debug_menus )
			alert(class_name);
	}
}

function initialize_menu_level3()
{
	var elements = $('menu_level3').getElementsByTagName('TD');
	var i;
	for(i=0;i<elements.length;i++)
	{
		var element = elements[i];
		var is_selected = element==current_level3_element?true:false;
		if ( menu_first_run )
			is_selected = menu_is_current(element);
		var class_name = generate_menu_item_class_name
		(
		 	'menu_level3',				// menu level
			i==0?true:false,			// is_leftmost
			menu_is_special(element),	// is_special
			is_selected,				// is_selected
			menu_is_current(element),	// is_current
			false						// has children
		);
		element.className = class_name;
		if ( debug_menus )
			alert(class_name);
	}
}

function fold_out_current_menus()
{
	var level1 = $('menu_level1').getElementsByTagName('TD');
	var i;
	for(i=0;i<level1.length;i++)
		if (menu_is_current(level1[i]))
		{
			current_level1_element = level1[i];
			on_menu_level1_click(level1[i]);
			break;
		}
				
	var level2 = $('menu_level2').getElementsByTagName('TD');
	var i;
	for(i=0;i<level2.length;i++)
		if (menu_is_current(level2[i]))
		{
			current_level2_element = level2[i];
			on_menu_level2_click(level2[i]);
			break;
		}
						
	var level3 = $('menu_level3').getElementsByTagName('TD');
	var i;
	for(i=0;i<level3.length;i++)
		if (menu_is_current(level3[i]))
		{
			current_level3_element = level3[i];
			// on_menu_level3_click(level3[i]);
			break;
		}
}

$('#menu_level1 a').click(function(){
	if ( this.parentNode.getElementsByTagName('li').length>0 )
	{
		on_menu_level1_click(this.parentNode);
		return false;
	}
	return true;
});

var menu_first_run = true;
window.onload = function()
{
	fold_out_current_menus();
	initialize_menu_level1();
	menu_first_run = false;
}
