function createXMLHttpRequest() {
	var req = null;
	try {
		req = new ActiveXObject("MSXML2.XMLHTTP");
	} catch (err_MSXML2) {
		try {
			req = new ActiveXObject("Microsoft.XMLHTTP");
		} catch (err_Microsoft) {
			if (typeof XMLHttpRequest != "undefined")
				req = new XMLHttpRequest();
		}
	}
	return req;
}

function getFormParams(form) {// diese funktion setzt die variablen und werte
								// aus dem form zusammen
	var str = "";
	var valueArr = null;
	var val = "";
	var cmd = "";
	for ( var i = 0; i < form.elements.length; i++) {
		// alert(form.elements[i].name +" "+form.elements[i].type);
		switch (form.elements[i].type) {// cases nicht vollst?ndig, es kann noch
										// andere form-element geben als die
										// unten abgefangenen, hier nur z Bsp:
		case "":
			str += form.elements[i].name + "=" + escape(form.elements[i].value)
					+ "&";
			break;

		case "hidden":
			str += form.elements[i].name + "=" + escape(form.elements[i].value)
					+ "&";
			break;

		case "text":
			str += form.elements[i].name + "=" + escape(form.elements[i].value)
					+ "&";
			break;

		case "textarea":
			str += form.elements[i].name + "=" + escape(form.elements[i].value)
					+ "&";
			break;

		case "select-one":
			str += form.elements[i].name
					+ "="
					+ escape(form.elements[i].options[form.elements[i].selectedIndex].value)
					+ "&";
			break;

		}
	}
	str = str.substr(0, (str.length - 1));
	return encodeURI(str);
}

var cart = new Array();

function Article() {
	this.id_article = 0;
	this.id_variant = 0;
	this.name = "";
	this.price = 0.0;
	this.totalprice = 0.0;
	this.tax = 0.0;
	this.quantity = 0;
	this.weight = 0.0;
	this.discounttype = "";
};

function cart_totalSum() {
	var sum = 0.0;
	for ( var i = 0; i < cart.length; i++) {
		if (cart[i].sprice > 0.0) {
			sum += cart[i].totalprice;
		} else {
			sum += cart[i].totalprice;
		}
		// alert("cart_totalSum() "+i+" "+cart[i].id_article+" "+cart[i].tax);
	}
	return sum;
}

function cart_totalCount() {
	var c = 0;
	for ( var i = 0; i < cart.length; i++) {
		c += parseInt(cart[i].quantity);
	}
	return c;
}

var areq = createXMLHttpRequest();

function handleCartChange() {
//	 alert("handleCartChange() "+areq.readyState);
	switch (areq.readyState) {
	case 0: // UNINITIALIZED
	case 1: // LOADING
	case 2: // LOADED
	case 3: // INTERACTIVE
		break;
	case 4: // COMPLETED
//	 alert("handleCartChange() ");
		try {
			var result = JSON.parse(areq.responseText);
			var found = false;
			for ( var i = 0; i < cart.length; i++) {
				if (result.id_article == cart[i].id_article	&& result.id_variant == cart[i].id_variant) {
					cart[i].quantity = result.quantity;
					// alert("handleCartChange found "+cart[cart.length-1].tax);
					found = true;
					break;
				}
			}
			if (!found) {
				cart[cart.length] = new Article();
				cart[cart.length - 1].id_article = result.id_article;
				cart[cart.length - 1].id_variant = result.id_variant;
				cart[cart.length - 1].quantity = result.quantity;
				cart[cart.length - 1].price = result.price;
				cart[cart.length - 1].tax = result.tax;
				cart[cart.length - 1].weight = result.weight;
				cart[cart.length - 1].totalprice = result.totalprice;
				cart[cart.length - 1].discounttype = result.discounttype;
				// alert("handleCartChange ="+cart[cart.length-1].tax);
			}
			var o = cart_totalCount();
			var t = cart_totalSum();
			cart_updateOverview(o, t);
			hideImage();
		} catch (ex) {
//			 alert("index.js-handleCartChange() "+ex);
		}
		break;
	default:
		alert("default");
		break;
	// fehlerhafter Status
	}
};

function addToCart(id) {
	if (areq != null) {
		addToCartA(id);
	} else {
		addToCartS(id);
	}
}

function addToCartA(id) {
	var sel = document.getElementById("article_variant_" + id);
	try {
		var div = document.getElementById("variant_error_" + id);
		div.style.display = "none";
		if (sel.value == "") {
			div.style.display = "block";
			return;
		}
	} catch (x) {
	}
	var v = 0;
	try {
		v = sel.value;
	} catch (e) {
	}

	try {
		areq.abort();
		areq.onreadystatechange = handleCartChange;
		areq.open("POST", "../servlet/shoppingcartasync", true);
		areq.setRequestHeader("Content-Type",
				"application/x-www-form-urlencoded");
		areq.send("command=add&id_article=" + id + "&id_variant=" + v + "&quantity=1");
		// alert("addToCart "+id);
	} catch (ex) {
		// alert("addToCart "+ex);
		addToCartS(id);
		return;
	}
	showImage(id);
}

function addToCartS(id) {
	// alert("addToCart "+id);
	try {
		var form = document.getElementById("form_" + id);
		var sel = document.getElementById("article_variant_" + id);
		var div = document.getElementById("variant_error_" + id);
		div.style.display = "none";
		if (sel.value == "") {
			div.style.display = "block";
			return;
		} else {
			form.submit();
		}
	} catch (e) {
		form.submit();
	}
};

function cart_updateOverview(o, t) {
	// alert("updateCartOverview "+o+" "+t);
	try{
		var span_o = document.getElementById("span_cart_orders");
		var span_t = document.getElementById("span_cart_total");
		span_o.innerHTML = "" + o;
		span_t.innerHTML = "" + t.toFixed(2);
	}catch(ex){
	}
}

function showImage(id) {
	try {
		var a = document.getElementById("div_add_cart_" + id);
		var img = document.getElementById("div_cart_progress");
		var x = getObjX(a);
		var y = getObjY(a);
		// alert("showImage x="+x+" y="+y);
		img.style.left = "" + (x + 60) + "px";
		img.style.top = "" + (y - 30) + "px";
		img.style.visibility = "visible";
	} catch (ex) {
		// alert("showImage "+ex);
	}
}

function hideImage() {
	try {
		div = document.getElementById("div_cart_progress");
		div.style.visibility = "hidden";
	} catch (ex) {
		// alert("hideImage "+ex);
	}
}

function sendEvent(evname, newvalue, call) {
	// alert("sendEvent() "+evname+" "+newvalue+" "+call);
	var evform = document.getElementById("clientEventForm");
	// alert("sendEvent() "+evform);
	try {
		evform.event.value = evname;
		if (newvalue) {
			evform.data.value = newvalue;
		} else {
			evform.data.value = "";
		}
		if (call) {
			evform.callback.value = call;
		} else {
			evform.callback.value = "";
		}
		evform.submit();
	} catch (e) {
	}
}
