// ---------------------------------------------------------------------------------------------------------------------
//	Copyright 2003 Harry A. Riegger 
//
// Zweck:
//	Darstellung eines Menüs am rechten Rand
//
// Erstellt am: 01/2003
// Modifiziert am:	von:			Grund:
// 11/2004	Harry A. Riegger 	Einfachere Administration
//					Erstellung von CreateMenuItem
// 12/2004	Harry A. Riegger	Anzeige Hauptmenü benutzerfreundlicher gestaltet
// 10/2005	Harry A. Riegger	Submenüanzeige auf Hauptebene verbessert
// 01/2006	Harry A. Riegger	Submenüs der Submenüs auf Hauptebene werden angezeigt und Anzeige der Statuszeile
// 01/2006	Harry A. Riegger	Umstellung Hauptmenü auf CSS (ohne Tabelle)
// 02/2006	Harry A. Riegger	Bereinigungen
// 03/2008	Harry A. Riegger	Farben per Stylesheet-Konfiguration
// 09/2009 	Harry A. Riegger  Entfernung Statuszeile
//
// ---------------------------------------------------------------------------------------------------------------------


// Definition von globalen Variablen
var Menue   = new Array();	//
var MenueName = new Array();	//
var cn_men  = ''; // Klassename Menüpunktes
var font    = 'Verdana';	// Schriftarten des Menüs
var fontgr  = 10;	// Größe der Schriftzeichen des Menüs
var posl    = 10;	// Abstand des Hauptmenüs vom linken Rand in Pixel
var poso    = 160;	// Abstand des Hauptmenüs vom oberen Rand in Pixel
var menl    = 170;	// Breite des Hauptmenüs in Pixel
var menr    = 3;	// Innenabstand zum Rand
var borderr = 2;	// Abstand der Menüpunkte
var Pfad    = "http://www.schachkreis-suedschwaben.de/";
var imgPfad = Pfad + "img/";
var logo    = '<img src="' + imgPfad + 'knight.jpg" style="border:0; width:10px; height:15px" alt="Springer" />';	// Standardimage
var logon   = '<img src="' + imgPfad + 'neu.gif" style="border:0; width:10px; height:15px" alt="Neu" />';	// Neu-Image
var pfeil   = '<img src="' + imgPfad + 'arrow_w.gif" style="border:0; width:7px; height:7px" alt="Pfeil" />';	// Pfeil-Image bei untergeordneten Menüs

// Initialisierungs-Funktion für das Objekt Menue
//
// Paramterbedeutung:
//	text:		angezeigter Text
//	url:		Seite, die angezeigt werden soll, wenn Menüpunkt aktiviert wird
//	titel:	Titel-Einblendung des Links
//	neu:		Ist Seite neu bzw. geändert?
//
//
function Menu(text, url, titel, neu)
{
	this.text		= text;
	this.url		= url;
	this.titel		= titel;
	this.neu		= neu;
	this.SubMenue		= new Array();		// Array, welches das Submenü enthält
}
// Initialisierungs-Funktion für das Objekt MenueName
//
// Paramterbedeutung:
//	name:		eindeutiger Name für das Menüelement
//
//
function MenuName(name)
{
	this.name		= name;
	this.SubMenue		= new Array();		// Array, welches das Submenü enthält
}

// Funktion zum Aufbau des Menü-Objektes
//
// Paramterbedeutung:
//	ebene:	Menüebene (z. B. 1.1.3)	
//	name:	eindeutiger Name für das Tabellenelement
//	text:	angezeigter Text
//	url:	Seite, die angezeigt werden soll, wenn Menüpunkt aktiviert wird
//	titel:	Titel-Einblendung des Links
//
function MenuItem(ebene, text, url, titel, neu)
{
	var level = ebene.split(".");	// Ebene aufsplitten
	var lev = level.length;		// Anzahl Level ermitteln
	var aMenu;			// Hilfsmenü

	if (lev == 1)
	{
		Menue[parseInt(level[0])] = new Menu(text, url, titel, neu);
	}
	else
	{
		aMenu = Menue[parseInt(level[0])];
		for (var i = 1; i < (lev - 1); i++) aMenu = aMenu.SubMenue[parseInt(level[i])];
		aMenu.SubMenue[parseInt(level[i])] = new Menu(text, url, titel, neu);
	}
}

