 /*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="";
  
  /* 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.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);
}

 /*******************************************************************************
 * 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);
    
    if(domainNameGA) {
      si3si_pageTracker._setDomainName(domainNameGA);
    }
    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('*'));
            prix = prix/quantite;
            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();
    }
}

/*******************************************************************************
 * 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);
}
