var oHistoriqueRequetes = [];
var oHistoriqueRequeteCourante = 0;
var AppelAjaxLoadTextApresChangementUrl = true;
var ChangementUrlParAjaxLoadText = true;


function AfficherOHistoriqueRequetes()
{
	var texte = '';
	
	for(var key in oHistoriqueRequetes)
		texte += '\n\nKEY: '+key+' '+(((oHistoriqueRequeteCourante-1) == key)?'COURANT':'')+' => \nsUri:'+oHistoriqueRequetes[key].sUri+'\nsDiv:'+oHistoriqueRequetes[key].sDiv+'\nmethode:'+oHistoriqueRequetes[key].methode+'\nidFormulaire:'+oHistoriqueRequetes[key].idFormulaire+'\nUrisFichierJs:'+oHistoriqueRequetes[key].UrisFichierJs+'\naffichageChargement:'+oHistoriqueRequetes[key].affichageChargement;
	alert(texte);
}


function Ajaxinit()
{
	jQuery(document).ready(function($)
	{
		//Ne pas mettre var devant, sinon la port&eacute;e des variables ne sera plus globale.
		oImgWaiting = new Image();
		oImgWaiting.src = "images/waiting.gif";
		oImgLoading = new Image();
		oImgLoading.src = "images/waiting.gif";
		
		paragrapheWaiting = document.createElement("p");
		if(document.all) paragrapheWaiting.className='LoadingWaiting';
		else paragrapheWaiting.setAttribute("class","LoadingWaiting");
		paragrapheWaiting.appendChild(oImgWaiting);
		
		paragrapheLoading = document.createElement("p");
		if(document.all) paragrapheLoading.className='LoadingWaiting';
		else paragrapheLoading.setAttribute("class","LoadingWaiting");
		paragrapheLoading.appendChild(oImgLoading);

        $.history.init(function(ancre) {
				if(AppelAjaxLoadTextApresChangementUrl == true)
				{
					if(ancre != '')
					{
						if(IsNumeric(ancre))
						{
							if(ancre <= oHistoriqueRequetes.length && ancre >= 0)
								oHistoriqueRequeteCourante = ancre;
							else
								oHistoriqueRequeteCourante = oHistoriqueRequetes.length;
							
							//AfficherOHistoriqueRequetes();
							if(oHistoriqueRequeteCourante > 0)
							{
								if(document.getElementById(oHistoriqueRequetes[oHistoriqueRequeteCourante-1].sDiv) || (!oHistoriqueRequetes[oHistoriqueRequeteCourante-1].idFormulaire || document.getElementById(oHistoriqueRequetes[oHistoriqueRequeteCourante-1].idFormulaire)))
								{
									//alert('Lancement de la requete'); //Faire en sorte que ajaxloadtext reecrive pas l'url cette fois...
									ChangementUrlParAjaxLoadText = false;
									AjaxLoadText(oHistoriqueRequetes[oHistoriqueRequeteCourante-1].sUri, oHistoriqueRequetes[oHistoriqueRequeteCourante-1].sDiv, oHistoriqueRequetes[oHistoriqueRequeteCourante-1].methode, oHistoriqueRequetes[oHistoriqueRequeteCourante-1].idFormulaire, oHistoriqueRequetes[oHistoriqueRequeteCourante-1].UrisFichierJs, oHistoriqueRequetes[oHistoriqueRequeteCourante-1].affichageChargement);
								}
								else
								{
									//alert('div introuvable');
								}
							}
						}
					}
				}
				else
					AppelAjaxLoadTextApresChangementUrl = true;
            });
    });
}

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;
}

