//
// menu.js
// handles menu
//

var menu_last_layer_opened = 'undefined';
var menu_last_highlighted_cell = new Array('undefined', 'undefined');
var menu_last_selected_cell = 'undefined';
var menu_last_expanded_node = 'undefined';
var menu_last_inserted_div = 'undefined';

function menu_init()
{
	menu_select_cell(eval('node' + 0 + 0 + 0), 0)
	
	var paramstring = eval('parm' + 0 + 0 + 0).value;
	var params = paramstring.split("##");
	top.window.content.document.location.href = "../frameset/" + params[0] + "?filename=" + params[1];
	top.window.content_nav.document.location.href = 
		"../frameset/content_nav.php?template=" + params[0] + "&filename=" + params[1] + 
		"&noftemplates=" + params[2] + "&index=1"; 
	
}

// deze functie gebruiken voor navigeren op naam en navigatie index
// als de naam voorkomt in het menu array open dan het menu array 
// en de bijbehorende content navigatie pagina
// doe niets indien het menu niet voorkomt
function menu_goto(naam)
{
	var bestandsnaam = naam;
	
	// combinatie template met filename
	if (bestandsnaam.lastIndexOf("?") > 0)
	{
		top.window.content.document.location.href = "../frameset/" + bestandsnaam;
		return(1);
	}

	index_underscore = bestandsnaam.lastIndexOf("_");
	index_dot = bestandsnaam.lastIndexOf(".");

	// is geldige menu item syntax
	if ((index_underscore > 0) && (index_dot > 0))
	{
		var before = bestandsnaam.substring(0, index_underscore + 1);             // result: before + _
		var nav_index = bestandsnaam.substring(index_underscore + 1, index_dot);  // result: index
		var ext = bestandsnaam.substring(index_dot, bestandsnaam.length);         // result: 
		var menu_naam = before + 1 + ext;
	}
	else
	{
		// geen geldige syntax, maar toch controleren
		var menu_naam = bestandsnaam;
	}


	// doorzoek het menu
	for (var i = 0; i < menu_items.length; i++)
	{
		if (menu_items[i][0] == menu_naam)
		{
			var level = menu_items[i][1];
			var gid = menu_items[i][2];
			var index = menu_items[i][3];
			menu_go(level, gid, index, nav_index);
			return(1);
		}
	} 

	// niet in menu gevonden, maar open toch URL
	top.window.content.document.location.href = "../frameset/" + menu_naam;
	return(1);
}

// deze functie niet rechtstreeks aanroepen
// navigeren via menu_go

function menu_go(level, gid, index, nav_index)
{
	if (level == 0)
	{
		// verwijder laatst geopende layer
		menu_insert_layer('undefined', 'undefined', gid);
		menu_select_cell(eval('node' + level + gid + gid), level);

		// menu uitklappen als level 0 is
		menu_set_visibility('undefined', parseInt(eval('div00').top));
		// insert en toon corresponderende layer level 0
		menu_insert_layer(eval('node' + 0 + gid + gid), eval('insdiv' + 0 + gid), gid)			

		var paramstring = eval('parm' + level + gid + gid).value;
		var params = paramstring.split("##");
		var first_filename = params[1];
		var filename_header = first_filename.split("_");
		var filename_ext = first_filename.split(".");
		var new_filename = filename_header[0] + "_" + nav_index + "." + filename_ext[1];

		top.window.content.document.location.href = "../frameset/" + params[0] + "?filename=" + new_filename;
		top.window.content_nav.document.location.href = 
			"../frameset/content_nav.php?template=" + params[0] + "&filename=" + params[1] + 
			"&noftemplates=" + params[2] + "&index=" + nav_index; 
//		alert(top.window.content.document.location.href);
//		alert(params[0] + "?filename=" + new_filename);
		
	}
	// menu uitklappen als level 1 is
	else if (level == 1)
	{
		// verberg layer level 1
		menu_set_visibility('undefined', parseInt(eval('div00').top));
		// insert en toon corresponderende layer level 0
		menu_insert_layer(eval('node' + 0 + gid + gid), eval('insdiv' + 0 + gid), gid)			
		menu_select_cell(eval('insnode' + 0 + gid + index), 0);

		var paramstring = eval('parm' + level + gid + index).value;
		var params = paramstring.split("##");
		var first_filename = params[1];
		var filename_header = first_filename.split("_");
		var filename_ext = first_filename.split(".");
		var new_filename = filename_header[0] + "_" + nav_index + "." + filename_ext[1];
		top.window.content.document.location.href = "../frameset/" + params[0] + "?filename=" + new_filename;
		top.window.content_nav.document.location.href = 
			"../frameset/content_nav.php?template=" + params[0] + "&filename=" + params[1] + 
			"&noftemplates=" + params[2] + "&index=" + nav_index; 
	}	
}

