 /*Caractere de separation pour hierarchie*/
  var cSeparator = "/";

 /*Affiche des alertes en mode debug*/
  var topModeDebug = false; //Activation des alertes
  var topVisuEvenements = false; //Les evenements
  var topVisuTraffic = false; //Les variables servant au Trafic
  var topVisuCommerce = false; //Les variables servant au Commerce
  var topVisuSpecific = false; //Les variables specifiques
  var topDebugOnPortlet = ''; //Affiche les alertes sur la portlet uniquement

  /* code a passer selon l'environnement, d?ni dans head.jsp */
  var codeGoogleAnalytics = "";

/*******************************************************************************
 * Initialisation liste des attributs de tracking
 ******************************************************************************/
function InitObjetTrackingSI3SI()
{
  /* TRAFFIC */
  this.nomPage="";
  this.sectionSite="";
  this.pageType="";
  this.expressionRecherchee="";
  this.nbResultatsRecherche="";
  this.boutique="";
  this.rayon="";
  this.sousRayon="";
  this.saison="";
  this.pays="France";
  this.langue="FR";
  this.navigation="";

  /* COMMERCE */
  this.codeCampagneExterne="";
  this.ville="";
  this.codePostal="";
  this.produits="";
  this.idCommande="";
  this.codeCampagneInterne="";
  this.methodeRechercheProduits="";
  this.produitCrossSell="";
  this.produitPack="";
  this.numCli="";
  this.typeClient="";
  this.typeCommande="";
  this.codeAvantage="";
  this.totalCommande="";
  this.totalFraisExpedition="";
  this.taxe="";
  this.nomAffilie="";
  this.variationDispo="";
  
  /* EVENEMENTS */
  this.vueProduit = false;
  this.ouverturePanier = false;
  this.ajoutPanier = false;
  this.vuePanier = false;
  this.validationPanier = false;
  this.commande = false;
  this.recherche = false;
  this.abonnementNewsletter = false;
  this.ajoutPanierCommandeDirecte = false;
  this.creationCompte = false;
  this.identification = false;
  this.memorisationPanier = false;
  this.demandeCatalogue = false;
  this.demandeCarte4E = false;
  this.affichageSuiviCommande = false;

  this.eventsJS=null;

  this.produits = "";

  /*Variables specifiques*/
  this.codeDevise="EUR";
  this.typeEncodage="UTF-8";

  this.productLabel = "";
  this.portletName = "";
  this.labelDefinitionName = "";
  this.jspPageName = "";
  this.previousLabelDefinitionName = "";
}

/*******************************************************************************
 * Trace les variables de tracking
 ******************************************************************************/
