 /*
  * Hilfsfunktionen
  */

Array.prototype.inArray = function (value)
{
	var i;
	for (i = 0; i < this.length; i++)
	{
		if (this[i] === value)
		{
			return true;
		}
	}
	return false;
};

function getEventSrcElement(event)
{
	if (!event || !event.target)
		return window.event.srcElement;
	else
		return (event.target.tagName ? event.target : event.target.parentNode);
}

function getPageOffsetLeft(element)
{
	return element.offsetLeft + (element.offsetParent ? getPageOffsetLeft(element.offsetParent) : 0);
}

function getPageOffsetTop(element)
{
	return element.offsetTop + (element.offsetParent ? getPageOffsetTop(element.offsetParent) : 0);
}

var active_trigger = null;

/*
 * Mouse Down
 */


if (!document.addEventListener)
	document.onmousedown = pageMouseDown;
else
    document.addEventListener("mousedown", pageMouseDown, true);

function pageMouseDown(event)
{
	// Pruefen ob ein Menu geoeffnet ist
	if (!active_trigger)
	  return;
	// Eventsource bestimmen
	var src_element = getEventSrcElement(event);
	// Pruefen ob das Event von einem dem Menu zugehoerigen Element kommt
	class_names_ex = new Array("menuButton", "menuItem", "menuItemSep", "menu");
	if (class_names_ex.inArray(src_element.className) || src_element.className.substring(0,4) == "c4pn")
		return;
	// Aktives Menu schliessen
	closePanel(active_trigger);
}

/**
 * triggerMouseOver
 * Wird beim Hover ueber ein Menuelement ausgeloest
 */
 
function triggerMouseOver(event, panel_name)
{
	var trigger = getEventSrcElement(event);
	if (!trigger || !panel_name || trigger == active_trigger)
		return;

	// Momentan geoeffnetes Panel schliessen
  	if (active_trigger)
    	closePanel(active_trigger);

    // Panel an Trigger setzen, falls noch nicht vorhanden
    if (!trigger.panel)
	    trigger.panel = document.getElementById(panel_name);
	if (!trigger.panel)
		return;

	// Leeres Panel/Menu abfangen
  	if (trigger.panel.childNodes.length == 0)
  		return;

   	openPanel(trigger);
	return false;
}

/**
 * openPanel
 * Oeffnet das zum Trigger gehoerige Navigationspanel
 */

function openPanel(trigger)
{
	var x = getPageOffsetLeft(trigger) - 1;
	var y = getPageOffsetTop(trigger) + trigger.offsetHeight;

	//trigger.className = "menuButtonActive";
    // Position im IE anpassen
    if (window.event)
 	{
		x+= 1;
	  	y+= 1;
	}
	trigger.panel.style.left = x + "px";
	trigger.panel.style.top  = y + "px";
	trigger.panel.style.visibility = "visible";
  	active_trigger = trigger;
}

/**
 * closePanel
 * Schließt das zum Trigger gehoerige Navigationspanel
 */

function closePanel(trigger)
{
  //trigger.className = "menuButton";
  if (trigger.panel)
  	trigger.panel.style.visibility = "hidden";
  active_trigger = null;
}
