/*dependency:de.datev.dom*/
/*dependency:de.datev.events*/
/*global de*/
de = this.de || {};
de.datev = de.datev || {};
de.datev.portal = de.datev.portal || {};
de.datev.portal.flyout = function () {
    var thisNamespace = de.datev.portal.flyout || {};

////////////////////////////////////////////////////////////////
/////////// Ausklappbare Menues  ///////////////////////////////
////////////////////////////////////////////////////////////////

	var initFlyouts = function () {

		var dom = de.datev.dom;
		var events = de.datev.events;

		////////////////////////////////////////////////////////////////
		//Metanavigation
		var metanav= document.getElementById("metanav");
		var metanavLIs = metanav && dom.getChildren(metanav, "li");

		if (metanavLIs && metanavLIs.length > 0) for(var i = 0; i < metanavLIs.length; i++)
		{
			var metaLI = metanavLIs[i];

			events.addEvent(metaLI, "mouseover", showFlyout(metaLI));
			events.addEvent(metaLI, "mouseout", hideFlyout(metaLI));

		}/*end - metanavLIs*/


		////////////////////////////////////////////////////////////////
		//Navigation 1
		var nav1 = document.getElementById("nav1");
		var nav1LIs = nav1 && dom.getChildren(nav1, "li");

		if (nav1LIs && nav1LIs.length > 0) for(var m = 0; m < nav1LIs.length; m++)
		{
			var nav1LI = nav1LIs[m];
			//Flyout anzeigen
			events.addEvent(nav1LI, "mouseover", showFlyout(nav1LI));
			events.addEvent(nav1LI, "mouseout", hideFlyout(nav1LI));
		}

		////////////////////////////////////////////////////////////////
		//Navigation 2
		var nav2 = document.getElementById("nav2");
		var nav2LIs = nav2 && dom.getChildren(nav2, "li", true);
		if (nav2LIs && nav2LIs.length > 0) for(var m = 0; m < nav2LIs.length; m++)
		{
			var elemLi = nav2LIs[m];
			if (dom.hasClass(elemLi, "flyout")) {
				var elemsUl = dom.getChildren(elemLi, "ul");
				if (elemsUl && elemsUl.length > 0) {
					events.addEvent(elemsUl[0], "mouseover", function(evt) {
						var flyout = dom.getParent(events.getSrcElement(evt), "ul");
						var links = dom.getChildren(flyout.parentNode, "a");
						if (links && links.length > 0) dom.addClass(links[0], "over");
					});
					events.addEvent(elemsUl[0], "mouseout", function(evt) {
						// Handelt es sich bei "this" um ein DOM-Objekt?
						var flyout = this.nodeType ? this : dom.getParent(events.getSrcElement(evt), "ul");
						var links = dom.getChildren(flyout.parentNode, "a");
						if (links && links.length > 0) dom.removeClass(links[0], "over");
					});
				}
			}
		}
		
		///////////////////
		// Navigation 2 - Zeitverzögerung vor dem Einblenden des gesamten Pfades
		// Such zuerst das "li"_Element mit dem Class oder Id ???
		if (nav2)
		{
			var nav2PfadZeigenButtons = dom.getElementsByTagAndClassName("li","tree");
			// add "mouseOver"-Event
			if (nav2PfadZeigenButtons && nav2PfadZeigenButtons.length > 0) {
				events.addEvent(nav2PfadZeigenButtons[0], "mouseover", function(evt) {
	
					var currentOver = events.getSrcElement(evt);
					var liTree = dom.getParent(currentOver, "li");
					
					//Stop if not <li class="tree ...">
					if (!dom.hasClass(liTree, "tree"))
					{
						return;
					}
					
					dom.addClass(liTree, "inaktiv"); // Fügt diese CSS-Klasse, um das flyout zu vermeiden 
	
					window.setTimeout(
							function() {
								try {
									//Nur anzeigen, wenn ich während des Timeouts nicht rausgehe
									if(dom.hasClass(liTree, "inaktiv")){
										dom.removeClass(liTree, "inaktiv"); // entfernt dieser CSS-Klasse, um das Flyout zu ermöglichen
									}
								}
								catch(e) {}
						}, 500); //hiermit wird die Anzeige des Flyout ein wenig verzögert 
				});
			}
		}
	};

	// Flyout einblenden
	var showFlyout = function (liElem) {
		return function(e)
		{
			de.datev.dom.addClass(liElem, "on");
		}
	};

	//Flyout ausblenden
	var hideFlyout = function (liElem) {
		return function(e)
		{
			de.datev.dom.removeClass(liElem, "on");
		}
	};


    //////////////////////////////////////////////////////
    // PUBLIC
    //////////////////////////////////////////////////////
    thisNamespace.initFlyouts = initFlyouts;

    return thisNamespace;
}(); // de.datev.portal.flyout



////////////////////////////////////////////////////////////////
// Ausfuehrung
////////////////////////////////////////////////////////////////
de.datev.events.addEvent(window, "load", de.datev.portal.flyout.initFlyouts);
