// Warenkorb
// =========

// cookie setzen
var	ablauf_datum	= new Date()
ablauf_datum.setTime(ablauf_datum.getTime() + 1000 * 60 * 60)  //  60 min
document.cookie	= "WarenkorbCookieCheck=" + escape("x") + "; expires=" + ablauf_datum.toGMTString()
// location.href	= "index2.html"

function check_getCookie()
{	var	cookie_array	= document.cookie.split(";")
	var	cookie_teile
	var	i
	for(i = 0; i < cookie_array.length; i++)
	{
		cookie_teile	= cookie_array[i].split("=")
		if(cookie_teile[0].substring(0, 1) == " ")
			cookie_teile[0]	= cookie_teile[0].substring(1, cookie_teile[0].length)
		if(cookie_teile[0] == "WarenkorbCookieCheck")
			return unescape(cookie_teile[1])
	}
	return "" }
// für javascript check, kein check durchgeführt
var	korrekte_version	= true


// --- Parameter ---

var	cookie_warenkorb	= "Warenkorb"	// Name des Cookies fuer die Artikel
var	separator_ware		= ";"		// Trenner zwischen zwei Artikel beim Cookie
var	separator_daten		= "/"		// Trenner zwischen Artikelnummer und Anzahl beim Cookie
var	separator_feld		= "."		// Trenner fuer die Feldname
var	field_prefix		= "Warenkorb"	// Gemeinsamer Praefix fuer alle Feldnamen

var	titel_artikel_nr	= "Produktnr."	// Titel der Artikelnummer bei Warenkorbliste
var	titel_bezeichnung	= "Bezeichnung"	// Titel der Bezeichnung bei Warenkorbliste
var	titel_preis		= "Preis"	// Titel des Preises bei Warenkorbliste
var	titel_gesamtpreis	= "Gesamtpreis"	// Titel des Gesamtpreises bei Warenkorbliste
var	titel_mwst		= "MwSt."	// Titel des Mehrwertsteuerprozentsatzes bei Warenkorbliste
var	titel_menge		= "Menge"	// Titel der Menge bei Warenkorbliste

// Attribute fuer die Kassen-Tabelle
var	kasse_attribute_tabelle				= "BORDER=\"0\" CELLSPACING=\"0\" CELLPADDING=\"2\""

// Attribute fuer die Titelzeile der Kassen-Tabelle
var	kasse_attribute_titel			= "ALIGN=\"CENTER\" VALIGN=\"MIDDLE\" BGCOLOR=\"#DDDDDD\""
var	kasse_attribute_titel_menge		= ""
var	kasse_attribute_titel_artikel_nr	= ""
var	kasse_attribute_titel_bezeichnung	= ""
var	kasse_attribute_titel_preis		= ""
var	kasse_attribute_titel_mwst		= ""
var	kasse_attribute_titel_gesamtpreis	= ""

// Attribute fuer die Artikelzeile der Kassen-Tabelle
var	kasse_attribute_zeile			= "ALIGN=\"LEFT\" VALIGN=\"MIDDLE\""
var	kasse_attribute_zeile_menge		= ""
var	kasse_attribute_eingabe_menge		= "SIZE=\"8\" MAXLENGTH=\"12\""
var	kasse_attribute_zeile_artikel_nr	= ""
var	kasse_attribute_zeile_bezeichnung	= ""
var	kasse_attribute_zeile_preis		= "ALIGN=\"RIGHT\""
var	kasse_attribute_zeile_mwst		= "ALIGN=\"RIGHT\""
var	kasse_attribute_zeile_gesamtpreis	= "ALIGN=\"RIGHT\""
var	kasse_attribute_eingabe_gesamtpreis	= "SIZE=\"8\" READONLY onChange=\"warenkorb_readonly(this)\""

// Attribute fuer die Meldungszeile der Kassen-Tabelle (bei keinem Artikel)
var	kasse_attribute_meldung				= "ALIGN=\"CENTER\" VALIGN=\"TOP\" BGCOLOR=\"#FF6666\""

// Meldungstext, falls keine Artikel vorhanden sind
var	kasse_keine_artikel	= "Keine Artikel im Warenkorb!"