function Tracking_Trace(traceMarqueur, trackingObject)
{
  /*Test activation trace*/
  if (!topModeDebug)
    return;

  /*Test si portlet renseigne*/
  if (topDebugOnPortlet && topDebugOnPortlet != trackingObject.portletName)
    return;

  /*Init Message avec les variables de trafic*/
  var messTraffic = traceMarqueur;

  if(topVisuEvenements){
    messTraffic += '\n---------EVENEMENTS-----------';
    messTraffic = Tracking_AddTraceVariable(messTraffic, 'vueProduit', trackingObject.vueProduit);
    messTraffic = Tracking_AddTraceVariable(messTraffic, 'ouverturePanier', trackingObject.ouverturePanier);
    messTraffic = Tracking_AddTraceVariable(messTraffic, 'ajoutPanier', trackingObject.ajoutPanier);
    messTraffic = Tracking_AddTraceVariable(messTraffic, 'vuePanier', trackingObject.vuePanier);
    messTraffic = Tracking_AddTraceVariable(messTraffic, 'validationPanier', trackingObject.validationPanier);
    messTraffic = Tracking_AddTraceVariable(messTraffic, 'commande', trackingObject.commande);
    messTraffic = Tracking_AddTraceVariable(messTraffic, 'recherche', trackingObject.recherche);
    messTraffic = Tracking_AddTraceVariable(messTraffic, 'abonnementNewsletter', trackingObject.abonnementNewsletter);
    messTraffic = Tracking_AddTraceVariable(messTraffic, 'ajoutPanierCommandeDirecte', trackingObject.ajoutPanierCommandeDirecte);
    messTraffic = Tracking_AddTraceVariable(messTraffic, 'creationCompte', trackingObject.creationCompte);
    messTraffic = Tracking_AddTraceVariable(messTraffic, 'identification', trackingObject.identification);
    messTraffic = Tracking_AddTraceVariable(messTraffic, 'memorisationPanier', trackingObject.memorisationPanier);
    messTraffic = Tracking_AddTraceVariable(messTraffic, 'demandeCatalogue', trackingObject.demandeCatalogue);
    messTraffic = Tracking_AddTraceVariable(messTraffic, 'demandeCarte4E', trackingObject.demandeCarte4E);
    messTraffic = Tracking_AddTraceVariable(messTraffic, 'affichageSuiviCommande', trackingObject.affichageSuiviCommande);
  }

  if (topVisuTraffic) {
    messTraffic += '\n---------TRAFIC---------------';
    messTraffic = Tracking_AddTraceVariable(messTraffic, 'produits', trackingObject.produits);

    messTraffic = Tracking_AddTraceVariable(messTraffic, 'nomPage', trackingObject.nomPage);
    messTraffic = Tracking_AddTraceVariable(messTraffic, 'sectionSite', trackingObject.sectionSite);
    messTraffic = Tracking_AddTraceVariable(messTraffic, 'pageType', trackingObject.pageType);
    messTraffic = Tracking_AddTraceVariable(messTraffic, 'expressionRecherchee', trackingObject.expressionRecherchee);
    messTraffic = Tracking_AddTraceVariable(messTraffic, 'nbResultatsRecherche', trackingObject.nbResultatsRecherche);
    messTraffic = Tracking_AddTraceVariable(messTraffic, 'boutique', trackingObject.boutique);
    messTraffic = Tracking_AddTraceVariable(messTraffic, 'rayon', trackingObject.rayon);
    messTraffic = Tracking_AddTraceVariable(messTraffic, 'sousRayon', trackingObject.sousRayon);
    messTraffic = Tracking_AddTraceVariable(messTraffic, 'saison', trackingObject.saison);
    messTraffic = Tracking_AddTraceVariable(messTraffic, 'pays', trackingObject.pays);
    messTraffic = Tracking_AddTraceVariable(messTraffic, 'langue', trackingObject.langue);
    messTraffic = Tracking_AddTraceVariable(messTraffic, 'navigation', trackingObject.navigation);
  }

  /*Init Message avec les variables de Commerce*/
  if (topVisuCommerce) {
    messTraffic += '\n---------COMMERCE-------------';
    messTraffic = Tracking_AddTraceVariable(messTraffic, 'idCommande', trackingObject.idCommande);
    messTraffic = Tracking_AddTraceVariable(messTraffic, 'codeCampagneExterne', trackingObject.codeCampagneExterne);

    messTraffic = Tracking_AddTraceVariable(messTraffic, 'codeCampagneInterne', trackingObject.codeCampagneInterne);
    messTraffic = Tracking_AddTraceVariable(messTraffic, 'methodeRechercheProduits', trackingObject.methodeRechercheProduits);
    messTraffic = Tracking_AddTraceVariable(messTraffic, 'produitCrossSell', trackingObject.produitCrossSell);
    messTraffic = Tracking_AddTraceVariable(messTraffic, 'produitPack', trackingObject.produitPack);
    messTraffic = Tracking_AddTraceVariable(messTraffic, 'numCli', trackingObject.numCli);
    messTraffic = Tracking_AddTraceVariable(messTraffic, 'typeClient', trackingObject.typeClient);
    messTraffic = Tracking_AddTraceVariable(messTraffic, 'typeCommande', trackingObject.typeCommande);
    messTraffic = Tracking_AddTraceVariable(messTraffic, 'codeAvantage', trackingObject.codeAvantage);
    messTraffic = Tracking_AddTraceVariable(messTraffic, 'codePostal', trackingObject.codePostal);
    messTraffic = Tracking_AddTraceVariable(messTraffic, 'ville', trackingObject.ville);
    messTraffic = Tracking_AddTraceVariable(messTraffic, 'totalCommande', trackingObject.totalCommande);
    messTraffic = Tracking_AddTraceVariable(messTraffic, 'totalFraisExpedition', trackingObject.totalFraisExpedition);
    messTraffic = Tracking_AddTraceVariable(messTraffic, 'taxe', trackingObject.taxe);
    messTraffic = Tracking_AddTraceVariable(messTraffic, 'nomAffilie', trackingObject.nomAffilie);
  }

  /*Init Message avec les variables specifiques*/
  if (topVisuSpecific) {
    messTraffic += '\n---------SPECIFIC-------------';
    messTraffic = Tracking_AddTraceVariable(messTraffic, 'portletName', trackingObject.portletName);
    messTraffic = Tracking_AddTraceVariable(messTraffic, 'labelDefinitionName', trackingObject.labelDefinitionName);
    messTraffic = Tracking_AddTraceVariable(messTraffic, 'jspPageName', trackingObject.jspPageName);
    messTraffic = Tracking_AddTraceVariable(messTraffic, 'previousLabelDefinitionName', trackingObject.previousLabelDefinitionName);
    messTraffic = Tracking_AddTraceVariable(messTraffic, 'typeEncodage', trackingObject.typeEncodage);
    messTraffic = Tracking_AddTraceVariable(messTraffic, 'codeDevise', trackingObject.codeDevise);


  }

  /*Affichage du message*/
  Tracking_Alert(messTraffic);
}

