/** (C) HTML.IT - insieme di funzioni ed oggetti utili per interagire con ajax */

/** FUNZIONI */

// funzione per prendere un elemento con id univoco
function prendiElementoDaId(id_elemento) {
    var elemento;
	if(document.getElementById)
		elemento = document.getElementById(id_elemento);
	else
		elemento = document.all[id_elemento];
	return elemento;
};

// funzione per assegnare un oggetto XMLHttpRequest
function assegnaXMLHttpRequest() {
	var
		XHR = null,
		browserUtente = navigator.userAgent.toUpperCase();
	if(typeof(XMLHttpRequest) === "function" || typeof(XMLHttpRequest) === "object")
		XHR = new XMLHttpRequest();
	else if(window.ActiveXObject && browserUtente.indexOf("MSIE 4") < 0) {
		if(browserUtente.indexOf("MSIE 5") < 0)
			XHR = new ActiveXObject("Msxml2.XMLHTTP");
		else
			XHR = new ActiveXObject("Microsoft.XMLHTTP");
	}
	return XHR;
};

//Rendiamo l'elemento visibile
function show(elemento){
    alert(elemento);
	elemento = prendiElementoDaId(elemento);
	
	if(elemento.style.display=='block')
	{
		alert('block'+elemento.style.display);
	elemento.style.display='none';
	}
	else
	{
	alert('else'+elemento.style.display);
	elemento.style.display='block';
	}
}
	
//Funzione di attesa, mostriamo un'immagine dinamica
function setLoading(elemento) {
  elemento = prendiElementoDaId(elemento);
  elemento.innerHTML = "<div class=\"waiting\"><img align=\"bottom\" src=\"./img/waiting.gif\"/> Loading...</div>";
};

//La funzione si occupa di registrare il voto per lo specifico item
function vote(voto,bott,id){
	//Recupero lo specifico elemento che contiene il voto
	inpVoto=document.getElementById(voto);
	if (vote!=""){
		//Controllo sul range di valori
		if (inpVoto.value>0 && inpVoto.value<=10){
			//OK: disabilitiamo i tasti, in modo da prevenire altre azioni utente
			bott.disabled=true;
			inpVoto.disabled=true;
			//Chiamiamo la funzione per il setting del voto al volo
			alertTesto('actionservlet?op=voteItem&iid='+id+'&vote='+inpVoto.value+'');
		}
		else
			//Valori fuori range
			alert("Il voto deve essere compreso tra 1 e 10.");
	}
}

//La funzione si occupa di mostrare l'elemento DIVID'id'
function openBox(id)
{
	
	elemento="DIVID"+id
	
	show(elemento);
	
	setLoading(elemento);
	caricaTesto(elemento,'actionservlet?op=getItem&iid='+id+'');
}
		
// funzione di caricamento testo,accetta una stringa contenente il nome di un file da leggere e l'elemento dove inserirlo
function caricaTesto(elemento,nomeFile) {

  // variabili di funzione
  var
    // assegnazione oggetto XMLHttpRequest
    ajax = assegnaXMLHttpRequest(),
    // assegnazione elemento del documento
    elemento = prendiElementoDaId(elemento),
    // risultato booleano di funzione
    usaLink = true;

  // se l'oggetto XMLHttpRequest non è nullo
  if(ajax) {
    // il link al file non deve essere usato
    usaLink = false;

    // impostazione richiesta asincrona in GET
    // del file specificato
    ajax.open("get", nomeFile, true);

    // rimozione dell'header "connection" come "keep alive"
    ajax.setRequestHeader("connection", "close");

    // impostazione controllo e stato della richiesta
    ajax.onreadystatechange = function() {

      // verifica dello stato
      if(ajax.readyState === readyState.COMPLETATO) {
        // verifica della risposta da parte del server
        if(statusText[ajax.status] === "OK")
          // operazione avvenuta con successo
          elemento.innerHTML = ajax.responseText;
        else {
          // errore di caricamento
          elemento.innerHTML = "Impossibile effettuare l'operazione richiesta.<br />";
          elemento.innerHTML += "Errore riscontrato: " + statusText[ajax.status];
        }
      }
    }

    // invio richiesta
    ajax.send(null);
  }

};

// la funzione richiama nomeFile e mostra il risultato in un alert
function alertTesto(nomeFile) {

  // variabili di funzione
  var
    // assegnazione oggetto XMLHttpRequest
    ajax = assegnaXMLHttpRequest()

  // se l'oggetto XMLHttpRequest non è nullo
  if(ajax) {
    // impostazione richiesta asincrona in GET
    // del file specificato
    ajax.open("get", nomeFile, true);

    // rimozione dell'header "connection" come "keep alive"
    ajax.setRequestHeader("connection", "close");

    // impostazione controllo e stato della richiesta
    ajax.onreadystatechange = function() {

      // verifica dello stato
      if(ajax.readyState === readyState.COMPLETATO) {
        // verifica della risposta da parte del server
        if(statusText[ajax.status] === "OK")
          // operazione avvenuta con successo
          alert(ajax.responseText);
        else {
          // errore di caricamento
          alert("Errore riscontrato: " + statusText[ajax.status]);
        }
      }
    }

    // invio richiesta
    ajax.send(null);
  }

};

/** OGGETTI / ARRAY */

// oggetto di verifica stato
var readyState = {
	INATTIVO:	0,
	INIZIALIZZATO:	1,
	RICHIESTA:	2,
	RISPOSTA:	3,
	COMPLETATO:	4
};

// array descrittivo dei codici restituiti dal server [la scelta dell' array è per evitare problemi con vecchi browsers]
var statusText = new Array();
statusText[100] = "Continue";
statusText[101] = "Switching Protocols";
statusText[200] = "OK";
statusText[201] = "Created";
statusText[202] = "Accepted";
statusText[203] = "Non-Authoritative Information";
statusText[204] = "No Content";
statusText[205] = "Reset Content";
statusText[206] = "Partial Content";
statusText[300] = "Multiple Choices";
statusText[301] = "Moved Permanently";
statusText[302] = "Found";
statusText[303] = "See Other";
statusText[304] = "Not Modified";
statusText[305] = "Use Proxy";
statusText[306] = "(unused, but reserved)";
statusText[307] = "Temporary Redirect";
statusText[400] = "Bad Request";
statusText[401] = "Unauthorized";
statusText[402] = "Payment Required";
statusText[403] = "Forbidden";
statusText[404] = "Not Found";
statusText[405] = "Method Not Allowed";
statusText[406] = "Not Acceptable";
statusText[407] = "Proxy Authentication Required";
statusText[408] = "Request Timeout";
statusText[409] = "Conflict";
statusText[410] = "Gone";
statusText[411] = "Length Required";
statusText[412] = "Precondition Failed";
statusText[413] = "Request Entity Too Large";
statusText[414] = "Request-URI Too Long";
statusText[415] = "Unsupported Media Type";
statusText[416] = "Requested Range Not Satisfiable";
statusText[417] = "Expectation Failed";
statusText[500] = "Internal Server Error";
statusText[501] = "Not Implemented";
statusText[502] = "Bad Gateway";
statusText[503] = "Service Unavailable";
statusText[504] = "Gateway Timeout";
statusText[505] = "HTTP Version Not Supported";
statusText[509] = "Bandwidth Limit Exceeded";
		