var messaggio, utente, scrolla;

// crea gli oggetti XmlHttpRequest per gestire i messaggi e gli utenti
var xml_Messaggi = crea_XmlHttpRequest();
var xml_Utenti = crea_XmlHttpRequest();

var intervallo = 500; //sono i millisecondi di intervallo tra una richiesta al server e l'altra

// cache della chat
var cache = new Array();

var ultimo_id = -1; 

//  questa funzione cerca e sostituisce parolacce
function ricercaParolacce(mess) {
  var arr_parolacce = new Array();
  arr_parolacce[0] = "dio";
  arr_parolacce[1] = "madonna";
  arr_parolacce[3] = "ges";
  arr_parolacce[4] = "san";
  var messaggio = "" + mess;
  //var re = new RegExp("([ ,.;:]*)" + "ges", "gi");	//per evitare la parola gesù con l'accento
  //messaggio = messaggio.replace(re, "***");					//per evitare la parola gesù con l'accento
  for (var i=0; i<arr_parolacce.length; i++) {
    re = new RegExp("([ ,.;:]*)" + arr_parolacce[i] + "([ ,.;:]*)", "gi");
    messaggio = messaggio.replace(re, "$1****$2");
  }
  return messaggio;
}

//  questa funzione crea un oggetto XmlHttpRequest
function crea_XmlHttpRequest() 
{

  var ajax;
  try
  {
    // questo codice viene eseguito soltanto nel caso
    // il browser supporti  nativamente XMLHttpRequest
    // in caso contrario viene sollevata un'eccezione
	   
    ajax = new XMLHttpRequest();
  }
  catch(e)
  {
    // nel caso in cui il client sìa Explorer
    // verifico quale versione dell'oggetto XMLHTTP
    // è installata ed eventualmente la istanzio
	   
    var array_versioni_xmlhttp = new Array("MSXML2.XMLHTTP.6.0",
                                    "MSXML2.XMLHTTP.5.0",
                                    "MSXML2.XMLHTTP.4.0",
                                    "MSXML2.XMLHTTP.3.0",
                                    "MSXML2.XMLHTTP",
                                    "Microsoft.XMLHTTP");
    for (var conta=0; conta<array_versioni_xmlhttp.length && !ajax; conta++) 
    {
      try 
      { 
        ajax = new ActiveXObject(array_versioni_xmlhttp[conta]);
      } 
      catch (e) {}
    }
  }
  // messaggio di errore generato in caso di impossibilità nella creazione dell'oggetto XmlHttpRequest  
  if (!ajax)
    alert("E' impossibile creare l'oggetto XmlHttpRequest !!!");
  else 
    return ajax;
}

function inizializza() 
{
  var messaggio = document.getElementById("messaggio");

  messaggio.setAttribute("autocomplete", "off");
  
  var numMess = 50;

  aggiorna_chat(numMess);
}

//  questa funzione viene eseguita quando si preme il submit
function invia_messaggio()
{
  var messaggio = document.getElementById("messaggio").value;
  messaggio = ricercaParolacce(messaggio);
  var utente = "(" + document.getElementById("username").value + ") - " + document.getElementById("utente").value;
  if (messaggio != "" && utente != "")
  {
    parametri =  "richiesta=invia_messaggio" +
              "&id=" + encodeURIComponent(ultimo_id) + 
              "&utente=" + encodeURIComponent(utente) + 
              "&messaggio=" + encodeURIComponent(messaggio);

    cache.push(parametri);
    document.getElementById("messaggio").value = "";
  }
}

// questa funzione svuota il DIV e refresha il DIV
function azzera_chat()
{
	var numMessaggio = document.getElementById("numMess").value;
	var scrolla_messaggi = document.getElementById('scrolla_messaggi');
	
	scrolla_messaggi.innerHTML = ' ';
	
	ultimo_id = ultimo_id - numMessaggio;
}

