/**
 * JQuery mainMenuEntry
 * 
 * Diese Methode wird an alle Hauptmenu-Eintrage (über die Klasse) gebunden. 
 * 
 * Hier werden die Mouseactions festgelegt
 * - mouseover
 * - mouseout
 * - click
 * 
 *  Die Variable 'm_menuStatus' gibt an in welchem Modus sich das Menü befindet.
 *  0 - Es wird das Hauptmenu gehighlightet aber es klapt nicht auf.
 *  1 - Es wird das Hauptmenu gehighlightet und es klapt auf.
 *  
 *  Die Variable 'm_menuObjectOpen' erhält das Hauptmenuobject das geöffnet ist.
 */
var m_menuStatus=0;
var m_menuObjectOpen;
var m_strMenuHighlightClassName="";

var m_bShowMenu=true;		// wird das Menu angezeigt [true/false]
jQuery.fn.mainMenuEntry = function(className)
{
	m_strMenuHighlightClassName = className;
	this.each(function()
	{
		$(this).bind
		(
			'mouseover', 
			function()
			{
				$(".mainMenuEntry").removeClass(className);

				if(m_menuStatus==1)
					mainMenuAction(this);

				$(this).addClass(className);
				$("#img_title").attr("src",$(this).attr("img"));
			}
		);
			
		$(this).bind
		(
			'mouseout', 
			function()
			{
				if(this != m_menuObjectOpen)
				{
					$(this).removeClass(className);
					$("#img_title").attr("src","images/titleDefault.gif");
				}
			}
		);

		$(this).bind
		(
			'click', 
			function()
			{
				var strTitle = $(this).attr("title"); 
				var strTarget = $(this).attr("target"); 
				if(typeof strType == "undefined")
					strType="html";
				var strAction = $(this).attr("action");
				if(typeof strAction != 'undefined')
				{
					loadHTML(strAction, 'undefined', 'undefined', strTitle, strTarget);
				}
				
				if(typeof $(this).attr("noSubMenu") == 'undefined')
				{
					if(m_menuStatus==0)
					{
						m_menuStatus=1;
						mainMenuAction(this);
					}
					else
					{
						m_menuStatus=0;
						m_menuObjectOpen="undefined";
						$(".subMenu").css("display","none");
					}
				}
			}
		);
	});
}

/**
 * Untermenü des Entsprechenden Menüs öffnen
 * 
 * @param in_object
 */
function
mainMenuAction(in_object)
{
	$(".subMenu").css("display","none");			// schließen aller Untermenüs
	$("#sub"+in_object.id).css("display","block");	// ausgewähltes untermenu anzeigen
	
	m_menuObjectOpen = in_object;					// Hauptmenü-Object sichern 
	subMenuSetPos();								// Positionierung des Menüs veranlassen
}

/**
 * Position des Untermenüs festlegen 
 */
function
subMenuSetPos()
{
	if(typeof m_menuObjectOpen != "undefined")
	{
		var pos = $(m_menuObjectOpen).offset();
		var nHeight = $(m_menuObjectOpen).outerHeight();
	
		$("#sub"+m_menuObjectOpen.id).css("top",pos.top+nHeight);
		$("#sub"+m_menuObjectOpen.id).css("left",pos.left);
	}	
}

/**
 * JQuery subMenuEntry
 * 
 * Diese Methode wird an alle Untermenu-Eintrage (über die Klasse) gebunden. 
 * 
 * 
 */
jQuery.fn.subMenuEntry = function(className)
{
	this.each(function()
	{
		$(this).bind
		(
			'mouseover', 
			function()
			{
				$(this).addClass(className);
			}
		);
			
		$(this).bind
		(
			'mouseout', 
			function()
			{
				$(this).removeClass(className);
			}
		);
		$(this).bind
		(
			'click', 
			function()
			{
				var strTitle = $(this).attr("title"); 
				var strType = $(this).attr("type"); 
				if(typeof strType == "undefined")
					strType="html";
				var strTarget = $(this).attr("target"); 

				var strAction = $(this).attr("action"); 
				if(typeof strAction == "undefined")
				{
					alert("Keine Aktion angegeben!");
					return;
				}

				if(strType == "html")
				{
					closeMenu();
					loadHTML(strAction, 'undefined', 'undefined', strTitle, strTarget);
				}
				else
					alert("Unbekannter Type ("+strType+")");
			}
		);
	});
}

/**
 * Schließt das Menu.
 * @return
 */
function
closeMenu()
{
	$(".subMenu").css("display","none");			// schließen aller Untermenüs
	$(".mainMenuEntry").removeClass(m_strMenuHighlightClassName);
	m_menuStatus=0;
}
/**
 * Diese Funktion sorgt für das laden des Menüs.
 * 
 * Nach dem Laden wird die Methode 'parseMenuXML' aufgerufen 
 */
function
loadMenu(in_strFilename)
{
	$.ajax(
	{
		type: "GET",
		url: in_strFilename,
		dataType: "xml",
		success: parseMenuXML
	 });
}

/**
 * Hier wird das Menü aufgrund der XML aufgebaut.
 * 
 * @param in_xml
 * @return
 */
