﻿/*************************************/
/*   Fonctions utilitaires de debug  */
/*************************************/
var DEBUG_LOCAL_ACTIVATED = true;
var DEBUG_LOCAL_ACTIVATED_EVEN_IF_NO_CONSOLE = false;
var DEBUG_OMNITURE_ACTIVATED = false;

/* fonction utilitaire de tracking dans la console firebug */
function omnitureTrack(item) {
	if (uiContext.Infos.DebugTracking) {
		if (DEBUG_LOCAL_ACTIVATED) {
			if (typeof(console) != "undefined") {
				console.debug(item);
			} else {				
				if (DEBUG_LOCAL_ACTIVATED_EVEN_IF_NO_CONSOLE) window.alert(item);
			}
		}
	}
}

/* active le debbugger omniture */
function launchOmnitureDebugger() {
	if (uiContext.Infos.DebugTracking) {
		
		if (DEBUG_OMNITURE_ACTIVATED) {
			var popupContent = "<script language=\"JavaScript\" src=\"https://sitecatalyst.omniture.com/sc_tools/stats_debugger.html\"></script><script language=\"JavaScript\">window.focus();</script>";
			window.open("","stats_debugger","width=600,height=600,location=0,menubar=0,status=1,toolbar=0,resizable=1,scrollbars=1").document.write(popupContent);
		}
	}
}

/*************************************/
/* Fonctions et classes utilitaires  */
/*************************************/
// défintion de la "classe" PropertyBag
function PropertyBag() {
	/* méthodes privées */
	function stringContainsItem(listAsString_, item_, separator_) {
		var listAsArray = listAsString_.split(separator_);
		for (var i=0; i<listAsArray.length; i++) {
			if (listAsArray[i]==item_) return true;
		}
		return false;
	}

	/* champs privés */
	var allProps;
	var events;

	/* méthodes publiques */
	this.setPropertyValue = function (propName, propValue) {
		if (!allProps) {
			//1er ajout de propriété
			allProps = propName;
		} else {
			if (!stringContainsItem(allProps, propName, ",")) {
				allProps = allProps + "," + propName;
			}
		}
		this[propName] = propValue;
	}
	//ajout de valeur pour les propriétés pouvant contenir plusieurs valeurs
	this.addPropertyValue = function (propName, propValue) {
		if (!allProps) {
			//1er ajout de propriété
			allProps = propName;
			this[propName] = propValue;
		} else {
			if (stringContainsItem(allProps, propName, ",")) {
				//Cette propriété a déjà été définie : on rajoute une valeur
				this[propName] = this[propName] + "," + propValue;
			} else {
				//On définit cette propriété pour la 1ere fois : on l'ajoute à la liste + on lui affecte une valeur
				allProps = allProps + "," + propName;
				this[propName] = propValue;
			}
		}
	}
	this.getPropertyValue = function (propName) {
		return this[propName];
	}
	this.getAllProps = function () {
		return allProps;
	}
	this.hasProperties = function () {
		return (allProps);
	}
	this.addEvent = function (eventName) {
		if (!this["events"]) {
			this["events"] = eventName;	
		} else {
			if (!stringContainsItem(this["events"], eventName, ",")) {
				this["events"] = this["events"] + "," + eventName;
			}
		}
	}
	this.getEvents = function () {
		return this["events"];
	}
	this.hasEvents = function () {
		return (this["events"]);
	}
	this.transferAllPropertiesAndEvents = function (toObj) {
		if (this.hasProperties()) {
			var allPropsArray = this.getAllProps().split(",");
			for (var i=0; i<allPropsArray.length; i++) {
				var propName = allPropsArray[i];
				toObj[propName] = this.getPropertyValue(propName);
			}
		}
		if (this.hasEvents()) {
			toObj["events"] = this.getEvents();
		}
	}
	//fonction facilitant le debug
	this.displayAllProps = function () {
		var fullString = "";
		var sep = "";
		if (allProps) {
			var allPropsArray = allProps.split(",");
			for (var i=0; i<allPropsArray.length; i++) {
				fullString = fullString + sep + allPropsArray[i] + " : " + this[allPropsArray[i]];
				sep = "\n";
			}
			window.alert(fullString);
		}
	}
}
// définition de la "classe" OmnitureContext
function OmnitureContext(uiContext, onPageLoad) {
	this.UiContext = uiContext;
	this.OnPageLoad = onPageLoad;
	this.Bag = new PropertyBag();
}
/*************************************/
/*    Fonctions specifiques d'init   */
/*************************************/	

