// Bibliothèque JavaScript de fonctions de manipulation d'un kart en Ajax
// Prototype et scriptaculous doivent impérativement être inclus AVANT ce fichier
var langue = document.documentElement.lang;

// 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 kartUrlCommandeCheque     = '/'+langue+'/s98_kart/validate_commande_cheque.php';               // URL pour valider une commande par chèque
var kartUrlRemerciement       = "/"+langue+"/s14_panier_commande/s14p05_confirmation.php";         // URL de remerciement
var kartUrlRemerciementCheque = '/'+langue+'/s14_panier_commande/s14p08_confirmation_cheque.php';  // URL de remerciement chèque

// 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() { 
   jQuery('#jsKartContainer').html('<p>Chargement du panier&hellip;</p>'); 
}

// Fonction pour rafraichir le nombre de produits dans la nav
function kartRefreshNavNbItems() {
   jQuery('#jsBlocPanier_wrapper').load(window.location.href+' #blocPanier',function(){
      jQuery('.placeholder').placeholder();   
   }); 
   
}

// Fonction pour rafraichir l'affichage des produits
function kartRefresh() {
   kartCaddieShowWait();
   jQuery('#jsKartContainer_wrapper')
      .load(window.location.href+' #jsKartContainer',function(){
         jQuery('.placeholder').placeholder();   
      });
}

// 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,status)
{
   jQuery.fancybox.showActivity();
   jQuery.post('/'+langue+'/s98_kart/add_item_layer.php',status,function(data){
      jQuery.fancybox.hideActivity();
      jQuery.fancybox(data);
   });
}

// Fonction pour afficher le div d'alerte du kart
function kartAlert(message)
{
   var data = 
      '<div id="jsKartDialog">' +
      '   <p id="jsKartDialogMessage">' + message + '</p>' +
      '</div>';
   jQuery.fancybox(data);
}

// Fonction pour masquer le div de dialogue du kart
function kartHideDialog()  {  jQuery.fancybox.close(); }

// 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 == "")
   {
      jQuery.getJSON(
         '/'+langue+'/s98_kart/add_item_by_id.php',
         {
            product : product_id,
            quantity : qt
         },
         function(data){
            if (data.status == 1 || data.status == 2) {
               if (jQuery('#jsKartContainer').length > 0) {       // On est sur la page du panier
                  kartAlert(data.message);
                  kartRefresh();
               } else {                          // On est sur une autre page
                  kartShowDialog(data.message,data);
                  kartRefreshNavNbItems();
               }
            } else {
               if ($('jsKartContainer')) kartAlert(data.message);
               else                      kartShowDialog(data.message,data);
            }
         }
      );
   }
   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 == "")
   {
      jQuery.getJSON(
         '/'+langue+'/s98_kart/del_item_by_id.php',
         {
            product : product_id
         },
         function(data){
            if (data.status == 1 || data.status == -1) {
               if ($('jsKartContainer'))    // On est sur la page du panier
               {
                  kartRefresh();
               }
               else{
                  kartRefreshNavNbItems();
               }
            } else {
               kartShowDialog(data.message,data);
            }
         }
      );
   }
   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 == "")
   {
      jQuery.fancybox.showActivity();
      args = jQuery('#jsKartForm').serialize();
      jQuery('#jsKartContainer_wrapper').load('/'+langue+'/s98_kart/recalc.php?', args, function(){
         jQuery.fancybox.hideActivity();
      } );
   }
   else
   {
      $('jsKartFormTodoField').value = "recalc";
      $('jsKartForm').action = kartUrlRecalc;
      $('jsKartForm').submit();
   }
}

// Fonction pour setter un code promo
function kartSetCodePromo()
{
   if (kartUrlSetCodePromo == "")
   {
      jQuery.getJSON(
         '/'+langue+'/s98_kart/set_code_promo.php',
         {
            code : jQuery('#jsKartSetCodePromo').val()
         },
         function(data){
            //Succes
            if (data.status == 1) {
               kartRefresh(); 
            } 
            // Echec
            else {
               if (jQuery('#jsKartContainer')) kartAlert(data.message);
               else                      kartShowDialog(data.message,data);
            }
         }
      );
   }
   else
   {
      //document.location.href = kartUrlSetCodePromo + "?todo=set_code_promo&code=" + $('jsKartSetCodePromo').value;
   }
}

// Fonction pour supprimer un code promo
function kartDelCodePromo()
{
   if (kartUrlDelCodePromo == "")
   {
      jQuery.getJSON(
         '/'+langue+'/s98_kart/del_code_promo.php',
         function(data){
            //Succes
            if (data.status == 1) {
               kartRefresh(); 
            } 
            // Echec
            else {
               if (jQuery('#jsKartContainer')) kartAlert(data.message);
               else                            kartShowDialog(data.message,data);
            }
         }
      );
    
   }
   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();
      var data = {
         avoir_utilise : jQuery('#jsAvoirUtilise').attr('value'),
         adresse_id : jQuery('#jsAddrSelector').attr('value')
      };

      jQuery
         .get(validationUrl,data)
         .success(function(data){
            jQuery('body').append('<div id="jsKartCommandeCBFormContainer"></div>');
            jQuery('#jsKartCommandeCBFormContainer').html(data);

            if ($('jsKartCommandeCBForm')) {
               //setTimeout("jQuery('#jsKartCommandeCBForm').submit();", 20000);
               jQuery('#jsKartCommandeCBForm').submit();
            } else {
               if (data.indexOf("|") == 0) {
                  alert('Une erreur est survenue, probablement due à une trop longue période d\'inactivité sur le site.');
               } else if (parseInt(data) == 0)  {
                  document.location.href = kartUrlRemerciement;
               } else if (parseInt(data) > 0 ) {
                  alert(data.substring(data.indexOf("|") + 1));
               }
            }
            
            jQuery('#fancybox-close').trigger('click');
         })
         .error(function(){
            alert("Une erreur est survenue.");
         });
   }
   else
   {
      document.location.href = kartUrlCommandeCB;
   }
}

// Fonction pour valider la commande CB
var confirmationChequeOk = true; // flag passé à false par la popup en cas de problème
function kartValidateCommandeCheque()
{
   if (kartUrlCommandeCheque == "")
   {
      alert("Une erreur s'est produite en initiant le paiement par chèque");
   }
   else
   {
      var validationUrl = kartUrlCommandeCheque + "?";
      if ($('jsAvoirUtilise'))   validationUrl += "avoir_utilise=" + $('jsAvoirUtilise').value + "&";
      if ($('jsAddrSelector'))   validationUrl += "adresse_id=" + $F('jsAddrSelector');
      hnd=window.open(validationUrl, 'winBC', 'top=0,left=0,scrollbars,width=680,height=500');
      setTimeout('redirectConfirmationCheque();', 4000);
      jQuery('#fancybox-close').trigger('click');
   }
}

// Fonction de vidage du kart et affichage de confirmation, appelé par la popup
function redirectConfirmationCheque()
{
   if (confirmationChequeOk)  document.location.href= kartUrlRemerciementCheque;
}

// Fonction pour valider que la CAC des CGV est cochée
function kartCheckCGV()
{
   // Vérification de la case à cocher des CGV
   if(jQuery('#okCGV').attr('checked') == false)
   {
      alert("Pour finaliser votre commande, merci de valider les conditions générales de ventes");
      return false;
   }
   else
   {
      return true;
   }
}

// 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."); }
      });
}

