function afficheFenetre(id)
{
 document.getElementById(id).style.display = "block";
}

//==============================================================================
function cacheFenetre(id)
{
 document.getElementById(id).style.display = "none";
 document.getElementById(id).style.visibility = ""; 
}

//==============================================================================
function IconiserFenetre(id, idIconeIconiser, idIconeRestaurer, repertoire)
{	
 var idOmbre = id + '-ombre';	
 var idReel = id + '-reel'; 
 var idContenu = id + '-contenu'; 
 var idCaption = id + '-caption'; 

 var hauteurCaption;
 var ptrCaption = document.getElementById(idCaption);
 
 // Prendre la hauteur du caption
 if (ptrCaption != null)
    hauteurCaption = TransformeChiffrePur(ptrCaption.style.height);
 else 
 // Si pas de Caption => pas d'iconisation possible
    return;

 // Réduction des fenêtres au minimum pour ne laisser apparaître que le div 'caption'
 document.getElementById(id).style.height = (hauteurCaption - 1) + "px";  // Taille volontairement inférieure afin de ne pas pouvoir retailler manuellement
 
 var ptrOmbre = document.getElementById(idOmbre);
 if (ptrOmbre != null)
    ptrOmbre.style.height = hauteurCaption + "px";
	
 var ptrReel = document.getElementById(idReel);
 if (ptrReel != null)	
    ptrReel.style.height = hauteurCaption + "px";
	
 var ptrContenu = document.getElementById(idContenu);
 if (ptrContenu != null)	
    ptrContenu.style.display = "none"; 

 // Mémoriser la constante 'iconised'
 MemorisationInfoUserHttpRequest(id, 'display', 'iconised', repertoire);
 
 // Inverser les icones : 'Restaurer' devient visible et 'Iconiser' est caché
 document.getElementById(idIconeIconiser).style.display = "none"; 
 document.getElementById(idIconeRestaurer).style.display = "block"; 
}

//==============================================================================
function RestaurerFenetre(id, idIconeIconiser, idIconeRestaurer, hauteurDefaut, repertoire)
{
 var idOmbre = id + '-ombre';	
 var idReel = id + '-reel'; 
 var idContenu = id + '-contenu'; 

 // Récupération de la hauteur d'origine 
 var valeur = hauteurDefaut; // valeur par défaut si aucune valeur d'origine ci-dessous
 var coord = RecuperationInfoUserHttpRequest(id, 'coordinates', repertoire);
 if (coord.length > 0)
	{ 	
     var tableau = coord.split(',');
     valeur = tableau[3];
    }

 valeur = hauteurDefaut;
	
 // Mémoriser la nouvelle constante 'visible'
 MemorisationInfoUserHttpRequest(id, 'display', 'visible', repertoire);
 
 // Inverser les icones : 'Iconiser' devient visible et 'Restaurer' est caché
 var ptrContenu = document.getElementById(idContenu);
 if (ptrContenu != null)
    ptrContenu.style.display = "block";
    
 document.getElementById(idIconeIconiser).style.display = "block"; 
 document.getElementById(idIconeRestaurer).style.display = "none";

 // Afficher la fenêtre dans sa taille initiale 
 document.getElementById(id).style.height = valeur + "px";
 RetailleFenetreDimension(id, -1, valeur, 0, 0, '');   // Paramètre -1 => pas de modification pour la largeur
}

//==============================================================================
function ShowToolTip(appelant, oEvent, texte)
{	
 var oDiv = document.getElementById('idBulle');
 
 oDiv.innerHTML = ConvertHexDec(texte);

 appelant.style.zIndex = 990;	
 oDiv.style.zIndex = 999;
 
 var x = oEvent.clientX + 5;
 var y = oEvent.clientY + 5;
    
 var oParent = oDiv.parentElement;
 if (oParent == undefined)
    oParent = document.body;
 
 // Rendre visible la bulle	
 afficheFenetre('idBulle');
 
 var delta = 5;
 if (x + oDiv.offsetWidth > oParent.offsetWidth - delta)
    x -= (oDiv.offsetWidth + delta);
 if (y + oDiv.offsetHeight > oParent.offsetHeight - delta)
	y -= (oDiv.offsetHeight + delta);
	 
 oDiv.style.left = x + "px";
 oDiv.style.top = y + "px";
}

//==============================================================================
function HideToolTip(appelant, zIndex)
{
 // Cacher la bulle	
 cacheFenetre('idBulle');

 var oDiv = document.getElementById('idBulle'); 
 oDiv.style.left = 0 + "px";
 oDiv.style.top = 0 + "px"; 

 // Remettre le cadre de l'événement à sa place dans la file	
 appelant.style.zIndex = zIndex;
}	

