// Nibelungenlied - Projekt
// nibmenu.js    Menufunktionen
// Benoetigt ajb.js
// v1.0     28.07.2003 by ulrich.hoehne@arxio.de
// v1.1     09.10.2003 by ulrich.hoehne@arxio.de

// Das Hauptmenue befindet sich im frame 'frMenu'

var gIsStartup= true;   // wenn Seite neu geladen wird
var gSelection= "int_000";  	// aktuell ausgewaehlte Seite, default = intro
var gOldTextURL= "";


// Menu-Eintraege
// hier stehen die Seiten-Ident-Codes und die Texte der Menueintraege
// Trennzeichen ist '#'
var gArMenu= new Array(
        "wnl_000#Welt der Nibelungen",
        "wnl_100#Landkarte",
        "wnl_200#Zentrale Personen",
		        "wnl_201#Br&uuml;nhild",
		        "wnl_202#Etzel",
		        "wnl_203#Gunther",
		        "wnl_204#Kriemhild",
		        "wnl_205#Siegfried",
        "wnl_300#Verwandtschaftsbeziehungen",
        "wnl_400#Inhaltsangabe",
		"wnl_500#Orte des NL heute",
		
        "mth_000#Mythos und Symbol",
                "mth_100#Symbolik",
                     // "mth_101#Herrschaftszeichen",
                        "mth_102#Sprechende Namen",
                        "mth_103#Br&uuml;nhild und Isenstein",
                        "mth_104#Traumdeutung",
                     // "mth_105#Zahlenmystik",
                // "mth_200#Motivgeschichte",
                "mth_300#Mythologie",
                        "mth_301#Drachen",
                        "mth_302#Das Lindenblatt",
                       // "mth_303#Riesen und Zwerge",
                        "mth_304#Tarnkappe",
                        "mth_305#Das Schwert &quot;Balmung&quot;",
                        "mth_306#Die Bahrprobe",
                        "mth_307#Die drei Wassernixen",
                "mth_400#Herrschaftszeichen",
                        "mth_401#Demonstration von Reichtum",
                        "mth_402#Demonstration von Macht",
                        "mth_403#Rituelle Gesten",
						
        "lmf_000#Leben am Hof",
                "lmf_100#Sitten",
                        "lmf_101#Politische Elemente",
                        "lmf_102#H&ouml;fische Elemente",
                        "lmf_103#Unh&ouml;fische Elemente",
                "lmf_200#Liebe und Minne",
                        "lmf_201#Sch&ouml;nheitsbeschreibungen",
                        "lmf_202#Amor Hereos",
                       // "lmf_203#Liebe provoziert Leid",
			"lmf_300#Kriemhild als h&ouml;fische Dame",
			"lmf_301#Sch&ouml;nheit und hoher Adel",
			"lmf_302#Gehorsam und Unterordnung",
			"lmf_303#Keuschheit",
			
        "spr_000#Sprache",
                "spr_100#Formale Sprache",
                        "spr_101#Gattung",
                        "spr_102#Form und Metrik",
//                      "spr_103#Form",
                "spr_200#Gef&uuml;hlssprache",
                        "spr_201#Sprache der Gewalt",
                        "spr_202#Nonverbale Kommunikation",
                        "spr_203#Gef&uuml;hlswortschatz",
                        "spr_204#Freude und Leid",
                "spr_300#Schl&uuml;sselw&ouml;rter",
				
        "rez_000#Rezeption",
                "rez_100#Rezeptionsgeschichte",
                        "rez_101#Forschungsgschichte",
                        "rez_102#Der H&uuml;rnen Seyfried",
                        "rez_103#Ambraser Heldenbuch",
                "rez_200#Theater",
			"rez_201#Quellen und Entstehung &lsquo;Ring&rsquo;",
			"rez_202#&lsquo;Ring&rsquo; vs. Nibelungenlied",
                "rez_300#Film",
                "rez_400#Comic",
                "rez_500#Stra&szlig;enschilder"
);

