//	scripte/rechnung.js
 
// === Globale Variablen ===
var	anzahl_positionen	= 0

// === Feldliste ===

// Erlaubte Parameter mit Standardwerten
var parameter	=
[
	{name: "recipient", typ: "email", standard: "berlin@flicflachockey.de"},
	{name: "Waehrung", typ: "string", standard: "EUR"},
	{name: "Betreff", typ: "string", standard: "online Bestellung"},
	{name: "Pflicht", typ: "string", standard: "realname,email"},
	{name: "Pflichta", typ: "string", standard: "BankName,BankBLZ,BankKontonummer"}

]

// Erlaubte Eingabewerte
var	eingabe	=
[
	{name: "realname", typ: "string", standard: ""},
	{name: "Strasse", typ: "string", standard: ""},
	{name: "Hausnummer", typ: "string", standard: ""},
	{name: "PLZ", typ: "string", standard: ""},
	{name: "Ort", typ: "string", standard: ""},
	{name: "Land", typ: "string", standard: ""},
	{name: "email", typ: "email", standard: ""},
	{name: "Telefon", typ: "string", standard: ""},
	{name: "Zahlungsart", typ: "string", standard: ""},
	{name: "BankName", typ: "string", standard: ""},
	{name: "BankBLZ", typ: "string", standard: ""},
	{name: "BankKontonummer", typ: "string", standard: ""},
	{name: "Anmerkungen", typ: "string", standard: ""}
]

// === Fehlermeldungen ===
var	fehler	=
[
	"Kein Fehler",
	"In dieses Feld d\xFCrfen nur Zahlen ohne Nachkommastellen eingegeben werden.",
	"In dieses Feld d\xFCrfen nur Zahlen eingegeben werden.",
	"Bitte eine Email-Adresse in korrektem Format eingeben.",
	"Es sind nur Monatsangaben zwischen 1 und 12 erlaubt.",
	"Bitte pr\xFCfen Sie die Jahreszahl auf Korrektheit.\nDas Jahrhundert bitte angeben.",
	"Eine Kreditkartennummer hat 16 Stellen.",
	"Bitte eine g\xFCltige Postleitzahl (5stellig, nur Ziffern) eingeben.",
	"Bitte eine korrekte Telefon- oder Telefaxnummer eingeben."
]

// === Pruefwerte fuer Telefonnummern ===
var	teldigits	=
[
	"0", "1", "2", "3", "4", "5", "6", "7", "8", "9",
	" ",
	"(", ")",
	"/", "-"
]

// === Hilfsfunktionen ===

// -- Runden der Zahl x auf n Nachkommastellen --
// -- In: Number, Number; Out: Number --
function Runden(x, n)
{
	var	faktor	= Math.pow(10, n)
	return Math.round(x * faktor) / faktor
}

// -- Runden der Zahl x auf 2 Nachkommastellen --
// -- In: Number; Out: Number --
function Runden2(x)
{
	return Math.round(x * 100) / 100
}

// -- Dezimalpunkt in Dezimalkomma tauschen --
// -- In: Number; Out: String --
function PunktNachKomma(x)
{
	var	s	= x.toString()

	var	pospkt	= s.indexOf(".")
	if(pospkt == -1)
		return s
	return s.substring(0, pospkt) +
			"," +
			s.substring(pospkt + 1, s.length)
}

// -- Dezimalkomma in Dezimalpunkt tauschen --
// -- In: String; Out: Number --
function KommaNachPunkt(s)
{
	var	poskom	= s.indexOf(",")
	if(poskom == -1)
		return (s.indexOf(".") == -1) ?
				parseInt(s) :
				parseFloat(s)
	return parseFloat(s.substring(0, poskom) +
			"." +
			s.substring(poskom + 1, s.length))
}

// -- Null vor dem Komma ergaenzen --
// -- In: String; Out: String --
function NullVorKomma(s)
{
	if(s == "")
		return s
	if((s.substring(0, 1) == ",") ||
		(s.substring(0, 1) == "."))
		return "0" + s
	if((s.substring(0, 2) == "-,") ||
		(s.substring(0, 2) == "-."))
		return "-0" + s.substring(1)
	return s
}

