   
// AjaxRequest object constructor
function AjaxRequest() {
  // Try the XMLHttpRequest object first
  if (window.XMLHttpRequest) {
    try {
      this.request = new XMLHttpRequest();
    } catch(e) {
      this.request = null;
    }
  // Now try the ActiveX (IE) version
  } else if (window.ActiveXObject) {
    try {
      this.request = new ActiveXObject("Msxml2.XMLHTTP");
    // Try the older ActiveX object for older versions of IE
    } catch(e) {
      try {
        this.request = new ActiveXObject("Microsoft.XMLHTTP");
      } catch(e) {
        this.request = null;
      }
    }
  }

  // If the request creation failed, notify the user
  if (this.request == null)
    alert("Ajax error creating the request.\n" + "Details: " + e);
}

// Send an Ajax request to the server
AjaxRequest.prototype.send = function(type, url, handler, postDataType, postData) {
  if (this.request != null) {
    // Kill the previous request
    this.request.abort();
    
    try {
      this.request.onreadystatechange = handler;
      this.request.open(type, url, true); // always asynchronous (true)
      if (type.toLowerCase() == "get") {
        // Send a GET request; no data involved
        this.request.send(null);
      } else {
        // Send a POST request; the last argument is data
        this.request.setRequestHeader("Content-Type", postDataType);
        this.request.send(postData);
      }
    } catch(e) {
      alert("Ajax error communicating with the server.\n" + "Details: " + e);
    }
  }
}

AjaxRequest.prototype.getReadyState = function() {
  return this.request.readyState;
}

AjaxRequest.prototype.getStatus = function() {
  return this.request.status;
}

AjaxRequest.prototype.getResponseText = function() {
  return this.request.responseText;
}

AjaxRequest.prototype.getResponseXML = function() {
  return this.request.responseXML;
}


//these scripts were in the body... moved here for cleaning up HTML code (by Stefan Baur)
var ajaxReq = new AjaxRequest();
var serverURL = location.protocol + "//" + location.host;

function GetProductRabattInfo(variantId) {
    document.getElementById('dResponse').innerHTML = 'loading discounts ...';
    var url = serverURL + "/JavaScriptBackend.aspx?variantId=" + escape(variantId);
    ajaxReq.send("GET", url, showRabatt);
    return false;
  }

function showRabatt() {
     if (ajaxReq.getReadyState() == 4 && ajaxReq.getStatus() == 200) {
          var response = ajaxReq.getResponseText();
          if (response.length > 0)
              document.getElementById('dResponse').innerHTML = response;
      }
  }

function GetBasketInfo() {
    var ctl = document.getElementById('dBasketResponse');    if(ctl != null) { ctl.innerHTML = 'loading basket ...'; }
    var url = serverURL + "/BasketRefresh.aspx";
    ajaxReq.send("GET", url, GetBasketResponse);
    return false;
  }

function GetBasketResponse() {
     if (ajaxReq.getReadyState() == 4 && ajaxReq.getStatus() == 200) {
          var response = ajaxReq.getResponseText();
          var ctl = document.getElementById('dBasketResponse');
          if (response.length > 0)
              if(ctl != null) { ctl.innerHTML = response; }
      }
  }

function AddItemToBasket(qtyControlId, urlParameters) {
   
    var ctl = document.getElementById('dBasketResponse');
    var ctlQuantity = document.getElementById(qtyControlId);
    var url = serverURL + "/Cart.aspx?Quantity=" + ctlQuantity.value;
    url = url + urlParameters;
    //ajaxReq.send("GET", url, AddItemToBasketResponse);
    
    return false;
}

function AddItemToBasketResponse() {
     if (ajaxReq.getReadyState() == 4 && ajaxReq.getStatus() == 200) {
          var response = ajaxReq.getResponseText();
          //GetBasketInfo();          
      }
  }

  function AddItemToBasketV2(catalogName, productId, variantId, quantity, refresh) {
    
      var segmentQuantity = "?Quantity=" + quantity;
      var segmentCatalog = "&catalog=" + catalogName;
      var segmentProduct = "&productId=" + productId;
      var segmentVariant = "&variantId=" + variantId;
      var segmentAction = "&Action=AddProduct";

      var url = serverURL + "/Cart.aspx" + segmentQuantity + segmentCatalog + segmentProduct + segmentVariant + segmentAction;

      //save the value of refresh to a global variable. tells the calllback method 
      document.customValue_refresh = refresh;

      ajaxReq.send("GET", url, AddItemToBasketV2Response);
      
      return false;
  }

  function AddItemToBasketV2Response() {
      if (ajaxReq.getReadyState() == 4 && ajaxReq.getStatus() == 200) {
          if (!document.customValue_refresh) {
              return;
          }
          location.replace(location.href);
      }
  }

function AddItemToFavorites(qtyControlId, urlParameters) {
    var ctl = document.getElementById('dBasketResponse');
    var ctlQuantity = document.getElementById(qtyControlId);
    var url = serverURL + "/Profile/SaveForLater.aspx?Quantity=" + ctlQuantity.value;
    url = url + urlParameters;
    ajaxReq.send("GET", url, AddItemToFavoritesResponse);
    return false;
  }

function AddItemToFavoritesResponse() {
     if (ajaxReq.getReadyState() == 4 && ajaxReq.getStatus() == 200) {
          var response = ajaxReq.getResponseText();
      }
  }

  function GetCouponInfo(info) {
      document.getElementById('dResponse').innerHTML = info;
      return false;
  }

  function couponChanged() {
      document.getElementById("ctl00_phCol1_Verification_hfPromoCode").value = document.getElementById("txtPromoCode").value;
  }
  