/*******************************************************************************/
/** Contient les scritps levés par les différents événements Google Analytics **/
/*******************************************************************************/
;
//Namespace handling
if (!umen) { var umen = {}; };
if (!umen.ga) { umen.ga = {}; };
if (!umen.ga.events) {
    umen.ga.events = {};

    /*<EVENT TRACKING SETTINGS>*/
    var trackFormSubmit = true;
    var trackProductAddToCart = true;
    var trackRelatedProductClick = true;
    var trackProductReview = true;
    var trackAxisLinkClick = true;
    var trackVideoStart = true;
    var trackUserConnexionAttempt = true;
    var trackDealerSearch = true;

    //Catégories d'événements
    var gaCategories = {
        cart: 'Cart',
        dealers: 'Dealers',
        documents: 'Documents',
        forms: 'Forms',
        links: 'Links',
        products: 'Products',
        users: 'Users',
        videos: 'Videos'
    };
    //Types d'action disponibles
    var gaActions = {
        addToCart: 'Added to cart',
        clicked: 'Click',
        connexionAttempt: 'Connection',
        relatedProductClick: 'Related product clicked',
        review: 'Reviewed',
        search: 'Searched',
        start: 'Started',
        submit: 'Submitted'
    };
    /*</EVENT TRACKING SETTINGS>*/

    /*<VIRTUAL TRACKING SETTINGS>*/
    var trackDocuments = true;
    var trackMailTo = true;
    var trackPrint = true;

    var virtualPathDocuments = '/virtual/documents/';
    var virtualPathMailTo = '/virtual/mailto/';
    var virtualPathPrint = '/virtual/print/';
    /*</VIRTUAL TRACKING SETTINGS>*/


    /*<EVENT TRACKING>*/

    /// <summary>
    /// Levé lors de l'envoi d'un formulaire
    /// </summary>
    /// <param name="gaTrackCode">Code de tracking de GA</param>
    /// <param name="lang">La langue en cours</param>
    /// <param name="formId">Id du formulaire</param>
    /// <param name="formName">Le titre du formulaire</param>
    umen.ga.events.onFormSubmitted = function (gaTrackCode, lang, formId, formName) {
        if (trackFormSubmit) {
            var escapeQuotes = umen.ga.utils.escapeSingleQuotes;
            var lbl = lang + "-" + formId + "-" + escapeQuotes(formName);
            _gaq.push(['_trackEvent', gaCategories.forms, gaActions.submit, lbl]);
        }
    };

    /// <summary>
    /// Levé lorsqu'un produit est ajouté au panier
    /// </summary>
    /// <param name="gaTrackCode">Code de tracking de GA</param>
    /// <param name="lang">La langue en cours</param>
    /// <param name="cartType">Le type de cart [1:panier, 2:wishlist, 3:giftlist]</param>
    /// <param name="productId">Id du produit</param>
    /// <param name="productName">Titre du produit</param>
    /// <param name="sku">Le SKU du produit</param>
    /// <param name="qty">La quantité de produits ajoutés</param>
    umen.ga.events.onProductAddedToCart = function (gaTrackCode, lang, cartType, productId, productName, sku, qty) {
        if (trackProductAddToCart) {
            var escapeQuotes = umen.ga.utils.escapeSingleQuotes;
            var lbl = lang + "-" + productId + "-[" + escapeQuotes(sku) + "]-" + escapeQuotes(productName);
            _gaq.push(['_trackEvent', gaCategories.cart, gaActions.addToCart, lbl, qty]);
        }
    };

    /// <summary>
    /// Levé lorsqu'un utilisateur clique sur une produit relatif
    /// </summary>
    /// <param name="gaTrackCode">Code de tracking de GA</param>
    /// <param name="lang">La langue en cours</param>
    /// <param name="productId">Id du produit de la fiche</param>
    /// <param name="productName">Titre du produit de la fiche</param>
    /// <param name="sku">Le SKU du produit de la fiche</param>
    /// <param name="clickedProductId">Id du produit cliqué</param>
    /// <param name="clickedProductName">Titre du produit cliqué</param>
    /// <param name="clickedSku">Le SKU du produit cliqué</param>
    umen.ga.events.onRelatedProductClicked = function (gaTrackCode, lang, /*productId, productName, sku,*/clickedProductId, clickedProductName, clickedSku) {
        if (trackRelatedProductClick) {
            var escapeQuotes = umen.ga.utils.escapeSingleQuotes;
            var lbl = lang + "-" + clickedProductId + "-[" + escapeQuotes(clickedSku) + "]-" + escapeQuotes(clickedProductName);
            _gaq.push(['_trackEvent', gaCategories.products, gaActions.relatedProductClick, lbl]);
        }
    };

    /// <summary>
    /// Levé lorsqu'un commentaire est ajouté sur un produit
    /// </summary>
    /// <param name="gaTrackCode">Code de tracking de GA</param>
    /// <param name="lang">La langue en cours</param>
    /// <param name="productId">Id du produit</param>
    /// <param name="productName">Titre du produit</param>
    /// <param name="sku">Le SKU du produit</param>
    /// <param name="sku">Note obtenue par le produit [null si aucune note]</param>
    umen.ga.events.onProductReviewed = function (gaTrackCode, lang, productId, productName, sku, note) {
        if (trackProductReview) {
            var escapeQuotes = umen.ga.utils.escapeSingleQuotes;
            var lbl = lang + "-" + productId + "-[" + escapeQuotes(sku) + "]-" + escapeQuotes(productName);
            if (note != null) {
                //Si on a une note on la passe en paramètre
                _gaq.push(['_trackEvent', gaCategories.products, gaActions.review, lbl, Math.round(note)]);
            } else {
                _gaq.push(['_trackEvent', gaCategories.products, gaActions.review, lbl]);
            }
        }
    };

    /// <summary>
    /// Levé lorsqu'un lien de la librairie de liens est cliqué
    /// </summary>
    /// <param name="gaTrackCode">Code de tracking de GA</param>
    /// <param name="lang">La langue en cours</param>
    /// <param name="linkId">Id du lien</param>
    /// <param name="linkName">Le titre du lien</param>
    umen.ga.events.onAxisLinkClicked = function (gaTrackCode, lang, linkId, linkName) {
        if (trackAxisLinkClick) {
            var escapeQuotes = umen.ga.utils.escapeSingleQuotes;
            var lbl = lang + "-" + linkId + "-" + escapeQuotes(linkName);
            _gaq.push(['_trackEvent', gaCategories.links, gaActions.clicked, lbl]);
        }
    };

    /// <summary>
    /// Levé lorsqu'un vidéo est démarré
    /// </summary>
    /// <param name="gaTrackCode">Code de tracking de GA</param>
    /// <param name="lang">La langue en cours</param>
    /// <param name="videoId">Id du vidéo</param>
    /// <param name="videoTitle">Le titre du vidéo</param>
    umen.ga.events.onVideoStarted = function (gaTrackCode, lang, videoId, videoTitle) {
        if (trackVideoStart) {
            var escapeQuotes = umen.ga.utils.escapeSingleQuotes;
            var lbl = lang + "-" + videoId + "-" + escapeQuotes(videoTitle);
            _gaq.push(['_trackEvent', gaCategories.videos, gaActions.started, lbl]);
        }
    };

    /// <summary>
    /// Levé lorsqu'un utilisateur effectue une connexion
    /// </summary>
    /// <param name="gaTrackCode">Code de tracking de GA</param>
    /// <param name="lang">La langue en cours</param>
    /// <param name="username">Le nom d'utilisateur demandant la connexion</param>
    umen.ga.events.onUserConnexionAttempt = function (gaTrackCode, lang, username) {
        if (trackUserConnexionAttempt) {
            var escapeQuotes = umen.ga.utils.escapeSingleQuotes;
            var lbl = lang + "-" + escapeQuotes(username);
            _gaq.push(['_trackEvent', gaCategories.users, gaActions.connexionAttempt, lbl]);
        }
    };

    /// <summary>
    /// Levé lorsqu'une recherche est faite pour un détaillant
    /// </summary>
    /// <param name="gaTrackCode">Code de tracking de GA</param>
    /// <param name="lang">La langue en cours</param>
    /// <param name="searchString">La chaine de recherche effectuée</param>
    umen.ga.events.onDealerSearched = function (gaTrackCode, lang, searchString) {
        if (trackDealerSearch) {
            var escapeQuotes = umen.ga.utils.escapeSingleQuotes;
            var lbl = lang + "-" + escapeQuotes(searchString);
            _gaq.push(['_trackEvent', gaCategories.dealers, gaActions.search, lbl]);
        }
    };

    /*</EVENT TRACKING>*/


    /*<VIRTUAL TRACKING>*/

    /// <summary>
    /// Permet de tracker les clicks sur les "mailto:"
    /// </summary>
    /// <param name="domElement">domElement</param>
    umen.ga.events.trackMailTo = function (domElement) {
        var email = ((domElement.srcElement) ? domElement.srcElement.href : domElement.href).substring(7); //(on retire le "mailto:")
        var url = umen.ga.utils.cleanURL(window.location.pathname, true);
        var mailPath = virtualPathMailTo + url + '/' + email;

        _gaq.push(['_trackPageview', mailPath]);
    };

    /// <summary>
    /// Permet de tracker les impressions
    /// </summary>
    /// <param name="domElement">domElement</param>
    umen.ga.events.trackPrint = function (domElement) {
        //TODO : Améliorer pour supporter le onclick et les urls des éléments imprimés
        var query = "";
        try {
            //Print dans le href
            //query = domElement.attributes['href'].value; 
            query = umen.ga.utils.cleanURL(window.location.pathname, true);
            filePath = virtualPathPrint + query;

            _gaq.push(['_trackPageview', filePath]);
        }
        catch (e) { }
    };

    /// <summary>
    /// Permet de tracker les click sur les téléchargements de documents
    /// </summary>
    /// <param name="domElement">domElement</param>
    umen.ga.events.trackDocument = function (domElement) {
        try {
            var query = (domElement.srcElement) ? domElement.srcElement.href : domElement.href;
            var re1 = query.split('id=');
            var re2 = query.split('document=');
            var re3 = query.split('langue=');

            // Id document
            var idDocument = " ";
            if (re1 != null) {
                try { idDocument = (re1[1].split("&"))[0]; }
                catch (e) { }
            }

            // Nom du document avec l'extension
            var documentName = "Non disponible";
            if (re2 != null) {
                try {
                    var found2 = re2[1];
                    /* Gestion du & dans nom de fichier */
                    //var index2 = found2.split("&")
                    //var documentName = index2[0];
                    documentName = found2;
                }
                catch (e) { documentName = ""; }
            }

            // Langue
            var lang = " ";
            if (re3 != null) {
                try { lang = (re3[1].split("&"))[0]; }
                catch (e) { }
            }

            var filePath = "";
            var escapeQuotes = umen.ga.utils.escapeSingleQuotes;
            filePath = virtualPathDocuments + lang + "/" + idDocument + "-" + escapeQuotes(documentName) + "/axisdocument.aspx?id=" + idDocument + "&download=true";

            _gaq.push(['_trackPageview', filePath]);
        }
        catch (e) { }
    };

    /// <summary>
    /// Attache les événements de tracking des documents, de l'impression et des mailto
    /// </summary>
    umen.ga.events.mapVirtualTrackingEvents = function () {
        var hrefs = document.getElementsByTagName("a");
        var link_path = "";

        for (var l = 0; l < hrefs.length; l++) {
            try {
                // Add the hostname and link location into variables
                var link_path = hrefs[l].pathname;
                var link_location = String(hrefs[l]);
                var regex_mail = new RegExp("^mailto:", "i");
                var regex_link = new RegExp("/axisdocument", "i");
                var regex_print = new RegExp("print", "i");

                // Check if it's a mail link
                if (trackMailTo && regex_mail.test(link_location)) {
                    // Stats pour click courriel
                    $(hrefs[l]).click(function () {
                        umen.ga.events.trackMailTo(this);
                    });
                }
                else if (trackPrint && regex_print.test(link_location)) {
                    // Stats pour click de lien "print"
                    $(hrefs[l]).click(function () {
                        umen.ga.events.trackPrint(this);
                    });
                }
                // Check to see if the link is an internal link (on garde juste le host en cours)
                else if (location.host == hrefs[l].hostname) {
                    if (trackDocuments && regex_link.test(link_location)) {
                        $(hrefs[l]).click(function () {
                            //addtrackerlistener(hrefs[l]);
                            umen.ga.events.trackDocument(this);
                        });
                    }
                }
            }
            catch (err) { }
        }
    };

    /*<VIRTUAL TRACKING>*/


    /*<EVENT ATTACHEMENT>*/
    umen.ga.events.attachFormSubmittedEvent = function (selectorId, valGroup, gaTrackCode, lang, formId, formName) {
        $(document).ready(function () {
            $('#' + selectorId).click(function () {
                if (Page_ClientValidate(valGroup)) {
                    umen.ga.events.onFormSubmitted(gaTrackCode, lang, formId, formName);
                }
            });
        });
    };

    umen.ga.events.attachProductAddedToCartEvent = function (selectorId, gaTrackCode, lang, cartType, productId, productName, sku, qty) {
        $(document).ready(function () {
            $('#' + selectorId).click(function () {
                umen.ga.events.onProductAddedToCart(gaTrackCode, lang, cartType, productId, productName, sku, qty);
            });
        });
    };

    umen.ga.events.attachRelatedProductClickedEvent = function (selectors, gaTrackCode, lang, /*productId, productName, sku,*/clickedProductId, clickedProductName, clickedSku) {
        $(document).ready(function () {
            $(selectors).click(function () {
                umen.ga.events.onRelatedProductClicked(gaTrackCode, lang, /*productId, productName, sku,*/clickedProductId, clickedProductName, clickedSku);
            });
        });
    };

    umen.ga.events.attachProductReviewedEvent = function (selectors, gaTrackCode, lang, productId, productName, sku/*, note*/) {
        $(document).ready(function () {
            $(selectors).click(function () {
                if (Page_ClientValidate()) {
                    umen.ga.events.onProductReviewed(gaTrackCode, lang, productId, productName, sku, null);
                }
            });
        });
    };

    umen.ga.events.attachAxisLinkClickedEvent = function (selectorId, gaTrackCode, lang, linkId, linkName) {
        $(document).ready(function () {
            $('#' + selectorId).click(function () {
                umen.ga.events.onAxisLinkClicked(gaTrackCode, lang, linkId, linkName);
            });
        });
    };

    umen.ga.events.attachVideoStartedEvent = function (selectorId, gaTrackCode, lang, videoId, videoTitle) {
        $(document).ready(function () {
            $('#' + selectorId).click(function () {
                umen.ga.events.onVideoStarted(gaTrackCode, lang, videoId, videoTitle);
            });
        });
    };

    umen.ga.events.attachUserConnexionAttemptEvent = function (selectorId, valGroup, gaTrackCode, lang, usernameInputId) {
        $(document).ready(function () {
            $('#' + selectorId).click(function () {
                if (Page_ClientValidate(valGroup)) {
                    umen.ga.events.onUserConnexionAttempt(gaTrackCode, lang, $('#' + usernameInputId).val());
                }
            });
        });
    };

    umen.ga.events.attachDealerSearchedEvent = function (selectorId, valGroup, gaTrackCode, lang, inputId) {
        $(document).ready(function () {
            $('#' + selectorId).click(function () {
                if (Page_ClientValidate(valGroup)) {
                    umen.ga.events.onDealerSearched(gaTrackCode, lang, $('#' + inputId).val());
                }
            });
        });
    };

    /*</EVENT ATTACHEMENT>*/
};