// définition de l'"enum" OrigineMiseAuPanier
var OrigineMiseAuPanier = new Object();
OrigineMiseAuPanier.CommandeDirecte = 1;
OrigineMiseAuPanier.DescenteProduit = 0;
OrigineMiseAuPanier.ECatalogue = 2;

var TypeReglement = new Object();
TypeReglement.Comptant = 1;
TypeReglement.Credit = 2;

/******* TRAITEMENT PAR DEFAUT *******/
function pageViewDefault(omnitureContext) {
	omnitureContext.Bag.setPropertyValue("pageName", omnitureContext.UiContext.Page.Code);
	omnitureContext.Bag.setPropertyValue("channel", omnitureContext.UiContext.Page.Type);
}

/*************** HOMEPAGE ************/
function pageViewHomepage(omnitureContext) {
	omnitureContext.Bag.setPropertyValue("pageName", "Homepage");
	omnitureContext.Bag.setPropertyValue("channel", "Homepage");
	//omnitureContext.Bag.setPropertyValue("prop3", "Homepage");
	omnitureContext.Bag.setPropertyValue("prop8", "Homepage");	
}

/************** DESCENTE *************/
function pageViewDescenteSegmentationCommonItems(omnitureContext, breadcrumbs) {
	omnitureContext.Bag.setPropertyValue("eVar3", "Navigation");
	if (breadcrumbs) {
		var bread = "";
		for (var i=0; i<breadcrumbs.length; i++) {
			if (bread.length>0) bread += " > ";
			bread += breadcrumbs[i];
		}
		omnitureContext.Bag.setPropertyValue("eVar4", bread);
	}
	omnitureContext.Bag.setPropertyValue("channel", omnitureContext.UiContext.Arbo.Univers.Libelle);
}
function pageViewDescenteUnivers(omnitureContext) {
	pageViewDescenteSegmentationCommonItems(omnitureContext, [omnitureContext.UiContext.Arbo.Univers.Libelle]);
	omnitureContext.Bag.setPropertyValue("pageName", omnitureContext.UiContext.Arbo.Univers.Libelle);
	omnitureContext.Bag.setPropertyValue("prop8", "univers");	
	//TODO : s.prop? pour filtres
}
function pageViewDescenteBoutique(omnitureContext) {
	pageViewDescenteSegmentationCommonItems(omnitureContext, [omnitureContext.UiContext.Arbo.Univers.Libelle, omnitureContext.UiContext.Arbo.Boutique.Libelle]);
	omnitureContext.Bag.setPropertyValue("pageName", omnitureContext.UiContext.Arbo.Univers.Libelle+": "+omnitureContext.UiContext.Arbo.Boutique.Libelle);
	//omnitureContext.Bag.setPropertyValue("prop3", omnitureContext.UiContext.Arbo.Univers.Libelle+": "+omnitureContext.UiContext.Arbo.Boutique.Libelle);
	omnitureContext.Bag.setPropertyValue("prop8", "boutique");
	//TODO : s.prop? pour filtres
}
function pageViewDescenteRayon(omnitureContext) {
	pageViewDescenteSegmentationCommonItems(omnitureContext, [omnitureContext.UiContext.Arbo.Univers.Libelle, omnitureContext.UiContext.Arbo.Boutique.Libelle, omnitureContext.UiContext.Arbo.Rayon.Libelle]);
	omnitureContext.Bag.setPropertyValue("pageName", omnitureContext.UiContext.Arbo.Univers.Libelle+": "+omnitureContext.UiContext.Arbo.Boutique.Libelle+": "+omnitureContext.UiContext.Arbo.Rayon.Libelle);
	//omnitureContext.Bag.setPropertyValue("prop3", omnitureContext.UiContext.Arbo.Univers.Libelle+": "+omnitureContext.UiContext.Arbo.Boutique.Libelle);
	omnitureContext.Bag.setPropertyValue("prop4", omnitureContext.UiContext.Arbo.Univers.Libelle+": "+omnitureContext.UiContext.Arbo.Boutique.Libelle+": "+omnitureContext.UiContext.Arbo.Rayon.Libelle);
	omnitureContext.Bag.setPropertyValue("prop8", "rayon");		
	//TODO : s.prop? pour filtres
}
function pageViewDescenteSousRayon(omnitureContext) {
	pageViewDescenteSegmentationCommonItems(omnitureContext, [omnitureContext.UiContext.Arbo.Univers.Libelle, omnitureContext.UiContext.Arbo.Boutique.Libelle, omnitureContext.UiContext.Arbo.Rayon.Libelle, omnitureContext.UiContext.Arbo.SousRayon.Libelle]);
	omnitureContext.Bag.setPropertyValue("pageName", omnitureContext.UiContext.Arbo.Univers.Libelle+": "+omnitureContext.UiContext.Arbo.Boutique.Libelle+": "+omnitureContext.UiContext.Arbo.Rayon.Libelle+": "+omnitureContext.UiContext.Arbo.SousRayon.Libelle);
	//omnitureContext.Bag.setPropertyValue("prop3", omnitureContext.UiContext.Arbo.Univers.Libelle+": "+omnitureContext.UiContext.Arbo.Boutique.Libelle);
	omnitureContext.Bag.setPropertyValue("prop4", omnitureContext.UiContext.Arbo.Univers.Libelle+": "+omnitureContext.UiContext.Arbo.Boutique.Libelle+": "+omnitureContext.UiContext.Arbo.Rayon.Libelle);
	omnitureContext.Bag.setPropertyValue("prop5", omnitureContext.UiContext.Arbo.Univers.Libelle+": "+omnitureContext.UiContext.Arbo.Boutique.Libelle+": "+omnitureContext.UiContext.Arbo.Rayon.Libelle+": "+omnitureContext.UiContext.Arbo.SousRayon.Libelle);
	omnitureContext.Bag.setPropertyValue("prop8", "sous-rayon");
	//TODO : s.prop? pour filtres
}
function pageViewDescenteFicheProduit(omnitureContext) {
	omnitureContext.Bag.setPropertyValue("pageName", "produit");	
	if (omnitureContext.UiContext.Arbo.Univers != null) {
		omnitureContext.Bag.setPropertyValue("channel", omnitureContext.UiContext.Arbo.Univers.Libelle);
		if (omnitureContext.UiContext.Arbo.Boutique != null) {
			//omnitureContext.Bag.setPropertyValue("prop3", omnitureContext.UiContext.Arbo.Univers.Libelle+": "+omnitureContext.UiContext.Arbo.Boutique.Libelle);
			if (omnitureContext.UiContext.Arbo.Rayon != null) {
				omnitureContext.Bag.setPropertyValue("prop4", omnitureContext.UiContext.Arbo.Univers.Libelle+": "+omnitureContext.UiContext.Arbo.Boutique.Libelle+": "+omnitureContext.UiContext.Arbo.Rayon.Libelle);
				if (omnitureContext.UiContext.Arbo.SousRayon != null) {
					omnitureContext.Bag.setPropertyValue("prop5", omnitureContext.UiContext.Arbo.Univers.Libelle+": "+omnitureContext.UiContext.Arbo.Boutique.Libelle+": "+omnitureContext.UiContext.Arbo.Rayon.Libelle+": "+omnitureContext.UiContext.Arbo.SousRayon.Libelle);
				}
			}
		}
	}
	omnitureContext.Bag.setPropertyValue("prop8", "fiche produit");
	
	//évènement fiche produit vue
	omnitureContext.Bag.addEvent("prodView");
	omnitureContext.Bag.addEvent("event2");
	omnitureContext.Bag.setPropertyValue("products", ";"+omnitureContext.UiContext.ProcessParameters.Code);
}