// Funktion zum Erstellen des neuen Menülevels
//
// Paramterbedeutung:
//	aMenue:	Daten des neuen Menüpunktes
//	name:	Name des neuen Menüobjektes
//
function MakeNewMenue(aMenue, name)
{
	var level = name.split("_");	// ebene aufsplitten
	var lev = level.length;		// Anzahl level ermitteln
	var aMenu;			// Hilfsmenü
	var hlev = parseInt(level[1]);	// Menüebene

	if (lev == 2)
	{
		Menue[hlev] = new Menu(aMenue.text, aMenue.url, aMenue.titel, aMenue.neu);
		for (var i = 1; i < aMenue.SubMenue.length; i++) MakeNewMenue(aMenue.SubMenue[i], name + "_" + String(i));
	}
	else
	{
		aMenu = Menue[hlev];
		for (var i = 2; i < (lev - 1); i++) aMenu = aMenu.SubMenue[parseInt(level[i])];
		aMenu.SubMenue[parseInt(level[lev - 1])] = new Menu(aMenue.text, aMenue.url, aMenue.titel, aMenue.neu);
		for (var i = 1; i < aMenue.SubMenue.length; i++) MakeNewMenue(aMenue.SubMenue[i], name + "_" + String(i));
	}
}

// Funktion zum automatischen Erstellen weiterer Menüebenen
//
// Paramterbedeutung:
//	ebene:	Anzahl Ebenen
//
function CreateMenuItem(ebene)
{
	var level = ebene.split(".");	// Ebene aufsplitten
	var lev = level.length;		// Anzahl Level ermitteln
	var aMenu;			// Hilfsmenü

	for (var i = 2; i < (lev + 2); i++)
	{
		aMenu = Menue[1].SubMenue[parseInt(level[0])];
		for (var j = 1; j < (i - 1); j++) aMenu = aMenu.SubMenue[parseInt(level[j])];
		MakeNewMenue(aMenu, "menu_" + String(i));
	}
}

// Funktion, um Untermenü auszublenden
//
// Parameter:
//	id:	id des Untermenüs
//
function klappEin(name)
{
	var level = name.split("_");		// Menünr. aufsplitten
	var lev = level.length;			// Anzahl Menüs ermitteln
	var aName = MenueName[parseInt(level[1])];	// Hilfsvariable mit Menünamen

	for (var i = 1;i < lev;i++)
	{
		if (aName.SubMenue.length > 0)
		{
			document.getElementById(aName.name).style.visibility = "hidden";
			aName = aName.SubMenue[parseInt(level[i + 1])];
		}
	}
}

// Funktion, um Untermenü einzublenden
//
// Parameter:
//	id:	id des Untermenüs
//
function klappAus(name)
{
	var level = name.split("_");		// Menünr. aufsplitten
	var lev = level.length;			// Anzahl Menüs ermitteln
	var aName = MenueName[parseInt(level[1])];	// Hilfsvariable mit Menünamen

	for (var i = 1;i < lev;i++)
	{
		if (aName.SubMenue.length > 0)
		{
			document.getElementById(aName.name).style.visibility = "visible";
			aName = aName.SubMenue[parseInt(level[i + 1])];
		}
	}
}

// Funktion, um Farbe des Menüpunktes, der gerade unter der Maus ist, zu ändern
//
// Parameter:
//	id:	id des Menüpunktes
//	farbe:	Farbe 
//
function hoverEin(id)
{
	var dieZeile = document.getElementById(id);
	cn_men = dieZeile.className; 
//	if (fcol == "") fcol = document.getElementById("hover_farbe").style.backgroundColor;
//	fcol = document.styleSheets[0].cssRules[11].style.background;
//	dieZeile.style.backgroundColor = fcol;
	dieZeile.className = cn_men + "_h";
}

// Funktion, um Farbe des Menüpunktes, der gerade unter der Maus war, wiederherzustellen
//
// Parameter:
//	id:	id des Menüpunktes
//	farbe:	Farbe 
//
function hoverAus(id)
{
	var dieZeile = document.getElementById(id);
//	dieZeile.style.backgroundColor = bgcol;
	dieZeile.className = cn_men;
}