// -- Feste Anzahl Nachkommastellen (Zahl s, Nachkommastellen n) --
// -- In: String, Number; Out: String --
function NachKomma(s, n)
{
	if(s == "")
		return ""

	var	test	= parseFloat(KommaNachPunkt(s))
	if(isNaN(test))
		return test

	var	vorkomma
	var	nachkomma
	var	punkt	= false

	var	pospkt	= s.indexOf(",")
	if(pospkt == -1)
	{
		pospkt	= s.indexOf(".")
		if(pospkt != -1)
			punkt	= true
	}
	if(pospkt == -1)
	{
		vorkomma	= s
		nachkomma	= ""
	}
	else
	{
		vorkomma	= s.substring(0, pospkt)
		nachkomma	= s.substring(pospkt + 1,
						((pospkt + n + 1) < s.length) ?
							(pospkt + n + 1) :
							s.length)
	}
	while(nachkomma.length < n)
		nachkomma	+= "0"

	return vorkomma + (punkt ? "." : ",") + nachkomma
}

// -- 2 Nachkommastellen (Zahl s) --
// -- In: String; Out: String --
function NachKomma2(s)
{
	if(s == "")
		return ""

	var	test	= parseFloat(KommaNachPunkt(s))
	if(isNaN(test))
		return test

	var	punkt	= false
	var	pospkt	= s.indexOf(",")
	if(pospkt == -1)
	{
		pospkt	= s.indexOf(".")
		if(pospkt == -1)
			return s + ",00"
		punkt   = true
	}
	return s.substring(0, pospkt) +
			(punkt ? "." : ",") +
			(s + "00").substring(pospkt + 1, pospkt + 3)
}

// -- Tausenderpunkte --
// -- In: String; Out: String --
function Tausenderpunkte(s)
{
	if(s == "")
		return ""

	var	test	= parseFloat(KommaNachPunkt(s))
	if(isNaN(test))
		return test

	var	vorkomma
	var	nachkomma

	var	pospkt	= s.indexOf(",")
	if(pospkt == -1)
	{
		vorkomma	= s
		nachkomma	= ""
	}
	else
	{
		vorkomma	= s.substring(0, pospkt)
		nachkomma	= s.substring(pospkt + 1)
	}

	var	laenge_ganz		= Math.floor(vorkomma.length / 3 + .1)
	var	laenge_anfang	= vorkomma.length % 3
	var	vorkomma_neu	= ""
	if(laenge_anfang != 0)
		vorkomma_neu	= vorkomma.substring(0, laenge_anfang)
	var	i
	for(i = 0; i < laenge_ganz; i++)
	{
		vorkomma_neu	+= ((vorkomma_neu == "") ? "" : ".") +
							vorkomma.substring(laenge_anfang + (3 * i), laenge_anfang + (3 * i) + 3)
	}
	return vorkomma_neu + ((nachkomma == "") ? "" : ("," + nachkomma))
}

// -- Fehlerkorrektur der Zahl x an Stelle n --
// -- In: Number, Number; Out: Number --
function Korrektur(x, n)
{
	var	faktor	= Math.pow(10, n)
	return Math.floor(x * faktor + .1) / faktor
}

// === Feldinhalte setzen oder lesen ===

// Feld setzen
function set(formular, feld, wert)
{
	if(document[formular])
		if(document[formular][feld])
			document[formular][feld].value	= wert
}

// Feld lesen
function get(formular, feld)
{
	if(document[formular])
		if(document[formular][feld])
			return document[formular][feld].value
	return null
}

// Select-Feld lesen
function getselect(formular, feld)
{
	if(document[formular])
		if(document[formular][feld])
			return document[formular][feld].options[document[formular][feld].selectedIndex].value
	return null
}

// Feldexistenz
function exist(formular, feld)
{
	if(document[formular])
		if(document[formular][feld])
			return true
	return false
}

// Feld lesen
function getFloat(formular, feld)
{
	var	feld_inhalt = get(formular, feld)
	if(feld_inhalt == null)
		return null
	var	wert	= parseFloat(KommaNachPunkt(feld_inhalt))
	if(isNaN(wert))
		return null
	return wert
}

// Defaultwert
function def(arr, nm)
{
	var	i
	for(i = 0; i < arr.length; i++)
		if(arr.name == nm)
			return arr.standard
	return null
}

