var cats = null;
var cart	= null;
var prods = null;
var curr_cat = -1;
var cart_init = false;

/*--------------------------------------------------------------------------------------------------------------*/

function LoadFile (filename, fallback_function, param1, param2)
{
	var result = (window.XMLHttpRequest) ? new XMLHttpRequest() : ((window.ActiveXObject) ? new ActiveXObject("Microsoft.XMLHTTP") : false);
	
	result.open("GET", filename, true);
	result.onreadystatechange = function()
	{
		if (result.readyState==4)
		{
			if (result.status == 200)
			{
				fallback_function (result.responseText, param1, param2);
			}
		}
	}
	result.send (null);
}

/*--------------------------------------------------------------------------------------------------------------*/

function LoadCategories()
{
	LoadFile ("frontend/kategorien.txt", ShowCategories, null);
}

function ShowCategories (datastr, dummy)
{
//	cats = datastr.split ("\r\n");
	cats = datastr.split ("\n");
	cats.shift();
	var count_cats = cats.length;
	var cat;

//	alert ("data: " + cats);
	
	var str = "";
	
	for (var i = 0; i != count_cats; i++)
	{
		cat = cats[i].split ("|");
		str += "<a id='cat"+ cat[0] + "' class='category' href='javascript:LoadProducts(" + cat[0] + ", \"assortment\")'>" + cat[1] + "</a>";
	}
	
	document.getElementById("categories").innerHTML = str;
}

/*--------------------------------------------------------------------------------------------------------------*/

function LoadProducts (category, node_id)
{
	if (!prods)
	{
		LoadFile ("frontend/produkte.txt", ShowProducts, category, node_id);
	}
	else
	{
		ShowProducts (null, category, node_id);
	}
	
	if (node_id.indexOf ("mycart") == -1)
	{
		if (curr_cat != -1)
		{
			document.getElementById("cat" + curr_cat).className = "category";
		}
		var title_node = document.getElementById("cat" + category);
		if (title_node) title_node.className = "category_active";
		curr_cat = category;
	}
}

/*--------------------------------------------------------------------------------------------------------------*/

function RefreshProducts()
{
	if (curr_cat != -1)
	{
		ShowProducts (null, curr_cat, "assortment");
	}
}

/*--------------------------------------------------------------------------------------------------------------*/

