//constructor
//========================================================
function pDAFShopClass() 
//========================================================
{

}

//========================================================
pDAFShopClass.prototype = 
//========================================================
{
  //------------------------------------------------------
  reloadShoppingCartContents : function (sContainerID, sPaymentModeSelectorID, sShippingModeSelectorID)
  //------------------------------------------------------
  {
    var aPaymentModeSelect = jphloc.ge(sPaymentModeSelectorID);
    var aShippingModeSelect = jphloc.ge(sShippingModeSelectorID);
    
    if (aPaymentModeSelect && aShippingModeSelect)
    {
      var nIndexPaymentMode = aPaymentModeSelect.selectedIndex;
      var nIndexShippingMode = aShippingModeSelect.selectedIndex;
      if (nIndexPaymentMode >= 0 && nIndexShippingMode >= 0)
      {
        var sSelectedPaymentMode = aPaymentModeSelect.options[nIndexPaymentMode].value;
        var sSelectedShippingMode = aShippingModeSelect.options[nIndexShippingMode].value;
      
        sajax_do_call(null, 
            "pDAFShop.reloadShoppingCartContents", 
            {callback:pDAFShop.reloadShoppingCartContentsCallback, extra_data:[sContainerID]},
            [sSelectedPaymentMode, sSelectedShippingMode]);
      }
    }
  },  

  //------------------------------------------------------
  reloadShoppingCartContentsCallback : function (sResultXHTMLSniplet, extra_data)
  //------------------------------------------------------
  {
    sResultXHTMLSniplet = sajax_clean_result(sResultXHTMLSniplet);
    var sContainerID = extra_data[0];
    var aContainer = jphloc.ge(sContainerID);
    jphloc.outerHTML(aContainer, sResultXHTMLSniplet);
  },
  
  //------------------------------------------------------
  addToShoppingCart : function (sArticleID, sAmountSelectorID, aCtrl)
  //------------------------------------------------------
  {
    var aAmountSelect = jphloc.ge(sAmountSelectorID);
    
    if (aAmountSelect)
    {
      var nAmount = parseInt(aAmountSelect.value);
      if (isNaN(nAmount))
        nAmount = 1;
      sajax_do_call(null, 
          "pDAFShop.addToShoppingCart", 
          {callback:pDAFShop.addToShoppingCartCallback, extra_data:[sAmountSelectorID, aCtrl]},
          [sArticleID, nAmount]);
    }
  },  

  //------------------------------------------------------
  addToShoppingCartCallback : function (sResultXHTMLSniplet, extra_data)
  //------------------------------------------------------
  {
    sResultXHTMLSniplet = sajax_clean_result(sResultXHTMLSniplet);
    var sAmountSelectorID = extra_data[0];
    var aAmountSelector = jphloc.ge(sAmountSelectorID);
    if (aAmountSelector)
      aAmountSelector.value = 1;
    var aCtrl = extra_data[1];
    var sMsgContainerID = sAmountSelectorID + "_msg"; 
    var aMsgContainer = jphloc.ge(sMsgContainerID);

    // trigger shopping cart reload
    pDAFShop.updateShoppingCartMenuWidget();

    // display success / error message
    aMsgContainer.innerHTML = sResultXHTMLSniplet;
    $("script").each(function() {
      var sCode = $(this).text();
      // IE does not understand the jQuery this, so we use normal this if it does not work
      if (!sCode || sCode == "")
        sCode = this.text; 
      jphloc.eval(sCode);
      });    
    // do not enable the button as long as the success message is shown
    pDAFShop.enableAddToShoppingCartButton(aCtrl, aMsgContainer);
  },
  
  //------------------------------------------------------
  enableAddToShoppingCartButton : function (aCtrl, aMsgContainer)
  //------------------------------------------------------
  {
    // do not enable the button as long as the success message is shown
    if (jphloc.getChildrenByTagName(aMsgContainer, "script", true).length > 0)
    {
      window.setTimeout(function ()
      { 
        pDAFShop.enableAddToShoppingCartButton(aCtrl, aMsgContainer); 
      }, 100);
    }
    else
    {
      jphloc.enableButton(aCtrl);
      aCtrl.focus();
    }
  },
  
  //------------------------------------------------------
  updateShoppingCartMenuWidget : function ()
  //------------------------------------------------------
  {
    sajax_do_call(null, 
        "pDAFShop.updateShoppingCartMenuWidget", 
        {callback:pDAFShop.updateShoppingCartMenuWidgetCallback, extra_data:[]},
        []);
  },
  
  //------------------------------------------------------
  updateShoppingCartMenuWidgetCallback : function (sResultXHTMLSniplet, extra_data)
  //------------------------------------------------------
  {
    sResultXHTMLSniplet = sajax_clean_result(sResultXHTMLSniplet);
    var aShoppingCartWidgetContainer = jphloc.ge("shoppingCartMenuWidgetContent");
    if (aShoppingCartWidgetContainer)
    {
      jphloc.outerHTML(aShoppingCartWidgetContainer, sResultXHTMLSniplet);  
    }
  },
  
  //------------------------------------------------------
  editShoppingCartDetails : function (sArticleID, sAction)
  //------------------------------------------------------
  {
    sajax_do_call(null, 
        "pDAFShop.editShoppingCartDetails", 
        {callback:pDAFShop.editShoppingCartDetailsCallback, extra_data:[]},
        [sArticleID, sAction]);
  },
  
  //------------------------------------------------------
  editShoppingCartDetailsCallback : function (sResultXHTMLSniplet, extra_data)
  //------------------------------------------------------
  {
    sResultXHTMLSniplet = sajax_clean_result(sResultXHTMLSniplet);
    var aShoppingCartDetailsContent = jphloc.ge("shoppingCartDetailsContent");
    if (aShoppingCartDetailsContent)
    {
      aShoppingCartDetailsContent.innerHTML = sResultXHTMLSniplet;  
    }
    pDAFShop.updateShoppingCartMenuWidget();
  }
}

var pDAFShop = window.pDAFShop = new pDAFShopClass();
