// Donberg Shopping basket based on "NOP Design JavaScript Shopping Cart"
//
// For more information on SmartSystems, or how NOPDesign can help you
// Please visit us on the WWW at http://www.dondesign.com/
//
// Requires basket.js, language.js, lists.js

// Total costs
var g_TotalCost = 0;
var g_NetCost = 0;

// Field names to transfer data via hidden fields and items to mailer function
var OutputItemQuantity	= '_QUANTITY_';
var OutputItemId		= '_ID_';
var OutputItemPacking	= '_PACKING_';
var OutputItemName 		= '_NAME_';
var OutputItemPrice		= '_PRICE_';
var OutputItemTotal		= '_TOTAL_';

var OutputOrderSubtotal	= '_SUBTOTAL';
var OutputOrderShipping	= '_SHIPPING';
var OutputOrderBanking	= '_BANKING';
var OutputOrderTax		= '_TAX';
var OutputOrderTotal	= '_TOTAL';


// Draws current shopping basket with submit button etc.
function ManageCart(Rate,Symbol) {
	var iPos 	= 0; //Number of products ordered
	var fTotal 	= 0; //Total cost of order
	var fTax	= 0; //Tax amount
	var fShipping	= 0; //Shipping amount
	var fBanking	= 0; //Banking amount
	var outTotal	= ""; //Total cost formatted as money
	var outTax		= ""; //Total tax formatted as money
	var outShipping	= ""; //Total shipping formatted as money
	var outBanking	= ""; //Total banking fees as money
	var out		= ""; //String to be written to page
	var formOut = ""; // Form string to be written to page...
	var showWarning = false;

	iPos = getCookie("Items");
	if ( iPos == null ) iPos = 0;

	out += "<h2>"+strCartTitle+"</h2>";
	out += "<FORM name='donform' id='donform' ACTION='"+urlCheckout+"' METHOD='POST' onSubmit='return ValidateCart(this)' onkeypress='return2tab(event,this)'>\n";
	if ( iPos == 0 ) {
		out += "<h1>"+strCartEmpty+"</h1><br><br><br><br><br><br><br>";
	} else {
		// Show header!
		out += "<TABLE class=\"doncart\" padding=0 spacing=0 border=0><tr>" +
					"<td class=\"donheader r\"><B>"+strQLabel+"</B></td>" +
					"<td class=\"donheader c\"><B>"+strSLabel+"</B></td>" +
					"<td class=\"donheader\"><B>"+strILabel+"</B></td>" +
					"<td class=\"donheader\"><B>"+strDLabel+"</B></td>" +
					"<td class=\"donheader r\"><B>"+strPLabel+"<br>"+strUnit+"</B></td>" +
					"<td class=\"donheader r\"><B>"+strTLabel+"</B></td>" +
					"<td class=\"donheader c\"><B>"+strRLabel+"</B></td></tr>";

		for ( i = 1; i <= iPos; i++ ) {
			NewOrder = "Order." + i;
			database = getCookie(NewOrder);

			f = database.split("|");

			fTotal	 += (parseInt(f[1]) * parseFloat(f[2]) );

			out += "<tr>";
			// Qty
			out += "<td class=\"donentry m r\"><input type='text' name='Q' class='qty' size=4 value=\"" + f[1] + "\" onChange=\"changeQuantity(this.form, "+i+", this.value);\"></td>";
			// Packing
			if ( parseFloat(f[4]) > 0 ) out += "<td class=\"donentry c m\">"+ f[4] + "</td>";
			else			    		out += "<td class=\"donentry c m\">"+ strNA + "</td>";
			// ID
			out += "<td class=\"donentry m\"><a target='item' href=\""+getURL(f[0])+"\">" + f[0] + "</a></td>";
			// Name
			var descript = f[3];
			descript = descript.replace("\n","<br>");
			out += "<td class=\"donentry m\">" + descript + "</td>";
			// Price
			out += "<td class=\"donentry m r\">";
			if (Rate!=1) {
				out += "<span class='gray'>" + Symbol + " " + moneyFormat(f[2]*Rate) + "</span>";
				out += "<br>";
			}
			out += MonetarySymbol + " " + moneyFormat(f[2]);
			out += "</td>";
			// Total
			out += "<td id=item"+i+" class=\"donentry m r\">";
			if (Rate!=1) {
				out += "<span class='gray'>" + Symbol + " " + moneyFormat(f[1]*f[2]*Rate) + "</span>";
				out += "<br>";
			}
			out += MonetarySymbol + " " + moneyFormat(f[1]*f[2]);
			out += "</td>";
			// Remove
			out += "<td class=\"donentry m c\" ALIGN=CENTER><input type=button value=\" "+strRButton+" \" onClick=\"RemoveFromCart(this.form,"+i+")\" class=\"remove\" style='width:90px;'></td></tr>";

			// create hidden fields - formOut is added at the end of the table.
			formOut += "<input type=hidden name=\"" + OutputItemId + i + "\" value=\"" + f[0] + "\">";
			formOut += "<input type=hidden name=\"" + OutputItemQuantity + i + "\" value=\"" + f[1] + "\">";
			formOut += "<input type=hidden name=\"" + OutputItemName	 + i + "\" value=\"" + f[3] + "\">";
			formOut += "<input type=hidden name=\"" + OutputItemPacking	 + i + "\" value=\"" + f[4] + "\">";
			formOut += "<input type=hidden name=\"" + OutputItemPrice    + i + "\" value=\"" + MonetarySymbol + moneyFormat(f[2]) + "\">";
			formOut += "<input type=hidden name=\"" + OutputItemTotal    + i + "\" value=\"" + MonetarySymbol + moneyFormat(f[1]*f[2]) + "\">";
		}

		if (fTotal<MinimumOrder) {
			fTotal=MinimumOrder;
			showWarning=true;
		}
		g_NetCost = fTotal;
		fTax 	  = getTax(fTotal);
		fShipping = getShipping();
		fBanking = getBanking(fTotal,fShipping,fTax);
		g_TotalCost = (fTotal + Math.max(0,fShipping) + Math.max(0,fBanking) + Math.max(0,fTax));

		// Show subtotal
		out += "<tr><td class=\"dontotal\" COLSPAN=5><B>"+strSUB+"</B></td>";
		out += "<td id='subtotal' class=\"dontotal\" COLSPAN=1><B>";
		if (Rate!=1) {
			out += "<span class='gray'>" + Symbol + " " + moneyFormat(fTotal*Rate) + "</span>";
			out += "<br>";
		}
		outTotal  	= MonetarySymbol+moneyFormat(fTotal);
		out += outTotal;
		out += "</B></td>";
		if (showWarning)
			out += "<td style=\"background:#ffff80; color:#000; font-size: 9px; width:100px;\" align='center'>"+strMinOrderSeeBelow+"</td>";
		else
			out += "<td class=\"dontotal\">&nbsp;</td>";
		out += "</tr>";

		// show taxes
		out += "<tr><td class=\"dontotal\" COLSPAN=5><B>"+strTAX+"</B><br>"+strTAXhint+"</td>";
		out += "<td id='vat' class=\"dontotal\" COLSPAN=1><B>";
		if (fTax<0) outTax='?.??';
		else {
			outTax=MonetarySymbol+moneyFormat(fTax);
			if (Rate!=1) {
				out += "<span class='gray'>" + Symbol + " " + moneyFormat(fTax*Rate) + "</span>";
				out += "<br>";
			}
		}
		out += outTax;
		out += "</B></td>";
		out += "<td class=\"dontotal\" COLSPAN=1>&nbsp;</td>";
		out += "</tr>";

		// Show estimated shipping costs
		out += "<tr><td class=\"dontotal\" COLSPAN=5><B>"+strSHIP+"</B></td>";
		out += "<td id='shipping' class=\"dontotal\" COLSPAN=1><B>";
		if (fShipping<0) outShipping='?.??';
		else {
			if (Rate!=1) {
				out += "<span class='gray'>" + Symbol + " " + moneyFormat(fShipping*Rate) + "</span>";
				out += "<br>";
			}
			outShipping=MonetarySymbol+moneyFormat(fShipping);
		}
		out += outShipping;
		out += "</B></td>";
		out += "<td class=\"dontotal\" COLSPAN=1>&nbsp;</td>";
		out += "</tr>";

		// Show estimated banking costs
		out += "<tr><td class=\"dontotal\" COLSPAN=5><B>"+strBANK+"</B></td>";
		out += "<td id='banking' class=\"dontotal\" COLSPAN=1><B>";
		if (fBanking<0) outBanking='?.??';
		else {
			if (Rate!=1) {
				out += "<span class='gray'>" + Symbol + " " + moneyFormat(fBanking*Rate) + "</span>";
				out += "<br>";
			}
			outBanking=MonetarySymbol+moneyFormat(fBanking);
		}
		out += outBanking;
		out += "</B></td>";
		out += "<td class=\"dontotal\" COLSPAN=1>&nbsp;</td>";
		out += "</tr>";

		// Show total
		out += "<tr><td class=\"dontotal\" COLSPAN=5><B>"+strTOTAL+"</B></td>";
		out += "<td id='total' class=\"dontotal\" COLSPAN=1><nobr><B>";
		if (Rate!=1) {
			out += "<span class='gray'>" + Symbol + " " + moneyFormat(g_TotalCost*Rate) + "</span>";
			out += "<br>";
		}
		out += MonetarySymbol+moneyFormat(g_TotalCost)
		out += "</B></nobr></td>";
		out += "<td class=\"dontotal\" COLSPAN=1>&nbsp;</td>";
		out += "</tr>";
		out += "</TABLE>\n";
		if ( MinimumOrder >= 0.01 && (g_NetCost < MinimumOrder || showWarning)) {
			out += "<div class='minOrderWarning'>"+strMinOrderPrompt+"</div>";
			out += "<div class='minOrderWarning' style='text-align:right; font-size:12px; font-weight:bold;'><a href='"+continue_link+"'><img src=\"\/images\/arrow_right_red_big.gif\" border=0> "+strContinue+"</a></div>";
		}
		out += "<p class='donnote'><b>"+strNote+"</b>\n";
		out += ""+strNote2+"</p>\n";

		// Now show box for customer to enter his contact details ------------------------------
		out += "<h3>"+strContact+"</h3>";

		out += "<TABLE class='contacttable'>";
		out += "<tr><td><b>* "+strCustType+"</b>: </td>";
		out += "<td id='cTypeIn'>";
		// Customer type
		out += "<input type=radio name='cType' id='cTypePrivate' value='Private' "+(getCustomerValue("CustomerType")=="Private"?"checked":"")+" onClick='changeCustomerType(this.form, this.form.cType, this.form.CustomerType)'><label for='cTypePrivate'>"+strPrivate+"</label><br>";
		out += "<input type=radio name='cType' id='cTypeBusiness' value='Business' "+(getCustomerValue("CustomerType")=="Business"?"checked":"")+" onClick='changeCustomerType(this.form, this.form.cType, this.form.CustomerType)'><label for='cTypeBusiness'>"+strBusiness+"</label><br>";
		// This is a helper variable to simplify the handling of the above radio button...
		out += "<input type=hidden name='CustomerType' value='"+getCustomerValue("CustomerType")+"'>";
		out += "</td></tr>";

		// Country
		out += "<tr><td id='countryIn'><b>* "+strCountry+"</b>: </td><td><select name='Country' onChange='changeCountry(this.form, this.form.Country);'>";
		var cJSON = getCountries();
		cObject = eval(cJSON);
		for (var key in cObject) {
		    out += '<option value="' + key + '">' + cObject[key] + '</option>';
		}
		out += "</td></tr>";
		// VAT No
		if (getCustomerValue("CustomerType")=='Business' && getTaxCode()=="E") {
		    out += "<tr><td id='vatIn'>"+strVAT+" </td><td><input type='text' size=16 name='VAT_No' onChange=\"updateVATNo(this.form);\"></td></tr>";
		}

		// Payment method.
		out += "<tr><td><b>* "+strPayment+"</b></td><td><select name='Payment' onChange='changePayment(this.form, this.form.Payment);'>";
		var cJSON = paymentMethods();
		cObject = eval(cJSON);
		for (var key in cObject) {
        	out += '<option value="' + key + '">' + cObject[key] + '</option>';
		}
		out += "</td></tr>";

		// Spacer
		out += "<tr><td colspan=2>&nbsp;</td></tr>";
		//out += "</TABLE>";

		// Now show box for customer to enter his contact details ------------------------------
		//out += "<h3>"+strContact+"</h3>";

		// Customer code (optional)
		//out += "<TABLE class='contacttable'>";
		out += "<tr><td>"+strCustCode+": </td><td><input type='text' size=8 name='Code'></td></tr>";
		// Customer + Company name depending of status of customer...
		if (getCustomerValue("CustomerType")=='Business') {
			out += "<tr><td id='companyIn'><b>* "+strCompany+"</b>: </td><td><input type='text' size=37 name='Company'> </td></tr>";
			out += "<tr><td id='nameIn'><b>* "+strCName+"</b>: </td><td><input type='text' size=37 name='Name'></td></tr>";
		} else {
			out += "<tr><td id='nameIn'><b>* "+strName+"</b>: </td><td><input type='text' size=37 name='Name'></td></tr>";
		}
		out += "<tr><td>"+strAddr1+": </td><td><input type='text' size=37 name='Address'> </td></tr>";
		out += "<tr><td>"+strAddr2+": </td><td><input type='text' size=37 name='Address_2'></td></tr>";
		out += "<tr><td>"+strCity+": </td><td><input type='text' size=37 name='City'> </td></tr>";
		if (getCountry()=="IE|N|N" || getCountry()=="IE-Ireland|N|N")
			out += "<tr><td>"+strCounty+": </td><td><input type='text' size=18 name='County'> </td></tr>";
		else if (getCountry()=="UK-Northern Ireland|E|N")
			out += "<tr><td>"+strZIP+": </td><td><input type='text' size=6 name='ZIP'></td></tr>"+"<tr><td>"+strCounty+": </td><td><input type='text' size=18 name='County'> </td></tr>";
		else if (getCountry()=="US-United States|I|I" || getCountry()=="US|I|I" || getCountry()=="CA|I|I" || getCountry()=="AU|I|I")
			out += "<tr><td>"+strZIPState+": </td><td><input type='text' size=6 name='ZIP'>&nbsp;&nbsp;&nbsp;<input type='text' size=12 name='State'></td></tr>";
		else
			out += "<tr><td>"+strZIP+": </td><td><input type='text' size=6 name='ZIP'></td></tr>";
		out += "<tr><td colspan=2>&nbsp;</td></tr>";
		out += "<tr><td id='emailIn'><b>* "+strEMail+"</b>: </td><td><input type='text' size=37 name='eMail'> </td></tr>";
		out += "<tr><td>"+strPhone+": </td><td><input type='text' size=37 name='Phone'><br><span style='font-size:8pt;'>Format: +49 (040) 123456...</span></td></tr>";
		out += "<tr><td>"+strFax+": </td><td><input type='text' size=37 name='Fax'></td></tr>";
		out += "<tr><td colspan=2>&nbsp;</td></tr>";

		out += "<tr><td>"+strSource+"</td><td><select name='Source'>";
        
   
		var cJSON = howAbout();
		cObject = eval(cJSON);
		for (var key in cObject) {
        	out += '<option value="' + key + '">' + cObject[key] + '</option>';
		}
        out += "</td></tr>";

        
        // EasytoFind
        out += "<tr><td>"+strEasytoFind+"</td><td><select name='EasyToFind'>";
        var cJSON = EasyToFind();
        cObject = eval(cJSON);
        for (var key in cObject) {
            out += '<option value="' + key + '">' + cObject[key] + '</option>';
        }
        out += "</td></tr>";

        //SearchTerms
        out += "<tr><td>"+strSearchTerms+": </td><td><input type='text' size=37 name='SearchTerms'><br><span class='small'>"+strSearchTermsHint+"</span></td></tr>";
        
        //hier enden die Abfragen
	
		out += "<tr><td style='text-align: center;'><b>* = "+strRequired+"</b></td><td>&nbsp;</td></tr>";

		out += "</TABLE>";
		out += "<span class='donnote'>"+strComments+":</span><br><textarea rows=3 cols=70 name='Comment'></textarea><br><br>\n";

		out += "<input type=hidden name=\""+OutputOrderSubtotal+"\" value=\""+ outTotal + "\">\n";
		out += "<input type=hidden name=\""+OutputOrderTax+"\" value=\""+ outTax + "\">\n";
		out += "<input type=hidden name=\""+OutputOrderShipping+"\" value=\""+ outShipping + "\">\n";
		out += "<input type=hidden name=\""+OutputOrderBanking+"\" value=\""+ outBanking + "\">\n";
		out += "<input type=hidden name=\""+OutputOrderTotal+"\" value=\""+ MonetarySymbol + moneyFormat(fTotal + Math.max(0,fShipping) + Math.max(0,fBanking) + Math.max(0,fTax)) + "\">\n";
		out += "<div style='text-align:right; padding: 10px; background:#fdfdcd; width: 600px'>\n";
		out += "<input type='button' class='printbasket' name='print' value='"+strPrintPage+"' onClick='javascript:window.print();'>&nbsp;&nbsp;&nbsp;&nbsp;\n";
		out += "<input type='submit' class='printbasket' value='"+strSubmitCart+"'>";
		out += "</div>";

		formOut += "</FORM>";
	}
	document.write(out);
	document.write(formOut); // Write hidden form data at the end.
	document.close();

	restoreCustomer(document.donform); // Fill data from cookie...
	doFade();
}



