var jsMenu_usepopups = true;
var jsMenu_registered = new Array();
var jsMenu_initialized = new Array();
var jsMenu_activemenus = new Array();
var jsMenu_alignment = new Array();
var jsMenu_click_only = new Array();
var jsMenu_currentactive = false;
var jsMenu_current_to_close = false;
var slidetimer = false;
var jsMenu_opensteps = 10;
var jsMenu_doslide = true;
var jsMenu_dofade = false; // can be very slow

var jsMenu_open_on_mousemove = true; // open menus when hovering their parent
var jsMenu_current_to_open = false;
var jsMenu_wait_before_closing = 750; // time in milliseconds before closing (only when open_on_mousemove)
var jsMenu_wait_before_opening = 100; // time in milliseconds before closing (only when open_on_mousemove)
var jsMenu_currenthover = false;
var jsMenu_intervalOpen = false;
var jsMenu_intervalClose = false;
var jsMenu_center_marginLeft = 185;
var lOffsetTop = -2;
var lOffsetLeft = -7;
var iFrameMenu = false;

var jsMenu_datefields = new Array();

function jsMenu_clickExt(URL, target, properties)
{
  jsMenu_current_to_open = false;
  jsMenu_current_to_close = false;
  jsMenu_currentactive ? jsMenu_close() : 0;
  if (URL != '') {
    if (parent.frames.length <= 1) {
    	target == '_top' || target == '_self' ? target = '' : 0;
    	if (target == '')
    		document.location.href = URL;
    	else
    		properties ? window.open(URL, target, properties) : window.open(URL, target);
  	} else {
  		target == '_top' ? top.location.href = URL : window.location.href = URL;
  	}
  }
}

function jsMenu_overExt()
{
  jsMenu_current_to_open = false;
  jsMenu_current_to_close = false;
  window.clearInterval(jsMenu_intervalOpen);
  window.clearInterval(jsMenu_intervalClose);
}

function jsMenu_outExt()
{
  jsMenu_current_to_close = this;
  jsMenu_intervalClose = window.setInterval('jsMenu_closeExt()', jsMenu_wait_before_closing);
}
function jsMenu_closeExt()
{
  window.clearInterval(jsMenu_intervalClose);
  if ((jsMenu_current_to_close && (jsMenu_currentactive + '_menu' == jsMenu_current_to_close.id || jsMenu_currentactive == jsMenu_current_to_close.id)) || !jsMenu_currentactive) {
		jsMenu_current_to_close = false;
    !jsMenu_currentactive ? jsMenu_currentactive = jsMenu_current_to_close.id : 0;
    jsMenu_close();
  }
  jsMenu_current_to_close = false;
}

function jsMenu_openExt()
{
  window.clearInterval(jsMenu_intervalOpen);
  if (jsMenu_current_to_open && jsMenu_current_to_close && jsMenu_current_to_open == jsMenu_current_to_close) {
    jsMenu_current_to_open = false;
    jsMenu_current_to_close = false;
  }
  if (jsMenu_current_to_open) {
    if (jsMenu_currentactive && jsMenu_currentactive != jsMenu_current_to_open.id) {
      jsMenu_close();
    }
    jsMenu_current_to_close ? window.clearInterval(jsMenu_intervalClose) : 0;
    jsMenu_open(jsMenu_current_to_open);
  }
}

// #############################################################################
// another function to handle the different event models of different browsers
// and prevent event bubbling in a lesser way
function e_by_gum(eventobj)
{
	if (!eventobj || is_ie)
	{
		window.event.cancelBubble = true;
		return window.event;
	}
	else
	{
		if (eventobj.target.type == 'submit' && eventobj.target.form.submit)
		{
			// naughty safari
			eventobj.target.form.submit();
		}
		eventobj.stopPropagation();
		return eventobj;
	}
}

// #############################################################################
// get left position of elm
function fetch_object_posleft(elm)
{
	var left = elm.offsetLeft;
	while((elm = elm.offsetParent) != null)
	{
	  left += elm.offsetLeft;
	}
	return left;
}