function menu_reset()
{
	// reset menu by hiding open subnode and resetting backgroundcolors
	if (menu_last_highlighted_cell[0] != 'undefined')
	{
		menu_set_visibility('undefined', parseInt(eval('div00').top));
		menu_highlight_cell('undefined', 0);
		menu_highlight_cell('undefined', 1);
	}
}

function menu_handle_event() 
{
	eventSrcID = (event.srcElement) ? event.srcElement.id : 'undefined';
	eventtype = event.type;
		
	// afhandelen mouseover event
	if (eventtype == 'mouseover')
	{
		// indien event afgevuurd door een node (<td id = "node + lpi">)
		// waarin l = level (0 of 1), p = parentid, i = index (starting from 0)
		if (eventSrcID.slice(0,4) == 'node')
		{
			var level  = eventSrcID.slice(4,5);
			var gid    = eventSrcID.slice(5,6);
			var index  = eventSrcID.slice(6,7);

			if (level == 0)
			{
				// show treegroup div id = tree + li
				// waarin l = level (0 of 1), i = index (starting from 0)
				// indien het itm geen leaf is !!
				
				var div_top = calculate_node_offset_from_top_level0(gid);

				// toon node alleen als node ongelijk is aan laatst geopende node 
				// anders laatst getoonde weghaen
				if (menu_last_expanded_node.id != eval('node' + level + gid + index).id)
				{
					menu_set_visibility(eval('div' + 1 + gid), div_top);
				}
				else
				{
					menu_set_visibility('undefined', parseInt(eval('div00').top));
				}
				
				// hilight node level 0
				// reset hilight node level 1 (if necessary)
				
				menu_highlight_cell(eval('node' + level + gid + index), level);
				menu_highlight_cell('undefined', 1);
			}
			else if (level == 1)
			{
				// hilight node level 1
				menu_highlight_cell(eval('node' + level + gid + index), level);
			}			
		}
		else if (eventSrcID.slice(0,7) == 'insnode')
		{
			var level  = eventSrcID.slice(7,8);
			var gid    = eventSrcID.slice(8,9);
			var index  = eventSrcID.slice(9,10);

			menu_set_visibility('undefined', parseInt(eval('div00').top));
			menu_highlight_cell(eval('insnode' + level + gid + index), level);
			menu_highlight_cell('undefined', 1);
		}
		// all elements outside tree should have no id's set
		// to make this work properly
		else if (eventSrcID == '')
		{
			// reset menu by hiding open subnode and resetting backgroundcolors
			menu_set_visibility('undefined', parseInt(eval('div00').top));
			menu_highlight_cell('undefined', 0);
			menu_highlight_cell('undefined', 1);
		}
	}
	else if (eventtype == 'mousedown')
	{
		if (eventSrcID.slice(0,4) == 'node')
		{
			var level  = eventSrcID.slice(4,5);
			var gid    = eventSrcID.slice(5,6);
			var index  = eventSrcID.slice(6,7);
			
			if (level == 0)
			{
				// verwijder laatst geopende layer
				menu_insert_layer('undefined', 'undefined', gid);
				menu_select_cell(eval('node' + level + gid + index), level);

				// menu uitklappen als level 0 is
				menu_set_visibility('undefined', parseInt(eval('div00').top));
				// insert en toon corresponderende layer level 0
				menu_insert_layer(eval('node' + 0 + gid + gid), eval('insdiv' + 0 + gid), gid)			

			}
			// menu uitklappen als level 1 is
			else if (level == 1)
			{
				// verberg layer level 1
				menu_set_visibility('undefined', parseInt(eval('div00').top));
				// insert en toon corresponderende layer level 0
				menu_insert_layer(eval('node' + 0 + gid + gid), eval('insdiv' + 0 + gid), gid)			
				menu_select_cell(eval('insnode' + 0 + gid + index), 0);
			}
			
			var paramstring = eval('parm' + level + gid + index).value;
			var params = paramstring.split("##");
			top.window.content.document.location.href = "../frameset/" + params[0] + "?filename=" + params[1];
			top.window.content_nav.document.location.href = 
				"../frameset/content_nav.php?template=" + params[0] + "&filename=" + params[1] + 
				"&noftemplates=" + params[2] + "&index=1"; 
		}		
		else if (eventSrcID.slice(0,7) == 'insnode')
		{
			var level  = eventSrcID.slice(7,8);
			var gid    = eventSrcID.slice(8,9);
			var index  = eventSrcID.slice(9,10);

			menu_select_cell(eval('insnode' + 0 + gid + index), 0);

			var paramstring = eval('parm' + 1 + gid + index).value;
			var params = paramstring.split("##");
			top.window.content.document.location.href = "../frameset/" + params[0] + "?filename=" + params[1];
			top.window.content_nav.document.location.href = 
				"../frameset/content_nav.php?template=" + params[0] + "&filename=" + params[1] + 
				"&noftemplates=" + params[2] + "&index=1"; 
		}
	}
	// stop afvuren van dit event
 	window.event.cancelBubble = true;
}