// Removes an item from a users shopping cart
function RemoveFromCart(theForm,RemOrder) {
	if ( confirm( strRemove ) ) {
		NumberOrdered = getCookie("Items");
		for ( i=RemOrder; i < NumberOrdered; i++ ) {
			NewOrder1 = "Order." + (i+1);
			NewOrder2 = "Order." + (i);
			database = getCookie(NewOrder1);
			setCookie (NewOrder2, database);
		}
		setCookie ("Items", NumberOrdered-1);
		NewOrder = "Order." + NumberOrdered;
		deleteCookie(NewOrder);
		storeCustomer(theForm);
		saveScrollPosition();
		location.href=location.href;
	}
}

// Changes quantity of an item in the shopping cart, called if the user edits the quantity in input field.
function changeQuantity(theForm,OrderItem,NewQuantity) {
	if ( isNaN(NewQuantity) || NewQuantity<0) {
		alert( strErrQty );
	} else {
		if ( NewQuantity==0) RemoveFromCart(theForm,OrderItem);

		NewOrder = "Order." + OrderItem;
		database = getCookie(NewOrder);

		f = database.split("|");

		dbUpdatedOrder = f[0] + "|" + NewQuantity + "|" + f[2] + "|" + f[3] + "|" + f[4];
		strNewOrder = "Order." + OrderItem;
		deleteCookie(strNewOrder);
		setCookie(strNewOrder, dbUpdatedOrder);
		storeCustomer(theForm);
		saveScrollPosition();
		addFade('item'+OrderItem);
		addFade('subtotal');
		addFade('vat');
		addFade('total');
		location.href=location.href;
	}
}