// #############################################################################
// get top position of elm
function fetch_object_postop(elm)
{
	var top = elm.offsetTop;
	while((elm = elm.offsetParent) != null)
	{
		top += elm.offsetTop;
	}
	return top;
}

// #############################################################################
function jsMenu_doregister(controlid, nowrite, datefield, alignment, open_on_click_only)
{
	if (document.getElementsByTagName)
	{
		var controlobj = fetch_object(controlid);
		if (controlobj)
		{
			if (datefield)
			{
				jsMenu_datefields[controlid] = datefield;
			}

			jsMenu_registered[jsMenu_registered.length] = controlid;
			jsMenu_alignment[controlid] = alignment;
			jsMenu_click_only[controlid] = open_on_click_only;

			if (!nowrite)
			{
				document.write('<img src="' + IMGDIR_MISC + '/menu_open.gif" alt="" border="0" />');
			}
			return true;
		}
	}

	return false;
}

// #############################################################################
// function to get the menu basename - 'menu.104' returns 'menu', 'x.menu' returns 'x'
function jsMenu_getmenuid(controlid)
{
	var dotpos = controlid.indexOf(".");
	if (dotpos != -1)
	{
		return controlid.substr(0, dotpos);
	}
	else
	{
		return controlid;
	}
}

// #############################################################################
// handle menu control mouseover events
function jsMenu_eventhandler_mouseover(e)
{
  jsMenu_current_to_close && jsMenu_current_to_close == this ? jsMenu_current_to_close = false : 0;
	e = do_an_e(e);
	if (!jsMenu_open_on_mousemove)
	  jsMenu_hover(this);
  else {
    if (!jsMenu_click_only[this.id] && jsMenu_current_to_open != this) {
      window.clearInterval(jsMenu_intervalOpen);
      jsMenu_current_to_open = this;
      jsMenu_intervalOpen = window.setInterval('jsMenu_openExt()', jsMenu_wait_before_opening);
	  }
  }
}

// #############################################################################
// handle menu control mousemove events
function jsMenu_eventhandler_mousemove(e)
{
	if (jsMenu_currentactive != this.id) {
	  e = do_an_e(e);
	  if (!jsMenu_open_on_mousemove)
	    jsMenu_hover(this);
    else {
      if (!jsMenu_click_only[this.id]) {
	      if (jsMenu_current_to_open != this) {
          jsMenu_current_to_open = this;
          jsMenu_intervalOpen = window.setInterval('jsMenu_openExt()', jsMenu_wait_before_opening);
        }
      }
    }
  }
}

// #############################################################################
// handle menu control mouseout events
function jsMenu_eventhandler_mouseout(e)
{
  //jsMenu_current_to_open == this ? jsMenu_current_to_open = false : 0;
  e = do_an_e(e);
  jsMenu_current_to_open && jsMenu_current_to_open == this ? jsMenu_current_to_open = false : 0;
  if (jsMenu_currentactive == this.id) {
    jsMenu_current_to_close = this;
    window.clearInterval(jsMenu_intervalClose);
    jsMenu_intervalClose = window.setInterval('jsMenu_closeExt()', jsMenu_wait_before_closing);
  }
}

// #############################################################################
// handle menu control click events
function jsMenu_eventhandler_click(e)
{
  alert('foo');
  if (jsMenu_click_only[this.id]) {
    e = do_an_e(e);
	  if (jsMenu_currentactive)
	    jsMenu_close();
	  jsMenu_intervalOpen = false;
	  window.clearInterval(jsMenu_intervalOpen);
	  jsMenu_intervalClose = false;
	  window.clearInterval(jsMenu_intervalClose);
	  jsMenu_open(this);
  }
}

// #############################################################################
// close all open menus
function jsMenu_close()
{
  jsMenu_intervalOpen = false;
  window.clearInterval(jsMenu_intervalOpen);
  jsMenu_intervalClose = false;
  window.clearInterval(jsMenu_intervalClose);
	if (jsMenu_currentactive)
	{
		for (key in jsMenu_activemenus)
		{
			fetch_object(jsMenu_getmenuid(key) + "_menu").style.display = "none";
			jsMenu_activemenus[key] = false;
		}
	}
  jsMenu_current_to_close = false;
	jsMenu_currentactive = false;

	if (slidetimer)
	{
		clearTimeout(slidetimer);
		slidetimer = false;
	}

	if (is_ie)
	{
		selects = document.getElementsByTagName("select");
		for (var i = 0; i < selects.length; i++)
		{
			selects[i].style.visibility = "visible";
		}
	}
  if (iFrameMenu) {
  	iFrameMenu.style.display = 'none';
}
	if (document.getElementById("zg_hinweis")) {
		document.getElementById('zg_hinweis').style.display = 'none'
	}
}