// Funktion, um die Anzeigenamen im Menü auf gleiche Länge zu bekommen
//
// Parameter:
//	namen: Array mit Namen der Anchors
//
function Stretch(namen)
{
	var l = 0;	// Länge des aktuellen Anchors
	var anc;	// aktuelles Anchor-Element
	var len = 0;	// zu erreichende Länge

	for (var i = 1; i < namen.length; i++)
	{
		l = document.getElementById(namen[i]).offsetWidth;
		if (len < l) len = l;
	}
	if (len > 0)
	{
		var space = document.getElementById(namen[1]).firstChild.nodeValue.slice(0,1);
		for (i = 1; i < namen.length; i++)
		{
			anc = document.getElementById(namen[i]);
			l = anc.offsetWidth;
			while (l < len)
			{
				anc.firstChild.nodeValue += space;
				l = anc.offsetWidth;	
			}
		}
	}
}

// Funktion, um Submenüs auszugeben
//
// Parameter:
//	aMenue: Menüpunkt der das Submenü enthält
//	x: 	Abstand von links
//	y:	Abstand von oben
//	h:	Höhe eines Menüpunktes
//	aMenueName: Objekt mit den Menünamen
//
function SubMenueAusgeben(aMenue, x, y, h, aMenueName)
{
	var xo = x;	// Abstand von links
	var yo = y;	// Abstand von oben
	var aMenu;	// Hilfsmenü
	var aname = aMenueName.name;	// Name des aktuelllen Obermenüs
	var hname;	// Name des aktuelllen Menüs
	var namen = new Array();	// Alle Id's der Anchors
	var name_r;	// Id der aktuellen Tabellen-Zeile

	document.write("<div id='", aname, "' style='position:absolute; top: ", y, "px; ");
	document.writeln(" left: ", x, "px; width:10px; visibility: hidden; z-index:999'>");
	document.write("<table id='", aname, "_t' class='submenue' cellspacing='0' cellpadding='", menr, "'");
	document.writeln("style='font-size:", fontgr, "pt; font-weight:bold'>");
	for (var j = 1; j < aMenue.SubMenue.length; j++)
	{
		aMenu = aMenue.SubMenue[j];
		var img = logo;
		if (aMenu.neu) img = logon;
		hname = aname + "_" + j;
		aMenueName.SubMenue[j] = new MenuName(hname);
		namen[j] = hname + "_a";
		name_r = hname + "_r";
		document.write("  <tr id='", name_r, "' onMouseOver=\"klappAus('", hname, "'); hoverEin('", name_r, "')\" ");
		document.writeln("onMouseOut=\"klappEin('", hname, "'); hoverAus('", name_r, "')\"' class='zeile'>");
		document.write("  <td style='padding-right:1px' class='bor_left'>");
		document.writeln(img, "</td>");
		document.writeln("  <td style='padding-bottom:", menr + 2, "px; padding-left:0; white-space:nowrap'>");
		document.write("    <a id='", namen[j], "' title='", aMenu.titel, "' ");
		document.write("href='", aMenu.url, "' ");
		document.write("style='text-decoration:none'>");
		document.writeln("&nbsp;", aMenu.text, "&nbsp;</a>\n    </td>");
		document.write("  <td style='padding-right:0'>");
		if (aMenu.SubMenue.length > 0) document.write(pfeil);
		else document.write("&nbsp;");
		document.writeln("</td>\n</tr>");
	}
	document.writeln("</table>\n</div>");
	Stretch(namen);
	for (j = 1; j < aMenue.SubMenue.length; j++)
	{
		aMenu = aMenue.SubMenue[j];
		if (aMenu.SubMenue.length > 0)
		{
			xo = x + document.getElementById(aMenueName.name + "_t").offsetWidth;
			yo = y + (j - 1) * h;
			SubMenueAusgeben(aMenu, xo, yo, h, aMenueName.SubMenue[j]);
		}
	}
}

