/*
==================================================
Executing JavaScript on page load 060528 (Simon Willison)
==================================================
-> http://simonwillison.net/2004/May/26/addLoadEvent/

Hiermit können beliebig viele Funktionen beim "window.onload" aufgerufen werden
ohne dass ein vorher definiertes window.onload überschrieben wird.

- addLoadEvent einfach als erste Funktion einbinden
- Funktionen per addLoadEvent(Funktionsname) dem "window.onload" hinzufügen
  anstatt direkt per window.onload=Funktionsname;
*/

function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      if (oldonload) {
        oldonload();
      }
      func();
    };
  }
} 



/*
==================================================
Element-Klasse hinzufügen/entfernen 100112  (Wolfgang)
==================================================

Elementen soll eine Klasse hinzugefügt werden können, 
ohne bestehende Klassen zu überschreiben oder den Klassennamen zu wiederholen.
*/

function addClass(elem, str) {
	var regExS = new RegExp("\\" + str + "\\b"); // -> /\str\b/ -> Sucht str als einzelnes Wort
	if ( !elem.className || elem.className === "" || elem.className === " ") {
		elem.className = str;
	} else if (!regExS.test(elem.className)){
		elem.className += " " + str;
	}
}

function removeClass(elem, str) {
	var regExS = new RegExp("\\" + str + "\\b","g");
	elem.className = elem.className.replace(regExS, "");
	}
	


/*
==================================================
@ Zurückübersetzen 100112 (Wolfgang)
==================================================

Wenn zwecks Spamschutz im Html ein alternativer String für @ eingesetzt wird,
kann dieses Script den String wieder zurückübersetzen - so bleiben Bots ohne
js weiterhin ausgesperrt, 95% der Besucher sehen aber die echte E-Mail-Adresse

- der Ersatzstring sollte in einem del mit Klasse "schutz" liegen. 
Das ist semantisch ziemlich korrekt und das Script muss nicht lange suchen
- das del sollte per css "text-decoration:none;" bekommen, sonst wird es durchgestrichen dargestellt
- Alle del.schutz werden durch @ (kodiert) überschrieben, sie sollten also für nichts anderes verwendet werden

Benötigt:
- "Executing JavaScript on page load" (addLoadEvent)
*/

function ersetzeAt() {
	var dels = document.getElementsByTagName("del");
	for (var i=0; i<dels.length; i++) {
		if (dels[i].className === "schutz") {
			dels[i].firstChild.data = "&#64;";
			}
		}
	}

addLoadEvent(ersetzeAt);



/*
==================================================
Eingabefelder leeren 100112  (Wolfgang)
==================================================

Löscht auf focus den Standardinhalt von (normalen) Eingabefeldern 
und setzt ihn wieder ein, wenn das Feld nach Verlassen leer ist.

- der Standardwert wird aus dem placeholder-Attribut ausgelesen 
  und es wird nur gelöscht, wenn dieses gesetzt ist
  (ich nutzte vorher das alt-Attribut, das ist aber in input[type="text"] nicht erlaubt;
   placeholder soll in html5 genau so funktionieren - im Safari tut es das schon)
- sinnvollerweise sollte placeholder den selben (Standard-)Wert wie value haben
- Passwortfelder werden auch gelöscht, wenn der value nicht dem placeholder entspricht 
  (value von Passwortfeldern ist nicht prüfbar)
- .getAttribute("placeholder") ist notwendig, da das Attribut älteren Browsern nicht bekannt ist

Benötigt:
- "Executing JavaScript on page load" (addLoadEvent)
*/

function inputleeren(inputelement) {
if (inputelement.value===inputelement.getAttribute("placeholder")) inputelement.value="";
}

function inputfuellen(inputelement) {
if (inputelement.value==="") inputelement.value=inputelement.getAttribute("placeholder");
}

// Initialisierung: 
// die richtigen input-Elemente werden bestimmt 
// und onfocus- und onblur-Funktionen werden zugewiesen
function prepareinputs() {
var inputs = document.getElementsByTagName("input");
for (var i=0;i<inputs.length;i++) {
	if (inputs[i].type === "text" && inputs[i].getAttribute("placeholder") && inputs[i].getAttribute("placeholder").length > 0) {
		inputs[i].onfocus = function() {inputleeren(this);};
		inputs[i].onblur = function() {inputfuellen(this);};
		//inputfuellen(inputs[i]);
		}
	else if (inputs[i].type === "password"){
		inputs[i].onfocus = function() {this.value="";};
		inputs[i].onblur = function() {inputfuellen(this);};
		//inputfuellen(inputs[i]);
		}
	}
}

addLoadEvent(prepareinputs);