// #############################################################################
// open menu under pointer if another menu is active
function jsMenu_hover(elm)
{
	for (key in jsMenu_activemenus)
	{
		if (jsMenu_activemenus[key] == true && key != elm.id)
		{
			jsMenu_open(elm);
			return;
		}
	}
}

// #############################################################################
// detect if selectobj overlaps m
function jsMenu_overlap(selectobj, m)
{
	s = new Array();
	s['L'] = fetch_object_posleft(selectobj) - jsMenu_center_marginLeft;
	s['T'] = fetch_object_postop(selectobj);
	s['R'] = s['L'] + selectobj.offsetWidth;
	s['B'] = s['T'] + selectobj.offsetHeight;

	if (s['L'] >= m['L'] && s['L'] <= m['R'] && ((s['T'] >= m['T'] && s['T'] <= m['B']) || (s['B'] >= m['T'] && s['B'] <= m['B']))) { return true; }
	else if (s['R'] >= m['L'] && s['R'] <= m['R'] && ((s['T'] >= m['T'] && s['T'] <= m['B']) || (s['B'] >= m['T'] && s['B'] <= m['B']))) { return true; }
	else if (s['B'] >= m['T'] && s['T'] <= m['B'] && ((s['L'] >= m['L'] && s['L'] <= m['R']) || (s['R'] >= m['R'] && s['R'] <= m['R']))) { return true; }
	else if (m['B'] >= s['T'] && m['T'] <= s['B'] && ((m['L'] >= s['L'] && m['L'] <= s['R']) || (m['R'] >= s['R'] && m['R'] <= s['R']))) { return true; }
	else { return false; }
}

