/*

	Cookie-Funktionen
	
*/

function getCookieVal(offset)
{
	var endstr = document.cookie.indexOf (";", offset);
	
	if (endstr == -1)
		endstr = document.cookie.length;

	return unescape(document.cookie.substring(offset, endstr));
}

function GetCookie(name)
{
	var arg = name + "=";
	var alen = arg.length;
	var clen = document.cookie.length;
	var i = 0;

	while (i < clen)
	{
		var j = i + alen;
		
		if (document.cookie.substring(i, j) == arg)
			return getCookieVal (j);

		i = document.cookie.indexOf(" ", i) + 1;

		if (i == 0)
			break; 
	}
	return null;
}  

function SetCookie(name, value)
{
	var argv = SetCookie.arguments;
	var argc = SetCookie.arguments.length;
	var expires = (argc > 2) ? argv[2] : null;
	var path = (argc > 3) ? argv[3] : null;
	var domain = (argc > 4) ? argv[4] : null;
	var secure = (argc > 5) ? argv[5] : false;

	var tmpDate = new Date();
	
	if (expires < 0)
		tmpDate.setTime(0);
	else
		tmpDate.setTime(tmpDate.getTime() + expires);
	
	document.cookie = name + "=" + escape (value) +
		((expires == null) ? "" : ("; expires=" + tmpDate.toGMTString())) +
		((path == null) ? "" : ("; path=" + path)) +
		((domain == null) ? "" : ("; domain=" + domain)) +
		((secure == true) ? "; secure" : "");
}

function RemoveCookie(name)
{
	SetCookie(name, "", -1, "/");
}



//
// einfache Map-Klasse
//

function Map()
{
	this.map = "";
	this.Set = MapSet;
	this.Get = MapGet;
	this.Save = MapSave;
	this.Load = MapLoad;
}

function MapSet(key, val)
{
	if (key != "")
	{
		var i = this.map.indexOf(key + "=");
		
		if (i >= 0)
		{
			var e = this.map.indexOf(":", i);
			this.map = this.map.substring(0, i) + this.map.substring(e + 1, this.map.length);
		}
	
		this.map.replace(/:/, "%3a");
		this.map.replace(/=/, "%3d");
		this.map = this.map + key + "=" + escape(val) + ":";
	}
}

function MapGet(key)
{
	if (key != "")
	{
		var i = this.map.indexOf(key + "=");
		
		if (i >= 0)
		{
			var e = this.map.indexOf(":", i);
			
			if (e == -1)
				return unescape(this.map.substring(i + key.length + 1, this.map.length - 1));
			else
				return unescape(this.map.substring(i + key.length + 1, e));
		}
	}
	return "";
}

function MapSave()
{
	return this.map;
}

function MapLoad(map)
{
	if (map)
		this.map = map;
	else
		this.map = "";
}





/*
	Cookies lesen und Checkmarks setzen
*/

function LoadCheckmarks()
{
	cookie = GetCookie("midiartOrder");
	
	if (cookie != null && document.List)
	{
		if (cookie.length % 6 == 0)
		{
			for (var i = 0; i < document.List.elements.length; i++)
				if (document.List.elements[i].name.charAt(0) == "_")
					document.List.elements[i].checked = cookie.indexOf(document.List.elements[i].name.substr(1, 6)) != -1;
		}
		else
			alert("Fehlerhafter Cookie");
	}
}


/*
	Formular lesen und in Cookies speichern
*/