function ShowProducts (datastr, category, node_id)
{
	if (datastr && !prods)
	{
		prods = datastr.split ("\n");
		prods.shift();
	}
//	alert (prods.length);
	var count_prods = prods.length;
	var prod;
	var str = "";
	var price;
	var total = 0;
	var ismyorderlist = (node_id.indexOf ("order_mycart") != -1 || node_id.indexOf ("invoice_mycart") != -1);
	var line_nr = 0;
	
	if (!cart)
	{
		cart = new Array (count_prods);
		for (var i = 0; i != count_prods; i++) cart[i] = 0;
	}
	
	if (count_prods)
	{
		str += "<table class='products' cellpadding='0' cellspacing='0'>";
		for (var i = 0; i != count_prods; i++)
		{
			prod = prods[i].split ("|");
			if ((category == -1 && cart[i]) || category == prod[0])
			{
				line_nr++;
				str += "<tr";
				if (node_id != 'invoice_mycart')
				{
					str += " onmouseover='this.style.backgroundColor = \"#202020\"' onmouseout='this.style.backgroundColor = \"\"'";
				}
					str += ">";
			
				if (!ismyorderlist)
				{
					str += "<td class='add' align='left'><table class='add'><tr>";
					str += "<td><a title='Ein St&uuml;ck weniger' href='javascript:AddPiece (\"" + node_id + "\", " + i + ", -1)' class='add'>-</a></td>";
					str += "<td align='right'><div class='piece' id='" + node_id + "_piece_" + i + "'>" + cart[i] + "&nbsp;Stk.</div></td>";
					str += "<td><a title='Ein St&uuml;ck mehr' href='javascript:AddPiece (\"" + node_id + "\", " + i + ", 1)' class='add'>+</a></td>";
					str += "</tr></table></td>";
					str += "<td><a title='Klicken Sie hier um zur Detailansicht zu gelangen!' href='javascript:ShowProduct(" + i + ")'>" + GetProdName (prod[2]) + "</a></td>";
				}
				else
				{
					str += "<td align='right'>" + line_nr + "</td>";
					str += "<td>" + GetProdName (prod[2]) + "</td>";
				}
				str += "<td>" + prod[3].replace (/_/g, " ") + "</td>";
				
				if (!prod[4]) alert (prod[1]);
				price = prod[4].split(",");
				str += "<td align='right' style='padding-right: 0px;' nowrap='nowrap'>" + (category == -1 ? cart[i] + " Stk. à&nbsp;" : "") + "€&nbsp;" + price[0] + ",</td>";
				str += "<td style='padding-left: 0px;'>" + price[1] + "</td>";

				if (category == -1) // shopping cart: show line's total 
				{
					var fl_price = eval (price[0] + "." + (price[1] == "-" ? "0" : price[1])) * cart[i];
					fl_price = (Math.round (fl_price * 100)) / 100;
					total += fl_price;
					if (fl_price == Math.floor (fl_price)) fl_price += ".-";
					price = (fl_price + "").split(".");
					if (price[1] != "-" && price[1].length == 1) price[1] += "0";
					str += "<td class='total' align='right' style='padding-right: 0px;'>€&nbsp;" + price[0] + ",</td>";
					str += "<td class='total' style='padding-left: 0px;'>" + price[1] + "</td>";
				}

							
				str += "</tr>";
			}
		}
		
		if (category == -1 && total)
		{
			str += "<tr class='total'>";
			if (!ismyorderlist)
			{
				str += "<td><a href='javascript:ClearCart()'>Leeren</a></td>";
			}
			else
			{
				str += "<td>&#160;</td>";
			}
			str += "<td colspan='4'>Summe Produkte</td>";
			total = Math.round (total * 100) / 100;
			
			// total products (brutto)
			var total_str = total;
			if (total_str == Math.floor (total)) total_str += ".-";
			price = (total_str + "").split(".");
			if (price[1] != "-" && price[1].length == 1) price[1] += "0";
			str += "<td class='total' align='right' style='padding-right: 0px;'>€&nbsp;" + price[0] + ",</td>";
			str += "<td class='total' style='padding-left: 0px;'>" + price[1] + "</td>";
			str += "</tr>";
			
			if (ismyorderlist)
			{
				var mycountry = GetFormElement (document.form_order, "Land");
				var to_austria 	= mycountry.options[0].selected;
				var no_shipping	= (total >= 100);
				total += (no_shipping ? 0 : (to_austria ? 9.50 : 13.50));
				
				var vat = Math.round (total / 5 * 100) / 100;
				var net = Math.round ((total - vat) * 100) / 100;
			
				// shipping
				str += "<tr><td>&#160;</td><td colspan='4'>zzgl. Versandspesen <span class='visibility'>(<a class='text' href='javascript:alert (\"Versand an eine Adresse innerhalb Österreichs: €9,50. Versand ausserhalb Österreichs: €13,50. Bei Bestellungen mit einem Produktwert von über €100,- werden keine Versandkosten verrechnet.\")'>Information</a>)</span></td>";
				str += "<td align='right' style='padding-right: 0px;'>€&nbsp;" + (no_shipping ? 0 : (to_austria ? 9 : 13)) + ",</td>";
				str += "<td style='padding-left: 0px;'>" + (no_shipping ? '-' : '50') + "</td>";
				str += "</tr>";
				
				// total (brutto)
				if (total == Math.floor (total)) total += ".-";
				price = (total + "").split(".");
				if (price[1] != "-" && price[1].length == 1) price[1] += "0";
				str += "<tr class='total'><td>&#160;</td><td colspan='4'>Gesamt</td>";
				str += "<td align='right' style='padding-right: 0px;'>€&nbsp;" + price[0] + ",</td>";
				str += "<td style='padding-left: 0px;'>" + price[1] + "</td>";
				str += "</tr>";
	
				// vat
				str += "<tr><td>&#160;</td><td colspan='4'>Davon 20% USt</td>";
				if (vat == Math.floor (vat)) vat += ".-";
				price = (vat + "").split(".");
				if (price[1] != "-" && price[1].length == 1) price[1] += "0";
				str += "<td align='right' style='padding-right: 0px;'>€&nbsp;" + price[0] + ",</td>";
				str += "<td style='padding-left: 0px;'>" + price[1] + "</td>";
				str += "</tr>";
				
				// net
				str += "<tr><td>&#160;</td><td colspan='4'>Nettobetrag</td>";
				if (net == Math.floor (net)) net += ".-";
				price = (net + "").split(".");
				if (price[1] != "-" && price[1].length == 1) price[1] += "0";
				str += "<td align='right' style='padding-right: 0px;'>€&nbsp;" + price[0] + ",</td>";
				str += "<td style='padding-left: 0px;'>" + price[1] + "</td>";
				str += "</tr>";
			}
		}
		
		str += "</table>";
		
		if (category == -1)
		{
			if (!total)
			{
				str = "<p>Der Wahrenkorb ist leer.</p>";
			}
			else if (!ismyorderlist)
			{
				str += '<br /><a id="menu_order" href="javascript:ShowOrderForm()" class="text">Jetzt bestellen</a><br /><br />';
			}
		}
	}	

	if (cart_init || category != -1) document.getElementById (node_id).innerHTML = str;
	
	if (node_id.indexOf ("invoice_mycart") != -1)
	{
		document.getElementById ("invoice_payment").innerHTML = "Zahlungsweise:&nbsp;" + GetFormElement (document.form_order, "Zahlung").value;
	}
}

