/**
* Klasse zum Ersetzen eines Titels in XHTML durch eine Titel-Grafik, die über ein Skript generiert wird.
*
* Damit das Skript funktioniert, muss folgender Aufbau für Titel gegeben sein:
*
* <h2><span>Titel</span></h2>
*
* Das h2-Tag kann natürlich auch ein h1, h3, etc. sein. Das span-Tag muss vorhanden sein, damit man den Text
* verstecken kann. Zwischen h2- und span-Tag können auch optional noch ein weiterer Tag stehen, dieser muss
* aber über die Funktion "setAdditionalTitleTag" angeben werden.
*
* Das Ersetzen sollte über die onload-Funktion des body-Tags gestartet werden:
* <body onload="initPage()">
*
* Beispiel:
*
* var tir = new TitleImageReplacement('content','h2','../../scripts/titlegen.php','title');
* tir.setAdditionalTitleTag('div');
* tir.setImageScriptAdditionalQueryString('&height=50');
* tir.startReplace();
*
* @author		Alexander Rinass <ar@electronic-minds.de>
* @package		em
* @category		libhtml
*/

/**
* Konstruktor.
*
* @param	string		ID des Elements, innerhalb dessen nach Title-Tags gesucht wird.
* @param	string		Name des Tags, dass als Title-Tag behandelt wird.
* @param	string		Pfad des Skripts, dass die grafischen Titel generiert.
* @param	string		Name des Parameters, der den Titel entgegennimmt.
*/
function TitleImageReplacement(rootElementName, titleElementName, imageScriptPath, imageScriptTitleParam)
{
	/**
	* Dies bezeichnet das Element, innerhalb dessen nach den entsprechenden
	* Title-Tags (siehe Variable "titleElementName") gesucht wird.
	*
	* Das Element muss im XHTML-Code durch eine ID gekennzeichnet sein.
	*
	* @var	string
	*/
	this.rootElementName = rootElementName;

	/**
	* Bezeichnet den Namen des Tags, dessen Inhalt durch einen grafischen
	* Titel ersetzt werden soll. Dies sollte eigentlich ausnahmslos ein
	* Headline-Tag (h1, h2, ...) sein.
	*
	* @var	string
	*/
	this.titleElementName = titleElementName;

	/**
	* Der Pfad zu dem Skript, das die grafischen Titel generiert.
	*
	* @var	string
	*/
	this.imageScriptPath = imageScriptPath;

	/**
	* Der Name des Parameters des Grafik-Skripts, der den Titel entgegen nimmt.
	*
	* @var	string
	*/
	this.imageScriptTitleParam = imageScriptTitleParam;

	/**
	* Zusätzliche Parameter und Werte für das Grafik-Skript.
	*
	* @var	string
	*/
	this.imageScriptAdditionalQueryString = '';

	/**
	* Hier kann ein weiteres Tag angegeben werden, das zwischen dem "titleElementName"
	* und dem erforderlichen span-Tag stehen. Sieht ein XHTML-Titel zum Beispiel
	* folgendermaßen aus
	*
	* <h2><div class="irgendwas"><span>Titel</span></div></h2>
	*
	* dann gibt man hier den div-Tag als zusätzliches Tag an. Mehr als ein Element sollte
	* nicht benötigt sein, ansonsten ist die Wahrscheinlichkeit sehr groß, dass der
	* XHTML-Code Mist ist.
	*
	* @var	string
	*/
	this.additionalTitleTag = '';

	/**
	* Wird der Wert auf true gesetzt, dann wird der zusätzliche Titel-Tag das eigentliche
	* Titel-Tag (und damit auch die Grafik bei diesem Element als Hintergrund eingefügt).
	*
	* @var	boolean
	*/
	this.useAdditionalTitleTag = false;
}

/**
* Setzt zusätzliche Parameter für das Grafik-Skript. Bitte auf korrektes Encoding achten.
*
* @param	string		Zusätzliche Parameter als Query-String (zum Beispiel "&height=50&bg=white").
*/
TitleImageReplacement.prototype.setImageScriptAdditionalQueryString = function(imageScriptAdditionalQueryString)
{
	this.imageScriptAdditionalQueryString = imageScriptAdditionalQueryString;
}

/**
* Setzt ein zusätzliches Tag, welches zwischen dem Titel-Tag und dem span-Tag steht.
*
* @param	string		Name des Tags, das zwischen dem Titel- und dem span-Tag steht.
*/
TitleImageReplacement.prototype.setAdditionalTitleTag = function(additionalTitleTag)
{
	this.additionalTitleTag = additionalTitleTag;
}

/**
* Beim Aufruf der Funktion wird die Verwendung des zusätzlichen Titel-Tags aktiviert.
*/
TitleImageReplacement.prototype.useAdditionalTitleTagAsTitleTag = function()
{
	this.useAdditionalTitleTag = true;
}

/**
* Ersetzt alle Titel durch Grafiken.
*/
TitleImageReplacement.prototype.startReplace = function()
{
	// Unterstützt der Browser DOM?
	if(document.getElementById)
	{
		var rootElement = document.getElementById(this.rootElementName);

		if(rootElement != null)
		{
			var titleElements = rootElement.getElementsByTagName(this.titleElementName);

			if(titleElements != null)
			{
				for(var i=0;i<titleElements.length;i++)
				{
					var titleElement = titleElements[i];
					var spanParentElement = titleElement;
					var spanElement = null;

					// Berücksichtige *ein* zusätzliches Tag zwischen dem Titel- und dem span-Tag.
					if(this.additionalTitleTag != '')
					{
						var tmpElements = titleElement.getElementsByTagName(this.additionalTitleTag);

						if((tmpElements != null) && (tmpElements.length == 1))
						{
							spanParentElement = tmpElements[0];

							/**
							* Wenn das zusätzliche Titel-Tag verwendet werden soll, wird es
							* unser primäres Titel-Element.
							*/
							if(this.useAdditionalTitleTag)
							{
								titleElement = spanParentElement;
							}
						}
					}

					spanElements = spanParentElement.getElementsByTagName('span');

					if((spanElements != null) && (spanElements.length == 1))
					{
						spanElement = spanElements[0];
					}

					if(spanElement != null)
					{
						// Speichere den Text im span-Tag und entferne dieses danach
						var text = spanElement.firstChild.nodeValue;
						spanParentElement.removeChild(spanElement);

						// URL des Titel-Generator-Skripts
						var imageScriptUrl =
							this.imageScriptPath + '?'
							+ this.imageScriptTitleParam + '=' + escape(text)
							+ this.imageScriptAdditionalQueryString;
						
						// Erzeuge neuen img-Tag und füge ihn ein
						var imageElement = document.createElement('img');
						imageElement.setAttribute('alt',text);
						imageElement.setAttribute('src',imageScriptUrl);
						
						titleElement.appendChild(imageElement);
					}
				}
			}
		}
	}
}
//EoF