/************** 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 demande de l'indice demande ou -1 si probleme
 ****************************************************/
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;

  /* Verifie que le compteur de banner est la et que l'indice demande ne depasse pas celui ci */
  banCount = getCookie("banCount");
  if ((banCount == null) || (banCount == -1)) {
    return - 1;
  }
  else {
    if (idx > banCount) {
      return - 1;
    }
  }

  /* Verifie que l'historique de banner est la */
  banHistory = getCookie("banner");

  if ((banHistory == null) || (banHistory == -1) || (banHistory == undefined)) {
    return - 1;
  }

  /* On cherche si le parametre est dedans */
  paramIdx = banHistory.indexOf(fullParamName);

  /* "fullParamName" n'est pas trouve */
  if (paramIdx == -1) {
    return "";
  }
  /* "fullParamName" a ete trouve */
  else {
    /* on cherche maintenant la fin de la valeur du parametre, 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);
    }
  }

}

/****************************************************************/
/* Utilise pour calculer la difference 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 numero (dans l'historique des banner) de la plus
 * ancienne banner dont le kernel determine 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 trouve une banner avec un kernel correspondant
               * On verifie la date */
      banDate = getBanner("banDate", banIdx);
      if (daysElapsed(todayDate, banDate) <= cookingTime) return banIdx
    }
  }
  /* Aucune banner correspondante trouvee */
  return - 1;
}

/*************** addBanner **************************/
/* Ajoute toutes les infos d'une banner dans le cookie banner et mets a jour le banCount
 * paramName : banSite, banKern, banDate, banID
 * ATTENTION : le banCount dure cookingTime jours.
 * Passe ce delai, on considere que le user n'est plus
 * "influence" par la banner. (Les autres cookies sont toujours la
 * mais n'ont plus de sens! Si le user reclique sur une banner,
 * le banCount revient a 1 et ecrase 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 reinitialiser le cookie historique */
    banCount = "1";
    init = true;
  }
  else {
    /* banCount existe, on l'incremente */
    banCount++;
  }
  /* Mise a jour du cookie */
  /* La banniere PROXIS n'est valable que 6 jours */
  if (banSite == "PROX") setCookie("banCount", banCount, 6);
  else setCookie("banCount", banCount, cookingTime);

  /* Ajout des differentes 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 reinitialiser le cookie historique
 * RETURN    : -1 si probleme
 ****************************************************/
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 a la suite */
    banHistory = banHistory + "&" + paramName + banCount + "=" + paramVal;
    setCookie("banner", banHistory, 3650);
  }
  return 1;
}

/************** Verification de l'existance du cookie ************************************************************/
/* Retour:
 *          -1  si le cookie specifie n'existe pas
 *          >=0 si le cookie specifie 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 recherche existe
      return offset
    } else { // le cookie n'existe pas
      return - 1
    }
  }
}

/************** Recupere la valeur du cookie ************************************************************/
/* Retour:
 *         La valeur du cookie specifie
 * 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 recherche existe
      offset += search.length; // determine la position de debut de la valeur du cookie.
      end = document.cookie.indexOf(";", offset); // determine la position de la fin de la valeur du cookie
      if (end == -1) end = document.cookie.length;
      return unescape(document.cookie.substring(offset, end));
    }
  }
}

/************** Creation du cookie ************************************************************/
/* name   : nom du cookie a creer
 * value  : valeur a y stocker
 * expire : delai 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 a 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";
  }
}