//==============================================================================
function GestionPileFenetres(nomFenetreAppelante, pileFenetresString, itemStockagePile, repertoire)
{
 idFenetreAppelante	= document.getElementById(nomFenetreAppelante);

 // Chercher le le z-index maximum de la pile et le stocker dans 'zIndexMax'
 var zIndexMax = 0;	
 var tableauFenetres = pileFenetresString.split(',');
 
 for (i = 0; i < tableauFenetres.length; i++)
     {
      idFenetreCourant = document.getElementById(tableauFenetres[i]);
	  if (parseInt(idFenetreCourant.style.zIndex) > zIndexMax)
	     zIndexMax = parseInt(idFenetreCourant.style.zIndex);
	 }	

 // Si la fenêtre est déjà en avant plan, car elle possède elle-même le zIndexMax, alors on ne fait plus rien
 if (idFenetreAppelante.style.zIndex == zIndexMax)
    return;

 // Sinon on incrémente de 1 le zIndexMax et on l'affecte à la fenêtre cliquée afin qu'elle se mette en avant plan 
 zIndexMax += 1;
 idFenetreAppelante.style.zIndex = zIndexMax;	
 
 // Pas de stockage du résultat souhaité
 if (itemStockagePile.length == 0)
    return;
 
 // Reconstruire la chaine de caractère dans l'ordre du z-index
 // Pour ce faire, on place simplement la fenêtre cliquée au bout de la liste
 pileFenetresString = ''; 
 for (i = 0; i < tableauFenetres.length; i++)
     {
	  if (tableauFenetres[i] == nomFenetreAppelante)
	     continue;
		 	
      if (pileFenetresString.length > 0)
	     pileFenetresString += ',';
      		  
      pileFenetresString += tableauFenetres[i];
     }
  
 if (pileFenetresString.length > 0)
	pileFenetresString += ',';  
 pileFenetresString += nomFenetreAppelante;	
 
 // Mémorisation dans le fichier des users
 MemorisationInfoUserHttpRequest(itemStockagePile, 'zindex', pileFenetresString, repertoire); 
} 

//==============================================================================
function AjouteZerosAGauche(valeur, tailleTotale)
{	
 var tailleValeur = String(valeur).length;
 
 var nbZerosAGauche = tailleTotale - tailleValeur;
 if (nbZerosAGauche <= 0)
    return valeur; 
 
 var nb = 0;
 var tampon = '';
 while (nb < nbZerosAGauche)  
       {
	   	tampon += '0';
		nb++;
	   }
 tampon += String(valeur);
 
 return tampon;	   
} 

//==============================================================================
function TailleEcran(largeur, hauteur)
{
 if (window.ActiveXObject) // navigateur IE	
    {
     largeur.value = document.body.offsetWidth;
     hauteur.value = document.body.offsetHeight;
    }
 else // Les autres
    {
     largeur.value = window.innerWidth;	
	 hauteur.value = window.innerHeight;
    }
}  

//==============================================================================
function DHTMLLink(idFenetre, idFenetreContainer, fichierPhp, parametres)
{
 var xhr_object = null;

 if (window.XMLHttpRequest) // Firefox
	xhr_object = new XMLHttpRequest();
 else
 if (window.ActiveXObject) // Internet Explorer
	 xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
 else
    { // XMLHttpRequest non supporté par le navigateur
	 alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
	 return;
	}

 var filePhp = fichierPhp + '?';
	 	 
 var tableauParametres = parametres.split('|');	 

 var paramUrl = 'id=' + encodeURIComponent(idFenetre);
 for (i = 0; i < tableauParametres.length; i++)
     {
      paramUrl += '&';
		 	
	  no = (i + 1);		
	  paramUrl += 'parametre' + no + '=' + encodeURIComponent(tableauParametres[i]);	
	 }	 
	 
 filePhp += paramUrl;	 

 asynchrone = (window.ActiveXObject) ? false : true;
  
 xhr_object.open("GET", filePhp, asynchrone);
 xhr_object.send(null);


 // Fonction de réponse pour le mode synchrone
 if (xhr_object.readyState == 4)
    document.getElementById(idFenetreContainer).innerHTML = xhr_object.responseText;

 // Fonction de réponse pour le mode asynchrone
 xhr_object.onreadystatechange = function()
  {
   if (xhr_object.readyState == 4)
      document.getElementById(idFenetreContainer).innerHTML = xhr_object.responseText;
  }
}

//==============================================================================
function Couleur(objet, objetCadre)
{
 document.getElementById(objetCadre).style.backgroundColor = objet.value;
}	

//==============================================================================
// Convertit une chaine Héxadécimale en décimale
function ConvertHexDec(strHexa)
{
 var strDec = '';
 var position = 0;
 while (true)
       { 
        codeHexa1 = strHexa.substr(position, 1);
        position++;
		if (position > strHexa.length)
           break;
		
		codeHexa2 = strHexa.substr(position, 1);
		position++;
        if (position > strHexa.length)
           break;
		   
        strDec += ConvertHexDecInterne(codeHexa1, codeHexa2);
       }
         
 return strDec;
}

//------------------------------------------------------------------------------
function ConvertHexDecInterne(codeHexa1, codeHexa2)
{
 var tableauHexa = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'];

 var codeDec1 = -1;
 var codeDec2 = -1;

 for (i = 0; i < tableauHexa.length; i++)
     {
      if (tableauHexa[i] == codeHexa1)
	     codeDec1 = i;

	  if (tableauHexa[i] == codeHexa2)
	     codeDec2 = i;
		 
      if (codeDec1 != -1 && codeDec2 != -1)
	     break;		 		 
	 }

 var intDec = (codeDec1 * 16) + codeDec2;
 
 return String.fromCharCode(intDec);
}	


