var VERSION = "V1.00"

var isScriptLoaded = false;		// true, if script is completely loaded
var MAX;						// maximum numbers of orders
var MAXITEM;					// maximum numbers of items per order
var orderList;					// list of orders
var orderNum;					// actual number of orders
var userData;					// user data
var recAction;					// receiver (email or cgi) -> protocol (mailto/http) neccessary!!

// configurable images
var image_delete	= "<IMG SRC=\"./images/delete3.gif\" BORDER=\"0\">";								// x image			(delete)
var image_incr		= "<IMG SRC=\"./images/plus.gif\"    BORDER=\"0\">";		// + image			(increment)
var image_decr		= "<IMG SRC=\"./images/minus.gif\"   BORDER=\"0\">";		// - image			(delete)
var image_upd		= "ok";			// update image		(update)

// input form modes
var addVariable		= false;		// in-/decrement productNum in textbox
var addDouble		= false;		// in-/decrement productNum as double

// payment modes
var NACHNAHME		= 1;				// payment definition
var strNACHNAHME	= "Nachnahme";
var feeNACHNAHME	= 0;
var VORAUSKASSE		= 2;				// payment definition
var strVORAUSKASSE	= "Vorauskasse";
var feeVORAUSKASSE	= 0;
var BANKEINZUG		= 4;				// payment definition
var strBANKEINZUG	= "Bankeinzug";
var feeBANKEINZUG	= 0;
var KREDITKARTE		= 8;				// payment definition
var strKREDITKARTE	= "Kreditkarte";
var feeKREDITKARTE	= 0;

var ALLPAYMENT = (NACHNAHME | VORAUSKASSE | BANKEINZUG);
var payment = ALLPAYMENT;			// default payment

// MwSt
var mwst;

// JavaScriptxxx
var JavaVersion;

// resource strings		(static)
// ================
var strKategorie	= "Kategorie";
var strHersteller	= "Hersteller";
var strArtikel		= "Artikel";
var strArtBeschr	= "Artikelbeschreibung";
var strPreis		= "Preis";
var strArtikelTotal	= "Gesamt";
var strOrderTotal	= "Bestellsumme";
var strOrderCost	= "zzgl. Versandkosten";
var strTotal		= "Gesamtsumme";

var strCheckFailure = "Es fehlt die Eingabe des Feldes";

var strVorname		= "Vorname";
var strName			= "Name";
var strStrasse		= "Straße";
var strPLZ			= "PLZ";
var strOrt			= "Stadt";
var strLand			= "Land";
var strTelefon		= "Telefon";
var strFax			= "Fax";
var strEmail		= "E-Mail";

var strPayment			= "Zahlungsart";
var strBankname			= "Name der Bank";
var strKtnr				= "Kontonummer";
var strBlz				= "Blz";
var strPlus				= "zzgl.";
var strKreditinstitut	= "Kreditinstitut";
var strKreditnr			= "Kartennummer";
var strKreditdatum		= "Gültig bis";
var Kreditdb			= new Array("Visa", "Eurocard", "Master", "American Express", "Diners Club");

var strMaxOrder1	= "Die maximale Gesamtbestellmenge von";
var strMaxOrder2	= "Produkten ist erreicht.";
var strMaxItem1		= "Die maximale Bestellmenge dieses Produktes von";
var strMaxItem2		= "ist erreicht.";

var strCountIncr	= "Anzahl erhöhen";
var strCountDecr	= "Anzahl verringern";
var strCountUpd		= "Anzahl aktualisieren";
var strCountDel		= "Produkt entfernen";

var strVersionWarning = "Sie benötigen eine aktuellere Version Ihres Browsers, um das Shopping System zu nutzen!";

var strMwst		= "MwSt.";
var strMwstInkl	= "inklusive";
var strMwstExkl	= "zzgl.";

// resource strings		(dynamic)
// ================
var slocation;
var strMaxOrder;
var strMaxItem;
var strCurrency;
var strNoOrder			= "<FONT face=\"Arial\"><CENTER>Es liegt derzeit keine Bestellung vor</CENTER><BR></FONT>";
var strOrderNum			= "Anzahl";
var strOrderOptional	= "";
var strSearchNoResult	= "<br><br><span class=\"text\">Es wurden keine Treffer zu den angegebenen Suchbegriffen gefunden.</span>";
var strMailSubject		= "Bestellung aus dem ComTec-Shop";

var strMinOrderCharge	= "Mindermengenzuschlag";
var valMinOrderSum		= 50;			// order sum for extra charge
var valMinOrderCharge	= 5;			// extra charge for order under valMinOrderSum

//*******************************************************************************************

// check browser version mimimum
function check_browser(netscape_version, ie_version) {
	var name = navigator.appName;
	var version = parseInt("" + navigator.appVersion.substring(0,1));

	//alert("*" + name + "#" + version + "*");
	if (((name.indexOf("Netscape")  > -1) && (version >= netscape_version)) || 
		((name.indexOf("Microsoft") > -1) && (version >= ie_version)))
		return(true);
	else
		return(false);
}

// init function
function start( source_location, action,
				max_products, max_items_per_product,
				currency, mwst_exkl_inkl) {
	// check client version
	if(!check_browser(3, 2))
		alert(strVersionWarning);

	// set location of this source
	slocation = source_location;
	if(slocation.length > 0 && slocation.charAt(slocation.length - 1) != ".")
		slocation += ".";

	// set globals from args
	MAX = max_products;
	strMaxOrder = strMaxOrder1 + " " + MAX + " " + strMaxOrder2;
	MAXITEM = max_items_per_product;
	strMaxItem = strMaxItem1 + " " + MAXITEM + " " + strMaxItem2; 
	strCurrency = currency;
	recAction = action;
	mwst = mwst_exkl_inkl;
	if(mwst > 0)
		strMwstExkl += " " + mwst + "% "  + strMwst;			// exklusive (positive MwSt.)
	else if(mwst < 0)
		strMwstInkl += " " + Math.abs(mwst) + "% " + strMwst;	// inklusive (negative MwSt.)
	else
		strMwstExkl = strMwstInkl = "";

	// init new user
	userData = new getUser();

	// init new orderList 
	restart();

//	return(copyright(0));
}

// restart function (empty orderList)
function restart() {
	initGlobals();
}

// test function for debugging internals
function test() {
	var s = "";

	for(var i = 1; i <= orderNum; i++) {
		s += orderList[i].Anzahl + " x " + orderList[i].Artikel + "\n";
	}
	alert("DataBase Input:\n" + s);
}

// create a list of 'num' elements
function getList(num) {
	this.length = num;
	for(var i = 1; i <= num; i++) {
		this[i] = 0;
	}
	return(this);
}

// create a user
function getUser() {
	this.vorname		= "";
	this.name			= "";
	this.strasse		= "";
	this.plz			= "";
	this.ort			= "";
	this.land			= "";
	this.tel			= "";
	this.fax			= "";
	this.email			= "";

	this.payment		= "";
	this.bankname		= "";
	this.ktnr			= "";
	this.blz			= "";
 
	this.kreditcompany	= "";
	this.kreditnr		= "";
	this.validation		= "";
  
	this.fee			= 0;
 
	return(this);
}

