//
// Client side shopping system - based on remote JavaScript
//
// Author: Ralph Multhammer (c) 1997-1998
//
// Version:
//		version	|	who |	date	|	what
//****************************************************************
//var VERSION = "V1.0A00"//	rm  |		|	creation
//var VERSION = "V1.0A10"//	rm  |		|	copyright(mode)
//var VERSION = "V1.0A20"// 	rm  |		|	strings as static strVars
//						|	check_browser()
//var VERSION = "V1.0A21"//	rm  |		|	Country in Userdatas
//var VERSION = "V1.0A30"//	rm  |		|	Credit Card as non default payment; 
//						|   	Output fee only if not equal 0;
//						|   	bugfix optStr printOrder
//var VERSION = "V1.0A31"//	rsc |		|	printSendButton: check browser version only in mailmode
//var VERSION = "V1.0A32"//	rsc |		|	output payment fee only if value gt 0; 
//							"definePayments" for initialization of payments
//							initialize payment fee in function "printUserData"
//var VERSION = "V1.0A33"//	rm  | 01.08.98	|	optional taxStr in addOrderElem (sign of mwst_excl_incl) 
//var VERSION = "V1.0A34"//	rsc | 09.08.98	|	additional text string in user data
//							extra charge for low cost order
//var VERSION = "V1.0A35"//	rsc | 04.11.98	|	align top and nowrap for output cart
//var VERSION = "V1.1A01"//	rsc | 08.12.98	|	titel, company and state in user data; email not optional
//							function "fontTag" with special defines for control output
//							cardholder for creditcard payment
//							product name is send to order destination
//var VERSION = "V1.1A02"//	rsc | 08.12.98	|	order position unique with number and add. text
//var VERSION = "V1.1A10"//	rsc | 20.12.98	|	second currency for cart output with change factor (implementation for Euro)
//var VERSION = "V1.1A20"//	rsc | 10.01.99	|	dynamic table headers for cart output
//							number of decimal digits of numeric output configurable
//							Email optional per user definition
//var VERSION = "V1.1A21"//	rsc | 22.01.99	|	length of city field 30 char
//							getURLCartContent for an external use
//var VERSION = "V1.1A30"//	rsc | 26.01.99	|	shipping costs
//var VERSION = "V1.1A31"//	rsc | 08.02.99	|	optional string added to update order position button in cart
//var VERSION = "V1.1A311"//	rsc | 10.03.99	|	missing </TD> added in printOrder
//var VERSION = "V1.1A312"//	jpw | 02.05.99	|	printSendButton: fixed type=BUTTON/SUBMIT depending on mailto:/perl-script
//var VERSION = "V1.1A313"//	jpw | 20.05.99	|	fixed Netscape security problem with mailform.submit()
//var VERSION = "V1.1A314"//	jpw	| 17.09.99	|	fixed MS IE5 problem with AutoComplete-Function
var VERSION = "V1.1A315"// jpw | 23.09.99	|	added hidden field defines for standard CGI'S
//
//

// public functions
// ================
// start(source_location,email,						-> initialisation
//		 max_products,
//		 max_items_per_product,
//		 currency,mwst_excl_incl)
// restart()								-> reinitialisation (empty orderlist)
// addOrderElem(num,name,bestnum,preisStr
//					[,optStr[,taxStr]])		-> selecting product
// incrOrderElem(i)							-> increment product counter of product (i)
// decrOrderElem(i)							-> decrement product counter of product (i)
// deleteOrderElem(i)							-> deselecting product (i)
// isOrder()								-> true/false (onSubmit)
// printOrder(target,borderWidth,asform)	-> print order list form in window 'target' as form or as label
// printUserData(target,borderWidth,asform)	-> print user data form in window 'target' as form or as label
// checkUserData(target)						-> true/false (onSubmit)
// printSendButton(target,caption, redirect_fax,redirect,infotext)	-> print hidden send message in window 'target' and send button 'caption'
//										ie 3.x redirect to side 'redirect_fax'
//										do redirect to location 'redirect' after email send in same window
//										attention: button click implicits restart()
// define(image_or_str,variable,value)		-> define "image": "+", "-", "x", "ok"
//					   	   define "string": "NO_ORDER", "MAX_ORDER", "MAX_ITEM", "ORDER_NUM", 
//											"ORDER_OPTIONAL", "SEARCH_NORESULT", "MAIL_SUBJECT"
//						   define "boolean": "ORDER_VARIABLE", "ORDER_DOUBLE" -> "0/1"
//						   define "payment": "NACHNAHME", "RECHNUNG", "BANK", "KREDIT" -> "float" for additional fee
// search(pdname,pdnum,pdprice)			-> define search query
// printHitList(target,dbname,dbname_i,		-> print hitlist for defined search query
//				dbnum,dbnum_i,dbprice,dbprice_i,dbref)
// test()								-> return messagebox of orderList
// copyright(mode)							-> check and alert version info

// globals
// =======
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!!
var definePayments = false;			// true, if any payment method is manual defined; initialize payments first
var openTag = 1;				// constant for an opening tag
var closeTag = 2;				// constant for an closing tag

// configurable images
var image_delete = "x";			// x image		(delete)
var image_incr = "+";			// + image		(increment)
var image_decr = "-";			// - 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

// MwSt
var mwst;
var mwstsign;

// number of decimal digits
var cDecDigit = 2;		// normal decimal digits
var cDecDigit2 = 2;		// number decimal digits of second currency

// browser
var bNS = false;