function SaveCheckmarks()
{
	CheckCookies();
	
	var cookie = GetCookie("midiartOrder");
	var oldCookie = cookie;

	if (document.List)
	{
		if (cookie == null)
			cookie = "";
	
		for (var i = 0; i < document.List.elements.length; i++)
		{
			if (document.List.elements[i].name.charAt(0) == "_")
			{
				var name = document.List.elements[i].name.substr(1, 6);
				
				if (cookie.indexOf(name) == -1)
				{
					if (document.List.elements[i].checked == true)
						cookie += name;
				}
				else
				{
					if (document.List.elements[i].checked == false)
					{
						var pos = cookie.indexOf(name);
						cookie = cookie.substr(0, pos) + cookie.substr(pos + 6, cookie.length - pos - 6);
					}
				}
			}
		}
		
		if (cookie != oldCookie)
			SetCookie("midiartOrder", cookie, 60*60*1000, "/");
	}
	
	//alert(cookie);

	if (parent.Kopfzeile)
		parent.Kopfzeile.location.href = "/kopf_masterborder2.html";
	
	return cookie != null ? cookie.length / 6 : 0;
}


/*
	Formular lesen und in Cookies speichern
*/

function AddSong(bestnr, showOrder)
{
	if (CheckCookies() == 0)
		return;
	
	var cookie = GetCookie("midiartOrder");
	var oldCookie = cookie;

	if (cookie == null)
		cookie = "";
	
	if (cookie.indexOf(bestnr) == -1)
	{
		cookie += bestnr;
		
		if (cookie != oldCookie)
			SetCookie("midiartOrder", cookie, 60*60*1000, "/");
		
		if (parent.Kopfzeile)
			parent.Kopfzeile.location.href = "/kopf_masterborder2.html";
	
		if (showOrder && parent.Hauptteil)
			parent.Hauptteil.location.href = "sos21.pl?Action=Order";
	}
}


/*
	Warenkorb anzeigen
*/

function ShowOrder()
{
	var countArticles = SaveCheckmarks();

	if (countArticles == 0)
	{
		alert("Der Warenkorb ist leider noch leer ;-)");
		
		//return false;
	}
	else
	{
		//document.Submit.Action.value="Warenkorb";
		document.Submit.submit();
		
		return true;
	}
}


/*
	Neue Suche starten
*/

function NewSearch()
{
	window.location.href = "sos21.pl";
}

/*

*/

function IsChecked(boxname)
{	
	with (document.List)
	{
		for (var i = 0; i < elements.length; i++)
			if (elements[i].name == ("_" + boxname))
				return elements[i].checked;
	}
	
	return false;
}

function UnCheck(boxname)
{	
	with (document.List)
	{
		for (var i = 0; i < elements.length; i++)
			if (elements[i].name == ("_" + boxname))
				elements[i].checked = false;
	}
}


/*
	Eingabe der persönlichen Daten überprüfen (Registrierung)
*/

