String.prototype.trim = function() {

  var string = this;
  string = string.replace(/^\s*(.*)/, "$1");
  string = string.replace(/(.*?)\s*$/, "$1");
  return string;
}
/**************************************************************************************************
/* Formulardaten überprüfen                                                             
/**************************************************************************************************/                                                        
/**************************************************************************************************/
/* Regulärerausdruck, der auf E-Mailadresse überprüft */
/**************************************************************************************************/
var mailReg    = /^[_\.0-9A-Za-z-]+@([0-9A-Za-z][0-9A-Za-z-]+\.)+[a-zA-Z]{2,10}$/;

/******************************************************************************************************
 * checkName
 *
 * Parameter:	
 *
 * Beschreibung:	
 * Die Funktion überprüft, ob vom Benutzer ein Name angegeben wurde. Ist dies nicht der Fall, wird
 * eine Fehlermeldung ausgeben.
 * ******************************************************************************************************/ 
function checkName() {
	var name = document.getElementById('form').name.value;
	
	if  (!document.getElementById("errorMessageName").firstChild.nodeValue) {
		var text = document.createTextNode(" ");
		document.getElementById("errorMessageName").appendChild(text);
	}
	if (name == "" || name.length < 3) {
		var text = "Bitte geben Sie Ihren Namen an!";
		document.getElementById("errorMessageName").firstChild.nodeValue = text;
		return false;
	}
	else {
		document.getElementById("errorMessageName").firstChild.nodeValue = " ";
    return true;
	}
}
/******************************************************************************************************
 * checkMail
 *
 * Parameter:	
 *
 * Beschreibung:	
 * Die Funktion überprüft, ob vom Benutzer ein gültige E-Mailadresse angegeben wurde. Ist dies nicht 
 * der Fall, wird eine Fehlermeldung ausgeben.
 * ******************************************************************************************************/ 
function checkMail() {
	var checkMail  = document.getElementById('form').mail.value.search(mailReg);
	var message    = document.getElementById('form').message.value;
	
	if  (!document.getElementById("errorMessageMail").firstChild.nodeValue) {
		var mailTextNode = document.createTextNode(" ");
		document.getElementById("errorMessageMail").appendChild(mailTextNode);
	}

	if (checkMail == -1) {
		var mailText = "Sie müssen eine gültige E-Mailadresse eingeben!";
		document.getElementById("errorMessageMail").firstChild.nodeValue = mailText;
		return false;
	}
	else {
		document.getElementById("errorMessageMail").firstChild.nodeValue = " ";
    return true;
	}
}
/******************************************************************************************************
 * checkAll
 *
 * Parameter:	
 *
 * Beschreibung:	
 * Die Funktion führt die Funktionen "checkMail" und "checkName" aus und im Falle, daß diese einen  
 * positiven Rückgabewert haben, werden die Formulardaten abgeschickt. Ist dies nicht der Fall, ruft
 * die Funktion sich nach hundert Milisekunden erneut auf und überprüft so die Angaben von neuem.
 * ******************************************************************************************************/
function checkAll(action) {
	globaleAction = action;
  if (action == "checkAll" || action == "send") {
    checkMail();
    checkName();
  }
  if (checkMail() && checkName()) {
    document.getElementById('form').Submit.disabled = false;
    if (action == "send") {
      document.getElementById('form').submit();
    }
  } else {
    document.getElementById('form').Submit.disabled = true;
		window.setTimeout("checkAll(globaleAction)", 100);
  }
}
function strapse() {
	document.getElementById("errorMessageMail").appendChild(document.createTextNode(''));
	document.getElementById("errorMessageName").appendChild(document.createTextNode(''));
}
/******************************************************************************************************
 * changePasswordField
 *
 * Parameter:	
 *
 * Beschreibung:	
 * Die Funktion ersetzt den eigentlichen Submitbutton durch einen, der nur mit JavaScript 
 * funktioniert und nicht das Formular einfach abschickt, sondern statdessen eine entsprechende
 * Funktion aufruft, die zunächst die Angaben überprüft.
 * Die Funktion ist notwendig, damit die JavaScript-losen Besucher trotzdem E-Mails verschicken
 * können.
 * ******************************************************************************************************/ 