// Feld kopieren
function kopiere_feld(src_form, src_field, dst_form, dst_field)
{
	var	src	= ""
	src	= get(src_form, src_field)
	set(dst_form, dst_field, src)
}

// Feld kopieren
function kopiere_auswahlfeld(src_form, src_field, dst_form, dst_field)
{
	var	src	= ""
	src	= getselect(src_form, src_field)
	set(dst_form, dst_field, src)
}

// === Feldwertpruefungen ===

// Ganze Zahl
function zahl(feld)
{
	var	tmp	= feld.value
	if(tmp == "")
		return true

	tmp	= parseInt(tmp)
	if(isNaN(tmp))
	{
		alert(fehler[1])
		feld.value	= ""
		feld.focus()
		return false
	}
	feld.value	= String(tmp)
	return true
}

// Fliesskommazahl
function fliesskommazahl(feld)
{
	var	tmp	= feld.value
	if(tmp == "")
		return true

	tmp	= parseFloat(KommaNachPunkt(tmp))
	if(isNaN(tmp))
	{
		alert(fehler[2])
		feld.value	= ""
		feld.focus()
		return false
	}
	feld.value	= PunktNachKomma(tmp)
	return true
}

// Geld
function geld(feld)
{
	var	tmp	= feld.value
	if(tmp == "")
		return true

	tmp	= parseFloat(KommaNachPunkt(tmp))
	if(isNaN(tmp))
	{
		alert(fehler[2])
		feld.value	= ""
		feld.focus()
		return false
	}
	feld.value	= NachKomma2(PunktNachKomma(tmp))
	return true
}

// Email
function email(feld)
{
	var	tmp	= feld.value
	if(tmp == "")
		return true

	if(tmp.indexOf("@") == -1)
	{
		alert(fehler[3])
		feld.value	= ""
		feld.focus()
		return false
	}

	return true
}

// Telefon- oder Faxnummer
function telefon(feld)
{
	var	tmp	= feld.value
	if(tmp == "")
		return true

	function isNaTelDigit(c)
	{
		var	i
		for(i = 0; i < teldigits.length; i++)
			if(c == teldigits[i])
				return false
		return true
	}

	var	i
	for(i = 0; i < tmp.length; i++)
	{
		if(isNaTelDigit(tmp.charAt(i)))
		{
			alert(fehler[8])
			feld.focus()
			return false
		}
	}

	return true
}