/*************  RECHERCHE  ***********/
function pageViewSearchResults(omnitureContext) {
	omnitureContext.Bag.setPropertyValue("pageName", "recherche interne");	
	omnitureContext.Bag.setPropertyValue("channel", "recherche interne");
	omnitureContext.Bag.setPropertyValue("prop1", omnitureContext.UiContext.ProcessParameters.Search);
	//TODO : s.prop2 = nombre de résultats de recherche ? si 0 : s.prop2 = "zero"
	//TODO : s.prop3 = numéro de page ?
	// remarque : il existe une traitement dans le s_code.js qui fait : ajout d'event1 + s.eVar1=s.prop1
}

/*************** COMMANDE ************/
var CHANNEL_COMMANDE = "checkout";
function pageViewCommandeCommonItems(omnitureContext) {
	omnitureContext.Bag.setPropertyValue("channel", CHANNEL_COMMANDE);
	omnitureContext.Bag.setPropertyValue("prop8", CHANNEL_COMMANDE);
	//omnitureContext.Bag.setPropertyValue("prop3", omnitureContext.Bag.getPropertyValue("pageName"));
}
function pageViewCommandePanier(omnitureContext) {
	omnitureContext.Bag.setPropertyValue("pageName", CHANNEL_COMMANDE+": panier");
	pageViewCommandeCommonItems(omnitureContext);
	omnitureContext.Bag.addEvent("scView");
	//liste des produits sans montant ni unités
	for (var i = 0; i < omnitureContext.UiContext.Panier.Lignes.length; i++) {
		var productItem = ";" + omnitureContext.UiContext.Panier.Lignes[i].Reference;
		omnitureContext.Bag.addPropertyValue("products", productItem);
	}
}
function pageViewCommandeIdentification(omnitureContext) {
	omnitureContext.Bag.setPropertyValue("pageName", CHANNEL_COMMANDE+": identification");
	pageViewCommandeCommonItems(omnitureContext);
}
function pageViewCommandeCreation(omnitureContext) {
	omnitureContext.Bag.setPropertyValue("pageName", CHANNEL_COMMANDE+": création nouveau compte");
	pageViewCommandeCommonItems(omnitureContext);
}
function pageViewCommandeDossierCredit(omnitureContext) {
	omnitureContext.Bag.setPropertyValue("pageName", CHANNEL_COMMANDE+": dossier crédit");
	pageViewCommandeCommonItems(omnitureContext);
}
function pageViewCommandeLivraison(omnitureContext) {
	omnitureContext.Bag.setPropertyValue("pageName", CHANNEL_COMMANDE+": livraison");
	pageViewCommandeCommonItems(omnitureContext);
}
function pageViewCommandeTypeReglement(omnitureContext) {
	omnitureContext.Bag.setPropertyValue("pageName", CHANNEL_COMMANDE+": type reglement");
	pageViewCommandeCommonItems(omnitureContext);
}
function pageViewCommandeModeLivraison(omnitureContext) {
	omnitureContext.Bag.setPropertyValue("pageName", CHANNEL_COMMANDE+": mode livraison");
	pageViewCommandeCommonItems(omnitureContext);
}
function pageViewCommandeChoixPaiement(omnitureContext) {
	omnitureContext.Bag.setPropertyValue("pageName", CHANNEL_COMMANDE+": choix paiement");
	pageViewCommandeCommonItems(omnitureContext);
}
function pageViewCommandeConfirmation(omnitureContext) {
	omnitureContext.Bag.setPropertyValue("pageName", CHANNEL_COMMANDE+": confirmation");
	omnitureContext.Bag.setPropertyValue("channel", omnitureContext.Bag.getPropertyValue("pageName")); //cas particulier pour la page de confirmation pour la faire ressortir
	omnitureContext.Bag.setPropertyValue("prop8", omnitureContext.Bag.getPropertyValue("pageName"));
	//omnitureContext.Bag.setPropertyValue("prop3", omnitureContext.Bag.getPropertyValue("pageName"));
	
	omnitureContext.Bag.addEvent("purchase");
	omnitureContext.Bag.setPropertyValue("purchaseID", omnitureContext.UiContext.Panier.Id); // ! ne jamais remonter cette propriété à un autre endroit !
	
	//ajout des informations de panier
	var hasCommandeDirecte = false;
	var hasNotCommandeDirecte = false;

	for (var i = 0; i < omnitureContext.UiContext.Panier.Lignes.length; i++) {
		var ligne = omnitureContext.UiContext.Panier.Lignes[i];
		if (ligne.OrigineMiseAuPanier == OrigineMiseAuPanier.CommandeDirecte) {
			hasCommandeDirecte = true;
		} else {
			hasNotCommandeDirecte = true;
		}

		var productItem = ";" + ligne.Reference + ";" + ligne.Quantite + ";" + ligne.Montant + ";;evar20=" + ligne.Taille + "|evar28=" + ligne.Coloris;
		
		omnitureContext.Bag.addPropertyValue("products", productItem);
	}

	// Frais de port : ajouter évènement event18 + event18=frais de port sur une ligne produit FRAIS DE PORT avev unités=1 et cout=0
	omnitureContext.Bag.addEvent("event18");
	omnitureContext.Bag.addPropertyValue("products", ";FRAIS DE PORT;1;0;event18=" + omnitureContext.UiContext.Panier.MontantFraisPort);
	
	if (hasCommandeDirecte) {
		if (hasNotCommandeDirecte) {
			omnitureContext.Bag.setPropertyValue("eVar13", "commande mixte");
		} else {
			omnitureContext.Bag.setPropertyValue("eVar13", "commande directe");
			omnitureContext.Bag.addEvent("event4");//commande directe pure
		}
	} else {
		omnitureContext.Bag.setPropertyValue("eVar13", "commande web");	
	}

	//Moyen de paiement
	omnitureContext.Bag.setPropertyValue("evar19", omnitureContext.Bag.getPropertyValue(omnitureContext.UiContext.ModePaiement.Produit));
	
	//Codes avantages
	omnitureContext.Bag.setPropertyValue("evar14", omnitureContext.Bag.getPropertyValue(omnitureContext.UiContext.Panier.CodeAvantage));
}