//UrisFichierJs peut etre une chaine de caractere ou un tableau
function AjaxLoadText(sUri, sDiv, methode, idFormulaire, UrisFichierJs, affichageChargement) //Selon la m&eacute;thode, si idFormulaire est indiqu&eacute;, Les donn&eacute;es de ce formulaire seront envoy&eacute;es en GET ou en POST
{
	var xhr = getXMLHttpRequest();
	var sParametresGet = '';
	var sParametresPost = '';
	if(typeof(affichageChargement) == 'undefined') affichageChargement = 'simple';
	affichageChargement = 'simple';
	if(methode != "GET" && methode != "POST") methode = "GET";
	
	if(xhr && xhr.readyState != 0) { xhr.abort(); }
	
	xhr.onreadystatechange = function() {
		if(xhr.readyState == 1) //D&egrave;s que l'objet xhr a &eacute;t&eacute; cr&eacute;&eacute;, on affiche l'image waiting dans la div
		{
			document.getElementById(sDiv).innerHTML = '';
			switch(affichageChargement)
			{
				case 'simple':
					document.getElementById(sDiv).appendChild(paragrapheWaiting);
				break;
				/*case 'ajaxloadingpanel':
					showChargement();
					window.scrollTo(0,0);
				break;*/
				default:
					document.getElementById(sDiv).appendChild(paragrapheWaiting);
				break;
			}
		}
		else if(xhr.readyState == 2 || xhr.readyState == 3) // Quand La m&eacute;thode send  vient d'être appel&eacute;e, et par la suite, quand on commence par recevoir les donn&eacute;es, on affiche l'image de chargement dans la div
		{
			document.getElementById(sDiv).innerHTML = '';
			if(affichageChargement != 'ajaxloadingpanel') document.getElementById(sDiv).appendChild(paragrapheLoading);
		}
		else if(xhr.readyState == 4)	//Lorsque la r&eacute;ponse est arriv&eacute;e
		{
			if (xhr.status == 200 || xhr.status == 0)	//Si le code HTML est bon
			{
				regexIfDeconnexion = /DOCTYPE html/gi

				if(regexIfDeconnexion.test(xhr.responseText.substr(0, 16)))
					location.replace('http://'+location.hostname+'/');
				else
				{
					//DEBUT Uniquement si c'est pas History qui appèle AjaxLoadText
					if(ChangementUrlParAjaxLoadText == true)
					{
						oHistoriqueRequetes[oHistoriqueRequeteCourante] = {'sUri':sUri, 'sDiv':sDiv, 'methode':methode, 'idFormulaire':idFormulaire, 'UrisFichierJs':UrisFichierJs, 'affichageChargement':affichageChargement};
						oHistoriqueRequeteCourante++;
						
						if(oHistoriqueRequeteCourante < oHistoriqueRequetes.length)
							oHistoriqueRequetes = oHistoriqueRequetes.slice(0, oHistoriqueRequeteCourante);
						
						AppelAjaxLoadTextApresChangementUrl = false;
						window.location = '#'+oHistoriqueRequeteCourante;
					}
					//FIN Uniquement Si c'est pas History
					
					document.getElementById(sDiv).innerHTML = xhr.responseText; //On insere le r&eacute;sultat dans la div...
					//if(affichageChargement == 'ajaxloadingpanel') popupContent.hidePopup();
					
					if(typeof(UrisFichierJs) != 'undefined')
					{
						if(typeof(UrisFichierJs) == 'string')
							AjaxloadElementScript(UrisFichierJs, "text/javascript", sDiv); //On r&eacute;cup&egrave;re &eacute;ventuellement la ressource javascript dans cette meme div
						else if(typeof(UrisFichierJs) == 'object')
						{
							for(key in UrisFichierJs)
								AjaxloadElementScript(UrisFichierJs[key], "text/javascript", sDiv);
						}
					}
				}
			}
			else
			{
				//if(affichageChargement == 'ajaxloadingpanel') popupContent.hidePopup();
				document.getElementById(sDiv).innerHTML = '<p class="alerte">Erreur dans la r&eacute;cup&eacute;ration des donn&eacute;es : '+xhr.status+' > '+xhr.statusText+'</p>';
			}
			
			ChangementUrlParAjaxLoadText = true;
		}
	}

	if(idFormulaire != undefined && idFormulaire != '')
	{
		var monFormulaire = new Formulaire(idFormulaire);
		if(methode == 'POST')
			sParametresPost = monFormulaire.GetDonneesEscapeesFormulaire();
		else if(methode == 'GET') //On envoie les donn&eacute;es du formulaire par la m&eacute;thode GET
		{
			sParametresGet = monFormulaire.GetDonneesEscapeesFormulaire();
			regexMatchParametresGetDansUrl = /.+\?.*/;
			if(regexMatchParametresGetDansUrl.test(sUri))
				sParametresGet = '&' + sParametresGet;
			else
				sParametresGet = '?' + sParametresGet;
		}
			
	}
	
	xhr.open(methode, sUri + sParametresGet);	//On parametre le fichier à aller chercher, ainsi que la m&eacute;thode utilis&eacute;e (GET ou POST)
	if(methode == "POST")
	{
		xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;");
		xhr.send(sParametresPost);
	}
	else
		xhr.send(null);
}



