// Copyright: durchgedreht 24, www.durchgedreht24.de
// Autor: Nils Hörrmann, nils.hoerrmann@durchgedreht24.de
// Stand: Juni 2007


$(document).ready( function() {
	shop24.start();
});


var shop24 = new Object({

	start: function() {
		// Fehlermeldung nur auslösen, wenn nicht direkt zuvor eine andere eingeblendet
		var meldung = false;
		$(document).keydown( function() {
			meldung = false;
		});
		// Weitere Infos einklappen
		$("#medien #produkte .mehr").hide();
		$("#medien #produkte li p").not($(".mehr")).append("<a class='klappen' href='#'>Weitere Informationen</a>");
		$("#medien #produkte a.klappen").click(function() {
			var el = $(this);
			el.parents().siblings(".mehr").slideToggle();
			if(el.text() == "Weitere Informationen") {
				el.text("Infoblock schließen");
			}
			else {
				el.text("Weitere Informationen");
			}
			el.blur();
			return false;
		});
		// Addieren und kalkulieren
		if($("#inhalt h3:first").text() != "Vielen Dank für Deine Bestellung") {
			$("#medien #produkte h4").append("<a href='#' class='button'></a>");
			$("#medien #produkte h4 a.button").click(function() {
				var el = $(this);
				var dvd = el.siblings("span").text();
				var wert = $("#inhalt form label").contains(dvd).next("p").children("input[@type*=text]").val();
				$("#inhalt form label").contains(dvd).next("p").children("input[@type*=text]").val(parseInt(wert) + 1);
				el.blur();
				shop24.kalkulier();
				return false;
			});
			$("#inhalt form input[@type*=text]").keyup( function() {
				shop24.kalkulier();
			});
			$("#inhalt form fieldset.rechnung").after("<p class='ergebnis'><strong></strong></p>");
			shop24.kalkulier();
	
			// Name
			$("#inhalt form input[@name*=name]").blur( function() { 
				if(!meldung) {
					shop24.test.name($(this));
					meldung = true;
				}
			});
			// Adresse
			$("#inhalt form textarea[@name*=adresse]").blur( function() { 
				if(!meldung) {
					shop24.test.adresse($(this));
					meldung = true;
				}
			});	
			// Postleitzahl
			$("#inhalt form input#plz").blur( function() {
				if(!meldung) {
					shop24.test.postleitzahl($(this), "blur");
					meldung = true;
				}
			});
			$("#inhalt form input#plz").keyup( function() {
				if(!meldung) {
					shop24.test.postleitzahl($(this), "keyup");
					meldung = true;
				}
			});
			// Ort
			$("#inhalt form input[@name*=ort]").blur( function() { 
				if(!meldung) {
					shop24.test.ort($(this));
					meldung = true;
				}
			});
			// Land
			$("#inhalt form input[@name*=land]").blur( function() { 
				if(!meldung) {
					shop24.test.land($(this));
					meldung = true;
				}
			});	
			// E-Mail-Adresse
			$("#inhalt form input[@name*=mail]").blur( function() { 
				if(!meldung) {
					shop24.test.emailadresse($(this));
					meldung = true;
				}
			});
			// Fokus auf abschicken
			$("#inhalt form input[@name*=bestellen]").mouseover( function() { 
				shop24.test.fokus($(this));
			});	
			// Formular abschicken
			$("#inhalt form").submit( function() { 
				return shop24.test.abschicken();
			});	
			// Fehlermeldung bei Anzahl ausblenden
			$("#inhalt form fieldset.rechnung input").keyup( function() {
				$("#inhalt form fieldset.rechnung strong").remove();
				$("#inhalt form fieldset.rechnung input").removeClass();
			});
		}
	}, // Ende Start
	
	kalkulier: function() {
		var gesamt = 0.00;
		$("#inhalt form p input[@type*=text]").each( function() {
			var el = $(this);
			var wert =  el.val();
			var jahr = el.parent().prev("label").text();
			var preis = el.next("input").val();
			preis = parseFloat(preis.replace(/€/, "").replace(/,/, ".") );
			var summe = parseInt(el.val() ) * preis;
			summe = Math.round(summe * 100) / 100
			if(!Number(summe)) {
				summe = "0.00";
			}
			gesamt = parseFloat(gesamt) + parseFloat(summe);
			el.next().next().next("em").html(String(summe).replace(/\./, ",") + " €");
		});
		gesamt = Math.round(gesamt * 100) / 100;
		if(gesamt == 0) {
			gesamt = "0.00";
		}
		$("#inhalt form fieldset.rechnung").next("p").children("strong").html(String(gesamt).replace(/\./, ",") + " €");
	}, // Ende Kalkulier
	
	test: {
		name: function(el, status) {
			var wert = el.val();
			var leer = wert.search(/ .+/);
			if(wert == "" || leer == -1) {
				shop24.fehler(el, 1, "Bitte gibt Deinen Vor- und Nachnamen an.");
			}
			else {
				var neu = helferlein24.anfanggross(wert);
				el.val(neu);
				shop24.okay(el);
			}
		}, // Ende Name

		adresse: function(el) {
			var wert = el.val();
			if(!wert.match(/[a-zA-Z]/) || !wert.match(/\d/)) {
				shop24.fehler(el, 1, "Bitte gib eine Straße <em>und</em> eine Hausnummer an.");
			}
			else {
				neu = wert.replace(/strasse/, "straße");
				neu = neu.replace(/Strasse/, "Straße");
				neu = neu.replace(/str\./, "straße");
				neu = neu.replace(/Str\./, "Straße");
				el.val(neu);
				shop24.okay(el);
			}
		}, // Ende Adresse
		
		postleitzahl: function(el, aktion) {
			if(aktion == "blur") {
				var wert = el.val();
				if(wert == "") {
					shop24.fehler(el, 1, "Du hast vergessen, Deine Postleitzahl anzugeben.", 2);
				}
				else {
					shop24.okay(el, 2);
				}
			}
			if(aktion == "keyup") {
				var wert = parseInt(el.val());
				$.get("/ajax/plz/" + wert, function(data) {
					$("#inhalt form input#ort").val(data);
					if($data != "") {
						shop24.okay($("#inhalt form input[@name*=ort]"));
					}
				});
			}
		}, // Ende Postleitzahl
		
		ort: function(el) {
			var wert = el.val();
			var wertPLZ = el.prev("input").val();
			if(wert == "") {
				shop24.fehler(el, 1, "Du hast vergessen, Deinen Wohnort anzugeben.");
			}
			else {
				if(wertPLZ == "") {
					$.get("/ajax/ort/" + wert, function(data) {
						if(data!="") {
							shop24.fehler(el, 1, "Aus welchem Teil von " + wert + " kommst Du?");
							el.next("strong").addClass("erster");
							el.next("strong").after("<select name='adressliste' size='5' class='fehler'></select>");
							el.hide();
							el.prev("input").hide();
							el.next("strong").next("select").load("/ajax/ort/" + wert, function() { 
								$("#inhalt form select[@name*=adressliste]").click( function() {  
									var elA = $(this);
									var wertA = elA.val();
									$("#inhalt form input[@name*=postleitzahl]").show().val(wertA);
									$("#inhalt form input#ort").show();
									$.get("http://www.durchgedreht24.de/ajax/plz/" + wertA, function(data) {
										$("#inhalt form input#ort").val(data);
									});
									shop24.okay($("#inhalt form input[@name*=postleitzahl]"));
									shop24.okay($("#inhalt form input#ort"));
									elA.prev("strong").remove();
									elA.remove();
								});
							});
						}
						else {
							shop24.fehler(el, 1, "Leider konnten wir keinen Ort mit diesem Namen in Deutschland finden. Bitte überprüfe Deine Eingabe und ergänze die entsprechende Postleitzahl.");
						}
					});
				}
				else {
					shop24.okay(el);
				}
			}
		}, // Ende Ort
		
		land: function(el) {
			var wert = el.val();
			if(wert == "") {
				shop24.fehler(el, 1, "Du hast vergessen Dein Land anzugeben.");
			}
			else {
				shop24.okay(el);
			}
		}, // Ende Land
		
		emailadresse: function(el) {
			var wert = el.val();
			if(wert == "") {
				shop24.fehler(el, 1, "Du hast vergessen Deine E-Mail-Adresse anzugeben.");
			}
			else {
				if(helferlein24.pruefmail(wert) == false) {
					shop24.fehler(el, 1, "Die angegebene Adresse ist nicht gültig.");
				}
				else {
					neu = wert.toLowerCase();
					el.val(neu);
					shop24.okay(el);
				}
			}
		}, // Ende E-Mail-Adresse
		
		fokus: function(el) {
			// löst eine Fehlerauswertung bei etwaig aktiven Feldern aus
			el.focus();
			el.blur();
		}, // Ende Fokus auf Abschicken
		
		abschicken: function() {
			shop24.test.name($("#inhalt form input[@name=name]"));
			shop24.test.adresse($("#inhalt form textarea[@name*=adresse]"));
			shop24.test.postleitzahl($("#inhalt form input#plz"), "blur");
			shop24.test.postleitzahl($("#inhalt form input#plz"), "keyup");
			shop24.test.ort($("#inhalt form input[@name*=ort]"));
			shop24.test.land($("#inhalt form input[@name*=land]"));
			shop24.test.emailadresse($("#inhalt form input[@name*=e-mail-adresse]"));
			var fehler = $("#inhalt form strong.fehler").length;
			if(fehler) {
				alert("Die Bestellung kann nicht fortgesetzt werden, da nicht alle Felder korrekt ausgefüllt sind.");
				return false;
			}
			return true;
		} // Ende Abschicken
		
	}, // Ende Test
							 
	fehler: function(el, status, meldung, sprung) {
		if(status == 1) {
			el.addClass("fehler");
			if(sprung == 2) {
				el.next("input").next("strong").remove();
				el.next("input").after("<strong class='fehler'>" + meldung + "</strong>");
			}
			else {
				el.next("strong").remove();
				el.after("<strong class='fehler'>" + meldung + "</strong>");
			}
		}
		else {
			el.removeClass();
			if(sprung == 2) {
				el.next("input").next("strong").fadeOut("slow", function() { el.next("input").next("strong").remove(); } );
			}
			else {
				el.next("strong").fadeOut("slow", function() { el.next("strong").remove(); } );
			}
		}
	}, // Ende Fehler
	
	okay: function(el, sprung) {
		// Fehlermeldung ausblenden
		if(sprung) {
			shop24.fehler(el, 0, "", 2);
		}
		else {
			shop24.fehler(el, 0);
		}
		// positive Nutzerrückmeldung
		el.animate({
			backgroundColor: '#c2ff7f'
		}, "slow");
		el.animate({
			backgroundColor: '#ffffff'
		}, "slow", function() { el.removeAttr("style"); });
		el.removeClass();
	} // Ende Okay
	
}); // Ende Shop