/***************  COMPTE  ************/
var CHANNEL_COMPTE = "mon compte";
function pageViewCompteCommonItems(omnitureContext) {
	omnitureContext.Bag.setPropertyValue("channel", CHANNEL_COMPTE);
	omnitureContext.Bag.setPropertyValue("prop8", CHANNEL_COMPTE);
	//omnitureContext.Bag.setPropertyValue("prop3", omnitureContext.Bag.getPropertyValue("pageName"));
}
function pageViewCompteIdentification(omnitureContext) {
	omnitureContext.Bag.setPropertyValue("pageName", CHANNEL_COMPTE+": identification");
	pageViewCompteCommonItems(omnitureContext);
}
function pageViewCompteCreation(omnitureContext) {
	omnitureContext.Bag.setPropertyValue("pageName", CHANNEL_COMPTE+": création nouveau compte");
	pageViewCompteCommonItems(omnitureContext);
}
function pageViewCompteSommaire(omnitureContext) {
	omnitureContext.Bag.setPropertyValue("pageName", CHANNEL_COMPTE+": sommaire");
	pageViewCompteCommonItems(omnitureContext);
}
function pageViewCompteCoordonnees(omnitureContext) {
	omnitureContext.Bag.setPropertyValue("pageName", CHANNEL_COMPTE+": coordonnées");
	pageViewCompteCommonItems(omnitureContext);
}
function pageViewCompteAdressesLivraison(omnitureContext) {
	omnitureContext.Bag.setPropertyValue("pageName", CHANNEL_COMPTE+": adresses de livraison");
	pageViewCompteCommonItems(omnitureContext);
}
function pageViewCompteSuiviCommande(omnitureContext) {
	omnitureContext.Bag.setPropertyValue("pageName", CHANNEL_COMPTE+": suivi de commande");
	pageViewCompteCommonItems(omnitureContext);
	omnitureContext.Bag.addEvent("event10");
}
function pageViewCompteSuiviPreferences(omnitureContext) {
	omnitureContext.Bag.setPropertyValue("pageName", CHANNEL_COMPTE+": préférences");
	pageViewCompteCommonItems(omnitureContext);
}
function pageViewCompteNewsletters(omnitureContext) {
	omnitureContext.Bag.setPropertyValue("pageName", CHANNEL_COMPTE+": newsletters");
	pageViewCompteCommonItems(omnitureContext);
}
function pageViewCompteMotDePasse(omnitureContext) {
	omnitureContext.Bag.setPropertyValue("pageName", CHANNEL_COMPTE+": mot de passe");
	pageViewCompteCommonItems(omnitureContext);
}
function pageViewCompteDossierCredit(omnitureContext) {
	omnitureContext.Bag.setPropertyValue("pageName", CHANNEL_COMPTE+": dossier crédit");
	pageViewCompteCommonItems(omnitureContext);
}
function pageViewCompteFavoris(omnitureContext) {
	omnitureContext.Bag.setPropertyValue("pageName", CHANNEL_COMPTE+": favoris");
	pageViewCompteCommonItems(omnitureContext);
}