function CheckForm2()
{
	with (document.List)
	{
		for (i = 0; i < length; i++)
		{
			if (elements[i].value && elements[i].value.indexOf(":") != -1)
			{
				alert("':' sind nicht erlaubt!");
				elements[i].focus();
				return false;
			}
		}

		msg = new Array("Vorname",		/.+/,				"Bitte geben Sie Ihren Vornamen ein!", true,
						"Nachname",		/.+/,				"Bitte geben Sie Ihren Nachnamen ein!", true,
						"Strasse",		/(^\D+\s*\d+.*$)/,	"Bitte geben Sie Ihre Straße und Hausnummer ein!", true,
						"Ort", 			/(^\d+\s+\D+$)/,	"Bitte geben Sie die Postleitzahl und den Namen Ihres Wohnortes ein!", true,
						"Land",			/.+/,				"Bitte geben Sie den Namen des Landes ein, in dem Sie wohnen!", true,
						"Telefon",		/.+/,				"Bitte geben Sie Ihre Telefonnummer. ein!", true,
						"EMail",		/(^.+@.+\..+$)/,	"Bitte geben Sie Ihre E-Mail-Adresse ein!", true,
						"BLZ",			/^\d{8}$/,			"Bitte geben Sie die Bankleitzahl ein!", true,
						"KontoNr",		/^\d+$/,			"Bitte geben Sie Ihre Kontonummer ein!", true,
						"KartenNr",		/^\d+$/,			"Bitte geben Sie Ihre Kartennummer ein!", true,
						"AblaufMonat",	/^\d\d$/,			"Bitte geben Sie den Monat des Ablaufdatums Ihrer Kreditkarte ein!", true,
						"AblaufJahr",	/^\d\d$/,			"Bitte geben Sie das Jahr des Ablaufdatums Ihrer Kreditkarte ein!", true,
						"Kennung",		/^\w{6,}$/,			"Bitte geben Sie eine gültige Kennung ein! (Mindestends 6 Zeichen, bestehend aus Buchstaben, Ziffern und '_')", true
					   );
		
		if (((BLZ.value != "" || KontoNr.value != "") && (KartenNr.value != "" || AblaufMonat.options[AblaufMonat.selectedIndex].value != "Monat" || AblaufJahr.options[AblaufJahr.selectedIndex].value != "Jahr")) ||
			 (BLZ.value == "" && KontoNr.value == "" && KartenNr.value == "" && AblaufMonat.options[AblaufMonat.selectedIndex].value == "Monat" && AblaufJahr.options[AblaufJahr.selectedIndex].value == "Jahr"))
		{
			alert("Bitte geben Sie entweder Ihre Bankverbindung oder Ihre Kreditkartendaten an!");
			BLZ.focus();
			return false;
		}
		if ((BLZ.value != "" || KontoNr.value != "") && (KartenNr.value == "" && AblaufMonat.options[AblaufMonat.selectedIndex].value == "Monat" && AblaufJahr.options[AblaufJahr.selectedIndex].value == "Jahr"))
		{
			msg[9*4 + 3] = false;
			msg[10*4 + 3] = false;
			msg[11*4 + 3] = false;
		}
		else
		{
			msg[7*4 + 3] = false;
			msg[8*4 + 3] = false;
		}

		for (i = 0, j = 0; i < length; i++)
		{
			if (elements[i].name == msg[j])
			{
				val = elements[i].type == "select-one" ? elements[i].options[elements[i].selectedIndex].value : elements[i].value;
				
				if (msg[j+3] && msg[j+1].test(val) == false)
				{
					alert(msg[j+2]);
					elements[i].focus();
					
					return false;
				}
				else
					j += 4;
			}
		}
	}
	return true;
}


/*
	Persönliche Daten in Cookie 'midiartPD2' speichern
*/

function SavePersData()
{
	with (document.List)
	{		
		var map = new Map();

		map.Load(GetCookie("midiartPD2"));

		for (var i = 0; i < length; i++)
		{
			if (elements[i].type.match(/^(text|select-one)$/))
			{
				var val = elements[i].type == "select-one" ? elements[i].selectedIndex : elements[i].value;
			
				if (elements[i].name == "Karte" || elements[i].name == "KartenNr" || elements[i].name == "AblaufMonat" || elements[i].name == "AblaufJahr")
					val = "";

				map.Set(elements[i].name, val);
			}
		}
	
		if (GetCookie("midiartPD2") != map.Save())
			SetCookie("midiartPD2", map.Save(), 365*24*60*60*1000, "/");		
	}
}


/*
	Persönliche Daten aus Cookie 'midiartPD2' laden
*/

function LoadPersData()
{
	var map = new Map();

	map.Load(GetCookie("midiartPD2"));

	if (document.List)
	{
		with (document.List)
		{
			for (var i = 0; i < length; i++)
			{
				var val = map.Get(elements[i].name);
				
				if (elements[i].name == "Karte" || elements[i].name == "KartenNr" || elements[i].name == "AblaufMonat" || elements[i].name == "AblaufJahr")
					val = "";

				if (val && elements[i].type.match(/^(text|select-one)$/))
				{
					/* alert(elements[i].name + " = " + val); */
					
					if (elements[i].type == "select-one")
						elements[i].selectedIndex = parseInt(val);
					else
						elements[i].value = val;	
				}
			}
		}
	}
}