// --- Interne Variablen ---
var	produkte	= new Array()
var	fehler_gemeldet	= false

// --- Hilfsfunktionen ---

// Objekt Produkt anlegen
function makeProdukt(artikel_nr, bezeichnung, preis, mwst)
{
	this.artikel_nr		= artikel_nr
	this.bezeichnung	= bezeichnung
	this.preis		= preis
	this.mwst		= mwst
	this.menge		= 0
}

// Produkt dem Array hinzufuegen (extern nutzbar!)
function Produkt(artikel_nr, bezeichnung, preis, mwst)
{
	produkte[produkte.length]	= new makeProdukt(artikel_nr, bezeichnung, preis, mwst)
}

// Cookie lesen
function getCookie(cookie_name)
{
	var	cookie_array	= document.cookie.split(";")
	var	cookie_teile

	var	i
	for(i = 0; i < cookie_array.length; i++)
	{
		cookie_teile	= cookie_array[i].split("=")
		if(cookie_teile[0].substring(0, 1) == " ")
			cookie_teile[0]	= cookie_teile[0].substring(1, cookie_teile[0].length)
		if(cookie_teile[0] == cookie_name)
			return unescape(cookie_teile[1])
	}

	return ""
}

// Cookie schreiben
function setCookie(cookie_name, cookie_wert, gueltigkeitszeitraum)
{
	var	ablauf_datum	= new Date()

	ablauf_datum.setTime(ablauf_datum.getTime() + (gueltigkeitszeitraum ? gueltigkeitszeitraum : (1000 * 60 * 60)))
	document.cookie	= cookie_name + "=" + escape(cookie_wert) + "; " + "expires=" + ablauf_datum.toGMTString()
}

// Komma in Punkt umwandeln
function Komma2Punkt(s)
{
	return String(s).replace(/,/g, ".")
}

// Punkt in Komma umwandeln
function Punkt2Komma(s)
{
	return String(s).replace(/\./g, ",")
}

// Zwei Nachkommastellen
function TwoDigits(x)
{
	var	temp	= Math.round(x * 100 + .1)
	var	nach	= temp % 100
	var	vor	= (temp - nach) / 100
	return vor + "." + (nach < 10 ? "0" : "") + nach
}

// Rechts- oder Linksbuendig mit Leerzeichen auffuellen
function fuelle(s, l, li)
{
	while(s.length < l)
	{
		if(li)
			s	+= " "
		else
			s	= " " + s
	}
	return s
}

// Zeichenkette mit konstanten Zeichen
function str(c, l)
{
	var	i
	var	s	= ""
	for(i = 0; i < l; i++)
		s	+= c
	return s
}

// Menge bei einem bestimmten Artikel setzen
function setMenge(artnr, wert)
{
	var	i
	for(i = 0; i < produkte.length; i++)
		if(produkte[i].artikel_nr == artnr)
		{
			produkte[i].menge	= wert
			return
		}
}

// Produktposition im Array ermitteln
function getProdukt(artikel_nr)
{
	var	i
	for(i = 0; i < produkte.length; i++)
		if(produkte[i].artikel_nr == artikel_nr)
			return i
	return null
}

// --- Hauptfunktionen ---

// Warenkorb aus Cookie auslesen
function getWarenkorb()
{
	var	w_array	= getCookie(cookie_warenkorb).split(separator_ware)
	var	w_teile

	// Mengen auf 0 setzen
	var	i
	for(i = 0; i < produkte.length; i++)
		produkte[i].menge	= 0

	// Warenkorb leer?
	if(w_array == "" || w_array == "leer")
		return

	// Warenkorb analysieren
	var	i
	for(i = 0; i < w_array.length; i++)
	{
		w_teile	= w_array[i].split(separator_daten)
		setMenge(w_teile[0], parseFloat(w_teile[1]))
	}
}

// Warenkorb in Cookie schreiben
function setWarenkorb()
{
	var	w_cookie	= ""
	var	i

	// Alle Produkte mit Mengen ungleich 0 in String schreiben
	for(i = 0; i < produkte.length; i++)
		if(produkte[i].menge != 0)
			w_cookie	+= ((w_cookie == "") ? "" : separator_ware) + produkte[i].artikel_nr + separator_daten + produkte[i].menge

	// Cookie setzen
	setCookie(cookie_warenkorb, (w_cookie == "") ? "leer" : w_cookie)
}

