// Bibliothèque JavaScript de fonctions de manipulation d'un kart en Ajax
// Prototype et scriptaculous doivent impérativement être inclus AVANT ce fichier

// Variables
var kartUrlDialogCSS    = "../../../site/fr/s00_commun/css/kartDialog.css"  // URL de la feuille de style des boîtes de dialogue du kart
var kartUrlCaddie       = "../s14_panier_commande/s14p01_panier.php";       // URL d'affichage du panier
var kartUrlAddById      = "";                                               // URL d'ajout d'un produit par son ID, laisser vide pour utilisation AJAX
var kartUrlAddByRef     = "";                                               // URL d'ajout d'un produit par sa référence, laisser vide pour utilisation AJAX
var kartUrlDelById      = "";                                               // URL de suppression d'un produit, laisser vide pour utilisation AJAX
var kartUrlChangePays   = "";                                               // URL pour valider le changement de pays de destination
var kartUrlChangePort   = "";                                               // URL pour valider le changement de tarif de port
var kartUrlRecalc       = "";                                               // URL pour recalculer le caddie
var kartUrlSetCodePromo = "";                                               // URL pour setter un code promo
var kartUrlDelCodePromo = "";                                               // URL pour supprimer un code promo
var kartUrlCommandeCB   = "";                                               // URL pour valider une commande par CB

// Au chargement de la page, si la feuille de style du dialogue du kart n'est pas chargée, l'ajoute
Event.observe(window, "load", kartInitDialog);
function kartInitDialog()
{
   // Vérifie la présence de la feuille de styles dédiée
   var sheets = $$('link');
   var cssFound  = false;
   sheets.each(function(s) { if (s.href.indexOf('kartDialog.css') > 0) cssFound = true; });
   if (!cssFound) { var newCss  = document.createElement('link'); newCss.rel  = 'stylesheet'; newCss.href = kartUrlDialogCSS; $$('head')[0].appendChild(newCss); }
}

// Fonction pour afficher la page du caddie
function kartShowCaddie() { document.location.href = kartUrlCaddie; }

// Fonction pour vider l'affichage du caddie (ou afficher un message d'attente)
function kartCaddieShowWait() { if ($('jsKartContainer'))   $('jsKartContainer').update(''); }

// Fonction pour rafraichir le nombre de produits dans la nav
function kartRefreshNavNbItems() {  if ($('jsKartNavNbItems')) new Ajax.Updater('jsKartNavNbItems', '../s98_kart/nb_items.php', {} ); }

// Fonction pour rafraichir l'affichage des produits
function kartRefresh()
{
   if ($('jsKartContainer'))  { kartCaddieShowWait(); new Ajax.Updater('jsKartContainer', '../s98_kart/get_caddie_html.php', {} ); }
   else                       { kartShowCaddie(); }  // Si AJAX pas ok (container pas trouvé) alors on charge toute la page du caddie
   kartRefreshNavNbItems();
}

// Fonction pour rafraichir le total de la commande TTC
function kartRefreshTotalCommande()
{
      if ($('jsKartTotalCommande'))    { $('jsKartTotalCommande').update('------'); new Ajax.Updater('jsKartTotalCommande', '../s98_kart/get_total_commande.php', {} ); }
      else                             kartShowCaddie();
}

// Fonction pour afficher le div de dialogue du kart
function kartShowDialog(message)
{
   if ($('jsKartDialog'))
   {
      $('jsKartMessage').update(message);
   }
   else
   {
      div = document.createElement('div'); div.setAttribute('id', 'jsKartDialog'); div.setAttribute('style', 'display:none'); $$('body')[0].appendChild(div);
      var html =
      '   <p id="jsKartMessage">' + message + '</p>' +
      '   <a id="jsKartDialogResterSurPage" class="jsKartDialogButton" href="#" onclick="kartHideDialog()"><span>Rester sur la page</span></a>' +
      '   <a id="jsKartDialogAllerAuCaddie" class="jsKartDialogButton" href="#" onclick="kartShowCaddie()"><span>Afficher le caddie</span></a>';
      $('jsKartDialog').update(html);
   }
   Effect.Appear('jsKartDialog', { duration: 0.5 });
}

