// *******************************************************************************
// Allgemeine DHTML Basis Bibliothek
// ===============================================================================
// Globale Variable DHTML:
//	Diese Variable speichert, ob Dynamisches HTML bei dem vom Anwender
//	eingesetzten Browser verfügbar ist oder nicht. Innerhalb der
//	Funktion DHTML_init() wird diese Variable mit einem Wert versorgt,
//	der anschließend nicht mehr geändert werden sollte. Wenn Dynamisches
//	HTML nach irgendeinem der bekannten  DHTML-Modelle verfügbar ist,
//	dann erhält sie den Wert 1, wenn nicht, dann den Wert 0. Mit der
//	ganz simplen und eleganten Abfrage if(DHTML) können Sie dann im Verlauf
//	eines eigenen Scripts überprüfen, ob überhaupt Dynamisches HTML möglich
//	ist.
//	------------------------------------------------------------------------------
// Globale Variable DOM:
//	Diese Variable speichert, ob Dynamisches HTML nach DOM-Syntax möglich
//	ist oder nicht (Wert 1 oder Wert 0). Innerhalb der Funktion DHTML_init()
//	wird diese Variable mit einem entsprechenden Wert versorgt, der
//	anschließend nicht mehr geändert werden sollte. Mit if(DOM) können Sie
//	anschließend abfragen, ob ein neuerer Browser am Werk ist, der das DOM
//	bereits in seiner	JavaScript-Implementierung unterstützt.
//	------------------------------------------------------------------------------
// Globale Variable MS:
//	Auch diese Variable wird innerhalb der Funktion DHTML_init() mit einem
//	Wert versorgt. Wenn ihr Wert anschließend 1 ist, dann läuft Ihr Script
//	mit ziemlicher Sicherheit auf einem MS Internet Explorer. Handelt es
//	sich um einen Browser der 4er-Generation, ist in der Variablen DOM der
//	Wert 0 gespeichert, bei neueren Browsern dagegen 1. Mit if(MS && !DOM)
//	können Sie also in Ihrem Script abfragen, ob mit der DHTML-Syntax des
//	Internet Explorer 4.x gearbeitet werden muss.
//	------------------------------------------------------------------------------
// Globale Variable NS:
//	Wie MS wird auch diese Variable innerhalb der Funktion DHTML_init()
//	mit einem Wert versorgt. Wenn ihr Wert anschließend 1 ist, dann läuft
//	Ihr Script mit ziemlicher Sicherheit auf einem Netscape-Browser der
//	4er-Generation. Denn wenn ein 6er-Netscape oder ein anderer Abkömmling
//	des neu programmierten Mozilla-Browsers eingesetzt wird, ist
//	stattdessen die Variable DOM gleich 1, während NS gleich 0 ist. Mit
//	if(NS) können Sie also in Ihrem Script abfragen, ob mit der
//	DHTML-Syntax des alten 4er-Netscape gearbeitet werden muss.
//	------------------------------------------------------------------------------
// Globale Variable OP:
//	Wie MS wird auch diese Variable innerhalb der Funktion DHTML_init()
//	mit einem Wert versorgt. Wenn ihr Wert anschließend 1 ist, dann läuft
//	Ihr Script mit ziemlicher Sicherheit auf einem Opera-Browser.
//	Mit if(OP) können Sie also in Ihrem Script abfragen, ob ein Opera-Browser
//	am Werk ist. Handelt es sich außerdem um einen neueren Opera-Browser,
//	ist in den Variablen DOM und in DHTML der Wert 1 gespeichert.
// *******************************************************************************
var DHTML = 0, DOM = 0, MS = 0, NS = 0, OP = 0;

// *******************************************************************************
// Function DHTML_init - Bibliothek initialisieren 
// Aufruf: DHTML_init();
// -------------------------------------------------------------------------------
// Diese Funktion wird automatisch aufgerufen, wenn Sie die hier vorgestellte
// Bibliothek verwenden wollen. Dazu ist am Ende der Bibliotheksdatei der Aufruf
// DHTML_init() notiert. Anschließend sind die wichtigen globalen Variablen mit
// ihren Werten versorgt.
// Wenn DHTML_init() nicht vor allen anderen Aufrufen von Funktionen dieser 
// Bibliothek aufrufen wird, passiert nicht das Gewünschte, da dann eine veraltete
// Browserversion angenommen wird. Die Wirkungsweise der übrigen Funktionen ist
// davon abhängig, dass die globalen Variablen mit korrekten Werten versorgt sind.
// Durch die Notation am Ende der Datei ist dies jedoch sichergestellt und die
// globalen Variablen sind in allen Dokumenten verfügbar, die diese Bibliothek
// einbinden.
// Die Funktion DHTML_init() bedient sich der Möglichkeit, abzufragen, ob ein
// Objekt existiert. Bereits in der ersten Abfrage wird getestet, ob ein Opera-
// Browser vorliegt. Das ist notwendig, da Opera je nach Nutzereinstellung auch
// angibt, 'document.all' oder 'document.layers' zu kennen. Zum Testen auf DOM-
// Verfügbarkeit eignet sich die Frage, ob document.getElementById verfügbar ist,
// denn das ist eine wichtige DOM-Methode, die in allen DOM-Implementierungen
// existieren sollte. Zum Testen auf die ältere Microsoft- und Netscape-Syntax
// wird auf deren zentrale DHTML-Objekte hin abgefragt. Wenn 'document.all'
// verfügbar ist, ist Syntax nach dem älteren Microsoft-Modell angesagt. Wenn
// 'document.layers' verfügbar ist, Syntax nach dem älteren Netscape-Modell. In
// beiden Fällen wird mit !OP der Opera-Browser ausgeschlossen, für den Fall, dass
// die Nutzereinstellungen die Kenntnis dieser Objekte ermöglichen.
// *******************************************************************************
function DHTML_init() {
	if (window.opera) {
    OP = 1;
	}
	if(document.getElementById) {
		DHTML = 1;
		DOM = 1;
	}
	if(document.all && !OP) {
		DHTML = 1;
		MS = 1;
	}
	if(document.layers && !OP) {
		DHTML = 1;
		NS = 1;
	}
}

