
/*****************************************************************************/
/* getXHR : retourne un objet xmlHttpRequest                                 */
/* Compatible entre tous les navigateurs (IE/Firefox/Opera)                  */
/*****************************************************************************/

function getXHR()
{
  var xhr=null;
  if(window.XMLHttpRequest) // Firefox et autres
    xhr = new XMLHttpRequest();
  else if(window.ActiveXObject) // Internet Explorer
  {
    try
    {
      xhr = new ActiveXObject("Msxml2.XMLHTTP");
    }
    catch (e1)
    {
      try
      {
        xhr = new ActiveXObject("Microsoft.XMLHTTP");
      }
      catch (e2)
      {
        xhr = null;
      }
    }
  }
  else // XMLHttpRequest non supporté par le navigateur
  {
    alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
  }

  return xhr;
}

/*****************************************************************************/
/* encode64 : encode la chaîne passée en entrée en base 64                   */
/*****************************************************************************/

var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";

function encode64(input)
{
  var output = "";
  var chr1, chr2, chr3;
  var enc1, enc2, enc3, enc4;
  var i = 0;

  do
  {
    chr1 = input.charCodeAt(i++);
    chr2 = input.charCodeAt(i++);
    chr3 = input.charCodeAt(i++);

    enc1 = chr1 >> 2;
    enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
    enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
    enc4 = chr3 & 63;

    if (isNaN(chr2)) {
       enc3 = enc4 = 64;
    } else if (isNaN(chr3)) {
       enc4 = 64;
    }

    output = output + keyStr.charAt(enc1) + keyStr.charAt(enc2) +
       keyStr.charAt(enc3) + keyStr.charAt(enc4);
  } while (i < input.length);

  return output;
}

/*****************************************************************************/
/* decode64 : encode la chaîne en base 64 passée en entrée en texte          */
/*****************************************************************************/

function decode64(input)
{
  var output = "";
  var chr1, chr2, chr3;
  var enc1, enc2, enc3, enc4;
  var i = 0;

  // remove all characters that are not A-Z, a-z, 0-9, +, /, or =
  input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");

  do
  {
    enc1 = keyStr.indexOf(input.charAt(i++));
    enc2 = keyStr.indexOf(input.charAt(i++));
    enc3 = keyStr.indexOf(input.charAt(i++));
    enc4 = keyStr.indexOf(input.charAt(i++));

    chr1 = (enc1 << 2) | (enc2 >> 4);
    chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
    chr3 = ((enc3 & 3) << 6) | enc4;

    output = output + String.fromCharCode(chr1);

    if (enc3 != 64)
    {
       output = output + String.fromCharCode(chr2);
    }
    if (enc4 != 64)
    {
       output = output + String.fromCharCode(chr3);
    }
  } while (i < input.length);

  return output;
}

/*****************************************************************************/
/* getDecompte : renvoie le temps restant de maintenant jusqu'à la date      */
/*               passée en paramètre                                         */
/*****************************************************************************/

function getDecompte(jour, mois, annee, heure, minute, seconde)
{
  var resultat = "";
  var now = new Date();
  var goal = new Date(annee, mois-1, jour, heure, minute, seconde);

  var intervalle_sec = Math.abs((now.getTime()/1000)-(goal.getTime()/1000));

  var nb_jours = Math.floor(intervalle_sec/(3600*24));
  if (nb_jours <= 1)
    resultat = nb_jours + " jour ";
  else
    resultat = nb_jours + " jours ";

  intervalle_sec = intervalle_sec - (nb_jours*24*3600);
  var nb_heures = Math.floor((intervalle_sec/3600));
  if(nb_heures < 10)
    resultat += " 0" + nb_heures + "h ";
  else
    resultat += " " + nb_heures + "h ";

  intervalle_sec = intervalle_sec - (nb_heures*3600);
  var nb_minutes = Math.floor((intervalle_sec/60));
  if(nb_minutes < 10)
    resultat += "0" + nb_minutes + "m ";
  else
    resultat += nb_minutes + "m ";

  intervalle_sec = intervalle_sec - (nb_minutes*60);
  var nb_secondes = Math.floor(intervalle_sec);
  if(nb_secondes < 10)
    resultat += "0" + nb_secondes + "s"
  else
    resultat += nb_secondes + "s"

  return resultat;
}