/*<UTILS>*/

if (!umen.ga.utils) {
    umen.ga.utils = {};

    /// <summary>
    /// Enlève les slash au début et à la fin d'une chaine
    /// </summary>
    /// <param name="url">L'url à nettoyer</param>
    /// <param name="end">Détermine si on enlève les slash à la fin</param>
    umen.ga.utils.cleanURL = function (url, end) {
        var url = url.toString();
        var urlLen = url.length;

        if (end && url.charAt((urlLen - 1)) == '/') {
            url = url.substring(0, (urlLen - 1));
        } else if (url.charAt(0) == '/') {
            url = url.substring(1, urlLen);
        }

        return url;
    };

    /// <summary>
    /// Escape les apostrpophes
    /// </summary>
    umen.ga.utils.escapeSingleQuotes = function (str) {
        str = str.replace(/\\'/g, "\'");
        str = str.replace(/\'/g, "\\'");
        return str;
    };

    /// <summary>
    /// Escape les apostrpophes
    /// </summary>
    umen.ga.utils.formatPrice = function (str) {
        str = str.replace(/,/g, ".");
        return str;
    };
};
/*</UTILS>*/

/*<CHECKOUT>*/
if (!umen.ga.checkout) {
    umen.ga.checkout = {};

    /// <summary>
    /// Model contenant l'info sur la commande
    /// </summary>
    umen.ga.checkout.orderInfo = function (orderId, storeName, total, tax, shipping, city, state, country) {
        var escapeQuotes = umen.ga.utils.escapeSingleQuotes;
        var formatPrice = umen.ga.utils.formatPrice;

        this.orderId = escapeQuotes(orderId);
        this.storeName = escapeQuotes(storeName);
        this.total = formatPrice(total);
        this.tax = formatPrice(tax);
        this.shipping = formatPrice(shipping);
        this.city = escapeQuotes(city);
        this.state = escapeQuotes(state);
        this.country = escapeQuotes(country);
    };

    /// <summary>
    /// Model contenant l'info d'un produit de la commande
    /// </summary>
    umen.ga.checkout.orderItemInfo = function (sku, productName, variation, unitPrice, qty) {
        var escapeQuotes = umen.ga.utils.escapeSingleQuotes;
        var formatPrice = umen.ga.utils.formatPrice;

        this.sku = escapeQuotes(sku);
        this.productName = escapeQuotes(productName);
        this.variation = escapeQuotes(variation);
        this.unitPrice = formatPrice(unitPrice);
        this.qty = qty;
    };

    /// <summary>
    ///Permet d'ajouter une commande dasn GoogleCheckout
    /// </summary>
    /// <param name="orderInfo">L'info sur la commande</param>
    /// <param name="orderItems">Un array de "orderItemInfo" sur les produits</param>
    /// <remarks>
    /*	
    Exemple d'utilisation :
    var order = new umen.ga.checkout.orderInfo('1234', 'Acme Clothing', '11.99', '1.29', '5', 'San Jose', 'California', 'USA');
    var items = [
    new umen.ga.checkout.orderItemInfo('DD44', 'T-Shirt', 'Green Medium', '11.99', '1'),
    new umen.ga.checkout.orderItemInfo('DD45', 'T-Shirt', 'Red Large', '12.99', '3')
    ];
    umen.ga.checkout.addOrder(order, items);
    */
    /// </remarks>
    umen.ga.checkout.addOrder = function (orderInfo, orderItems) {

        //Permettrait de distinguer les clients des autres utilisateurs ...
        _gaq.push(['_setCustomVar', 1, 'GoogleCheckout', 'Client']);

        //Ajout de la transaction
        _gaq.push(['_addTrans',
			orderInfo.orderId, // order ID - required
			orderInfo.storeName, // affiliation or store name
			orderInfo.total, // total - required
			orderInfo.tax, 	// tax
			orderInfo.shipping, // shipping
			orderInfo.city, 	// city
			orderInfo.state, // state or province
			orderInfo.country	// country
		]);

        for (i = 0; i < orderItems.length; i++) {
            //Ajout des items
            _gaq.push(['_addItem',
				orderInfo.orderId, 		// order ID - required
				orderItems[i].sku, 		// SKU/code - required
				orderItems[i].productName, // product name
				orderItems[i].variation, // category or variation
				orderItems[i].unitPrice, // unit price - required
				orderItems[i].qty			// quantity - required
			]);
        }

        //submits transaction to the Analytics servers
        _gaq.push(['_trackTrans']);
    };
};
/*</CHECKOUT>*/