// Hauptmenue-Eintraege (Bilder)
// hier stehen die Seiten-Ident-Codes (nur Kategorie), die Pfade auf die Bilder
// und die Texte fuer das <img> 'alt' Attribut
// Trennzeichen ist '#'
/*
var gArImgMenu= new Array(
        "wnl#img/wnl_bl.png#Die Welt der Nibelungen",
        "mth#img/mth_bl.png#Motive, Themen",
        "lmf#img/lmf_bl.png#Lebensmuster, -formen",
        "spr#img/spr_bl.png#Sprache",
        "rez#img/rez_bl.png#Rezeption"
);
*/
// farbige Variante
/**/
var gArImgMenu= new Array(
        "wnl#img/wnl_blc.png#Die Welt der Nibelungen",
        "mth#img/mth_blc.png#Mythos und Symbol",
        "lmf#img/lmf_blc.png#Leben am Hof",
        "spr#img/spr_blc.png#Sprache",
        "rez#img/rez_blc.png#Rezeption"
);
/**/

// Abstand der Blatt-Bilder untereinander
var gImgDelta = 36;

// Abstand der Blatt-Bilder zum linken Rand des Frames
var gImgOffset = 10;

//--------------------------------------------------------------------------------------------
// Einzelnen Menueintrag schreiben
function writeMenuEntry(doc, menutext, selection, selcat)
{
        var cat;
        var file;
        var name;
        var num;
        var cls;
        var show;
        var temp;

        // Dateinamen und Menueeintrag holen
        temp= menutext.split("#");
        file= temp[0];
        name= temp[1];

        // Datei Kategorie und Nummer holen
        temp= file.split("_");
        cat= temp[0];
        num= temp[1];

        show= false;

        // Aussehen des Eintrags wird bestimmt durch styles
        // Anzeige der Menueintraege kann feur jede Menutiefe individuell
        // durch Variable "show" eingestellt werden
        // 1 - Einrueckung nach Menuetiefe
        if (num > 0) {
                if (num % 100 != 0) {
                        cls= "menu3";
                        if (selcat == cat) {
                                show= true;
                        }
                }
                else {
                        cls= "menu2";
                        if (selcat == cat) {
                                show= true;
                        }
                }
        }
        else {
                cls= "menu1";
                if (selcat == cat) {
                        show= true;
                }
        }

        // 2 - Hintergrundfarbe bei ausgewaehltem Eintrag ueber Suffix 's' schalten
        if (selection == file) {
                cls+= "s";
        }

        if (show == true) {
                doc.write(
                        "<a href=\"" + file + ".html\" target=\"frtext\" " +
                        "class=\"" + cls + "\"" +
                        // "onclick=\"javascript:top.selectMenu('" + file + "');\" + 
						" >&nbsp;" + name + "&nbsp;</a><br>");
        }
}

//--------------------------------------------------------------------------------------------
// ein einzelnes Hauptmenu-Bild auf Seite schreiben
function writeMenuImgEntry(doc, imgdata, selcat, index)
{
        var cat;
        var path;
        var style;
        var temp;

        // Kategorie und Pfad auf Bilddatei holen
        temp= imgdata.split("#");
        cat= temp[0];
        path= temp[1];
        name= temp[2];

        // Positionierung des Bilds in style festlegen
        if (selcat == cat) {
                style= "position:absolute; top:40px; left:" + ((index * gImgDelta) + gImgOffset) + "px;";
        }
        else {
                style= "position:absolute; top:0px; left:" + ((index * gImgDelta) + gImgOffset) + "px;";
        }

        doc.write(
                "<div style=\"" + style + "\">" +
                "<a href=\"" + cat + "_000.html\" target=\"frtext\" " +
                // "onclick=\"javascript:top.selectMenu('" + cat + "_000');\" +
				">" +
                "<img src=\"" + path + "\" alt=\"" + name + "\" border=\"0\"></a></div>");
}

