/**
 * Ermittelt die vertikale (Y) Position eines Seitenelements 
 * in Bezug auf die Seite (oberstes Elternelement)
 *
 * @param DOM Element, dessen Position bestimmt werden soll
 *
 */
function pageY(elem) {
	// see if we're at the root element or not
	return elem.offsetParent ?

		// if we can still go up, add the current offset and recurse upwards
		elem.offsetTop + pageY(elem.offsetParent) :

		// otherwise, just get the current offset
		elem.offsetTop;
}


// http://www.softcomplex.com/docs/get_window_size_and_scrollbar_position.html
function f_clientWidth() {
	return f_filterResults (
		window.innerWidth ? window.innerWidth : 0,
		document.documentElement ? document.documentElement.clientWidth : 0,
		document.body ? document.body.clientWidth : 0
	);
}

// http://www.softcomplex.com/docs/get_window_size_and_scrollbar_position.html
function f_clientHeight() {
	return f_filterResults (
		window.innerHeight ? window.innerHeight : 0,
		document.documentElement ? document.documentElement.clientHeight : 0,
		document.body ? document.body.clientHeight : 0
	);
}

// http://www.softcomplex.com/docs/get_window_size_and_scrollbar_position.html
function f_scrollLeft() {
	return f_filterResults (
		window.pageXOffset ? window.pageXOffset : 0,
		document.documentElement ? document.documentElement.scrollLeft : 0,
		document.body ? document.body.scrollLeft : 0
	);
}

// http://www.softcomplex.com/docs/get_window_size_and_scrollbar_position.html
function f_scrollTop() {
	return f_filterResults (
		window.pageYOffset ? window.pageYOffset : 0,
		document.documentElement ? document.documentElement.scrollTop : 0,
		document.body ? document.body.scrollTop : 0
	);
}

// http://www.softcomplex.com/docs/get_window_size_and_scrollbar_position.html
function f_filterResults(n_win, n_docel, n_body) {
	var n_result = n_win ? n_win : 0;
	if (n_docel && (!n_result || (n_result > n_docel)))
		n_result = n_docel;
	return n_body && (!n_result || (n_result > n_body)) ? n_body : n_result;
}


/**
 * Macht das bereits vorhandene div mit der angegebenen ID sichtbar
 * ("Ausklappen" des Submenus)
 *
 * @param String ID des DIVs, das angezeigt werden soll
 * @param String Nummer der Menüebene
 *
 */
function showMenu(strID, strLevel) {
	var strMenuThisLevel = "#menu_level" + strLevel + "_" + strID;
	var strMenuNextLevel = "#menu_level" + (strLevel+1) + "_" + strID;
	var strMenuThisLevelDOM = "menu_level" + strLevel + "_" + strID;
	var strMenuNextLevelDOM = "menu_level" + (strLevel+1) + "_" + strID;

	$(strMenuThisLevel).mouseover(function(e) {
		$(strMenuNextLevel).show();

		// erfordert "position:fixed" beim Element
		var xpos = 0;
		if (1 == strLevel) {
			xpos = $(strMenuThisLevel + ":selection").offset().left + 140;
		}
		else {
			xpos = $("ul.menu_left").offset().left + 30 + (strLevel * 120);
		}

		// if (document.height < 650) {
		
		// Menü an Mausposition (Y), ist im MSIE nicht so zuverlässig,
		// aber immer an der richtigen Position
		// $(strMenuNextLevel).css( 'top', (e.pageY - 10) + 'px' ); 

		// Position relativ zum oberen Seitenrand; funktioniert nur, wenn
		// Scrollbar ganz oben steht. Das ist der Fall, wenn das Browserfenster
		// hoch genug ist.
		// in Level 1 zusätzlich Scrollbarposition abziehen
		var yp = pageY(document.getElementById(strMenuThisLevelDOM));
		if (1 == strLevel) {
			yp = yp  - f_scrollTop();
		}
		$(strMenuNextLevel).css( 'top', yp + 'px' );

		$(strMenuNextLevel).css( 'left', xpos + 'px' );

	}).mouseout(function() {
		$("div" + strMenuNextLevel).hide();
	});

	// Ein- / Ausblenden des DIVs für die nächste Ebene.
	// Die Timer-Steuerung verhindert das "Zucken" der Menüeintrage im Internet-Explorer
	$(strMenuNextLevel).mouseover(function(e) {
		$(strMenuNextLevel).stopTime();
		$(strMenuNextLevel).show();
	}).mouseout(function() {
		$(this).oneTime(200, function() {
			$(strMenuNextLevel).hide();
		});
	});

}


/**
 * OBSOLETE
 *
 * Macht das bereits vorhandene div mit der angegebenen ID sichtbar
 * ("Ausklappen" des Submenus)
 *
 * @param String ID des DIVs, das angezeigt werden soll
 *
 */
function _obsolete_showMenu(strID) {
    $("#submenu_level2_" + strID).hide();
    $("#menu_level2_" + strID).mouseover(function() {
        $("#submenu_level2_" + strID).show();
    }).mouseout(function() {
        $("#submenu_level2_" + strID).hide();
    });

    $("#submenu_level2_" + strID).mouseover(function() {
        $("#submenu_level2_" + strID).show();
    }).mouseout(function() {
        $("#submenu_level2_" + strID).hide();
    });

}


