/* Klasse fuer Fotobetrachter */
var fotoBetrachter = Class.create({
	// Initialisierung und Eigenschaften
	initialize: function (id, eltern, galerieId, galerieOrdner, fotos, hoehen, breiten) {
		this.id = id;
		this.eltern = eltern;
		this.galerieId = galerieId;
		this.galerieOrdner = galerieOrdner;
		this.fotos = fotos;
		this.hoehen = hoehen;
		this.breiten = breiten;
	},
	// Methoden
	anzeigen: function (foto) {
		// Links zur Galerie und zur Fotouebersicht anzeigen
		/*
		var neuerLink = document.createElement("a");
		neuerLink.href = "?seite=fotos&galerie=" + this.galerieId;
		neuerLink.id = this.id + "LinkZurGalerie";
		neuerLink.style.textAlign = "left";
		neuerLink.style.cssFloat = "left";
		neuerLink.style.styleFloat = "left";
		var linkText = document.createTextNode("zurueck zur Galerie");
		neuerLink.appendChild(linkText);
		$(this.eltern.id).appendChild(neuerLink);

		var neuerLink = document.createElement("a");
		neuerLink.href = "?seite=fotos";
		neuerLink.id = this.id + "LinkZurFotoUebersicht";
		neuerLink.style.textAlign = "left";
		neuerLink.style.cssFloat = "left";
		var linkText = document.createTextNode("zur Uebersicht ueber alle Fotos");
		neuerLink.appendChild(linkText);
		$(this.eltern.id).appendChild(neuerLink);
		*/

		// Nummer des Fotos finden
		fotoFinden: for ( var i = 0; i < this.fotos.length; i++ ) {
			if ( fotos[i] == foto ) {
				break fotoFinden;
			}
		}
		if ( i == 0 ) {
			var vorherigesFoto = fotos [this.fotos.length - 1];
			var vorherigesFotoIndex = this.fotos.length - 1;
		} else {
			var vorherigesFoto = fotos [i - 1];
			var vorherigesFotoIndex = i - 1;
		}
		if ( i == this.fotos.length - 1 ) {
			var naechstesFoto = fotos [0];
			var naechstesFotoIndex = 0;
		} else {
			var naechstesFoto = fotos [i + 1];
			var naechstesFotoIndex = i + 1;
		}

		// Statustext
		var status = document.createElement("p");
		status.id = this.id + "Status";
		status.style.textAlign = "center";
		//status.style.clear = "left";
		var statusText = document.createTextNode(" Bild: " + (i + 1) + "/" +  this.fotos.length);
		status.appendChild(statusText);
		$(this.eltern.id).appendChild(status);
		

		// Link zum vorherigen Foto
		if ( this.fotos.length > 1 ) {
			var linkZurueck = document.createElement ("a");
			var linkText = document.createTextNode("<< ");
			linkZurueck.appendChild(linkText);
			linkZurueck.id = this.id + "LinkZurueck";
			linkZurueck.href = "javascript: " + this.id + ".fotoWechseln('" + foto + "','" +  vorherigesFoto + "')";
			linkZurueck.title = "Vorheriges Bild anzeigen";
			$(this.eltern.id).appendChild(linkZurueck);
		}

		// erstes Foto
		var neuesBild = document.createElement ("img");
		neuesBild.id = this.id + foto;
		neuesBild.style.position = "relative";
		neuesBild.src = "bilder/fotos/" + this.galerieOrdner + "/" + foto;
		neuesBild.style.verticalAlign = "middle";
		neuesBild.style.zIndex = "-1";
		document.getElementById (this.eltern.id).appendChild (neuesBild);

		/*
		this.breiten[i] = neuesBild.width;
		this.hoehen[i] = neuesBild.height;
		*/

		// Link zum naechsten Foto
		if ( this.fotos.length > 1 ) {
			var linkWeiter = document.createElement ("a");
			var linkText = document.createTextNode(" >>");
			linkWeiter.appendChild(linkText);
			linkWeiter.id = this.id + "LinkWeiter";
			linkWeiter.href = "javascript: " + this.id + ".fotoWechseln('" + foto + "','" +  naechstesFoto + "')";
			linkWeiter.title = "Naechstes Bild anzeigen";
			$(this.eltern.id).appendChild(linkWeiter);
			// angrenzende Bilder vorladen
			try {
				if ( $(this.id + vorherigesFoto).nodeName.toLowerCase() == "img" ) {
					throw "bildVorhanden";
				}
			} catch ( ergebnis ) {
				if ( ergebnis != "bildVorhanden") {
					var vorladenBild = document.createElement ("img");
					vorladenBild.src = "bilder/fotos/" + this.galerieOrdner + "/" + vorherigesFoto;
					vorladenBild.id = this.id + vorherigesFoto;
					vorladenBild.style.zIndex = "-1";
					vorladenBild.style.display = "none";
					$(this.eltern.id).insertBefore(vorladenBild, $(this.id + "LinkWeiter"));
				} 
			}
			try {
				if ( $(this.id + naechstesFoto).nodeName.toLowerCase() == "img" ) {
					throw "bildVorhanden";
				}
			} catch ( ergebnis ) {
				if ( ergebnis != "bildVorhanden") {
					var vorladenBild = document.createElement ("img");
					vorladenBild.src = "bilder/fotos/" + this.galerieOrdner + "/" + naechstesFoto;
					vorladenBild.id = this.id + vorherigesFoto;
					vorladenBild.style.zIndex = "-1";
					vorladenBild.style.display = "none";
					$(this.eltern.id).insertBefore(vorladenBild, $(this.id + "LinkWeiter"));
				} 
			}
		}
	},
	fotoWechseln: function (altesFoto, neuesFoto) {
		// Index des alten Bilds finden
		fotoFinden: for ( var i = 0; i < this.fotos.length; i++ ) {
			if ( fotos[i] == altesFoto ) {
				altesBildIndex = i;
				break fotoFinden;
			}
		}
		// Vorheriges/Naechstes-Links aendern
		fotoFinden: for ( var i = 0; i < this.fotos.length; i++ ) {
			if ( fotos[i] == neuesFoto ) {
				neuesBildIndex = i;
				break fotoFinden;
			}
		}
		if ( i == 0 ) {
			var vorherigesFoto = fotos [this.fotos.length - 1];
			var vorherigesFotoIndex = this.fotos.length - 1;
		} else {
			var vorherigesFoto = fotos [i - 1];
			var vorherigesFotoIndex = i - 1;
		}
		if ( i == this.fotos.length - 1 ) {
			var naechstesFoto = fotos [0];
			var naechstesFotoIndex = 0;
		} else {
			var naechstesFoto = fotos [i + 1];
			var naechstesFotoIndex = i + 1;
		}

		// Links waehrend dem Fotowechsel deaktivieren
		$(this.id + "LinkZurueck").href = "javascript: void(0);";
		$(this.id + "LinkWeiter").href = "javascript: void(0);";
		
		// Foto wechseln
		var altesBild = document.getElementById(this.id + altesFoto);
		altesBild.style.zIndex = "-2";
		
		// neues Bild erstellen
		try {
			if ( $(this.id + neuesFoto).nodeName.toLowerCase() == "img" ) {
				throw "bildVorhanden";
			}
		} catch ( ergebnis ) {
			if ( ergebnis == "bildVorhanden" ) {
				var neuesBild = document.getElementById(this.id + neuesFoto);
				//neuesBild.style.display = "inline-block";
				neuesBild.style.backgroundColor = "green";
				//neuesBild.src = "";
			} else {
				var neuesBild = document.createElement ("img");
				neuesBild.src = "bilder/fotos/" + this.galerieOrdner + "/" + neuesFoto;
				neuesBild.id = this.id + neuesFoto;
				$(this.eltern.id).insertBefore(neuesBild, $(this.id + "LinkWeiter"));
			}
		}

		altesBild.style.position = "relative";
		neuesBild.style.display = "none";
		// Statustext
		var textnode = document.createTextNode(" Bild: " + (neuesBildIndex + 1) + "/" +  this.fotos.length);
		$(this.id + "Status").replaceChild(textnode, $(this.id + "Status").firstChild);

		// altes Bild und neues Bild auf die gleiche Breite stellen
		var altesBildBreite = this.breiten[altesBildIndex];
		var altesBildHoehe = this.hoehen[altesBildIndex];

		altesBild.width = altesBildBreite;
		altesBild.height = altesBildHoehe;
		altesBild.style.width = altesBildBreite + "px";
		altesBild.style.height = altesBildHoehe + "px";

		neuesBild.width = altesBildBreite;
		neuesBild.height = altesBildHoehe;
		neuesBild.style.width = altesBildBreite + "px";
		neuesBild.style.height = altesBildHoehe + "px";

		// neues Bild positionieren
		neuesBild.style.zIndex = "-1";
		neuesBild.style.opacity = "0.0";
		neuesBild.style.position = "absolute";
		neuesBild.style.verticalAlign = "middle";
		neuesBild.style.top = altesBild.offsetTop + "px";
		neuesBild.style.left = altesBild.offsetLeft + "px";

		// Zielposition ausrechnen
		var neuesBildBreite = this.breiten[neuesBildIndex];
		var neuesBildHoehe = this.hoehen[neuesBildIndex];

		var neuePositionX = (altesBild.offsetLeft + (altesBildBreite - neuesBildBreite)/2);
		var neuePositionY = altesBild.offsetTop;
	
		new Effect.Parallel([ 
			new Effect.Appear(neuesBild, { sync: true, duration: 1.0 }),
			new Effect.Move(neuesBild, { sync: true, x: neuePositionX, y: neuePositionY, mode: 'absolute' }),
			new Effect.Morph(neuesBild, {sync: true, style: {height: neuesBildHoehe + "px", width: neuesBildBreite + "px"}})
			], { 
				duration: 1.0,
				delay: 0.0
			}
		);

		var bla = this.id;

		new Effect.Parallel([ 
			new Effect.Move(altesBild, { sync: true, x: 0, y: 0, mode: 'relative' }),
			/*new Effect.Fade(altesBild, { sync: true}),*/
			new Effect.Morph(altesBild, {sync: true, style: {height: neuesBildHoehe + "px", width: neuesBildBreite + "px"}})
			], { 
				duration: 1.0,
				delay: 0.0,
				afterFinish: function() {
					// altes Bild ausblenden
					altesBild.style.display = "none";
					// Darstellung des neuen Bilds auf relative stellen
					neuesBild.style.top = 0;
					neuesBild.style.left = 0;
					neuesBild.style.position = "relative";
	
					// Links wieder aktivieren
					$(bla + "LinkZurueck").href = "javascript: " + bla + ".fotoWechseln('" + neuesFoto + "','" +  vorherigesFoto + "')";
					$(bla + "LinkWeiter").href = "javascript: " + bla + ".fotoWechseln('" + neuesFoto + "','" +  naechstesFoto + "')";
				}
			}
		);

		// angrenzende Bilder vorladen
		try {
			if ( $(this.id + vorherigesFoto).nodeName.toLowerCase() == "img" ) {
				throw "bildVorhanden";
			}
		} catch ( ergebnis ) {
			if ( ergebnis != "bildVorhanden") {
				var vorladenBild = document.createElement ("img");
				vorladenBild.src = "bilder/fotos/" + this.galerieOrdner + "/" + vorherigesFoto;
				vorladenBild.id = this.id + vorherigesFoto;
				vorladenBild.style.zIndex = "-1";
				vorladenBild.style.display = "none";
				$(this.eltern.id).insertBefore(vorladenBild, $(this.id + "LinkWeiter"));
			} 
		}
		try {
			if ( $(this.id + naechstesFoto).nodeName.toLowerCase() == "img" ) {
				throw "bildVorhanden";
			}
		} catch ( ergebnis ) {
			if ( ergebnis != "bildVorhanden") {
				var vorladenBild = document.createElement ("img");
				vorladenBild.src = "bilder/fotos/" + this.galerieOrdner + "/" + naechstesFoto;
				vorladenBild.id = this.id + vorherigesFoto;
				vorladenBild.style.zIndex = "-1";
				vorladenBild.style.display = "none";
				$(this.eltern.id).insertBefore(vorladenBild, $(this.id + "LinkWeiter"));
			} 
		}
	}
});