/**************** AUTRES *************/
function pageViewOtherInfoService(omnitureContext) {
	omnitureContext.Bag.setPropertyValue("pageName", "Services: "+omnitureContext.UiContext.ProcessParameters.id);
	omnitureContext.Bag.setPropertyValue("channel", "Services");
	omnitureContext.Bag.setPropertyValue("prop8", "Services");
	//omnitureContext.Bag.setPropertyValue("prop3", omnitureContext.Bag.getPropertyValue("pageName"));
}

// demande catalogue
var CHANNEL_DEMCAT = "demande catalogue";
function pageViewDemandeCatalogue(omnitureContext) {
	var pageCode = omnitureContext.UiContext.Page.Code;
	omnitureContext.Bag.setPropertyValue("channel", CHANNEL_DEMCAT);
	if (pageCode == "SERVICE_DEMCAT1") {
		omnitureContext.Bag.setPropertyValue("pageName", CHANNEL_DEMCAT+": choix catalogue");		
	} else if (pageCode == "SERVICE_DEMCAT3B_AUTH") {
		omnitureContext.Bag.setPropertyValue("pageName", CHANNEL_DEMCAT+": coordonnées");
	} else if (pageCode == "SERVICE_DEMCAT4") {
		omnitureContext.Bag.setPropertyValue("pageName", CHANNEL_DEMCAT+": validation");
	} else {
		omnitureContext.Bag.setPropertyValue("pageName", pageCode);
	}
}

/*************************************/
/******** Fonctions globales *********/
/*************************************/		

