/* ------------------------------------------------------------
   Menue

   Autor: Dietmar Rabich
   Datei: menue.js

   Copyright (c) Dietmar Rabich, Duelmen.
   Alle Rechte vorbehalten.

   Diese Datei stammt von http://skripte.rabich.de/.

   Das Entfernen oder Veraendern dieser Informationen ist
   ohne ausdrueckliche Zustimmung des Autors nicht gestattet.

   Aenderungen:
   5.10.2003  Erstellung
------------------------------------------------------------ */

// === Variablen (global) ===

var	eintraege		= new Array();
var	bildname		= "Bild";

// === Parameter (Vorbelegung) ===

var	type_of_code		= 1;	// 0: HTML, 1: HTML + CSS (inline), 2: HTML + CSS (extern)
var	body_bgcolor		= "000066";
var	body_background		= "";
var	body_text		= "CCCCCC";
var	body_link		= "FFFFFF";
var	body_alink		= "FFCCCC";
var	body_vlink		= "CCFFCC";
var	body_hover		= "CCCCFF";
var	link_stylesheet		= "";
var	a_underline		= false;
var	menue_pre		= "<span style=\"font-weight: bold; font-size: small;\">";
var	menue_post		= "<\/span>";
var	eintrag_pre		= "<span style=\"font-style: italic; font-size: small;\">";
var	eintrag_post		= "<\/span>";
var	menue_titel		= "<div style=\"width: 100%; background-color: #ccf; color: inherit; text-align: center;\">" +
					"<p style=\"font-weight: bold; background-color: inherit; color: #006; margin: 0;\">Men&uuml;<\/p>" +
					"<\/div>";
var	menue_style		= "font-family: Verdana, Arial, sans-serif;";
var	rand			= 0;
var	cookie_name		= "OpenNodes";
var	bild_leer		= "bilder\/leer.gif";
var	bild_eintrag		= "bilder\/normal.gif";
var	bild_menue_offen	= "bilder\/offen.gif";
var	bild_menue_geschlossen	= "bilder\/geschlossen.gif";
var	bild_breite		= 12;
var	bild_hoehe		= 12;
var	frame_name		= "menuetree";
var	extra			= true;
var	extra_text_expand	= "Aufbauen";
var	extra_text_collapse	= "Abbauen";
var	extra_pre		= "<span style=\"font-size: small;\">";
var	extra_post		= "<\/span>";
var	exclusive		= false;
var	copyright		= true;

// === HTML-Elemente/Tags ===

