/* Sur cette page, on fait des appels asynchrones en direction de la page index_infos_chat.php, pour mettre à jour les messages du Chat */

/*On enregistre les variables dont on aura besoin plus loin:*/
//L'adresse du fichier où on mettra à jour les messages du chat:
var chat_url = 'index_infos_chat.php';
//L'objet xmlHttp_chatRequest:
var xmlHttp_chat = createxmlHttpRequest();
//Combien de temps on doit attendre avant la prochaine mise a jour du serveur, en millisecondes
var temps_mise_a_jour = 20000;
//Initialise le numéro de la page que l'on demandera au serveur
var numero_page_a_demander = 1;
//On dit combien de temps on doit attendre lors d'une erreur du serveur, avant de recommencer
var intervalle_tps_lors_dune_erreur = 5000;
//Initialisation de la variable contenant le nom de l'id du div dans lequel on va afficher les messages
var div_affiche_messages;
//....
var reponse_br = "";
var br_pr_bon_defilement;

/* On créé l'objet XMLHttpRequest */
function createxmlHttpRequest()
{
	//On initialise la variable qui sera notre requête
	var xmlHttpObj = false;
	
	/*On essaie de créer l'objet de requête:*/
	//Si le client est tout sauf IE6 et les versions plus anciennes:
	try
	{
		xmlHttpObj = new XMLHttpRequest();
	}
	//Si on n'a pas réussi juste avant, on suppose que le client est IE6 ou plus ancien:
	catch(e)
	{
		//On enregistre les différentes possibilités de versions du client
		var xmlHttpVersions = new Array("MSXML2.XMLHTTP.6.0",
										"MSXML2.XMLHTTP.5.0",
										"MSXML2.XMLHTTP.4.0",
										"MSXML2.XMLHTTP.3.0",
										"MSXML2.XMLHTTP.2.0",
										"MSXML2.XMLHTPP.1.0",
										"Msxml2.XMLHTPP",
										"MSXML2.XMLHTPP",
										"Microsoft.XMLHTPP");
		
		//On essaie chaque probable version, jusqu'à ce qu'il y en ait une qui marche...
		for(var i=0; i < xmlHttpVersions.length; i++)
		{
			try
			{
				//On essaie de créer l'instancer xmlHttpChatRequest:
				xmlHttpObj = new ActiveXObject(xmlHttpVersions[i]);
			}
			catch(e)
			{
			}
		}
	}
	
	return xmlHttpObj;
}


//Fonction qui est appelée lors du chargement de la page:
function initialisation_index()
{
	if(document.getElementById("partie_chat")) // Si ca existe
	{
		//Enregistre le div où on affichera les messages du Chat:
		div_affiche_message = document.getElementById("partie_chat");
		//br_pr_bon_defilement = document.getElementsByTagName("br_pr_bon_defilement");
		cherche_nouveaux_messages();
	}
}

function cherche_nouveaux_messages()
{
	if(xmlHttp_chat) //Seulement si l'objet xmlHttp_chatRequest n'est pas vide
	{
		try
		{
			if(xmlHttp_chat.readyState == 4 || xmlHttp_chat.readyState == 0) //Si on peut demander quelque chose au serveur...
			{
				//Et ici on appelle le serveur, etc...
				xmlHttp_chat.open("GET", chat_url, true);
				xmlHttp_chat.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
				xmlHttp_chat.onreadystatechange = recevoir_messages;
				xmlHttp_chat.send(null);
			}
			else //Si le serveur n'est pas (encore) libre, on rappelle la fonction au bout de l'intervalle de temps définit au départ
			{
				setTimeout('cherche_nouveaux_messages()', temps_mise_a_jour);
			}
		}
		catch(e)
		{
			ecrit_erreur(e.toString()); //on écrit l'erreur causée s'il y en a une
		}
	}
}

//Gère les messages recus du serveur
function recevoir_messages()
{
	if(xmlHttp_chat.readyState == 4) //Seulement si le processus est complet
	{
		if(xmlHttp_chat.status == 200) //Seulement si le statut HTTP est "OK"
		{
			try //On essaie de lire la réponse du serveur
			{
				lit_messages();
			}
			catch(e) //Sinon on affiche le message d'erreur
			{
				ecrit_erreur(e.toString());
			}
		}
		else //Sinon on affiche le message d'erreur
		{
			ecrit_erreur(xmlHttp_chat.statusText);
			setTimeout('recevoir_messages()', intervalle_tps_lors_dune_erreur);
		}
	}
}