// Détermine le contexte de la page puis délègue le traitement adéquat d'initialisation des variables de tracking
function omniturePageViewInitVars(omnitureContext) {
	
	//alert('début omniturePageViewInitVars');
	
	var pageCode = omnitureContext.UiContext.Page.Code;
	var dansTunnelCommande = omnitureContext.UiContext.Page.DansTunnelCommande;

	//Commun à toutes les pages
	omnitureContext.Bag.setPropertyValue("prop9", omnitureContext.UiContext.Infos.Pays);
	omnitureContext.Bag.setPropertyValue("prop10", omnitureContext.UiContext.Infos.Langue);

	if(omnitureContext.UiContext.Arbo.Boutique != null)
	{
		omnitureContext.Bag.setPropertyValue("prop3", omnitureContext.UiContext.Arbo.Univers.Libelle +": " +omnitureContext.UiContext.Arbo.Boutique.Libelle);
	}
	
	// Homepage
	if (pageCode == "HOMEPAGE") {
		pageViewHomepage(omnitureContext);
		return true;
	}
	
	// Descente produits
	if (pageCode == "DESCENTE_UNIVERS") {
		pageViewDescenteUnivers(omnitureContext);
		return true;
	}
	if (pageCode == "DESCENTE_BOUTIQUE") {
		pageViewDescenteBoutique(omnitureContext);
		return true;
	}
	if (pageCode == "DESCENTE_RAYON") {
		pageViewDescenteRayon(omnitureContext);
		return true;
	}		
	if (pageCode == "DESCENTE_SOUSRAYON") {
		pageViewDescenteSousRayon(omnitureContext);
		return true;
	}
	if (pageCode.indexOf("DESCENTE_FICHEPRODUIT") == 0) {
		pageViewDescenteFicheProduit(omnitureContext);
		return true;
	}
	
	// Recherche
	if (pageCode == "DESCENTE_RECHERCHESTANDARD") {
		pageViewSearchResults(omnitureContext);
		return true;
	}

	// Commande
	if (pageCode == "COMMANDE_PANIER") {
		pageViewCommandePanier(omnitureContext);
		return true;
	}
	if (pageCode == "IDENTIFICATION" && dansTunnelCommande) {
		pageViewCommandeIdentification(omnitureContext);
		return true;
	}
	if (pageCode == "CREATION" && dansTunnelCommande) {
		pageViewCommandeCreation(omnitureContext);
		return true;
	}
	if (pageCode == "COMMANDE_CREDIT") {
		pageViewCommandeDossierCredit(omnitureContext);
		return true;
	}
	if (pageCode.indexOf("COMMANDE_LIVRAISONUNIFIEE") == 0) {
		pageViewCommandeLivraison(omnitureContext);
		return true;
	}
	if (pageCode.indexOf("COMMANDE_TYPEREGLEMENT") == 0) {
		pageViewCommandeTypeReglement(omnitureContext);
		return true;
	}
	if (pageCode == "COMMANDE_MODELIVRAISON") {
		pageViewCommandeModeLivraison(omnitureContext);
		return true;
	}
	if (pageCode == "COMMANDE_RECAP") {
		pageViewCommandeChoixPaiement(omnitureContext);
		return true;
	}
	if (pageCode == "COMMANDE_CONFIRM") {
		pageViewCommandeConfirmation(omnitureContext);
		return true;
	}

	// Compte
	if (pageCode == "IDENTIFICATION" && !dansTunnelCommande) {
		pageViewCompteIdentification(omnitureContext);
		return true;
	}
	if (pageCode == "CREATION" && !dansTunnelCommande) {
		pageViewCompteCreation(omnitureContext);
		return true;
	}
	if (pageCode == "COMPTECLIENT_SOMMAIRE") {
		pageViewCompteSommaire(omnitureContext);
		return true;
	}
	if (pageCode == "COMPTECLIENT_COORD") {
		pageViewCompteCoordonnees(omnitureContext);
		return true;
	}
	if (pageCode == "COMPTECLIENT_ADRESSES") {
		pageViewCompteAdressesLivraison(omnitureContext);
		return true;
	}
	if (pageCode == "COMPTECLIENT_HISTO") {
		pageViewCompteSuiviCommande(omnitureContext);
		return true;
	}
	if (pageCode == "COMPTECLIENT_PREF") {
		pageViewCompteSuiviPreferences(omnitureContext);
		return true;
	}
	if (pageCode == "COMPTECLIENT_NEWS") {
		pageViewCompteNewsletters(omnitureContext);
		return true;
	}
	if (pageCode == "COMPTECLIENT_PASS") {
		pageViewCompteMotDePasse(omnitureContext);
		return true;
	}
	if (pageCode == "COMPTECLIENT_CREDIT") {
		pageViewCompteDossierCredit(omnitureContext);
		return true;
	}
	if (pageCode == "COMPTECLIENT_FAVORIS") {
		pageViewCompteFavoris(omnitureContext);
		return true;
	}

	// autres
	if (pageCode == "INFO_SERVICE") {
		pageViewOtherInfoService(omnitureContext);
		return true;
	}
	
	// demande catalogue
	if (omnitureContext.UiContext.Page.Groupe == "SERVICE_DEMANDE_CATALOGUE") {
		pageViewDemandeCatalogue(omnitureContext);
		return true;
	}
	
	// on fait le tracking par défaut
	pageViewDefault(omnitureContext);
	
	return true;
}


