/* ---------------------------------------------------------------------------------------------------------------- */
/* Portale Javascript		    																					*/
/* Wirth & Horn Informationssysteme GmbH																			*/
/* 17.07.2009 KM																									*/
/* ---------------------------------------------------------------------------------------------------------------- */

var highlightedElements = new Array();
var openedSubmenus = false;

$(document).ready(function() {
	/**
	 * Submenüs mit jQuery Plugin Superfish "aus-sliden" lassen
	 */
	$('div.portal_subnavi ul').superfish({
		autoArrows: false, 
		animation: { left: '260px', opacity:'show', width: 'show' }, 
		delay: 0,
		speed: 'fast',
		onShow: function() { openedSubmenus = true; changeDirection(this);  },
		onHide: function() { openedSubmenus = false; }		
	});
	/**
	 * Bei Hover der Links, die Bilder mit der schwarzen Schrift
	 * durch die mit der weissen ersetzen. Beim Un-Hover umgegkehrt.
	 */
	$("a.portal_headernavi").hover(
		// Highlight hinzufügen
		function (e) {
			var element_id = getIdFromClass($(this).parent("li:eq(0)").get(0));
			setPortalHighlight(element_id,true);
		},
		// Highlight entfernen
		function (e) {
			var element_id = getIdFromClass($(this).parent("li:eq(0)").get(0));
			setPortalHighlight(element_id,false);
		}
	);
	window.setInterval(checkSubmenu,1000);
});

/**
 * Püfen ob ein Submenü ausgelappt ist, sollte dies
 * nicht der Fall sein wird das Default Menü ange-
 * zeigt
 */
function checkSubmenu() {
	if(openedSubmenus == false && typeof(page_id) != "undefined" && typeof(parent) != "undefined") {
		openMenu(page_id,parents);
	}
}

/**
 * ID aus Klassenname extrahieren
 * @param Object element Referenz auf DOM-Element
 */
function getIdFromClass(element) {
	return parseInt(element.className.replace("portal_subnavi_li_",""));
}

/**
 * Highlight eines Menüpunktes setzen
 * @param integer id ID der Katalogseite
 * @param bool highlight Highlight an oder aus
 */
function setPortalHighlight(id,highlight) {
	if(highlight == true) {
		var pos = arrayFind(highlightedElements,id);
		if(pos < 0) {
			highlightedElements.push(id);
			//
			// Textfarbe
			//
			var $elementLI  = $("li.portal_subnavi_li_" + id);
			var $elementA   = $elementLI.find("a:eq(0)");
			var $elementIMG = $elementA.find("img:eq(0)");
			if($elementIMG.length > 0) { $elementIMG.attr("src",$elementIMG.attr("src").replace("_black","_white")); }			
			//
			// Linien
			//
			$nextA = $elementLI.next("li:eq(0)").find("a:eq(0)"); 
			$elementA.css("background-image",$elementA.css("background-image").replace("_black","_white"));
			$nextA.css("background-image",$elementA.css("background-image").replace("_black","_white"));
			//
			// Letztes LI --> UL Background ändern
			//
			if($nextA.length == 0) {
				var $elementUL = $elementLI.parent("ul:eq(0)");
				$elementUL.css("background-image",$elementUL.css("background-image").replace("_black","_white"));
			}
		}
	}
	else {
		var blacklist = parents.split(",");
		blacklist.push("" + page_id + "");
		var pos = arrayFind(highlightedElements,id);
		if(pos >= 0 && arrayFind(blacklist,id) < 0) {
			highlightedElements.splice(pos,1);
			//
			// Textfarbe
			//
			var $elementLI  = $("li.portal_subnavi_li_" + id);
			var $elementA   = $elementLI.find("a:eq(0)");
			var $elementIMG = $elementA.find("img:eq(0)");
			if($elementIMG.length > 0) { $elementIMG.attr("src",$elementIMG.attr("src").replace("_white","_black")); }		
			//
			// Linien
			//
			$nextA = $elementLI.next("li:eq(0)").find("a:eq(0)"); 
			$elementA.css("background-image",$elementA.css("background-image").replace("_white","_black"));
			$nextA.css("background-image",$elementA.css("background-image").replace("_white","_black"));
			//
			// Letztes LI --> UL Background ändern
			//
			if($nextA.length == 0) {
				var $elementUL = $elementLI.parent("ul:eq(0)");
				$elementUL.css("background-image",$elementUL.css("background-image").replace("_white","_black"));
			}
		}
	}
}

/**
 * Position von Element in Array ermitteln
 * @param Array arr  Array, in dem gesucht werden soll
 * @param Mixed elem Element, dass in Array gesucht werden soll
 * @return Integer Position, an dem sich das Element befindet,
 *                 -1 wenn nicht gefunden
 */
function arrayFind(arr,elem) {
	for(var i=0;i<arr.length;i++) {
		if(arr[i] == elem) return i;
	}
	return -1;
}

/**
 * Aktuellen Menüpunkt ausklappen und highlighten
 * @param elements ID-Liste mit Element-IDs
 */
function openPortalSubmenu(elements) {
	for(var i=0;i<elements.length;i++) {
		var element_id = parseInt(elements[i]);
		var $currUl = $("ul.portal_subnavi_ul_" + element_id);
		$currUl.css({"visibility":"visible","display":"block","left":"260px"});
		//
		// src des aktuellen Images austauschen
		//
		var $currLi = $currUl.parent("li");
		if($currLi.length == 0) {
			$currLi = $("li.portal_subnavi_li_" + element_id);
		}
		var $currImg = $currLi.find("a:eq(0)").find("img:eq(0)");
		if($currImg.length > 0) { $currImg.attr("src",$currImg.attr("src").replace("_black","_white")); }
		//
		// Hintergrundgrafiken der Link-Tags setzen
		//
		var $currA = $currLi.find("a:eq(0)");
		var $nextA = $currLi.next("li").find("a:eq(0)");
		if($currA.length > 0) { $currA.css("background-image",$currA.css("background-image").replace("_black","_white")); }
		if($nextA.length > 0) { $nextA.css("background-image",$nextA.css("background-image").replace("_black","_white")); }
		//
		// Untermenüpunkt auf active setzen
		//
		var $currSubLi = $("li.portal_subnavi_li_" + element_id);
		var $currSubA  = $currSubLi.find("a:eq(0)");
		$currSubA.css("color","white");
	}
	// Menü evtl. nach oben aufklappen lassen
	$element = $("ul.portal_sub").each(function () {
		if($(this).css("display") != "none") {
			changeDirection($(this));
		}
	});
}

/**
 * Lässt Menüs nach oben aufklappen, wenn zu wenig
 * Platz nach unten frei ist.
 */
function changeDirection($element) {
	var top_header     = 60;
	var height_header  = 300;
	var magic_number   = 16; // ;-) Was soll ich machen?, KM 12.04.2010: scheint padding-top zu sein
	var height_submenu = parseInt($element.height());
	var top_submenu    = parseInt($element.parent("li:eq(0)").offset().top) - top_header;
	var overflow_sub   = height_header - (top_submenu + height_submenu);
	var changeDirect   = overflow_sub < 0;
	if(changeDirect == true) {
		$element.css({
			 "top" : height_submenu * -1 + magic_number
			,"background-position" : "bottom"
			,"padding-bottom" : "5px"
		});
	}
}