/*--------------------------------------------------------------------------------------------------------------*/

function ClearCart()
{
	if (confirm ("Möchten Sie Ihren Warenkorb wirklich leeren?"))
	{
		for (var i = 0; i != cart.length; i++)
		{
			cart[i] = 0;
			LoadProducts (-1, 'mycart');
		}
	}
}

/*--------------------------------------------------------------------------------------------------------------*/

function SetText (node_id, text)
{
	document.getElementById (node_id).innerHTML = text;
}

/*--------------------------------------------------------------------------------------------------------------*/

function AddPiece (node_id, prod_nr, delta)
{
	if (cart[prod_nr] || delta > 0)
	{
		cart[prod_nr] += delta;
		document.getElementById(node_id + "_piece_" + prod_nr).innerHTML = cart[prod_nr] + "&nbsp;Stk.";
		cart_init = true;
		
		if (node_id == "mycart")
		{
			LoadProducts (-1, 'mycart');
			ShowOrderButton();
		}
	}
}

/*--------------------------------------------------------------------------------------------------------------*/

function ShowProduct (prod_nr)
{
	var prod = prods[prod_nr].split ("|");
	document.getElementById ("prod_img").src = "images/" + prod[1] + ".jpg";
	document.getElementById ("prod_img").alt = prod[1] + ".jpg";
	SetText ("prod_name", GetProdName (prod[2]));
	SetText ("prod_desc", prod[3].replace (/_/g, " "));
	SetText ("prod_price", "€&nbsp;" + prod[4]);
	document.getElementById ("shadow").style.display = "block";
	document.getElementById ("prod").style.display = "block";
}

function HideProduct()
{
	document.getElementById ("shadow").style.display = "none";
	document.getElementById ("prod").style.display = "none";
}

/*--------------------------------------------------------------------------------------------------------------*/

function ShowPage (page_name)
{
	var allObjects = document.getElementsByTagName ('div');
	var Obj, ObjClass, ObjID;

	for (var i = 0; i != allObjects.length; i++)
	{
		ObjClass = allObjects[i].className + "";
		Obj = allObjects[i];
		if (ObjClass.indexOf ("page") != -1)
		{
			ObjID = Obj.id.substr (5);
			Obj.style.display = (ObjID == page_name ? "block" : "none");
			document.getElementById ("menu_" + ObjID).className = (ObjID == page_name ? "active" : "");
		}
	}
}