// Dokumentkopf und Anfang des Koerpers
function html_document_anfang()
{
	var	styles	= "";
	var	att_body	= "";

	function att(s, t, e)
	{
		return (t == "") ? "" : (" " + s + t + e);
	}

	switch(type_of_code)
	{
		case 1:
			styles	= "<style type=\"text\/css\"><!--\n";
			styles	+= ((menue_style == "") ? "" : ("body, a, p, td, h1, h2, h3, h4, h5, h6 { " + menue_style + " }\n"));
			styles	+= "body {" +
					att("background-color: #", body_bgcolor, ";") +
					att("color: #", body_text, ";") +
					att("margin: ", String(rand), "px;") +
					att("background-image: url('", body_background, "');") +
					" }\n";
			styles	+= (a_underline ? "" : "a, a:link { text-decoration: none; }\n");
			styles	+= "a, a:link {" +
					att("color: #", body_link, "; background-color: inherit;") +
					" }\n";
			styles	+= "a:visited {" +
					att("color: #", body_vlink, "; background-color: inherit;") +
					" }\n";
			styles	+= "a:active {" +
					att("color: #", body_alink, "; background-color: inherit;") +
					" }\n";
			styles	+= "a:hover { color: #" + body_hover + "; background-color: inherit; }\n";
			styles	+= ".EintragKnoten, .EintragMenuepunkt { border: none; padding: 0; margin: 0; border-spacing: 0; }\n";
			styles	+= ".EintragKnoten td, .EintragMenuepunkt td { padding: 0; text-align: left; vertical-align: middle; }\n";
			styles	+= ".Extra { text-align: center; }\n";
			styles	+= ".Copyright { border-top: 1px solid; text-align: center; font-size: xx-small; }\n";
			styles	+= "--><\/style>";
			break;
		case 2:
			styles	= "<link rel=\"stylesheet\" type=\"text\/css\" href=\"" + link_stylesheet + "\">";
			break;
		case 0:
			att_body	+= att("bgcolor=\"#", body_bgcolor, "\"");
			att_body	+= att("text=\"#", body_text, "\"");
			att_body	+= att("link=\"#", body_link, "\"");
			att_body	+= att("alink=\"#", body_alink, "\"");
			att_body	+= att("vlink=\"#", body_vlink, "\"");
			att_body	+= att("leftmargin=\"", String(rand), "\"");
			att_body	+= att("topmargin=\"", String(rand), "\"");
			att_body	+= att("rightmargin=\"", String(rand), "\"");
			att_body	+= att("bottommargin=\"", String(rand), "\"");
			att_body	+= att("marginwidth=\"", String(rand), "\"");
			att_body	+= att("marginheight=\"", String(rand), "\"");
			att_body	+= att("background=\"", body_background, "\"");
			break;
		default:
			break;
	}

	return "<!DOCTYPE HTML PUBLIC \"-\/\/W3C\/\/DTD HTML 4.01 Frameset\/\/EN\" \"http:\/\/www.w3.org\/TR\/html4\/frameset.dtd\">\n" +
		"<!-- Generiert mit Hilfe des Menueskripts von Dietmar Rabich, Duelmen. http:\/\/www.rabich.de\/ -->\n" +
		"<html><head><title>Men&uuml;<\/title>" +
		"<meta name=\"AUTHOR\" content=\"Dietmar Rabich\">" +
		"<meta name=\"COPYRIGHT\" content=\"Dietmar Rabich, D&uuml;lmen\">" +
		"<meta name=\"ROBOTS\" content=\"NONE\">" +
		"<meta http-equiv=\"CONTENT-TYPE\" content=\"text\/html; CHARSET=utf-8\">" +
		((type_of_code == 0) ? "" : "<meta http-equiv=\"CONTENT-STYLE-TYPE\" content=\"text\/css\">") +
		"<meta http-equiv=\"CONTENT-SCRIPT-TYPE\" content=\"text\/javascript\">" +
		styles +

		"<\/head>" +
		"<body" + att_body + ">";
}

// Dokumentende
function html_document_ende()
{
	return "<br><br><br><br><br><p align='center'><font size='1'>Bestellen Sie <a href='mailto:standpunkt@gi-geoinformatik.de?subject=Standpunkt-Bestellung'><u>hier<\/u><\/a> unseren Newsletter \"Standpunkt\"!<\/font><\/body><\/html>";
}

// Menueanfang
function html_menue_anfang()
{
	return "<div" + ((type_of_code == 0) ? "" : " class=\"Menue\"") + ">";
}

// Menueende
function html_menue_ende()
{
	return "<\/div>";
}

// Eintraganfang
function html_eintrag_anfang(klasse)
{
	return "<table cellspacing=\"0\" cellpadding=\"0\" border=\"0\"" +
		((type_of_code == 0) ?
			"><tr align=\"left\" valign=\"middle\">" :
			" class=\"" + klasse + "\"><tr>");
}

// Eintragende
function html_eintrag_ende()
{
	return "<\/tr><\/table>";
}

// Bild mit Platzhalter
function html_eintrag_bild(nr, lvl, titel, bild)
{
	var	tag_bild	= "";

	// Platzhalter
	if(lvl > 1)
		tag_bild	+= "<img src=\"" + bild_leer + "\" " +
				"width=\"" + String(bild_breite * (lvl - 1)) + "\" " +
				"height=\"" + String(bild_hoehe) + "\" " +
				"border=\"0\" " +
				((type_of_code == 0) ? "" : ("style=\"width: " + String(bild_breite * (lvl - 1)) + "px; height: " + String(bild_hoehe) + "px; border: none;\" ")) +
				"alt=\"\" " +
				"title=\"\">";
	tag_bild	+= "<img src=\"" + bild + "\" " +
				"width=\"" + String(bild_breite) + "\" " +
				"height=\"" + String(bild_hoehe) + "\" " +
				"border=\"0\" " +
				((type_of_code == 0) ? "" : ("style=\"width: " + String(bild_breite) + "px; height: " + String(bild_hoehe) + "px; border: none;\" class=\"Bild\" ")) +
				"name=\"" + bildname + String(nr) + "\" " +
				"alt=\"" + titel + "\" " +
				"title=\"" + titel + "\">";
	return tag_bild;
}