// Globale Felder setzen
function globalfelder(name, set, f, e)
{
	var	i

	// Feld Warenkorb mit Artikelliste fuellen
	if(name == "Warenkorb")
	{
		var	laenge_artikel_nr	= titel_artikel_nr.length
		var	laenge_bezeichnung	= titel_bezeichnung.length
		var	laenge_preis		= titel_preis.length
		var	laenge_mwst		= titel_mwst.length
		var	laenge_menge		= titel_menge.length
		var	laenge_gesamtpreis	= titel_gesamtpreis.length
		var	temp

		// Breite der Spalten ermitteln
		for(i = 0; i < produkte.length; i++)
		{
			if(produkte[i].artikel_nr.length > laenge_artikel_nr)
				laenge_artikel_nr = produkte[i].artikel_nr.length
			if(produkte[i].bezeichnung.length > laenge_bezeichnung)
				laenge_bezeichnung = produkte[i].bezeichnung.length
			temp	= Punkt2Komma(produkte[i].menge).length
			if(temp > laenge_menge)
				laenge_menge = temp
			temp	= Punkt2Komma(TwoDigits(produkte[i].preis))
			if(temp.length > laenge_preis)
				laenge_preis = temp.length
			temp	= Punkt2Komma(produkte[i].mwst).length
			if(temp > laenge_mwst)
				laenge_mwst = temp
			temp	= Punkt2Komma(TwoDigits(produkte[i].menge * produkte[i].preis)).length
			if(temp > laenge_gesamtpreis)
				laenge_gesamtpreis = temp
		}

		// Titelzeile aufbauen
		var	s	= fuelle(titel_menge, laenge_menge, true) + " " +
					fuelle(titel_artikel_nr, laenge_artikel_nr, true) + " " +
					fuelle(titel_bezeichnung, laenge_bezeichnung, true) + " " +
					fuelle(titel_preis, laenge_preis, false) + " " +
					// rem mwst fuelle(titel_mwst, laenge_mwst, false) + " " +
					fuelle(titel_gesamtpreis, laenge_gesamtpreis, false) + "\n" +
					str("-", laenge_menge) + " " +
					str("-", laenge_artikel_nr) + " " +
					str("-", laenge_bezeichnung) + " " +
					str("-", laenge_preis) + " " +
					// rem mwst str("-", laenge_mwst) + " " +
					str("-", laenge_gesamtpreis)

		// Artikelliste anfuegen
		for(i = 0; i < produkte.length; i++)
			if(produkte[i].menge != 0)
				s	+= "\n" + fuelle(Punkt2Komma(produkte[i].menge), laenge_menge, true) + " " +
						fuelle(produkte[i].artikel_nr, laenge_artikel_nr, true) + " " +
						fuelle(produkte[i].bezeichnung, laenge_bezeichnung, true) + " " +
						fuelle(Punkt2Komma(TwoDigits(produkte[i].preis)), laenge_preis, false) + " " +
						// rem mwst fuelle(Punkt2Komma(produkte[i].mwst), laenge_mwst, false) + " " +
						fuelle(Punkt2Komma(TwoDigits(produkte[i].menge * produkte[i].preis)), laenge_gesamtpreis, false)

		// Liste setzen
		document.forms[f].elements[e].value	= s
		return true
	}

	// Feld GesamtMwSt berechnen und setzen
	else if(name == "GesamtMwSt")
	{
		var	s	= 0
		for(i = 0; i < produkte.length; i++)
			s	+= produkte[i].menge * produkte[i].preis * (produkte[i].mwst / 100)
		document.forms[f].elements[e].value	= Punkt2Komma(TwoDigits(s))
		return true
	}

	// Feld Gesamtpreis berechnen und setzen
	else if(name == "Gesamtpreis")
	{
		var	s	= 0
		for(i = 0; i < produkte.length; i++)
			s	+= produkte[i].menge * produkte[i].preis
		document.forms[f].elements[e].value	= Punkt2Komma(TwoDigits(s))
		return true
	}

	// Feld Gesamtartikel berechnen und setzen
	else if(name == "Gesamtartikel")
	{
		var	s	= 0
		for(i = 0; i < produkte.length; i++)
			if(produkte[i].menge != 0)
				s++
		document.forms[f].elements[e].value	= s
		return true
	}

	// Ungueltiges Feld
	return false
}

