
// AJAX für Warenkorb

// 1. a) Aufruf

function ajax_in_den_warenkorb(url) {
  ajax_http_request("GET", url, '', true, ajax_handle_response, "w");
}

// 1. b) Aufruf

function ajax_in_den_warenkorb_form(myForm) {
  var warenkorb_typ = "w";
  if (myForm.warenkorb_typ) {
    warenkorb_typ = myForm.warenkorb_typ.value;
  }
  var queryString = "";
  for (var i=0; i<myForm.elements.length; i++) {
    if (myForm.elements[i].name.length > 0) {
      if (myForm.elements[i].type == 'radio' || myForm.elements[i].type == 'checkbox') {
        if (myForm.elements[i].checked) {
          queryString += (i==0?"":"&") + encodeURIComponent(myForm.elements[i].name) + "=" + encodeURIComponent(myForm.elements[i].value);
        }
      } else if(myForm.elements[i].type == 'select-one' || myForm.elements[i].type == 'select-multiple') {
        queryString += (i==0?"":"&") + encodeURIComponent(myForm.elements[i].name) + "=" + encodeURIComponent(myForm.elements[i].options[myForm.elements[i].selectedIndex].value);
      } else {
        queryString += (i==0?"":"&") + encodeURIComponent(myForm.elements[i].name) + "=" + encodeURIComponent(myForm.elements[i].value);
      }
    }
  }
  var url = "/shop/eingang?" + queryString;
  //alert(url);
  ajax_http_request("GET", url, '', true, ajax_handle_response, warenkorb_typ);
}

// 2. Verarbeitung

function ajax_handle_response() {
  if (ajax_http_request.request.readyState == 4) {
    if(ajax_http_request.request.status == 200) {
      // alert(ajax_http_request.request.responseText);
      var doc = ajax_http_request.request.responseXML;
      if (doc) {
        var root = doc.documentElement;
        var anzahl_warenkorb = 0;
        var anzahl_merkliste = 0;
        var wert_warenkorb = 0;
        var typ = "";
        if (root.hasChildNodes()) {
          var childNodeList = root.childNodes;
          for (var i = 0; i < childNodeList.length; i++) {
            // Anzahl/Wert "Gesamt" bezieht sich nur auf Warenkorb + eBook !!!
            if (childNodeList[i].nodeName == "anzahl-gesamt") {
              if(childNodeList[i].hasChildNodes()) {
                anzahl_warenkorb = childNodeList[i].firstChild.nodeValue;
              }
            }
            if (childNodeList[i].nodeName == "anzahl-merkliste") {
              if(childNodeList[i].hasChildNodes()) {
                anzahl_merkliste = childNodeList[i].firstChild.nodeValue;
              }
            }
            if (childNodeList[i].nodeName == "wert-gesamt") {
              if(childNodeList[i].hasChildNodes()) {
                wert_warenkorb = childNodeList[i].firstChild.nodeValue;
              }
            }
            if (childNodeList[i].nodeName == "typ") {
              if(childNodeList[i].hasChildNodes()) {
                typ = childNodeList[i].firstChild.nodeValue;
              }
            }
          }
        }
        wert_warenkorb = (Math.round(wert_warenkorb*100)/100 + "").replace(/\./, ",");
        if (!wert_warenkorb.match(/\,/)){
          wert_warenkorb = wert_warenkorb + ',00';
        }
        if (wert_warenkorb.split(/\,/)[1].length == 1){
          wert_warenkorb = wert_warenkorb + '0';
        }
        //alert("Warenkorb enthält " + anzahl_warenkorb + " Artikel im Wert von " + wert_warenkorb + " Mark, Merkliste enthält " + anzahl_merkliste + " Artikel");
        werte_aktualisieren(anzahl_warenkorb,wert_warenkorb,anzahl_merkliste);
        if (typ == 'w' && anzahl_warenkorb > 0) {
          warenkorb_blinken();
        }
      } else {
        alert("Fehler (C1)!");
      }
    } else {
      alert("Fehler (C2)!");
    }
    
    _hinweisAusblenden();

  }
}

// 3. Request (Allgemein)