// Rechnungsfeld fuellen
function ausgabe_rechnung()
{
	// Laengstes Arrayelement ermitteln
	function maxl(a, start)
	{
		var	i
		var	l	= start
		for(i = 0; i < a.length; i++)
			if(a[i])
				if(a[i].length > l)
					l	= a[i].length
		return l
	}

	// Zeichenkette mit Zeichen c aufbauen
	function get_mono(c, n)
	{
		var	b	= ""
		var	i
		for(i = 0; i < n; i++)
			b	+= c
		return b
	}

	// Waehrungsparameter
	var	s	= ""
	var	w	= get("Parameter", "Waehrung")
	if(w == null)
		w	= def(parameter, "Waehrung")

	// Artikelzeilen
	var	zeilen	= new Array()
	var	artikel_bestellt	= new Array()
	var	i
	for(i = 0; i < anzahl_positionen; i++)
		artikel_bestellt[i]	= get("Eingabe", "Artikel_Stueck_" + String(i)) ? true : false
	for(i = 0; i < anzahl_positionen + 7; i++)
		zeilen[i]	= ""

	// Werte aufbereiten
	function analyse(titel1, titel2, titel3, feld, align)
	{
		var	align_right	= (align != null) ? align : true
		var	temp	= new Array()

		// Existenz des Felds pruefen
		var	found	= false
		var	tmp
		var	i
		for(i = 0; i < anzahl_positionen; i++)
		{
			temp[i]	= null
			tmp	= get("Eingabe", feld + String(i))
			if(tmp)
			{
				found	= true
				temp[i]	= tmp
			}
		}
		if(!found)
			return

		// Breite der Spalte berechnen
		var	xl	= titel1.length
		if(titel2.length > xl)
			xl	= titel2.length
		if(titel3.length > xl)
			xl	= titel3.length
		var	max_length	= maxl(temp, xl)

		// Zellen ausrichten
		var	blanks	= get_mono(" ", max_length)
		for(i = 0; i < temp.length; i++)
			temp[i]	= temp[i] ?
					(align_right ?
						(blanks + temp[i]).substring(temp[i].length) :
						(temp[i] + blanks).substring(0, max_length)) :
					blanks

		// Spaltentrenner anbringen
		if(zeilen[0] != "")
			for(i = 0; i < anzahl_positionen + 7; i++)
				zeilen[i]	+= " "

		// Zellen fuellen
		zeilen[0]	+= (titel1 + blanks).substring(0, max_length)
		zeilen[1]	+= (titel2 + blanks).substring(0, max_length)
		zeilen[2]	+= (titel3 + blanks).substring(0, max_length)
		zeilen[3]	+= get_mono("=", max_length)
		for(i = 0; i < anzahl_positionen; i++)
			if(artikel_bestellt[i])
				zeilen[i + 4]	+= temp[i]
	}

	// Artikelnummer
	analyse("Artikel-", "nummer", "", "Artikel_Nummer_")
	analyse("Anzahl", "", "", "Artikel_Stueck_")
	analyse("Bezeichnung", "", "", "Artikel_Name_", false)
	analyse("Preis", "", "[" + w + "]", "Artikel_Preis_")
	analyse("MwSt.", "", "[%]", "Artikel_MwstSatz_")
	analyse("MwSt.", "", "[" + w + "]", "Artikel_Mwst_")
	analyse("Preis", "inkl. MwSt.", "[" + w + "]", "Artikel_PreisInclMwst_")
	analyse("Gesamt", "", "[" + w + "]", "Artikel_GesamtPreis_")
	analyse("Gesamt", "MwSt.", "[" + w + "]", "Artikel_GesamtMwst_")
	analyse("Gesamt", "inkl. MwSt.", "[" + w + "]", "Artikel_GesamtPreisInclMwst_")

	// Zeilenausgabe
	function ist_nicht_leer(s)
	{
		var	i
		for(i = 0; i < s.length; i++)
			if(s.substring(i, i+1) != " ")
				return true
		return false
	}
	for(i = 0; i < anzahl_positionen + 4; i++)
		if(ist_nicht_leer(zeilen[i]))
			s	+= zeilen[i] + "\n"
	if(s != "")
		s	+= "\n"

	// Gesamtfelder fuellen
	temp	= new Array()
	temp[0]	= getFloat("Eingabe", "GesamtPreis")
	temp[1]	= getFloat("Eingabe", "GesamtMwst")
	temp[2]	= getFloat("Eingabe", "GesamtPreisInclMwst")
	temp[0]	= temp[0] ? NullVorKomma(NachKomma2(PunktNachKomma(getFloat("Eingabe", "GesamtPreis")))) : null
	temp[1]	= temp[1] ? NullVorKomma(NachKomma2(PunktNachKomma(getFloat("Eingabe", "GesamtMwst")))) : null
	temp[2]	= temp[2] ? NullVorKomma(NachKomma2(PunktNachKomma(getFloat("Eingabe", "GesamtPreisInclMwst")))) : null

	var	max_length	= maxl(temp, 0)
	var	blanks		= get_mono(" ", max_length)
	for(i = 0; i < temp.length; i++)
		if(temp[i])
			temp[i]	= (blanks + temp[i]).substring(temp[i].length)

	s	+= temp[0] ? ("Summe:               " + temp[0] + " " + w + "\n") : ""
	s	+= temp[1] ? ("MwSt. (gesamt):      " + temp[1] + " " + w + "\n") : ""
	s	+= temp[2] ? ("Summe (inkl. MwSt.): " + temp[2] + " " + w + "\n") : ""

	set("Ausgabe", "Rechnung", s)
}

// === Berechnungsfunktionen ===