/*******************************************************************************
 * Ajoute les variables du marqueur pour les traces
 ******************************************************************************/
function Tracking_AddTraceVariable(vTraceMarqueur, vVariableLabel, vVariableValue)
{
  var vMessage = vTraceMarqueur;
  if(vVariableValue)
    vMessage += '\n' + vVariableLabel + ' = ' + vVariableValue;

  return vMessage;
}

/*******************************************************************************
 * Affiche une popup alert tracking
 ******************************************************************************/
function Tracking_Alert(messageAlerte)
{
  alert('-- MESSAGE TRACKING-- \n' + messageAlerte);
}

/*******************************************************************************
 * Construit le champ navigation
 *******************************************************************************/
function construireNavigation(trackingObject)
{
    /*Init avec le pays*/
    var vNavigation = "";
    if (trackingObject.navigation) {
        vNavigation = AddTexte(vNavigation, trackingObject.pays, cSeparator);
        vNavigation = AddTexte(vNavigation, trackingObject.sectionSite, cSeparator);
        vNavigation = AddTexte(vNavigation, trackingObject.navigation, cSeparator);
      }
      else {
        /*Construction de la hierarchie*/
        /*Ajout pays*/
        if (trackingObject.pays)
          vNavigation = AddTexte(vNavigation, trackingObject.pays, cSeparator);

        /*Ajout channel / Univers*/
        if (trackingObject.sectionSite)
          vNavigation = AddTexte(vNavigation, trackingObject.sectionSite, cSeparator);

        /*Ajout Boutique*/
        if (trackingObject.boutique)
          vNavigation = AddTexte(vNavigation, trackingObject.boutique, cSeparator);

        /*Ajout SousRayon*/
        if (trackingObject.sousRayon)
          vNavigation = AddTexte(vNavigation, trackingObject.sousRayon, cSeparator);

        /*Ajout Libelle Produit*/
        if (trackingObject.productLabel)
          vNavigation = AddTexte(vNavigation, trackingObject.productLabel, cSeparator);
    }

    return vNavigation;
}



/*******************************************************************************
 * Ajout d'un message a une variable
 ******************************************************************************/
function AddTexte(vVariable, vTexte, vSeparator)
{
  var vNewMessage = vVariable;
  if (vTexte) {
    if (vVariable)
      vNewMessage = vVariable + vSeparator + vTexte;
    else
      vNewMessage = vTexte;
  }

  return vNewMessage;
}