function menu_insert_layer(node_obj, div_obj, gid)
{	
	var div_level1 = eval('div' + 1 + gid);

	// verwijder laatst geopende layer
	if (menu_last_expanded_node != 'undefined')
	{
		menu_last_expanded_node.height = 
			parseInt(menu_last_expanded_node.height) - parseInt(menu_last_inserted_div.style.height);
		menu_last_inserted_div.style.visibility = 'hidden';
	}

	if (node_obj != 'undefined')
	{
		div_obj.style.top = calculate_node_offset_from_top_level0(gid);
		node_obj.height = parseInt(node_obj.height) + parseInt(div_obj.style.height);
		div_obj.style.visibility = 'visible';
	}
		
	// onthoud nieuw geopende layer
	menu_last_expanded_node = node_obj;
	menu_last_inserted_div = div_obj;
}

function menu_set_visibility(obj_div, top)
{
	// verwijder laatst geopende layer
	if (menu_last_layer_opened != 'undefined')
	{
		menu_last_layer_opened.style.visibility = 'hidden'
	}

	// toon nieuwe layer
	if (obj_div != 'undefined')
	{
		obj_div.style.top = top;
		obj_div.style.visibility = 'visible';
	}
		
	// onthoud nieuw geopende layer
	menu_last_layer_opened = obj_div;
}

function calculate_node_offset_from_top_level0(gid)
{
	var node_offset = 0;
	
	for (i = 0; i <= gid; i++)
	{
		node_offset += parseInt(eval('node' + 0 + i + i).height);
	}
	
	return(parseInt(eval('div00').style.top) + parseInt(node_offset));
}

function menu_highlight_cell(obj, level)
{	
	// laatste cell terugzetten
	if (menu_last_highlighted_cell[level] != 'undefined')
	{
		if (menu_last_highlighted_cell[level] == menu_last_selected_cell)
		{
			menu_last_highlighted_cell[level].className = "menu_item_level" + level + "_selected";
		}
		else
		{
			menu_last_highlighted_cell[level].className = "menu_item_level" + level + "_normal";
		}
	}

	if (obj != menu_last_selected_cell)
	{
		if (obj != 'undefined')
		{
			obj.className = "menu_item_level" + level + "_hilight";
		}
	
		// onthoud laatst geopende cell
		menu_last_highlighted_cell[level] = obj;
	}
}

function menu_select_cell(obj, level)
{
	// laatste cell terugzetten
	if (menu_last_highlighted_cell[level] != 'undefined')
	{
		menu_last_highlighted_cell[level].className = "menu_item_level" + level + "_normal";
		menu_last_highlighted_cell[level] = 'undefined';
	}

	if (menu_last_selected_cell != 'undefined')
	{
		menu_last_selected_cell.className = "menu_item_level" + level + "_normal";
	}
	
	if (obj != 'undefined')
	{
		obj.className = "menu_item_level" + level + "_selected";
	}

	// onthoud laatst geselecteerde cell
	menu_last_selected_cell = obj;
}