// Initialisieren aller globalen Variablen
function initGlobals() {
	orderList = new getList(MAX);
	orderNum = 0;
}

// lookup in orderList and return index
function lookUp(Artikel) {
	for(var i = 1; i <= orderNum; i++)
		if(orderList[i].Artikel == Artikel)
			return(i);

	return(0);
}

// create new order element
function orderElem(Anzahl, Artikel, ArtBeschr, Hersteller, Preis, optstr) {
	this.Anzahl		= Anzahl;
	this.Artikel	= Artikel;
	this.ArtBeschr	= ArtBeschr;
	this.Hersteller	= Hersteller;
	this.Preis		= Preis;
	this.optstr		= optstr;
}

// change a comma through dot
function comma2dot(str) {
	var i;
	var tmp = str;
	var len = str.length;

	i = -1;
	while((i = str.indexOf(",", i + 1)) >= 0) {
		tmp = tmp.substring(0, i) + "." + tmp.substring(i + 1, str.length);
	}
	str = tmp;
	i = -1;
	while((i = str.indexOf(".", i+1)) >= 0) {
		if(len - (i + 1) <= 2) {
			break;
		}
		tmp = tmp.substring(0, i) + tmp.substring(i + 1, str.length);	
	}
	return(tmp);
}

// add a new order in orderList
function addOrderElem(AnzahlStr, Artikel, ArtBeschr, Hersteller, PreisStr, optStr) {
	var i = lookUp(Artikel);
	var Preis;
	var Anzahl;
	var tmp;

	// get Preis
	Preis = parseFloat(comma2dot(PreisStr));

	// get Anzahl 
	Anzahl = 0 + (addDouble ? parseFloat(comma2dot(AnzahlStr)) : parseInt(AnzahlStr));

	// determine max
	if(Anzahl > MAXITEM) {
		// max items reached
		alert(strMaxItem);
		return false;
	} else if((i <= 0) && (orderNum >= MAX) && (Anzahl > 0)) {
		// max orders reached
		alert(strMaxOrder);
		return false;
	}

	// control optStr
	if(addOrderElem.arguments.length < 6)
		optStr = "";

	// insert/update/delete order
	if(Anzahl <= 0) {
		if(i > 0) 
			// delete
			deleteOrderElem(i);
	}
	else {
		if(i > 0)
			// update
			orderList[i].Anzahl = Anzahl;
		else
			// insert
			orderList[++orderNum] = new orderElem(Anzahl, Artikel, ArtBeschr, Hersteller, Preis, optStr);
	}
	return true;
}


// increment number of orders for orderListElem 'i'
function incrOrderElem(i) {
	if(i <= orderNum && i > 0) {
		if(orderList[i].Anzahl < MAXITEM) 
			orderList[i].Anzahl++;
		else
			alert(strMaxItem);
	}
}

// decrement number of orders for orderListElem 'i'.
// if neccessary delete orderListElem 'i' and rearrange
// orderList.
function decrOrderElem(i) {
	if(i <= orderNum && i > 0) {
		orderList[i].Anzahl--;
		if(orderList[i].Anzahl <= 0)
			deleteOrderElem(i);
	}
}

// delete orderListElem 'i'
function deleteOrderElem(i){
	if(i <= orderNum && i > 0) {
		for(var j = i; j < orderNum; j++)
			orderList[j] = orderList[j + 1];
		orderNum--;
	}
}

// convert float to string
function f2s(f) {
	var num = "" + Math.round(f * 100);
	var s;

	if(num.length == 0)
		s = "0,00";
	else if(num.length == 1)
		s = "0,0" + num;
	else if(num.length == 2)
		s = "0," + num;
	else {
		if(num.length > 5)
			s = num.substring(0, num.length - 5) + "." + num.substring(num.length - 5, num.length - 2) + ",";
		else
			s = num.substring(0, num.length - 2) + "," ;
		s += num.substring(num.length - 2, num.length);
	}
	return(s);
}

// retrieve file from local (\) or remote (/) URL target
function getFile(url) {
	var delim = (url.indexOf("\\") > -1 ? "\\" : "/");

	return(url.substring(url.lastIndexOf(delim) + 1, url.length));
}

// function to reload target window
function reload(target) {
	if(navigator.appName.indexOf("Netscape") > -1)
		target.location.reload(true);
	else
		// target.location = target.location.href does not work (cache!!!)
		target.location = getFile(target.location.href);
}

// check if there is a orderList
function isOrder() {
	return(orderNum > 0);
}

// print Navigationsliste
function printnav(target, dbKategorie) {
	s = "";
	for(var i = 0; i < dbKategorie.length; i++){
		s += "<a HREF=\"JavaScript:parent.nav.navsuchen('" + dbKategorie[i] + "');\" TARGET='text'>" + dbKategorie[i] + "</A><BR>";
	}
	target.document.write(s);
}


