﻿/*
* Fonctionnalité de panier de commande javascript
* Utilisation de jQuery
* by Henrick
*/

(function ($) {
    $.fn.PanierDeCommande = function (options) {
        var options = $.extend({}, $.fn.PanierDeCommande.defaults, options);

        return this.each(function () {
            var obj = $(this);

            var nomDeCookie = options.nomDeCookie;

            var cartItemCount = 0;
            var cartProductCount = 0; // count of unique products added

            var labelAjouterALaCommande = "Commander une copie imprimée (gratuite)";
            var labelRetirerDelaCommande = "Retirer du panier";
            var labelNbrCommande = "Commande&nbsp;(_NOMBRECOMMANDES_)&nbsp;&gt;";

            var messageConfirmerEnlever = 'Voulez-vous enlever "_PRODUCTNAME_" de la commande?'; //  _PRODUCTNAME_ will be replaced with actula product name
            var messageConfirmerViderPanier = 'Voulez-vous vider votre panier de commande?';
            var messagePanierVide = "Votre commande est vide";

            var messageProduitVide = "Aucune publication";
            var messageProduitErreurAjout = "Erreur la publication n'a pas été ajoutée";
            var messageProduitAjouter = 'Publication ajoutée à la commande';
            var messageProduitEnlever = 'Publication enlevée de la commande';

            var messageQuantiteAJour = 'Quantité de la publication rafraichie';
            var messageQuantiteErreurAjout = 'Quantitée Invalide. Publication n\'a pas été ajoutée';
            var messageQuantiteErreurMiseAJour = 'Quantitée Invalide. Quantitée ne peut être mis-à-jour';

            var msgBox = $('<div></div>').addClass("scMessageBar").hide();
            $(".cart_total").append(msgBox);

            var msgBox2 = $('<div></div>').addClass("scMessageBar2").hide();
            $(".cart_total").append(msgBox2);

            var monCart = [];
            
            // on s'assure d'avoir un format standardisé de Url pour pas avoir de problème de "case"
      			$('a.btnAjouterALaCommande, a.btnRetirerDelaCommande, a.btnBonDeCommandeRetirerDuPanier').each(function() {
      				var href = $(this).attr("href");
      				href = href.toLowerCase();
      				if (href.indexOf("pages") > 0) {
      					href = href.replace("/pages/", "/Pages/");
      					$(this).attr("href", href);
      				}
      			});

            var monCookie = $.cookie(nomDeCookie, {  path: '/' });
            if (monCookie !== null && monCookie !== "undefined" && monCookie !== undefined) {
                //alert("[not undefined] - " + nomDeCookie + " : " + monCookie);

                monCart = $.evalJSON(monCookie);
                
                $('li.order .RetirerDelaCommande').hide();

                for (var i = 0; i < monCart.length; i++) {
                    monItem = monCart[i];
                    
                    var monUrl = unescape(monItem.Url.toLowerCase()).replace("/pages/", "/Pages/")
                    
                    // Gestion affichage dans la liste.
                    $('.btnAjouterALaCommande[href="' + monUrl + '"]').parent("div").hide();
                    $('.btnRetirerDelaCommande[href="' + monUrl + '"]').parent("div").show();
                    $('.btnBonDeCommandeRetirerDuPanier[href="' + monUrl + '"]').parent("div").show();

                    // Gestion affichage dans le cart.
                    // On doit remplacer tout les "/" et les "." par des "_"
                    var nomLi = "item" + monUrl.replace(/\:/g, "_").replace(/\//g, "_").replace(/\./g, "_").replace("_pages_","_Pages_");
                    if ($("#"+nomLi)) {                  
                        $("#"+nomLi + " select.cart_qty").val("" +monItem.Quantite);
                    }

					//Remettre cette ligne lorsque la commande d epublicatrion sera en https de nouveau pcu182
                    //nomLi = nomLi.replace("itemhttp__", "itemhttps__");
                    if ($("#"+nomLi)) {                  
                        $("#"+nomLi + " label.cart_qty").text("" +monItem.Quantite);
                    }
                }
                
            } else {

                $.cookie(nomDeCookie, $.toJSON(monCart), { expires: 7, path: '/' });
                $('.RetirerDelaCommande').hide();
            }

            rafraichirBulleCommande();

            /*
            // Syntax jqueyr-json
            var thing = {plugin: 'jquery-json', version: 2.2};

            var encoded = $.toJSON(thing);              //'{"plugin":"jquery-json","version":2.2}'
            var name = $.evalJSON(encoded).plugin;      //"jquery-json"
            var version = $.evalJSON(encoded).version;  // 2.2
            */



            function viderLePanier() {
                if ($.isFunction(options.onEmpty)) {
                    // Appel a l'événement onRemove; s'attend a une valeur de retour
                    // va poursuivre la purge si "true" et va canceller si "false"
                    if (!options.onEmpty.call(this)) {
                        return false;
                    }
                }

                monCart = [];
                $.cookie(nomDeCookie, $.toJSON(monCart), { expires: 7, path: '/' });

                // refraichis la bulle de commande
                rafraichirBulleCommande();

                // Appel a l'événement onRemoved; n'attend pas de valeur de retour
                if ($.isFunction(options.onEmptyed)) {
                    options.onEmptyed.call(this);
                    showHighlightMessage(messagePanierVide);
                }

            }

            function changerPublicationDuPanier(idx, qty) {
                //alert("[Params] - " + idx + " " + qty);

                var publication = escape(idx);

                if (publication.length > 0) {
                    if ($.isFunction(options.onUpdate)) {
                        // Appel a l'événement onRemove; s'attend a une valeur de retour
                        // va poursuivre la mise a jour si "true" et va canceller si "false"
                        if (!options.onUpdate.call(this, publication, qty)) {
                            return false;
                        }
                    }

                    monCart = $.cookie(options.nomDeCookie, { path: '/' });

                    var monItem = new Array();
                    if (monCart === null || monCart === "undefined" || monCart === undefined) {
	                    alert("cart pas definie " + publication);
                        monCart = new Array();
                        monItem = { Url: publication, Quantite: qty };
                        monCart[0] = monItem;
                    } else {

                        var bEstCommande = false;
                        monCart = $.evalJSON(monCart);
                        for (var i = 0; i < monCart.length; i++) {
                            monItem = monCart[i];
                            if (monItem.Url.toLowerCase() == publication.toLowerCase()) {
                                monItem.Quantite = qty;
                                monCart[i] = monItem;
                                bEstCommande = true;
                                break;
                            }
                        }

                        if (!bEstCommande) {
                        alert("pas trouvé " + publication);
                            monItem = { Url: publication, Quantite: qty };
                            monCart[monCart.length] = monItem;
                        }
                    }
                    //alert($.toJSON(monCart));
                    $.cookie(options.nomDeCookie, $.toJSON(monCart), { expires: 7, path: '/' });


                    // refraichis la bulle de commande
                    rafraichirBulleCommande();

                    // Appel a l'événement onRemoved; n'attend pas de valeur de retour
                    if ($.isFunction(options.onUpdated)) {
                        options.onUpdated.call(this, publication, qty);
                        showHighlightMessage(messageQuantiteAJour);
                    }
                }
            }


            function retirerDuPanier(idx) {
                var publication = escape(idx);

                if (publication.length > 0) {
                    if ($.isFunction(options.onRemove)) {
                        // Appel a l'événement onRemove; s'attend a une valeur de retour
                        // va poursuivre la suppression si "true" et va canceller si "false"
                        if (!options.onRemove.call(this, publication)) {
                            return false;
                        }
                    }

                    monCart = $.cookie(options.nomDeCookie, { path: '/' });

                    var monItem = new Array();
                    if (monCart === null || monCart === "undefined" || monCart === undefined) {
                        showHighlightMessage(messagePanierVide);
                    } else {

                        var bEstCommande = false;
                        monCart = $.evalJSON(monCart);
                        for (var i = 0; i < monCart.length; i++) {
                            monItem = monCart[i];
                            if (monItem.Url.toLowerCase() == publication.toLowerCase()) {
                                monCart.splice(i, 1);
                                bEstCommande = true;
                                break;
                            }
                        }

                        if (!bEstCommande) {
                            alert(messageProduitVide);
                        }
                    }
                    //alert($.toJSON(monCart));
                    $.cookie(options.nomDeCookie, $.toJSON(monCart), { expires: 7, path: '/' });


                    // refraichis la bulle de commande
                    rafraichirBulleCommande();

                    // Appel a l'événement onRemoved; n'attend pas de valeur de retour
                    if ($.isFunction(options.onRemoved)) {
                        options.onRemoved.call(this, publication);
                        showHighlightMessage(messageProduitEnlever);
                    }


                }
            }

            function ajouterAuPanier(idx, title, qty) {

                var publication = escape(idx);

                if (publication.length > 0) {
                    if ($.isFunction(options.onAdd)) {
                        // Appel a l'événement onRemove; s'attend a une valeur de retour
                        // va poursuivre l'ajout si "true" et va canceller si "false"
                        if (!options.onAdd.call(this, publication, qty)) {
                            return false;
                        }
                    }

                    monCart = $.cookie(options.nomDeCookie, { path: '/' });

                    var monItem = new Array();
                    if (monCart === null || monCart === "undefined" || monCart === undefined) {
                        monCart = new Array();
                        monItem = { Url: idx, Titre: title, Quantite: qty };
                        monCart[0] = monItem;
                    } else {

                        var bEstCommande = false;
                        monCart = $.evalJSON(monCart);
                        for (var i = 0; i < monCart.length; i++) {
                            monItem = monCart[i];
                            
                            if (monItem.Url.toLowerCase() == publication.toLowerCase()) {
                                monItem.Quantite = monItem.Quantite + qty;
                                monCart[i] = monItem;
                                bEstCommande = true;
                                break;
                            }
                        }

                        if (!bEstCommande) {
                            monItem = { Url: publication, Titre: title, Quantite: qty };
                            monCart[monCart.length] = monItem;
                        }
                    }
                    $.cookie(options.nomDeCookie, $.toJSON(monCart), { expires: 7, path: '/' });


                    // refraichis la bulle de commande
                    rafraichirBulleCommande();

                    // Appel a l'événement onRemoved; n'attend pas de valeur de retour
                    if ($.isFunction(options.onAdded)) {
                        options.onAdded.call(this, publication, qty);
                        showHighlightMessage(messageProduitAjouter);
                    }
                }
            }

            function rafraichirBulleCommande() {
                var cProductCount = 0;
                var cItemCount = 0;

                var monCookie = $.cookie(options.nomDeCookie, { path: '/' });

                if (monCookie !== null && monCookie !== "undefined" && monCookie !== undefined) {

                    var elmCart = $(".cart_total");
                    //showMessage("[Contenu Cookie] : " + monCookie, elmCart);
                    //showHighlightMessage("[Rafraichir panier] " + monCookie);
                    //alert("[Rafraichir panier] " + monCookie);

                    monCart = $.evalJSON(monCookie);

                    var pNbrCommades = labelNbrCommande.replace("_NOMBRECOMMANDES_", monCart.length);
                    
					if (monCart.length== 0){
						$("ul.cart_action").attr("style", "display:none;");
					} else {
						$("ul.cart_action").attr("style", "display:block;");
					}


                    $(".cart_total a").html(pNbrCommades);

                    cartProductCount = cProductCount;
                    cartItemCount = monCookie.length;
                } else {
	                $("ul.cart_action").attr("style", "display:none;");
                }

                //                if (cProductCount <= 0) {
                //                    showMessage(messageCartEmpty, elmCartList);
                //                } else {
                //                    $('.scMessageBar', elmCartList).remove();
                //                }
            }

            var btnAjouterALaCommande = $('.btnAjouterALaCommande').bind("click", function (e) {
                var idx = $(this).attr("href");
                var titre = $(this).attr("title");
                var qty = 1;
                ajouterAuPanier(idx, titre, qty);
                $(this).parent("div").hide().siblings(".RetirerDelaCommande").show();
                return false;
            });
            
            var btnBonDeCommandeRetirerDuPanier = $('.btnBonDeCommandeRetirerDuPanier ').bind("click", function (e) {
                var idx = $(this).attr("href");
                var titre = $(this).attr("title");
                if (confirm(messageConfirmerEnlever.replace("_PRODUCTNAME_", titre))) {
                    retirerDuPanier(idx);

                    $(this).parent("div").hide().siblings(".AjouterAlaCommande").show();

                    // Si on est dans le panier de commande on enleve l'element.
                    // On doit remplacer tout les "/" et les "." par des "_"
                    var nomLi = "#item" + idx.replace(/\:/g, "_").replace(/\//g, "_").replace(/\./g, "_");
                    $(nomLi).remove();
                }
                return false;
            });


            var btnRetirerDuPanier = $('.btnRetirerDelaCommande').bind("click", function (e) {
                var idx = $(this).attr("href");
                var titre = $(this).attr("title");

                retirerDuPanier(idx);

                $(this).parent("div").hide().siblings(".AjouterAlaCommande").show();

                // Si on est dans le panier de commande on enleve l'element.
                // On doit remplacer tout les "/" et les "." par des "_"
                var nomLi = "#item" + idx.replace(/\:/g, "_").replace(/\//g, "_").replace(/\./g, "_");
                $(nomLi).remove();

                return false;
            });

            var btnChangerPublicationALaCommande = $('.cart_qty').change(function () {

                var idx = $(this).siblings(".cart_href").val();
                var qty = $(this).val();
                //alert("[changement publication] " + idx + " " + qty);
                changerPublicationDuPanier(idx, qty);
            });

            var btnViderPanier = $('#btnViderPanier').bind("click", function (e) {
                if (confirm(messageConfirmerViderPanier)) {
                    viderLePanier();
                    $(".PanierDeCommande li").remove();
                    $("#PanierDeCommande li").remove();
                }
                return false;
            });


            // Display message
            function showMessage(msg, elm) {
                var elmMessage = $('<div></div>').addClass("scMessageBar").hide().bind("click", function (e) {
                    $(this).remove();
                });
                elmMessage.html(msg);
                if (elm) {
                    elm.append(elmMessage);
                    elmMessage.show();
                }
            }

            function showHighlightMessage(msg) {
                msgBox2.html(msg);
                msgBox2.fadeIn("fast", function () {
                    setTimeout(function () { msgBox2.fadeOut("fast"); }, 2000);
                });
            }


        });
    };



    // Default options
    $.fn.PanierDeCommande.defaults = {
        nomDeCookie: 'PanierDeCommande',

        // Events
        onAdd: function (pObj, quantity) { return true; },
        onAdded: function (pObj, quantity) { },
        onRemove: function (pObj) { return true; },
        onRemoved: function (pObj) { },
        onUpdate: function (pObj, quantity) { return true; },
        onUpdated: function (pObj, quantity) { },
        onCheckout: function (Obj) { },
        onEmpty: function () { return true; },
        onEmptyed: function () { }
    };

    jQuery.log = function (message) {
        if (window.console) {
            console.debug(message);
        }
    };

})(jQuery);