// Update form data
function updateVATNo(theForm) {
	if (theForm.VAT_No.value!='' && !checkVATNumber(theForm.VAT_No.value)) {
		alert(strVATPrompt);
		return false;
	} else if (theForm.VAT_No.value!='') {
		theForm.VAT_No.value = checkVATNumber(theForm.VAT_No.value);
	}
	storeCustomer(theForm);
	saveScrollPosition();
	addFade('vat');
	addFade('total');
	location.href=location.href;
}

// Update costs after country change...
function changeCountry(theForm, selected) {
	value = selected.value;
	if (value.indexOf("|", 0)<0) return false; // This is not useful...
	var c = value.split("|");
	//alert ("Country: "+c[0]+"\nVAT Code: "+c[1]+"\nShipping Code: "+c[2]);
	storeCustomer(theForm);
	saveScrollPosition();
	addFade('vatIn');
	addFade('vat');
	addFade('shipping');
	addFade('banking');
	addFade('total');
	location.href=location.href;
}

// Update payment costs after payment method change...
function changePayment(theForm, selected) {
	value = selected.value;
	if (value==0 || value==1) return false; // This is not useful...
	// alert ("Payment: "+value);
	storeCustomer(theForm);
	saveScrollPosition();
	addFade('banking');
	addFade('total');
	location.href=location.href;
}

