/******  Auf- oder Zuklappen von Elementen mit einer ID *****/

function FOeffnen(ElementID,Aktion,Anzeige) {
	
	// Erwartet die ID des aufzuklappenden Elements
	// Die Aktion ist enweder "auf" oder "zu"
	// Nur für Aufklapp-Elemente mit einem Pfeil als Bild davor (Mac-Style)
	
	var PfeilID = ElementID + "pfeil";
	var LinkID = ElementID + "link";
	var Bildpfad = "upload/bullets/";
	
	if (Aktion == "auf"){
		if (document.getElementById(PfeilID) != null) {
			document.getElementById(PfeilID).setAttribute("src", Bildpfad + "pfeil_unten.gif");
		}
		if (document.getElementById(LinkID) != null) {
			document.getElementById(LinkID).setAttribute("href", "javascript:FOeffnen('" + ElementID + "','zu','" + Anzeige + "');");
		}
	} else if (Aktion == "zu") {
		if (document.getElementById(PfeilID) != null) {
			document.getElementById(PfeilID).setAttribute("src", Bildpfad+"pfeil_rechts.gif");
		}
		if (document.getElementById(LinkID) != null) {
			document.getElementById(LinkID).setAttribute("href", "javascript:FOeffnen('" + ElementID + "','auf','" + Anzeige + "');");
		}
	}
	FEinblenden(ElementID,Aktion,Anzeige);
}


/******  Ein- oder Ausblenden von Elementen mit einer ID *****/

function FEinblenden(ElementID,Aktion,Anzeige){
	
	// Erwartet die ID des ein- bzw. auszublenden Elements
	// Die Aktion ist enweder "auf" oder "zu"
	
	var Ergebnis = false;
	
	if (document.getElementById(ElementID) != null) {
		if (Aktion == "auf") {
			if (Anzeige == "visible") {
				document.getElementById(ElementID).style.visibility = "visible";
			} else if (Anzeige == "block" || Anzeige == "inline") {
				document.getElementById(ElementID).style.display = Anzeige;
			} else {
				if (navigator.appName == "Microsoft Internet Explorer") {
					document.getElementById(ElementID).style.display = "";
				} else {
					document.getElementById(ElementID).style.display = Anzeige;
				}
			}
			Ergebnis = true;
		} else if (Aktion == "zu") {
			if (Anzeige == "visible") {
				document.getElementById(ElementID).style.visibility = "hidden";
			} else {
				document.getElementById(ElementID).style.display = "none";
			}
			Ergebnis = true;
		}
	}
	return Ergebnis;
}


/******  Text-Feld wird mit einem Wert beschrieben bzw. ergänzt  *****/

function FBeschreiben(TextfeldID,Wert,Anfuegen){
	
	// Erwartet die ID des zu beschreibenden Textfeldes
	// Wenn angefügt werden soll, muss ein "+" angegeben werden
	
	if (document.getElementById(TextfeldID) != null) {
		if (Anfuegen == "+") {
			document.getElementById(TextfeldID).value = document.getElementById(TextfeldID).value + ", " + Wert;
		} else {
			document.getElementById(TextfeldID).value = Wert;
		}
	}
}


/******  Testfunktion für deutsches Datum  *****/

function TestfunktionDatum(DatumDeutsch){

	// Überprüft das entsprechende Format: TT.MM.JJJJ - z.B. 25.08.2003
	// T,M,J ist eine Zahl, an Position 3 und 5 ist ein Punkt, genau 10 Zeichen
	// Erwartet eine Zeichenkette (DatumDeutsch)
	// Liefert als Ergebnis das korrekte eingegebene Datum (richtiges Eingabedatum) oder einen Leerstring (falsches Eingabedatum) zurück

	var Ergebnis = "";
	var Ergebnis_wahr = DatumDeutsch;
	var Ergebnis_falsch = "";
	
	if (DatumDeutsch.length != 10) {
		Ergebnis = false;
	} else {
		for (var i = 0; i < DatumDeutsch.length; i++) {
			if (i == 2 || i == 5){
				if (DatumDeutsch.charAt(i) == ".") {
					Ergebnis = true;
					continue;
				} else {
					Ergebnis = false;
					break;
				}
			}
			else {
				if (isNaN(parseInt(DatumDeutsch.charAt(i),10)) == false) {
					Ergebnis = true;
					continue;
				} else {
					Ergebnis = false;
					break;
				}
			}
		}
	}
	
	if (Ergebnis == true){
		return Ergebnis_wahr;
	} else {
		return Ergebnis_falsch;
	}
}