// Détermine l'évènement à traiter puis délègue le traitement adéquat d'initialisation des variables de tracking
function omnitureSingleEventInitVars(bizEvent, omnitureContext) {
	if (bizEvent.Category.Name == "PanierCreation") {
		//création d'un panier
		omnitureContext.Bag.addEvent("scOpen");
		return true;
	} else if (bizEvent.Category.Name == "PanierAjoutArticle") {
		//ajout d'un article au panier
		omnitureContext.Bag.addEvent("scAdd");
		omnitureContext.Bag.addPropertyValue("products", ";"+bizEvent.EventProperties.Produit_Code);		
		return true;
	} else if (bizEvent.Category.Name == "PanierCheckout") {
		//entrée dans le processus de commande
		omnitureContext.Bag.addEvent("scCheckout");
		//liste des produits sans montant ni unités
		for (var i = 0; i < omnitureContext.UiContext.Panier.Lignes.length; i++) {
			var productItem = ";" + omnitureContext.UiContext.Panier.Lignes[i].Reference;
			omnitureContext.Bag.addPropertyValue("products", productItem);
		}
		return true;
	} else if (bizEvent.Category.Name == "ClientCreation") {
		// création de compte client
		omnitureContext.Bag.addEvent("event5");
		// numéro de client
		omnitureContext.Bag.addPropertyValue("evar11", bizEvent.EventProperties.Client_BaoId);	
		omnitureContext.Bag.addPropertyValue("evar12", "Nouveau client");	
		return true;
	} else if (bizEvent.Category.Name == "NewsletterInscription") {
		// inscription newsletter
		omnitureContext.Bag.addEvent("event3");
		return true;
	} else if (bizEvent.Category.Name == "NewsletterDesinscription" || bizEvent.Category.Name == "ClientNewsletterDesinscription") {
		// desinscription newsletter
		omnitureContext.Bag.addEvent("event16");	
		return true;
	} else if (bizEvent.Category.Name == "ClientDemandeCatalogue") {
		// demande de catalogue
		omnitureContext.Bag.addEvent("event8");
		return true;
	} else if (bizEvent.Category.Name == "ClientConnection") {
		// connexion du client (dans le cadre de la gestion de compte)
		if (!bizEvent.EventProperties.InOrderProcess) {
			omnitureContext.Bag.addEvent("event6");
			return true;
		}
		// idenfifiant du client
		omnitureContext.Bag.setPropertyValue("eVar11", bizEvent.EventProperties.Client_BaoId);
		omnitureContext.Bag.setPropertyValue("eVar12", "Ancien client");
		
	} else if (bizEvent.Category.Name == "ServicesContactUs") {
		// saisie du formulaire contactez-nous
		omnitureContext.Bag.addEvent("event12");
		omnitureContext.Bag.setPropertyValue("evar24", bizEvent.EventProperties.ContactUs_LibelleObjet);
		return true;
	} else if(bizEvent.Category.Name == "SearchResult") {
		var nbResult = bizEvent.EventProperties.Search_Nb_Result;
		if(nbResult > 0)
		{
			//Recherche avec résultats
			omnitureContext.Bag.setPropertyValue("prop1", bizEvent.EventProperties.Search_Query);
			omnitureContext.Bag.setPropertyValue("prop2", bizEvent.EventProperties.Search_Nb_Result);
		}
		else
		{
			//Recherche sans résultat
			omnitureContext.Bag.addEvent("event27");
			omnitureContext.Bag.setPropertyValue("prop2", "zero");
		}
		
		return true;

	} else if(bizEvent.Category.Name == "CommandeConfirmation") {
		
		//Zip et State livraison
		omnitureContext.Bag.setPropertyValue("state", bizEvent.EventProperties.Commande_Ville_Livraison);
		omnitureContext.Bag.setPropertyValue("zip", bizEvent.EventProperties.Commande_CP_Livraison);
		
		//Mode de livraison
		omnitureContext.Bag.setPropertyValue("evar18", bizEvent.EventProperties.Commande_Mode_Livraison);
		
		//Type de réglement
		if(bizEvent.EventProperties.Commande_Type_Reglement == TypeReglement.Comptant)
		{
			omnitureContext.Bag.setPropertyValue("evar31", "Comptant");
		}
		else 
		{
			omnitureContext.Bag.setPropertyValue("evar31", "Credit");
		}
		return true;
		
	} else if(bizEvent.Category.Name == "ArticleEpuise") {
		omnitureContext.Bag.addEvent("event11");
		return true;
	}
	
	return false;
}

