// 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    = "/"+langue+"/s00_commun/css/kartDialog.css"                // URL de la feuille de style des boîtes de dialogue du kart
var kartUrlCaddie       = "/"+langue+"/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
var kartUrlRemerciement = "/"+langue+"/s14_panier_commande/s14p05_confirmation.php"; // URL de remerciement

// 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', '/'+langue+'/s98_kart/nb_items.php', {} ); }

// Fonction pour rafraichir l'affichage des produits
function kartRefresh()
{
   if ($('jsKartContainer'))  { kartCaddieShowWait(); new Ajax.Updater('jsKartContainer', '/'+langue+'/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', '/'+langue+'/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="javascript://" onclick="kartHideDialog()"><span>Rester sur la page</span></a>' +
      '   <a id="jsKartDialogAllerAuCaddie" class="jsKartDialogButton" href="' + kartUrlCaddie + '"><span>Afficher le caddie</span></a>';
      $('jsKartDialog').update(html);
   }
   $('jsKartDialog').show();
}

// 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="javascript://" onclick="kartHideAlert()"><span>Ok</span></a>';
      $('jsKartAlert').update(html);
   }
   $('jsKartAlert').show();
}

// 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('/'+langue+'/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('/'+langue+'/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('/'+langue+'/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('/'+langue+'/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('/'+langue+'/s98_kart/change_port.php?port=' + port, {
        method: 'get',
        onSuccess: function(transport) {
          kartRefreshTotalCommande();
        },
        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();
   }
   else                       // AJAX pas ok
   {
      kartShowCaddie();
   }
}

// Fonction pour recalculer le panier
function kartRecalc()
{
   if (kartUrlRecalc == "")
   {
      args = $('jsKartForm').serialize();
      new Ajax.Updater('jsKartContainer', '/'+langue+'/s98_kart/recalc.php?' + args, {} );
      kartCaddieShowWait();
      setTimeout('kartRefreshNavNbItems();', 500);
   }
   else
   {
      $('jsKartFormTodoField').value = "recalc";
      $('jsKartForm').action = kartUrlRecalc;
      $('jsKartForm').submit();
   }
}

// Fonction pour setter un code promo
function kartSetCodePromo()
{
   if (kartUrlSetCodePromo == "")
   {
      new Ajax.Request('/'+langue+'/s98_kart/set_code_promo.php?code=' + $('jsKartSetCodePromo').value, {
        method: 'post',
        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('/'+langue+'/s98_kart/del_code_promo.php', {
        method: 'post',
        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 == "")
   {
      var validationUrl = '/'+langue+'/s98_kart/validate_commande_cb.php';
      if ($('jsAvoirUtilise'))   validationUrl += "?avoir_utilise=" + $('jsAvoirUtilise').value;
      kartCaddieShowWait();
      new Ajax.Request(validationUrl, {
        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
          {
             var testValeur = parseInt(transport.responseText);
             if (testValeur <= 0 && transport.responseText.indexOf("|") > 0)
             {
               if (testValeur == 0)
               {
                  document.location.href = kartUrlRemerciement;
               }
               else
               {
                  alert(transport.responseText.substring(transport.responseText.indexOf("|") + 1));
               }
             }
             else
             {
               alert('Une erreur est survenue, probablement due à une trop longue période d\'inactivité sur le site.');
             }
          }
        },
        onFailure: function(transport) { alert("Une erreur est survenue."); }
      });
   }
   else
   {
      document.location.href = kartUrlCommandeCB;
   }
}

// Fonction pour (dé)sélectionner un cadeau
function kartSwapGiftState(refId)
{
   new Ajax.Request('/'+langue+'/s98_kart/swap_gift_state.php?reference=' + refId, {
        method: 'get',
        onSuccess: function(transport) {
          els = transport.responseText.split('|');
          if (els[0] == 1)                // Réussite
          {
             // Rien à faire, on n'embête pas le visiteur avec un message
          }
          else                             // Echec
          {
             if ($('jsKartContainer')) kartAlert(els[3]);
             else                      kartShowDialog(els[3]);
          }

          // Coche ou décoche la case
          if (els[1] == 1) $('jsChoixCadeau_' + refId).checked = true;
          else             $('jsChoixCadeau_' + refId).checked = false;

          // Rafraichit le nombre encore sélectionnables
          $('jsNbCadeauxSelectionnes').update(els[2]);
        },
        onFailure: function(transport) { alert("Une erreur est survenue."); }
      });
}