/*
	Warenkorb neu anzeigen (nach Artikel-entfernen)
*/

function RefreshOrder()
{
	SaveCheckmarks();
	window.location.reload();
	//document.List.Action.value = "Order";
	//document.List.submit();
}


/*
	Bestellung (Cookie 'midiartOrder') löschen
*/

function RemoveOrder()
{
	RemoveCookie("midiartOrder");

	if (parent.Kopfzeile)
		parent.Kopfzeile.location.href = "/kopf_masterborder2.html";
}


/*
	Bestellung (Cookie 'midiartOrder') löschen und Warenkorb neu anzeigen
*/

function ClearOrder()
{
	with (document.List)
	{
		for (var i = 0; i < elements.length; i++)
			if (IsChecked(elements[i].name.substr(1, 6)))
				UnCheck(elements[i].name.substr(1, 6));

		SaveCheckmarks();
	}
}



/*
	Browser auf Javascript und Cookies testen
*/

function CheckBrowser()
{
	SetCookie("CookieTest", "ok");
	
	if (GetCookie("CookieTest") == "ok")
	{
		RemoveCookie("CookieTest");
		window.location.href = "sos21.pl";
	}
}


/*
	alle nicht online verfügbaren Songs deselektieren
*/

function SelectOnline()
{
	with (document.List)
	{
		for (var i = 0; i < elements.length; i++)
			if (elements[i].name.charAt(0) == "#" && IsChecked(elements[i].name.substr(1, 6)))
				if (elements[i].value == "0")
					UnCheck(elements[i].name.substr(1, 6));

		SaveCheckmarks();
		window.location.href = "sos21.pl?Action=Order";
	}
}


function CheckOnlineOrder()
{
	with (document.List)
	{
		if (OnlineOrder.value == "wird bearbeitet...")
			return false;

		for (i = 0; i < length; i++)
		{
			if (elements[i].value.indexOf(":") != -1)
			{
				alert("':' sind nicht erlaubt!");
				elements[i].focus();
				return false;
			}
		}

		if (Kennung.value == "")
		{
			alert("Bitte geben Sie Ihre Kennung ein!");
			Kennung.focus();
			return false;
		}
		if (Pass.value == "")
		{
			alert("Bitte geben Sie Ihr Passwort ein!");
			Pass.focus();
			return false;
		}
		
		if (Kennung.value.indexOf("@") != -1 && Pass.value == "demo")
		{
			window.location.href = "DemoPacket.pl?EMail=" + Kennung.value;
			return false;
		}
		else
		{
			var allAvail = 1;
			
			for (var i = 0; allAvail == 1 && i < elements.length; i++)
				if (elements[i].name.charAt(0) == "#" && IsChecked(elements[i].name.substr(1, 6)))
					if (elements[i].value == "0")
						allAvail = 0;
			
			if (allAvail == 0)
				if (confirm("Achtung!\n\nNicht alle bestellten Artikel sind online verfügbar. Möchten Sie diese Artikel später nachgeliefert bekommen?\n\nOK\t\tJetzt bestellen\nAbbrechen\tBestellung nochmal bearbeiten") == false)
					return false;
				//	for (var i = 0; i < elements.length; i++)
				//		if (elements[i].name.charAt(0) == "#" && IsChecked(elements[i].name.substr(1, 6)))
				//			if (elements[i].value == "0")
				//				UnCheck(elements[i].name.substr(1, 6));
		}

		SavePersData();

		//OrderType.value="Online";
		//submit();
		//OnlineOrder.value="wird bearbeitet...";
		//OnlineOrder.disabled=true;

		return true;
	}
}