/*--------------------------------------------------------------------------------------------------------------*/

function ShowMyCart()
{
	ShowPage ('cart');
	LoadProducts (-1, 'mycart');
	document.getElementById("menu_mycart").className = "category_active";
	document.getElementById("menu_order").className = "category";
	document.getElementById("mycart").style.display = "block";
	document.getElementById("order").style.display = "none";
	
	ShowOrderButton();
}

/*--------------------------------------------------------------------------------------------------------------*/

function ShowOrderButton()
{
	var cart_filled = false;
	if (cart)
	{
		for (i = 0; i != cart.length && !cart_filled; i++)
		{
			if (cart[i]) cart_filled = true;
		}
	}

//	document.getElementById("menu_order").style.display = (cart_filled ? "inline" : "none");
}

/*--------------------------------------------------------------------------------------------------------------*/

function ShowOrderForm()
{
	document.getElementById("menu_mycart").className = "category";
	document.getElementById("menu_order").className = "category_active";
	document.getElementById("mycart").style.display = "none";
	document.getElementById("order").style.display = "block";
	UpdateHiddenFormFields();
}

/*--------------------------------------------------------------------------------------------------------------*/

function UpdateHiddenFormFields()
{
	//.........................................................................Fill hidden form field with products
	var str = "";
	var total = 0;
	var prod;
	
	for (var i = 0; i != prods.length; i++)
	{
		prod = prods[i].split ("|");
		
		if (cart[i])
		{

			str += GetProdName (prod[2]) + ", ";
			
			price = prod[4];
			str += cart[i] + " Stk. à&nbsp;" + "€&nbsp;" + price + " = ";
			price = prod[4].split(",");
	
	
			var fl_price = eval (price[0] + "." + (price[1] == "-" ? "0" : price[1])) * cart[i];
			fl_price = Math.round (fl_price * 100) / 100;
			total += fl_price;
			if (fl_price == Math.floor (fl_price)) fl_price += ".-";
			price = (fl_price + "").split(".");
			if (price[1] != "-" && price[1].length == 1) price[1] += "0";
			str += price[0] + "," + price[1];
			str += "\r\n";
		}
	}
	
	//total products
	total = Math.round (total * 100) / 100;
	var total_str = total;
	if (total == Math.floor (total)) total_str += ".-";
	price = (total_str + "").split(".");
	if (price[1] != "-" && price[1].length == 1) price[1] += "0";
	str += "\r\n------------------------\r\n";
	str += "Summe Produkte: €&nbsp;" + price[0] + "," + price[1];
	
	// shipping
	var mycountry = GetFormElement (document.form_order, "Land");
	var to_austria 	= mycountry.options[0].selected;
	var no_shipping	= (total >= 100);
	str += "\r\nVersandspesen: €&nbsp;" + (no_shipping ? "0,-" : (to_austria ? "9,50" : "13,50"));
	total += (no_shipping ? 0 : (to_austria ? 9.50 : 13.50));

	// total
	total = Math.round (total * 100) / 100;
	var total_str = total;
	if (total == Math.floor (total)) total_str += ".-";
	price = (total_str + "").split(".");
	if (price[1] != "-" && price[1].length == 1) price[1] += "0";
	str += "\r\nGESAMT: €&nbsp;" + price[0] + "," + price[1];
	
	document.getElementById ("order_items").innerHTML = str;

	//........................................................................................fill my cart overview
	LoadProducts (-1, 'order_mycart');
}

/*--------------------------------------------------------------------------------------------------------------*/

function CheckField (form_field)
{
	var result = true;
	if (form_field.value == "")
	{
		result = false;
		form_field.focus();
	}
	return result;
}

/*--------------------------------------------------------------------------------------------------------------*/

function GetFormElement (form_node, element_name) 
{
	var result = null;
	for (var i = 0; !result && i != form_node.elements.length; i++)
	{
		if (form_node.elements[i].name == element_name) result = form_node.elements[i];
	}
	return result;
}