// Update form after customer type change: Read value of radio button and store in helper field, save state and the reload the page.
function changeCustomerType(theForm, radiobutton, helper) {
    var bChecked = false;
    var rlen = radiobutton.length;
    for ( i=0; i < rlen; i++ ) {
		if ( radiobutton[i].checked ) {
			helper.value=radiobutton[i].value;
		}
    }
	storeCustomer(theForm);
	saveScrollPosition();
	addFade('companyIn');
	addFade('vatIn');
	addFade('vat');
	addFade('total');
	location.href=location.href;
}


// Read current country from cookie...
function getCountry() {
	var s = getCustomerValue("Country");
	if (s==null || s=='' || s=='0' || s=='1') return '0'; // Unknown country.
	return s;
}

// Read current banking from cookie...
function getPayment() {
	var s = getCustomerValue("Payment");
	if (s==null || s=='' || s=='0' || s=='1') return '0'; // Unknown Payment methos.
	return s;
}

// Read current country from cookie...
function getCustomerValue(name) {
	var s = getCookie("Customer");
	if (s==null || s=='') return ''; // Unknown country.
	var data = s.split('|');
	for (j=0; j<data.length; j++)  {
		d = data[j];
		var e = d.split(":");
		if (e[0]==name) return unescape(e[1]);
	}
	return null;
}