// Funktion zur Anzeige des Inhaltsverzeichnisses
//
// Parameter:
//	Ebene: Ebene der aktuellen Seite im Menü
//
function MenueAusgeben()
{
	var offset = poso;	// Abstand der Untermenütabelle vom oberen Rand
	var abst = posl + menl;	// Abstand des Untermenüs vom linken Rand;
	var MenuHeight; // Höhe eines Menüpunktes
	var aMenu;		// Hilfsmenü
	var aname;		// Name des aktuellen Menüs
	var name_r;		// Id der aktuellen Tabellenzeile;
	var Nr;       // Nr. des neuen Arrayelementes
	var stradd = "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";

	// Hauptmenütabelle ausgeben
	document.writeln("<div class='menue'>");
	for (var i = 1; i < Menue.length; i++)			// alle Menüpunkt durchlaufen
	{
		aMenu = Menue[i];
		var img = logo;
		if (aMenu.neu) img = logon;
		MenueName[i] = new MenuName("menu_" + i);
		aname = MenueName[i].name;
		name_r = aname + "_r";
		document.write("  <div id='", name_r, "' class='");
		if (i == (Menue.length - 1)) document.write("zeile_a' ");
		else document.write("zeile' ");
		document.write("onmouseover=\"klappAus('", aname, "'); hoverEin('", name_r, "')\" ");
		document.writeln("onmouseout=\"klappEin('", aname, "'); hoverAus('", name_r, "')\">");
		document.writeln("    <div class='vorne'>", img, "</div>");
		if (aMenu.SubMenue.length > 0) {
			document.writeln("    <div class='hinten'>", pfeil, "</div>");
			document.writeln("    <div class='link'>");
		} else document.writeln("    <div class='link3'>");
		document.write("      <a id='", aname, "_a' href='", aMenu.url, "' ");
		document.write("title='", aMenu.titel, "'>");
		document.writeln(aMenu.text + stradd + "</a>\n    </div>\n  </div>");
	}
	if (Menue[i-1].SubMenue.length > 1)	//Untermenüs ausgeben
	{
		for (var j = 1; j < Menue[i-1].SubMenue.length; j++)
		{
			aMenu = Menue[i-1].SubMenue[j];
			var img = logo;
			if (aMenu.neu) img = logon;
			Nr = i - 1 + j;
			MenueName[Nr] = new MenuName("menu_" + Nr);
			aname = MenueName[Nr].name;
			name_r = aname + "_r";
			document.write("  <div id='", name_r, "' class='zeile' ");
			document.write("onmouseover=\"klappAus('", aname, "'); hoverEin('", name_r, "')\" ");
			document.writeln("onmouseout=\"klappEin('", aname, "'); hoverAus('", name_r, "')\">");
			document.writeln("    <div class='einr'> </div>");
			if (aMenu.SubMenue.length > 0) document.writeln("    <div class='hinten'>", pfeil, "</div>");
			document.writeln("    <div class='vorne'>", img, "</div>");
			if (aMenu.SubMenue.length > 0) document.writeln("    <div class='link2'>");
			else document.writeln("    <div class='link4'>");
			document.write("      <a id='", aname, "_a' href='", aMenu.url, "' ");
			document.write("title='", aMenu.titel, "'>");
			document.writeln(aMenu.text + stradd, "</a>\n    </div>");
			document.writeln("  </div>");
		}
	}
	document.writeln("</div>");		// Ende der Hauptmenütabelle ausgeben
	
	//Untermenütabellen ausgeben
	MenuHeight = document.getElementById(name_r).offsetHeight;
	for (i = 1; i < Menue.length; i++)			// alle Menüpunkt durchlaufen
	{
		offset = poso + (i - 1) * MenuHeight;
		SubMenueAusgeben(Menue[i], abst, offset, MenuHeight, MenueName[i]);
	}
	if (Menue[i-1].SubMenue.length > 1)	//Untermenüs ausgeben
	{
		for (var j = 1; j < Menue[i-1].SubMenue.length; j++)
		{
			aMenu = Menue[i-1].SubMenue[j];
			offset = poso + (i - 2 + j) * MenuHeight;
			SubMenueAusgeben(aMenu, abst, offset, MenuHeight, MenueName[i-1+j]);
		}
	}
}