// print complete orderList
function printOrder(target, borderwidth, asform) {
	var sum;
	var total = 0;
	var tax = 0;
	var colspan;

	if(!isOrder()) {
		target.document.write(strNoOrder);
		return;
	}
	var s = "<FORM NAME=\"orderform\">";
	s += "<TABLE BORDER=" + borderwidth + " WIDTH=\"100%\">";
	s += "<TR>";
	if(asform) {
		colspan  = 6;
		th_class = " class=\"th_normal\"";
		td_class = " class=\"td_normal\"";
		s += "<TH " + th_class + ">&nbsp;</TH>\n";
	}
	else {
		colspan  = 5;
		th_class = "";
		td_class = "";
	}
	if(strOrderOptional > "")
		colspan++;

	s += "<TH ALIGN=\"LEFT\" " + th_class + ">" + strOrderNum   + "</TH>\n";
	s += "<TH ALIGN=\"LEFT\" " + th_class + ">" + strHersteller + "</TH>\n";
	s += "<TH ALIGN=\"LEFT\" " + th_class + ">" + strArtikel    + "</TH>\n";
	s += "<TH ALIGN=\"LEFT\" " + th_class + ">" + strArtBeschr  + "</TH>\n";
	if(strOrderOptional > "")
		s += "<TH ALIGN=\"CENTER\" " + th_class + ">" + strOrderOptional  + "</TH>\n";
	s += "<TH ALIGN=\"RIGHT\" NOWRAP " + th_class + ">" + strPreis        + "</TH>\n";
	s += "<TH ALIGN=\"RIGHT\" NOWRAP " + th_class + ">" + strArtikelTotal + "</TH>\n";
	if(asform)
		s += "<TH " + th_class + ">&nbsp;</TH>\n";
	
	s += "</TR>\n";
	target.document.write(s);
 
	for(var i = 1; i <= orderNum; i++) {
		sum = orderList[i].Anzahl * orderList[i].Preis;
		total += sum;
		s = "<TR>\n";
		if(asform) {
			if(addVariable) {
				s += "<TD ALIGN=\"CENTER\" " + td_class + ">";
				s += "<A HREF=\"javascript:" + slocation;
				s += "addOrderElem(" + "self.document.orderform.count" + i + ".value" + ",";
				s += "'" + orderList[i].Artikel + "',";
				s += "'" + orderList[i].Hersteller + "',";
				s += "'" + f2s(orderList[i].Preis) + "');";
				s += slocation + "reload(self);\">" + image_upd + "</A>";
				s += "</TD>\n";
			}
			else {
				s += "<TD ALIGN=\"RIGHT\" " + td_class + ">";
				s += "<A HREF=\"javascript:" + slocation + "incrOrderElem(" + i + ");" + slocation + "reload(self);\">" + image_incr + "</A>";
				s += "&nbsp;";
				s += "<A HREF=\"javascript:" + slocation + "decrOrderElem(" + i + ");" + slocation + "reload(self);\">" + image_decr + "</A>";
				s += "</TD>\n";
			}
		}
		s += "<TD ALIGN=\"CENTER\" " + td_class + ">";
		if(addVariable && asform) {
			s += "<INPUT TYPE=\"TEXT\" NAME=\"count\"" + i + " MAXLENGTH=\"5\" SIZE=\"5\" VALUE=";
			s += "\"" + (addDouble ? f2s(orderList[i].Anzahl) : orderList[i].Anzahl) + "\"";
			s += ">";
		}
		else {
			s += (addDouble ? f2s(orderList[i].Anzahl) : orderList[i].Anzahl);
		}
		s += "</TD>\n";
		s += "<TD ALIGN=\"LEFT\" " + td_class + ">" + orderList[i].Hersteller + "</TD>\n";
		s += "<TD ALIGN=\"LEFT\" " + td_class + ">" + orderList[i].Artikel    + "</TD>\n";
		s += "<TD ALIGN=\"LEFT\" " + td_class + ">" + orderList[i].ArtBeschr  + "</TD>\n";
		if(strOrderOptional > "")
			s += "<TD ALIGN=\"LEFT\" " + td_class + ">" + orderList[i].optstr + "</TD>\n";
		s += "<TD ALIGN=\"RIGHT\" NOWRAP " + td_class + ">" + f2s(orderList[i].Preis) + " " + strCurrency + "</TD>\n";
		s += "<TD ALIGN=\"RIGHT\" NOWRAP " + td_class + ">" + f2s(sum) + " " + strCurrency + "</TD>\n";
		if(asform) {
			s += "<TD ALIGN=\"CENTER\" " + td_class + ">";
			s += "<A HREF=\"javascript:" + slocation + "deleteOrderElem(" + i + ");" + slocation + "reload(self);\">" + image_delete + "</A>";
			s += "</TD>\n";
		}
		s += "</TR>\n";
		target.document.write(s);
	}
	//Bestellsumme wird ausgeklammert
	s = "";
	//s = "<TR>";
	//s += "<TD></TD><TD COLSPAN=" + colspan + "><HR></TD></TR><TR>";
	//s += "<TD COLSPAN=" + colspan + " ALIGN=RIGHT><B>" + strOrderTotal + "</B></TD>";
	//s += "<TD ALIGN=RIGHT NOWRAP><B>" + f2s(total) + " " + strCurrency + "</B></TD>";
	//s += "</TR>";

	// extra charge for minimal order
	if (valMinOrderSum > 0 && valMinOrderCharge > 0 && total < valMinOrderSum){
		s += "<TR>\n";
		s += "<TD COLSPAN=" + colspan + " ALIGN=\"RIGHT\" VALIGN=\"TOP\"><FONT face=\"Arial\"><B>" + strMinOrderCharge + "</B></FONT></TD>\n";
		s += "<TD ALIGN=\"RIGHT\" NOWRAP><FONT face=\"Arial\"><B>" + f2s(valMinOrderCharge) + " " + strCurrency + "</B></FONT></TD>\n";
		s += "</TR>\n";
		total += valMinOrderCharge;
	}

	if(!asform && payment && (userData.fee > 0)) {
 		s += "<TR>\n";
	 	s += "<TD COLSPAN=" + colspan + " ALIGN=\"RIGHT\"><FONT face=\"Arial\">" + strOrderCost + " (" + userData.payment + ")</FONT></TD>\n";
	 	s += "<TD ALIGN=\"RIGHT\" NOWRAP><FONT face=\"Arial\">" + f2s(userData.fee) + " " + strCurrency + "</FONT></TD>\n";
	 	s += "</TR>\n";

		total += userData.fee;
	}

	if(mwst > 0) {
		// (+) MwSt from OrderTotal + OrderCost!!!
		tax = mwst * total / 100;
		s += "<TR>\n";
		s += "<TD COLSPAN=" + colspan + " ALIGN=\"RIGHT\"><FONT face=\"Arial\"><B>" + strMwstExkl + "</B></FONT></TD>\n";
		s += "<TD ALIGN=\"RIGHT\" NOWRAP><FONT face=\"Arial\"><B>" + f2s(tax) + " " + strCurrency + "</B></FONT></TD>\n";
		s += "</TR>\n";

		total += tax;
	}

	s += "<TR>\n";
	s += "<TD></TD>\n<TD COLSPAN=" + colspan + "><HR></TD>\n</TR>\n<TR>\n";
	s += "<TD COLSPAN=" + colspan + " ALIGN=\"RIGHT\"><FONT face=\"Arial\">\n<B>" + strTotal + "</B></FONT></TD>\n";
	s += "<TD ALIGN=\"RIGHT\" NOWRAP><FONT face=\"Arial\">\n<B><U>" + f2s(total) + " " + strCurrency + "</U></B></FONT></TD>\n";
	s += "</TR>\n";

	if(mwst < 0) {
		// (-) MwSt from Total !!!
		tax = total - (total / (1 - (mwst / 100)));
		s += "<TR>\n";
		s += "<TD COLSPAN=" + colspan + " ALIGN=\"RIGHT\"><FONT face=\"Arial\">\n<B>" + strMwstInkl + "</B></FONT></TD>\n";
		s += "<TD ALIGN=\"RIGHT\"><FONT face=\"Arial\">\n<B>" + f2s(tax) + " " + strCurrency + "</B></FONT></TD>\n";
		s += "</TR>";
	}

	s += "</TABLE>\n";
	s += "</FORM>\n";
	target.document.write(s);
}

// print text or label
function printInput(variable, len, value, valuename, astext) {
	if(astext)
		return("<INPUT TYPE=TEXT NAME=" + variable + " MAXLENGTH=" + len + " SIZE=" + len + " VALUE=\"" + value + "\" onChange=\"" + slocation + valuename + "=this.value;\">\n");
	else
		return(value);
}


