// Création des styles spécifiques en cas de présence du javascript
var ss1 = document.createElement('style');
var def = '.reponse {display: none;} #contenu{display:none;} ';
ss1.setAttribute("type", "text/css");
if (ss1.styleSheet) {   // IE
    ss1.styleSheet.cssText = def;
} else {                // the World
    var tt1 = document.createTextNode(def);
    ss1.appendChild(tt1);
}
var hh1 = document.getElementsByTagName('head')[0];
hh1.appendChild(ss1);

//Création d'une fonction pour cacher les blocs en cas de non chargement de jquery
var ie = (document.all) ? true : false;
function hideClass(objClass){
var elements = (ie) ? document.all : document.getElementsByTagName('*');
  for (i=0; i<elements.length; i++){
    if (elements[i].className==objClass){
      elements[i].style.display="none"
    }
  }
}

// Fonction d'affichage onclick (sans mouvement si jquery n'a pas eu le temps de se charger)
function show(divDest)
{
	showDiv=document.getElementById(divDest);
	//Si jQuery déjà chargé
	if (typeof(jQuery) != "undefined")
	{
		if (showDiv.style.display=='block')
		{
			$(showDiv).slideUp("normal");
		}
		else
		{
			$(".reponse").slideUp("normal");
			$(showDiv).slideDown("normal");
		}
	}
	
	//Si problème de chargement ou lenteur
	else
	{
		if (showDiv.style.display=='block')
		{
			showDiv.style.display='none';
		}
		else
		{
			hideClass("reponse");
			showDiv.style.display='block';
		}
	}
}

// Appeler jquery si javascript activé
window.onload = function(){
	var DSLScript  = document.createElement("script");
	DSLScript.src  = "http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js";
	DSLScript.type = "text/javascript";
	document.body.appendChild(DSLScript);
	var DSLScript2  = document.createElement("script");
	DSLScript2.src  = "https://apis.google.com/js/plusone.js";
	DSLScript2.type = "text/javascript";
	DSLScript2.innerHTML = "{lang: 'fr'}";
	document.body.appendChild(DSLScript2);

}


/* ------------------------------ FONCTIONS DE GESTION DE LA NAVIGATION AJAX ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

- loaded_page: nom de la page en cours, mémorisée dans une variable et qui est comparée à l'ancre
- instanciation XHR: no comment
- chganchor(link): simple fonction permettant de changer l'ancre dans la barre d'adresse: accepte les ? et les & qui seront passées en GET à la page appelée en Ajax
- reload_ajax: simple fonction qui permet de vider loaded_page. loaded_page étant différent de l'ancre, ceci provoque un rechargement. Utile pour passer un POST, ou placer un cookie (de langue par exemple), ou même faire un rechargement temporisé.
- verify_anchor: fonction qui vérifie en tâche de fond la conformité entre loaded_page et l'ancre.
  Si les deux valeurs sont différentes, un rechargement en Ajax est effectué, soit en utilisant jquery s'il est déjà chargé, soit en le faisant de manière plus naturelle avec innnerhtml.
Notes: 	 le fichier appelé par ajax est jxld.php, qui lui même inclut la page en php passée en get avec toutes ses variables, ceci pour des raisons de sécurité (vérification de l'existence du fichier demandé), pour des raisons techniques (entêtes charset ou gestion cache navigateur client)  
       	 le <div> dont le contenu est changé s'appelle "contenu". Il doit être "hidden" au chargement de la page
		 s'il n'y a pas d'ancre, c'est comme s'il y avait "#accueil"
		 La fonction change le lien de départ: exemple "index.php?page=exemple&trucs=machin" sera appelé dans ajax: "jxld.php?p=exemple&trucs=machin" et l'ancre deviendra "#exemple&trucs=machin" ATTENTION "page=" ne peut servir que pour la navigation ajax et "p=" ne doit pas être utilisé.
 
 */