// Get total tax
function getTax(total) {
	c = getTaxCode();
	if (c=='N') return total * TaxRate; // Nation
	if (c=='I') return 0;
	if (c=='E') {
		//alert(getCustomerValue('VAT_No'));
		if (getCustomerValue('VAT_No')!=null && 
				getCustomerValue('VAT_No').length>5 &&
				getCustomerValue("CustomerType")=="Business") {
			if (checkVATNumber(getCustomerValue('VAT_No'))) {
				return 0;
			} else {
				return total * TaxRate;
			}
		}
		else return total * TaxRate;
	}
	return -0.001;
}
// Get total shipping
function getShipping() {
	c = getShippingCode();
	if (c=='N') return 5.95; // National in advance is 5.95
	if (c=='E') return 7.50; // EU
	if (c=='I') return 10.00; // World
	return -0.001;
}
// Get baking fees
function getBanking(fTotal,fShipping,fTax) {
	c = getBankingCode();
	var taxCode = getTaxCode();
	var country = getCountry();
	if (c=='Visa') return 0;
	if (c=='MasterCard') return 0;
	if (c=='CreditCard') return 0;
	if (c=='PayPal') {
		if (taxCode=='I')
			return (0.039*(fTotal + Math.max(0,fShipping) + Math.max(0,fTax)));
		else
			return (0.035*(fTotal + Math.max(0,fShipping) + Math.max(0,fTax)));
	}
	if (c=='Moneybookers')
		return (0.019*(fTotal + Math.max(0,fShipping) + Math.max(0,fTax)));
	if (c=='Transfer') {
		if (taxCode=='I' && country!="CH|I|I") return 26.35; else return 0;
	}
	if (c=='Cheque') {
		if (taxCode=='I') return -1; else return 3;
	}
	return -0.001;
}
// get current tax code: National, Eu, International
function getTaxCode() {
	var t = getCountry();
	if (t==0) return -1;
	var s = t.split("|");
	return s[1];
}
// get current shipping code: National, Eu, International
function getShippingCode() {
	var t = getCountry();
	if (t==0) return -1;
	var s = t.split("|");
	return s[2];
}

