/*********************************************************************
* shop with catalogue, cart, payment process + final order email
*********************************************************************/
var mh_shop_path  = "../shop";

var mhshop = {

conf : {
	cata_load : "./products.js",
	cata_save : "./catalogue.php",
	shop_page : "/shop/shop.html",
	catalogue : mh_shop_path+"/products.js",
	addr_form : mh_shop_path+"/addr_form.html",
	addr_disp : mh_shop_path+"/addr_display.html",
	cmnt_form : mh_shop_path+"/comment_form.html",
	cmnt_disp : mh_shop_path+"/comment_display.html",
	paym_form : mh_shop_path+"/paym_form.html",
	paym_disp : mh_shop_path+"/paym_display.html",
	ppal_form : mh_shop_path+"/paypal_form.html",
	bank_form : mh_shop_path+"/bank_form.html",
	cod_form  : mh_shop_path+"/cod_form.html",
	conf_form : mh_shop_path+"/confirm_form.html",
	tax       : 0.19,
	shipping  : 5.90
},

langtexts : {
	"CART_NAV_CART" : "Warenkorb", 
	"CART_NAV_ADDR" : "Adresse", 
	"CART_NAV_PAYM" : "Zahlungsart", 
	"CART_NAV_CONF" : "Best&auml;tigen", 
	"CART_NAV_END"  : "Ende" 
},

/**************************************************************************
* javscript lib
***************************************************************************/
lib : {
	Cookie : function (nam, val, days, dom, pat, sec) { 
		this.name = nam; 
		this.value = val;
		//this.expires = days; /* # days */

		this.domain = dom;
		this.path = pat;
		this.secure = sec;
		
		var today = new Date();
		today.setTime( today.getTime() );

		if ( days )
		{
			//days = days * 1000 * 60 * 60 * 24;
			this.expires = new Date( today.getTime() + (days * 1000 * 60 * 60 * 24) );
		}

		this.save = function () {
			document.cookie = this.name + "=" +escape( this.value ) +
			( ( this.expires ) ? ";expires=" + this.expires.toGMTString() : "" ) +
			( ( this.path ) ? ";path=" + path : "" ) +
			( ( this.domain ) ? ";domain=" + domain : "" ) +
			( ( this.sec ) ? ";secure" : "" );
		}

		this.setValue = function (val, days) {
			this.value = val;
		}		
		
		this.remove = function () {
			this.setValue("", -1);
		}
	},

	getCookie : function (nam) {
		var nameEQ = nam + "=";
		//alert("getCookie:"+document.cookie);
		var ca = document.cookie.split(';');
		for (var i=0; i < ca.length; i++) 
		{
			var c = ca[i];
			while (c.charAt(0) == ' ') 
			{
				c = c.substring(1,c.length);
			}
			if (c.indexOf(nameEQ) == 0) 
				return new this.Cookie(nam, unescape(c.substring(nameEQ.length,c.length)));
		}
		return null;
	},	

	storeValue: function (nam, val, persist)
	{
		var namchk = /^\w+$/i;
		if (namchk.test(nam) == false)
			return;

		if (persist == true)
			localStorage.setItem(nam, val);
		else
			sessionStorage.setItem(nam, val);
	},

	loadValue: function (nam) 
	{
		var namchk = /^\w+$/i;
		if (namchk.test(nam) == false)
			return;
		if (sessionStorage.getItem(nam))
			return sessionStorage.getItem(nam);
		else
			return localStorage.getItem(nam);
	},

	removeValue: function(nam) 
	{
		if (sessionStorage.getItem(nam))
			sessionStorage.removeItem(nam);
		else
			localStorage.removeItem(nam);
	},
	
	storeArray : function (nam, arr, pers)
	{
		var text = nam+"=date";
		for (var att in arr)
		{
			text += '&'+att+"="+escape(arr[att]);
		}
		//var ck = new this.Cookie(name, text);
		//ck.save();
		this.storeValue(nam, text, pers);
	},

	loadArray : function (name)
	{
		var arr = new Array();
		//var ck = this.getCookie(name);
		var dat = this.loadValue(name);
		if (dat) 
		{
			//var dat = unescape(ck.value);
			var pairs = dat.split ("&");
			for (i = 0; i < pairs.length; i++) 
			{
				var sepa = pairs[i].split("=");
				if (sepa[0] != name) 
				{
					arr[sepa[0]] = unescape(sepa[1]);
				}
			}
		} 
		return arr;
	},
	
	Content : function(curl) 
	{
		this.status = "";
		var req;
		if (!curl) {
			alert("Error in Content-URL:"+curl);
			return;
		}

		// check browser ?
		if (window.XMLHttpRequest) 
		{
			req = new XMLHttpRequest();
		} 
		else if (window.ActiveXObject) 
		{
			req = new ActiveXObject("Microsoft.XMLHTTP");
		}

		// timestamp avoids  cache
		if (curl.indexOf('?') > 0) {
			curl += "&tmstmp=" + escape((new Date()).getTime());
		} else {
			curl += "?tmstmp=" + escape((new Date()).getTime());
		}
		
		//Sync  !
		req.open("GET", curl, false);	
		req.send(null);
	
		while (this.status != 4) {
			this.status = req.readyState;
		}
	
		if (req.status == 200) {
			this.text = req.responseText;
			this.status = "OK";
		} 
		else 
		{
			// ???
			if (req.status == 0) 
			{
				this.text = req.responseText;
				this.status = "OK";
			} 
			else 
			{
				this.text = "";
				this.status = "Error reading "+curl+":" + req.status;
			}
		}
		return this;
	},

	PostContent : function(curl, escdata) 
	{
		this.status = "";
		var req;
		//var escdata = escape(data);
		if (!curl) {
			alert("Error in postContent-URL:"+curl);
			return;
		}

		
		// check browser ?
		if (window.XMLHttpRequest) 
		{
			req = new XMLHttpRequest();
		} 
		else if (window.ActiveXObject) 
		{
			req = new ActiveXObject("Microsoft.XMLHTTP");
		}

		//Sync  !
		req.open("POST", curl, false);	
		//Send header
		req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		req.setRequestHeader("Content-length", escdata.length);
		req.setRequestHeader("Connection", "close");
		
		req.send(escdata);
	
		while (this.status != 4) {
			this.status = req.readyState;
		}
	
		if (req.status == 200) {
			this.text = req.responseText;
			this.status = "OK";
		} 
		else 
		{
			// ???
			if (req.status == 0) 
			{
				this.text = req.responseText;
				this.status = "OK";
			} 
			else 
			{
				this.text = "";
				this.status = "Error posting to "+curl+":" + req.status;
			}
		}
		return this;
	},
	
	rpad : function (txt, len, chr)
	{
		var text = txt.substr(0, len);
		for (var i = text.length; text.length < len; i++)
		{
			if (chr)
				text = text.concat(chr);
			else
				text = text.concat(' ');
		}
		//alert(txt+"->"+text);
		return text;
	},

	lpad : function (txt, len, chr)
	{
		var text = "";
		if (txt) 
			text = txt.substr(0, len);
		else 
			text = "";
		for (var i = text.length; text.length < len; i++)
		{
			if (chr)
				text = chr.concat(text);
			else
				text = ' '.concat(text);
		}
		//alert(txt+"->"+text);
		return text;
	},

	umlautEncode : function(txt) {
		var ret = txt;
		ret = ret.replace(/ä/g, '&auml;');
		ret = ret.replace(/ö/g, '&ouml;');
		ret = ret.replace(/ü/g, '&uuml;');
		ret = ret.replace(/Ä/g, '&Auml;');
		ret = ret.replace(/Ö/g, '&Ouml;');
		ret = ret.replace(/Ü/g, '&Uuml;');
		ret = ret.replace(/ß/g, '&szlig;');		
		return ret;
	},
	
	fmtPrice : function(num) {
		return (num.toFixed(2)).replace(/\./, ',');
	}

},

/******************************************************************
* catalogue 
******************************************************************/
catalogue : {
	products  : [],
	divid     : "",
	Product : function (prdid, categ, page, txt1, txt2, img, price, tax) 
	{
		if (!prdid) {return;};
		this.prdid = prdid;
		this.categ = categ;
		this.page = page;
		this.txt1 = txt1;
		this.txt2 = txt2;
		this.img = img;
		this.price = price;
		this.tax = (price/(1+mhshop.conf.tax)).toFixed(2);		
		return this;
	},

	addPrd : function (prd) {
		//alert(prd);
		if (prd) {
			this.products[this.products.length] = prd;
		}
	},

	setPrd : function (i, prd) {
		if (prd) {
			this.products[i] = prd;
		}
	},

	rmPrd : function (no) {
		this.products.splice(no, 1);
		this.show(this.divid);
	},
	getPrd : function (no) {
		var p = this.products[no];
		if (typeof (p.price) == "string") {
			p.price = p.parseFloat(p.price);
		}
		return p;
	},
	getPrd2Id : function (id) {
		var i;
		for (i=0; i < this.products.length; i++) {
			if (this.products[i].prdid == id) {
				return this.getPrd(i);
			}
		}
	},

	loadPrds : function () {
		var dpath = mhshop.conf.catalogue;
		var cnt = new mhshop.lib.Content(dpath);
		if (cnt) {
			if (cnt.status == "OK") {
				//alert(cnt.status+':'+cnt.text);
				this.products = JSON.parse(cnt.text);
			}
		}
		for (i=0; i < this.products.length; i++) {
			/**/
			if (this.products[i].page)
				this.products[i].page = unescape(this.products[i].page);
			if (this.products[i].txt1)
				this.products[i].txt1 = unescape(this.products[i].txt1);
			if (this.products[i].txt2)
				this.products[i].txt2 = unescape(this.products[i].txt2);
			/**/
			if (typeof (this.products[i].price) == "string")
				this.products[i].price = parseFloat(this.products[i].price);
		}
	},

	loadCat : function () {
		var dpath = mhshop.conf.cata_load;
		var cnt = new mhshop.lib.Content(dpath);
		if (cnt) {
			if (cnt.status == "OK") {
				//alert(cnt.status+':'+cnt.text);
				this.products = JSON.parse(cnt.text);
			}
		}
		for (i=0; i < this.products.length; i++) {
			/**/
			if (this.products[i].page)
				this.products[i].page = unescape(this.products[i].page);
			if (this.products[i].txt1)
				this.products[i].txt1 = unescape(this.products[i].txt1);
			if (this.products[i].txt2)
				this.products[i].txt2 = unescape(this.products[i].txt2);
			/**/
			if (typeof (this.products[i].price) == "string")
				this.products[i].price = parseFloat(this.products[i].price);
		}
	},

	saveCat : function () {
		var dpath = mhshop.conf.cata_save;
		for (i=0; i < this.products.length; i++) {
			/**/
			if (this.products[i].page)
				this.products[i].page = escape(this.products[i].page);
			if (this.products[i].txt1)
				this.products[i].txt1 = escape(this.products[i].txt1);
			if (this.products[i].txt2)
				this.products[i].txt2 = escape(this.products[i].txt2);
			/**/
			if (typeof (this.products[i].price) == "string")
				this.products[i].price = parseFloat(this.products[i].price);
			//this.products[i].tax = this.products[i].tax.toFixed(2);
		}
		
		var prds = mhshop.catalogue.products
		var post = "CATALOGUE="+escape(JSON.stringify(prds,null,2));
		
		for (i=0; i < this.products.length; i++) {
			/**/
			if (this.products[i].page)
				this.products[i].page = unescape(this.products[i].page);
			if (this.products[i].txt1)
				this.products[i].txt1 = unescape(this.products[i].txt1);
			if (this.products[i].txt2)
				this.products[i].txt2 = unescape(this.products[i].txt2);
		}

		//alert(dpath+"\n"+post);
		var cnt = new mhshop.lib.PostContent(dpath, post);
		
		if (cnt) {
			if (cnt.status == "OK") {
				//alert(cnt.status+':'+cnt.text);
				alert("Saved");
				return;
			}
			alert("Save failed:"+cnt.text);
		}
		alert("Save failed:"+cnt.status);
	},

	formCreatePrd : function () {
		var frm = document.forms['PRD'];
		//alert (typeof(frm)+frm.name);
		
		var prd = new this.Product(
			frm.elements['PRDID'].value,
			frm.elements['CATEG'].value,
			frm.elements['PAGE'].value,
			frm.elements['TXT1'].value,
			frm.elements['TXT2'].value,
			null,
			//frm.elements['IMG'].value,
			parseFloat(frm.elements['PRICE'].value.replace(/,/,'.'))
			);
		//this.products[this.products.length]= prd;
		
		this.addPrd(prd);
		this.show(this.divid);
	},

	formUpdatePrd : function (i) {
		var frm = document.forms['PRD'];
		//alert (typeof(frm)+frm.name);
		
		var prd = new this.Product(
			frm.elements['PRDID'].value,
			frm.elements['CATEG'].value,
			frm.elements['PAGE'].value,
			frm.elements['TXT1'].value,
			frm.elements['TXT2'].value,
			null,
			//frm.elements['IMG'].value,
			parseFloat(frm.elements['PRICE'].value.replace(/,/,'.'))
			);
		//this.products[this.products.length]= prd;
		this.setPrd(i, prd);
		this.show(this.divid);
	},
	
	show : function (id) {
		var i;
		this.divid = id;
		var cat = '<table style="width:100%;">';
		cat +='<tr>'
			+'<th>Nr</th>'
			+'<th>Artikel Nr.</th>'
			+'<th>Seite</th>'
			+'<th>Text1</th>'
			+'<th>Text2</th>'
			+'<th>Preis (0.00 &euro;)</th>'
			+'<th><a href="javascript:mhshop.catalogue.showForm(-1);">neu</a></th>'
			+'</tr>';

		for (i = 0; i < this.products.length; i++) {
			//alert(i+':'+this.products[i].prdid);
			var p = this.getPrd(i);
			cat +='<tr>'
				+'<td>'+i+'.</td>'
				+'<td>'+p.prdid+'</td>'
				+'<td>'+(p.page ? '<a href="../index.php/'+p.page+'">'+p.page+'</a>' : 'Seite?')+'</td>'
				//+'<td><img src="'+p.img+'" style="width:40px;height:40px;"/></td>'
				+'<td>'+p.txt1+'</td>'
				+'<td>'+p.txt2+'</td>'
				+'<td style="text-align:right;">'+mhshop.lib.fmtPrice(p.price)+'</td>'
				+'<td><a href="javascript:mhshop.catalogue.showForm('+i+');">&auml;ndern</a></td>'
				+'<td><a href="javascript:mhshop.catalogue.removePrd('+i+');">l&ouml;schen</a></td>'
				+'</tr>';
		}
		
		cat +='</table></div>';
		cat +='<hr>';

		cat +='<div><a name="save"></a>';
		cat += '<form name="SAVEPRD" action="javascript:mhshop.catalogue.saveCat();">';
		cat += '<input type="submit" value="speichern">';
		cat += '</form></div>';

		e = document.getElementById(id);
		if (e) {
			e.innerHTML = cat;
		}
	},
	
	showForm : function (pno) {

		var cat = '<div><a name="prd"></a>';
		if (pno >= 0) {
			cat += '<form name="PRD" action="javascript:mhshop.catalogue.formUpdatePrd('+pno+');">';
		} else {
			cat += '<form name="PRD" action="javascript:mhshop.catalogue.formCreatePrd();">';
		}
		cat += '<table><tr>'
				+'<th colspan="2">Artikel'+((pno >= 0)? pno : "new")+'</th></tr>'
				+'<tr><td>Artikel Nr.(a-z0-9-_ / kein &auml;&uuml;&ouml;&szlig;)</td>'
				+'<td><input name="PRDID" type="text" maxlength="20" size="10"></td></tr>'
				+'<tr><td>Klasse</td>'
				+'<td><select name="CATEG">'
					+'<option value="PRODUCT" selected>Produkt</option>'
					+'<option value="PRODUCT_TEXT" selected>Produkt+Text</option>'
					+'<option value="SHIPPING">Lieferkosten</option>'
					+'</select>'
				+'</td></tr>'
				//+'<TR><td>Bild(?)</td>'
				//+'<td><input name="IMG" type=hidden" maxlength="100" size="60">n/a</td></tr>'
				+'<TR><td>Seite (a-z0-9-_)</td>'
				+'<td><input name="PAGE" type="text" maxlength="100" size="60"></td></tr>'
				+'<TR><td>Text1</td>'
				+'<td><input name="TXT1" type="text" maxlength="100" size="60"></td></tr>'
				+'<tr><td>Text2</td>'
				+'<td><input name="TXT2" type="text" maxlength="100" size="60"></td></tr>'
				+'<tr><td>Preis</td>'
				+'<td><input name="PRICE" type="text" maxlength="10" size="10"></td></tr>';
		if (pno >= 0) {
			cat +='<tr><td><input type="button" value="cancel" onclick="mhshop.catalogue.show(\''+this.divid+'\')"></td>'
				+'<td><input type="submit" value="change"></td></tr>';
		} else {
			cat +='<tr><td><input type="button" value="cancel" onclick="mhshop.catalogue.show(\''+this.divid+'\')"></td>'
				+'<td><input type="submit" value="add"></td></tr>';
		}
		cat += '</table></form></div>';
		
		e = document.getElementById(this.divid);
		if (e) {
			e.innerHTML = cat; 
			//+"<hr/>"+e.innerHTML;
		}

		var frm = document.forms['PRD'];
		//alert (typeof(frm)+frm.name);
		var prd;
		if (pno >= 0) {
			prd = this.getPrd(pno);
			frm.elements['PRDID'].value = prd.prdid;
			frm.elements['CATEG'].value = prd.categ;
			frm.elements['PAGE'].value = prd.page;
			frm.elements['TXT1'].value = prd.txt1;
			frm.elements['TXT2'].value = prd.txt2;
			//frm.elements['IMG'].value,
			frm.elements['PRICE'].value = mhshop.lib.fmtPrice(prd.price);
		//} else {
			//prd = new this.Product("", "PRODUCT","", "","", "", 0);
			//alert(prd.prdid);

		}
	},
	
	showTmpl : function (id, tmpl) {
		var i;
		this.divid = id;

		var e = document.getElementById(id);
		if (!e) {
			return;
		}

		var cnt = mhshop.lib.Content(mh_shop_path+"/"+tmpl+".html");
		if (cnt.status != "OK") {
			e.innerHTML = "Load of template "+tmpl+" failed.";
			return;
		}
		
		var text = "";
		// copy string
		for (i = 0; i < this.products.length; i++) {
			var ptxt = cnt.text.substring(0);
			//alert(i+':'+this.products[i].prdid);
			var p = this.products[i];
			ptxt = ptxt.replace(/\[text1\]/, p.txt1);
			ptxt = ptxt.replace(/\[text2\]/, p.txt2);
			ptxt = ptxt.replace(/\[price\]/, p.price);
			ptxt = ptxt.replace(/\[image\]/, p.img);
			ptxt = ptxt.replace(/\[ID\]/,    p.prdid);
			ptxt = ptxt.replace(/\[ID\]/,    p.prdid);
			text += ptxt;
		}
		text += '<div style="clear:both;"></div>';
		e.innerHTML = text;
	}
},

/*********************************************************************
* cart
*********************************************************************/
cart : {
	langtxt : function (ali) {
		if (mhshop.langtexts[ali])
			return mhshop.langtexts[ali];
		else
			return ali;
	},

	CartPos : function (prdid, cnt) {
		this.prdid = prdid;
		this.cnt = cnt;
		return this;
	},

	MethodName : { 
		"PAYPAL" : "Paypal" , 
		"COD"    : "Nachnahme" , 
		"BANK"   : "\u00DCberweisung"  
	},
	
	step: "",
	Paymeth : "",
	Comment : "",
	needText : false,
	Cart : Array (),
	Address : Array (),
	products : Array(),
	
	addressFromForm : function ()
	{
		var adr = new Array();
		
		frm = document.forms["ADDRESS"];
		if (frm)
		{
			for (i = 0; i < frm.elements.length; i++) 
			{
				var elm = frm.elements[i];
				if ((elm.name) && (elm.value.length < 100)) {
					adr[elm.name] = elm.value;
				}
			}
			this.Address = adr;
			return true;
		}
		return false;
	},

	checkAddress : function ()
	{
		chk = true;
		fld = "";
		for (var nm in this.Address)
		{
			if (this.Address[nm].length <= 100) {
				if ((nm == "NAME") && (this.Address[nm].length < 5)) {
					chk = false;
					fld = nm;
				}

				if ((nm == "STREET") && (this.Address[nm].length < 5)) {
					chk = false;
					fld = nm;
				}

				if ((nm == "CITY") && (this.Address[nm].length < 3)) {
					chk = false;
					fld = nm;
				}

				if ((nm == "ZIP") && ((this.Address[nm].length < 4) || (this.Address[nm].length > 8))) {
					chk = false;
					fld = nm;
				}

				if ((nm == "EMAIL") && (!this.Address[nm].match(/^[a-z0-9._-]+@[a-z0-9._-]+\.[a-z]{2,6}$/gi))) {
					chk = false;
					fld = nm;
				}
					
			} else {	
				chk = false;
			}
		}
		if (!chk) {
			alert("Bitte geben Sie ein korrekte Adresse ein: "+fld+" !");
		}
		return chk;
	},
	
	fillAddressForm : function ()
	{
		var adr = this.Address;
		var frm = document.forms['ADDRESS'];
		if (frm)
		{
			for (var nm in adr) 
			{
				var elm = frm.elements[nm];
				if (elm)
				{	
					elm.value = adr[nm];
				}
			}
		} 
	},
	
	storeAddress : function ()
	{
		mhshop.lib.storeArray("address", this.Address);
	},

	readAddress : function ()
	{
		//this.address = new Address ();
		var adr = mhshop.lib.loadArray('address');
		if (adr)
		{
			this.Address = adr;
		}
	},
	
	storePayment: function ()
	{
		var ck = new mhshop.lib.Cookie("paym", this.Paymeth);
		ck.save();
		//mhshop.lib.storeValue("paymeth", this.Paymeth);
	},
	
	readPayment : function () 
	{
		var ck = mhshop.lib.getCookie('paym');
		if (ck) {
			this.Paymeth = ck.value;
		}
		/*var pay = mhshop.lib.loadValue("paymeth");
		if (pay)
		{	
			this.Paymeth = pay;
		}*/
	},
	
	/* ? needed */
	createCart : function() 
	{
		//this.CartCookie = new mhshop.lib.Cookie("cart", "");
	},

	clearCart: function ()
	{
		this.Cart = new Array();
	},
	
	addPos : function (prdid, cnt) 
	{
		var fnd = false;
		if (!cnt) {
			cnt = 1;
		}
		for (var i = 0; i < this.Cart.length; i++) 
		{
			if ((this.Cart[i].prdid == prdid) && (mhshop.catalogue.getPrd2Id(prdid)))
			{
				/* add to cnt only if cnt is given */
				/* currently only 1 / pos */
				this.Cart[i].cnt = 1;
				fnd = true;
			}
		}
		if (!fnd) 
		{
			if (mhshop.catalogue.getPrd2Id(prdid))
			{
				this.Cart[this.Cart.length] = new this.CartPos(prdid, cnt);
			}
			else
			{
				alert('Unknown Product:'+prdid);
			}
		}
	},

	removePos: function (pos) 
	{
		this.Cart.splice(pos, 1);
	},
	
	/* ??? */
	checkCartForm : function () 
	{
		var sum = 0;
		if (document.forms['CART'])
		{
			for (var i =0; i < this.Cart.length; i++) {
				var prd = mhshop.catalogue.getPrd2Id(this.Cart[i].prdid);
				if (document.forms['CART'].elements["AMOUNT_"+i])
				{
					this.Cart[i].cnt = parseInt(document.forms['CART'].elements["AMOUNT_"+i].value);
					sum += this.Cart[i].cnt*prd.price;
				}
				/*else 
				{
					return false;
				}*/
			}
		}
		return true;
	},

	checkCart : function () 
	{
		var sum = 0.0;
		var ship_found = false;
		for (var i =0; i < this.Cart.length; i++) 
		{
			var prd = mhshop.catalogue.getPrd2Id(this.Cart[i].prdid);
			if (!prd)
			{
				alert("Unkown Product:"+escape(this.Cart[i].prdid));
				return false;
			}
			if (this.Cart[i].cnt > 10)
			{
				return false;
			}
			if (this.Cart[i].prdid == "SHIPPING") {
				ship_found = true;
			}
			//alert (prd.prdid+prd.categ);
			if (prd.categ == 'PRODUCT_TEXT') {
				this.needText = true;
			}
			sum += Math.round(this.Cart[i].cnt*prd.price, 2);
		}
		if (!ship_found) {
			mhshop.cart.addPos('SHIPPING', 1);
		}
		return true;
	},
	
	storeCart : function () 
	{
		var text = "CART=x&_COMMENT="+escape(this.Comment);
		//+"&_PAYMETH="+escape(this.Paymeth);
		for (var i =0; i < this.Cart.length; i++) {
			text += '&'+this.Cart[i].prdid+"="+this.Cart[i].cnt
		}
		// update or create cartcookie
		var crt = mhshop.lib.getCookie('cart');
		if (crt) {
			crt.remove();
		}
		
		crt = new mhshop.lib.Cookie("cart", text);
		crt.save();
	},

	readCart : function () 
	{
		//alert ("->readCart");
		var crt = mhshop.lib.getCookie('cart');
		if (crt)
		{
			//alert ("readCart:"+crt.value);
			var pairs = crt.value.split ("&");
			//alert(pairs);
			for (i = 0; i < pairs.length; i++) {
				var sepa = pairs[i].split("=");
				if (sepa[0] == "CART") {
					;
				} else if (sepa[0] == "_COMMENT") {
					this.Comment = unescape(sepa[1]);
				//} else if (sepa[0] == "_PAYMETH") {
					//this.Paymeth = unescape(sepa[1]);
				} else {
					this.addPos(sepa[0], parseInt(sepa[1]));
				}
			}
		}
		var r = this.checkCart();
	},
	
	getAddressForm: function (mode) 
	{
		var cnt;
		if (mode == "form") 
		{
			cnt = new mhshop.lib.Content(mhshop.conf.addr_form);
		}
		else 
		{
			cnt = new mhshop.lib.Content(mhshop.conf.addr_disp);
		}
		//alert(cnt.text);
		if (cnt && cnt.status == "OK") 
		{
			return cnt.text;
		}
		else
		{
			//alert("Addressform: "+cnt.status);
			return "Entschuldigung: Das Formular "+mhshop.conf.addr_form+" konnte nicht gelden werden.";
		}
	},
	
	getCartForm : function (mod) 	
	{
		if ((!this.Cart) || (this.Cart.length == 0))
		{
			return 'Warenkorb ist leer.';
		}
		
		var crt = '<div class="cart">'
			+'<form name="CART" action="javascript:mhshop.cart.main(\'chng\');" ><table>'
			+'<tr><th>'
			+'Artikel'
			+'</td><th>'
			+'Beschreibung'
			+'</th><th style="text-align:right;">'
			+'Anzahl'
			+'</th><th style="text-align:right;">'
			+'Einzelpreis'
			+'</th><th style="text-align:right;">'
			+'Gesamtpreis'
			+'</th><th>&nbsp;</th>'
			+'</tr>';

		var sum = 0;
		var prd;

		var pth;
		if (window.location.host == "localhost") {
			pth = 'http://'+window.location.host+'/elkecms/index.php';
		} else if (window.location.host == "www.elke-mitscha.de") {
			pth = 'http://'+window.location.host+'/index.php';
		} else if (window.location.host == "www.ssl-id.de") {
			pth = 'http://www.elke-mitscha.de/index.php';
		}
		
		for (var i =0; i < this.Cart.length; i++) {
			prd = mhshop.catalogue.getPrd2Id(this.Cart[i].prdid);
			/* if (!prd) {
				alert("Error: Unknow Product :"+this.Cart[i].prdid);
			} 
			else */
			if (prd && (prd.categ != "SHIPPING"))
			{
				crt = crt.concat('<tr><td>'
					+'<a href="'+pth+'/'+prd.page+'">'+prd.prdid+'</a>'
					//+'</td><td>'
					//+'<img src="'+prd.img+'" style="width:40px;">'
					+'</td><td>'
					//+prd.categ+'<br/>'
					+prd.txt1+'<br/>'+prd.txt2
					+'</td><td style="text-align:right;">'
					+((mod == "form") ? '<input type="hidden" name="PRD_'+i+'" value="'+this.Cart[i].prdid+'">' : "")
					+((mod == "form") ? '<input type="hidden" name="AMOUNT_'+i+'" value="'+this.Cart[i].cnt+'" size="2">'+this.Cart[i].cnt+'x' : this.Cart[i].cnt)
					+'</td><td style="text-align:right;">'
					+mhshop.lib.fmtPrice(prd.price)+' &euro;'
					+'</td><td style="text-align:right;">'
					+mhshop.lib.fmtPrice(this.Cart[i].cnt*prd.price)+' &euro;'
					+'</td>'
					+(mod == 'form' ? '<td><a href="javascript:mhshop.cart.main(\'remv\','+i+');">X<a></td>' : '<td></td>')
					+'</tr>');
				sum += this.Cart[i].cnt*prd.price;
			}
		}
		
		prd = mhshop.catalogue.getPrd2Id("SHIPPING");
		crt = crt.concat('<tr><td>'
			+"&nbsp;"
			+'</td><td>'
			+prd.txt1+'<br/>'+prd.txt2
			+'</td><td>'
			//+((mod == "form") ? '<input type="hidden" name="PRD_'+i+'" value="'+this.Cart[i].prdid+'">' : "")
			//+((mod == "form") ? '<input type="hidden" name="AMOUNT_'+i+'" value="'+this.Cart[i].cnt+'" size="2">x' : this.Cart[i].cnt)
			+'&nbsp;'
			+'</td><td style="text-align:right;">'
			+mhshop.lib.fmtPrice(prd.price)+' &euro;'
			+'</td><td style="text-align:right;">'
			+mhshop.lib.fmtPrice(prd.price)+' &euro;'
			+'</td>'
			+'<td>&nbsp;</td>'
			+'</tr>');
		sum += prd.price;

		crt = crt.concat('<tr><td colspan="7">'
			+'<hr/>'
			+'</td></tr>');

		crt = crt.concat('<tr class="cart_sum"><td colspan="4">'
			+'Summe (incl. 19% Mehrwertsteuer)'
			+'</td><td style="text-align:right;">'
			+mhshop.lib.fmtPrice(sum)+' &euro;'
			+'</td><td>'
			+'&nbsp;</td></tr>');

		if (mod == "form")
		{
			crt = crt.concat('<tr>'
				+'<td colspan="4">&nbsp;</td>'
				+'<td colspan="2">'
				+'<input type="submit" value="Weiter">'
				+'</td></tr>');
		}
			
		crt = crt.concat('</table></form></div>');
				
		//var shp = document.getElementById(id);
		//shp.innerHTML = crt;
		return crt;
	},
	
	getOrderText : function ()
	{
		if ((!this.Cart) || (this.Cart.length == 0))
		{
			return 'Warenkorb ist leer.';
		}
		var sum = 0;
		var lf = "\n"; //String.fromCharCode("");
		var crt = 'Besteller(in)'+lf
			//+this.Address['NAME1']+' '
			+this.Address['NAME']+lf
			+this.Address['STREET']+lf
			+this.Address['ZIP']+' '+this.Address['CITY']+lf
			+lf
			+this.Address['TEL']+lf
			+this.Address['EMAIL']+lf
			+lf+lf;			

		crt = crt.concat(mhshop.lib.rpad('-', 80, '-')+lf);
		crt = crt.concat('Zahlmethode:'+this.MethodName[this.Paymeth]+lf+lf);
		crt = crt.concat('Text:'+this.Comment+lf);
		crt = crt.concat(mhshop.lib.rpad('-', 80, '-')+lf);
			
		crt = crt.concat(mhshop.lib.rpad('Artikel', 20)
			+mhshop.lib.lpad('Anzahl', 8)
			+'  '
			+mhshop.lib.rpad('Beschreibung', 30)
			+mhshop.lib.lpad('Preis', 10)
			+mhshop.lib.lpad('Summe', 10)
			+lf
			+mhshop.lib.rpad('-',80,'-')
			+lf);
		
		for (var i =0; i < this.Cart.length; i++) {
			var prd = mhshop.catalogue.getPrd2Id(this.Cart[i].prdid);
			if (prd) 
			{
				//alert(this.Cart[i].prdid);
				crt = crt.concat(mhshop.lib.rpad(this.Cart[i].prdid, 20)
					+mhshop.lib.lpad(this.Cart[i].cnt.toFixed(0)+'x', 8)
					+'  '
					+mhshop.lib.rpad(prd.txt1, 30)
					+mhshop.lib.lpad(mhshop.lib.fmtPrice(prd.price), 10)
					+mhshop.lib.lpad(mhshop.lib.fmtPrice(this.Cart[i].cnt*prd.price), 10)
					+lf
					+mhshop.lib.rpad(' ', 30)
					+mhshop.lib.rpad(prd.txt2, 30)
					+lf);
				
				sum += Math.round(this.Cart[i].cnt*prd.price, 2);
			}
		}
		
		crt = crt.concat(mhshop.lib.rpad('-', 80, '-')
			+lf
			+mhshop.lib.lpad('Summe', 60)
			+mhshop.lib.rpad(' ', 10)
			+mhshop.lib.lpad(mhshop.lib.fmtPrice(sum), 10)
			+lf+lf+lf);
		
		return crt;
	},
	
	getPaymentForm: function (mod) 
	{
		var frm = "";
		if (mod == "form")
		{
			frm = mhshop.conf.paym_form;
		}
		else 
		{
			frm = mhshop.conf.paym_disp;
		}
		cnt = new mhshop.lib.Content(frm);
		if (cnt && cnt.status == "OK") 
		{
			return cnt.text;
		}
		else
		{
			return "Entschuldigung, das Formular "+frm+" konnte nicht geladen werden.";
		}
			//return '<div id="cart_payment">Bezahlung mit '+this.MethodName[this.paym]+'</div>';
	},

	selectPaymethod: function (meth)
	{		
		var frm = "";
		switch (meth) {
			case "PAYPAL" :
				frm = mhshop.conf.ppal_form;
			case "BANK" :
				frm = mhshop.conf.bank_form;
				break;
			case "COD" :
				frm = mhshop.conf.cod_form;
				break;
			default:
				alert("Unbekannte Methode: "+meth);
				return;
		}
		//<TODO/>
		mhshop.cart.Paymeth = new String(meth);
		//alert("sel:"+this.Paymeth);
		/*
		cnt = new mhshop.lib.Content(frm);
		if (cnt && cnt.status == "OK") 
		{
			//return cnt.text;
			var shp = document.getElementById('paydata');
			shp.innerHTML = cnt.text;
		}
		else
		{
			//alert("Payment: "+cnt.status);
			var shp = document.getElementById('paydata');
			shp.innerHTML = '<div class="error">Entschuldigung, das Formular '+frm+' konnte nicht geladen werden.</div>';
			this.Paymeth = "";
		}
		*/
	},

	paymentFromForm : function ()
	{
		var pm = "";
		
		frm = document.forms["PAYMENT"];
		if (frm)
		{
			for (i = 0; i < frm.elements.length; i++) 
			{
				var elm = frm.elements[i];
				if ((elm.name == "METHOD") && (elm.checked == true)) {
					pm = elm.value;
				}
			}
			this.Paymeth = pm;
			return true;
		} else {
			alert ("Payment Formular ?")
		}
		return false;
	},

	
	
	checkPaymethod : function ()
	{
		var rt = false;
		return true;
		switch (this.Paymeth)
		{
			case "COD"   : 
				rt = true;
				break;
			case "BANK"  : 
				rt = true;
				break;
			case "PAYPAL": 
				rt = true;
				break;
			default:
				//this.Paymeth = "";
				rt = false;
		}
		return rt;
	},

	fillPaymethodForm : function ()
	{
		var frm = document.forms['PAYMENT'];
		if (frm && this.Paymeth && (this.Paymeth != ""))
		{
			for (i =0; i < frm.elements.length; i++)
			{
				if (frm.elements[i].name == "METHOD") 
				{
					if ((frm.elements[i].type == "radio") && (frm.elements[i].value == this.Paymeth))
					{
						frm.elements[i].selected = true;
					} else {
						frm.elements[i].value = this.Paymeth;
					}
				}
				if (frm.elements[i].name == "METHOD_NAME") 
				{
					frm.elements[i].value = this.MethodName[this.Paymeth];
				}
			}
		} 
	},

	getCommentForm: function (mod) 
	{
		var frm = "";
		if (mod == "form")
		{
			frm = mhshop.conf.cmnt_form;
		}
		else 
		{
			frm = mhshop.conf.cmnt_disp;
		}
		var cnt = new mhshop.lib.Content(frm);
		//alert(cnt.text);
		if (cnt && cnt.status == "OK") 
		{
			return cnt.text;
		}
		else
		{
			return "Entschuldigung, das Formular "+frm+" konnte nicht geladen werden";
		}
	},
	
	fillCommentForm : function ()
	{
		var adr = this.Address;
		var frm = document.forms['COMMENT'];
		if (frm)
		{
			frm.elements['COMMENT'].value = this.Comment;
		} 
	},
	
	checkComment : function () 
	{
		var frm = document.forms['COMMENT'];
		if (frm) {
			if (frm.elements["COMMENT"]) {
				this.Comment = frm.elements["COMMENT"].value;
			}
		}
	},
	
	getConfirmForm: function () 
	{
		var cnt = new mhshop.lib.Content(mhshop.conf.conf_form);
		//alert(cnt.text);
		if (cnt && cnt.status == "OK") 
		{
			return cnt.text;
		}
		else
		{
			//alert("Confirmform: "+cnt.status);
			return "Entschuldigung, das Formular "+mhshop.conf.conf_form+" konnte nicht geladen werden";
		}
	},
	
	fillConfirmForm : function ()
	{
		var adr = this.Address;
		var frm = document.forms['SEND'];
		if (frm)
		{
			//alert(this.getCartText());
			frm.elements['s_email'].value = adr['EMAIL'];
			frm.elements['s_name'].value = adr['NAME'];
			frm.elements['s_subject'].value = 'Bestellung';

			frm.elements['s_message'].value = this.getOrderText();
		} 
		/*else 
			alert ('Invalid Confirm Form');
		*/
	},
	
	parseParams : function () 
	{
		//var cp = new Array();
		var rt = false;
		var url = location.href;
		url = url.replace(/.*\?(.*?)/,"$1");
		var pairs = url.split ("&");
		for (i = 0; i < pairs.length; i++) {
			sepa = pairs[i].split("=");
			/*ALLOW ONLY PRD & STEP */
			if ((sepa[0] == "PRD") && (sepa[1].length < 50) && (sepa[1].match(/^[a-zA-Z0-9_\-]+$/)) )
			{
				this.addPos(sepa[1]);
				//this.step = "add";
				rt = true;
			}
		}
		return rt;
	},
	
	doWork : function (crtpos) {
		this.status = "notOK";
		switch (this.step) 
		{
			case "remv":
				if (this.removePos(crtpos) == true) {
					this.status = "OK";
				}
				// no break !:)
			case "cart":
			case "add":
			case "chng":
				if (this.needText == true) {
					this.checkComment();
				}
				if (this.checkCart() == true) {
					this.storeCart();
					this.status = "OK";
				}
				break;
			case "addr":
				if (this.addressFromForm() == true) {
					if (this.checkAddress() == true) {
						this.status = "OK";
					}
					// store Addrs anyway = chng possible
					this.storeAddress();
				}
				break;
			case "paym":
				//<TODO/>
				//alert("P:"+this.step);
				if (this.paymentFromForm() == true) {
					if (this.checkPaymethod() == true) {
						this.storePayment();
						this.status = "OK";
					} else {
						alert ("Unknown Paymethod: "+this.Paymeth);
					}
				}
				break;
			case "conf":
				this.status = "OK";
				break;
			default:
				this.status = "OK";
		}
	},
	
	nextStep: function () 
	{
		var txt = "";
		//alert(this.step);
		switch (this.step) 
		{
			case "cart":
				this.step = "cart"; 
				break;
			case "add":
				this.step = "cart"; 
				break;
			case "chng":
				this.step = "paym"; 
				break;
			case "remv":
				this.step = "cart"; 
				break;
			case "addr":
				this.step = "conf";
				break;
			case "paym":
				//alert("P:"+this.paym);
				this.step = "addr";
				break;
			case "conf":
				this.step = "end";
				break;
			case "end":
				this.step = "end";
				break;
			default:
				this.step = "cart";
		}
	},	
	
	printNav : function () 
	{
		var shp = document.getElementById('shopnav');
		shp.innerHTML = '';
		var stps = ['cart','paym','addr','conf'];
		var i = 0;
		var progr = {'cart':0, 'paym':1, 'addr':2, 'conf':3, 'end':4};
		
		var txt = "<div><ul>";
		for (i=0; i < stps.length; i++) {
			var tit = (i+1)+' '+this.langtxt('CART_NAV_'+stps[i].toUpperCase());
			if (i < progr[this.step]) {
				//if (i == 0) 
				//	txt += '<li class="cart_step"><a href="javascript:mhshop.cart.main(\''+stps[i]+'\');">'+tit+'</a></li>';
				//else
				txt += '<li class="cart_step"><a href="javascript:mhshop.cart.jump(\''+stps[i]+'\');">'+tit+'</a></li>';
			}
			else 
			{
				if (i == progr[this.step]) {
					txt += '<li class="cart_step_active">'+tit+'</li>';
				}
				else {
					txt += '<li class="cart_step_block">'+tit+'</li>';
				}
			}			
		}
		txt += '</ul></div>'
			+'<div style="clear:left;"></div>';
		shp.innerHTML = txt;
		
	},
	
	print : function () 
	{
		var shp = document.getElementById('shop');
		shp.innerHTML = '';
		var txt = '<p>&nbsp;</p>';
		
		switch (this.step) 
		{
			case "add": /*?*/
			case "cart":
			case "remv": /*?*/
				if (this.needText) {
					txt += this.getCommentForm('form');
				}
				txt += this.getCartForm('form');
				break;
			case "addr":
				txt += this.getAddressForm('form');
				break;
			case "paym":
				txt += this.getPaymentForm('form');
				break;
			case "conf":
				txt += this.getConfirmForm();
				txt += this.getPaymentForm('txt');
				txt += this.getAddressForm('txt');
				if (this.needText) {
					txt += this.getCommentForm('txt');
				}
				txt += this.getCartForm('txt');
				break;
			default:
				txt += this.getCartForm('form');
		}
		shp.innerHTML = txt;
		this.printNav();
		
		switch (this.step) 
		{
			case "cart":
				this.fillCommentForm();
				break;
			case "addr":		
				this.fillAddressForm();
			case "paym":
				//this.fillAddressForm();
				this.fillPaymethodForm();
				break;
			case "conf":		
				this.fillAddressForm();
				this.fillPaymethodForm();
				this.fillCommentForm();
				this.fillConfirmForm();
				break;
			default:
				this.step = "cart";
		}
	},
	
	jump : function (step) {
		/* already on the way ? */
		if (step)
			this.step = step;
	
		/* finally print */
		this.print();
	},

	main : function (step, crtpos)
	{
		/* redir to secured site ? */
		if ((window.location.host == "www.elke-mitscha.de") || (window.location.host == "elke-mitscha.de")) {
			if (window.location.protocol != "https") {
				window.location.href = "https://www.ssl-id.de/elke-mitscha.de/shop/shop.html"+window.location.search;
				return;
			}
		}
		/* page reload on devel ? */
		if ((window.location.host == "elke.localhost") && (window.location.search.indexOf("test=yes") == 0)) {
			window.location.href = window.location.protocol+'//'
				+window.location.host+window.location.pathname+window.location.search+"&test=yes";
			return;
		}
		/**/

		//need data
		mhshop.catalogue.loadPrds();

		this.clearCart();
		this.readCart();

		// cart from cookies ..
		if (this.parseParams())
		{
			/* add previosly stored data again */
			this.storeCart();
		}
		//alert('STEP:'+this.step+'->'+step);
		
		/* already on the way ? */
		if (step)
			this.step = step;

		this.doWork(crtpos);
		
		/* next step */
		if (this.status == "OK") {
			this.nextStep();
		}

		// cart from cookies ..
		this.clearCart();
		this.readCart();
		this.readAddress();
		this.readPayment();
		//alert ('P:'+this.Paymeth +' / C:'+this.Comment+' / S:'+this.step);

		/* finally print */
		this.print();
	}
} // cart
// close mhshop
};