// loaded page: supervariable
 var loaded_page;

//instanciation standard XHR

function getXMLHttpRequest() {
	var xhr = null;
	
	if (window.XMLHttpRequest || window.ActiveXObject) {
		if (window.ActiveXObject) {
			try {
				xhr = new ActiveXObject("Msxml2.XMLHTTP");
			} catch(e) {
				xhr = new ActiveXObject("Microsoft.XMLHTTP");
			}
		} else {
			xhr = new XMLHttpRequest(); 
		}
	} else {
		alert("Votre navigateur ne supporte pas l'objet XMLHTTPRequest...");
		return null;
	}
return xhr;
}


//Fonction onclick pour changer l'ancre
function chganchor(link){
if (typeof(navig_obsolete) != "undefined") {return true;}
var old_content = link.href;
var new_content = old_content.replace( "?page=", '#');
window.location.href = new_content;
return false;
}

//Fonction qui vide loaded_page et qui provoque le rechargement du contenu ajax (à utiliser en cas de POST ou de changement de Cookies)
function reload_ajax(){
loaded_page='';
}

//Fonction qui vérifie l'ancre toutes les demi-secondes et adapte la page en conséquence
function verify_anchor()
{
	if ((typeof(navig_obsolete) != "undefined") && (typeof(document.getElementById("contenu")) != "undefined") && (document.getElementById("contenu") != null) ){document.getElementById("contenu").style.display="block";  return true;}
	anchor = document.location.hash.substring(1);
	if (anchor=="") { anchor="accueil"; }
		
	//Si, le bloc existe déjà...
	if ((typeof(document.getElementById("contenu")) != "undefined") && (document.getElementById("contenu") != null))
	{
		//S'il y a un s_get...
		//afficher le bloc le plus rapidement possible et ne pas répéter la fonction de vérification.
		if (typeof(s_get) != "undefined")
		{
		document.getElementById("contenu").style.display="block";
		}
				
		//S'il n'y a pas de s_get, agir
		else
		{
			//Si l'ancre et la page sont différents, agir et repeter la fonction de vérification
			if (loaded_page != anchor)
			{
				//ancre vide=accueil
				if (anchor=="") { anchor="accueil"; }
				//routine avec Jquery
				if (typeof(jQuery) !="undefined") 
				{
					document.body.style.cursor = "wait";
					$('#contenu').fadeOut(250,function()
					{	
						var xhr=getXMLHttpRequest();
						var launchpage = 'jxld.php?p='+anchor;
						xhr.onreadystatechange = function()
						{
							if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0))
							{
								document.getElementById('contenu').innerHTML = xhr.responseText;
								$('#contenu').fadeIn(250);
								document.body.style.cursor = "default";
								document.getElementById('contenu').style.display ="block";
							}
						};
						xhr.open("GET", launchpage, true);
						xhr.send(null);				
					});

				}
				//routine sans jquery
				else
				{
					document.getElementsByTagName('body')[0].style.cursor = 'wait';
					var xhr=getXMLHttpRequest();
					var launchpage = 'jxld.php?p='+anchor;
					xhr.onreadystatechange = function()
					{
						if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0))
						{
							document.getElementById('contenu').innerHTML = xhr.responseText;
							document.getElementById('contenu').style.display ="block";
							document.getElementsByTagName('body')[0].style.cursor = 'default';
						}
					};
					xhr.open("GET", launchpage, true);
					xhr.send(null);
				}	
				loaded_page = anchor;
				setTimeout("verify_anchor()",100);
			}
			//Si l'ancre et la page sont identiques (OU tous les deux "" ce qui revient au même), répéter simplement la fonction
			else
			{
				setTimeout("verify_anchor()",100);
			}				
		}		
	}
	//Si, le bloc n'existe pas
	//répéter simplement la fonction de vérification
	else 
	{
			setTimeout("verify_anchor()",100);
	}
}
verify_anchor();