// Fonction pour afficher le div d'alerte du kart
function kartAlert(message)
{
   if ($('jsKartAlert'))
   {
      $('jsKartAlertMessage').update(message);
   }
   else
   {
      div = document.createElement('div'); div.setAttribute('id', 'jsKartAlert'); div.setAttribute('style', 'display:none'); $$('body')[0].appendChild(div);
      var html =
      '   <p id="jsKartAlertMessage">' + message + '</p>' +
      '   <a id="jsKartAlertButton" class="jsKartAlertButton" href="#" onclick="kartHideAlert()"><span>Ok</span></a>';
      $('jsKartAlert').update(html);
   }
   Effect.Appear('jsKartAlert', { duration: 0.5 });
}

// Fonction pour masquer le div de dialogue du kart
function kartHideDialog()  {  $('jsKartDialog').hide();  }

// Fonction pour masquer le div d'alerte du kart
function kartHideAlert()  {  $('jsKartAlert').hide();  }

// Fonction pour ajouter un item par son ID.
// Retour : code|message (code = 0 signifie ajout ok)
function kartAddProductById(product_id, qt)
{
   if (kartUrlAddById == "")
   {
      new Ajax.Request('../s98_kart/add_item_by_id.php?product=' + product_id + '&quantity=' + qt, {
        method: 'get',
        onSuccess: function(transport) {
          els = transport.responseText.split('|');
          if (els[0] == 1)
          {
             if ($('jsKartContainer'))    // On est sur la page du panier
             {
                kartAlert(els[1]);
                kartRefresh();
             }
            else                          // On est sur une autre page
             {
                kartShowDialog(els[1]);
                kartRefreshNavNbItems();
             }
          }
          else
          {
             if ($('jsKartContainer')) kartAlert(els[1]);
             else                      kartShowDialog(els[1]);
          }
        },
        onFailure: function(transport) { alert("Une erreur est survenue."); }
      });
   }
   else
   {
      document.location.href = kartUrlAddById + "?todo=add_by_id&product=" + product_id + "&qt=" + qt;
   }
}

// Fonction pour ajouter un item par sa référence
function kartAddProductByReference()
{
   if (kartUrlAddByRef == "")
   {
      new Ajax.Request('../s98_kart/add_item_by_ref.php?product=' + $('jsKartAddProductByReference').value, {
        method: 'get',
        onSuccess: function(transport) {
          els = transport.responseText.split('|');
          if (els[0] == 1)                // Réussite
          {
             if ($('jsKartContainer'))    // On est sur la page du panier
             {
                kartAlert(els[1]);
                kartRefresh();
             }
            else                          // On est sur une autre page
             {
                kartShowDialog(els[1]);
                kartRefreshNavNbItems();
             }
          }
          else
          {
             if ($('jsKartContainer')) kartAlert(els[1]);
             else                      kartShowDialog(els[1]);
          }
        },
        onFailure: function(transport) { alert("Une erreur est survenue."); }
      });
   }
   else
   {
      document.location.href = kartUrlAddByRef + "?todo=add_by_ref&product=" + $('jsKartAddProductByReference').value + "&qt=" + qt;
   }
}

// Fonction de suppression d'une ligne du caddie
// Pas de demande de confirmation car d'autres sites ne le font pas
function kartDelProduct(product_id)
{
   if (kartUrlDelById == "")
   {
      new Ajax.Request('../s98_kart/del_item_by_id.php?product=' + product_id, {
        method: 'get',
        onSuccess: function(transport) {
          els = transport.responseText.split('|');
          if (els[0] == 1 || els[0] == -1)   // retour = 1 -> suppression réussie / -1 -> panier vide
          {
            kartRefresh();
          }
          else                          // retour = 0 -> message d'erreur à la suppression
          {
            kartShowDialog(els[1]);
          }
        },
        onFailure: function(transport) { alert("Une erreur est survenue."); }
      });
   }
   else
   {
      document.location.href = kartUrlDelById + "?todo=del&product=" + product_id;
   }
}

// Fonction pour setter le choix d'un pays de destination
function kartSelectCountry(pays)
{
   if (kartUrlChangePays == "")
   {
      new Ajax.Request('../s98_kart/change_pays_destination.php?pays=' + pays, {
        method: 'get',
        onSuccess: function(transport) {
          kartRefreshKartPort(transport.responseText);
        },
        onFailure: function(transport) { alert("Une erreur est survenue."); }
      });
   }
   else
   {
      document.location.href = kartUrlChangePays + "?todo=chg_pays&pays=" + pays;
   }
}

