/******************************************************************************/
/* Nom          : url_tracking.js                                             */
/* Auteur       : Dièse Include (d'après Sutekidane)                          */
/*  voir http://xhrconnection.sutekidane.net                                  */
/* Date         : juil 2007                                                   */
/* Projet       : Socle web #Include                                          */
/* Objet        : Tracker de liens interne et externe                         */
/*    utilisant la technologie Ajax et permettant de gérer des liens en durs  */
/******************************************************************************/


/******************************************************************************/
/* protected bool track(object lnk)                                           */
/*  @access protected                                                         */
/*  @type Méthode                                                             */
/*  @param object lnk => lien, référence au lien sélectionné                  */
/*  @ return bool => par défaut true pour permettre au navigateur de          */
/*    procéder au traitement du lien                                          */
/*  @abstract Intercepte un clic sur un lien et invoque le script             */
/*    de traitement du compteur de lien                                       */
/******************************************************************************/
function track(lnk){
  
  // Définition de la variable root définissant le chemin d'accès vers la racine du site
  var root          = new String();
  root = path_to_root() + "commun/scripts/";
  
  // Instanciation de l'objet XHR
  var XHR = new XHRConnection();
  
  // 1er paramètre : URL de la page courante
  XHR.appendData('source_url',document.location.href);
  
  // 2ème paramètre : identifiant de l'URL demandée : peut être nul
  XHR.appendData('target_url_id',lnk.id);
  
  // 3ème paramètre : URL de la page demandée
  XHR.appendData('target_url_value',lnk.href);
  
  // Invocation du script de tracking PHP : url_tracker.php
  XHR.sendAndLoad(root+'url_tracker.php','POST');
  
  return true;

}

/******************************************************************************/
/* public event window.onload                                                 */
/******************************************************************************/
window.onload = function(){
  // Lecture de tous les liens présents sur la page courante
  for(i=0;i<document.links.length;i++){
    // Ajout du gestionnaire d'événement onclick dynamiquement
    document.links.item(i).onclick = function(){
      return track(this);
    }
  }
}

/******************************************************************************/
/* private string path_to_root(void)                                          */
/*  @access private                                                           */
/*  @type Méthode                                                             */
/*  @param void                                                               */
/*  @return string => chemin d'accès à la racine du site                      */
/*  @absctract Calcul et renvoie le chemin d'accès à la racine du site à      */
/*    partir du script couramment chargé.                                     */
/******************************************************************************/
function path_to_root(){
  // Permet de déterminer le chemin d'accès aux extensions Ajax
  
  var host_name = location.hostname;
  var current_script_path = location.pathname;
  var localReg            = new RegExp("[localhost|127.0.0.1]","g");
  var slashReg            = new RegExp("[/]","g");
  var local               = false;
  var sub_folder          = 0;
  var return_path         = ''; // Chemin à retourner
  var debug               = new String();
  var local_offset        = 0; // Calcule l'offset en fonction du navigateur
  var web_offset          = 0;
    
  // Détermination de l'exécution du script
  /*
  if(host_name.match(localReg)){
    local = true;
    alert("Exécution locale sur " + host_name);
  } else {
    alert("Exécution sur le serveur en ligne");
  }
  */
  
  if(host_name == "www.diese-include.fr" || host_name == "www.diese-include.com")
    local = false;
  else
    local = true;
    
  // En fonction du navigateur
  if(navigator.appName.indexOf("Explorer") > -1){
    local_offset = 2;
    web_offset = 1;
  } else {
    local_offset = 3;
    web_offset = 2;
  }
  
  // Découpe le chemin pour déterminer la racine
  var path_parts = current_script_path.split(slashReg);
  
  script_name = path_parts[path_parts.length];
  
  // Pour debogage
  /*
  for(i=0;i<path_parts.length;i++){
    debug += path_parts[i] + "\n";  
  }
  alert(debug);
  */
  
  // Détermine la profondeur du script courant
  if(local){
    sub_folder = path_parts.length - local_offset;
    //alert("Exécution locale => profondeur = " + sub_folder);
  } else {
    sub_folder = path_parts.length - web_offset;
    //alert("Exécution en ligne => profondeur = " + sub_folder);
  }
  
  // Détermine le chemin à retourner
  if(sub_folder == 1){
    return_path = './';
  } else {
    for(i=0;i<sub_folder;i++){
      return_path += '../';
    }
  }
  
  
  // Pour débugage
  //alert("Chemin vers racine :" + return_path);
  
  return return_path;
}