// Zellenanfang eines Knotens
function html_eintrag_link_node_anfang(nr, titel, klasse)
{
	return "<td" + ((type_of_code == 0) ? "" : " class=\"" + klasse + "\"") + ">" + menue_pre + "<a href=\"javascript:parent.submenue(" + String(nr) + ")\" " +
		"onmouseover=\"parent.show('" + titel + "'); return true\" " +
		"onmouseout=\"parent.hide()\" " +
		"title=\"" + titel + "\">";
}

// Zellenende eines Knotens
function html_eintrag_link_node_ende()
{
	return "<\/a>" + menue_post + "<\/td>";
}

// Zellenanfang eines Menuepunkts
function html_eintrag_link_menue_anfang(nr, titel)
{
	return "<td" + ((type_of_code == 0) ? "" : " class=\"Menuepunkt\"") + ">" + eintrag_pre + "<a href=\"" + eintraege[nr].url + "\" " +
		"onmouseover=\"parent.show('" + titel + "'); return true\" " +
		"onmouseout=\"parent.hide()\" " +
		(eintraege[nr].target ? (" target=\"" + eintraege[nr].target + "\" ") : "") +
		"title=\"" + titel + "\">";
}

// Zellenende eines Menuepunkts
function html_eintrag_link_menue_ende()
{
	return "<\/a>" + eintrag_post + "<\/td>";
}

// Extrafunktionen
function html_extra()
{
	var	txt_expand	= "[ <a href=\"javascript:parent.expand()\" title=\"" + extra_text_expand + "\">" + extra_text_expand + "<\/a> ]";
	var	txt_collapse	= "[ <a href=\"javascript:parent.collapse()\" title=\"" + extra_text_collapse + "\">" + extra_text_collapse + "<\/a> ]";

	return (type_of_code == 0) ? ("<p align=\"center\">" + extra_pre +
		(exclusive ? "" : "<nobr>" + txt_expand + "<wbr><\/nobr> ") +
		"<nobr>" + txt_collapse + "<wbr><\/nobr>" + extra_post + "<\/p>") :
		("<p class=\"Extra\">" + extra_pre +
		(exclusive ? "" : "<span style=\"white-space: nowrap;\">" + txt_expand + "<\/span> ") +
		"<span style=\"white-space: nowrap;\">" + txt_collapse + "<\/span>" + extra_post + "<\/p>");
}

// Copyright
function html_copyright()
{
	var	msg	= "Copyright &copy; 2003<br><a href=\"http:\/\/skripte.rabich.de\/\" target=\"_blank\" title=\"&lt;Skripte&gt; von Dietmar Rabich\">Dietmar&nbsp;Rabich<\/a>, D&uuml;lmen.<br>Alle Rechte vorbehalten.";

	return (type_of_code == 0) ? ("<hr size=\"2\" width=\"90%\" align=\"center\" color=\"" + body_text + "\">" +
		"<p align=\"center\"><small><small>" + msg + "<\/small><\/small><\/p>") :
		("<p class=\"Copyright\">" + msg + "<\/p>");
}

// === Hilfsfunktionen ===

// Cookie lesen
function read_cookie(cookiename)
{
	var cookie_string	= document.cookie;
	var cookie_array	= cookie_string.split(";");
	var array_size		= cookie_array.length;
	var cookie_teile;

	var i	= 0;

	for(i = 0; i < array_size; i++)
	{
		cookie_teile	= cookie_array[i].split("=");
		if(cookie_teile[0].substring(0, 1) == " ")
			cookie_teile[0] = cookie_teile[0].substring(1, cookie_teile[0].length);
		if(cookie_teile[0] == cookiename)
			return unescape(cookie_teile[1]);
	}

	return "";
}