// *********************************************************************************************************************************
// * Funktion getElem() - Elementobjekt ermitteln
// * Beispielaufrufe:
// *	Elementobjekt = getElem("id","Hinweis",null);
// *	Elementobjekt = getElem("name","Eingabefeld",0);
// *	Elementobjekt = getElem("tagname","p",8);
// *	Layerobjekt = getElem("index",2,null,null);
// *
// * Diese Funktion ist eigentlich die zentrale Funktion der hier vorgestellten Biblothek. Sie greift auf ein bestimmtes Element
// * im Dokument zu und gibt das Objekt dieses Elements zurück. Das funktioniert mit DOM-fähigen Browsern ebenso wie mit dem älteren
// * Internet Explorer 4.x und in eingeschränkter Form (nur im Zusammenhang mit layer- oder div-Elementen) auch mit Netscape 4.x.
// * In den meisten Fällen müssen Sie diese Funktion nicht selber aufrufen. Es handelt sich vielmehr um eine Basisfunktion, die von
// * den übrigen Funktionen der Bibliothek benutzt wird. Dennoch gibt es auch Fälle, in denen ein Direktaufruf dieser Funktion Sinn
// * macht. Die Funktion erwartet folgende Parameter:
// *	p1 ist die Art und Weise, wie auf ein Element zugegriffen werden soll.
// *		Es gibt vier erlaubte Werte für diesen Parameter: "id", "name", "tagname" und "index".
// *		Übergeben Sie "id", wenn Sie auf ein Element zugreifen wollen, das ein id-Attribut hat, z.B. <div id="Bereich">.
// *		Übergeben Sie "name", wenn das Element, auf das Sie zugreifen wollen, kein id-Attribut, aber dafür ein name-Attribut hat,
// *		z.B. <a name="Anker">. Übergeben Sie "tagname", wenn das Element, auf das Sie zugreifen wollen, weder ein id- noch ein
// *		name-Attribut hat.
// *		Übergeben Sie "index" nur dann, wenn es sich um Netscape-Layer handelt, die über das layers-Objekt mit Hilfe von Indexnummern
// *		angesprochen werden sollen.
// *
// *	p2 ist die nähere Angabe zu dem, was Sie bei p1 festgelegt haben:
// *		wenn Sie bei p1 den Wert "id" übergeben, dann erwartet die Funktion bei p2 den Wert des id-Attributs.
// *		wenn Sie bei p1 den Wert "name" übergeben, dann erwartet p2 den Wert des name-Attributs.
// *		wenn Sie bei p1 den Wert tagname übergeben haben, dann erwartet p2 den gewünschten Elementnamen, also z.B. h1 oder div.
// *		wenn Sie bei p1 den Wert "index" übergeben haben, erwartet p2 die Indexnummer für den gewünschten Netscape-Layer.
// *
// *	p3 wird nur dann benötigt, wenn bei p1 einer der beiden Werte "name" oder "tagname" angegeben wurde. In diesem Fall müssen Sie
// *	bei p3 eine Indexnummer angeben, mit der Sie festlegen, das wie vielte Element im Dokument mit dem entsprechenden Namen oder
// *	Elementnamen Sie meinen. Das erste Element hat die Indexnummer 0, das zweite Nummer 1 usw.
// *
// * Übergeben Sie bei Parametern, für die Sie keinen Wert angeben, einfach das Wort null (ohne Anführungszeichen!).
// *
// * Die Funktion getElem() geht der Reihe nach die möglichen DHTML-Modelle durch und fragt zuerst mit if(DOM) die globale Variable
// * DOM daraufhin ab, ob DOM-Syntax verfügbar ist. Wenn ja, dann wird abhängig von den übergebenen Parametern das gewünschte Element
// * nach DOM-Syntax ermittelt und zurückgegeben. Nur wenn keine DOM-Syntax verfügbar ist, wird versucht, die älteren DHTML-Modelle
// * anzuwenden. Zunächst wird mit if(MS) geprüft, ob das ältere DHTML-Modell von Microsoft verfügbar ist. Wenn ja, wird das Element
// * nach dessen Syntax über das document.all-Objekt ermittelt. Wenn auch die Microsoft-Syntax nicht greift, bleibt noch die ältere
// * Netscape-Syntax, die mit if(NS) abgefragt wird. In diesem Fall wird aus den übergebenen Parametern der Zugriff auf ein
// * Layer-Objekt konstruiert.
// *
// * Gleichzeitig erfolgt in der Funktion eine Fehlerbehandlung. In jedem Zweig der Funktion wird mit dem typeof-Operator geprüft,
// * ob das gewünschte Element überhaupt existiert und ob dieses ein Objekt darstellt. Tritt dieser Fall ein, wird das Element
// * erzeugt und zurückgegeben. Andernfalls wird mit Hilfe des  void-Operators undefined zurückgegeben. 
// **********************************************************************************************************************************/
function getElem(p1,p2,p3) {
 var Elem;
 if(DOM) {
   if(p1.toLowerCase()=="id") {
     if (typeof document.getElementById(p2) == "object")
     Elem = document.getElementById(p2);
     else Elem = void(0);
     return(Elem);
   }
   else if(p1.toLowerCase()=="name") {
     if (typeof document.getElementsByName(p2) == "object")
     Elem = document.getElementsByName(p2)[p3];
     else Elem = void(0);
     return(Elem);
   }
   else if(p1.toLowerCase()=="tagname") {
     if (typeof document.getElementsByTagName(p2) == "object" || (OP && typeof document.getElementsByTagName(p2) == "function"))
     Elem = document.getElementsByTagName(p2)[p3];
     else Elem = void(0);
     return(Elem);
   }
   else return void(0);
 }
 else if(MS) {
   if(p1.toLowerCase()=="id") {
     if (typeof document.all[p2] == "object")
     Elem = document.all[p2];
     else Elem = void(0);
     return(Elem);
   }
   else if(p1.toLowerCase()=="tagname") {
     if (typeof document.all.tags(p2) == "object")
     Elem = document.all.tags(p2)[p3];
     else Elem = void(0);
     return(Elem);
   }
   else if(p1.toLowerCase()=="name") {
     if (typeof document[p2] == "object")
     Elem = document[p2];
     else Elem = void(0);
     return(Elem);
   }
   else return void(0);
 }
 else if(NS) {
   if(p1.toLowerCase()=="id" || p1.toLowerCase()=="name") {
   if (typeof document[p2] == "object")
     Elem = document[p2];
     else Elem = void(0);
     return(Elem);
   }
   else if(p1.toLowerCase()=="index") {
    if (typeof document.layers[p2] == "object")
     Elem = document.layers[p2];
    else Elem = void(0);
     return(Elem);
   }
   else return void(0);
 }
}

