/*******************************************************************************/
/** Contient les scritps levés par les différents événements Google Analytics **/
/*******************************************************************************/
;
//Namespace handling
Namespace("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];
					if (found2 != null) {
						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, valGroup, gaTrackCode, lang, productId, productName, sku/*, note*/) {
		$(document).ready(function () {
			$(selectors).click(function () {
				if (Page_ClientValidate(valGroup)) {
					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>*/