// Anzahl der moeglichen Artikelfelder zaehlen
function positionen_zaehlen()
{
	// Pruefung, ob Artikelzeile existiert
	function artikel_existiert(nr)
	{
		var	s_nr	= String(nr)
		if(exist("Eingabe", "Artikel_Nummer_" + s_nr))
			return true
		if(exist("Eingabe", "Artikel_Stueck_" + s_nr))
			return true
		if(exist("Eingabe", "Artikel_Name_" + s_nr))
			return true
		if(exist("Eingabe", "Artikel_Preis_" + s_nr))
			return true
		if(exist("Eingabe", "Artikel_MwstSatz_" + s_nr))
			return true
		if(exist("Eingabe", "Artikel_Mwst_" + s_nr))
			return true
		if(exist("Eingabe", "Artikel_PreisInclMwst_" + s_nr))
			return true
		if(exist("Eingabe", "Artikel_GesamtPreis_" + s_nr))
			return true
		if(exist("Eingabe", "Artikel_GesamtMwst_" + s_nr))
			return true
		if(exist("Eingabe", "Artikel_GesamtPreisInclMwst_" + s_nr))
			return true
		return false
	}

	// Positionen zaehlen
	var	anz	= 0
	while(artikel_existiert(anz))
		anz++
	anzahl_positionen	= anz

	// Positionen merken!
	set("Eingabe", "GesamtPositionen", anzahl_positionen)
}

// Gesamtsummen berechnen
function gesamt_berechnen()
{
	set("Eingabe", "GesamtPositionen", anzahl_positionen)

	// Summen aufaddieren
	var	gpr		= null
	var	gpr_mwst	= null
	var	gmwst		= null
	var	i
	var	temp		= 0.0
	for(i = 0; i < anzahl_positionen; i++)
	{
		temp	= getFloat("Eingabe", "Artikel_GesamtPreis_" + String(i))
		if(temp)
		{
			if(!gpr)
				gpr	= 0.0
			gpr	+= temp
		}
		temp	= getFloat("Eingabe", "Artikel_GesamtPreisInclMwst_" + String(i))
		if(temp)
		{
			if(!gpr_mwst)
				gpr_mwst	= 0.0
			gpr_mwst	+= temp
		}
		
	}
		// Mehrwersteuer 19%

		gmwst = gpr * 0.15966


	// Werte setzen
	set("Eingabe", "GesamtPreis", gpr ? NullVorKomma(NachKomma2(PunktNachKomma(gpr))) : "")
	set("Eingabe", "GesamtPreisInclMwst", gpr_mwst ? NullVorKomma(NachKomma2(PunktNachKomma(gpr_mwst))) : "")
	set("Eingabe", "GesamtMwst", gmwst ? NullVorKomma(NachKomma2(PunktNachKomma(gmwst))) : "")

	// Rechnungsfeld fuellen
	ausgabe_rechnung()
}

