/*
 *
 *	Neue Version inkl. Extrawünsche!
 *
 */

var newsletter = {
	form: function() { 
		return $("form.newsletter"); 
	},
	
	present: function() {
		return $("#newsletter-geschenk");
	},
	
	alert: function(str) {
		//newsletter.form().prepend("<div style='background:#e2e2e2; padding:10px; text-align:center; margin-bottom:5px;'>"+str+"<br><input style='width:75px; margin-top:15px;' type='button' value='ok' onClick='$(this).parent().fadeOut()'></div>");
		alert(str);
	},
	
	init: function() {		
		//Anschrift ausblenden
		newsletter.form()
						
			//Eventhandler Selectbox
			.find("#ich_bin").change(function() { newsletter.step2($(this).val()); }).end()
			
			//Eventhandler für Geschenk-Checkbox und mehr Informationen und inform
			.find("#geschen, #mehrinf, #inform").click(function() { newsletter.toggleAdress($(this)); }).end()
			
			//Ein paar sind erstmal versteckt
			.find("label[for=geschen], #berater-kontakt").hide().end()
			
			//Eventhandler für das inform Magazin
			.find("#inform, #newsletter").click(function() { newsletter.toggleEmail($(this)); }).end()
			
			//Eventhandler für das Bestellen vom Newsletter
			.find("#newsletter").click(function() { newsletter.forNewsletter($(this)); }).end()
			
			//Eventhandler für Kontaktaufnahme per Telefon
			.find("#tel_kon").click(function() { newsletter.toggleTelefon($(this)); }).end()
			
			//Focus setzen
			.find(":input[type=text]:first").focus().end()
			
			//Eventhandler für das ganze Formular
			.submit(function() { return newsletter.submit(); })
			
			//Formular zurücksetzen gegen gespeicherte Inhalte vom Browser...
			.resetForm();
		
		
		//Geschenk ausblenden
		newsletter.present().hide();
		
		//if(!newsletter.form().hasClass("change"))
		//		newsletter.form().find(".anschrift").css("display", "none").end();
	},
	
	/*	
	 *  Auf die Auswahl in der Checkbox reagieren
	 *
	 *	1 = Kunde
	 *	2 = Berater
	 *	3 = Weder noch
	 */
	step2: function(val) {
		
		if(val == 2) {
			// Extra für Berater
			newsletter.form()
				.find("label[for=hausban]").text("Institut").end()
				.find(".fuer-berater").css("display", "block").filter(".unterne").find("label").each(function() {	
					newsletter.makeMandatory($(this));
				}).end()
				.find(".telefon").show();
			
			//console.log(newsletter.form().find(".telefon"));
		}
		else {
			// Für alle anderen
			newsletter.form()
				.find("label[for=hausban]").text("Meine Bank").end()
				.find(".fuer-berater").css("display", "none").end()
				//.find(".telefon").hide();
		}
		
		//Zweiten Schritt anzeigen + Focus
		newsletter.form()
			.find(".anschrift")
			.slideDown(function() {
				$(this).find(":input:first").focus();
					//[0].scrollIntoView();
			});

	},
	
	/*
	 *	Formular abschicken
	 */	
	submit: function() {
		
		var okay = true,
			  data = new Object(),
			  fields = new Array(),
			  i = -1;
		
		//Prüfen ob überhaupt etwas bestellt wurde
		if(!newsletter.form().find("#newsletter").is(":checked") && !newsletter.form().find("#inform").is(":checked")) {
			okay = false;
			newsletter.alert("Bitte wählen Sie das inform oder den Newsletter aus.");
			return false;
		}
		
		//Alle Felder durchgehen und auf Pflichtfeld prüfen
		newsletter.form()
			.find(".missing").removeClass("missing").end()
			.find("input[type=text]").each(function() {
			if($(this).parent().is(":visible")) {
				if($(this).attr("mandatory") == "true" && $(this).val().length == 0) {
					okay = false;
					newsletter.missingValue($(this));
					i++;
					fields[i] = $(this).prev().text();
				}
				else {
					if($(this).attr("name"))
						data[$(this).attr("name")] = $(this).val();
				}
			}
		});
		
		if(!okay) {
	    newsletter.alert("Bitte geben Sie alle Pfichtfelder an:\n"+newsletter.mkStr(fields));
	    return false;
		}
		else {
			//Sondercheck für Emailadresse
			if(!newsletter.form().find("#email").val().match(/^(.+)@(.+)\.(.+)$/) && newsletter.form().find("#newsletter").attr("mandatory") == true) {
			  newsletter.alert("Bitte geben Sie eine korrekte E-Mail-Adresse an.");
			  newsletter.missingValue(newsletter.form().find("#email"));
			  return false;
			}
			
			return true;
		}		
	},
	
	
	mkStr: function(array) {
		var s = new Array();
		$.each(array, function(i, val) {
			s[i] = " "+val.replace(/\*/, "");
		});
		return s;
	},
	
	
	/*
	 *	Wenn der Abonennt ein Geschenk will, das inform bestellt oder per Post vollgespammt werden soll
	 */
	toggleAdress: function() {
		s = newsletter.form().find("#geschen").is(":checked") 
		 || newsletter.form().find("#inform").is(":checked")
		 || newsletter.form().find("#mehrinf").is(":checked");
		
		newsletter.form().find(".geschenk").each(function() {
			if(s > 0)
				newsletter.makeMandatory($(this));
			else {
				newsletter.unmakeMandatory($(this));
			}
		});
		
		newsletter.form().find("#geschen").blur();
	},
	
	/*
	 *	Wenn der Abonennt eine Kontaktaufnahme per Telefon will,
	 *	dann muss er auch die Telefonnummer angegeben!
	 */
	toggleTelefon: function($telefon) {
		if($telefon.is(":checked")) {
			newsletter.makeMandatory(newsletter.form().find("label.telefon"));
			newsletter.form().find("#tel_bet").focus();
		}
		else
			newsletter.unmakeMandatory(newsletter.form().find("label.telefon"))
	},
	
	/*
	 *	Wenn der Abonnent das inform haben will, dann muss er nicht unbedingt eine E-Mailadresse angeben
	 */
	toggleEmail: function($inform) {
		if(!$("#newsletter").is(":checked")) {
			newsletter.unmakeMandatory(newsletter.form().find("label.email"));
			newsletter.unmakeMandatory(newsletter.form().find("label.format"));
		}
		else {
			newsletter.makeMandatory(newsletter.form().find("label.email"));
			newsletter.makeMandatory(newsletter.form().find("label.format"));
		}
	},
	
	/*
	 *	Wenn jemand den Newsletter bestellt kann er telefonischen Kontakt wünschen
	 *	und ein Geschenk erhalten. Argh...
	 */
	forNewsletter: function() {
		if($("#newsletter").is(":checked")) {
			newsletter.form().find("label[for=geschen]").show();
			
			//Geschenk einblenden
			newsletter.present().show();
			
			//newsletter.form().find("#berater-kontakt").show();
		}
		else {
			newsletter.form().find("label[for=geschen]").hide();
			
			//geschenk ausblenden
			newsletter.present().hide();
			
			//newsletter.form().find("#berater-kontakt").hide();
		}
	},
	
	//Ist es ein Pflichtfeld?
	isMandatory: function(text) {
		return text.match(/\*/);
	},
	
	//Zum Pflichtfeld machen
	makeMandatory: function(label) {
		if(!newsletter.isMandatory(label.text())) {
			$(label).append("*").next().attr("mandatory", "true");
		}
	},
	
	//Ach, is doch kein Pflichtfeld!
	unmakeMandatory: function(label) {
		if(newsletter.isMandatory(label.text())) {
			newText = label.text().replace(/\*/, "");
			label
				.text(newText)
				.removeClass("missing")
			.next()
				.removeClass("missing")
				.attr("mandatory", "false");
		}
	},
	
	//Kennzeichnen das ein Feld nicht ausgefüllt wurde
	missingValue: function(input) {
		$(input).addClass("missing").prev().addClass("missing");
	}
	
};

$(document).ready(function() {
	//Vorbereiten
	newsletter.init();	
});