/************** Fonctions de gestion de l'historique des banner ******************************/

/* ***** !!! DELAI DU COOKIE !!! ***** */
  var cookingTime = 15;
/* ***** !!! DELAI DU COOKIE !!! ***** */

/*************** getBanner **************************/
/* paramName : banSite, banKern, banDate, banID
 * idx       : l'indice dans l'historique (min 1; max banCount)
 * RETURN    : la valeur du paramName demandé de l'indice demandé ou -1 si problème
 ****************************************************/
function getBanner(paramName, idx) {

  var fullParamName=paramName+idx;
  var paramIdx,separatorIdx;
  var banCount, banHistory;

  if ((paramName!="banSite") && (paramName!="banKern") && (paramName!="banDate") && (paramName!="banID"))
    return -1;

  /* Vérifie que le compteur de banner est là et que l'indice demandé ne dépasse pas celui ci */
  banCount=getCookie("banCount");
  if ((banCount == null) || (banCount == -1)) { return -1; }
  else { if (idx > banCount) { return -1; }}

  /* Vérifie que l'historique de banner est là */
  banHistory=getCookie("banner");

	if ((banHistory == null) || (banHistory == -1) || (banHistory == undefined)) { return -1; }

  /* On cherche si le paramètre est dedans */
  paramIdx = banHistory.indexOf(fullParamName);

  /* "fullParamName" n'est pas trouvé */
  if (paramIdx == -1)
    {
      return "";
    }
  /* "fullParamName" a été trouvé */
  else
    {
      /* on cherche maintenant la fin de la valeur du paramètre, soit: "&" ou fin de chaine */
      separatorIdx=(banHistory.substring(paramIdx,banHistory.length)).indexOf("&");
      if (separatorIdx==-1)
        {
          return banHistory.substring(paramIdx+fullParamName.length+1,banHistory.length);
        }
      else
        {
          return banHistory.substring(paramIdx+fullParamName.length+1,paramIdx+separatorIdx);
        }
    }

}

/****************************************************************/
/* Utilisé pour calculer la différence en jour entre deux dates
 * date1, date2: la date au format YYYYMMDD
 * retour: le nombre de jour
 */
function y2k(number) { return (number < 1000) ? number + 1900 : number; }
function daysElapsed(date1,date2) {

    date1= new Date(date1.substring(0,4),date1.substring(4,6),date1.substring(6,8));
    date2= new Date(date2.substring(0,4),date2.substring(4,6),date2.substring(6,8));
    var difference =
        Date.UTC(y2k(date1.getYear()),date1.getMonth(),date1.getDate(),0,0,0)
      - Date.UTC(y2k(date2.getYear()),date2.getMonth(),date2.getDate(),0,0,0);
    return difference/1000/60/60/24;
}


/*************** getRelevantBanner **************************/
/* Rend le numéro (dans l'historique des banner) de la plus
 * ancienne banner dont le kernel déterminé correspond
 * et dont la date est <= cookingTime jours
 *
 ****************************************************/
  function getRelevantBanner(kernel)
    {
      var banCount,bankern,banDate;
      var todayDate;

      var now = new Date();
      var day = now.getDate();
      if (day < 10) day  = "0" + day;
      var month = now.getMonth()+1;
      if (month < 10) month = "0" + month;
      var year = now.getYear();
      if (year < 1900) year += 1900;
      todayDate = ""+year+month+day;


      banCount=getCookie("banCount");
      if ((banCount == null) || (banCount == -1)) { return -1; }

      for (banIdx=1;banIdx<=banCount;banIdx++)
        {
          /* On parcours toutes les banner */
          banKern=getBanner("banKern",banIdx);
          if (banKern==kernel)
            {
              /* On a trouvé une banner avec un kernel correspondant
               * On vérifie la date */
               banDate=getBanner("banDate",banIdx);
               if (daysElapsed(todayDate,banDate)<=cookingTime)
                return banIdx
            }
        }
      /* Aucune banner correspondante trouvée */
      return -1;
    }