// #############################################################################
// open the clicked menu
function jsMenu_open(elm)
{
	var openmenu = jsMenu_currentactive;

	!jsMenu_open_on_mousemove ? jsMenu_close() : 0;

	if (openmenu == elm.id)
	{
		// clicked element was the control for the currently open menu - exit
		return false;
	}

  //JsMenu_open_on_mousemove && jsMenu_currentactive != elm.id ? jsMenu_closeExt() : 0;

	// get the id of the menu to be opened
	var menuid = jsMenu_getmenuid(elm.id) + "_menu";
	var menuobj = fetch_object(menuid);
	//menuobj.style.zIndex = 101;
	var force_right_slide = false;

	if (typeof(jsMenu_datefields[elm.id]) != "undefined")
	{
		force_right_slide = true;
		fetch_object(elm.id + "_output").innerHTML = fetch_object(jsMenu_datefields[elm.id]).value;
	}
	else
	{
		force_right_slide = false
	}

	jsMenu_activemenus[elm.id] = true;
	jsMenu_currentactive = elm.id;

	// get menu position
  if (jsMenu_alignment[jsMenu_getmenuid(elm.id)]['align'] == 'center')
    var leftpx = fetch_object_posleft(elm) + Math.ceil(elm.offsetWidth / 2) - 1;
  else if (jsMenu_alignment[jsMenu_getmenuid(elm.id)]['align'] == 'right')
    var leftpx = fetch_object_posleft(elm) + elm.offsetWidth;
  else
    var leftpx = fetch_object_posleft(elm);
  if (jsMenu_alignment[jsMenu_getmenuid(elm.id)]['valign'] == 'top')
    var toppx = fetch_object_postop(elm);
  else if (jsMenu_alignment[jsMenu_getmenuid(elm.id)]['valign'] == 'center')
    var toppx = fetch_object_postop(elm) + Math.ceil(elm.offsetHeight / 2) - 1;
  else
    var toppx = fetch_object_postop(elm) + elm.offsetHeight;

  if (!isNaN(jsMenu_alignment[jsMenu_getmenuid(elm.id)]['offset_x']))
    leftpx += jsMenu_alignment[jsMenu_getmenuid(elm.id)]['offset_x'];
  if (!isNaN(jsMenu_alignment[jsMenu_getmenuid(elm.id)]['offset_y']))
    toppx += jsMenu_alignment[jsMenu_getmenuid(elm.id)]['offset_y'];

  if (!isNaN(jsMenu_alignment[jsMenu_getmenuid(elm.id)]['width']))
    menuobj.style.width = jsMenu_alignment[jsMenu_getmenuid(elm.id)]['width'] + 'px';
  if (!isNaN(jsMenu_alignment[jsMenu_getmenuid(elm.id)]['height']))
    menuobj.style.height = jsMenu_alignment[jsMenu_getmenuid(elm.id)]['height'] + 'px';

	// un-hide menu
	menuobj.style.display = '';
	var slidedir = 'left';

  if (jsMenu_alignment[jsMenu_getmenuid(elm.id)]['focus'] && document.getElementById(jsMenu_alignment[jsMenu_getmenuid(elm.id)]['focus']))
    document.getElementById(jsMenu_alignment[jsMenu_getmenuid(elm.id)]['focus']).focus();

  if (!isNaN(jsMenu_alignment[jsMenu_getmenuid(elm.id)]['border_x'])) {
    var borderSpace = document.body.clientWidth - menuobj.offsetWidth - leftpx - jsMenu_alignment[jsMenu_getmenuid(elm.id)]['border_x'];
    while (borderSpace < 0) {
      if (isNaN(thisWidth)) {
        var thisWidth = menuobj.offsetWidth - leftpx - jsMenu_alignment[jsMenu_getmenuid(elm.id)]['border_x'];
      }
      thisWidth--;
      menuobj.style.width = thisWidth + 'px';
      borderSpace = document.body.clientWidth - menuobj.offsetWidth - leftpx - jsMenu_alignment[jsMenu_getmenuid(elm.id)]['border_x'];
    }
  }
  if (!isNaN(jsMenu_alignment[jsMenu_getmenuid(elm.id)]['border_y']) && (document.body.clientWidth - menuobj.offsetHeight - toppx - jsMenu_alignment[jsMenu_getmenuid(elm.id)]['border_y']) < 0)
    menuobj.style.width = (menuobj.offsetHeight - toppx - jsMenu_alignment[jsMenu_getmenuid(elm.id)]['border_y']) + 'px';

	// attempt to keep menu on screen
	if (force_right_slide || (leftpx + menuobj.offsetWidth) >= document.body.clientWidth)
	{
		leftpx = leftpx + elm.offsetWidth - menuobj.offsetWidth;
		slidedir = "right";
	}
	else
	{
		slidedir = "left";
	}

	// shuffle the IE menus a bit
	if (is_ie)
	{
		leftpx += (slidedir == "left") ? -2 : 2;
	}

	var arrScreen = getScreenInfo();

	var scrollPos = getScrollPos();
	toppx -= scrollPos;
	if ((toppx + menuobj.offsetHeight + 5) >= arrScreen['client']['height'])
	{
		//self.status = toppx + '+' + menuobj.offsetHeight + '+5>' + arrScreen['client']['height'];
		toppx = arrScreen['client']['height'] - menuobj.offsetHeight - 5;
	} // else
		//self.status = toppx + '+' + menuobj.offsetHeight + '+5<' + arrScreen['client']['height'];
	toppx = toppx - lOffsetTop + scrollPos;
	leftpx = leftpx - lOffsetLeft;

	//toppx = elm.offsetTop;

	// set menu position
	menuobj.style.left = leftpx + "px";
	menuobj.style.top = toppx + "px";

	if (jsMenu_open_on_mousemove) { // && !jsMenu_click_only[elm.id]) {
    menuobj.onmouseover = jsMenu_overExt;
    menuobj.onmouseout = jsMenu_outExt;
	}

	if (is_ie)
	{
		menuarea = {
			"L" : leftpx,
			"T" : toppx,
			"R" : leftpx + menuobj.offsetWidth,
			"B" : toppx + menuobj.offsetHeight
		};
		selects = document.getElementsByTagName("select");
		for (var i = 0; i < selects.length; i++)
		{
			if (jsMenu_overlap(selects[i], menuarea))
			{
				selects[i].style.visibility = "hidden";
			}
		}
	}

	// slide menus open (internet explorer only)
	if (jsMenu_doslide && !is_opera && !is_ie4)
	{
		if (jsMenu_dofade && is_ie)
		{
			menuobj.filters.item('DXImageTransform.Microsoft.alpha').opacity = 0;
		}

		var intervalX = Math.ceil(menuobj.offsetWidth / jsMenu_opensteps);
		var intervalY = Math.ceil(menuobj.offsetHeight / jsMenu_opensteps);

		if (slidedir == "left")
		{
			menuobj.style.clip = "rect(auto, 0px, 0px, auto)";
			jsMenu_slide_left(menuid, intervalX, intervalY, 0, 0, 0);
		}
		else
		{
			menuobj.style.clip = "rect(auto, auto, 0px, " + (menuobj.offsetWidth) + "px)";
			jsMenu_slide_right(menuid, intervalX, intervalY, menuobj.offsetWidth, 0, 0);
		}
	}

	return false;
}