// Cookie schreiben
function write_cookie(cookiename, cookie_wert, gueltigkeitszeitraum)
{
	if(gueltigkeitszeitraum)
	{
		var ablauf_datum	= new Date();

		ablauf_datum.setTime(ablauf_datum.getTime() + gueltigkeitszeitraum);
		document.cookie = cookiename + "=" + escape(cookie_wert) + "; " +
					"expires=" + ablauf_datum.toGMTString();
	}
	else
		document.cookie = cookiename + "=" + escape(cookie_wert);
}

// Knoten ermitteln
function set_nodes()
{
	var	i;

	for(i = 0; i < (eintraege.length - 1); i++)
		if(eintraege[i + 1].level > eintraege[i].level)
		{
			eintraege[i].node	=  true;
			eintraege[i].open	=  false;
		}
}

// Aufnahme eines neuen Menueeintrags
function neuer_eintrag(level, name, url, target, desc, image, image_open)
{
	this.level		= level;
	this.name		= name;
	this.url		= url;
	this.target		= target;
	this.node		= false;
	this.open		= false;
	this.description	= desc;
	this.image		= image;
	this.image_open		= image_open;
}

// Eintrag vornehmen und Verzweigungsermittlung
function eintrag(level, name, url, target, desc, image, image_open)
{
	var	pos	= eintraege.length;

	if(level < 1)
	{
		alert("Level-Werte bitte ab 1 anlegen!");
		return;
	}

	if(arguments.length < 2)
	{
		alert("Es m\xfcssen mindestens die ersten beiden Argumente angegeben werden.");
		return;
	}

	eintraege[pos]	= new neuer_eintrag(level,
						name,
						(arguments.length > 2) ? url : null,
						(arguments.length > 3) ? target : null,
						(arguments.length > 4) ? desc : null,
						(arguments.length > 5) ? image : null,
						(arguments.length > 6) ? image_open : null);
}

// Untermenue oeffnen oder schliessen
function submenue(nr)
{
	// Alle Untermenues schliessen (ausser nr)
	function close_submenues(nr)
	{
		var	i;
		for(i = 0; i < eintraege.length; i++)
			if((i != nr) && eintraege[i].node)
				eintraege[i].open	= false;
	}

	// Untermenue nr exklusiv oeffnen
	function open_submenues(nr)
	{
		function open_super_level(nr, lvl)
		{
			if((nr == 0) || (lvl < 1))
				return;

			var	i;
			for(i = nr - 1; i >= 0; i--)
			{
				if((eintraege[i].level == lvl) && eintraege[i].node)
				{
					eintraege[i].open	= true;
					open_super_level(i, lvl - 1);
					return;
				}
			}
			return
		}

		open_super_level(nr, eintraege[nr].level - 1);
	}

	eintraege[nr].open	= !eintraege[nr].open;
	if((eintraege[nr].target != null) && (eintraege[nr].url != null))
		frames[eintraege[nr].target].location.href	= eintraege[nr].url;
	if(eintraege[nr].open && exclusive)
	{
		close_submenues(nr);
		open_submenues(nr);
	}
	write_menue();
}

// Alle Untermenues oeffnen
function expand()
{
	var	i;

	for(i = 0; i < eintraege.length; i++)
		if(eintraege[i].node)
			eintraege[i].open	= true;
	write_menue();
}

// Alle Untermenues schliessen
function collapse()
{
	var	i;

	for(i = 0; i < eintraege.length; i++)
		if(eintraege[i].node)
			eintraege[i].open	= false;
	write_menue();
}

// Kommentar in der Statuszeile anzeigen
function show(comment)
{
	status	= comment;
}

// Kommentar aus der Statuszeile entfernen
function hide()
{
	status	= "";
}