// Produktfelder fuellen
function produktfelder(name, set, f, e, allfields)
{
	// Artikelnummer von Namen trennen
	f_teile	= name.split(separator_feld)
	if(f_teile.length != 2)
	{
		if(!fehler_gemeldet)
			alert("Falsche Schreibweise: " + name + ".\nErlaubt: Artikelnummer.Bezeichner")
		fehler_gemeldet	= true
		return
	}

	// Position in Produktliste ermitteln
	var	pnr	= getProdukt(f_teile[0])
	if(pnr != null)
	{
		// Alle Felder setzen?
		if(allfields)
		{
			// Felder setzen?
			if(set)
			{
				var	gesetzt	= false
				switch(f_teile[1])
				{
					case "Menge":
						document.forms[f].elements[e].value	= Punkt2Komma(produkte[pnr].menge)
						break
					case "ArtikelNr":
						document.forms[f].elements[e].value	= produkte[pnr].artikel_nr
						gesetzt	= true
						break
					case "Bezeichnung":
						document.forms[f].elements[e].value	= produkte[pnr].bezeichnung
						gesetzt	= true
						break
					case "Preis":
						document.forms[f].elements[e].value	= Punkt2Komma(TwoDigits(produkte[pnr].preis))
						gesetzt	= true
						break
					case "MwSt":
						document.forms[f].elements[e].value	= produkte[pnr].mwst
						gesetzt	= true
						break
					case "Gesamtpreis":
						break
					default:
						if(!fehler_gemeldet)
							alert("Tippfehler: " + f_teile[1] + "\nErlaubt: Menge, ArtikelNr, Bezeichnung, Preis, MwSt, Gesamtpreis")
						fehler_gemeldet	= true
				}
				if(gesetzt)
					document.forms[f].elements[e].defaultValue	= document.forms[f].elements[e].value
			}

			// Felder auswerten?
			else
			{
				switch(f_teile[1])
				{
					case "Menge":
						var wert	= parseFloat(Komma2Punkt(document.forms[f].elements[e].value))
						if(isNaN(wert))
							wert	= 0
						produkte[pnr].menge	= wert
						break
				}
			}
		}

		// Summenfelder (nur Setzen, nicht auswerten)
		if(set)
		{
			switch(f_teile[1])
			{
				case "Gesamtpreis":
					document.forms[f].elements[e].value	= Punkt2Komma(TwoDigits(produkte[pnr].menge * produkte[pnr].preis))
					gesetzt	= true
					break
			}
			if(gesetzt)
				document.forms[f].elements[e].defaultValue	= document.forms[f].elements[e].value
		}
	}
}

// Alle Formulare und Elemente untersuchen
function scanForms(set, allfields)
{
	var	f
	for(f = 0; f < document.forms.length; f++)
	{
		var	e
		for(e = 0; e < document.forms[f].elements.length; e++)
		{
			// Gueltiger Feldname?
			if(document.forms[f].elements[e].name.substring(0, field_prefix.length + 1) == (field_prefix + separator_feld))
			{
				var	name	= document.forms[f].elements[e].name.substring(field_prefix.length + 1)
				if(!globalfelder(name, set, f, e))
					produktfelder(name, set, f, e, allfields)
			}
		}
	}
}

// --- Extern zugaengliche Funktionen ---

// Pruefung auf Veraenderung des Inhalts
function warenkorb_readonly(o)
{
	if(o.value != o.defaultValue)
		o.value	= o.defaultValue
}

// Warenkorb loeschen
function warenkorb_loeschen()
{
	var	i
	for(i = 0; i < produkte.length; i++)
		produkte[i].menge	= 0
	scanForms(true, true)
}