//Lit les messages venant du serveur
function lit_messages()
{
	//On enregistre la réponse du serveur, pour déterminer si c'est une erreur
	var reponse_serveur = changemoicasilteplaitencaractere_et(xmlHttp_chat.responseText);
	if(reponse_serveur.indexOf("Erreur") >= 0 || reponse_serveur.indexOf("Error") >= 0 || reponse_serveur.indexOf("error:") >= 0 || reponse_serveur.indexOf("ERRNO") >= 0 || reponse_serveur.length == 0 || reponse_serveur.indexOf("error") >= 0 || reponse_serveur.indexOf("<b>Fatal error") >= 0 || reponse_serveur.indexOf("<b>Fatal") >= 0 || reponse_serveur.indexOf("Parse error") >= 0 || reponse_serveur.indexOf("<b>Parse") >= 0) //S'il y a une erreur du serveur
	{
		throw(reponse_serveur.length == 0 ? "Reponse du serveur." : reponse_serveur); //Je crois que ca doit afficher une espèce de message d'erreur sur le client...
		setTimeout("recevoir_messages()", intervalle_tps_lors_dune_erreur);
	}
	
	/*reponse_br = "";
	var nbe_br_par_mess = 6;
	var cb_br = 0;
	if(reponse_serveur.indexOf(" 1 ") >= 0 || reponse_serveur.indexOf(" 2 ") >= 0 || reponse_serveur.indexOf(" 3 ") >= 0 || reponse_serveur.indexOf(" 4 ") >= 0 || reponse_serveur.indexOf(" 5 ") >= 0 || reponse_serveur.indexOf(" 6 ") >= 0 || reponse_serveur.indexOf(" 7 ") >= 0 || reponse_serveur.indexOf(" 8 ") >= 0 || reponse_serveur.indexOf(" 9 ") >= 0) //Si on a une réponse en ce qui concerne le nombre de messages qu'il y a dans la table
	{
		//On chope le nombre de messages qu'il y a en tt dans le chat, et on enregistre combien de <br/> il faut mettre pour chaque message
		if(reponse_serveur.indexOf(" 1 ") >= 0)
			var nbe_messages = 1;
		else if(reponse_serveur.indexOf(" 2 ") >= 0)
			var nbe_messages = 2;
		else if(reponse_serveur.indexOf(" 3 ") >= 0)
			var nbe_messages = 3;
		else if(reponse_serveur.indexOf(" 4 ") >= 0)
			var nbe_messages = 4;
		else if(reponse_serveur.indexOf(" 5 ") >= 0)
			var nbe_messages = 5;
		else if(reponse_serveur.indexOf(" 6 ") >= 0)
			var nbe_messages = 6;
		else if(reponse_serveur.indexOf(" 7 ") >= 0)
			var nbe_messages = 7;
		else if(reponse_serveur.indexOf(" 8 ") >= 0)
			var nbe_messages = 8;
		else if(reponse_serveur.indexOf(" 9 ") >= 0)
			var nbe_messages = 9;
		alert(nbe_messages);
		cb_br = nbe_messages * nbe_br_par_mess;
		
	}
	else //Si on n'a pas de réponse du serveur en ce qui concerne le nombre de messages... on considère qu'il y a plus de dix messages
	{
		cb_br = 10 * nbe_br_par_mess;
	}
	
	//Construction des <br/>
	reponse_br = "";
	for(var i=0;i<cb_br;i++)
	{
		reponse_br += '<br/>';
	}
	reponse_br += "";
	//Et on affiche tous nos <br/>
	//br_pr_bon_defilement.innerHTML = reponse_br;*/
	
	
	//On affiche sur le client
	affiche_message(reponse_serveur, reponse_br);
	//Et on redémarre le tout^^
	setTimeout("cherche_nouveaux_messages()", temps_mise_a_jour);
}

//Fonction qui affiche sur la fenêtre:
function affiche_message(message, etc)
{
	div_affiche_message.innerHTML = etc + message;
}

//Fonction qui gère les erreurs:
function ecrit_erreur(erreur)
{
	//Affiche l'erreur
	affiche_message("<strong>Erreur lors de l'accès au serveur! </strong>"+erreur+"<br/>Nouvel essai dans "+intervalle_tps_lors_dune_erreur/1000+" secondes.", "");
	setTimeout("cherche_nouveaux_messages()", intervalle_tps_lors_dune_erreur);
}

//Fonction qui va vhanger tout ce qui s'appelle "changecaen-et" en "&"
function changemoicasilteplaitencaractere_et(a_changer)
{
	a_changer = a_changer.replace(/changecasen-et/g, "\&");
	return a_changer;
}