/*****************************************************************************/
/* setDecompte : Affiche le décompte dans l'élement ayant l'id passé en      */
/*               paramètre                                                   */
/*****************************************************************************/

function setDecompte(id, jour, mois, annee, heure, minute, seconde)
{
  var elt = document.getElementById(id);
  if (elt == null)
    return;
  
  var str = getDecompte(jour, mois, annee, heure, minute, seconde);

  // Efface tous les noeuds fils pour partir sur un noeud vide
  while (elt.childNodes.length > 0)
    elt.removeChild(elt.firstChild);

  var textNode = document.createTextNode(str);
  elt.appendChild(textNode);
}

/*****************************************************************************/
/* setTimerDecompte : Appelle la fonction setDecompte toutes les secondes    */
/*****************************************************************************/

function setTimerDecompte(id, jour, mois, annee, heure, minute, seconde)
{
  //alert('setTimerDecompte(\'' + id + '\', ' + jour + ', ' + mois + ', ' + annee + ', ' + heure + ', ' + minute + ', ' + seconde + ')');
  setDecompte(id, jour, mois, annee, heure, minute, seconde);
  var strCmd = 'setTimerDecompte(\'' + id + '\', ' + jour + ', ' + mois + ', ' + annee + ', ' + heure + ', ' + minute + ', ' + seconde + ')';
  setTimeout(strCmd, 1000);
}

/*****************************************************************************/
/* getHeureAvecDecalage : renvoie l'heure courante décalée du nombre d'heure */
/*                        passé paramètre                                    */
/*****************************************************************************/

function getHeureAvecDecalage(decalage)
{
  //alert('getHeureAvecDecalage(' + decalage + ')');
  var decalage_heure = Math.floor(decalage);
  var decalage_minute = (decalage - decalage_heure) * 60;
  
  var resultat = "";
  var now = new Date();

  var heure = now.getHours();
  var minute = now.getMinutes();

  heure = heure + decalage_heure;
  minute = minute + decalage_minute;

  if (minute >= 60)
  {
    minute -= 60;
    heure += 1;
  }

  if (minute < 0)
  {
    minute += 60;
    heure -= 1;
  }

  if (heure >= 24)
    heure -= 24;

  if (heure < 0)
    heure += 24;

  now.setHours(heure);
  now.setMinutes(minute);
  
  if (now.getHours() < 10)
    resultat += "0" + now.getHours() + "h";
  else
    resultat += now.getHours() + "h";

  if (now.getMinutes() < 10)
    resultat += "0" + now.getMinutes() + "m";
  else
    resultat += now.getMinutes() + "m";

  if (now.getSeconds() < 10)
    resultat += "0" + now.getSeconds() + "s";
  else
    resultat += now.getSeconds() + "s";

  return resultat;
}

/*****************************************************************************/
/* setHeureAvecDecalage : Affiche le décompte dans l'élement ayant l'id passé*/
/*                        en paramètre                                       */
/*****************************************************************************/

function setHeureAvecDecalage(id, decalage)
{
  //alert('setHeureAvecDecalage(' + id + ',' + decalage + ')');
  var elt = document.getElementById(id);
  if (elt == null)
    return;

  // Efface tous les noeuds fils pour partir sur un noeud vide
  while (elt.childNodes.length > 0)
    elt.removeChild(elt.firstChild);

  var textNode = document.createTextNode(getHeureAvecDecalage(decalage));
  elt.appendChild(textNode);
}

/*****************************************************************************/
/* setTimerHeureAvecDecalage : Appelle la fonction setHeureAvecDecalage      */
/*                             toutes les secondes                           */
/*****************************************************************************/

function setTimerHeureAvecDecalage(id, decalage)
{
  //alert('setTimerHeureAvecDecalage(' + id + ',' + decalage + ')');
  setHeureAvecDecalage(id, decalage);
  var strCmd = 'setTimerHeureAvecDecalage(\'' + id + '\', ' + decalage + ')';
  setTimeout(strCmd, 1000);
}

/*****************************************************************************/
/* ajouterAuxFavoris : Ajouter l'url aux favoris                             */
/*****************************************************************************/

function ajouterAuxFavoris(url, title)
{
  if (navigator.appName != 'Microsoft Internet Explorer' )
    window.sidebar.addPanel(title, url, "");
  else
    window.external.AddFavorite(url, title);
}