/**********************************************************************************
 * Tracking de l'ajout au panier depuis la FP
 **********************************************************************************/
 function trackerAjoutPanierFP(ref, nbArticlesPanier){
    var objTrackingAjoutPanierFP = new InitObjetTrackingSI3SI();

    if(nbArticlesPanier == 0)
        objTrackingAjoutPanierFP.ouverturePanier = true;
    objTrackingAjoutPanierFP.ajoutPanier = true;
    objTrackingAjoutPanierFP.produits=";" + ref;

    objTrackingAjoutPanierFP.nomPage = "COMMANDE|Confirmation Ajout Panier";
    objTrackingAjoutPanierFP.sectionSite = "COMMANDE";
    objTrackingAjoutPanierFP.navigation = "France|COMMANDE|Confirmation Ajout Panier";
    objTrackingAjoutPanierFP.typeCommande = "Commande web";

    appelOutilTracking(objTrackingAjoutPanierFP);
 }


/*******************************************************************************
 * Marqueur light pour les pages statiques
 ******************************************************************************/
function trackingMarqueurPage(vPageName, vChannel)
{
  var objTracking = new InitObjetTrackingSI3SI();
  objTracking.nomPage = vPageName;
  objTracking.sectionSite = vChannel;
  appelOutilTracking(objTracking);
}

/*******************************************************************************
 * Recuperation d'un cookie sur le poste client
 ******************************************************************************/
function getCookie(name) 
{ 
var dc = document.cookie; 
var prefix = name + "="; 
var begin = dc.indexOf("; " + prefix); 
if (begin == -1) 
{ 
begin = dc.indexOf(prefix); 
if (begin != 0) return ''; 
} 
else 
{ 
begin += 2; 
} 
var end = document.cookie.indexOf(";", begin); 
if (end == -1) 
{ 
end = dc.length; 
} 
return unescape(dc.substring(begin + prefix.length, end)); 
} 

/*******************************************************************************
 * Fonction a executer pour tracker avec l'outil choisi
 * Note: topAncienTracking est une bidouille temporaire imposee par la MOA
 ******************************************************************************/