function changePasswordField() {
	/* Das Skript bedurfte einiger Änderungen, da der InternetExplorer leider
	 * die Event-Handler-Anweisung dynamisch erzeugter HTML-Elemente nicht
	 * ausführt. Der dynamische Austausch der Abschicken-Schlatfläche wird 
	 * aus diesem Grunde nur noch für andere Browser druchgeführt. Beim 
	 * InternetExplorer ist die Funktionsweise aber totzdem nicht eingeschränkt,
	 * da er anscheinend die "Submit-Anweisung" eines "Submit-Buttons" erst
	 * nach der "onClick-Anweisung" ausführt. */
	if (!document.all) {
		var field = document.getElementById('submitButton');
		
		var newPasswordField   	= document.createElement('input');
		
		/* Die Stile des Originalpasswortfelldes müssen für das neue Passwortfeld
		 * kopiert werden 
		 * Leider gibt es Fehler beim InternetExplorer, durch die das einfache Kopieren 
		 * des Stilobjketes nicht möglich sind. Statdessen werden die Stile mit outerHTML
		 * als String ausgelesen und dann Stück für Stück wieder in Eigenschaften des
		 * Stilobjketes des neuen Passwortfeldes umgewandelt. */
		 
		var getStylesReg   = / style=("|')?(.*?)("|'|\s) /i;
		var convertNameReg = /(.+)-(.)(.*)/i;
		var getInputHTMLReg = /^(<input.*id=("|')?submitButton("|'|\s)?.*>)$/i;
		
		getInputHTMLReg.exec(field.parentNode.innerHTML.toLowerCase());
		var inputHTML = RegExp.$1;
		getStylesReg.exec(inputHTML);
		
		/* Die einzelenen Stile werden aus dem Gesamtstring extraiert und in einme
		 * Array geppeichert */
		var styles	 = new Array();
		styles  = RegExp.$2.split(';');
	
		/* Jeder Stil liegt jetzt als einzelner String im Array styles bereit. Allerdings
		 * müsssen noch die Bezeichner-Werte-Paare von einander getrennt werden.
		 * Dafür folgender Schleifendurchlauf */
		for (i = 0; i < styles.length; i++) {
			
			/* Bezeichner von Werten trennen */
			var style = new Array();
			style = styles[i].split(':')
			
			/* Nur wenn die Trennung erfolgreich war, kann davon ausgegangen werden
			 * daß es sich um eine gültige Styleangabe handelt */
			if (style[0] && style[1]) {
				
				/* Von Stylesheet-Schreibweise in javaScript-Schreibweise umwandeln */
				convertNameReg.exec(style[0].trim());
				var styleName = RegExp.$1 + RegExp.$2.toUpperCase() + RegExp.$3;
				
				/* Eigenschaften erzeugen */
				eval("newPasswordField.style." + styleName + "= '" + style[1].trim() + "';");
			}
			
		}
	
		/* Neues Passwortfeld erzeugen und die notwendigen Attribute kopieren */
		newPasswordField.setAttribute('type', 'button');
		
		/* Alle Attribute werden nun kopiert außer "type", weil diese ja gerade einen anderen
			 Wert enthalten soll und außer "style", weil einige Browser dies nicht richtig 
			 hinbekommen.*/
		for (i = 0; i < field.attributes.length; i++) {
			if (field.attributes[i].nodeName != 'type' && field.attributes[i].nodeName != 'style' && 
					field.attributes[i].nodeValue != "") {
				newPasswordField.setAttribute(field.attributes[i].nodeName, field.attributes[i].nodeValue);
			}
		}
		/* Leider bekommt der InternetExplorer auch das kopieren der Attribute nicht richtig hin. So erfindet er z.B. einfach
			 Ein Attribut "height", was es eigentlich gar nicht gab. Außerdem übergibt der auch den Wert für das Attribute "className"
			 nicht richtig. Aus diesem Grund folgende Zeilen:*/
		for (i = 0; i < newPasswordField.attributes.length; i++) {
			if (newPasswordField.attributes[i].nodeName == "height") {
				newPasswordField.removeAttribute(newPasswordField.attributes[i].nodeName);;
			}
		}
		newPasswordField.className = field.className;
		
		
		field.parentNode.replaceChild(newPasswordField, field);
	}
}