// #############################################################################
// internet explorer slide menu open left
function jsMenu_slide_left(menuid, intervalX, intervalY, clipX, clipY, opacity)
{
	var menuobj = fetch_object(menuid);

	if (clipX < menuobj.offsetWidth || clipY < menuobj.offsetHeight)
	{
		if (jsMenu_dofade && is_ie)
		{
			opacity += 10;
			menuobj.filters.item('DXImageTransform.Microsoft.alpha').opacity = opacity;
		}
		clipX += intervalX;
		clipY += intervalY;
		menuobj.style.clip = "rect(auto, " + clipX + "px, " + clipY + "px, auto)";
		slidetimer = setTimeout("jsMenu_slide_left('" + menuid + "', " + intervalX + ", " + intervalY + ", " + clipX + ", " + clipY + ", " + opacity + ");", 0);
	}
	else
	{
    if (iFrameMenu) {
			if (menuobj.id != 'jsMenu_Login_menu') {
  			iFrameMenu.style.left = menuobj.style.left;
  			iFrameMenu.style.top = parseInt(menuobj.style.top) + lOffsetTop + 'px';
  			iFrameMenu.style.zIndex = menuobj.style.zIndex - 1;
      	iFrameMenu.style.width = menuobj.offsetWidth;
      	iFrameMenu.style.height = menuobj.offsetHeight;
      	iFrameMenu.style.display = 'block';
		  }
		}
		clearTimeout(slidetimer);
	}
}

// #############################################################################
// internet explorer slide menu open right
function jsMenu_slide_right(menuid, intervalX, intervalY, clipX, clipY, opacity)
{
	menuobj = fetch_object(menuid);

	if (clipX > 0 || clipY < menuobj.offsetHeight)
	{
		if (jsMenu_dofade && is_ie)
		{
			opacity += 10;
			menuobj.filters.item('DXImageTransform.Microsoft.alpha').opacity = opacity;
		}
		clipX -= intervalX;
		clipY += intervalY;
		menuobj.style.clip = "rect(auto, " + menuobj.offsetWidth + "px, " + clipY + "px, " + clipX + "px)";
		slidetimer = setTimeout("jsMenu_slide_right('" + menuid + "', " + intervalX + ", " + intervalY + ", " + clipX + ", " + clipY + ", " + opacity + ");", 0);
	}
	else
	{
    if (iFrameMenu) {
			iFrameMenu.style.left = menuobj.style.left;
			iFrameMenu.style.top = parseInt(menuobj.style.top) + lOffsetTop + 'px';
			iFrameMenu.style.zIndex = menuobj.style.zIndex - 1;
    	iFrameMenu.style.width = menuobj.offsetWidth;
    	iFrameMenu.style.height = menuobj.offsetHeight;
    	iFrameMenu.style.display = 'block';
		}
		clearTimeout(slidetimer);
	}
}

