/******** Déclaration des variables globales ********/
var contentHolderName	= "TDcontenant";
var hiddenFrameName		= "hid_iframe_content";
var divMenu;							//Objet DIV contenant le menu de gauche
var iframeObj;							//Objet IFRAME contenant le cadre cachée
var iframeName  = "hid_iframe_content";	//Nom du IFRAME contenant
var pageAccueil	= "accueil.htm";		//Page de démarrage lors du chargement
var TDContentHolder;	//Objet TD contenant le contenu principal (pages externes)

/************  Déclaration des fonctions ************/
// Fonction initialisée au chargement de la page
window.onload = function() {
	divMenu  = document.getElementById("divMenu");

	//On cherche tout les liens du menu de gauche
	var allLinks = divMenu.getElementsByTagName("a");
	//Pour chacun des liens, on attache l'event onClick
	for (var i=0; i< allLinks.length; i++) {
		allLinks[i].onclick = showPreview;
	}

	//On instancie l'objet IFrame conteneur
	iframeObj = new createHiddenIFrame(pageAccueil);
}

//Fonction pour la création et gestion du IFRAME cachée
function createHiddenIFrame(startPage) {
      if (!document.createElement)
      {// todo :: implement some kind of redirection if browser doesn't support creating of dom object
            return true;
      }
      var IFrameObj = createHiddenIFrame.IFrameObj;
      if (!IFrameObj && document.createElement)
      {// create the IFrame and assign a reference to the object to our global variable IFrameObj.
            // this will only happen the first time this function is called
            try
            {
                  var tempIFrame=document.createElement('iframe');
                  tempIFrame.setAttribute('id',iframeName);
                  tempIFrame.style.border='0px';
                  tempIFrame.style.width='0px';
                  tempIFrame.style.height='0px';
                  IFrameObj = document.body.appendChild(tempIFrame);
                  
                  if (IFrameObj.id=='undefined' && document.frames)
                  {// this is for IE5 Mac, because it will only allow access to the document object
                   // of the IFrame if we access it through the document.frames array
                        IFrameObj = document.frames[iframeName];
                  }
            } 
            catch(exception)
            {// This is for IE5 PC, which doesn't allow dynamic creation/manipulation of iframe object.
                  // Instead, we'll fake it up by creating our own objects.
                  iframeHTML='\<iframe id="'+iframeName+'" style="';
                  iframeHTML+='border:0px;';
                  iframeHTML+='width:0px;';
                  iframeHTML+='height:0px;';
                  iframeHTML+='"><\/iframe>';
                  document.body.innerHTML+=iframeHTML;
                  IFrameObj = new Object();
                  IFrameObj.document = new Object();
                  IFrameObj.document.location = new Object();
                  IFrameObj.document.location.iframe = document.getElementById(iframeName);
                  IFrameObj.document.location.replace = function(location) {this.iframe.src = location;}
            }
            createHiddenIFrame.IFrameObj = IFrameObj;
			//Initialise la page d'accueil donnée en arg.
			IFrameObj.src = startPage;
      }             

	  //On ajoute l'event handler qui lance la fonction de conversion du Iframe vers le conteneur
	  if(window.addEventListener) { // Mozilla, FF, NS
		IFrameObj.addEventListener('load', showContent, false) ;
	  } else { // IE
		IFrameObj.attachEvent('onload', showContent);
	  }

	  //Objet IFrame
      this.obj = IFrameObj;

	  //Objet document
	  this.doc = function() {
		/* Alternative pour trouver l'objet iframe.document
		  var iframeDoc = (iframeObj.contentWindow || iframeObj.contentDocument);
		  if (iframeDoc.document) iframeDoc = iframeDoc.document;
		*/
		if(IFrameObj.contentDocument) { // Firefox, Opera  
		  return IFrameObj.contentDocument;   
		} else if(IFrameObj.contentWindow) { // Internet Explorer 
		  return IFrameObj.contentWindow.document;   
		} else if(IFrameObj.document) { // Autres(?)
		  return IFrameObj.document; 
		} else {
		  return;
		}
	  }
}

//Fonction lancée lorsque qu'un changement du cadre cachée est effectué
function showContent() {
	//On définit l'objet contenant le contenu principal (cellule)
	var TDContentHolder = document.getElementById(contentHolderName);
	//On récupère l'objet iFrame.document
	var iframeDoc = iframeObj.doc();
	//On copie le contenu du cadre cachée à celui de l'objet du contenu principal
	TDContentHolder.innerHTML = iframeDoc.body.innerHTML;
}

//Fonction lancée lorsque qu'un des liens du menu est cliqué
function showPreview(evt) {
	//On rapatrie la page correspondant à la section du menu de gauche
	var url = (evt)?evt.target:window.event.srcElement;
	//Fixe pour éviter que le fureteur utilise "la page en cache"
	var ieTrick = new Date().getTime();
	//On affiche le message lors du début du chargement
	showLoadingMsg(contentHolderName);
	//Chargement de la page dans le cadre cachée +hiddenFrameTemp.name
	iframeObj.obj.src  = url+"?t="+ieTrick;
	//Nécessaire pour tout les events onClick liés à un lien <a>
	return false;
}

//Fonction affichant un message lorsqu'une page est en cours de chargement
function showLoadingMsg(divId) {
	var loadingWin = document.getElementById(divId);
	loadingWin.innerHTML = "<div id=\"htmlLoading\">Chargement en cours...</div>";
}

//NON UTILISÉE:
//Fonction qui remplace les caractères de "retour de chariot"(Enter) par l'équivalent HTML (<br>)
function return2br(dataStr) {
	return dataStr.replace(/(\r\n|[\r\n])/g, "<br />");
}