/* Funktion fuer das Ruderrevier */
function ruderrevierBildZeigen ( indexBild ) {
	var anzahlBilder = bilder.length;
	var neuesBild = document.getElementById( bilder[indexBild][0] );
	// altes Bild ermitteln
	for ( var i = 0; i < anzahlBilder; i++ ) {
		var altesBild = document.getElementById (bilder[i][0]);
		if ( altesBild.style.display != "none" ) {
			break;
		}
	}
	if ( neuesBild != altesBild ) {
		// Bild austauschen
		new Effect.Fade(altesBild, { duration: 0.25 });
		new Effect.Appear(neuesBild, { duration: 0.25, queue: 'end' });
		// Text austauschen
		var text1 = document.createTextNode(bilder[indexBild][1]);
		var text2 = document.createTextNode(bilder[indexBild][2]);
		var zielText1 = document.getElementById ("ruderrevierText1");
		zielText1.replaceChild(text1, zielText1.firstChild);
		var zielText2 = document.getElementById ("ruderrevierText2");
		zielText2.replaceChild(text2, zielText2.firstChild);
	}
}

/* Funktion fuer das Kontaktformular */
//Email-Adresse ueberpruefen
function emailAdresseUeberpruefen ( emailAdresse ) {
 	reg = new RegExp ('^.[a-zA-Z0-9_.\.-]+@[a-z0-9_-]+\\.[a-zA-Z]+');
 	/*reg = new RegExp(	'^([a-zA-Z0-9\\-\\.\\_]+)'+
                   		'(\\@)([a-zA-Z0-9\\-\\.]+)'+
                   		'(\\.)([a-zA-Z]{2,4})$');*/
  	return ( reg.test( emailAdresse ) );
}
// Eingaben fuer Emailformular ueberpruefen
function kontaktEingabenPruefen () {
	var fehlermeldungZiel = document.getElementById("kontaktFehlermeldung");
	// rote Felder zuruecksetzen
	var felder = new Array();
	var name = document.getElementById("abc");
	felder.push(name);
	var email = document.getElementById("def");
	felder.push(email);
	var betreff = document.getElementById("jkl");
	felder.push(betreff);
	var nachricht = document.getElementById("mno");
	felder.push(nachricht);
	for ( i=0; i<felder.length; i++ ) {
		felder[i].className = "kontaktFehlerFrei";
	}
	// Eingaben ueberpruefen
	var fehlerNachricht = new Array();
	var felder = new Array();
	if ( document.getElementById("name").value.length > 0 || document.getElementById("email").value.length > 0 || document.getElementById("betreff").value.length > 0 || document.getElementById("nachricht").value.length > 0) {
		// diese Felder sind versteckt und koennen nur von Spambots gefuellt werden
		fehlerNachricht.push("Spam...");
	}
	if ( name.value.length <= 0 ) {
		fehlerNachricht.push("Bitte geben Sie Ihren Namen an!");
		felder.push(name);
	}
	if ( !emailAdresseUeberpruefen(email.value ) ) {
		fehlerNachricht.push("Bitte geben Sie eine korrekte Emailadresse an!");
		felder.push(email);
	}
	if ( betreff.value.length <= 0 ) {
		fehlerNachricht.push("Bitte geben Sie einen Betreff f" + String.fromCharCode(252) + "r die Nachricht an!");
		felder.push(betreff);
	}
	if ( nachricht.value.length <= 0 ) {
		fehlerNachricht.push("Bitte tippen Sie eine Nachricht ein!");
		felder.push(nachricht);
	}
	if ( fehlerNachricht.length > 0 ) {
		// Felder rot faerben
		for ( i=0; i<felder.length; i++ ) {
			felder[i].className = "kontaktFehler";
		}
		// Fehlermeldung ausgeben
		var alteFehlerBox = document.getElementById("kontaktFehlermeldung");
		var fehlerBox = document.createElement("p");
		fehlerBox.id = "kontaktFehlermeldung";
		for ( var i = 0; i < fehlerNachricht.length; i++ ) {
			var fehlerText = document.createTextNode(fehlerNachricht[i]);
			fehlerBox.appendChild(fehlerText);
			var fehlerText = document.createElement("br");
			fehlerBox.appendChild(fehlerText);
		}
		alteFehlerBox.parentNode.replaceChild(fehlerBox, alteFehlerBox);
		new Effect.Pulsate(fehlerBox, { pulses: 2, duration: 1.0 });
		return false;
	} else {
		//alert("alles ok");
		return true;
	}
}