//--------------------------------------------------------------------------------------------
// Schreibt das Menu direkt in "menu.html"
function writeMenu()
{
        var i;
        var selcat;
        var temp
        var menu= top.frmenu.document;

        // debugging
//        menu.write("sel= " + gSelection + "<br>");

        // Kategorie holen (wnl, mth usw.)
        temp= gSelection.split("_");
        selcat= temp[0];

        // Schreibe Menueintraege
        for(i= 0; i < gArMenu.length; i++) {
                writeMenuEntry(menu, gArMenu[i], gSelection, selcat);
        }
}

//--------------------------------------------------------------------------------------------
// Schreibt das Menu direkt in "menu.html"
function writeImgMenu()
{
        var i;
        var selcat;
        var temp
        var menu= top.frmenu.document;

        // debugging
//        menu.write("sel= " + gSelection + "<br>");

        // Kategorie holen (wnl, mth usw.)
        temp= gSelection.split("_");
        selcat= temp[0];

        // Zeige Blaetter fuer Kategorien
        for(i= 0; i < gArImgMenu.length; i++) {
                writeMenuImgEntry(menu, gArImgMenu[i], selcat, i);
        }
}

//--------------------------------------------------------------------------------------------
// Schreibt die Extra-Links direkt in "menu.html"
function writeLinks()
{
	top.frmenu.document.write(
// Home
"<a href=\"int_000.html\" target=\"frtext\"><img src=\"img/int_b.jpg\" alt=\"Startseite\" width=\"40\" height=\"40\" border=\"0\" class=\"menubt\"></a>" +
// Originaltext
"<a href=\"javascript:parent.showNLText()\"><img src=\"img/text_b.jpg\" alt=\"Das Nibelungenlied\" width=\"40\" height=\"40\" border=\"0\" class=\"menubt\"></a>" +
// Audio
"<a href=\"javascript:parent.showAudio('"+ gSelection +"')\"><img src=\"img/audio_b.jpg\" alt=\"Audiobeitr&auml;ge\" width=\"40\" height=\"40\" border=\"0\" class=\"menubt\"></a>" +
// Glossar/Lexikon
"<a href=\"javascript:parent.showLexikon()\"><img src=\"img/lexikon_b.jpg\" alt=\"Lexikon\" width=\"40\" height=\"40\" border=\"0\" class=\"menubt\"></a>" +
// Quiz/Schatzkammer
"<a href=\"javascript:parent.showQuiz('quiz/frage1.html')\"><img src=\"img/quiz_b.jpg\" alt=\"Quiz und Schatzkammer\" width=\"40\" height=\"40\" border=\"0\" class=\"menubt\"></a>");
}


//--------------------------------------------------------------------------------------------
// Aufgerufen durch Klick auf Menueintrag
// Speichert selektierten Eintrag und laedt "menu.html" neu
// Beim Laden ruft "menu.html" die Funktionen
// writeImgMenu(), writeMenu(), writeLinks() auf
function selectMenu(selection)
{
	// selected menue is stored in global variable
	// for usage by menue drawing functions
    gSelection= selection;

    if (selection == "int_000") {    
		// Sonderfall 'Intro', das animierte Menu neu laden
		// Workaround fuer Internet-Expolorer
		// beim ersten Laden von index ist frame 'menu' noch nicht bekannt und 
		// darf nicht referenziert werden. 
		// Mozilla laedt erst alle Elemente und fuehrt dann die Skripte aus.
		if (gIsStartup == false) {
	        top.frmenu.location.href= "menuhome.html";
		}
		else {
			gIsStartup= false;
		}
     }
     else {
     	top.frmenu.location.href="menu.html";
     }
}