/*************** addBanner **************************/
/* Ajoute toutes les infos d'une banner dans le cookie banner et mets à jour le banCount
 * paramName : banSite, banKern, banDate, banID
 * ATTENTION : le banCount dure cookingTime jours.
 * Passé ce délai, on considère que le user n'est plus
 * "influencé" par la banner. (Les autres cookies sont toujours là
 * mais n'ont plus de sens! Si le user reclique sur une banner,
 * le banCount revient à 1 et écrase les vieux cookies)
 ****************************************************/
    function addBanner(banSite, banKern, banDate, banID)
      {

        var result,banCount,init;
        init=false;

        banCount=getCookie("banCount");
        if (!banCount)
          {
            /* banCount n'existe pas/plus, on reset le compteur de banner
               et init=true pour réinitialiser le cookie historique */
            banCount="1";
            init=true;
          }
        else
          {
            /* banCount existe, on l'incrémente */
            banCount++;
          }
        /* Mise à jour du cookie */
        /* La bannière PROXIS n'est valable que 6 jours */
        if (banSite=="PROX")
          setCookie("banCount",banCount,6);
        else
          setCookie("banCount",banCount,cookingTime);

        /* Ajout des différentes variables de la banner */
        setBanner("banSite",banSite,banCount,init);
        setBanner("banKern",banKern,banCount,false);
        setBanner("banDate",banDate,banCount,false);
        setBanner("banID"  ,banID  ,banCount,false);
      }

/*************** setBanner **************************/
/* Ajoute une info dans le cookie banner
 * paramName : dans "banSite, banKern, banDate, banID"
 * paramVal  : ...!
 * banCount  : indice dans l'historique
 * init      : true/false : indique s'il faut réinitialiser le cookie historique
 * RETURN    : -1 si problème
 ****************************************************/
    function setBanner(paramName,paramVal,banCount,init)
      {
        var banHistory;
        banHistory=getCookie("banner");
        if (init)
          {
            /* banCount n'existais pas/plus : on supprime banHistory s'il existe toujours */
            if ((banHistory == null) || (banHistory == -1)) { delCookie("banner"); }
            banHistory=paramName+"1"+"="+paramVal;
            setCookie("banner", banHistory,3650);
          }
        else
          {
            /* banCount existe : on ajoute la banner à la suite */
	          banHistory=banHistory+"&"+paramName+banCount+"="+paramVal;
	          setCookie("banner",banHistory,3650);
          }
        return 1;
      }

/************** Vérification de l'existance du cookie ************************************************************/
/* Retour:
 *          -1  si le cookie spécifié n'existe pas
 *          >=0 si le cookie spécifié existe
 ****************************************************/
    function checkCookie(Name) {
      var search = Name + "=";

      if (document.cookie.length > 0) {                       // si il existe au moins un cookie
        offset = document.cookie.indexOf(search)

        if (offset != -1) {                                   // si le cookie recherché existe
          return offset
        }else {                                               // le cookie n'existe pas
          return -1
        }
      }
    }

/************** Récupère la valeur du cookie ************************************************************/
/* Retour:
 *         La valeur du cookie spécifié
 * if getCookie("test") sera vrai si le cookie "test" existe
 ****************************************************************/

    function getCookie(Name) {
      var search = Name + "=";

      if (document.cookie.length > 0) {                       // si il existe au moins un cookie
        offset = document.cookie.indexOf(search);
        if (offset != -1) {                                   // si le cookie recherché existe
          offset += search.length ;                           // détermine la position de début de la valeur du cookie.
          end = document.cookie.indexOf(";", offset);         // détermine la position de la fin de la valeur du cookie
          if (end == -1)
            end = document.cookie.length;
          return unescape(document.cookie.substring(offset, end));
        }
      }
    }

/************** Création du cookie ************************************************************/
/* name   : nom du cookie à créer
 * value  : valeur à y stocker
 * expire : délai d'expiration en jours
 *****************************************/
    function setCookie(name, value, expire) {
      if (expire != null) {
        var today = new Date();
        var expires = new Date();

        expires.setTime(today.getTime() + 60*60*24*1000*expire);
      }
      document.cookie = name + "=" + escape(value) + ((expire == null) ? "" : ("; expires=" + expires.toGMTString()));
    }

/************** Suppression du cookie ************************************************************/
/* name   : nom du cookie à supprimer
 *****************************************/
    function delCookie (NameOfCookie)
      {
        // The function simply checks to see if the cookie is set.
        // If so, the expiration date is set to Jan. 1st 1970.
        if (getCookie(NameOfCookie))
          { document.cookie = NameOfCookie + "=" +
            "; expires=Thu, 01-Jan-70 00:00:01 GMT";
          }
      }     