/*****************************************************************************/
/* cleanChild : Supprime tous les noeuds fils du noeud passé en paramètre    */
/*****************************************************************************/

function cleanChild(xpath)
{
  var node = document.getElementById(xpath);
  while (node.childNodes.length > 0)
    node.removeChild(node.firstChild);
}

/*****************************************************************************/
/* addAttribute : Ajoute l'attribut passé en paramètre au noeud passé en     */
/*                paramètre avec la valeur passée en paramètre               */
/*****************************************************************************/

function addAttribute(node, attribute, value)
{
  if (node == null)
    return;
    
  var attrib = document.createAttribute(attribute);
  attrib.value = value;
  node.setAttributeNode(attrib);
}

/*****************************************************************************/
/* createImgNode : Crée un noeud img avec les attributs passés en paramètre  */
/*                 si non null                                               */
/*****************************************************************************/

function createImgNode(src, border, width, height)
{
  var nodeImg = document.createElement('img');
  if (src == null)
    return null;
  
  addAttribute(nodeImg, 'src', src);
  
  if (border != null)
    addAttribute(nodeImg, 'border', border);

  if (width != null)
    addAttribute(nodeImg, 'width', width);

  if (height != null)
    addAttribute(nodeImg, 'height', height);
  
  return nodeImg;
}

/*****************************************************************************/
/* createIFrameNode : Crée un noeud iframe avec les attributs passés en      */
/*                    paramètre si non null                                  */
/*****************************************************************************/

function createIFrameNode(src, width, height, frameborder, scrolling, marginheight, marginwidth)
{
  var nodeIFrame = document.createElement('iframe');
  if (src == null)
    return null;
  
  addAttribute(nodeIFrame, 'src', src);
  
  if (width != null)
    addAttribute(nodeIFrame, 'width', width);

  if (height != null)
    addAttribute(nodeIFrame, 'height', height);
  
  if (frameborder != null)
    addAttribute(nodeIFrame, 'frameborder', frameborder);

  if (scrolling != null)
    addAttribute(nodeIFrame, 'scrolling', scrolling);

  if (marginheight != null)
    addAttribute(nodeIFrame, 'marginheight', marginheight);

  if (marginwidth != null)
    addAttribute(nodeIFrame, 'marginwidth', marginwidth);

  return nodeIFrame;
}

/*****************************************************************************/
/* createANode : Crée un noeud a avec les attributs passés en                */
/*                    paramètre si non null                                  */
/*****************************************************************************/

function createANode(href)
{
  var nodeA = document.createElement('a');
  if (href == null)
    return null;
  
  addAttribute(nodeA, 'href', href);

  return nodeA;  
}


function pngFix(img)
{
  try
  {
    var arVersion = navigator.appVersion.split("MSIE")
    var version = parseFloat(arVersion[1])
    
    if ((version >= 5.5) && (document.body.filters)) 
    {
      var imgID = (img.id) ? "id='" + img.id + "' " : "";
      var imgClass = (img.className) ? "class='" + img.className + "' " : "";
      var imgTitle = (img.title) ? "title='" + img.title + "' " : "title='" + img.alt + "' ";
      var imgStyle = "display:inline-block;" + img.style.cssText;
      if (img.align == "left") imgStyle = "float:left;" + imgStyle;
      if (img.align == "right") imgStyle = "float:right;" + imgStyle;
      if (img.parentElement.href) imgStyle = "cursor:hand;" + imgStyle;
      var strNewHTML = "<span " + imgID + imgClass + imgTitle;
      strNewHTML += " style=\"" + "width:" + img.width + "px; height:" + img.height + "px;" + imgStyle + ";";
      strNewHTML += "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader";
      strNewHTML += "(src=\'" + img.src + "\', sizingMethod='scale');\"></span>"; 
      img.outerHTML = strNewHTML;
      i = i-1;
    }
  }
	catch(ex)
	{ 
	}
}

function getPos(o)
{
	try
	{
		var x = 0;
		var y = 0;
		if (o.offsetParent)
		{
			x = o.offsetLeft;
			y = o.offsetTop;
			while (o = o.offsetParent)
			{
				x += o.offsetLeft;
				y += o.offsetTop;
			}
		}
		return [x,y];
	}
	catch(ex)
	{ 
	  return [-1,-1];
  }
}