function getBankingCode() {
	var t = getPayment();
	if (t==0) return -1;
	return t;
}

function storeCustomer(theForm) {
	var s = '';
	for (i=0;i<theForm.length;i++) {
		var t=theForm.elements[i];
		if (t.name != "Q" &&  // Quantity field
				t.type.toLowerCase()!="submit" &&  // Buttons shall not be stored...
				t.type.toLowerCase()!="button" &&
				t.type.toLowerCase()!="reset" &&
				t.type.toLowerCase()!="radio" &&   // Radio buttons are stored in helper object
				(t.type.toLowerCase()!="hidden" || t.name.substr(0,1)!="_")) { // Hidden variables starting with _ shall not be stored.
			s+=t.name+":"+escape(t.value)+"|";
		}
	}
	exp = new Date();
	exp.setTime(exp.getTime() + (5*365*24*60*60*1000));
	setCookie("Customer", s, exp);
}

function restoreCustomer(theForm) {
	var s = getCookie("Customer");
	if (s==null || s=='') return false;
	var data = s.split('|');
	for (i=0;i<theForm.length;i++) {
		var t=theForm.elements[i];
		if (t.name != "Q" &&  // Quantity field
				t.type.toLowerCase()!="submit" &&
				t.type.toLowerCase()!="button" &&
				t.type.toLowerCase()!="reset" &&
				t.type.toLowerCase()!="hidden"){
			for (j=0; j<data.length; j++)  {
				d = data[j];
				var e = d.split(":");
				if (t.name==e[0]) t.value = unescape(e[1]);
			}
		}
	}
	restoreScrollPosition();
}