// Permet d'initialiser les variables omniture pour un tableau d'évènements
function omnitureEventsInitVars(events, omnitureContext) {
	for (var i=0; i<events.length; i++) {
		omnitureSingleEventInitVars(events[i], omnitureContext);
	}
	return omnitureContext.Bag.hasEvents();
}

// Chargée d'envoyer chez omniture les informations définies précemment
function omnitureSendInfo(omnitureContext) {
	if (omnitureContext.OnPageLoad) {
		var s_code=s.t(omnitureContext.Bag);
		/* alternative potentielle si cette utilisation pose problème :
		omnitureContext.Bag.transferAllPropertiesAndEvents(s);
		var s_code=s.t();
		*/
	} else {
		//REMARQUE sur la propriété .linkTrackEvents :
		// elle contient la liste des évènements qui seront envoyés lors du s.tl() dans le cas où :
		// - .events contient ces évènements
		// - .linkTrackVars contient "events" en plus des variables à envoyer
		omnitureContext.Bag.setPropertyValue("linkTrackEvents", omnitureContext.Bag.getEvents());
		omnitureContext.Bag.setPropertyValue("linkTrackVars", "events," + omnitureContext.Bag.getAllProps());
		s.tl(this,'o','events', omnitureContext.Bag);
	}
}

// Appelée si la récupération des évènements côté serveur a réussi
function OnPopOmnitureEventsSucceeded(result, omnitureContext) {	
	var bizEvents;
	if (result) {
		bizEvents = eval('(' + result + ')');
	}
	if (omnitureContext.OnPageLoad) { // on est dans le contexte d'un chargement de page (pas d'une requête ajax.net)
		omniturePageViewInitVars(omnitureContext);
		if (bizEvents) omnitureEventsInitVars(bizEvents, omnitureContext);
		omnitureSendInfo(omnitureContext);
	} else {
		if (bizEvents) {
			launchOmnitureDebugger(); //si on veut le debugger pour firefox il faut le rappeler ici (pas besoin pour google chrome)
			if (omnitureEventsInitVars(bizEvents, omnitureContext)) {
				omnitureSendInfo(omnitureContext);
			}
		}

	}
}

// Appelée si la récupération des évènements côté serveur a échoué
function OnPopOmnitureEventsFailed(result, omnitureContext) {
	// on ne traite que les données de chargement de page (si on est dans ce cas)
	// on abandonne les potentiels évènements complémentaires qui seraient encore en attente côté serveur
	if (omnitureContext.OnPageLoad) {
		omniturePageViewInitVars(omnitureContext);
		// même si la fonction omniturePageViewInitVars a échoué, on envoie quand même un appel chez omniture (ce sera l'url qui sera enregistrée)
		omnitureSendInfo(omnitureContext);
	}
}

// Permet de lancer la récupération des évènements métier en attente côté serveur
function RetrieveOmnitureServerEvents(omnitureContext) {
	HeliosEos.WebUI.AjaxWebServices.BusinessEventsProviderForClient.PopEvents("omniture", OnPopOmnitureEventsSucceeded, OnPopOmnitureEventsFailed, omnitureContext);
}

// Appelée à chaque fin de requête ajax.net
function omnitureEndRequestHandler(sender, args) {
	// uiContext est fournie par le moteur de tracking du modèle (déclaré dans la page appelante)
	var omnitureContext = new OmnitureContext(uiContext, false);
	RetrieveOmnitureServerEvents(omnitureContext);
}

// Exécute le tracking omniture pour une page vue
function omnitureActivateTracking() {
	launchOmnitureDebugger();

	// on ajoute un gestionnaire d'évènement pour les appels ajax
	Sys.WebForms.PageRequestManager.getInstance().add_endRequest(omnitureEndRequestHandler);

	// uiContext est fournie par le moteur de tracking du modèle (déclaré dans la page)
	var omnitureContext = new OmnitureContext(uiContext, true);
	RetrieveOmnitureServerEvents(omnitureContext);
}