/******  Öffnet kleines Browserfenster mit Flash-Kalender  *****/

function FopenKalender(URL,Datum,Funktionsname){
	
	// Ruft den Flashkalender auf
	// Erwartet
	// 1. die URL des Flashkalenders und 
	// 2. ein deutsches Datum (s.o. TestfunktionDatum) und 
	// 3. den Namen der Javascript-Funktion, die das neue Datum dann im ursprünglichen HTML-Formular einträgt
	
	var win = "toolbar=0,directories=0,menubar=0,scrollbars=0,resizable=0,left=100,top=180,width=200,height=202,dependent=1";
	var filename = URL+"?datum="+Datum+"&funktionsname="+Funktionsname;
	kalender = window.open(filename,"Kalender",win);
}


/******  Öffnet abhängiges Browserfenster  *****/

function FopenSeite(URL,Fenstername,x,y,sb){
	
	// Erwartet
	// URL				die URL der Seite und 
	// Fenstername		den Namen des Fensters und 
	// x					die Breite des Fensters und 
	// y					die Höhe des Fensters
	// sb					Scrollbalken (0,1)
	
	if(sb!=1){sb=0;}
	
	var win = "toolbar=0,directories=0,menubar=0,scrollbars="+sb+",resizable=0,left=50,top=50,width="+x+",height="+y+",dependent=1";
	var filename = URL;
	fenster = window.open(filename,Fenstername,win);
}


/******  Prüft Formularfelder, ob diese entsprechend ausgefüllt sind  *****/

function requiredFelder(Formular,ID){
	
/* 	Erwartet das zu durchsuchende Formular (alles innerhalb <form></form>),
	wird als Objektreferenz (document.[formname] bzw. document.[forms[nummer]]) übergeben.
	Durchsucht alle input- (text, passwort, checkbox, radio, file) und select- und textarea-Felder,
	die als Attribute "required" mit dem Wert "yes" besitzen.
	Ist der Feldwert nicht entsprechend dem angegebene Subtyp, so wird der Wert des Attributes "message" als Meldung angezeigt und
	die weitere Durchsuchung der Felder gestoppt.
 */	
	var gefundenFehler = false;
	var gefundenWert = false;
	var Meldung = "";
	var Element;
	var Check;
	var Elementgruppen = new Object();
	var Elemente;
	var i;
	var j;
	
	// ###### Alle Elemente des Formulars durchlaufen und nach Namen in ein Objekt (Elementgruppen) eintragen
	for (var i = 0; i < Formular.elements.length; i++) {
		
		with (Formular.elements[i]) {
		
			if (
			type != "submit" && 
			type != "reset" && 
			type != "button" && 
			type != "image" && 
			type != "hidden" &&
			getAttribute("required") == "yes" && 
			disabled == false) {
				//alert(name + " schon angelegt in Elementgruppen: " + (typeof Elementgruppen[name] == "object"));
				if (typeof Elementgruppen[name] == "undefined") {			// Wenn erste Elementgruppe mit dem entsprechenden Namen, dann ein neues Unterobjekt anlegen
					Elementgruppen[name] = new Object();						// Gemeinsame Verwendung der Werte des ersten Elements (i=0) mit diesem Namen
					Elementgruppen[name].name = name;
					Elementgruppen[name].type = type;
					Elementgruppen[name].array = (typeof Formular.elements[name].form == "undefined");	// Mehrere Elemente mit gleichem Namen vorhanden
					Elementgruppen[name].objects = Formular.elements[name];		// Ein Verweis auf alle Objekte mit diesem einen Namen
					if (getAttribute("subtype") == null) {
						Elementgruppen[name].subtype = "";
					} else {
						Elementgruppen[name].subtype = getAttribute("subtype");
					}
					if (getAttribute("message") == null) {
						Elementgruppen[name].message = "";
					} else {
						Elementgruppen[name].message = getAttribute("message");
					}
				}
			}
		
		}
		
	}
	
	// ###### Alle Elemente des gespeicherten Objekts (Elementgruppen) durchlaufen und auf Werte prüfen
	for (Elemente in Elementgruppen ) {
		
		with (Elementgruppen[Elemente]) {
			
			// ############ Elemente <select multiple> Mehrfachauswahl ##########################
			if (type == "select-multiple") {
				// Fehlt noch, sollte aber nicht mehr verwendet werden; besser Checkboxen!
			
			// ############ Elemente <input type={radio|checkbox}> ##########################
			} else if (type == "radio" || type == "checkbox") {
				if (array == true) {		// es gibt mehrere Elemente mit gleichem Namen
					for (i = 0; i < objects.length; i++ ) {
						if (objects[i].checked == true) {
							//gefundenWert = true;
							Check = FCheckWert(subtype,objects[i].value);
							gefundenWert = new Boolean(Number(gefundenWert) + Number(Check[0]));
							objects[i].value = Check[2];
						}
					}
					if (gefundenWert == false) {
						gefundenFehler = true;
						Meldung = message;
						Element = objects[objects.length - 1];					// letztes Element auswählen
						break;
					}
				} else {
					if (objects.checked == true) {
						Check = FCheckWert(subtype,objects.value);
						objects.value = Check[2];
						if (Check[0] == false){
							gefundenFehler = true;
							Meldung = message;
							Element = objects;
							break;
						}
					} else {									// es ist kein Element ge"checked"
						gefundenFehler = true;
						Meldung = message;
						Element = objects;
						break;
					}
				}
			
			// ############ alle anderen Elemente <input type={text|password|file}>, <textarea>, <select> ##########################
			} else {
				if (array == true) {		// es gibt mehrere Elemente mit gleichem Namen
					for (i = 0; i < objects.length; i++ ) {
						Check = FCheckWert(subtype,objects[i].value);
						gefundenWert = new Boolean(Number(gefundenWert) + Number(Check[0]));
						objects[i].value = Check[2];
					}
					if (gefundenWert == false) {
						gefundenFehler = true;
						Meldung = message;
						Element = objects[objects.length - 1];					// letztes Element auswählen
						break;
					}
				} else {
					Check = FCheckWert(subtype,objects.value);
					objects.value = Check[2];
					if (Check[0] == false){
						gefundenFehler = true;
						Meldung = message;
						Element = objects;
						break;
					}
				}
			}
			
			Check = null;
			gefundenWert = false;
			//alert("Fehler: " + gefundenFehler);
			if (gefundenFehler == true) {
				break;
			}
		
		} // end with
		
	}
	
	// ###### Abschließender Test mit Meldung und Rückgabewert
	if (gefundenFehler == true) {
		if (Meldung != "") {
			alert(Meldung);
		} else {
			alert('Das Formularelement "' + Element.name + '" (Typ: ' + Element.type + '-Element) hat einen ungültigen Wert!');
		}
		if (typeof(ID) == "undefined") {
			Element.focus();
		} else if (document.getElementById(ID)  != null) {
			document.getElementById(ID).focus();
		}
	}
	//alert((gefundenFehler == false));
	return (gefundenFehler == false);
	
}


