
var cart_summary_http_req = false;


function cart_summary_fetch()
{
  var tr;

  cart_summary_http_req = createXMLHttpRequest();

  if (cart_summary_http_req)
  {
    // initialize the XMLHttpRequest
    cart_summary_http_req.onreadystatechange = cart_summary_http_req_readychange;
    cart_summary_http_req.open("GET", "fetch_cart_summary.php", true);

    cart_summary_http_req.send(null);

    tr = document.getElementById("tr_cart_summary_empty");
    if (tr)  tr.style.display = "none";
    tr = document.getElementById("tr_cart_summary_err");
    if (tr)  tr.style.display = "none";
    tr = document.getElementById("tr_cart_summary_info");
    if (tr)  tr.style.display = "none";
    tr = document.getElementById("tr_cart_summary_process");
    if (tr)  tr.style.display = "";
  }
  else // if (cart_http_req)
  {
    tr = document.getElementById("tr_cart_summary_empty");
    if (tr)  tr.style.display = "none";
    tr = document.getElementById("tr_cart_summary_process");
    if (tr)  tr.style.display = "none";
    tr = document.getElementById("tr_cart_summary_info");
    if (tr)  tr.style.display = "none";
    tr = document.getElementById("tr_cart_summary_err");
    if (tr)  tr.style.display = "";
  }
}


function cart_summary_http_req_readychange()
{
  if (cart_summary_http_req)
  {
    var status_msg = "", ready_state = cart_summary_http_req.readyState;

    if (ready_state == 4)
    {
      var http_status = cart_summary_http_req.status;
      if (http_status == 200)
      {
        // HTTP request completed successfully
        var tr, err = false;
        var xml_doc = cart_summary_http_req.responseXML;
        if (xml_doc)
        {
          var cart_return = xml_doc.getElementsByTagName("cart-op-return").item(0);
          if (cart_return)
          {
            var op_status = cart_return.getElementsByTagName("op-status").item(0);
            if (op_status)
            {
              var err_code = op_status.getAttribute("error");

              if (err_code == "0")
              {
                // process completed without error
                var cart_summary = cart_return.getElementsByTagName("cart-summary").item(0);
                if (cart_summary)
                {
                  var item_count = parseInt(cart_summary.getAttribute("item_count"));
                  var cart_total = parseFloat(cart_summary.getAttribute("cart_total"));
                  var span = document.getElementById("span_cart_summary_count");
                  if (span)
                  {
                    var msg = (item_count == 1) ? "1 item" : item_count.toFixed(0) + " items";
                    while (span.firstChild)  span.removeChild(span.firstChild);
                    span.appendChild(document.createTextNode(msg))
                  }
                  span = document.getElementById("span_cart_summary_total");
                  if (span)
                  {
                    while (span.firstChild)  span.removeChild(span.firstChild);
                    span.appendChild(document.createTextNode(format_price(cart_total)))
                  }

                  tr = document.getElementById("tr_cart_summary_process");
                  if (tr)  tr.style.display = "none";
                  tr = document.getElementById("tr_cart_summary_err");
                  if (tr)  tr.style.display = "none";
                  if (item_count == 0)
                  {
                    tr = document.getElementById("tr_cart_summary_info");
                    if (tr)  tr.style.display = "none";
                    tr = document.getElementById("tr_cart_summary_empty");
                    if (tr)  tr.style.display = "";
                  }
                  else
                  {
                    tr = document.getElementById("tr_cart_summary_empty");
                    if (tr)  tr.style.display = "none";
                    tr = document.getElementById("tr_cart_summary_info");
                    if (tr)  tr.style.display = "";
                  }
                }
                else // if (cart_summary)
                {
                  err = true;
                }
              }
              else
              {
                // server side error, retriever server error message
                err = true;
              }
            }
            else // if (op_status)
            {
              err = true;
            }
          }
          else // if (cart_return)
          {
            err = true;
          }
        }
        else // if (xml_doc)
        {
          err = true;
        }
      }
      else // if ( http_status == 200 )
      {
        err = true;  // http error
      }

      if (err)
      {
        tr = document.getElementById("tr_cart_summary_process");
        if (tr)  tr.style.display = "none";
        tr = document.getElementById("tr_cart_summary_info");
        if (tr)  tr.style.display = "none";
        tr = document.getElementById("tr_cart_summary_empty");
        if (tr)  tr.style.display = "none";
        tr = document.getElementById("tr_cart_summary_err");
        if (tr)  tr.style.display = "";
      }

      cart_summary_http_req = false;
    } // if (ready_state == 4)
    else if (ready_state < 2)
      status_msg = "Contacting Server...";
    else if (ready_state == 2)
      status_msg = "Server processing request...";
    else if (ready_state == 3)
      status_msg = "Receiving response from server...";
    else
      status_msg = "Status unknown!";

    if (status_msg != "")
    {
      var td = document.getElementById("td_cart_summary_process");
      if (td)
      {
        while (td.firstChild)  td.removeChild(td.firstChild);
        td.appendChild(document.createTextNode(status_msg))
      }
    } // if (status_msg != "")
  } // if (cart_summary_http_req)
}