function appelOutilTracking(objTracking, topAncienTracking){
    //remplacer les traces par l'appel a Google Analytics
    var si3si_pageTracker = null;
    si3si_pageTracker = _gat._getTracker(codeGoogleAnalytics);
    
    //si3si_pageTracker._setDomainName(".bp.si3si.int");
    if (domainNameGA) {
      si3si_pageTracker._setDomainName(domainNameGA);
    } 
    
     /* DEBUT AJOUT BP */
     //Recuperation du cookie contenant le CW et le num client
     var infoCW = getCookie("BPCookieID"); 
     if(infoCW != '' && infoCW.length > 20){ 
        // On supprime la derniere etoile
        var indexEtoile = infoCW.lastIndexOf('*');
        if(indexEtoile > 10){
            infoCW = infoCW.substring(0,infoCW.lastIndexOf('*'));
            // Recuperation du numero de client contenu dans le cookie
            var numeroClient = infoCW.substring(infoCW.lastIndexOf('*') + 1, infoCW.length);
            if(numeroClient != '' && numeroClient.length == 9){
               // Alimentation d'une variable personnalisable au niveau visiteur
               // avec le numero de client
               si3si_pageTracker._setCustomVar(1, "num_client_provisoire", numeroClient, 1);
               var now = new Date();
               var heures = now.getHours();
               if(heures.toString().length == 1){heures = '0' + heures;}
               var minutes = now.getMinutes();
               if(minutes.toString().length == 1){minutes = '0' + minutes;}
               var secondes = now.getSeconds();
               if(secondes.toString().length == 1){secondes = '0' + secondes;}
               var varHeure = heures + ':' + minutes + ':' + secondes;
               // Alimentation d'une variable personnalisable au niveau page
               // avec l'heure de visite de cette page
               si3si_pageTracker._setCustomVar(2, "heure_visite", varHeure, 3);
            }
        }
    }
    /* FIN AJOUT BP */
    
    if(topAncienTracking) {
	   si3si_pageTracker._trackPageView();
    } else {
        if(objTracking.expressionRecherchee != null && objTracking.expressionRecherchee != "") {
            si3si_pageTracker._trackPageview(objTracking.nomPage + "/" + objTracking.expressionRecherchee);
        } else{
            si3si_pageTracker._trackPageview(objTracking.nomPage);
        }
    }

    //Tracking_Trace("Variables tracking", objTracking);
    
    if(objTracking.idCommande != null && objTracking.idCommande != ''){
        si3si_pageTracker._addTrans(
            objTracking.idCommande,                     // Order ID
            objTracking.nomAffilie,                     // Affiliation
            objTracking.totalCommande,                  // Total
            objTracking.taxe,                           // Tax
            objTracking.totalFraisExpedition,           // Shipping
            objTracking.codePostal,                     // City
            "",                                         // State
            objTracking.pays                            // Country
          );


        var temp = objTracking.produits;
        var end = false;
        while(!end){
            //recuperation de la ligne panier
            var debutDernier = temp.lastIndexOf('$');
            var ligne = temp.substring(debutDernier + 1, temp.length);

            //recuperation des infos
            var categorie = ligne.substring(ligne.lastIndexOf('*') + 1, ligne.length);
	        ligne = ligne.substring(0,ligne.lastIndexOf('*'));
            var libelle = ligne.substring(ligne.lastIndexOf('*') + 1, ligne.length);
            ligne = ligne.substring(0,ligne.lastIndexOf('*'));
            var prix = ligne.substring(ligne.lastIndexOf('*') + 1, ligne.length);
            ligne = ligne.substring(0,ligne.lastIndexOf('*'));
            var quantite = ligne.substring(ligne.lastIndexOf('*') + 1, ligne.length);
            ligne = ligne.substring(0,ligne.lastIndexOf('*'));
            var reference = ligne.substring(ligne.lastIndexOf('*') + 1, ligne.length);

            var nom = libelle + ' - ' + reference.substr(0,6);

            //ajout au tracker
            si3si_pageTracker._addItem(
                objTracking.idCommande,                     // Order ID
                reference,                                  // SKU
                nom,                                        // Product Name
                categorie,                                  // Category
                prix,                                       // Price
                quantite                                    // Quantity
              );

            //suppression de l'article deja traite de la chaine
            temp = temp.substring(0,debutDernier);
            if(temp.length < 5)
                end = true;
        }

        si3si_pageTracker._trackTrans();
    }
    
    // Ancien tracking evenement
    if(objTracking.event != null && objTracking.event != '') {        
        tracking_event(objTracking.eventCategory, objTracking.eventAction, objTracking.eventLabel, null);
    }
    
   
    
    var event = null;
    for(var i=0; i< objTracking.eventsJS.length; i++) {
        event = objTracking.eventsJS[i];
        tracking_event(event["category"], event["action"], event["label"], event["value"]);
        event = null;
    }
    
}


/*******************************************************************************
 * Fonction a executer pour tracker les pages speciales (ie qui ne sont pas
 * issues d'un pattern dynamique)
 ******************************************************************************/
function tracking_special(si3si_special_nomPage, si3si_special_sectionSite){
    var objTracking = new InitObjetTrackingSI3SI();
    objTracking.nomPage = si3si_special_nomPage;
    objTracking.sectionSite = si3si_special_sectionSite;
    objTracking.navigation = construireNavigation(objTracking);
    
    appelOutilTracking(objTracking);
    Tracking_Trace('', objTracking);
}



/*******************************************************************************
* JCN - Appel Ajax Tracking donnees analytics
******************************************************************************/
function trackingGAnalytics(contexte){

    //appel de servlet pour recuperer toutes les proprietes analytics
    var pars = "";
  
    var url = contexte + "/recuperationInfosTrackingAnalytics.call";
  
    myAjax = new Ajax.Request(
        url, 
        {
            method: 'get', 
            parameters: pars, 
            onComplete: parseRecuperationInfosGAnalytics
        });
}