// print user data form
function printUserData(target, borderwidth, asform) {

	//Konfigurationsbereich für die Formularverarbeitung per E-Mail
	var strF2M_SENDER	= "verkauf@comtec-wittelsbach.de"								//Absenderadresse hier festlegen
	var strF2M_RCPT		= "verkauf@comtec-wittelsbach.de"								//Empfängeradresse hier festlegen
	var strF2M_SUBJECT	= "Bestellung"													//Betreff für E-Mail hier festlegen
	var strF2M_NEXT		= ""															//Antwortseite hier festlegen
	var strAction		= "mailto:verkauf@comtec-wittelsbach.de"						//Aktion des Formulars hier festlegen


	//Ab hier am Quellcode nichts mehr ändern
	var s = "<FORM NAME=\"userform\" method=\"post\" action=\"" + strAction + "\">\n";
 

	//Versteckte Felder für die Steuerung der Formularverarbeitung
	s += "<INPUT TYPE=\"HIDDEN\" NAME=\"F2M_SENDER\" VALUE=\""	+ strF2M_SENDER		+ "\">\n";
	s += "<INPUT TYPE=\"HIDDEN\" NAME=\"F2M_RCPT\"   VALUE=\""	+ strF2M_RCPT		+ "\">\n";
	s += "<INPUT TYPE=\"HIDDEN\" NAME=\"SUBJECT\"    VALUE=\""	+ strF2M_SUBJECT	+ "\">\n";
	s += "<INPUT TYPE=\"HIDDEN\" NAME=\"F2M_NEXT\"   VALUE=\""	+ strF2M_NEXT		+ "\">\n";


	//In dieses versteckte Feld werden die Bestelldaten über die Funktion printOrderDataCSV() eingefügt
//	s += "<INPUT TYPE=\"HIDDEN\" NAME=\"Bestelldaten\" VALUE=\"" + printOrderDataCSV() + "\">\n";
	s += "<INPUT TYPE=\"HIDDEN\" NAME=\"Body\" VALUE=\"" + printOrderDataCSV() + "\">\n";
	s += "<TABLE BORDER=\"" + borderwidth + "\">\n";

	var blanks = "";
	var i;

	for(i = 0; i < 5; i++)
		blanks += "&#160;";

	s += "<TR><TD ALIGN=\"LEFT\"><B>"			+ strVorname + ":" + blanks + "</B></TD>";
	s += "<TD COLSPAN=\"3\" ALIGN=\"LEFT\">"	+ printInput("vorname", 50, userData.vorname, "userData.vorname", asform) + "</TD></TR>";

	s += "<TR><TD ALIGN=\"LEFT\"><B>"			+ strName + ":</B></TD>";
	s += "<TD COLSPAN=\"3\" ALIGN=\"LEFT\">"	+ printInput("name",    50, userData.name,    "userData.name",    asform) + "</TD></TR>";

	s += "<TR><TD ALIGN=\"LEFT\"><B>"			+ strStrasse + ":</B></TD>";
	s += "<TD COLSPAN=\"3\" ALIGN=\"LEFT\">"	+ printInput("strasse", 50, userData.strasse, "userData.strasse", asform) + "</TD></TR>";

	s += "<TR><TD ALIGN=\"LEFT\"><B>"			+ strPLZ + ":</B></TD>";
	s += "<TD ALIGN=\"LEFT\">"					+ printInput("plz",     10, userData.plz,     "userData.plz",     asform) + blanks + "</TD>";

	s += "<TD ALIGN=\"LEFT\"><B>"				+ strOrt + ":</B></TD>";
	s += "<TD ALIGN=\"LEFT\">"					+ printInput("ort",     15, userData.ort,     "userData.ort",     asform) + "</TD></TR>";

	s += "<TR><TD ALIGN=\"LEFT\"><B>"			+ strLand + ":</B></TD>";
	s += "<TD COLSPAN=\"3\" ALIGN=\"LEFT\">"	+ printInput("land",    50, userData.land,    "userData.land",    asform) + "</TD></TR>";

	s += "<TR><TD ALIGN=\"LEFT\"><B>"			+ strTelefon + ":</B></TD>";
	s += "<TD ALIGN=\"LEFT\">"					+ printInput("tel",     15, userData.tel,     "userData.tel",     asform) + blanks + "</TD>";

	s += "<TD ALIGN=\"LEFT\"><B>"				+ strFax + ":</B></TD>";
	s += "<TD ALIGN=\"LEFT\">"					+ printInput("fax",     15, userData.fax,     "userData.fax",     asform) + "</TD></TR>";

	s += "<TR><TD ALIGN=\"LEFT\"><B>"			+ strEmail + ":</B></TD>";
	s += "<TD COLSPAN=\"3\" ALIGN=\"LEFT\">"	+ printInput("email",   50, userData.email,   "userData.email",   asform) + "</TD></TR>";

	// kind of payment user wants to buy
	if(payment)
		s += "<TR><TD COLSPAN=\"4\" ALIGN=\"LEFT\"><B>" + strPayment + ":</B></TD></TR>";
	if((payment & NACHNAHME) && (asform || (userData.payment == strNACHNAHME))) {
		if(userData.payment == "") {
			userData.payment = strNACHNAHME;
			userData.fee     = feeNACHNAHME;
		}
		s += "<TR><TD></TD><TD COLSPAN=\"3\" ALIGN=\"LEFT\">"
		if(asform) {
			s += "<INPUT TYPE=\"RADIO\" NAME=\"payment\" VALUE=\"" + strNACHNAHME + "\" onClick=\"" + slocation + "userData.payment=this.value;" + slocation + "userData.fee=" + slocation + "feeNACHNAHME;\"";	
			if(userData.payment == strNACHNAHME)
				s += " CHECKED";
			s += ">";	
		}
		s += strNACHNAHME;
		if (feeNACHNAHME != 0)
			s += " (" + strPlus + " " + f2s(feeNACHNAHME) + " " + strCurrency + ")";
		s += "</TD></TR>\n";
	}
	if((payment & VORAUSKASSE) && (asform || (userData.payment == strVORAUSKASSE))) {
		if(userData.payment == "") {
			userData.payment = strVORAUSKASSE;
			userData.fee = feeVORAUSKASSE;
		}
		s += "<TR><TD></TD><TD COLSPAN=\"3\" ALIGN=\"LEFT\">"
		if(asform) {
			s += "<INPUT TYPE=\"RADIO\" NAME=\"payment\" VALUE=\"" + strVORAUSKASSE + "\" onClick=\"" + slocation + "userData.payment=this.value;" + slocation + "userData.fee=" + slocation + "feeVORAUSKASSE;\"";	
			if(userData.payment == strVORAUSKASSE)
				s += " CHECKED";
			s += ">";	
		}
		s += strVORAUSKASSE;
		if (feeVORAUSKASSE != 0)
			s += " (" + strPlus + " " + f2s(feeVORAUSKASSE) + " " + strCurrency + ")";
		s += "</TD></TR>\n";
	}
	if((payment & BANKEINZUG) && (asform || (userData.payment == strBANKEINZUG)))  {
		if(userData.payment == "") {
			userData.payment = strBANKEINZUG;
			userData.fee = feeBANKEINZUG;
		}
		s += "<TR><TD></TD><TD COLSPAN=\"3\" ALIGN=\"LEFT\">"
		if(asform) {
			s += "<INPUT TYPE=\"RADIO\" NAME=\"payment\" VALUE=\"" + strBANKEINZUG + "\" onClick=\"" + slocation + "userData.payment=this.value;" + slocation + "userData.fee=" + slocation + "feeBANKEINZUG;\"";
			if(userData.payment == strBANKEINZUG)
				s += " CHECKED";
			s += ">";	
		}
		s += strBANKEINZUG;
		if (feeBANKEINZUG != 0)
			s += " (" + strPlus + " " + f2s(feeBANKEINZUG) + " " + strCurrency + ")";
		s += "</TD></TR>\n";
		s += "<TR><TD></TD><TD ALIGN=\"LEFT\"><B>&#160;&#160;" + strBankname + ":</B></TD>";
 		s += "<TD COLSPAN=\"2\" ALIGN=\"LEFT\">" + printInput("bank", 40, userData.bankname, "userData.bankname", asform) + "</TD></TR>";
		s += "<TR><TD></TD><TD ALIGN=\"LEFT\"><B>&#160;&#160;" + strKtnr + ":</B></TD>";
 		s += "<TD COLSPAN=\"2\" ALIGN=\"LEFT\">" + printInput("ktnr", 40, userData.ktnr, "userData.ktnr", asform) + "</TD></TR>";
		s += "<TR><TD></TD><TD ALIGN=\"LEFT\"><B>&#160;&#160;" + strBlz + ":</B></TD>";
 		s += "<TD COLSPAN=\"2\" ALIGN=\"LEFT\">" + printInput("blz", 40, userData.blz, "userData.blz", asform) + "</TD></TR>";
	}
	if((payment & KREDITKARTE) && (asform || (userData.payment == strKREDITKARTE)))  {
		if(userData.payment == "") {
			userData.payment = strKREDITKARTE;
			userData.fee = feeKREDITKARTE;
		}
		s += "<TR><TD></TD><TD COLSPAN=\"3\" ALIGN=\"LEFT\">"
		if(asform) {
			s += "<INPUT TYPE=\"RADIO\" NAME=\"payment\" VALUE=\"" + strKREDITKARTE + "\" onClick=\"" + slocation + "userData.payment=this.value;" + slocation + "userData.fee=" + slocation + "feeKREDITKARTE;\"";
			if(userData.payment == strKREDITKARTE)
				s += " CHECKED";
			s += ">";	
		}
		s += strKREDITKARTE;
		if (feeKREDITKARTE != 0)
			s += " (" + strPlus + " " + f2s(feeKREDITKARTE) + " " + strCurrency + ")";
		s += "</TD></TR>\n";
		s += "<TR><TD></TD><TD ALIGN=\"LEFT\"><B>&#160;&#160;" + strKreditinstitut + ":</B></TD>";
	 	s += "<TD COLSPAN=\"2\" ALIGN=\"LEFT\">";
		if(userData.kreditcompany == "")
			userData.kreditcompany = Kreditdb[0];
		if(asform) {
			s += "<SELECT name=\"kreditcompany\" size=\"1\" onBlur=\"" + slocation + "userData.kreditcompany=this.options[this.selectedIndex].value\">";
			for(i = 0; i < Kreditdb.length; i++) {
				s += "<OPTION VALUE=\"" + Kreditdb[i] + "\"";
				if(userData.kreditcompany == Kreditdb[i])
					s += " SELECTED";
				s += ">" + Kreditdb[i];
			}
			s += "</SELECT>";
		}
		else {
			s += userData.kreditcompany;
		}
		s += "</TD></TR>";
		s += "<TR><TD></TD><TD ALIGN=\"LEFT\"><B>&#160;&#160;" + strKreditnr + ":</B></TD>";
 		s += "<TD COLSPAN=\"2\" ALIGN=\"LEFT\">" + printInput("kreditnr", 40, userData.kreditnr, "userData.kreditnr", asform) + "</TD></TR>";
		s += "<TR><TD></TD><TD ALIGN=\"LEFT\"><B>&#160;&#160;" + strKreditdatum + ":</B></TD>";
	 	s += "<TD COLSPAN=\"2\" ALIGN=\"LEFT\">" + printInput("kreditvalidation", 40, userData.validation, "userData.validation", asform) + "</TD></TR>";
	}

	s += "</TABLE>";
	s += "</FORM>";
	target.document.write(s);
}