helferlein24 = new Object({

	anfanggross: function(text) {
		var neu = "";
		for(i = 0; i < text.length; i++) {
			if(i == 0 || text.charAt(i-1) == " ") {
				neu += text.charAt(i).toUpperCase();
			}
			else {
				neu += text.charAt(i);
			}
		}
		// Adelstitel kleinschreiben
		neu = neu.replace(/\bVon\b/, "von");
		neu = neu.replace(/\bZu\b/, "zu");
		// Artikel kleinschreiben
		neu = neu.replace(/\bDer\b/, "der");
		neu = neu.replace(/\bDie\b/, "die");
		neu = neu.replace(/\bDas\b/, "das");
		neu = neu.replace(/\bEin\b/, "ein");
		neu = neu.replace(/\bEiner\b/, "einer");
		neu = neu.replace(/\bEines\b/, "eines");

		return neu;
	}, // Ende Anfangsbuchstaben groß
	
	pruefmail: function(adresse) {
		var a = false;
		var res = false;
		if(typeof(RegExp) == 'function') {
			var b = new RegExp('abc');
			if(b.test('abc') == true) {
				a = true;
			}
		}
		if(a == true) {
			reg = new RegExp('^([a-zA-Z0-9\\-\\.\\_]+)' +
					'(\\@)([a-zA-Z0-9\\-\\.]+)' +
					'(\\.)([a-zA-Z]{2,4})$');
			res = (reg.test(adresse));
		}
		else {
			res = (adresse.search('@') >= 1 && adresse.lastIndexOf('.') > adresse.search('@') && adresse.lastIndexOf('.') >= adresse.length-5)
		}
		return(res);
	} // Ende E-Mail-Überprüfung

}); // Ende Helferlein