// resource strings and values	(dynamic)
// ===========================
var slocation;
var strMaxOrder;
var strMaxItem;
var strCurrency;
var strNoOrder = "<CENTER>Es liegt derzeit keine Bestellung vor</CENTER><BR>";
var strOrderOptional = "";
var strSearchNoResult = "Es wurden keine Treffer zu den angegebenen Suchbegriffen gefunden.";
var strMailSubject = "Bestellung von Aquaristik-Mannhardt";
var strAddUserText = "";		// additional user information
var strMinOrderCharge = "Mindermengenzuschlag";
var valMinOrderSum = 0;			// order sum for extra charge
var valMinOrderCharge = 0;		// extra charge for order under valMinOrderSum
var strShippingCost = "Frachtzuschlag";	
var valShippingCost = 0;		// additional amount for shipping
var fontSize = 0;			// special font size for all output
var fontFace = "";			// special font face for all output
var fontColor = "";			// special font color for all output

var secondCurrency = "";			// for cart output
var secondCurrencyFactor = 1;		// for change calculation of second currency

var strOrderNum = "Anzahl";
var strProduct = "Produkt";
var strId = "Bestellnummer";
var strPrice = "Einzelpreis";
var strProductTotal = "Gesamt";
var strOrderTotal = "Bestellsumme";
var strOrderCost = "zzgl. Versandkosten";
var strTotal = "Gesamtsumme";

// resource strings		(static)
// ================
var strCheckFailure = "Es fehlt die Eingabe des Feldes";

var strTitel = "Titel";
var strPrename = "Vorname";
var strName = "Name";
var strCompany = "Firma"
var strStreet = "Straße";
var strZip = "Plz";
var strCity = "Ort";
var strCountry = "Land";
var strState = "Bundesland";
var strTelephone = "Telefon";
var strFax = "Fax";
var strEmail = "E-Mail";
var emailOptional = false;

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 strCardholder = "Karteninhaber";
var Kreditdb = new Array("Visa","Eurocard/Mastercard","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 strMwstIncl = "inklusive";
var strMwstExcl = "zzgl.";

// hidden field strings
// ====================
var strRecipient = '';
var strSubject = '';
var strRedirect = '';

//*******************************************************************************************

// copyright check function
function copyright(msgbox)
{
 var now = new Date();
 var till = new Date(Date.UTC(99,12-1,31));

 if(msgbox)
	alert("WEB·66 Shopping System Version " + VERSION + " (" + 
								till.getDate() + "/" +
								(till.getMonth() + 1) + "/" +
								till.getYear() + ")" +
								"."); 
 //return(now.getTime() <= till.getTime());
 return(true);
}

// 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)))
 {
	bNS = true;
	return(true);
 }
 if(((name.indexOf("Microsoft") > -1) && (version >= ie_version)))
	return(true);
 
 return(false);
}

// init function
function start(source_location,action,
		max_products,max_items_per_product,
		currency,mwst_excl_incl)
{
 // 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;
 if(mwst_excl_incl > 0) {
	mwstsign = 1;
	mwst = mwst_excl_incl;
	strMwstExcl += " " + strMwst;		// exclusive (positive MwSt.)
 } else if(mwst_excl_incl < 0) {
	mwstsign = -1;
	mwst = Math.abs(mwst_excl_incl);
	strMwstIncl += " " + strMwst;			// inclusive (negative MwSt.)
 } else {
	mwstsign = mwst = 0;
	strMwstExcl = strMwstIncl = "";
 }

 // 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].name + "\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.titel = "";
 this.prename = "";
 this.name = "";
 this.company = "";
 this.street = "";
 this.zip = "";
 this.city = "";
 this.country = "Deutschland";
 this.state = "";
 this.tel = "";
 this.fax = "";
 this.email = "";
 this.AddUserText = "";

 this.payment = "";
 this.bankname = "";
 this.ktnr = "";
 this.blz = "";
 
 this.kreditcompany = "";
 this.kreditnr = "";
 this.validation = "";
 this.cardholder = "";
  
 this.fee = 0;
 
 return(this);
}

// init all globals
function initGlobals()
{
 orderList = new getList(MAX);
 orderNum = 0;
}

// lookup in orderList and return index
function lookUp(bestnum, optStr)
{
 for(var i = 1; i <= orderNum; i++)
	if(orderList[i].bestnum == bestnum && orderList[i].optstr == optStr)
		return(i);

 return(0);
}

// create new order element
function orderElem(num,name,bestnum,preis,optstr,tax)
{
 this.anzahl = num;
 this.name = name;
 this.bestnum = bestnum;
 this.preis = preis;
 this.optstr = optstr;
 this.tax = Math.abs(tax);
}