// ckeck a user data
function check(field, str, elem) {
	if(str == "") {
		alert(strCheckFailure + " >" + field + "<");
		elem.focus();
		return(false);
	}
	return(true);
}

// check completeness of user data
function checkUserData(target) {
	var ret;

	if((ret = check(strName,    userData.name,    target.document.userform.name))    == false)
		return(ret);
	if((ret = check(strstrasse, userData.strasse, target.document.userform.strasse)) == false)
		return(ret);
	if((ret = check(strplz,     userData.plz,     target.document.userform.plz))     == false)
		return(ret);
	if((ret = check(strort,     userData.ort,     target.document.userform.ort))     == false)
		return(ret);
	if((ret = check(strland,    userData.land,    target.document.userform.land))    == false)
		return(ret);

	if(userData.payment == strBANKEINZUG) {
 		if((ret = check(strBankname, userData.bankname, target.document.userform.bank)) == false)
			return(ret);
	 	if((ret = check(strKtnr,     userData.ktnr,     target.document.userform.ktnr)) == false)
			return(ret);
	 	if((ret = check(strBlz,      userData.blz,      target.document.userform.blz))  == false)
			return(ret);
	}

	if(userData.payment == strKREDITKARTE) {
 		if((ret = check(strKreditnr,    userData.kreditnr,   target.document.userform.kreditnr))         == false)
			return(ret);
	 	if((ret = check(strKreditdatum, userData.validation, target.document.userform.kreditvalidation)) == false)
			return(ret);
	}

	return(true);
}

function do_submit(target, redirect, infotext) {
	// submit order
	if(infotext.length > 0)
		alert(infotext);
 
	target.document.mailform.submit();

	setTimeout("parent." + target.name + ".location='" + redirect + "'", 10000);

	// initialize order
	restart();

	return(true);
}


