
  /* +-----------------------------------------------------------------------+
     | Javascript Shop Modules
     +-----------------------------------------------------------------------+
     | Copyright (c) Firma Noname Media, www.nonamemedia.de
     | Developed by Andi Heinkelein, 11-Jan-2007
     +-----------------------------------------------------------------------+ */

	/* +------------------------- Script Config -----------------------------+ */
	
	
	
	/* +------------------------ Function/Class -----------------------------+ */
	
	var shopmodules = {
	
	
		makeXMLRequestObject: function () {
		
			// Erzeuge XMLRequest Objekt
			// Bei Erfolg wird das Objekt zurckgegeben
			// ansonsten false
			
			var requestObject = null;
			
			try {
			
				requestObject = new XMLHttpRequest();
			}
			catch (Error) {
			
				try {
				
					requestObject = new ActiveXObject("Microsoft.XMLHTTP");
				}
				catch (Error) {
				
					try {
					
						requestObject = new ActiveXObject("MSXML2.XMLHTTP");
					}
					catch (Error) {
					
						requestObject = false;
					}
				}
			}
			
			return requestObject;
		},
	
		sendRequest: function (responseFunction, query) {
		
			// Funktion sendet eine Anfrage an den Server.
			// var requestObject muss definiert sein
			// Funktion erwartet einen Query
			// Bei Erfolg wird func handleResponse aufgerufen
			
			//Erzeuge neues requestObject
			var requestObject = this.makeXMLRequestObject();
			
			if (requestObject) {
			
				requestObject.open("get", query, true);
				
// 				alert(query);
				
				if (responseFunction) {
				
					requestObject.onreadystatechange = function () {
						
						responseFunction(requestObject); 
					}
				}
				
				requestObject.send(null);
				
				var return_var = true;
			}
			else {
			
				var return_var = false;
			}
			
			return return_var;
		},
		
		errorCheck: function(str) {
		
			if (str.indexOf("<b>Warning</b>") > -1 || str.indexOf("<b>Parse error</b>") > -1 || str.indexOf("<b>Notice</b>") > -1) {
			
				alert(str);
			}
		},
		
		addToCart: function (itemName, itemPage, itemPrice, itemQuantity, itemNumber) {
		
			//Füge Artikel in Warenkorb ein
			this.sendRequest(shopmodules.addToCartResponse, "shopmodules/shopping_cart.php?action=add-item&item_name=" + encodeURIComponent(itemName) + "&item_page=" + encodeURIComponent(itemPage) + "&item_price=" + itemPrice + "&item_quantity=" + itemQuantity + "&item_number=" + encodeURIComponent(itemNumber));
			this.openAddItemMessage(5000);
			document.getElementById("shoppingCart").style.display = "block";
		},
		
		addToCartResponse: function (requestObject) {
		
			if (requestObject.readyState == 4) {
			
				shopmodules.errorCheck(requestObject.responseText);
				
				//Update Anzeige
				var result = requestObject.responseText.split("\n");
				if (document.getElementById("shopModulesCartItemSum")) {
				
					document.getElementById("shopModulesCartItemSum").innerHTML = result[0];
				}
				
				if (document.getElementById("shopModulesCartItemPrice")) {
				
					document.getElementById("shopModulesCartItemPrice").innerHTML = result[1];
				}
				
				//Aktualisiere Cart
				frames['shopModulesShoppingCart'].location.reload(true);
			}
		},
		
		truncateCart: function () {
		
			if (confirm("Einkaufswagen wirklich leeren?")) {
			
				this.sendRequest(shopmodules.truncateCartResponse, "shopping_cart.php?action=truncate-cart");
			}
		},
		
		truncateCartResponse: function (requestObject) {
		
			if (requestObject.readyState == 4) {
			
				shopmodules.errorCheck(requestObject.responseText);
				
				//Update Anzeige
				location.reload(true);
			}
			
			//Entferne Anzeige
			parent.document.getElementById("shoppingCart").style.display = "none";
		},
		
		getParentElement: function (searchAttribute, searchEl, parElement) {
		
			var i = 0;
			var searchResult = false;
			
			do {
			
				if (parElement.getAttribute(searchAttribute, 0) == searchEl) {
				
					searchResult = true;
					break;
				}
				
				parElement = parElement.parentNode;
				
				if (i++ > 20) {
				
					alert("Break");
					break;
				}
				
			} while (parElement.parentNode);
			
			return searchResult;
		},
		
		openShoppingCart: function() {
		
			document.getElementById("shopModulesShoppingCart").style.visibility = "visible";
		},
		
		closeShoppingCart: function(ev) {
		
// 			var ev = ev ? ev : window.event;
// 			var curElement = ev.target ? ev.target : ev.srcElement;
			
// 			if (document.getElementById("shopModulesShoppingCart").style.visibility == "visible") {
// 			
// 				if (!shopmodules.getParentElement("id", "shopModulesShoppingCart", curElement)) {
				
					parent.document.getElementById("shopModulesShoppingCart").style.visibility = "hidden";
// 				}
// 			}
		},
		
		addItem: function(sum, itemId) {
		
			this.sendRequest(this.addItemResponse, "shopping_cart.php?action=change-item-sum&sum=" + sum + "&item_id=" + itemId);
		},
		
		addItemResponse: function(requestObject) {
		
			if (requestObject.readyState == 4) {
			
				shopmodules.errorCheck(requestObject.responseText);
// 				alert(requestObject.responseText);
			
				var result = requestObject.responseText.split("\n");
				
				document.getElementById("quantity_" + result[1]).innerHTML = result[0];
				document.getElementById("price_" + result[1]).innerHTML = result[2];
				
				//Update Warenkorb Anzeige
				if (parent.document.getElementById("shopModulesCartItemSum")) {
				
					parent.document.getElementById("shopModulesCartItemSum").innerHTML = result[3];
				}
				
				if (parent.document.getElementById("shopModulesCartItemPrice")) {
				
					parent.document.getElementById("shopModulesCartItemPrice").innerHTML = result[4];
				}
			}
		},
		
		deleteItem: function(itemId) {
		
			if (confirm("Soll der Artikel wirklich gelöscht werden?")) {
			
				this.sendRequest(this.deleteItemResponse, "shopping_cart.php?action=delete-item&item_id=" + itemId);
			}
		},
		
		deleteItemResponse: function(requestObject) {
		
			if (requestObject.readyState == 4) {
			
				shopmodules.errorCheck(requestObject.responseText);
				
				var result = requestObject.responseText.split("\n");
				
				var rowId = shopmodules.getTableRowIndex(document.getElementById("quantity_" + result[0]));
				
				document.getElementById("shopModulesShoppingCartTable").deleteRow(rowId);
				
				//Update Warenkorb Anzeige
				if (parent.document.getElementById("shopModulesCartItemSum")) {
				
					parent.document.getElementById("shopModulesCartItemSum").innerHTML = result[1];
				}
				
				if (parent.document.getElementById("shopModulesCartItemPrice")) {
				
					parent.document.getElementById("shopModulesCartItemPrice").innerHTML = result[2];
				}
			}
		},
		
		getTableRowIndex: function (curObject) {
		
			while (curObject.parentNode && curObject.tagName.toLowerCase() != "tr") {
			
				curObject = curObject.parentNode;
			}
			
			return curObject.rowIndex;
		},
		
		openAddItemMessage: function (openTime) {
		
			
			//Layerposition
			var posX = document.pageXOffset || document.body.scrollLeft || document.documentElement.scrollLeft;
			var posY = document.pageYOffset || document.body.scrollTop || document.documentElement.scrollTop;
			var windowWidth = window.innerWidth || document.body.clientWidth || document.documentElement.clientWidth;
			var windowHeight = window.innerHeight || document.body.clientHeight || document.documentElement.clientHeight;
			
			posX += (windowWidth / 3) - (document.getElementById("shopModulesAddItemMessage").offsetWidth / 2);
			posY += (windowHeight / 3) - (document.getElementById("shopModulesAddItemMessage").offsetHeight / 2);
			
			with (document.getElementById("shopModulesAddItemMessage")) {
			
				style.left = posX + "px";
				style.top = posY + "px";
				style.visibility = "visible";
			}
			
			document.getElementById("shopModulesAddItemMessage").onmouseover = shopmodules.clearCloseAddItemMessage;
			
			if (openTime) {
			
				SHOP_MODULES_TIMEOUT = window.setTimeout("shopmodules.closeAddItemMessage()", openTime);
			}
		},
		
		closeAddItemMessage: function () {
		
			document.getElementById("shopModulesAddItemMessage").style.visibility = "hidden";
			document.getElementById("shopModulesAddItemMessage").onmouseover = null;
			document.getElementById("shopModulesAddItemMessage").onmouseout = null;
		},
		
		clearCloseAddItemMessage: function() {
		
			window.clearTimeout(SHOP_MODULES_TIMEOUT);
			document.getElementById("shopModulesAddItemMessage").onmouseover = null;
			
			document.getElementById("shopModulesAddItemMessage").onmouseout = function() {
			
				shopmodules.openAddItemMessage(2000);
			};
		}
	}
	
	function selectCountry() {
	
		if (document.forms['form'].country.value == "XX") {
		
			document.getElementById("other_country").style.display = "inline";
		}
		else {
		
			document.getElementById("other_country").style.display = "none";
		}
	}
	
	function checkForm() {
	
		error = 0;
		//Anschrift
		if (document.forms['form'].name.value == "") {
			
			error = 1;
			document.forms['form'].name.className = document.forms['form'].name.className + " missingValue";
		}
		else {
		
			document.forms['form'].name.className = "";
		}
		
		if (document.forms['form'].street.value == "") {
			
			error = 1;
			document.forms['form'].street.className = document.forms['form'].street.className + " missingValue";
		}
		else {
		
			document.forms['form'].street.className = "";
		}
		
		if (document.forms['form'].city.value == "") {
			
			error = 1;
			document.forms['form'].city.className = document.forms['form'].city.className + " missingValue";
		}
		else {
		
			document.forms['form'].city.className = "";
		}
		
		if (document.forms['form'].country.value == "") {
			
			error = 1;
			document.forms['form'].country.className = document.forms['form'].country.className + " missingValue";
		}
		else {
		
			document.forms['form'].country.className = "";
		}
		
		if (document.forms['form'].email.value == "") {
			
			error = 1;
			document.forms['form'].email.className = document.forms['form'].email.className + " missingValue";
		}
		else {
		
			document.forms['form'].email.className = "";
		}
		
		
		
		//Zahlungsart
		var payMethod = "";
		for (var i = 0; i < document.forms['form'].paymethod.length; i++) {
		
			if (document.forms['form'].paymethod[i].checked) {
			
				payMethod = document.forms['form'].paymethod[i].value;
			}
		}
		
		if (payMethod == "") {
		
			error = 1;
			document.getElementById('paymethod').className = document.getElementById('paymethod').className + " missingValue";
		}
		else {
		
			document.getElementById('paymethod').className = "";
			
			if (payMethod == "debit") {
			
				checkInputValue("account_holder");
				checkInputValue("account_number");
				checkInputValue("bank_code");
				checkInputValue("bank_name");
			}
		}
		
		if (error == 1) {
		
			alert("Bitte füllen Sie die markierten Felder aus!");
			return false;
		}
		else if (document.forms['form'].agbs.checked == false) {
			
			alert("Sie müssen unseren AGB's zustimmen um bestellen zu können.");
			return false;
		}
		else {
		
			document.forms['form'].submit();
		}
		
	}
	
	/* +--------------------------- Events ----------------------------------+ */
	
	if (window.addEventListener) {
	
// 		window.addEventListener("click", shopmodules.closeShoppingCart, false);
	}
	else {
	
// 		window.attachEvent("onclick", shopmodules.closeShoppingCart);
	}
	