/*  ===============================================================================================  *\
        Mémorisation référence à l'objet XMLHttpRequest
\*  ===============================================================================================  */
var xmlHttp = createXmlHttpRequestObject();
var id = 1;
var CurrIdJeu = 0;
var EnCours = 0;

// Variable utilisée pour l'éditeur
var CurrArea = new Object();

// Création de l'objet XMLHttpRequest
function createXmlHttpRequestObject()
{
  var xmlHttp;

  try
    {xmlHttp = new XMLHttpRequest();}
  catch (e)
    {
    try
      {xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");}
    catch (e)
      {xmlHttp = false;}
    }

  if (!xmlHttp)
    alert("Error de création XMLHttpRequest.");
  else
    return xmlHttp;
}

/*  ===============================================================================================
        Charge les images déroulantes sur la liste des jeux, manif, presse
            (pas réellement utile en Ajax, mais pour tester)
\*  ===============================================================================================  */
function ChargeImage()
{
	if (xmlHttp.readyState == 4 || xmlHttp.readyState == 0) // seulement si xmlHttp n'et pas busy
	{
		xmlHttp.open("GET", "index.php?_ajax=donneImage&id=" + id.toString(), true);
		xmlHttp.onreadystatechange = chargeImageEvent;
		xmlHttp.send(null);
		id = id + 1;
		if (id == 6)
			{id = 1};
	}
	else
	{
		setTimeout('ChargeImage()', 1000);  // si busy, nouvel essai après 1 seconde
	}
}

function chargeImageEvent()
{
	if (xmlHttp.readyState == 4)    // move forward only if the transaction has completed
	{
		if (xmlHttp.status == 200)  // status of 200 indicates the transaction completed successfully
		{
			xmlResponse = xmlHttp.responseXML;  // extract the XML retrieved from the server
			xmlDocumentElement = xmlResponse.documentElement;   // obtain the document element (the root element) of the XML structure
			CurrImage = xmlHttp.responseText;
			document.getElementById("divImage").innerHTML = CurrImage;        // update the client display using the data received from the server
			setTimeout('ChargeImage()', 2000);   // restart sequence
		}
		else  // a HTTP status different than 200 signals an error
		{
			alert("There was a problem accessing the server: " + xmlHttp.statusText + ', ' + xmlHttp.status);
		}
	}
}

/*  ===============================================================================================
        CHAT. 
\*  ===============================================================================================  */
function chargeChat(parametres)
{
	if (xmlHttp.readyState == 4 || xmlHttp.readyState == 0) // seulement si xmlHttp n'et pas busy
	{
		xmlHttp.open("POST", "index.php", true);
		xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

		xmlHttp.onreadystatechange = function() { chargeChatEvent(parametres); };
		xmlHttp.send(parametres);
	}
	else
	{
		setTimeout('ChargeChat("' + parametres + '")', 1000);  // si busy, nouvel essai après 1 seconde
	}
}

function chargeChatEvent(paramPost)
{
	if (xmlHttp.readyState == 4)
	{
		if (xmlHttp.status == 200)
		{
			xmlResponse = xmlHttp.responseXML;
			xmlDocumentElement = xmlResponse.documentElement;
			var allItems = xmlDocumentElement.getElementsByTagName("message");
			var allmess = "";
			var ColorTexte = "#E94B28";
			for (var i=0;i<allItems.length;i++)
			{
				if (ColorTexte == "#E94B28")
					{ColorTexte = "#754CE9"}
				else
					{ColorTexte = "#E94B28"}
				var itemElm = allItems[i];
				var dateElm = itemElm.getElementsByTagName("datemess").item(0);
				var dateTxt = dateElm.firstChild.nodeValue;
				var pseuElm = itemElm.getElementsByTagName("pseudo").item(0);
				var pseuTxt = pseuElm.firstChild.nodeValue;
				var messElm = itemElm.getElementsByTagName("chatmess").item(0);
				var messTxt = messElm.firstChild.nodeValue;
				var unmess = "<strong><span style=\"color: #E93475\">" + dateTxt + ", </span>";
				unmess += "<span style=\"color: " + ColorTexte + "\">" +  pseuTxt + " :  </strong>";
				unmess += messTxt + "</span><br>";

				// Cette partie remplace les caractères spéciaux. Peut être mieux à faire ?
				unmess = unmess.replace(/&amp;lt;/g, "<");
				unmess = unmess.replace(/&lt;/g, "<");
				unmess = unmess.replace(/&amp;gt;/g, ">");
				unmess = unmess.replace(/&gt;/g, ">");
				unmess = unmess.replace(/&amp;quot;/g, "\"");
				unmess = unmess.replace(/&quot;/g, "\"");
				allmess += unmess;
			}
			document.getElementById("resultchat").innerHTML = allmess; 

			var maintenant = new Date();
			document.getElementById("infoDate").innerHTML = '<i>Liste des messages au ' 
			+ maintenant.toLocaleString() + '</u>'; 

			//if (paramPost == ""){
				//setTimeout('chargeChat("")', 60000);
			// On ne relance que si on n'a pas écrit de message. Sinon, les messages se réécrivent.
			if (paramPost.indexOf("&message=") == -1) {
				setTimeout('chargeChat("' + paramPost + '")', 30000);
			};
		}
		else
		{
			alert("Problème pour accéder au server: " + xmlHttp.statusText + ', ' + xmlHttp.status);
		}
	}
}

function sendMessage()
{
	var oCurrentMessage = document.getElementById("idMessage");
	var currentUser = document.getElementById("idPseudo").value;
	var currentCateg = document.getElementById("idCateg").value;
	var currentElem  = document.getElementById("idElem").value;

	if (trim(oCurrentMessage.value) != "" && trim(currentUser) != "")
	{
		// if we need to send and retrieve messages
		params =  "_ajax=miniChatServer&pseudo=" + encodeURIComponent(currentUser) + 
				  "&message=" + encodeURIComponent(oCurrentMessage.value) + 
				  "&categ=" + encodeURIComponent(currentCateg) +
				  "&elem=" + encodeURIComponent(currentElem);  
		//params =  "pseudo=" + currentUser + "&message=" + oCurrentMessage.value;  
		//alert("Parametres dans sendMessage : <" + params + ">");
		chargeChat(params);
		oCurrentMessage.value = "";   
	}
}

function trim(s)
{
    return s.replace(/(^\s+)|(\s+$)/g, "")
}

/*  ===============================================================================================
        Récupération du jeu sélectionné dans "détente"
\*  ===============================================================================================  */
function RecupImage(IdImage)
{
  if (xmlHttp.readyState == 4 || xmlHttp.readyState == 0) // seulement si xmlHttp n'et pas busy
  {
    CurrIdJeu = IdImage;
    xmlHttp.open("GET", "index.php?_ajax=recupImage&id=" + IdImage.toString(), true);
    xmlHttp.onreadystatechange = eventRecupImage;
    xmlHttp.send();
  }
  else
  {
    setTimeout('RecupImage(' + IdImage.toString() + ')', 1000);  // si busy, nouvel essai après 1 seconde
  }
}

function eventRecupImage(parametres)
{
  if (xmlHttp.readyState == 4)
  {
    if (xmlHttp.status == 200)
    {	
      xmlResponse = xmlHttp.responseXML;
      xmlDocumentElement = xmlResponse.documentElement;
      CurrImage = xmlHttp.responseText;
      document.getElementById("selectjeu").innerHTML = CurrImage;
    }
    else 
    {
      alert("There was a problem accessing the server: " + xmlHttp.statusText + ', ' + xmlHttp.status);
    }
  }
}

function GotoPage(NomPage, IdPage)
{
  location.href=NomPage + IdPage;
}


/*  ===============================================================================================
        Les jeux retournés. 
\*  ===============================================================================================  */
function RecupGrilleJeu(parametre)
{
  //alert(EnCours);
  if (parametre == 0)
    {EnCours = 0;}

  if (EnCours == 0)   // On ne lance pas la fonction si une instance de celle-ci est en cours
  {
      if (xmlHttp.readyState == 4 || xmlHttp.readyState == 0) // seulement si xmlHttp n'et pas busy
      {
        EnCours = 1;  // La fonction est lancée
        xmlHttp.open("POST", "index.php", true);
        xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        
        xmlHttp.onreadystatechange = function() { eventRecupGrilleJeu(parametre); };
        xmlHttp.send("_ajax=jeuServer&case=" + parametre.toString());
      }
      else
      {
        setTimeout('RecupGrilleJeu(' + parametre.toString() + ')', 1000);  // si busy, nouvel essai après 1 seconde
      }
  }
}

function eventRecupGrilleJeu(parametres)
{
  if (xmlHttp.readyState == 4)
  {
    if (xmlHttp.status == 200)
    {
      xmlResponse = xmlHttp.responseXML;
      //alert(xmlHttp.responseText);    // Intéressant, permet de voir s'il existe des erreurs coté serveur
      xmlDocumentElement = xmlResponse.documentElement;
      //alert(xmlDocumentElement);
      for (var i=1;i<21;i++)
        {
          var AllElm = xmlDocumentElement.getElementsByTagName("cellule" + i.toString());
          var itemElm = AllElm[0];
          var valeurElm = itemElm.getElementsByTagName("valeur").item(0);
          var valeurTxt = valeurElm.firstChild.nodeValue;
          document.getElementById("td" + i.toString()).innerHTML = valeurTxt; 
        }
        var AllElm = xmlDocumentElement.getElementsByTagName("controle");
        var itemElm = AllElm[0];

        // Gestion des cartes retournées
        var valeurElm = itemElm.getElementsByTagName("nbcartes").item(0);
        var nbcartes = valeurElm.firstChild.nodeValue;
        var valeurElm = itemElm.getElementsByTagName("carte1").item(0);
        var carte1 = valeurElm.firstChild.nodeValue;

        var valeurElm = itemElm.getElementsByTagName("carte2").item(0);
        var carte2 = valeurElm.firstChild.nodeValue;
        
        var valeurElm = itemElm.getElementsByTagName("nbok").item(0);
        var nbok = valeurElm.firstChild.nodeValue;
        var msg = '<p><b><i><u>Nb Trouvé :</u></i></b> ' + nbok.toString() + '</p>';
        
        var valeurElm = itemElm.getElementsByTagName("nbtest").item(0);
        var nbtest = valeurElm.firstChild.nodeValue;
        var msg = msg + '<p><b><i><u>Nb Test :</u></i></b> ' + nbtest.toString() + '</p>';
        
        document.getElementById("nbok").innerHTML = msg;
        
        var valeurElm = itemElm.getElementsByTagName("jeuselect").item(0);
        var jeuselect = valeurElm.firstChild.nodeValue;
        if (jeuselect != '.')
            {document.getElementById("jeuselect").innerHTML = '<b><i>' + jeuselect + '</i></b>';}
        else
            {document.getElementById("jeuselect").innerHTML = '';}

        var valeurElm = itemElm.getElementsByTagName("resultat").item(0);
        var resultat = valeurElm.firstChild.nodeValue;
        document.getElementById("resultat").innerHTML = resultat;
        
            EnCours = 0;    // La fonction est terminée
        if (nbcartes == 2)          // Si on a 2 cartes, il faut relancer la fonction pour les réinitialiser
        {
            if (carte1 == carte2)
                {coderetour = -2}
            else
                {coderetour = -1}
            setTimeout('RecupGrilleJeu(' + coderetour.toString() + ')', 2000);  
        }
    }
    else
    {
      alert("Problème pour accéder au server: " + xmlHttp.statusText + ', ' + xmlHttp.status);
    }
  }
}

function montreMenu(divId, menuId, sousMenuId) 
{
	if (document.getElementById) 
	{
		document.getElementById(sousMenuId).style.left = document.getElementById(menuId).offsetLeft;
		document.getElementById(sousMenuId).style.top = document.getElementById(divId).offsetTop + 30;
		document.getElementById(sousMenuId).style.display="block";
	} 
	else if (document.all) 
	{
		document.all[sousMenuId].style.left = document.all[MenuId].offsetLeft;
		document.all[sousMenuId].style.top = document.all[divId].offsetTop + 30;
		document.all[sousMenuId].style.display="block";
	} 
	else if (document.layers) 
	{
		document.layers[sousMenuId].left = document.layers[MenuId].offsetLeft;
		document.layers[sousMenuId].top = document.layers[divId].offsetTop + 30;
		document.layers[sousMenuId].display="block";
	}
	setTimeout("cacheMenuTO('" + sousMenuId + "')", 3500);
}

function cacheMenuTO(id) 
{
	if (document.getElementById) 
	{
		document.getElementById(id).style.display="none";
	} 
	else if (document.all) 
	{
		document.all[id].style.display="none";
	} 
	else if (document.layers) 
	{
		document.layers[id].display="none";
	}
}

function cacheMenu(id) 
{
	/*
	if (document.getElementById) 
	{
		document.getElementById(id).style.display="none";
	} 
	else if (document.all) 
	{
		document.all[id].style.display="none";
	} 
	else if (document.layers) 
	{
		document.layers[id].display="none";
	}
	*/
}

// Fonctions pour l'éditeur
function addText(instextD, instextF)
{
   //var mess = document.coolsus.message;
   var mess = CurrArea;
   //IE support
   if (document.selection) {
      mess.focus();
      sel = document.selection.createRange();
      sel.text = instextD + sel.text + instextF;
      document.coolsus.focus();
   }
   //MOZILLA/NETSCAPE support
   else if (mess.selectionStart || mess.selectionStart == "0") {
      var startPos = mess.selectionStart;
      var endPos = mess.selectionEnd;
      var chaine = mess.value;
      mess.value = chaine.substring(0, startPos) + instextD + chaine.substring(startPos, endPos) + instextF  + chaine.substring(endPos, chaine.length);
      mess.focus();
   } else {
      mess.value += instext;
      mess.focus();
   }
}

function storeCaret(text) {
   if (text.createTextRange) text.caretPos = document.selection.createRange().duplicate();
}

function storeForm(textEl) {
   document.currentForm = textEl;
   //alert(textEl.name);
   CurrArea = textEl;
   //alert("CurrArea défini : " + CurrArea.name);
}

function Affiche() {
   alert("Salut");
}