// Liste fuer Kasse darstellen
function warenkorb_kasse()
{
	getWarenkorb()
	var	i
	with(document)
	{
		writeln("<TABLE " + kasse_attribute_tabelle + ">")
		writeln("<TR " + kasse_attribute_titel + ">")
		writeln("<TH " + kasse_attribute_titel_menge + ">" + titel_menge + "</TH>")
		writeln("<TH " + kasse_attribute_titel_artikel_nr + ">" + titel_artikel_nr + "</TH>")
		writeln("<TH " + kasse_attribute_titel_bezeichnung + ">" + titel_bezeichnung + "</TH>")
		writeln("<TH " + kasse_attribute_titel_preis + ">" + titel_preis + "</TH>")
		// rem mwst writeln("<TH " + kasse_attribute_titel_mwst + ">" + titel_mwst + "</TH>")
		writeln("<TH " + kasse_attribute_titel_gesamtpreis + ">" + titel_gesamtpreis + "</TH>")
		writeln("</TR>")

		// Alle Artikel ausgeben
		var	artikel_gefunden	= false
		for(i = 0; i < produkte.length; i++)
		{
			if(produkte[i].menge)
			{
				artikel_gefunden	= true
				writeln("<TR " + kasse_attribute_zeile + ">")
				writeln("<TD " + kasse_attribute_zeile_menge + "><INPUT TYPE=\"TEXT\" " + kasse_attribute_eingabe_menge + " NAME=\"Warenkorb." + produkte[i].artikel_nr + ".Menge\" VALUE=\" + Punkt2Komma(produkte[i].menge) + \" onChange=\"warenkorb_aktualisieren()\"></TD>")
				writeln("<TD " + kasse_attribute_zeile_artikel_nr + ">" + produkte[i].artikel_nr + "</TD>")
				writeln("<TD " + kasse_attribute_zeile_bezeichnung + ">" + produkte[i].bezeichnung + "</TD>")
				writeln("<TD " + kasse_attribute_zeile_preis + ">" + Punkt2Komma(TwoDigits(produkte[i].preis)) + "</TD>")
				// rem mwst writeln("<TD " + kasse_attribute_zeile_mwst + ">" + produkte[i].mwst + "</TD>")
				writeln("<TD " + kasse_attribute_zeile_gesamtpreis + "><INPUT TYPE=\"TEXT\" " + kasse_attribute_eingabe_gesamtpreis + " NAME=\"Warenkorb." + produkte[i].artikel_nr + ".Gesamtpreis\" VALUE=\" + Punkt2Komma(TwoDigits(produkte[pnr].menge * produkte[pnr].preis)) + \" onChange=\"warenkorb_aktualisieren()\"></TD>")
				writeln("</TR>")
			}
		}

		// Ersatzmeldung, falls Warenkorb leer
		if(!artikel_gefunden)
		{
				writeln("<TR " + kasse_attribute_meldung + ">")
				writeln("<TD COLSPAN=\"6\">" + kasse_keine_artikel + "</TD>")
				writeln("</TR>")
		}
		writeln("</TABLE>")
	}
}

// Funktion fuer Ereignishandler onLoad (Element BODY)
function warenkorb_onload()
{
	getWarenkorb()
	scanForms(true, true)
}

// Funktion fuer Ereignishandler onUnload (Element BODY)
function warenkorb_onunload()
{
	scanForms(false, true)
	setWarenkorb()
}

// Aktualisieren aller Summenfelder
function warenkorb_aktualisieren()
{
	scanForms(false, true)
	scanForms(true, false)
}


// Produkteliste zufügen, entfernen

function add(fo, fe)
{
	var	temp	= parseInt(fo[fe].value)
	fo[fe].value	= isNaN(temp) ? 0 : (temp + 1)
	warenkorb_aktualisieren()
}

function sub(fo, fe)
{
	var	temp	= parseInt(fo[fe].value)
	fo[fe].value	= (temp==0) ? 0 : (temp - 1)
	warenkorb_aktualisieren()
}

function checkInt(o)
{
	var	temp	= parseInt(o.value)
	if(isNaN(temp))
	{
		alert("Bitte nur ganzzahlige Werte!")
		o.focus()
		temp	= 0
	}
	o.value	= Math.abs(temp)
}