function CheckNachnahmeOrder()
{
	with (document.List)
	{
		if (NachnahmeOrder.value == "wird bearbeitet...")
			return false;

		if (Vorname.value == "")
		{
			alert("Bitte geben Sie Ihren Vornamen ein!");
			Vorname.focus();
			return false;
		}
		if (Nachname.value == "")
		{
			alert("Bitte geben Sie Ihren Nachnamen ein!");
			Nachname.focus();
			return false;
		}
		
		var rE = /(^\D+\s*\d+.*$)/;			
		if (Strasse.value == "" || rE.test(Strasse.value) == false)
		{
			alert("Bitte geben Sie Ihre Straße und Hausnummer ein!");
			Strasse.focus();
			return false;
		}
		
		var rE = /(^\d+\s+\D+$)/;
		if (Ort.value == "" || rE.test(Ort.value) == false)
		{
			alert("Bitte geben Sie die Postleitzahl und den Namen Ihres Wohnortes ein!");
			Ort.focus();
			return false;
		}
		if (Land.value == "")
		{
			alert("Bitte geben Sie den Namen des Landes ein, in dem Sie wohnen!");
			Land.focus();
			return false;
		}
	
		if (EMail.value != "" && !CheckEmail(EMail.value))
		{
			alert("Bitte prüfen Sie Ihre E-Mail-Adresse!");
			EMail.focus();
			return false;
		}

		if (!Rechnung[0].checked && !Rechnung[1].checked)
		{
			alert("Bitte geben Sie an, wie Sie bezahlen möchten!");
			return false;
		}

		SavePersData();

		OrderType.value="Nachnahme";
		//NachnahmeOrder.value="wird bearbeitet...";
		//NachnahmeOrder.disabled=true;

		return true;	//submit();
	}
	return false;
}

function CheckKreditOrder()
{
	with (document.List)
	{
		if (KreditOrder.value == "wird bearbeitet...")
			return false;
		
		if (Vorname.value == "")
		{
			alert("Bitte geben Sie Ihren Vornamen ein!");
			Vorname.focus();
			return false;
		}
		if (Nachname.value == "")
		{
			alert("Bitte geben Sie Ihren Nachnamen ein!");
			Nachname.focus();
			return false;
		}
		if (EMail.value != "" && !CheckEmail(EMail.value))
		{
			alert("Bitte prüfen Sie Ihre E-Mail-Adresse!");
			EMail.focus();
			return false;
		}
		
		if (KartenNr.value == "")
		{
			alert("Bitte geben Sie die Kreditkartennummer ein!");
			KartenNr.focus();
			return false;
		}
		if (AblaufMonat.options[AblaufMonat.selectedIndex].value == "Monat")
		{
			alert("Bitte geben Sie das Ablaufdatum Ihrer Kreditkarte ein!");
			AblaufMonat.focus();
			return false;
		}
		if (AblaufJahr.options[AblaufJahr.selectedIndex].value == "Jahr")
		{
			alert("Bitte geben Sie das Ablaufdatum Ihrer Kreditkarte ein!");
			AblaufJahr.focus();
			return false;
		}
			
		SavePersData();

		OrderType.value="Kreditkarte";
		KreditOrder.value="wird bearbeitet...";
		KreditOrder.disabled=true;
		
		submit();
	}
}


function OnlineOrderFormular()
{
	document.List.OrderType.value="Online";
	document.List.submit();
}
	
function NachnahmeOrderFormular()
{
	document.List.OrderType.value="Nachnahme";
	document.List.submit();
}

function KreditOrderFormular()
{
	with (document.List)
	{
		for (var i = 0; i < elements.length; i++)
			if (elements[i].name.charAt(0) == "#" && IsChecked(elements[i].name.substr(1, 6)))
				if (elements[i].value == "0")
				{
					if (confirm("Es sind zur Zeit nicht alle gewünschten Songs online verfügbar.\nBei Bestellung per Kreditkarte sind leider keine Nachlieferungen möglich.\n\nSollen die nicht verfügbaren Songs aus dem Warenkorb entfernt werden?"))
					{
						SelectOnline();
					}

					//UnCheck(elements[i].name.substr(1, 6));
					return 0;
				}
	}

	document.List.OrderType.value="Kreditkarte";
	document.List.submit();
}


