/* DHTML-Bibliothek */

/** Diese Variable speichert, ob Dynamisches HTML bei dem vom Anwender eingesetzten Browser verf�gbar ist oder nicht. Wenn Dynamisches HTML nach irgendeinem der bekannten DHTML-Modelle verf�gbar ist, dann erh�lt sie den Wert true (wahr), wenn nicht, dann den Wert false (unwahr). Mit der simplen Abfrage if (DHTML) k�nnen Sie dann im Verlauf eines eigenen Scripts �berpr�fen, ob �berhaupt Dynamisches HTML m�glich ist. */
var DHTML = false;
/** Diese Variable speichert, ob Dynamisches HTML nach DOM-Syntax m�glich ist oder nicht (Wert true oder Wert false). Mit if (DOM) k�nnen Sie abfragen, ob ein neuerer Browser am Werk ist, der das DOM in seiner JavaScript-Implementierung unterst�tzt. */
var DOM = false;
/** Wenn der Wert der Variable MSIE4 gleich true ist, dann l�uft Ihr Script mit auf einem Internet Explorer der 4er-Generation. Mit if (MSIE4) k�nnen Sie also in Ihrem Script abfragen, ob mit dem DHTML-Modell des Internet Explorer 4.x gearbeitet werden muss. */
var MSIE4 = false;
/** Wenn diese Variable den Wert true besitzt, dann l�uft Ihr Script mit auf einem Netscape-Browser der 4er-Generation. Wenn ein 6er-Netscape oder ein anderer Abk�mmling des Mozilla-Browsers eingesetzt wird, ist stattdessen die Variable DOM gleich true, w�hrend NS4 gleich false ist. Mit if (NS4) k�nnen Sie also in Ihrem Script abfragen, ob mit der DHTML-Syntax des alten 4er-Netscape gearbeitet werden muss. */
var NS4 = false;
/** Wenn die Variable OP den Wert true hat, dann l�uft Ihr Script 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 um einen neueren Opera-Browser, ist in den Variablen DOM der Wert true gespeichert. */
var OP = false;

if (document.getElementById) {
	DHTML = true;
	DOM = true;
} else {
	if (document.all) {
		DHTML = true;
		MSIE4 = true;
	} else {
		if (document.layers) {
			DHTML = true;
			NS4 = true;
		}
	}
}
if (window.opera) {
	OP = true;
}

/**
 * Diese Funktion ist eigentlich die zentrale Funktion der hier vorgestellten
 * Bibliothek. 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
 * auch mit Netscape 4.x: Sie k�nnen in diesem Browser auf Layer und  simulierte
 * Layer �ber deren Namen, ID oder Indexnummer zugreifen sowie auf Grafiken,
 * Links bzw. Anker, Java-Applets und Formulare �ber deren Namen.
 *
 * @attrib Mode 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 "layerindex". �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 "layerindex" nur dann, wenn es
 * sich um Netscape-Layer handelt, die �ber das layers-Objekt mit Hilfe von
 * Indexnummern angesprochen werden sollen.
 * @attrib Identifier ist die n�here Angabe zu dem, was Sie bei Mode festgelegt
 * haben: Wenn Sie bei Mode den Wert "id" �bergeben, dann erwartet die Funktion
 * bei Identifier den Wert des id-Attributs. Wenn Sie bei Mode den Wert "name"
 * �bergeben, dann erwartet Identifier den Wert des name-Attributs. Wenn Sie bei
 * Mode den Wert tagname �bergeben haben, dann erwartet Identifier den
 * gew�nschten Elementnamen, also z.B. "h1" oder "div". Wenn Sie bei Mode den
 * Wert "layerindex" �bergeben haben, erwartet Identifier die Indexnummer f�r
 * den gew�nschten Netscape-Layer.
 * @attrib ElementNumber wird nur dann ben�tigt, wenn bei Mode einer der beiden
 * Werte "name" oder "tagname" angegeben wurde. In diesem Fall m�ssen Sie bei
 * ElementNumber eine Indexnummer angeben, mit der Sie festlegen, das wievielte
 * Element im Dokument mit dem entsprechenden Namen oder Elementnamen Sie meinen.
 * Das erste Element hat die Indexnummer 0, das zweite Nummer 1 usw.
 */