/*******************************************************************************
* JCN - Parsing du flux XML (appel AJAX) contenant les informations analytics
******************************************************************************/
function parseRecuperationInfosGAnalytics(originalRequest){

  var dbgTracking = false;

    if(originalRequest.responseXML == null || originalRequest.responseXML.getElementsByTagName("infos")[0] == null){
        if(dbgTracking) alert("parseRecuperationInfosTrackingAnalytics erreur - please see server log !");
        return;
    }
    try{
        
        var infos = originalRequest.responseXML.getElementsByTagName("infos")[0];
        var info = infos.childNodes[0];
        
        // recupere la liste des evenements
        var eventsXML = info.getElementsByTagName("events")[0];
        
        
        // tableau 2D contenant les evenements a tracker
        var events = new Array();               
        // un evenement
        var event = new Array();
        var eventCategory=null
        var eventAction=null
        var eventLabel=null
        var eventValue=null;        
        
        for (i = 0; i < eventsXML.childNodes.length; i++ ) {
            eventCategoryNode = null;
            eventCategoryNode = eventsXML.childNodes[i].getElementsByTagName("evtCategory")[0];
            eventActionNode = eventsXML.childNodes[i].getElementsByTagName("evtAction")[0];
            eventLabelNode = eventsXML.childNodes[i].getElementsByTagName("evtLabel")[0];
            eventValueNode = eventsXML.childNodes[i].getElementsByTagName("evtValue")[0];
            
            if ((eventCategoryNode != null) && (eventActionNode != null)) {
              eventCategory = eventCategoryNode.childNodes[0].nodeValue;
              eventAction = eventActionNode.childNodes[0].nodeValue; 
              if (eventLabelNode != null) { 
                eventLabel = eventLabelNode.childNodes[0].nodeValue;
                if (eventValueNode != null) eventValue = eventValueNode.childNodes[0].nodeValue;      
              }
            }
          
            // Send => Analytics
            tracking_event(eventCategory, eventAction, eventLabel, eventValue);  
            
            if(dbgTracking) alert(eventCategory + " " + eventAction + " " + eventLabel + " " + eventValue);           
            
            eventCategory=null, eventAction=null, eventLabel=null, eventValue=null;
          
        }
    } 
    catch(exception){
     //erreur tracking ajax
     if(dbgTracking) alert("parseRecuperationInfosTrackingAnalytics - "+ exception );   
    } 

}



/*******************************************************************************
* JCN - Tracking d'un evenement (appel sur schema AJAX)
******************************************************************************/
function tracking_event(eventCategory, eventAction, eventLabel, eventValue){
 
    // debug
    dbugTracking = false;
        
    var si3si_pageTracker = null;
    // Recuperation du tracker GA
    si3si_pageTracker = _gat._getTracker(codeGoogleAnalytics);
    
    // do not remove - (reinitialisation forcee)
    si3si_pageTracker._initData();
    
    var ret = null;
        
    // Si l'on dispose des informations minimum
	if( (eventCategory != null) && (eventCategory != '') && (eventAction != null) && (eventAction != '') ) {
       
		// Timeout pour eviter les erreurs dans les cas o la page n'est pas entierement chargee. 
		if(si3si_pageTracker && !si3si_pageTracker.cb) {
			setTimeout(function() {
				if ( (eventLabel != null) && (eventLabel != '') ) {
					if ( (eventValue != null) && (eventValue != '') ) {
						ret = si3si_pageTracker._trackEvent(eventCategory, eventAction, eventLabel, eventValue);
						//if(dbugTracking) alert("test1 : category: " + eventCategory + "action: " + eventAction + "label: " + eventLabel + "value: " + eventValue);
					} else {                    
						ret = si3si_pageTracker._trackEvent(eventCategory, eventAction, eventLabel);
					}
				} else {
					ret = si3si_pageTracker._trackEvent(eventCategory, eventAction);            
				}
			}, 200);
			return;
		}
		
		// syntaxe : _trackEvent(category, action, optional_label, optional_value)    
		if ( (eventLabel != null) && (eventLabel != '') ) {
			if ( (eventValue != null) && (eventValue != '') ) {
				ret = si3si_pageTracker._trackEvent(eventCategory, eventAction, eventLabel, eventValue);
			} else {                    
				ret = si3si_pageTracker._trackEvent(eventCategory, eventAction, eventLabel);
			}
		} else {
			ret = si3si_pageTracker._trackEvent(eventCategory, eventAction);            
		}
    }
    // debug
    //if(dbugTracking) alert("Envoi : category: " + eventCategory + "action: " + eventAction + "label: " + eventLabel);
    //if(dbugTracking) alert("succes fonction GA : " + ret);
}