// Test if basket meets all requirements to be submitted...
function ValidateCart( theForm ) {
	storeCustomer(theForm);
	testValue('Name'); testValue('Country'); testValue('eMail');
	if (!document.donform.elements['cType'][0].checked &&
		!document.donform.elements['cType'][1].checked) {
		//fadeIn('cTypeIn',255,255,0);
		document.getElementById('cTypeIn').style.backgroundColor='#ffff80';
		alert(strTypePrompt);
		return false;
	} else {
		document.getElementById('cTypeIn').style.backgroundColor='#ffffff';
	}
	if (!testValue('Name')) {
		theForm.Name.focus();
		fadeIn('nameIn',255,255,0);
		alert(strNamePrompt);
		return false;
	}
	if (theForm.VAT_No && theForm.VAT_No.value!='' && !checkVATNumber(theForm.VAT_No.value)) {
		alert(strVATPrompt);
		fadeIn('vatIn',255,255,0);
		theForm.VAT_No.style.background='#ffff80';
		theForm.VAT_No.focus();
		return false;
	} else if (theForm.VAT_No && theForm.VAT_No.value!='') {
		theForm.VAT_No.style.background='#ffffff';
		theForm.VAT_No.value = checkVATNumber(theForm.VAT_No.value);
	}
	if (!testValue('Country')) {
		fadeIn('countryIn',255,255,0);
		alert(strCountryPrompt);
		return false;
	}
	if (!testValue('eMail')) {
		fadeIn('emailIn',255,255,0);
		theForm.eMail.focus();
		alert(strEMailPrompt);
		return false;
	}

	if ( MinimumOrder >= 0.01 ) {
		if ( g_NetCost < MinimumOrder ) {
		//	alert( strMinOrderPrompt );
		//	return false;
		}
	}
	return true;
}

// Test if required field is set and hightlight if not.
function testValue( field ) {
	var field = document.donform.elements[field];
	var value = field.value;
	if (field.style) {
		if (value==null || value=='' || value=='0') { field.style.background='#ffff80'; }
		else { field.style.background=''; return true; }
	}
	return false;
}

// Do not submit form if "RETURN" is clicked but jump to next field (as tab does).
function return2tab(e,theform) {
	var o = e.target || e.srcElement;
	if (o && !/submit|reset|textarea|button/i.test(o.type)) {;
		if (e.keyCode == 13 ) {
			if (e.preventDefault) e.preventDefault();
			else e.returnValue = false;
			var objects = theform.elements;
			newFocus = 0;
			for (var i = 0; i < objects.length; i++ ) {
				if ( objects[i] == o ) {
					for (var j = i + 1; j < objects.length; j++ ) {
						if ( objects[j] && !/hidden|radio|checkbox/i.test(objects[j].type) && !objects[j].disabled ) { newFocus = j; break; }
					};
				};
				if (newFocus>0) {o.blur(); objects[newFocus].focus(); break; } // the focus method creates an error in Firefox - but it's not critical.
			};
		};
		return true;
	};
}

// Save, restore and delete scroll position of browser window in shopping cart...
function saveScrollPosition() {
	var scrollPosition;
	if (window.pageYOffset)
	    scrollPosition = window.pageYOffset;
	else if (document.documentElement.scrollTop)
	    scrollPosition = document.documentElement.scrollTop;
	else
    	scrollPosition = document.body.scrollTop;
       setCookie('yPos',scrollPosition);
}
function restoreScrollPosition() {
	var scrollPosition=getCookie('yPos');
	if ( scrollPosition == null ) return false;
	window.scrollTo(0, scrollPosition);
	clearScrollPosition();
	return true;
}
function clearScrollPosition() {
	deleteCookie('yPos');
}

// Get Item URL to current Order Code.
function getURL(code) {
	var cURL = "";
	cURL = code.replace(/^\s\s*/, '').replace(/\s\s*$/, ''); // Trim
	cURL = cURL.toLowerCase();
	cURL = str_replace(" ","_",cURL);
	cURL = str_replace("/","-",cURL);
	cURL = str_replace("\\","-",cURL);
	cURL = str_replace("ä","a",cURL);
	cURL = str_replace("ö","o",cURL);
	cURL = str_replace("ü","u",cURL);
	cURL = str_replace("ß","s",cURL);
	//cF := CHARONLY( "0123456789abcdefghijklmnopqrstuvwxyz-_.+", cF )
	cURL = cURL.replace(/[^a-z0-9_.+-]/, ''); // remove illegal characters...
	//alert(cURL);
	return "/descript/"+cURL.substring(0,1)+"/"+cURL+".htm";
}

// String replace function for JavaScript
function str_replace(search, replace, subject) {
    return subject.split(search).join(replace);
}