/*--------------------------------------------------------------------------------------------------------------*/

function OnFormSubmit()
{
	var result = true;
	
	result = result && CheckField (document.form_order.Name);
	result = result && CheckField (document.form_order.Strasse);
	result = result && CheckField (document.form_order.PLZ);
	result = result && CheckField (document.form_order.Ort);
	result = result && CheckField (document.form_order.Land);
	result = result && CheckField (document.form_order.Email);
	
	if (result)
	{
		if (!document.form_order.AGB.checked)
		{
			alert ("Bitte stimmen Sie unseren Allgemeinen Geschäftsbedingungen zu");
			document.form_order.AGB.focus();
		}
		else
		{
			ShowMyOrder();
		}
	}
	else
	{
		alert ("Bitte befüllen Sie alle rot eingerahmte Felder!");
	}
}

/*--------------------------------------------------------------------------------------------------------------*/

function ShowMyOrder()
{
	var addr_str = "";
	document.body.className = "invoice";
	var comp_name = GetFormElement (document.form_order, "Firma").value;
	var uid = GetFormElement (document.form_order, "UID").value;
	
	if (comp_name != "")
	{
		addr_str 	= '<b>' + comp_name + '</b><br />';
		addr_str 	+= GetFormElement (document.form_order, "Name").value + '<br />'
	}
	else
	{
		addr_str 	= '<b>' + GetFormElement (document.form_order, "Name").value + '</b><br />';
	}
	
	addr_str 		+= GetFormElement (document.form_order, "Strasse").value + ', '
						+ GetFormElement (document.form_order, "PLZ").value + ' '
						+ GetFormElement (document.form_order, "Ort").value + '<br />'
						+ GetFormElement (document.form_order, "Land").value + '<br />'
						;
	
	if (uid != "")
	{
		addr_str += '<b>UID: ' + uid + '</b><br />';
		
	}

	LoadProducts (-1, 'invoice_mycart');
	document.getElementById("invoice_address").innerHTML = addr_str;

	document.getElementById("body").style.display = "none";
	document.getElementById("invoice").style.display = "block";
}

/*--------------------------------------------------------------------------------------------------------------*/

function CloseInvoice()
{
	document.body.className = "shop";
	document.getElementById("body").style.display = "block";
	document.getElementById("invoice").style.display = "none";
	ShowMyCart();
}

/*--------------------------------------------------------------------------------------------------------------*/

function SendOrder()
{
	document.form_order.submit();
	if (confirm ("Ihre Bestellung wurde verschickt. Soll Ihr Warenkorb nun geleert werden?"))
	{
		cart = null;
		LoadProducts (-1, 'order_mycart');
	}
	CloseInvoice();
}

//------------------------------------------------------------------------------------------------//

function NumStr (string, length)
{
	var result = "";
	var zerocount = length - string.length;
	if (zerocount > 0)
	{
		for (i = 0; i != zerocount; i++)
			result += "0";
	}
	result += string;
	return result;
}

/*--------------------------------------------------------------------------------------------------------------*/

function Today()
{
	var thisdate = new Date();
	var result = "";
	var monthstr = (thisdate.getMonth() + 1) + "";
	var daystr = thisdate.getDate() + "";
	
	if (thisdate.getYear() > 70)
	{
		result += NumStr (daystr, 2) + ".";
		result += NumStr (monthstr, 2) + ".";
		result += thisdate.getFullYear();
	}
	
	document.write (result);
}

/*--------------------------------------------------------------------------------------------------------------*/

function GetProdName (name_str)
{
	var upos = name_str.indexOf ("_");
	while (upos != -1)
	{
		name_str = name_str.substr (0, upos) + " " + name_str.substr (upos + 1);
		upos = name_str.indexOf ("_");
	}
	return name_str;
}

/*--------------------------------------------------------------------------------------------------------------*/

function PressKey (event) {
  if (!event)
    event = window.event;
  if (event.keyCode == 27)
  {
  	HideProduct();
  }
}
document.onkeypress = PressKey;