function ajax_http_request(reqType, url, queryString, async, hook, warenkorb_typ) {
  ajax_http_request.request;
  // reqType: [GET|POST]
  // async: blockieren?
  if (window.XMLHttpRequest) {
    ajax_http_request.request = new XMLHttpRequest();
  } else if (window.ActiveXObject) {
    ajax_http_request.request = new ActiveXObject("Msxml2.XMLHTTP");
    if (! ajax_http_request.request) {
      ajax_http_request.request = new ActiveXObject("Microsoft.XMLHTTP");
    }
  }
  if (ajax_http_request.request) {
    _hinweisEinblenden(warenkorb_typ);
    ajax_http_request.request.onreadystatechange = hook;
    ajax_http_request.request.open(reqType, url, async);
    ajax_http_request.request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=ISO-8859-1");
    ajax_http_request.request.send(queryString);
  } else {
    alert("Fehler (C3)!");
  }
}

// 4. Werte aktualisieren

function werte_aktualisieren(anzahl_warenkorb,wert_warenkorb,anzahl_merkliste) {
  var warenkorbContainer = document.getElementById('warenkorb-anzahl-container');
  var merklisteContainer = document.getElementById('merkliste-anzahl-container');
  var waehrung = 'EUR';
  var warenkorbString = '';
  var merklisteString = '';
  warenkorbString += anzahl_warenkorb + ' Artikel';
  if (anzahl_warenkorb > 0) {
    warenkorbString += ' | <span class="text-fett">' + wert_warenkorb + ' ' + waehrung + '</span>';
  }
  merklisteString += anzahl_merkliste + ' Artikel';
  warenkorbContainer.innerHTML = warenkorbString;
  merklisteContainer.innerHTML = merklisteString;
  if (anzahl_warenkorb == 0) {
    var element = document.getElementById(warenkorb_blinken.idContainer);
    var elementLink = document.getElementById(warenkorb_blinken.idLink);
    var elementKasseLink = document.getElementById(warenkorb_blinken.idKasseLink);
    if (element.className == warenkorb_blinken.classFinal) {
      element.className = warenkorb_blinken.classNormal;
      elementLink.style.display = 'none';
      elementKasseLink.style.display = 'none';
    }
  }
}

// 5. Warenkorb blinken

warenkorb_blinken.counter = 0;
warenkorb_blinken.classNormal = 'titel-inhalt-info-warenkorb-inhalt';
warenkorb_blinken.classInvert = 'titel-inhalt-info-warenkorb-inhalt-invert';
warenkorb_blinken.classFinal = 'titel-inhalt-info-warenkorb-inhalt-final';
warenkorb_blinken.idContainer = 'warenkorb-container';
warenkorb_blinken.idLink = 'warenkorb-container-link';
warenkorb_blinken.idKasseLink = 'warenkorb-kasse-link';

function warenkorb_blinken() {
  var element = document.getElementById(warenkorb_blinken.idContainer);
  var elementLink = document.getElementById(warenkorb_blinken.idLink);
  var elementKasseLink = document.getElementById(warenkorb_blinken.idKasseLink);
  if (warenkorb_blinken.counter < 6) {
    if (element.className == warenkorb_blinken.classNormal) {
      element.className = warenkorb_blinken.classInvert;
    } else {
      element.className = warenkorb_blinken.classNormal;
    }
    warenkorb_blinken.counter++;
    window.setTimeout('warenkorb_blinken()',500);
  } else {
    warenkorb_blinken.counter = 0;
    element.className = warenkorb_blinken.classFinal;
    elementLink.style.display = 'block';
    elementKasseLink.style.display = 'block';
  }
}

function _hinweisEinblenden(warenkorb_typ) {
  var element;
  if (warenkorb_typ == 'm') {
    element = document.getElementById('__merkliste-hinweis');
  } else {
    element = document.getElementById('__warenkorb-hinweis');
  }
  if (! element){
    return false;
  }

  // Hier muss Browserweich eingebaut werden und für IE 6 die entsprechenden Koordinaten errechnet werden

  if (! element) {

    // IE6 (in css: position: absolute;)

  } else {

    // alle anderen Browser (in css: position: fixed;)

    var top = parseInt(screen.height/2 - 100);
    var left = parseInt(screen.width/2 - 100);

  }

  element.style.top = top + 'px';
  element.style.left = left + 'px';
  element.style.display = 'block';

}

function _hinweisAusblenden() {
  var elementWarenkorb = document.getElementById('__warenkorb-hinweis');
  var elementMerkliste = document.getElementById('__merkliste-hinweis');
  if (! elementWarenkorb || ! elementMerkliste){
    return false;
  }
  elementWarenkorb.style.display = 'none';
  elementMerkliste.style.display = 'none';
}