// #############################################################################
// function to navigate to the href of the first found <a> tag
function jsMenu_navtolink(e)
{
	childLinks = this.getElementsByTagName("a");
	if (childLinks[0])
	{
		if (is_ie)
		{
			// use this in IE to send HTTP_REFERER
			childLinks[0].click();
			window.event.cancelBubble = true;
		}
		else
		{
			// other browsers can use this
			if (e.shiftKey)
			{
				window.open(childLinks[0].href);
				e.stopPropagation();
				e.preventDefault();
			}
			else
			{
				window.location = childLinks[0].href;
				e.stopPropagation();
				e.preventDefault();
			}
		}
	}
}

// #############################################################################
// function to toggle the background class of a menu option
function jsMenu_switch_option_bg(e)
{
	if (is_moz)
	{
		moz_rclick(e);
	}
	this.className = (this.className == "jsMenu_option") ? "jsMenu_hilite" : "jsMenu_option";
	jsMenu_hand_pointer(this);
}

// #############################################################################
// function to set the cursor to be pointer/hand
function jsMenu_hand_pointer(obj)
{
	try
	{
		obj.style.cursor = "pointer";
	}
	catch(e)
	{
		obj.style.cursor = "hand";
	}
}

// #############################################################################
// function to initialize a single menu entry
function jsMenu_init(controlid)
{
	var menuid = jsMenu_getmenuid(controlid) + "_menu";
	var menuobj = fetch_object(menuid);

	iFrameMenu = document.getElementById('iFrameMenu');
	if (document.getElementsByTagName && menuobj)
	{
		// do control object
		var controlobj = fetch_object(controlid);
		jsMenu_hand_pointer(controlobj);
		controlobj.unselectable = true;

		if (!jsMenu_click_only[controlobj.id]) {
	    controlobj.onmouseover = jsMenu_eventhandler_mouseover;
	    controlobj.onmouseout = jsMenu_eventhandler_mouseout;
    } else {
      controlobj.onclick = jsMenu_eventhandler_click;
    }

		// don't initialize the same popup menu twice
		if (typeof(jsMenu_initialized[menuid]) != "undefined")
		{
			return;
		}

		// do popup menu object
		var popupobj = fetch_object(menuid);
		popupobj.style.display = "none";
		popupobj.style.position = "absolute";
		popupobj.style.left = "0px";
		popupobj.style.top = "0px";
		//popupobj.onclick = e_by_gum;

		// reset inner table width
		var tables = popupobj.getElementsByTagName("table");
		if (tables.length > 0)
		{
			tables[0].width = "";
		}

		// init popup filters (ie only)
		if (is_ie)
		{
			popupobj.style.filter += "progid:DXImageTransform.Microsoft.alpha(enabled=1,opacity=100)";
			popupobj.style.filter += "progid:DXImageTransform.Microsoft.shadow(direction=135,color=#8E8E8E,strength=3)";
		}

		// do menu options
		var tds = popupobj.getElementsByTagName("td");
		for (var i = 0; i < tds.length; i++)
		{
			if (tds[i].className == "jsMenu_option")
			{
				tds[i].style.cursor = "default";
				if (tds[i].title == "nohilite")
				{
					tds[i].title = "";
				}
				else
				{
					tds[i].onmouseover = jsMenu_switch_option_bg;
					tds[i].onmouseout = jsMenu_switch_option_bg;
					tds[i].onclick = jsMenu_navtolink;

					if (!is_saf && !is_kon)
					{
						try
						{
							var links = tds[i].getElementsByTagName("a");
							for (var j = 0; j < links.length; j++)
							{
								if (typeof(links[j].onclick) == "undefined")
								{
									links[j].onclick = e_by_gum;
								}
							}
						}
						catch(e)
						{
							// hmm
						}
					}
				}
			}
			else if (is_moz)
			{
				tds[i].onmouseover = moz_rclick;
				tds[i].onmouseout = moz_rclick;
			}
		}

		jsMenu_initialized[menuid] = true;
	}
}

function returnfalse()
{
	return false;
}

function moz_rclick(e)
{
	if (e.type == 'mouseover')
	{
		document.onclick = '';
	}
	else
	{
		document.onclick = jsMenu_close;
	}
}
