// Benötigt dhWerkzeuge.js

// *******************************
// ** Allgemeine Formularsachen **
// *******************************

var betreteneFelder = new Array();

function feldMarkieren(was) {
	// prüfen, ob in dieser Sitzung schon einmal in das Feld geklickt
	// wurde und es daher schon in der Liste der betr. Felder steht
	schonBetreten = 0;
	for(testFeld=0;testFeld<=betreteneFelder.length;testFeld++)
		{
		if(betreteneFelder[testFeld] == was.name)
			{
			schonBetreten = 1;
			}
		}
	if (schonBetreten != 1)
		{
		// alles auswählen, falls Feld zum ersten Mal betreten wird
		was.select();
		// zu den bereits betretenen Feldern hinzufügen
		betreteneFelder.push(was.name);
		}
	}

function wiederherstellen(was) {
	if (was.value == "")
		{
		was.value = was.defaultValue;
		}
	}

function lockButtons(action)
	{
	//alle vorhandenen submit-buttons inaktiv setzen
	for (var formulare=0;formulare<document.forms.length;formulare++)
		{
		for (var elemente=0;elemente<document.forms[formulare].elements.length;elemente++)
			{
			if (document.forms[formulare].elements[elemente].type == "submit")
				{
				document.forms[formulare].elements[elemente].disabled=true;
				}
			if (document.forms[formulare].elements[elemente].name == "action2")
				{
				document.forms[formulare].elements[elemente].value=action;
				}
			}
		}
	return true;
	}


// ************************
// ** Abschnitt Richedit **
// ************************

// globale Variablen (zum Merken)
var verwendeRichEdit = false;

//Beschriftungen der Ein/Ausschaltlinks (von Perl beim Aufruf von richEditStarten übergeben)
var richEditTurnOnText = new String;
var richEditTurnOffText = new String;
// Link (Text und URL) auf eine beliebige Anleitung (auch von Perl übergeben)
var richEditInfoLinkURL = new String;
var richEditInfoLinkLabel = new String;
// CSS-Basisname um die dynamischen Links entsprechend zu benennen
var richEditCssBaseName = new String;

var poorEditFormElement = new Object; // Das ist das Standardformularelement (Zugriff über .value)
var richEditObject = new Object; // das ist der Editor als solcher
var richEditTurnOnLink = new Object; // zum merken des dynamisch generierten Ein-,...
var richEditTurnOffLink = new Object; // ...Ausschalt-...
var richEditInfoLink = new Object; // und Infolinks.

var richEditLinksInitialized = false; // Wird nach dem Erzeugen der Umschaltlinks auf true gesetzt

function richEditEncodeNewlines(dasObjekt, html)
	{
	if (verwendeRichEdit)
		{
		var meinText = dasObjekt.value;

		// Zeilenumbrüche und Absätze
		var lineBreak = "<br />";
		if (html) {lineBreak = "<br>"}
		
		meinText = meinText.replace(/\n\n|\r\n\r\n/g,"<"+"/p><"+"p>");
		meinText = meinText.replace(/\n|\r\n/g,lineBreak);
		meinText = '<'+'p>' + meinText + '<'+'/p>';
		dasObjekt.value = meinText;
		}
	}

