// dropdown.js (c)2009 bommer/downstairs

function setMenuObservers()
{
	hidedropdownhandler = new Array();
	timeout = false;

	// Für alle topnav Links
	$$('span.drop').each(
		function(s) {
		
			Event.observe (s,"mouseover", function() 
				{ 
					overElement = s;
					timeout = setTimeout("showdropdownforkategorie(overElement)",40); 
				});
			
			Event.observe (s,"mouseout", function() 
				{ 	// beim verlassen eines Links Timer zurücksetzen
					clearTimeout(timeout);		
					
				});
		}
	);
	
}


function showdropdownforkategorie(element)
{
// element ist das A-Element aus topnav
	
	var kat_id = element.id.substring(2);	
	
	// id of dropdown element "ddc", id of opening link "dd"
	var ddc = "ddc" + kat_id;
	var dd = "dd" + kat_id;
	
	if (!$(ddc).visible()) Effect.Appear($(ddc), { duration: 0.1 });
	//if (!$(ddc).visible()) $(ddc).show();
	
	// breite für rechtsbündigkeit
	//var lOffset = 20-$(ddc).getWidth();
	
	$(ddc).clonePosition(element.previous(), {setHeight:false, setWidth:false, offsetTop:20,offsetLeft:-19});
	
	var obj;
	hidedropdownhandler[kat_id] = dropdownhandler.hide.bindAsEventListener(obj, kat_id);

	Event.observe ($(ddc),"mouseout", hidedropdownhandler[kat_id]);
	Event.observe ($(dd).previous(0),"mouseout", hidedropdownhandler[kat_id]);
	Event.observe ($(dd),"mouseout", hidedropdownhandler[kat_id]);
	
}


var dropdownhandler = {

	hide: function(e) {	
	
	var kat_id=arguments[1];

	var ddc = "ddc" + kat_id;
	var dd = "dd" + kat_id;

	// workaround für mouseout events von unterlementen
	var relTarg = e.relatedTarget || e.toElement;						// Element auf das die Maus bewegt wurde
	
	//alert(relTarg.inspect());
	
	// wenn das Element kein Abkömmling seines kontainers is: menu schließen
	if (relTarg.descendantOf($(ddc))==false && relTarg != $(dd) && relTarg != $(dd).previous() && relTarg != $(ddc) )
		{	
		Effect.Fade(ddc, { duration: 0.2 });
		Event.stopObserving (ddc,"mouseout", hidedropdownhandler[kat_id]);
		Event.stopObserving (dd,"mouseout", hidedropdownhandler[kat_id]);
		}
	}	

}

setMenuObservers(); 