//--------------------------------------------------------------------------------------------
// Aufgerufen durch "onload" beim Laden einer Textseite
// Synchronisiert Menue (notwendig bei direktem Springen zwischen den Seiten)
// und Inhalt des Titelframes
function syncMenu(textURL)
{
	if (gOldTextURL != textURL) {
		gOldTextURL= textURL;
        var i;
        var file;
        var selection;
        var temp;

        // Dateinamen aus URL holen
        // Muss auf "/" und "\" pruefen (lokale URL's auf MS-Nerv)
        for (i= textURL.length - 1; i >= 0; i--) {
                if (textURL.charAt(i) == "/" || textURL.charAt(i) == "\\") {
                        file= textURL.substring(i + 1);
                        break;
                }
        }

        // Dateiendung abschneiden um Seiten-Ident-Code zu erhalten
        temp= file.split(".");
        selection= temp[0];

        // debugging
        //        alert("URL=" + textURL + " file=" + file + " selection=" + selection);

        // Titelframe aendern
        // Titeldateien haben Name der Textdatei + 't' (z.B. "mth_000t.html")
        top.frtitel.location.href= selection + "t.html";

        // Menu bei Bedarf neu zeichnen
        selectMenu(selection);

        // Dekoframe aendern
        // Dekodatein haben Name der Textkategorie + "deko" (z.B. "mth_deko.html")
        temp= file.split("_");
        file= temp[0] + "_deko.html";
        top.frdeko.location.href= file;
	}
}

/* ------------------------------------------------------------------------------------*
 *                                  Das Intro                                          *
 * ------------------------------------------------------------------------------------*/
// Textdatei = int_000.html
// Titel     = int_000t.html
// Deko      = int_deko.html

// Y-Position der Blaetter
var gTop;
var gInitialize= true;

// Schreibt die Intro-Version des Menues direkt in "menuhome.html"
function writeImgIntro()
{
        var i;
        var path;
        var style;
        var menu= top.frmenu.document;

        // Am Anfang liegen alle Blaetter uerbereinander

        style= "position:absolute; top:300px; left:84px";

        // Schreibe Menueintraege
        for (i= 0; i < gArImgMenu.length; i++) {
                // Kategorie und Pfad auf Bilddatei holen
                var temp= gArImgMenu[i].split("#");
                path= temp[1];

                menu.write(
                        "<div id=\"blatt" + i + "\" style=\"" + style + "\">" +
                        "<img src=\"" + path + "\" border=\"0\"></a></div>");
        }

        // nach 300ms Animation starten
        gTop= 300;
		
		var delay= 400;
		if (gInitialize == true) {
			delay*= 4;
			gInitialize= false;
		}
		// debugging
		// alert(delay);						
        window.setTimeout("animateIntro()", delay);
}

// Intro-Animation
function animateIntro()
{
        var menu= top.frmenu.document;

        // Schrittweite in Pixeln hier einstellen
        gTop -= 2;

        // Schreibe Menueintraege
        for (i= 0; i < gArImgMenu.length; i++) {
                // <div> Element holen, in dem das Bild steht
                var id= "blatt" + i;
                var div= menu.getElementById(id);

                // y_Position des <div> - Elements veraendern
                div.style.top= gTop;

                // X-Position der Blaetter auffaechern
                // Mitte = 84 Pixel, Distanz am Ende = 36 Pixel
                var x= (gImgOffset + (gImgDelta * 2)) + ( (i - 2) *  (gImgDelta * ((300 - gTop) / 300)) );

                div.style.left= x;
        }

        // Rekursiver Aufruf nach 30 ms f&uuml;hrt zur Animation
        // Wenn die Blaetter oben sind, aufhoeren
        if (gTop > 0) {
                window.setTimeout("animateIntro()",30);
        }
        else {        // nach Ende der Animation Umschalten auf das Standardmenu
                top.frmenu.location.href= "menu.html";
        }
}


//--------------------------------------------------------------------------------------------
// Oeffnen von Unterfenstern fuer den Text des Nibelungenlieds, die Kinderreise usw.
// Nur ein Unterfenster soll jeweils geoeffnet sein
// Um die Skripte einfach zu halten wird fuer jedes Fenster eine Funktion bereitgestellt
//
var gWin= null;			// Referenz auf aktuell geoeffnetes Fenster