function richEditDecodeNewlines(dasObjekt)
	{
	// entfernt aus dem vom FCK-Editor modifizierten Inhaltsfeld
	// alle p- und br-Tags und ersetzt sie durch Newlines

	if (verwendeRichEdit)
		{
		var meinText = getEditorValue('fckTextarea'); //dasObjekt.value;

		// erstmal alle Newlines raus. 
		// Da fck selbst noch Umbrüche reinbaut, 
		// werden diese durch ein Leerzeichen ersetzt.
		meinText = meinText.replace(/\r/g," ");
		meinText = meinText.replace(/\n/g," ");

		// Und jetzt ordentlich!
		meinText = meinText.replace(/<p ?[^>]*>/g,"");
		meinText = meinText.replace(/<\/p>/g,"\n\n");
		meinText = meinText.replace(/<br [^\/]*\/>/g,"\n");
		meinText = meinText.replace(/<br[^>]*>/g,"\n");
		meinText = meinText.replace(/&#160\;/g," ");
		meinText = meinText.replace(/&gt\;/g,">");
		meinText = meinText.replace(/&lt\;/g,"<");
		meinText = meinText.replace(/&amp\;/g,"&");

		// eventuelle mehrfache Leerzeichen auf eines kürzen
		meinText = meinText.replace(/ +/g," ");
		
		// Leerzeichen am Zeilenbeginn entfernen und ans Zeilenende schieben
		meinText = meinText.replace(/\n +/g," \n");

		dasObjekt.value = meinText;
		}
	}

function richEditStarten(dasObjekt,cssBaseName,turnOffText,turnOnText,infoLinkLabel,infoLinkURL)
	{
	// initialisiert das Formular
	// und setzt im Zusammenhang damit ein paar globale Werte
	
	// merken, ob wir RichEdit verwenden - hier ja noch nicht.
	verwendeRichEdit = false;
	
	// Die von Perl übergebenenen Texte und Hilfe-URL global speichern
	if (turnOnText != "") {richEditTurnOnText = turnOnText}
	if (turnOffText != "") {richEditTurnOffText = turnOffText}
	if (infoLinkLabel != "") {richEditInfoLinkLabel = infoLinkLabel}
	if (infoLinkURL != "") {richEditInfoLinkURL = infoLinkURL}
	if (cssBaseName != "") {richEditCssBaseName = cssBaseName}
	
	// Das von Perl übergebenen Objekt global speichern
	poorEditFormElement = dasObjekt;

	
	// RichEdit nur verwenden, wenn das Anzeigegerät ein Desktop ist

	if(window.getCSSmediaType)
		{
		if(getCSSmediaType() == 'screen')
			{
			// Umschaltlinks initialisieren, wenn noch nicht geschehen
			if (!richEditLinksInitialized)
				{
				richEditInitializeLinks()
				}
			else
				{
				// ansonsten das Cookie löschen, denn dann erfolgt der Aufruf 
				// logischerweise zum zweiten Mal und damit aus dem Skript heraus
				setCookie("noRichEditor","0",365);
				}

			// richEdit nur verwenden, wenn der User kein Cookie hat,
			// daß er Richedit nicht möchte
			if (getCookie("noRichEditor") != "1")
				{
				var elementID = 'fckTextarea';

				//global merken, daß wir RichEdit verwenden
				verwendeRichEdit = true;

				//text vorher dynamisch umwandeln (Newlines in HTML)
				richEditEncodeNewlines(dasObjekt);

				//Editor erzeugen
				var oFCKeditor = new FCKeditor(elementID) ;
				richEditObject = oFCKeditor,
				oFCKeditor.BasePath = "/_ressourcen/plugins/fck/" ;
				oFCKeditor.ReplaceTextarea() ;	
				}
			else
				{
				if (getCookie("noRichEditor") == "1")
					{
					richEditSwitchLinks(true,false,true);

					// Cookie verlängern
					setCookie("noRichEditor","1","365");
					}
				}
			}
		}
	}

function getEditorValue( instanceName )
	{
	// Get the editor instance that we want to interact with.
	var oEditor = FCKeditorAPI.GetInstance( instanceName ) ;
	
	// Get the editor contents as XHTML.
	return oEditor.GetXHTML( true ) ; // "true" means you want it formatted.
	}

function FCKeditor_OnComplete( editorInstance )
	{
	// sobald der Editor erzeugt ist,
	// werden Ein-, Ausschalt- und Hilfelink dynamisch erzeugt
	var textfeldName = editorInstance.Name;
	if (textfeldName == 'fckTextarea')
		{
		richEditSwitchLinks(false,true,true);
		}
	}

function richEditBeenden()
	{
	richEditDecodeNewlines(poorEditFormElement);
	document.getElementById("fckTextarea").style.display = "block";
	
	var formularBereich = document.getElementById("fckTextarea___Frame").parentNode;
	
	while (document.getElementById("fckTextarea___Frame") || document.getElementById("fckTextarea___Config"))
		{
		formularBereich.removeChild(formularBereich.childNodes[0]);
		}
	

	// merken,  daß wir kein Richedit verwenden
	verwendeRichEdit = false;

	// Umschaltlinks umschalten
	richEditSwitchLinks(true,false,true);

	// Cookie setzen, daß User nicht will
	setCookie("noRichEditor","1",365);
	}

function richEditInitializeLinks()
	{
	// Alle Links erzeugen und dann den Einschaltlink verstecken

	// Damit die Links in einem eigenen Abschnitt stehen
	var linkAbschnitt = document.createElement("p");
	linkAbschnitt.id = richEditCssBaseName + "_richEditLinkArea";
	domAttributSetzen(linkAbschnitt,"class",richEditCssBaseName+"_richEdit");
	document.getElementById("afterTextArea").appendChild(linkAbschnitt);

	// Abschaltlink erzeugen und einhängen
	richEditTurnOffLink = document.createElement("a");
	richEditTurnOffLink.id = richEditCssBaseName + "_richEditTurnOffLink";
	domAttributSetzen(richEditTurnOffLink,"class",richEditCssBaseName+"_richEditLink");
	richEditTurnOffLink.style.display = "none";
	richEditTurnOffLink.href = "#";
	richEditTurnOffLink.onclick = new Function ("richEditBeenden();return false");
	richEditTurnOffLink.appendChild(document.createTextNode(richEditTurnOffText));
	linkAbschnitt.appendChild(richEditTurnOffLink);

	// Einschaltlink erzeugen, verstecken und einhängen
	richEditTurnOnLink = document.createElement("a");
	richEditTurnOnLink.href = "#";
	richEditTurnOnLink.id = richEditCssBaseName + "_richEditTurnOnLink";
	domAttributSetzen(richEditTurnOffLink,"class",richEditCssBaseName+"_richEditLink");
	richEditTurnOnLink.style.display = "none";
	richEditTurnOnLink.onclick = new Function ("richEditStarten(poorEditFormElement);return false");
	richEditTurnOnLink.appendChild(document.createTextNode(richEditTurnOnText));
	linkAbschnitt.appendChild(richEditTurnOnLink);

	// ggf. Anleitungslink erzeugen
	if (richEditInfoLinkURL != "" && richEditInfoLinkLabel != "")
		{
		richEditInfoLink = document.createElement("a");
		richEditInfoLink.href = richEditInfoLinkURL;
		richEditInfoLink.id = richEditCssBaseName + "_richEditInfoLink";
		domAttributSetzen(richEditInfoLink,"class",richEditCssBaseName+"_richEditLink");
		richEditInfoLink.style.display = "none";
		richEditInfoLink.appendChild(document.createTextNode(richEditInfoLinkLabel));
		linkAbschnitt.appendChild(document.createTextNode(" "));
		linkAbschnitt.appendChild(richEditInfoLink);
		}
	// merken, daß dies bereits erledigt ist und nie wieder tun.

	richEditLinksInitialized = true;
	}	

function richEditSwitchLinks(on,off,info)
	{
	// macht die Umschaltlinks entsprechend den Parametern sichtbar/unsichtbar
	var onState = false;
	var offState = false;
	var infoState = false;
	if (on) {onState = "inline"} else {onState = "none"};
	if (off) {offState = "inline"} else {offState = "none"};
	if (info) {infoState = "inline"} else {infoState = "none"};
	richEditTurnOnLink.style.display = onState;
	richEditTurnOffLink.style.display = offState;
	if (richEditInfoLink.childNodes.length > 0) {richEditInfoLink.style.display = infoState};
	}

// *********************************
// ** Dynamische Zitatausblendung **
// *********************************

function zitatzeigen(welches)
	{
	document.getElementById('langzitat'+welches).style.display = "inline";
	document.getElementById('kurzzitat'+welches).style.display = "none";
	}

function zitatkuerzen(welches)
	{
	document.getElementById('kurzzitat'+welches).style.display = "inline";
	document.getElementById('langzitat'+welches).style.display = "none";
	}