// 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(numStr,name,bestnum,preisStr,optStr,taxStr)
{
 var i;
 var preis;
 var num;
 var tmp;
 var tax;

 // control optStr
 if(addOrderElem.arguments.length < 5)
	optStr = "";
 
 // lookup for product in order list
 i = lookUp(bestnum, optStr);


 // get price
 preis = parseFloat(comma2dot(preisStr));

 // get number 
 num = 0 + (addDouble ? parseFloat(comma2dot(numStr)) : parseInt(numStr));

 // determine max
 if(num > MAXITEM) {
	// max items reached
	alert(strMaxItem);
	return(false);
 } else if((i <= 0) && (orderNum >= MAX) && (num > 0)) {
	// max orders reached
	alert(strMaxOrder);
	return(false);
 }


 // control taxStr
 if(addOrderElem.arguments.length < 6)
	tax = mwst;
 else
	tax = parseFloat(taxStr);

 // insert/update/delete order
 if(num <= 0) {
	if(i > 0) 
		// delete
		deleteOrderElem(i);
 } else {
	if(i > 0)
		// update
		orderList[i].anzahl = num;
	else
		// insert
		orderList[++orderNum] = new orderElem(num,name,bestnum,preis,optStr,tax);
 }
 
 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,decimal)
{
 // decimal is the number of digits after decimal sign

 var num = "" + Math.round(f * Math.pow(10,decimal));
 var s;
 var i,j;

 // insert decimal sign at right position
 if (decimal > 0) {
   s = num.substring(0,num.length - decimal) + ',' + num.substring(num.length - decimal, num.length);
 } else {
   s = num;
 }

 // insert thousend sign
 for (i=num.length - decimal,j=0; i>0; i--, j++) {
   if (j%3 == 0 && j > 0) {
	s = s.substring(0,i) + '.' + s.substring(i,s.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);
}

function calcTax(price,tax)
{
 var t;
 var i = (tax / 100);

 if(mwstsign > 0)
	t = price * i;
 else if(mwstsign < 0)
	t = price * (i / (1 + i));
 else
	t = 0;

 return(t);
}


// create html-tag for special font
function fontTag (mode)
{
var s = '';
   if (mode == openTag && (fontSize != 0 || fontFace > "" || fontColor > "")) {
      s = '<font ';
      if (fontSize != 0) {
         s += 'size=\"' + fontSize + '\" ';
      }
      if (fontFace > "") {
         s += 'face=\"' + fontFace + '\" ';
      }
      if (fontColor > "") {
         s += 'color=\"' + fontColor + '\" ';
      }
      s += '>';
   } else if (mode == closeTag && (fontSize != 0 || fontFace > "" || fontColor > "")) {
      s= '</font>';
   }
   return (s);
} // fontTag


// print the second currency
function printSecondCurrency (parPrice)
{
  var s = "";
  var tmpPrice;

  if (secondCurrency != "") {
    tmpPrice = parPrice * secondCurrencyFactor;
    s = "<br>" + f2s(tmpPrice,cDecDigit2) + " " + secondCurrency;
  }

  return (s);
}	// printSecondCurrency 



// print complete orderList
function printOrder(target,borderWidth,asform)
{
 var sum;
 var total = 0;
 var tax = 0;
 var colspan;
 var starTax = "";

 if(!isOrder()) {
	target.document.write(fontTag (openTag) + strNoOrder + fontTag (closeTag));
	return;
 }
 var s = "<FORM NAME=\"orderform\">\n<TABLE BORDER=" + borderWidth + " WIDTH=\"100%\">\n<TR>\n";
 if(asform) {
 	s += "<TH></TH>\n";
	colspan = 5;
 } else {
	colspan = 4;
 }
 if(strOrderOptional > "")
	colspan++;

 s += "<TH ALIGN=CENTER>" + fontTag (openTag) + strOrderNum + fontTag (closeTag) + "</TH>\n";
 s += "<TH ALIGN=LEFT>" + fontTag (openTag) + strProduct + fontTag (closeTag) + "</TH>\n";
 if(strOrderOptional > "")
 	s += "<TH ALIGN=CENTER>" + fontTag (openTag) + strOrderOptional + fontTag (closeTag) + "</TH>\n";
 s += "<TH ALIGN=LEFT>" + fontTag (openTag) + strId + fontTag (closeTag) + "</TH>\n";
 s += "<TH ALIGN=RIGHT>" + fontTag (openTag) + strPrice + fontTag (closeTag) + "</TH>\n";
 s += "<TH ALIGN=RIGHT>" + fontTag (openTag) + strProductTotal + fontTag (closeTag) + "</TH>\n";
 if(asform)
	s += "<TH></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;
	tax += calcTax(sum,orderList[i].tax);
	s = "<TR>\n";
	if(asform) {
		if(addVariable) {
			s += "<TD ALIGN=CENTER VALIGN=TOP>\n";
			s += "<A HREF=\"javascript:" + slocation + "addOrderElem(" + 
				"self.document.orderform.count" + i + ".value" + "," +
				"'" + orderList[i].name + "'," + 
				"'" + orderList[i].bestnum + "'," + 
				"'" + f2s(orderList[i].preis,cDecDigit) + "'," +
				"'" + orderList[i].optstr + "');" + 
				slocation + "reload(self);\">" + image_upd + "</A>\n";
			s += "</TD>\n";
		} else {
			s += "<TD ALIGN=RIGHT VALIGN=TOP>\n";
			s += "<A HREF=\"javascript:" + slocation + "incrOrderElem(" + i + ");" + slocation + "reload(self);\">" + image_incr + "</A>\n";
			s += "<A HREF=\"javascript:" + slocation + "decrOrderElem(" + i + ");" + slocation + "reload(self);\">" + image_decr + "</A>\n";
			s += "</TD>\n";
		}
	}
	s += "<TD ALIGN=CENTER VALIGN=TOP>\n";
	if(addVariable && asform) {
		s += "<INPUT TYPE=TEXT NAME=count" + i + " MAXLENGTH=5 SIZE=5 VALUE=";
		s += "\"" + (addDouble ? f2s(orderList[i].anzahl,cDecDigit) : orderList[i].anzahl) + "\"";
		/*
		s += " onBlur=\"" + slocation + "addOrderElem(" + 
				"this.value" + "," +
				"'" + orderList[i].name + "'," + 
				"'" + orderList[i].bestnum + "'," + 
				"'" + f2s(orderList[i].preis,cDecDigit) + "');" + 
				slocation + "reload(self);\"";
		*/
		s += ">\n";
	} else {
		s += fontTag (openTag) + (addDouble ? f2s(orderList[i].anzahl,cDecDigit) : orderList[i].anzahl) + fontTag (closeTag);
	}
	s += "</TD>\n";
	s += "<TD ALIGN=LEFT VALIGN=TOP>" + fontTag (openTag) + orderList[i].name + fontTag (closeTag) + "</TD>\n";
	if(strOrderOptional > "")
		s += "<TD ALIGN=LEFT VALIGN=TOP>" + fontTag (openTag) + orderList[i].optstr + fontTag (closeTag) + "</TD>\n";
	s += "<TD ALIGN=LEFT VALIGN=TOP>" + fontTag (openTag) + orderList[i].bestnum + fontTag (closeTag) + "</TD>\n";
	s += "<TD ALIGN=RIGHT VALIGN=TOP NOWRAP>" + fontTag (openTag) + f2s(orderList[i].preis,cDecDigit) + " " + strCurrency + printSecondCurrency (orderList[i].preis) + fontTag (closeTag) + "</TD>\n";
	s += "<TD ALIGN=RIGHT VALIGN=TOP NOWRAP>" + fontTag (openTag) + f2s(sum,cDecDigit) + " " + strCurrency + printSecondCurrency (sum) + fontTag (closeTag);
	if(orderList[i].tax != mwst) {
		s += fontTag (openTag) + " *)" + fontTag (closeTag);
		starTax = fontTag (openTag) + "*) " + orderList[i].tax + "% "  + strMwst + fontTag (closeTag);
	}
	s + "</TD>\n";
	if(asform) {
		s += "<TD ALIGN=CENTER VALIGN=TOP>\n";
		s += "<A HREF=\"javascript:" + slocation + "deleteOrderElem(" + i + ");" + slocation + "reload(self);\">" + image_delete + "</A>\n";
		s += "</TD>\n";
	}
	s += "</TR>\n";
	target.document.write(s);
 }

 s = "<TR>\n";
 s += "<TD></TD><TD COLSPAN=" + colspan + "><HR></TD>\n</TR>\n<TR>";
 s += "<TD COLSPAN=" + colspan + " ALIGN=RIGHT VALIGN=TOP><B>" + fontTag (openTag) + strOrderTotal + fontTag (closeTag) + "</B></TD>\n";
 s += "<TD ALIGN=RIGHT><B>" + fontTag (openTag) + f2s(total,cDecDigit) + " " + strCurrency + printSecondCurrency (total) + fontTag (closeTag) + "</B></TD>\n";
 s += "</TR>\n";

// extra charge for minimal order
if (valMinOrderSum > 0 && valMinOrderCharge > 0 && total < valMinOrderSum){
	s += "<TR>\n";
	s += "<TD COLSPAN=" + colspan + " ALIGN=RIGHT VALIGN=TOP><B>" + fontTag (openTag) + strMinOrderCharge + fontTag (closeTag) + "</B></TD>\n";
	s += "<TD ALIGN=RIGHT NOWRAP><B>" + fontTag (openTag) + f2s(valMinOrderCharge,cDecDigit) + " " + strCurrency + printSecondCurrency (valMinOrderCharge) + fontTag (closeTag) + "</B></TD>\n";
	s += "</TR>\n";
	total += valMinOrderCharge;
	tax += calcTax(valMinOrderCharge,mwst);
}

// extra charge for shipping
if (valShippingCost > 0){
	s += "<TR>\n";
	s += "<TD COLSPAN=" + colspan + " ALIGN=RIGHT VALIGN=TOP><B>" + fontTag (openTag) + strShippingCost + fontTag (closeTag) + "</B></TD>\n";
	s += "<TD ALIGN=RIGHT NOWRAP><B>" + fontTag (openTag) + f2s(valShippingCost,cDecDigit) + " " + strCurrency + printSecondCurrency (valShippingCost) + fontTag (closeTag) + "</B></TD>\n";
	s += "</TR>\n";
	total += valShippingCost;
	tax += calcTax(valShippingCost,mwst);
}

 if(!asform && payment && (userData.fee > 0)) {
 	s += "<TR>\n";
 	s += "<TD COLSPAN=" + colspan + " ALIGN=RIGHT VALIGN=TOP><B>" + fontTag (openTag) + strOrderCost + " (" + userData.payment + ")" + fontTag (closeTag) + "</B></TD>\n";
 	s += "<TD ALIGN=RIGHT NOWRAP><B>" + fontTag (openTag) + f2s(userData.fee,cDecDigit) + " " + strCurrency + printSecondCurrency (userData.fee) + fontTag (closeTag) + "</B></TD>\n";
 	s += "</TR>\n";

	total += userData.fee;
	tax += calcTax(userData.fee,mwst);
 }
	
 if(mwstsign > 0) {
	s += "<TR>\n";
	s += "<TD COLSPAN=" + colspan + " ALIGN=RIGHT VALIGN=TOP><B>" + fontTag (openTag) + strMwstExcl + fontTag (closeTag) + "</B></TD>\n";
	s += "<TD ALIGN=RIGHT NOWRAP><B>" + fontTag (openTag) + f2s(tax,cDecDigit) + " " + strCurrency + printSecondCurrency (tax) + fontTag (closeTag) + "</B></TD>\n";
	s += "</TR>\n";

	total += tax;
 }

 s += "<TR>\n";
 s += "<TD></TD><TD COLSPAN=" + colspan + "><HR></TD>\n</TR>\n<TR>\n";
 s += "<TD COLSPAN=" + colspan + " ALIGN=RIGHT VALIGN=TOP><B>" + fontTag (openTag) + strTotal + fontTag (closeTag) + "</B></TD>\n";
 s += "<TD ALIGN=RIGHT NOWRAP><B><U>" + fontTag (openTag) + f2s(total,cDecDigit) + " " + strCurrency + printSecondCurrency (total) + fontTag (closeTag) + "</U></B></TD>\n";
 s += "</TR>\n";

 if(mwstsign < 0) {
	s += "<TR>\n";
	s += "<TD COLSPAN=" + colspan + " ALIGN=RIGHT VALIGN=TOP><B>" + fontTag (openTag) + strMwstIncl + fontTag (closeTag) + "</B></TD>\n";
	s += "<TD ALIGN=RIGHT NOWRAP><B>" + fontTag (openTag) + f2s(tax,cDecDigit) + " " + strCurrency + printSecondCurrency (tax) + fontTag (closeTag) + "</B></TD>\n";
	s += "</TR>\n";
 }

 if(starTax > "") {
 	s += "<TR>\n";
 	s += "<TD></TD><TD COLSPAN=" + colspan + "><FONT SIZE=-2>" + fontTag (openTag) + starTax + fontTag (closeTag) + "</FONT></TD>\n";
 	s += "</TR>\n";
 }

 s += "</TABLE>\n";
 s += "</FORM>\n";
 target.document.write(s);
}

// print text or label
function printInput(variable,len,value,valuename,astext,TextareaCols,TextAreaLines)
{
 if(astext)
    if(printInput.arguments.length > 5) {
	return("<TEXTAREA NAME=" + variable + " COLS=" + TextareaCols + " ROWS=" + TextAreaLines + " wrap=virtual onChange=\"" + slocation + valuename + "=this.value;\">" + value + "</TEXTAREA>");
    } else {
	return("<INPUT TYPE=TEXT NAME=" + variable + " MAXLENGTH=" + len + " SIZE=" + len + " VALUE=\"" + value + "\" onChange=\"" + slocation + valuename + "=this.value;\">");
    }
 else
	return(value);
}

// print user data form
function printUserData(target,borderwidth,asform)
{
 var s = "<FORM NAME=\"userform\"><TABLE BORDER=" + borderwidth + ">\n";
 var blanks = "";
 var i;

 for(i = 0; i < 5; i++)
	blanks += "&#160;";

 s += "<TR><TD ALIGN=LEFT><B>" + fontTag (openTag) + strTitel + ":" + blanks + fontTag (closeTag) + "</B></TD>";
 s += "<TD COLSPAN=3 ALIGN=LEFT>" + fontTag (openTag) + printInput("titel",10,userData.titel,"userData.titel",asform) + fontTag (closeTag) + "</TD></TR>\n";

 s += "<TR><TD ALIGN=LEFT><B>" + fontTag (openTag) + strPrename + ":" + blanks + fontTag (closeTag) + "</B></TD>";
 s += "<TD COLSPAN=3 ALIGN=LEFT>" + fontTag (openTag) + printInput("prename",20,userData.prename,"userData.prename",asform) + fontTag (closeTag) + "</TD></TR>\n";

 s += "<TR><TD ALIGN=LEFT><B>" + fontTag (openTag) + strName + ":" + fontTag (closeTag) + "</B></TD>";
 s += "<TD COLSPAN=3 ALIGN=LEFT>" + fontTag (openTag) + printInput("name",40,userData.name,"userData.name",asform) + fontTag (closeTag) + "</TD></TR>\n";

 s += "<TR><TD ALIGN=LEFT><B>" + fontTag (openTag) + strCompany + ":" + fontTag (closeTag) + "</B></TD>";
 s += "<TD COLSPAN=3 ALIGN=LEFT>" + fontTag (openTag) + printInput("company",40,userData.company,"userData.company",asform) + fontTag (closeTag) + "</TD></TR>\n";

 s += "<TR><TD ALIGN=LEFT><B>" + fontTag (openTag) + strStreet + ":" + fontTag (closeTag) + "</B></TD>";
 s += "<TD COLSPAN=3 ALIGN=LEFT>" + fontTag (openTag) + printInput("street",40,userData.street,"userData.street",asform) + fontTag (closeTag) + "</TD></TR>\n";

 s += "<TR><TD ALIGN=LEFT><B>" + fontTag (openTag) + strZip + ":" + fontTag (closeTag) + "</B></TD>";
 s += "<TD ALIGN=LEFT>" + fontTag (openTag) + printInput("zip",10,userData.zip,"userData.zip",asform) + blanks + fontTag (closeTag) + "</TD>";
 s += "<TD ALIGN=LEFT><B>" + fontTag (openTag) + strCity + ":" + fontTag (closeTag) + "</B></TD>";
 s += "<TD ALIGN=LEFT>" + fontTag (openTag) + printInput("city",30,userData.city,"userData.city",asform) + fontTag (closeTag) + "</TD></TR>\n";

 s += "<TR><TD ALIGN=LEFT><B>" + fontTag (openTag) + strCountry + ":" + fontTag (closeTag) + "</B></TD>";
 s += "<TD COLSPAN=3 ALIGN=LEFT>" + fontTag (openTag) + printInput("country",40,userData.country,"userData.country",asform) + fontTag (closeTag) + "</TD></TR>\n";

 s += "<TR><TD ALIGN=LEFT><B>" + fontTag (openTag) + strState + ":" + fontTag (closeTag) + "</B></TD>";
 s += "<TD COLSPAN=3 ALIGN=LEFT>" + fontTag (openTag) + printInput("state",40,userData.state,"userData.state",asform) + fontTag (closeTag) + "</TD></TR>\n";

 s += "<TR><TD ALIGN=LEFT><B>" + fontTag (openTag) + strTelephone + ":" + fontTag (closeTag) + "</B></TD>";
 s += "<TD ALIGN=LEFT>" + fontTag (openTag) + printInput("tel",15,userData.tel,"userData.tel",asform) + blanks + fontTag (closeTag) + "</TD>";
 s += "<TD ALIGN=LEFT><B>" + fontTag (openTag) + strFax + ":" + fontTag (closeTag) + "</B></TD>";
 s += "<TD ALIGN=LEFT>" + fontTag (openTag) + printInput("fax",15,userData.fax,"userData.fax",asform) + fontTag (closeTag) + "</TD></TR>\n";

 s += "<TR><TD ALIGN=LEFT><B>" + fontTag (openTag) + strEmail + ":" + fontTag (closeTag) + "</B></TD>";
 s += "<TD COLSPAN=3 ALIGN=LEFT>" + fontTag (openTag) + printInput("email",40,userData.email,"userData.email",asform) + fontTag (closeTag) + "</TD></TR>\n";
 target.document.write(s);
 s = "";

 // additional user text
 if (strAddUserText != "") {
   s += "<TR><TD COLSPAN=4 ALIGN=LEFT><B>" + fontTag (openTag) + strAddUserText + fontTag (closeTag) + "</B></TD></TR>";
   s += "<TR><TD COLSPAN=4 ALIGN=LEFT>" + fontTag (openTag) + printInput("AddUserText",40,userData.AddUserText,"userData.AddUserText",asform, 60, 5) + fontTag (closeTag) + "</TD></TR>\n";
 }


 // kind of payment user wants to buy
 if(payment)
 	s += "<TR><TD COLSPAN=4 ALIGN=LEFT><B>" + fontTag (openTag) + strPayment + ":" + fontTag (closeTag) + "</B></TD></TR>\n";
 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 += fontTag (openTag) + strNACHNAHME + fontTag (closeTag);
        if(feeNACHNAHME != 0)
	   s += fontTag (openTag) + " (" + strPlus + " " + f2s(feeNACHNAHME,cDecDigit) + " " + strCurrency + ")" + fontTag (closeTag);
        s += "</TD></TR>\n";
 }
 if((payment & RECHNUNG) && (asform || (userData.payment == strRECHNUNG))) {
	if(userData.payment == "") {
		userData.payment = strRECHNUNG;
		userData.fee = feeRECHNUNG;
	}
	s += "<TR><TD></TD><TD COLSPAN=3 ALIGN=LEFT>"
	if(asform) {
		s += "<INPUT TYPE=RADIO NAME=payment VALUE=\"" + strRECHNUNG + "\" onClick=\"" + slocation + "userData.payment=this.value;" + slocation + "userData.fee=" + slocation + "feeRECHNUNG;\"";	
		if(userData.payment == strRECHNUNG)
			s += " CHECKED";
		s += ">";	
	}
	s += fontTag (openTag) + strRECHNUNG + fontTag (closeTag);
	if(feeRECHNUNG != 0)
	   s += fontTag (openTag) + " (" + strPlus + " " + f2s(feeRECHNUNG,cDecDigit) + " " + strCurrency + ")" + fontTag (closeTag);
        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 += fontTag (openTag) + strBANKEINZUG + fontTag (closeTag);
	if (feeBANKEINZUG != 0)
	   s += fontTag (openTag) + " (" + strPlus + " " + f2s(feeBANKEINZUG,cDecDigit) + " " + strCurrency + ")" + fontTag (closeTag);
	s += "</TD></TR>\n";

	s += "<TR><TD></TD><TD ALIGN=LEFT><B>&#160;&#160;" + fontTag (openTag) + strBankname + ":" + fontTag (closeTag) + "</B></TD>";
 	s += "<TD COLSPAN=2 ALIGN=LEFT>" + fontTag (openTag) + printInput("bank",40,userData.bankname,"userData.bankname",asform) + fontTag (closeTag) + "</TD></TR>\n";
	s += "<TR><TD></TD><TD ALIGN=LEFT><B>&#160;&#160;" + fontTag (openTag) + strKtnr + ":" + fontTag (closeTag) + "</B></TD>";
 	s += "<TD COLSPAN=2 ALIGN=LEFT>" + fontTag (openTag) + printInput("ktnr",40,userData.ktnr,"userData.ktnr",asform) + fontTag (closeTag) + "</TD></TR>\n";
	s += "<TR><TD></TD><TD ALIGN=LEFT><B>&#160;&#160;" + fontTag (openTag) + strBlz + ":" + fontTag (closeTag) + "</B></TD>";
 	s += "<TD COLSPAN=2 ALIGN=LEFT>" + fontTag (openTag) + printInput("blz",40,userData.blz,"userData.blz",asform) + fontTag (closeTag) + "</TD></TR>\n";
 }
 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 += fontTag (openTag) + strKREDITKARTE + fontTag (closeTag);
	if(feeKREDITKARTE != 0)
	   s += fontTag (openTag) + " (" + strPlus + " " + f2s(feeKREDITKARTE,cDecDigit) + " " + strCurrency + ")" + fontTag (closeTag);
	s += "</TD></TR>\n";

	s += "<TR><TD></TD><TD ALIGN=LEFT><B>&#160;&#160;" + fontTag (openTag) + strKreditinstitut + ":" + fontTag (closeTag) + "</B></TD>";
 	s += "<TD COLSPAN=2 ALIGN=LEFT>";
	if(userData.kreditcompany == "")
		userData.kreditcompany = Kreditdb[0];
	if(asform) {
		s += fontTag (openTag) + "<SELECT name=\"kreditcompany\" size=1 onBlur=\"" + slocation + "userData.kreditcompany=this.options[this.selectedIndex].value\">\n";
		for(i = 0; i < Kreditdb.length; i++) {
			s += "<OPTION VALUE=\"" + Kreditdb[i] + "\"";
			if(userData.kreditcompany == Kreditdb[i])
				s += " SELECTED";
			s += ">" + Kreditdb[i] + "\n";
		}
		s += "</SELECT>" + fontTag (closeTag) + "\n";
	} else {
		s += fontTag (openTag) + userData.kreditcompany + fontTag (closeTag);
	}
	s += "</TD></TR>\n";
	s += "<TR><TD></TD><TD ALIGN=LEFT><B>&#160;&#160;" + fontTag (openTag) + strKreditnr + ":" + fontTag (closeTag) + "</B></TD>";
 	s += "<TD COLSPAN=2 ALIGN=LEFT>" + fontTag (openTag) + printInput("kreditnr",40,userData.kreditnr,"userData.kreditnr",asform) + fontTag (closeTag) + "</TD></TR>\n";
	s += "<TR><TD></TD><TD ALIGN=LEFT><B>&#160;&#160;" + fontTag (openTag) + strKreditdatum + ":" + fontTag (closeTag) + "</B></TD>";
 	s += "<TD COLSPAN=2 ALIGN=LEFT>" + fontTag (openTag) + printInput("kreditvalidation",40,userData.validation,"userData.validation",asform) + fontTag (closeTag) + "</TD></TR>\n";
	s += "<TR><TD></TD><TD ALIGN=LEFT><B>&#160;&#160;" + fontTag (openTag) + strCardholder + ":" + fontTag (closeTag) + "</B></TD>";
 	s += "<TD COLSPAN=2 ALIGN=LEFT>" + fontTag (openTag) + printInput("cardholder",40,userData.cardholder,"userData.cardholder",asform) + fontTag (closeTag) + "</TD></TR>\n";
 }

 s += "</TABLE></FORM>\n";
 target.document.write(s);
}