// Fonction pour choisir un frais de port
function kartSetFraisPort(port)
{
   if (kartUrlChangePort == "")
   {
      new Ajax.Request('../s98_kart/change_port.php?port=' + port, {
        method: 'get',
        onSuccess: function(transport) {
          //kartRefreshTotalCommande();
          kartRefresh();
        },
        onFailure: function(transport) { alert("Une erreur est survenue."); }
      });
   }
   else
   {
      document.location.href = kartUrlChangePort + "?todo=chg_port&port=" + port;
   }
}

// Fonction pour rafraichir le HTML du port (suite à changement pays notamment)
function kartRefreshKartPort(html)
{
   if ($('jsKartChoixPort'))  // AJAX ok
   {
      $('jsKartChoixPort').update(html);
      //kartRefreshTotalCommande();
      kartRefresh();
   }
   else                       // AJAX pas ok
   {
      kartShowCaddie();
   }
}

// Fonction pour recalculer le panier
function kartRecalc()
{
   if (kartUrlRecalc == "")
   {
      args = $('jsKartForm').serialize();
      new Ajax.Updater('jsKartContainer', '../s98_kart/recalc.php?' + args, {} );
      kartCaddieShowWait();
   }
   else
   {
      $('jsKartFormTodoField').value = "recalc";
      $('jsKartForm').action = kartUrlRecalc;
      $('jsKartForm').submit();
   }
}

// Fonction pour setter un code promo
function kartSetCodePromo()
{
   if (kartUrlSetCodePromo == "")
   {
      new Ajax.Request('../s98_kart/set_code_promo.php?code=' + $('jsKartSetCodePromo').value, {
        method: 'get',
        onSuccess: function(transport) {
          els = transport.responseText.split('|');
          if (els[0] == 1)                // Réussite
          {
             if ($('jsKartContainer'))    kartRefresh();             // On est sur la page du panier
             else                         kartRefreshNavNbItems();   // On est sur une autre page
          }
          kartAlert(els[1]);
        },
        onFailure: function(transport) { alert("Une erreur est survenue."); }
      });
   }
   else
   {
      document.location.href = kartUrlSetCodePromo + "?todo=set_code_promo&code=" + $('jsKartSetCodePromo').value;
   }
}

// Fonction pour supprimer un code promo
function kartDelCodePromo()
{
   if (kartUrlDelCodePromo == "")
   {
      new Ajax.Request('../s98_kart/del_code_promo.php', {
        method: 'get',
        onSuccess: function(transport) {
          els = transport.responseText.split('|');
          if (els[0] == 1)                // Réussite
          {
             if ($('jsKartContainer'))    // On est sur la page du panier
             {
                kartAlert(els[1]);
                kartRefresh();
             }
            else                          // On est sur une autre page
             {
                kartShowDialog(els[1]);
                kartRefreshNavNbItems();
             }
          }
          else                             // Echec
          {
             if ($('jsKartContainer')) kartAlert(els[1]);
             else                      kartShowDialog(els[1]);
          }
        },
        onFailure: function(transport) { alert("Une erreur est survenue."); }
      });
   }
   else
   {
      document.location.href = kartUrlDelCodePromo + "?todo=del_code_promo";
   }
};

// Fonction pour valider la commande CB
function kartValidateCommandeCB()
{
   if (kartUrlCommandeCB == "")
   {
      kartCaddieShowWait();
      new Ajax.Request('../s98_kart/validate_commande_cb.php', {
        method: 'get',
        onSuccess: function(transport) {
          var newDiv  = document.createElement('div'); newDiv.id = "jsKartCommandeCBFormContainer"; $$('body')[0].appendChild(newDiv);
          $('jsKartCommandeCBFormContainer').update(transport.responseText);
          if ($('jsKartCommandeCBForm'))  $('jsKartCommandeCBForm').submit();
          else                            { alert('jsKartCommandeCBForm introuvable dans le code renvoyé par validate_commande.php'); }
        },
        onFailure: function(transport) { alert("Une erreur est survenue."); }
      });
   }
   else
   {
      document.location.href = kartUrlCommandeCB;
   }
}