function AjaxUploadFormAvecFichier(sUri, sDiv, idFormulaire, UrisFichierJs, affichageChargement)
{
	var detectWebKit = RegExp(" AppleWebKit/").test(navigator.userAgent); //isWebKit
	var formulaire = document.getElementById(idFormulaire);
	if(typeof(affichageChargement) == 'undefined') affichageChargement = 'simple';
	
	var iframe = document.createElement("iframe");
	iframe.setAttribute("id","uploadform-temp");
	iframe.setAttribute("name","uploadform-temp");
	iframe.setAttribute("width","0");
	iframe.setAttribute("height","0");
	iframe.setAttribute("border","0");
	iframe.setAttribute("style","width: 0; height: 0; border: none;");
	
	formulaire.parentNode.appendChild(iframe);
	window.frames['uploadform-temp'].name="uploadform-temp";
	
	
	var doUpload = function()
	{
		removeEvent(document.getElementById('uploadform-temp'),"load", doUpload);
		var cross = 'javascript: window.parent.document.getElementById(\''+sDiv+'\').innerHTML = document.body.innerHTML;';
		if(typeof(UrisFichierJs) != 'undefined')
		{
			if(typeof(UrisFichierJs) == 'string')
				cross += 'window.parent.AjaxloadElementScript(\''+UrisFichierJs+'\', \'text/javascript\', window.parent.document.getElementById(\''+sDiv+'\'));';
			else if(typeof(UrisFichierJs) == 'object')
			{
				for(key in UrisFichierJs)
					cross += 'window.parent.AjaxloadElementScript(\''+UrisFichierJs[key]+'\', \'text/javascript\', window.parent.document.getElementById(\''+sDiv+'\'));';
			}
		}
		cross += 'void(0);';
		
		document.getElementById(sDiv).innerHTML = 'une erreure s\'est produite';
		document.getElementById('uploadform-temp').src = cross;
		if(detectWebKit)
		{
			var theParent = document.getElementById('uploadform-temp').parentNode;
			theParent.removeChild(document.getElementById('uploadform-temp'));

		}
		else
		{
        	setTimeout(function()
			{
				var theParent = document.getElementById('uploadform-temp').parentNode;
				theParent.removeChild(document.getElementById('uploadform-temp'));
			}, 250);
		}
		if(affichageChargement == 'ajaxloadingpanel')
			ajaxloadingpanel.hide();
    }
	
	addEvent(document.getElementById('uploadform-temp'),"load", doUpload);

	// form proprietes
	formulaire.setAttribute("target", "uploadform-temp");
	formulaire.setAttribute("action", sUri);
	formulaire.setAttribute("method", "post");
	formulaire.setAttribute("enctype", "multipart/form-data");
	formulaire.setAttribute("encoding", "multipart/form-data");

	// loading
	document.getElementById(sDiv).innerHTML = '';
	if(affichageChargement != 'ajaxloadingpanel')
		document.getElementById(sDiv).appendChild(paragrapheLoading);
	else
		ajaxloadingpanel.show();
	// submit
	formulaire.submit();
	return false;
}













//Fonction qui ins&egrave;re un &eacute;l&eacute;ment script dans le DOM pour r&eacute;cup&eacute;rer un fichier js
function AjaxloadElementScript(sUriFichierJs, type, Div)
{
	var oScript = document.createElement("script");
	oScript.src = sUriFichierJs;
	oScript.type = type;
	if(typeof Div == "string") Div = document.getElementById(Div);
	Div.appendChild(oScript);
	//Div.removeChild(oScript); //Commente, sinon ca bug pour IE et pour safari et chrome, y faut charger 2 fois le fichier pour qu'il soit interprété
}
