/* Scriptmodule voor uitklapmenu v1.0
   
   (C) 2006 vizi

   DOM, ECMA-262 en Javascript compatible implementatie van uitklapmenu
   
   Geen event handling in XHTML nodig; detectie dmv classnaam 'hoverimg'
   
   Plaats:  /scripts/class_dropdown.js
   Revisie: april 2006

 */


// Zet globale variabelen voor timeout.
//
var submenu_timeout = null;  // Geen timeout actief, dus null.
var submenu_delay = 3000;    // Vertraging voor verdwijnen submenu is 3 seconden.


// Subroutine: zet een bepaald submenu aan.
//
function showSubmenu(menu_id)
{
	var show_menu_item, show_item_image;
	
	// Zet alles uit.
	hideAllSubmenus();
	
	// Activeer het juiste andere submenu.
	document.getElementById(menu_id).getElementsByTagName('UL')[0].className = 'activestate';
	
	show_menu_item = document.getElementById(menu_id);
	show_item_image = show_menu_item.getElementsByTagName('IMG')[0];
	show_item_image.src = show_item_image.src.replace('uit', 'aan');
}


// Subroutine: zet alle submenu's uit.
//
function hideAllSubmenus()
{
	// Zet alle submenu's uit.
	for (var i = 1; i < 4; i++)
	{
		document.getElementById('hmn-0' + i).getElementsByTagName('UL')[0].className = 'basestate';
	}
	
	// Zet ook hoofdmenu uit.
	resetMainmenu();
}


// Reset hoofdmenu.
//
function resetMainmenu()
{
	var menu_item, item_image;
	
	for (var i = 1; i < 4; i++)
	{
		menu_item = document.getElementById('hmn-0' + i);
		item_image = menu_item.getElementsByTagName('IMG')[0];
		item_image.src = item_image.src.replace('aan', 'uit');
	}
}



// Initieer het dynamisch menu: koppel gedrag aan links en reset menu.
//
function dropdownInit()
{
	var menu_item, menu_link, submenu_links;

	if (document.getElementsByTagName && document.getElementById)
	{
		// Loop de drie hoofdmenu-items door.
		for (var i = 1; i < 4; i++)
		{
			menu_item = document.getElementById('hmn-0' + i);
			menu_link = menu_item.getElementsByTagName('A')[0];
			submenu_links = menu_item.getElementsByTagName('UL')[0].getElementsByTagName('A');
			
			// Hang in- en uitklapgedrag aan hoofdmenu-item.
			menu_link.targetMouseoverHandler = dropdownOpen;
			menu_link.targetMouseoutHandler  = dropdownClose;
			dispatch(menu_link, "mouseover", "targetMouseoverHandler");
			dispatch(menu_link, "mouseout", "targetMouseoutHandler");

			// Loop ze een voor een na.
			for (var j = 0; j < submenu_links.length; j++)
			{
				// Mouseover & out voor in het submenu (clear/set van timeout!)
				submenu_links[j].targetMouseoverHandler = dropdownFreeze;
				submenu_links[j].targetMouseoutHandler  = dropdownClose;
				dispatch(submenu_links[j], "mouseover", "targetMouseoverHandler");
				dispatch(submenu_links[j], "mouseout", "targetMouseoutHandler");
			}
		}
	}
	
	// Initialiseer het submenu: alles resetten.
	hideAllSubmenus();
}


// Eigenlijke routine: klap een menu open.
//
function dropdownOpen()
{
	// Zet eerst andere menuknoppen uit.
	resetMainmenu();
	
	// Verwijder een eventuele timeout voor het verbergen van een menu.
	if (submenu_timeout)
	{
		clearTimeout(submenu_timeout);
		submenu_timeout = null;
	}
	
	// Bepaal rubrieknaam.
	var this_menu_id = this.parentNode.id;
	
	// Geef het goede submenu weer.
	showSubmenu(this_menu_id);
}


// Eigenlijke routine: klap alle menu's dicht na 3000 milliseconden vertraging.
//
function dropdownClose()
{
	// Verberg menu met een vertraging, zodat mensen wel in het submenu kunnen navigeren.
	submenu_timeout = setTimeout('hideAllSubmenus()',submenu_delay);
}


// Eigenlijke routine: bevries de huidige situatie.
//
function dropdownFreeze()
{
	// Bevries submenu, zodra bezoeker in het submenu zit.
	if (submenu_timeout)
	{
		clearTimeout(submenu_timeout);
		submenu_timeout = null;
	}
}


// Hang script in window.onload ketting.
// 
window.targetDropdownHandler = dropdownInit;
dispatch(window, "load", "targetDropdownHandler");