function FCheckWert(Subtype,Wert) {
	
	var Ergebnis = new Array(3);  // Ergebnis[0] = true|false (true: Übereinstimmung von Wert und Subtype), Ergebnis[1] = Eingabewert, Ergebnis[2] = umgewandelter Ausgabewert
	
	Ergebnis[1] = Wert;
	if (Subtype == "Integer[>0]") {
		Wert = Math.abs(parseInt(Wert,10))
		if (isNaN(Wert) == true || Wert == 0){
			Ergebnis[0] = false;
			Ergebnis[2] = 0;
		} else {
			Ergebnis[0] = true;
			Ergebnis[2] = Wert;
		}
	} else {		// Default; keiner oder unbekannter Subtype
		if (Wert == "") {
			Ergebnis[0] = false;
			Ergebnis[2] = Wert;
		} else {
			Ergebnis[0] = true;
			Ergebnis[2] = Wert;
		}
	}
	return Ergebnis;
}

function schreibenPost(Adressat,Domain,Betreff,Text) {
	var Parameter = "";
	if (typeof(Domain) == "undefined" || Domain == "") {
		Domain = "biontex.com"
	}
	if (typeof(Betreff) != "undefined" && Betreff != "") {
		Parameter = "subject=" + encodeURIComponent(Betreff);
	}
	if (typeof(Text) != "undefined" && Text != "") {
		if (Parameter != ""){
			Parameter = Parameter + "&";
		}
		Parameter = Parameter + "body=" + encodeURIComponent(Text);
	}
	if (Parameter != ""){
		Domain = Domain + "?" + Parameter;
	}
	void(document.location.href = "mailto:" + Adressat + "%40" + Domain);
}