// Einfaches Browser-Fenster oeffnen und die angegebene URL laden
// Das Fenster hat die Abmessungen Breite = w, Hoehe = h
function openChildWindow(aURL, aName, aHasScrollbar, aWidth, aHeight, aX, aY)
{
	if (!aWidth || !aHeight) {
		aWidth= 600;
		aHeight= 400;
	}

	if (!aX || !aY) {		
		// Fenster horizontal zentrieren
		aX= (screen.width / 2) - (aWidth/2);
		aY= 20; // (screen.height / 2) - (h/2);
	}

	var args= "dependent=yes,menubar=no,toolbar=no,status=no,resizable=no,scrollbars=" + aHasScrollbar +
	      ",left=" + aX + ",top=" + aY + ",width=" + aWidth + ",height=" + aHeight;
	
	var win= window.open(aURL, aName, args);
	
	if (win == null) {
		alert("Debug ajb.js:openChildWindow: Kein Fenster erzeugt für'"+ aURL +"'.");		
	}
	else {
		win.focus();
	}
	return win;
}

// Managt Info-Fenster: nur  ein Fenster soll geoeffnet sein
function showInfo(aURL, aName, aHasScrollbar, aWidth, aHeight, aX, aY)
{
	var isReopen= true;

	if (gWin) {					
		if (gWin.closed == false) {
			if (gWin.name == aName) {
				//alert("Fenster = " + gWin.location.href);		
				if (gWin.location.href != aURL) {
					gWin.location.href= aURL;
				}
				gWin.focus();
				isReopen= false;	
			}
			else {
				gWin.close();
				gWin== null;				
			}
		}
	}
	
	if (isReopen == true) {
		gWin= openChildWindow(aURL, aName, aHasScrollbar, aWidth, aHeight, aX, aY);
		gWin.focus();		
	}
}

function gWinInfo()
{
		alert("Fenster = " + gWin);
		alert("Fenster = " + gWin.location.href);		

}

// Verschiedene Info-Fenster oeffnen
var gNLTextItem= "";

function showNLText(aItem)
{
	showInfo("nltext/nltext_frameset.html", "NibelungenText", "no", 600, 700);

	if (aItem) {
		gNLTextItem= aItem;		
		window.setTimeout("gWin.presetItem(gNLTextItem)", 500);
	}
	else {
		gNLTextItem= null;
	}	
}

// Lexikon-Eintrag zeigen, öffnet Fenster, scrollt zu Eintrag, setzt Auswahlbox
var gLexikonItem= null;

function showLexikon(aItem)
{
	showInfo("lexikon/lex_frameset.html", "Lexikon", "no", 300, 540, screen.width-310, 80);
	// wenn ein Eintrag aItem übergeben wurde, diesen Eintrag anspringen
	if (aItem) {
		gLexikonItem= aItem;
		window.setTimeout("gWin.presetItem(gLexikonItem)", 500);
	}
	else {
		gLexikonItem= null;
	}
}

function showQuiz(url)
{
	showInfo(url, "Quiz", "no", 620, 540);
}

function showBiographie(url)
{
	showInfo(url, "Biographie", "yes", 600, 400);
}

// Extra-Fenster fuer Audio-Beitraege oeffnen
var gWinAudio= null;			// Referenz auf aktuell geoeffnetes Fenster
function showAudio(selection)
{	
    // Kategorie holen (wnl, mth usw.)
    var temp= selection.split("_");
    var selcat= temp[0];
	
	// URL der Audio-Datei daraus zusammenbauen
	var url= "mp3/" + selcat + ".html";
		
	var isReopen= true;	
	if (gWinAudio) {					
		if (gWinAudio.closed == false) {
			gWinAudio.location.replace(url);
			gWinAudio.focus();				
			isReopen= false;			
		}
		else {
			gWinAudio.close();
			gWinAudio== null;
		}
	}
	
	if (isReopen == true) {
		gWinAudio= openChildWindow(url, "Audio", "no", 640, 440);
	}
}