// print email form or redirect to a faxable side
function printSendButton(target, caption, redirect_fax, redirect, infotext) {
	var mailMode = (recAction.indexOf("@") > -1); // mailto: || http:// (true/false)

	if(!isOrder())
		return;

	if(mailMode) {		// check browser only in mailmode
    	if(!check_browser(0, 4)) {
		// ie does not support correctly mailto protocol, netscape does it
		target.location = redirect_fax;
		return;
    	}
	}

	var s = "<FORM NAME=\"mailform\" METHOD=\"POST\" ACTION=\"" + recAction;
	if(mailMode)
		s += "?subject=" + strMailSubject + "\" enctype=\"text/plain";
	s += "\">";
	s += "<INPUT TYPE=\"HIDDEN\" NAME=$$SHOPSTART VALUE=\"$$\">";
	s += "<INPUT TYPE=\"HIDDEN\" NAME=$$Vorname   VALUE=\"" + userData.vorname + "\">";
	s += "<INPUT TYPE=\"HIDDEN\" NAME=$$Name      VALUE=\"" + userData.name    + "\">";
	s += "<INPUT TYPE=\"HIDDEN\" NAME=$$Strasse   VALUE=\"" + userData.strasse + "\">";
	s += "<INPUT TYPE=\"HIDDEN\" NAME=$$Plz       VALUE=\"" + userData.plz     + "\">";
	s += "<INPUT TYPE=\"HIDDEN\" NAME=$$Stadt     VALUE=\"" + userData.ort     + "\">";
	s += "<INPUT TYPE=\"HIDDEN\" NAME=$$Land      VALUE=\"" + userData.land    + "\">";
	s += "<INPUT TYPE=\"HIDDEN\" NAME=$$Tel       VALUE=\"" + userData.tel     + "\">";
	s += "<INPUT TYPE=\"HIDDEN\" NAME=$$Fax       VALUE=\"" + userData.fax     + "\">";
	s += "<INPUT TYPE=\"HIDDEN\" NAME=$$Email     VALUE=\"" + userData.email   + "\">";

	for(var i = 1; i <= orderNum; i++) {
		s += "<INPUT TYPE=\"HIDDEN\" NAME=$$P VALUE=\"";
		s += orderList[i].anzahl  + "@";
		s += orderList[i].Hersteller + "@";
		s += orderList[i].optstr  + " " + "@";	// always send something
		s += f2s(orderList[i].preis) + "@";
		s += strCurrency;
		s += "\">";
	}

	if(payment) {
 		s += "<INPUT TYPE=\"HIDDEN\" NAME=$$Zahlungsart   VALUE=\"" + userData.payment  + "\">";
	 	s += "<INPUT TYPE=\"HIDDEN\" NAME=$$Versandkosten VALUE=\"" + f2s(userData.fee) + "\">";
		if(userData.payment == strBANKEINZUG) {
 			s += "<INPUT TYPE=\"HIDDEN\" NAME=$$Bank VALUE=\"" + userData.bankname + "\">";
	 		s += "<INPUT TYPE=\"HIDDEN\" NAME=$$Ktnr VALUE=\"" + userData.ktnr     + "\">";
 			s += "<INPUT TYPE=\"HIDDEN\" NAME=$$Blz  VALUE=\"" + userData.blz      + "\">";
		}
		else if(userData.payment == strKREDITKARTE) {
 			s += "<INPUT TYPE=\"HIDDEN\" NAME=$$Kreditinstitut VALUE=\"" + userData.kreditcompany + "\">";
	 		s += "<INPUT TYPE=\"HIDDEN\" NAME=$$Kreditnr       VALUE=\"" + userData.kreditnr      + "\">";
 			s += "<INPUT TYPE=\"HIDDEN\" NAME=$$Datum          VALUE=\"" + userData.validation    + "\">";
		}
	}

	s += "<INPUT TYPE=\"HIDDEN\" NAME=$$SHOPEND VALUE=\"$$\">";
	s += "<INPUT TYPE=\"SUBMIT\" VALUE=\"" + caption + "\"";
	if(mailMode)
		s += " onClick=\"" + slocation + "do_submit(self, '" + redirect + "','" + infotext + "')\">";
	else 
		s += " onClick=\"" + slocation + "restart()\">";
	s += "</FORM>";
	target.document.write(s);
}

// define some defaults
function define(image_or_str,variable,value) {
	if(value.length <= 0)
		return;

	if(image_or_str == "image") {
		var s = "<IMG SRC=\"" + value + "\" BORDER=0 ALT=\"";
		if(variable == "+")
			image_incr = s + strCountIncr + "\">";
		else if(variable == "-")
			image_decr = s + strCountDecr + "\">";
		else if(variable == "x")
			image_delete = s + strCountDel + "\">";
		else if(variable == "ok")
			image_upd = s + strCountUpd + "\">";
	}
	else if(image_or_str == "string") {
		if(variable == "NO_ORDER")
			strNoOrder = value;
		else if(variable == "MAX_ORDER")
			strMaxOrder = value;
		else if(variable == "MAX_ITEM")
			strMaxItem = value;
		else if(variable == "ORDER_NUM")
			strOrderNum = value;
		else if(variable == "ORDER_OPTIONAL")
			strOrderOptional = value;
		else if(variable == "SEARCH_NORESULT")
			strSearchNoResult = value;
		else if(variable == "MAIL_SUBJECT")
			strMailSubject = value;
		else if(variable == "MIN_ORDER_EXTRA_CHARGE_TEXT")
			strMinOrderCharge = value;
		else if(variable == "MIN_ORDER_EXTRA_CHARGE_SUM")
			valMinOrderSum = parseFloat(comma2dot(value));
		else if(variable == "MIN_ORDER_EXTRA_CHARGE")
			valMinOrderCharge = parseFloat(comma2dot(value));
	}
	else if(image_or_str == "boolean") {
		if(variable == "ORDER_VARIABLE")
			addVariable = (parseInt(value) == 1 ? true : false);
		else if(variable == "ORDER_DOUBLE")
			addDouble = (parseInt(value) == 1 ? true : false);
	}
	else if(image_or_str == "payment") {
		if(payment == ALLPAYMENT)
			// init payment, if everything is already defined
			payment &= 0;
		if(variable == "NACHNAHME") {
			feeNACHNAHME = parseFloat(comma2dot(value));
			payment |= NACHNAHME;
		}
		else if(variable == "VORAUSKASSE") {
			feeVORAUSKASSE = parseFloat(comma2dot(value));
			payment |= VORAUSKASSE;
		}
		else if(variable == "BANK") {
			feeBANKEINZUG = parseFloat(comma2dot(value));
			payment |= BANKEINZUG;
		}
		else if(variable == "KREDIT") {
			feeKREDITKARTE = parseFloat(comma2dot(value));
			payment |= KREDITKARTE;
		}
	}
}

// *****************************************************
// ****************** search engine ********************
// *****************************************************

var pdKategorie;
var pdHersteller;
var pdPreis;
var pdArtikel;
var pdArtBeschr;