/*
	neues Passwort an eingetragene E-Mail-Adresse schicken
*/
 
function GetNewPassword(kenn, act)
{
	var kennung = "";
	
	if (kenn != "")
	{
		kennung = kenn;
	}
	else if (document.List.Kennung.value == "")
	{
		alert("Bitte tragen Sie zuerst Ihre Kennung ein!");
		document.List.Kennung.focus();
	}
	else
		kennung = document.List.Kennung.value;
	
	if (kennung != "")
		if (confirm("Wenn Sie diesen Dialog bestätigen, bekommen Sie ein neues Passwort\nan Ihre E-Mail-Adresse zugesandt.\n\nDie E-Mail sollte dann in Kürze bei Ihnen eintreffen."))
			window.location.href = "sos21.pl?SubAction=NewPassword&Kennung=" + kennung + act;
}


/*
	SongRequest-Formular
*/

function SongRequest()
{
	with (document.Data)
	{
		if (Titel.value == "")
		{
			alert("Bitte tragen Sie einen Titel ein!");
			Titel.focus();
			return false;
		}
		if (Interpret.value == "")
		{
			alert("Bitte geben Sie einen Interpreten ein!");
			Interpret.focus();
			return false;
		}
		
	//	if (EMail.value != "" && !EMail.value.match(/^.+@.+\..+$/))
		if (EMail.value != "" && !CheckEmail(EMail.value))
		{
			alert("Bitte überprüfen Sie Ihre E-Mail-Adresse!");
			EMail.focus();
			return false;
		}

		submit();
	}
}


/*
	Nachnahme-Bestellung auf doppelte Files überprüfen und entfernen, falls gewünscht
*/

function CheckNNOrder(nnFiles)
{
	if (confirm("Ihr Warenkorb enthält Songs, die Sie schon einmal bestellt haben!\nUm eine doppelte Berechnung zu vermeiden, müssen diese aus dem Warenkorb entfernt werden!\n\nSollen diese Songs jetzt automatisch entfernt werden?"))
	{
		var order = GetCookie("midiartOrder");
		var oldOrder = order;
		
		for (i = 0; i < nnFiles.length; i += 6)
		{
			var ind = order.indexOf(nnFiles.substr(i, 6));
			
			if (ind != -1)
				order = order.substr(0, ind) + order.substr(ind+6, order.length-ind+6);
		}
		
		if (order != oldOrder)
			SetCookie("midiartOrder", order, 60*60*1000, "/");

		if (parent.Kopfzeile)
			parent.Kopfzeile.location.href = "/kopf_masterborder2.html";

		return 0;
	}

	return 1;
}


/*
	Prüfen, ob Cookies aktiviert sind
*/

function CheckCookies()
{
	SetCookie("CookieTest", "ok");
	
	if (GetCookie("CookieTest") == "ok")
	{
		RemoveCookie("CookieTest");
		return 1;
	}
	else
	{
		w = open("/enable_cookies.html", "CookieCheck","width=310,height=400,status=no,menubar=no,locationbar=no,scrollbars=yes");
		w.focus();

		return 0;	
	}
}

/*
	E-Mail auf gültige Syntax prüfen
*/

function CheckEmail(email)
{
//	var proto  = "(mailto:)?";
	var usr    = "([a-zA-Z0-9][a-zA-Z0-9_.-]*|\"([^\\\\\x80-\xff\015\012\"]|\\\\[^\x80-\xff])+\")";
	var domain = "([a-zA-Z0-9][a-zA-Z0-9._-]*\\.)*[a-zA-Z0-9][a-zA-Z0-9._-]*\\.[a-zA-Z]{2,5}";
//	var regex  = "^" + proto + "?" + usr + "\@" + domain + "$";
	var regex  = "^" + usr + "\@" + domain + "$";
	
	var rgx    = new RegExp(regex);

	return rgx.exec(email) ? true : false;
}