// return cart in kind of an URL for external use
function getURLCartContent()
{
var s = '';

 for(var i = 1; i <= orderNum; i++) {
	s += "P=";
	s += orderList[i].anzahl + "@";
	s += orderList[i].bestnum + "@";
	s += orderList[i].name + "@";
	s += orderList[i].optstr + " " + "@";	// always send something
	s += f2s(orderList[i].preis,2) + "@";
	s += strCurrency + "@";
	s += f2s(orderList[i].tax,2);
	if (i < orderNum)
		s += '&';
 }
 return (s);
} /* getURLCartContent */



// 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(strStreet,userData.street,target.document.userform.street)) == false)
	return(ret);
 if((ret = check(strZip,userData.zip,target.document.userform.zip)) == false)
	return(ret);
 if((ret = check(strCity,userData.city,target.document.userform.city)) == false)
	return(ret);
 if((ret = check(strCountry,userData.country,target.document.userform.country)) == false)
	return(ret);
 if (emailOptional == false) {
   if((ret = check(strEmail,userData.email,target.document.userform.email)) == 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);
 
 if(!bNS)
	 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)
 var total = 0;

 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 += "\">";
 if (strRecipient.length != 0)
 {
	s += "<INPUT TYPE=HIDDEN NAME=\"recipient\" VALUE=\"" + strRecipient + "\">";
 }
 if (strSubject.length != 0)
 {
	s += "<INPUT TYPE=HIDDEN NAME=\"subject\" VALUE=\"" + strSubject + "\">";
 }
 if (strRedirect.length != 0)
 {
	s += "<INPUT TYPE=HIDDEN NAME=\"redirect\" VALUE=\"" + strRedirect + "\">";
 }
 s += "<INPUT TYPE=HIDDEN NAME=$$SHOPSTART VALUE=\"$$\">";

 s += "<INPUT TYPE=HIDDEN NAME=$$Titel VALUE=\"" + userData.titel + "\">";
 s += "<INPUT TYPE=HIDDEN NAME=$$Vorname VALUE=\"" + userData.prename + "\">";
 s += "<INPUT TYPE=HIDDEN NAME=$$Name VALUE=\"" + userData.name + "\">";
 s += "<INPUT TYPE=HIDDEN NAME=$$Firma VALUE=\"" + userData.company + "\">";
 s += "<INPUT TYPE=HIDDEN NAME=$$Strasse VALUE=\"" + userData.street + "\">";
 s += "<INPUT TYPE=HIDDEN NAME=$$Plz VALUE=\"" + userData.zip + "\">";
 s += "<INPUT TYPE=HIDDEN NAME=$$Stadt VALUE=\"" + userData.city + "\">";
 s += "<INPUT TYPE=HIDDEN NAME=$$Land VALUE=\"" + userData.country + "\">";
 s += "<INPUT TYPE=HIDDEN NAME=$$Bundesland VALUE=\"" + userData.state + "\">";
 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 + "\">";
 if(userData.AddUserText != "")
	s += "<INPUT TYPE=HIDDEN NAME=$$Zusatzinfo VALUE=\"" + userData.AddUserText + "\">";
 for(var i = 1; i <= orderNum; i++) {
	total += orderList[i].anzahl * orderList[i].preis;

	if (strRecipient.length != 0)
	{
		s += "<INPUT TYPE=HIDDEN NAME=$$P" + i + " VALUE=\"";
	}
	else
	{
		s += "<INPUT TYPE=HIDDEN NAME=$$P VALUE=\"";
	}
	s += orderList[i].anzahl + "@";
	s += orderList[i].bestnum + "@";
	s += orderList[i].name + "@";
	s += orderList[i].optstr + " " + "@";	// always send something
	s += f2s(orderList[i].preis,cDecDigit) + "@";
	s += strCurrency + "@";
	s += f2s(orderList[i].tax,cDecDigit);
	s += "\">";
 }

 if (valMinOrderSum > 0 && valMinOrderCharge > 0 && total < valMinOrderSum){
 	s += "<INPUT TYPE=HIDDEN NAME=$$Mindermengenzuschlag VALUE=\"" + f2s(valMinOrderCharge,cDecDigit) + "\">";
 }

 // extra charge for shipping
 if (valShippingCost > 0){
 	s += "<INPUT TYPE=HIDDEN NAME=$$Frachtzuschlag VALUE=\"" + f2s(valShippingCost,cDecDigit) + "\">";
 }


 if(payment) {
 	s += "<INPUT TYPE=HIDDEN NAME=$$Zahlungsart VALUE=\"" + userData.payment + "\">";
 	s += "<INPUT TYPE=HIDDEN NAME=$$Versandkosten VALUE=\"" + f2s(userData.fee,cDecDigit) + "\">";
	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=$$Karteninhaber VALUE=\"" + userData.cardholder + "\">";
	}
 }

 s += "<INPUT TYPE=HIDDEN NAME=$$SHOPEND VALUE=\"$$\">";
 if(mailMode)
 {
	if(bNS)
	{
		s += "<INPUT TYPE=SUBMIT VALUE=\"" + caption + "\"";
		s += " onClick=\"" + slocation + "do_submit(self, '" + redirect + "','" + infotext + "')\">";
	}
	else
	{
		s += "<INPUT TYPE=BUTTON VALUE=\"" + caption + "\"";
		s += " onClick=\"" + slocation + "do_submit(self, '" + redirect + "','" + infotext + "')\">";
	}
 }
 else 
 {
	s += "<INPUT TYPE=SUBMIT VALUE=\"" + caption + "\"";
	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 == "value") {
	if(variable == "MAX_ORDER")
		strMaxOrder = value;
	else if(variable == "MAX_ITEM")
		strMaxItem = value;
	else if(variable == "MIN_ORDER_EXTRA_CHARGE_SUM")
		valMinOrderSum = value;
	else if(variable == "MIN_ORDER_EXTRA_CHARGE")
		valMinOrderCharge = value;
	else if(variable == "FONT_SIZE")
		fontSize = value;
	else if(variable == "DECIMAL_DIGITS")
		cDecDigit = value;
	else if(variable == "SECOND_CURRENCY_FACTOR")
		secondCurrencyFactor = value;
	else if(variable == "SECOND_CURRENCY_DECIMAL_DIGITS")
		cDecDigit2 = value;
	else if(variable == "SHIPPING_COST_VALUE")
		valShippingCost = value;

 } 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_OPTIONAL")
		strOrderOptional = value;
	else if(variable == "SEARCH_NORESULT")
		strSearchNoResult = value;
	else if(variable == "MAIL_SUBJECT")
		strMailSubject = value;
	else if(variable == "ADD_USER_TEXT")
		strAddUserText = value;
	else if(variable == "RECIPIENT")
		strRecipient = value;
	else if(variable == "REDIRECT")
		strRedirect = value;
	else if(variable == "SUBJECT")
		strSubject = value;

	// extra amount for low order
	else if(variable == "MIN_ORDER_EXTRA_CHARGE_TEXT")
		strMinOrderCharge = value;

	// extra amount for shipping
	else if(variable == "SHIPPING_COST_TEXT")
		strShippingCost = value;

	// font definition for cart output
	else if(variable == "FONT_FACE")
		fontFace = value;
	else if(variable == "FONT_COLOR")
		fontColor = value;

	// name of second currency
	else if(variable == "SECOND_CURRENCY")
		secondCurrency = value;

	// table headers for cart output
	else if(variable == "CARTHEADER_ORDERCOUNT")
		strOrderNum = value;
	else if(variable == "CARTHEADER_PRODUCT")
		strProduct = value;
	else if(variable == "CARTHEADER_ORDERNUMBER")
		strId = value;
	else if(variable == "CARTHEADER_PRODUCTPRICE")
		strPrice = value;
	else if(variable == "CARTHEADER_PRODUCTTOTAL")
		strProductTotal = value;
	else if(variable == "CARTHEADER_ORDERTOTAL")
		strOrderTotal = value;
	else if(variable == "CARTHEADER_ORDERCOST")
		strOrderCost = value;
	else if(variable == "CARTHEADER_TOTAL")
		strTotal = 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(variable == "EMAIL_OPTIONAL")
		emailOptional = (parseInt(value) == 1 ? true : false);
 } else if(image_or_str == "payment") {
	if(definePayments == false) {
		// init payments, if first call
		payment &= 0;
		definePayments = true;
	}
	if(variable == "NACHNAHME") {
		feeNACHNAHME = parseFloat(comma2dot(value));
		payment |= NACHNAHME;
	} else if(variable == "RECHNUNG") {
		feeRECHNUNG = parseFloat(comma2dot(value));
		payment |= RECHNUNG;
	} else if(variable == "BANK") {
		feeBANKEINZUG = parseFloat(comma2dot(value));
		payment |= BANKEINZUG;
	} else if(variable == "KREDIT") {
		feeKREDITKARTE = parseFloat(comma2dot(value));
		payment |= KREDITKARTE;
	}
 }
}

// *****************************************************
// the following codeline must be the last one !!!
// *****************************************************
isScriptLoaded = true;