// Ausgabe eines Menueeintrags
function ausgabe(nr)
{
	with(self[frame_name].document)
	{
		var	tags_anfang	= "";
		var	tags_ende	= "";
		var	titel		= "";
		var	bild		= "";
		var	klasse		= "";
		var	klasse_punkt	= "";

		// Untermenues / normaler Eintrag
		if(eintraege[nr].node)
		{
			titel	= eintraege[nr].description ? eintraege[nr].description : eintraege[nr].name;
			bild	= eintraege[nr].open ?
					(eintraege[nr].image_open ? eintraege[nr].image_open : bild_menue_offen) :
					(eintraege[nr].image ? eintraege[nr].image : bild_menue_geschlossen);
			klasse	= eintraege[nr].open ? "KnotenOffen" : "KnotenGeschlossen";
			klasse_punkt	= "EintragKnoten";

			tags_anfang	= html_eintrag_link_node_anfang(nr, titel, klasse);
			tags_ende	= html_eintrag_link_node_ende();
		}
		else
		{
			titel	= eintraege[nr].description ? eintraege[nr].description : eintraege[nr].name;
			bild	= eintraege[nr].image ? eintraege[nr].image : bild_eintrag;
			klasse_punkt	= "EintragMenuepunkt";

			tags_anfang	= html_eintrag_link_menue_anfang(nr, titel);
			tags_ende	= html_eintrag_link_menue_ende();
		}

		write(html_eintrag_anfang(klasse_punkt));
		write(tags_anfang + html_eintrag_bild(nr, eintraege[nr].level, titel, bild) + tags_ende);
		write(tags_anfang + ((type_of_code == 0) ? "" : "<span class=\"Text\">") + eintraege[nr].name + ((type_of_code == 0) ? "" : "<\/span>") + tags_ende);
		write(html_eintrag_ende());
	}
}

// Ausgabe aller Eintraege eines Levels und eines Untermenues
function ausgabe_eintraege(lvl, start)
{
	var	i;

	with(self[frame_name].document)
	{
		for(i = start; i < eintraege.length; i++)
		{
			if(eintraege[i].level < lvl)
				return;
			if(eintraege[i].level == lvl)
			{
				ausgabe(i);
				if(eintraege[i].node)
					if(eintraege[i].open)
						ausgabe_eintraege(lvl + 1, i + 1);
			}
		}
	}
}

// Menuedokument schreiben (dynamisches Dokument erzeugen)
function write_menue()
{
	with(self[frame_name].document)
	{
		open("text\/html", "replace");

		// Anfang
		write(html_document_anfang());

		if(menue_titel != "")
			write(menue_titel);
		write(html_menue_anfang());
		ausgabe_eintraege(1, 0);
		write(html_menue_ende());
		if(extra)
			write(html_extra());
		if(copyright)
			write(html_copyright());
		writeln(html_document_ende());

		close();
	}

	// Menues in Cookie merken
	if(rebuild)
	{
		var	s	= "";
		var	i;

		for(i = 0; i < eintraege.length; i++)
			if(eintraege[i].node)
				if(eintraege[i].open)
					s	+= ((s == "") ? "" : ",") + String(i);
		write_cookie(cookie_name, s, 1000 * 60 * 60 * 24 * 92);
	}
}

// === Menuefunktionen ==

// Ausgabe des kompletten Menues
function menue()
{
	set_nodes();

	// Menues/Cookie auswerten
	if(rebuild)
	{
		var	s	= read_cookie(cookie_name);
		var	sarr	= s.split(",");
		var	i;
		var	nr;

		for(i = 0; i < sarr.length; i++)
		{
			nr	= parseInt(sarr[i]);
			if(!isNaN(nr))
				if(nr < eintraege.length)
					if(eintraege[nr].node)
						eintraege[nr].open	= true;
		}
	}

	write_menue();
}

// Menue mit IDs oeffnen
function oeffne_menue_pfad(ids)
{
	set_nodes();

	var	sarr	= ids.split(",");
	var	i;
	var	nr;

	for(i = 0; i < sarr.length; i++)
	{
		nr	= parseInt(sarr[i]);
		if(!isNaN(nr))
			if(eintraege[nr].node)
				eintraege[nr].open	= true;
	}

	write_menue();
}


// === EOF ===