function 
parseMenuXML(in_xml)
{
	var nCountMenuEntry=0; 	// <-- Anzahl der Menueeintrage

	$("#menu").html("<tr id=menuTR></tr>");

	// -----------------------
	// --- XML durchsuchen ---
	// -----------------------
  	$(in_xml).find("menuEntry").each(function()
  	{
  		nCountMenuEntry ++;		

  		// --- ID des Menueentries ---
  		var strID=$(this).attr("id");
		if(typeof strID == 'undefined')
			strID="menuEntry_"+nCountMenuEntry;

		// --- td-Tag erstellen ---
		var tagMenuEntry=$("<td align=center>&nbsp;&nbsp;"+$(this).attr("value")+"&nbsp;&nbsp;</td>")
			.attr("title",$(this).attr("value"))
			.attr("id",strID)
			.attr("class","mainMenuEntry")
			.appendTo("#menuTR")
			;
		
		if(typeof $(this).attr("img") != 'undefined')
			tagMenuEntry.attr("img",$(this).attr("img"));

		if(typeof $(this).attr("action") != 'undefined')
			tagMenuEntry.attr("action",$(this).attr("action"));

		if(typeof $(this).attr("target") != 'undefined')
			tagMenuEntry.attr("target",$(this).attr("target"));
		else
			tagMenuEntry.attr("target","default");

		if($(this).find("subMenuEntry").length > 0)
		{
			// --- submenu erstellen (div-Tag) ---
			var tagSubMenuEntry=$("<div style=\"display:none; position:absolute; z-index:1100 \"></div>")
				.attr("id","sub"+strID)
				.attr("class","subMenu")
				.appendTo("#top")
				;
	
			// --- submenu erstellen (table-Tag) ---
			var tagTable = $("<table border=1 cellpadding=0 cellspacing=0 rules=\"none\" bgcolor=\"#f4f6fb\"></table>")
							.appendTo(tagSubMenuEntry);
	
			// --- subMenu lesen und erstellen ---
			$(this).find("subMenuEntry").each(function()
		    		{
						var tagTR=$("<tr></tr>");
						var target = "default";
						if(typeof $(this).attr("target") != 'undefined')
							target = $(this).attr("target");

						$("<td>&nbsp;" + $(this).attr("value") + "&nbsp;</td>")
							.attr("title",$(this).attr("value"))		// SPRUNG von value -> title
							.attr("class","subMenuEntry")
							.attr("action",$(this).attr("action"))
							.attr("target",target)
							.appendTo(tagTR);
	
						tagTR.appendTo(tagTable);
		    		});
		}
		else
			tagMenuEntry.attr("noSubMenu","true");
	});

	// ---------------------
  	// --- menu anzeigen ---
	// ---------------------
	$("#menu").dropShadow();
	$('.mainMenuEntry').mainMenuEntry('highlight_menu');
	$('.subMenuEntry').subMenuEntry('highlight_menu');
}

/**
 * Diese Funktion sorgt für das nachladen von HTML.
 */
function
loadHTML(in_strAction, in_nSpeedOut, in_nSpeedIn, in_strTitle, in_strTarget)
{
	if(typeof in_strTarget != 'undefined' && in_strTarget != 'default')
	{
		window.open(in_strAction, target=in_strTarget, 'width=800,height=600,left=20,top=20,scrollbars=yes');
		return;
	}
	
	if(typeof in_nSpeedOut == 'undefined')
		in_nSpeedOut=500;

	if(typeof in_nSpeedIn == 'undefined')
		in_nSpeedIn=500;
	
	if(typeof in_strTitle == 'undefined')
		in_strTitle="";	// ### startSide ;-) 

	var loadHandler = function(html, status, xhr)
						{
							if(status != 'success')
							{
								$("#loadedSide").text(""); 
								$("#loadedSide").append("<b>Fehler beim laden der Seite ('"+ in_strAction +"')!</b>"); 
							}
							else
							{
								// --- wenn function 'loadedAction' vorhanden dann auch ausfuehren ---
								if(typeof loadedAction == 'function')
								{
									loadedAction();
								}

								$("#menuEntryHeader").load("defaults/menuEntryHeader.html", function(html, status, xhr)
									{
										$("#menuEntryValueAsText").text(in_strTitle);
										$('.highlightNormal').highlightNormal('highlight_default');
									});
								$("#menuEntryValueAsText").text(in_strTitle);
								$('.highlightNormal').highlightNormal('highlight_default');
							}
							
							$("#body").scrollTop(0); 
							$("#body").fadeTo(in_nSpeedIn, 1);
						};

	$("#body").fadeTo(in_nSpeedOut, 0, function() 
						{
							$("#loadedSide").load(in_strAction, loadHandler);
	  					})
}

// ----------------------------------------------- from Settings ----------------
var m_nTmp_cssTopHeight=0;
function
menuShow()
{
	m_cssTopHeight = m_nTmp_cssTopHeight;
	$("#cssTopHeight").val(m_cssTopHeight);

	//	$('#top').slideDown();
	$('#top').animate({height: m_cssTopHeight},1000);
	$('#body').animate({height: $(window).height()-(m_cssTopHeight+m_cssFooterHeight), top: m_cssTopHeight},1000);

}
function
menuHide()
{
	m_nTmp_cssTopHeight = m_cssTopHeight;
//	$('#top').slideUp();
	$('#top').animate({height: 0},{duration:1000,complete: function(){$('#top').css("display","none");}});
	$('#body').animate({height: $(window).height()-(0+m_cssFooterHeight), top: 0},1000);
	
	m_cssTopHeight=0;
	$("#cssTopHeight").val(m_cssTopHeight);
}

function
switchShowMenu()
{
	if(m_bShowMenu == true) 
	{
		m_bShowMenu=false;
		menuHide();
		$("#img_SwitchMenu").attr("src","images/menuActionDown.gif");
	} 
	else 
	{
		m_bShowMenu=true;
		menuShow();
		$("#img_SwitchMenu").attr("src","images/menuActionUp.gif");
	}
}

function
exitAction()
{
	$("#body").fadeTo(400, 0, function() 
				{
					$("#loadedSide").text("");
	  			});
	 
}