// Demofunktion (statt Mailversand)
function demo(f)
{
	w	= open("", "Demo", "innerWidth=560,innerHeight=500,width=560,height=500,location=0,toolbar=0,directories=0,resizable=1,scrollbars=1,status=1,dependet")
	with(w.document)
	{
    open("text/html")
		writeln("<HTML>")
		writeln("<HEAD>")
	//	writeln("<link rel=stylesheet href=Site.css type=text/css>")
		writeln("<TITLE>Bestellung</TITLE>")
		writeln("<META HTTP-EQUIV=\"CONTENT-TYPE\" CONTENT=\"text/html; CHARSET=iso-8859-1\">")
		writeln("</HEAD>")
		writeln("<BODY>")
    writeln("<H3>Bestellung abschicken ?</H3>")
		writeln("<P>Hier sehen Sie Ihren Warenkorb und Ihre Adresse, <br>prüfen Sie bitte, ob die Daten richtig sind und klicken Sie dann unten zum Bestellen !</P>")
		writeln("<P><PRE>" + f["Warenkorb.Warenkorb"].value + "</PRE></P>")
		writeln("<P>Gesamtpreis: " + f["Warenkorb.Gesamtpreis"].value + " EUR</P>")
	//	writeln("</TABLE>")
		writeln("Ihre Rechnungsadresse:")
		writeln("<TABLE BORDER=\"0\">")

		writeln("<TR ALIGN=\"LEFT\" VALIGN=\"TOP\">")
//		writeln("<TD>Liefer- und <br>Rechnungsadresse:</TD>")
		writeln("<TD>" + f["name"].value + "</TD>")
		writeln("</TR>")

//		writeln("<TR ALIGN=\"LEFT\" VALIGN=\"TOP\">")
//		writeln("<TD>Stra&szlig;e, Hausnummer:</TD>")
//		writeln("<TD>" + f["Strasse"].value + " " + f["Hausnummer"].value + "</TD>")
//		writeln("</TR>")

//		writeln("<TR ALIGN=\"LEFT\" VALIGN=\"TOP\">")
//		writeln("<TD>PLZ, Ort:</TD>")
//		writeln("<TD>" + f["PLZ"].value + " " + f["Ort"].value + "</TD>")
//		writeln("</TR>")

		writeln("<TR ALIGN=\"LEFT\" VALIGN=\"TOP\">")
// 		writeln("<TD>Telefon:</TD>")
		writeln("<TD>" + f["telefon"].value + "</TD>")
		writeln("</TR>")

		writeln("<TR ALIGN=\"LEFT\" VALIGN=\"TOP\">")
// 		writeln("<TD>eMail:</TD>")
//		writeln("<TD>" + f["eMail"].value + "</TD>")
// 		writeln("<TD>Email:</TD>")
		writeln("<TD>" + f["email"].value + "</TD>")
		writeln("</TR>")

 		writeln("<TR ALIGN=\"LEFT\" VALIGN=\"TOP\">")
 		writeln("<TD>&nbsp;</TD>")
		writeln("<TD>&nbsp;</TD>")
		writeln("</TR>")

    if ( f["comments"].value != "" )
    {
 		writeln("<TR ALIGN=\"LEFT\" VALIGN=\"TOP\">")
 		writeln("<TD>zusätzliche Nachricht:</TD>")
		writeln("<TD>" + f["comments"].value + "</TD>")
		writeln("</TR>")
    }
		writeln("</TABLE>")
		writeln("<P><STRONG>&nbsp;<A HREF=\"javascript:opener.contact.submit();window.close();\">Daten okay --> Bestellung per Email versenden <img src=mod_shop/icon_send.gif border=0></A>&nbsp;</STRONG></P>")
		writeln("<P><STRONG>&nbsp;<A HREF=\"javascript:self.close()\">Bestellung abbrechen --> Fenster schlie&szlig;en</A>&nbsp;</STRONG></P>")
		writeln("</BODY>")
		writeln("</HTML>")
		close()
	}
	w.focus()
}

// EOF