// Artikelfelder berechnen
function artikel_berechnen(feld, nr)
{
	var	artikel_nr	= ""
	var	name	= ""
	var	nur_nummern	= false
	if(feld)
	{
		var	l	= feld.name.lastIndexOf("_")
		if(l == -1)
			return
		artikel_nr	= feld.name.substring(l + 1)
		name	= feld.name.substring(0, l)
	}
	else
	{
		artikel_nr	= String(nr)
		name	= ""
		nur_nummern	= true
	}

	// Reine Eingabewerte
	var	stueck	= getFloat("Eingabe", "Artikel_Stueck_" + artikel_nr)
	var	preis	= getFloat("Eingabe", "Artikel_Preis_" + artikel_nr)
	var	preis_m	= getFloat("Eingabe", "Artikel_PreisInclMwst_" + artikel_nr)
	
	// Ausgabewerte
	var	mwst		= null
	var	gesamt		= null
	var	gesamt_mwst	= null
	var	gesamt_m	= null

	// Steuerwert
	var	mwst_satz	= getFloat("Eingabe", "Artikel_MwstSatz_" + artikel_nr)	// nur lesen!

	if(mwst_satz)
	{
		// Preis nicht angegeben oder Preis mit Mehrwertsteuer geaendert
		if(((preis == null) &&
			(preis_m != null)) ||
			((preis != null) &&
			(preis_m != null) &&
			(name == "Artikel_PreisInclMwst")))
			preis	= Runden2(preis_m / (1.0 + mwst_satz / 100))

		// Preis mit Mehrwertsteuer nicht angegeben oder Preis geaendert
		preis_m	= Runden2(preis * (1.0 + mwst_satz / 100.0))

		// Mehrwertsteuer
		if(preis != null)
			mwst	= Runden2(preis * (mwst_satz / 100))
	}
	else
	{
		mwst	= null
		preis_m	= null
	}

	// Gesamtpreis
	if((stueck != null) &&
		(preis != null))
		gesamt	= Runden2(stueck * preis)

	// Gesamtpreis mit Mehrwertsteuer
	if((stueck != null) &&
		(preis_m != null))
		gesamt_m	= Runden2(stueck * preis_m)

	// Gesamtmehrwertsteuer
	if((stueck != null) &&
		(mwst != null))
		gesamt_mwst	= Runden2(stueck * mwst)

	// Ausgabe der eingegebenen oder errechneten und korrigierten Werte
	set("Eingabe", "Artikel_Stueck_" + artikel_nr, stueck ? String(stueck) : "")
	set("Eingabe", "Artikel_Preis_" + artikel_nr, preis ? NullVorKomma(NachKomma2(PunktNachKomma(preis))) : "")
	set("Eingabe", "Artikel_PreisInclMwst_" + artikel_nr, preis_m ? NullVorKomma(NachKomma2(PunktNachKomma(preis_m))) : "")
	// Reine Ausgabewerte
	set("Eingabe", "Artikel_Mwst_" + artikel_nr, mwst ? NullVorKomma(PunktNachKomma(mwst)) : "")
	set("Eingabe", "Artikel_GesamtPreis_" + artikel_nr, gesamt ? NullVorKomma(NachKomma2(PunktNachKomma(gesamt))) : "")
	set("Eingabe", "Artikel_GesamtMwst_" + artikel_nr, gesamt_mwst ? NullVorKomma(NachKomma2(PunktNachKomma(gesamt_mwst))) : "")
	set("Eingabe", "Artikel_GesamtPreisInclMwst_" + artikel_nr, gesamt_m ? NullVorKomma(NachKomma2(PunktNachKomma(gesamt_m))) : "")

	// Gesamtsumme berechnen
	if(!nur_nummern)
		gesamt_berechnen()
}

// Adressfelder kopieren und Adresse zusammensetzen
function adresse_geaendert()
{
	// Feldwert von Eingabe nach Ausgabe kopieren
	function copy_field(nm)
	{
		var	src	= ""
		src	= get("Eingabe", nm)
		if(src == null)
			src	= def(eingabe, nm)
		set("Ausgabe", nm, src)
		return	src
	}
	function copy_selfield(nm)
	{
		var	src	= ""
		src	= getselect("Eingabe", nm)
		if(src == null)
			src	= def(eingabe, nm)
		set("Ausgabe", nm, src)
	}


	// Felder kopieren
	var	nm	= copy_field("realname")
	var	st	= copy_field("Strasse")
	var	hn	= copy_field("Hausnummer")
	var	o	= copy_field("Ort")
	var	p	= copy_field("PLZ")
	var	l	= copy_selfield("Land")
	var	e	= copy_field("email")
	var	fo	= copy_field("Telefon")
	

	// Adresse zusammensetzen
	var	adr	= (nm ? (nm + "\n") : "") +
				((st || hn) ? (st + " " + hn + "\n") : "") +
				((p || o) ? (p + " " + o + "\n") : "") +
				(l ? (l + "\n") : "") +
				(e ? ("email " + e + "\n") : "") +
				(fo ? ("Telefon " + fo + "\n") : "") +
				
	set("Ausgabe", "Adresse", adr)
}

// Zahlungsinformation kopieren und Adresse zusammensetzen
function zahlung_geaendert()
{
	// Kopierfunktionen
	function copy_field(nm)
	{
		var	src	= ""
		src	= get("Eingabe", nm)
		if(src == null)
			src	= def(eingabe, nm)
		set("Ausgabe", nm, src)
	}
	function copy_selfield(nm)
	{
		var	src	= ""
		src	= getselect("Eingabe", nm)
		if(src == null)
			src	= def(eingabe, nm)
		set("Ausgabe", nm, src)
	}

	// Felder kopieren
	copy_selfield("Zahlungsart")
	copy_field("BankName")
	copy_field("BankBLZ")
	copy_field("BankKontonummer")
	copy_field("Anmerkungen")
}

// === Prueffunktionen ===