function getElement( Mode, Identifier, ElementNumber) {
	var Element, ElementList;
	if (DOM) {
		if (Mode.toLowerCase() == "id") {
			Element = document.getElementById(Identifier);
			if (!Element) {
				Element = false;
			}
			return Element;
		}
		if (Mode.toLowerCase() == "name") {
			ElementList = document.getElementsByName(Identifier);
			Element = ElementList[ElementNumber];
			if (!Element) {
				Element = false;
			}
			return Element;
		}
		if (Mode.toLowerCase() == "tagname") {
			ElementList = document.getElementsByTagName(Identifier);
			Element = ElementList[ElementNumber];
			if (!Element) {
				Element = false;
			}
			return Element;
		}
		return false;
	}
	if (MSIE4) {
		if (Mode.toLowerCase() == "id" || Mode.toLowerCase() == "name") {
			Element = document.all(Identifier);
			if (!Element) {
				Element = false;
			}
			return Element;
		}
		if (Mode.toLowerCase() == "tagname") {
			ElementList = document.all.tags(Identifier);
			Element = ElementList[ElementNumber];
			if (!Element) {
				Element = false;
			}
			return Element;
		}
		return false;
	}
	if (NS4) {
		if (Mode.toLowerCase() == "id" || Mode.toLowerCase() == "name") {
			Element = document[Identifier];
			if (!Element) {
				Element = document.anchors[Identifier];
			}
			if (!Element) {
				Element = false;
			}
			return Element;
		}
		if (Mode.toLowerCase() == "layerindex") {
			Element = document.layers[Identifier];
			if (!Element) {
				Element = false;
			}
			return Element;
		}
		return false;
	}
	return false;
}

/**
 * �ber diese Funktion, die ihrerseits auf die Funktion getElement() zur�ckgreift, k�nnen Sie auf bequeme Weise den Wert eines Attributs eines bestimmten Elements ermitteln - zumindest wenn das DOM-Modell oder das �ltere Microsoft-Modell f�r DHTML verf�gbar sind. Neben den drei bereits bekannten ersten Parametern erwartet diese Funktion einen vierten Parameter AttributeName. Bei diesem m�ssen Sie den Namen des gew�nschten Attributs �bergeben. Wenn Sie den dritten Parameter ElementNumber nicht angeben, notieren Sie an dessen Stelle das Schl�sselwort null.
 */
function getAttribute (Mode, Identifier, ElementNumber, AttributeName) {
  var Attribute;
  var Element = getElement(Mode, Identifier, ElementNumber);
  if (!Element) {
    return false;
  }
  if (DOM || MSIE4) {
    Attribute = Element.getAttribute(AttributeName);
    return Attribute;
  }
  if (NS4) {
    Attribute = Element[AttributeName]
    if (!Attribute) {
       Attribute = false;
    }
    return Attribute;
  }
  return false;
}

/**
 * �ber diese Funktion k�nnen Sie auf bequeme Weise den Inhalt eines Elements ermitteln - zumindest wenn das DOM-Modell oder das �ltere Microsoft-Modell f�r DHTML verf�gbar sind. getContent() bedient sich der Basisfunktion getElement() und reicht ihre drei �bergebenen Parameter einfach an jene durch. Bei DOM-Syntax versucht sie, an den Textinhalt des Elements mit firstChild.nodeValue zu kommen, bei Microsoft-Syntax �ber die Eigenschaft innerText des all-Objekts.
 */
function getContent (Mode, Identifier, ElementNumber) {
  var Content;
  var Element = getElement(Mode, Identifier, ElementNumber);
  if (!Element) {
    return false;
  }
  if (DOM && Element.firstChild) {
    if (Element.firstChild.nodeType == 3) {
      Content = Element.firstChild.nodeValue;
    } else {
      Content = "";
    }
    return Content;
  }
  if (MSIE4) {
    Content = Element.innerText;
    return Content;
  }
  return false;
}

/**
 * Mit dieser Funktion k�nnen Sie den Inhalt eines Elements dynamisch �ndern. Die Funktion setContent() bedient sich f�r den Zugriff auf das gew�nschte Element der Basisfunktion getElement(). Die ersten drei Parameter, die bei denen der �brigen Funktionen gleichen, werden dazu an getElement() weitergereicht. Als vierten Parameter Text erwartet die Funktion setContent() den gew�nschten Textinhalt. Beachten Sie, dass dieser Text zumindest beim DOM-Modell und beim �lteren Microsoft-Modell nur als reiner Text interpretiert wird. HTML-Formatierungen im Text werden dabei als Klartext interpretiert.
�bergeben Sie bei Parametern, f�r die Sie keinen Wert angeben, das Schl�sselwort null.
 */
function setContent (Mode, Identifier, ElementNumber, Text) {
  var Element = getElement(Mode, Identifier, ElementNumber);
  if (!Element) {
    return false;
  }
  if (DOM && Element.firstChild) {
    Element.firstChild.nodeValue = Text;
    return true;
  }
  if (MSIE4) {
    Element.innerText = Text;
    return true;
  }
  if (NS4) {
    Element.document.open();
    Element.document.write(Text);
    Element.document.close();
    return true;
  }
}

/**
 * Return the available content height space in browser window.
 */
function getInsideWindowHeight() {
    return window.innerHeight || document.body.parentElement.clientHeight || document.body.clientHeight;
}

/**
 * Return the available content width space in browser window.
 */
function getInsideWindowWidth() {
    return window.innerWidth || document.body.parentElement.clientWidth || document.body.clientWidth;
}

