/*
Paramètres :
	url : fichier à appeler avec les params en GET
	target : id de la div où afficher le résultat
	action : code javascript à executer quand le résultat est reçu
*/

function ahah(url,target,taction,defaulthtml) {
   // native XMLHttpRequest object
   if (document.getElementById('jsclog')){
   	 document.getElementById('jsclog').value+="Call ahah: "+url+"\n";
   }
   if (defaulthtml) 
   		document.getElementById(target).innerHTML = defaulthtml;
   	else
   		document.getElementById(target).innerHTML = 'Loading...'
   if (window.XMLHttpRequest) {
       var req = new XMLHttpRequest();
       req.onreadystatechange = function() {ahahDone(req, target,taction);};
       req.open("GET", url, true);
       req.send(null);
   // IE/Windows ActiveX version
   } else if (window.ActiveXObject) {
       var req = new ActiveXObject("Microsoft.XMLHTTP");
       if (req) {
           req.onreadystatechange = function() {ahahDone(req, target,taction);};
           req.open("GET", url, true);
           req.send();
       }
   }
} 


function ahahDone(req, target,taction) {
   // only if req is "loaded"
   if (req.readyState == 4) {
       // only if "OK"
       if (req.status == 200 || req.status == 304) {
           results = req.responseText;
//           document.getElementById(target).innerHTML = results;
           setInnerHTML(document.getElementById(target),results);
       } else {
//           document.getElementById(target).innerHTML="ahah error:\n" +
//               req.statusText;
           setInnerHTML(document.getElementById(target),"ahah error:\n" +
               req.statusText);
       }
       if (taction!="") {eval(taction);}
   }
}

// SetInnerHTML Sécurisé
function setInnerHTML(divContent, HTML) {
  divContent.innerHTML=HTML; 
  var All=divContent.getElementsByTagName("*");
  for (var i=1; i<All.length; i++) {
    All[i].id=All[i].getAttribute("id")
    All[i].name=All[i].getAttribute("name")
   	All[i].className=All[i].getAttribute("class")
  }
  var AllScripts=divContent.getElementsByTagName("script")
  for (var i=0; i<AllScripts.length; i++) {
     var s=AllScripts[i];
     if (s.src && s.src!="") {
        // Précédement asynchrone, mis en synchrone pour éviter des problèmes de dépendances de scripts
        eval(getFileContent(s.src))
     }
     else {
        eval(s.innerHTML)
     }
  }
}

function getFileContent(url)
{
	var Xhr=new XMLHttpRequest();
	Xhr.open("GET",url,false);
	Xhr.send(null);
	return Xhr.responseText;
}