function getCont(p1,p2,p3) {
   var Cont;
   if(DOM && getElem(p1,p2,p3) && getElem(p1,p2,p3).firstChild) {
     if(getElem(p1,p2,p3).firstChild.nodeType == 3)
       Cont = getElem(p1,p2,p3).firstChild.nodeValue;
     else
       Cont = "";
     return(Cont);
   }
   else if(MS && getElem(p1,p2,p3)) {
     Cont = getElem(p1,p2,p3).innerText;
     return(Cont);
   }
   else return void(0);
}

function getAttr(p1,p2,p3,p4) {
   var Attr;
   if((DOM || MS) && getElem(p1,p2,p3)) {
     Attr = getElem(p1,p2,p3).getAttribute(p4);
     return(Attr);
   }
   else if (NS && getElem(p1,p2)) {
       if (typeof getElem(p1,p2)[p3] == "object")
        Attr=getElem(p1,p2)[p3][p4]
       else
        Attr=getElem(p1,p2)[p4]
         return Attr;
       }
   else return void(0);
}

function setCont(p1,p2,p3,p4) {
   if(DOM && getElem(p1,p2,p3) && getElem(p1,p2,p3).firstChild)
     getElem(p1,p2,p3).firstChild.nodeValue = p4;
   else if(MS && getElem(p1,p2,p3))
     getElem(p1,p2,p3).innerText = p4;
   else if(NS && getElem(p1,p2,p3)) {
     getElem(p1,p2,p3).document.open();
     getElem(p1,p2,p3).document.write(p4);
     getElem(p1,p2,p3).document.close();
   }
}

// *******************************************************************************
// Function DoLM - DateOfLastModification
// Aufruf: DoLM();
// -------------------------------------------------------------------------------
// Diese Funktion bereitet das letzte Modifikationsdatum der zugrundeliegenden
// Datei im aktuellen Dokument auf.
// *******************************************************************************
	function DoLM() {
		var oDoLM = new Date(document.lastModified);
		document.write("  "+oDoLM.toLocaleString());
	}

DHTML_init();
