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);
	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);
}


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){}
}