// questa funzione esegue chiamate asincrone nei confronti del server
// allo scopo di ottenere i  nuovi messaggi
function aggiorna_chat(numMess)
{
  var utente = document.getElementById("utente").value;
  var parametri = "";
  
  // se l'oggetto XmlHttpRequest è stato istanziato correttamente...  
  if(xml_Messaggi)
  {
    try
    {
	  // il presente controllo evita che si cerchi di effettuare una nuova operazione
	  // con l'oggetto xmlHttp_Messaggi se questo è già impegnato
      if (xml_Messaggi.readyState == 4 || 
          xml_Messaggi.readyState == 0) // il controllo viene in ogni caso eseguito
          								// se l'oggetto esiste ma non è stato ancora utilizzato
      {
        
        // estraggo dalla cache il messaggio più vecchio, se questa contiene messaggi
		
		// La cache funziona un po' come la coda che facciamo al supermercato: il primo che 
		// arriva ovviamente è anche il primo ad essere servito, cosicché siamo sicuri
		// che i messaggi vengono ricevuti nell'ordine esatto in cui essi sono inviati
        // Se la cache è piena estraggo l'elemento più vecchio allocato in essa e mando
        // la richiesta al server che me lo faccia vedere, recuperandolo tramite l'id del
        // messaggio. In caso contrario, semplicemente richiedo al server i nuovi messaggi
        if (cache.length>0)
        {
          parametri = cache.shift();
        }
        else
        {
          parametri = "richiesta=nuovi_messaggi&numMess=" + numMess + "&id=" + ultimo_id;
        }
        xml_Messaggi.open("POST", "messaggiXML.aspx", true);
        xml_Messaggi.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        xml_Messaggi.onreadystatechange = gestisci_risposta;

        xml_Messaggi.send(parametri);
      }
      else
      {
        setTimeout("aggiorna_chat(0);", intervallo);
      }
    }
    catch(e)
    {
      alert("Errore nel tentativo di recuperare i nuovi messaggi ...");
    }
  }
}


function gestisci_risposta()
{
  if (xml_Messaggi.readyState == 4)
  {
    if (xml_Messaggi.status == 200)
    {
      try
      {
  		  var risposta = xml_Messaggi.responseXML.documentElement;
		  
		  arr_id = risposta.getElementsByTagName("idMessaggio"); //contiene l'array con tutti gli id trovati
		  arr_ora = risposta.getElementsByTagName("ora");
		  arr_utente = risposta.getElementsByTagName("utente");
		  arr_msg = risposta.getElementsByTagName("messaggio");
		  
		  
		  for(var conta=0; conta<arr_id.length; conta++)
		  {
				  var ora = arr_ora.item(conta).firstChild.data.toString();
		    	var utente = arr_utente.item(conta).firstChild.data.toString();
		    	var messaggio = arr_msg.item(conta).firstChild.data.toString();
			
			    var htmlMessage = "";
			    htmlMessage += "<div class=\"messaggio\" name=\"messagg\">"; 
			    htmlMessage += "<font color='#c00000'>&nbsp;[" + ora + "] - " + utente + ": </font><br>";
			    htmlMessage += messaggio.toString();
			    htmlMessage += "</div>";
			    visualizza_messaggio(htmlMessage);
		  }


		  if(arr_id.length>0)
		  {
		    	if(ultimo_id > 0) {
		    		setCookieDay("pixelChat","",-1); //cancelliamo il cookie non appena c'è un nuovo messaggio
		    	}
		    	ultimo_id = arr_id.item(arr_id.length - 1).firstChild.data;
		  }

		  setTimeout("aggiorna_chat(0);", intervallo);
      }
      catch(e)
      {
        alert(e.toString());
      }
    } 
    else
    {
      alert(xml_Messaggi.statusText);
    }
  }
}

function visualizza_messaggio(messaggio)
{

  var scrolla = document.getElementById("scrolla_messaggi");

  scrolla.innerHTML += messaggio;

  scrolla.scrollTop = scrolla.scrollHeight;
}