// print one hitlist line (mode dependent)
function printHitLine(target, pdKategorie, pdArtikel, pdArtBeschr,  pdHersteller, pdPreis, mode) {
	var s;

	if(mode == 0) {
		s =  "<TABLE width=\"100%\" class=\"table_normal\">\n";
		s += "<TR>\n";
 		s += "<TH width=\"10%\" ALIGN=\"LEFT\"  class=\"th_normal\">"  + strKategorie  + "</TH>\n";
	 	s += "<TH width=\"20%\" ALIGN=\"LEFT\"  class=\"th_normal\">"  + strHersteller + "</TH>\n";
	 	s += "<TH width=\"20%\" ALIGN=\"LEFT\"  class=\"th_normal\">"  + strArtikel    + "</TH>\n";
	 	s += "<TH width=\"40%\" ALIGN=\"LEFT\"  class=\"th_normal\">"  + strArtBeschr  + "</TH>\n";
	 	s += "<TH width=\"10%\" ALIGN=\"RIGHT\" class=\"th_normal\">" + strPreis      + "</TH>\n";
		s += "<TH class=\"th_normal\">&nbsp;</TH>";
		s += "</TR>\n";
	} 
	else if(mode == 1) {
		s =  "<TR>";
		s += "<TD ALIGN=\"LEFT\" class=\"td_normal\">";
		for(i = 0; i <= dbKategorie.length; i++) {
			if(dbKategorie[i] == pdKategorie) {
				pdKategorie_i = i;
				i = dbKategorie.length;			// i-Schleifen Abbruch
			}
		}
		s += "<A HREF=\"JavaScript:top.nav.navsuchen(" + pdKategorie_i + ");\" target='text'>" + pdKategorie + "</A>";
		s += "</TD>";
		s += "<TD ALIGN=\"LEFT\"  class=\"td_normal\">"  + pdHersteller + "</TD>";
		s += "<TD ALIGN=\"LEFT\"  class=\"td_normal\">"  + pdArtikel    + "</TD>";
		s += "<TD ALIGN=\"LEFT\"  class=\"td_normal\">"  + pdArtBeschr  + "</TD>";
		s += "<TD ALIGN=\"RIGHT\" class=\"td_normal\">" + f2s(comma2dot(pdPreis)) + " " + strCurrency + "</TD>";
		s += "<TD ALIGN=\"LEFT\"  class=\"td_normal\">";
	    s += "<A HREF=\"javascript:doit('1','" + pdArtikel + "','" + pdArtBeschr + "','" + pdHersteller + "','" + pdPreis + "')\">";
	    s += "<IMG src=\"./images/korb.gif\" align=\"right\" border=\"0\" width=\"30\" height=\"30\"></A>";
		s += "</TD>";
		s += "</TR>\n";
	} 
	else if(mode == 2) {
		s =  "</TABLE>\n";
	}
	else {
		s = strSearchNoResult;
	}
	target.document.write(s);
}

// bisearch
function bisearch(db, dblen, word) {
	var l = 0;
	var r = dblen - 1;
	var i;

	while(r >= l) {
		i = parseInt((l + r) / 2);
		//alert(i + ":" + l + ":" + r);
		//alert(db[i].toUpperCase().substring(0,word.length));
		if(word < db[i].toUpperCase().substring(0, word.length))
			r = i - 1;
		else if(word > db[i].toUpperCase().substring(0, word.length))
			l = i + 1;
		else {			// word == db[i].substring(0, word.length)
			i--;
			while((i >= 0) && (word == db[i].toUpperCase().substring(0, word.length)))
				i--;
			i++;
			return(i);
		}
	}
	return(-1);
}

// search for products
function suchen(Kategorie, Artikel, ArtBeschr, Hersteller, Preis) {
	pdKategorie   = Kategorie.toUpperCase();
	pdArtikel     = Artikel.toUpperCase();
	pdArtBeschr   = ArtBeschr.toUpperCase();
	pdHersteller  = Hersteller.toUpperCase();
	pdPreis       = comma2dot(Preis);

//	alert(pdKategorie + ":" + pdArtikel + ":" + pdArtBeschr + ":" + pdHersteller + ":" + pdPreis);
}

function setVersion(ver) {
	JavaVersion = ver;
}

function printHitList(target,
					  dbKategorie,
					  dbKategorie_i,
					  dbArtikel,
					  dbArtBeschr,
		       		  dbHersteller,
		       		  dbHersteller_i,
		       		  dbPreis) {
	if(JavaVersion >= "1.2")
		return(printHitList2(target, 
							 dbKategorie,
							 dbKategorie_i,
							 dbArtikel,
							 dbArtBeschr,
		       				 dbHersteller,
		       				 dbHersteller_i,
		       				 dbPreis));
	else
		return(printHitList1(target, 
							 dbKategorie,
							 dbKategorie_i,
							 dbArtikel,
							 dbArtBeschr,
		       				 dbHersteller,
		       				 dbHersteller_i,
		       				 dbPreis));
}

// search for products (old version)
function printHitList1( target,
						dbKategorie,
						dbKategorie_i,
						dbArtikel,
						dbArtBeschr,
		       			dbHersteller,
		       			dbHersteller_i,
		       			dbPreis) {
	var i;
	var num = 0;
	var searchmode;
	var printmode = 0;
	var price = parseFloat(pdPreis) + 0;
	var dbMax = dbKategorie_i.length;

	// check for valid args
	if ((pdKategorie.length  == 0) && 
    	(pdArtikel.length    == 0) &&
	    (pdHersteller.length == 0) &&
    	(pdPreis.length      == 0)) {

		// print all products
		for(i = 0; i < dbMax; i++) {
			// table header
			if(printmode == 0)
				printHitLine(target, "", "", "", "", "", printmode++);
			// table row
			printHitLine(target,
						 dbKategorie[dbKategorie_i[i]],
						 dbArtikel[i],
						 dbArtBeschr[i],
						 dbHersteller[dbHersteller_i[i]],
						 dbPreis[i],
						 printmode);
			num++;
		}
		printHitLine(target, "", "", "", "", "", ++printmode);
		return(num);
	}

	// check for algorithm
	if ((pdKategorie.length >= 3 && pdHersteller.length <= 2) ||
    	(pdKategorie.length >  0 && pdHersteller.length == 0))
		searchmode = 1;		// search for pdKategorie 
	else if(pdHersteller.length > 0)
		searchmode = 2;		// search for pdHersteller
	else if(pdArtikel.length > 0)
		searchmode = 3;		// search for pdArtikel
	else
		searchmode = 4;		// search for price

	// search
	if ((searchmode == 1) && 	// **** search for pdKategorie ***
		((i = bisearch(dbKategorie, dbMax, pdKategorie)) >= 0)) {
		//alert("Search for Name:" + dbKategorie[i]);
		while((i < dbMax) && (dbKategorie[dbKategorie_i[i]].toUpperCase().substring(0, pdKategorie.length) == pdKategorie)) {
			if (((pdArtikel.length    == 0) || (dbArtikel[i].toUpperCase().substring(0, pdArtikel.length) == pdArtikel)) &&
				((pdHersteller.length == 0) || (dbHersteller[dbHersteller_i[i]].toUpperCase().substring(0, pdHersteller.length) == pdHersteller)) &&
		        ((pdPreis.length      == 0) || (dbPreis[i] <= price))) {
				// table header
				if(printmode == 0)
					printHitLine(target, "", "", "", "", "", printmode++);
				// table row
			printHitLine(target,
						 dbKategorie[dbKategorie_i[i]],
						 dbArtikel[i],
						 dbArtBeschr[i],
						 dbHersteller[dbHersteller_i[i]],
						 dbPreis[i],
						 printmode);
				num++;
			}
			i++;
		}
	} else if((searchmode == 2) &&	// *** search for pdHersteller ***
		((i = bisearch(dbHersteller, dbMax, pdHersteller)) >= 0)) {
		//alert("Search for Num:" + dbHersteller[i]);
		while((i < dbMax) && (dbHersteller[dbHersteller_i[i]].toUpperCase().substring(0, pdHersteller.length) == pdHersteller)) {
			if (((pdKategorie.length == 0) || (dbKategorie[dbKategorie_i[i]].toUpperCase().substring(0, pdKategorie.length) == pdKategorie)) &&
				((pdArtikel.length == 0) || (dbArtikel[i].toUpperCase().substring(0, pdArtikel.length) == pdArtikel)) &&
		        ((pdPreis.length == 0) || (dbPreis[i] <= price))) {
				// table header
				if(printmode == 0)
					printHitLine(target, "", "", "", "", "", printmode++);
				// table row
			printHitLine(target,
						 dbKategorie[dbKategorie_i[i]],
						 dbArtikel[i],
						 dbArtBeschr[i],
						 dbHersteller[dbHersteller_i[i]],
						 dbPreis[i],
						 printmode);
				num++;
			}
			i++;
		}
	}
	else if	((searchmode == 3) &&	// *** search for pdArtikel ***
			((i = bisearch(dbArtikel, dbMax,pdArtikel)) >= 0)) {
		//alert("Search for Author:" + dbArtikel[i]);
		while((i < dbMax) && (dbArtikel[i].toUpperCase().substring(0,pdArtikel.length) == pdArtikel)) {
	      	if(((pdKategorie.length   == 0) || (dbKategorie[dbKategorie_i[i]].toUpperCase().substring(0, pdKategorie.length) == pdKategorie)) &&
				((pdHersteller.length == 0) || (dbHersteller[dbHersteller[i]].toUpperCase().substring(0, pdHersteller.length) == pdHersteller)) &&
	            ((pdPreis.length      == 0) || (dbPreis[i] <= price))) {
				// table header
				if(printmode == 0)
					printHitLine(target, "", "", "", "", "", printmode++);
				// table row
			printHitLine(target,
						 dbKategorie[dbKategorie_i[i]],
						 dbArtikel[i],
						 dbArtBeschr[i],
						 dbHersteller[dbHersteller_i[i]],
						 dbPreis[i],
						 printmode);
				num++;
			}
			i++;
		}
	}
	else {			// *** search for price ***
		i = 0;
		while((dbPreis[i] <= price) && (i < dbMax)) {
			// table header
			if(printmode == 0)
				printHitLine(target, "", "", "", "", "", printmode++);
			// table row
			printHitLine(target,
						 dbKategorie[dbKategorie_i[i]],
						 dbArtikel[i],
						 dbArtBeschr[i],
						 dbHersteller[dbHersteller_i[i]],
						 dbPreis[i],
						 printmode);
			num++;
			i++;
		}
	}

	if(num > 0) {
		// table trailer
		printHitLine(target, "", "", "", "", "", ++printmode);
	}
	else {
 		// no result
		printHitLine(target, "", "", "", "", "", -1);
	}

	return(num);
}