// Pruefen, ob Pflichtfelder gefuellt sind
function pflichtfelder()
{
	// Pflichtfelder ermitteln
	var	pf	= ""
	pf	= get("Parameter", "Pflicht")
	if((pf == null) || (pf == ""))
		pf	= def(parameter, "Pflicht")
	if((pf == null) || (pf == ""))
		return true

	var	apf	= pf.split(",")

	// Pflichtfelder pruefen
	var	i
	var	s	= ""
	var	tmp
	var	cnt	= 0
	for(i = 0; i < apf.length; i++)
	{
		tmp	= get("Eingabe", apf[i])
		if(!tmp)
		{
			s	+= "- " + apf[i] + "\n"
			cnt++
		}
	}
	if(s == "")
		return true

	// Fehlermeldung
	alert("Bitte auf jeden Fall folgende" + ((cnt == 1) ? "s Feld" : " Felder") + " ausf\xFCllen:" + "\n\n" + s + "\n" + "Danke.")

	return false
}

// Pflichtfelder Bankeinzug prüfen

function pflichtfelder1()
{
	// Pflichtfelder ermitteln
	var	pf	= ""
	pf	= get("Parameter", "Pflichta")
	var	bb
	bb	= getselect("Eingabe", "Zahlungsart")
	if((pf == null) || (pf == ""))
		pf	= def(parameter, "Pflichta")
	if((pf == null) || (pf == ""))
		return true

	var	apf	= pf.split(",")

	// Pflichtfelder pruefen
	var	i
	var	s	= ""
	var	tmp
	var	cnt	= 0
	if(bb == "Bankeinzug"){
	for(i = 0; i < apf.length; i++)
	{
		tmp	= get("Eingabe", apf[i])
		if(!tmp)
		{
			s	+= "- " + apf[i] + "\n"
			cnt++
		}
	}
	}
	if(s == "")
		return true
	

	// Fehlermeldung
	alert("Sie habe die Zahlart BANKEINZUG gewählt!\nBitte auf jeden Fall folgende" + ((cnt == 1) ? "s Feld" : " Felder") + " ausf\xFCllen:" + "\n\n" + s + "\n" + "Danke.")

	return false
}

// Pruefung, ob alle Formate korrekt sind
function formatpruefung()
{
	var	i
	for(i = 0; i < eingabe.length; i++)
		if(exist("Eingabe", eingabe[i].name))
			switch(eingabe[i].typ)
			{
				case "email":
					if(!email(document["Eingabe"][eingabe[i].name]))
						return false
					break

				
			}
	return true
}

// === Ereignisfunktionen ===

// Vorabfuellen von Feldern - onLoad
function load()
{
	// Systemfelder fuellen
	function DoubleDigit(nr)
	{
		var	nr	= String(nr)
		nr	= "00" + nr
		return nr.substring(nr.length - 2)
	}

	var	heute	= new Date()
	var	datum	= String(heute.getDate()) + "." + String(heute.getMonth() + 1) + "." + String(heute.getFullYear())
	var	zeit	= String(heute.getHours()) + ":" + DoubleDigit(heute.getMinutes())

	set("Ausgabe", "Datum", datum)
	set("Ausgabe", "Zeit", zeit)
	set("Ausgabe", "Zeitpunkt", datum + " " + zeit)

	// Positionen zaehlen
	positionen_zaehlen()

	// Betreff fuer Email fuellen
	var	w	= get("Parameter", "Betreff")
	if(w == null)
		w	= def(parameter, "Betreff")
	set("Ausgabe", "Betreff", w)

	return true
}

// Pruefung bei Submit - onSubmit
function check()
{
	// Pflichtfelder pruefen
	if(!pflichtfelder())
		return false

	// Pflichtfelder pruefen
	if(!pflichtfelder1())
		return false

	// Formate pruefen
	if(!formatpruefung())
		return false

	// Positionen zaehlen
	positionen_zaehlen()
	
	// Rechnung erstellen
	var	i
	for(i = 0; i < anzahl_positionen; i++)
		artikel_berechnen(null, i)
	gesamt_berechnen()

	// Adresse formatieren
	adresse_geaendert()

	// Zahlungsmethode formatieren
	zahlung_geaendert()

	return true
}

// === EOF ===