// search for products (new version)
function printHitList2( target,
						dbKategorie,
						dbKategorie_i,
						dbArtikel,
						dbArtBeschr,
		       			dbHersteller,
		       			dbHersteller_i,
		       			dbPreis) {
	var i;
	var num = 0;
	var printmode = 0;
	var price = parseFloat(pdPreis) + 0;
	var dbMax = dbKategorie_i.length;

	// check for valid args
	if ((pdKategorie.length   == 0) && 
		(pdArtikel.length     == 0) &&
		(pdHersteller.length  == 0) &&
		(pdPreis.length       == 0)) {

		// print all products
		for(i = 0;i < dbMax; i++) {
			// table header
			if(printmode == 0)
				printHitLine(target, "", "", "", "", "", printmode++);
			// table row
			printHitLine(target,
						 dbKategorie[dbKategorie_i[i]],
						 dbArtikel[i],
						 dbArtBeschr[i],
						 dbHersteller[dbHersteller_i[i]],
						 dbPreis[i],
						 printmode);
			num++;
		}
		printHitLine(target, "", "", "", "", "", ++printmode);
		return(num);
	}

	// note: a regexp is always true, if it's describing string is empty
	// so: create a regexp although it's an empty string!!!
	//re1 = new RegExp('\w*\s*' + pdKategorie + '\w*\s*','i');			// case insensitive
	//re2 = new RegExp('\w*\s*' + pdArtikel + '\w*\s*','i');			// case insensitive
	//re3 = new RegExp('\w*\s*' + pdHersteller + '\w*\s*','i');			// case insensitive
	re1 = new RegExp(pdKategorie,  'i');		// case insensitive
	re2 = new RegExp(pdArtikel,    'i');		// case insensitive
	re3 = new RegExp(pdHersteller, 'i');		// case insensitive

	// search
	for(i = 0; i < dbMax; i++) {
		if(re1.test(dbKategorie[dbKategorie_i[i]]) &&
		   re2.test(dbArtikel[i]) &&
		   re3.test(dbHersteller[dbHersteller_i[i]]) &&
		   ((pdPreis.length == 0) || (dbPreis[i] <= price))) {
				// table header
				if(printmode == 0)
					printHitLine(target, "", "", "", "", "", printmode++);
				// table row
				printHitLine(target,
							 dbKategorie[dbKategorie_i[i]],
							 dbArtikel[i],
							 dbArtBeschr[i],
							 dbHersteller[dbHersteller_i[i]],
							 dbPreis[i],
							 printmode);
				num++;
		}
	}

	if(num > 0) {
		// table trailer
		printHitLine(target, "", "", "", "", "", ++printmode);
	}
	else {
 		// no result
		printHitLine(target, "", "", "", "", "", -1);
	}

	return(num);
}

// Return orderdata as CSV-List

function printOrderDataCSV() {
	//Declare variables
	var s = "";	//Variable for the CSV-List
	var strValueDelimiter =	";";
	var strValueBorder = "'";
	var strLineEnd = "\n";

	//Build Heading for the CSV-List
	s =  strValueBorder + strOrderNum   + strValueBorder + strValueDelimiter;
	s += strValueBorder + strArtikel    + strValueBorder + strValueDelimiter;
	s += strValueBorder + strArtBeschr  + strValueBorder + strValueDelimiter;
	s += strValueBorder + strHersteller + strValueBorder + strValueDelimiter;
	s += strValueBorder + strPreis      + strValueBorder + strLineEnd;

	//Walk throug the orderdata and build the list
	for (var i = 1; i <= orderNum; i++) {
		s += strValueBorder + orderList[i].Anzahl     + strValueBorder + strValueDelimiter;
		s += strValueBorder + orderList[i].Artikel    + strValueBorder + strValueDelimiter;
		s += strValueBorder + orderList[i].ArtBeschr  + strValueBorder + strValueDelimiter;
		s += strValueBorder + orderList[i].Hersteller + strValueBorder + strValueDelimiter;
		s += strValueBorder + orderList[i].Preis      + strValueBorder + strLineEnd;
	}
	return s;
}





// *****************************************************
// the following codeline must be the last one !!!
// *****************************************************
isScriptLoaded = true;
 






