/**
 * @author Andrea Ferracani
 */

// contiene il riferimento all'oggetto XMLHttpRequest
var xmlHttp = createXmlHttpRequestObject(); 


// funzione cross browser per creare l'istanza
function createXmlHttpRequestObject() {

	// variable che contiene il riferimento all'oggetto XMLHttpRequest da restituire
	var xmlHttp;

	// se il browser e' Internet Explorer 6 o piu vecchio
	if (window.ActiveXObject) {
		try {
			xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
		} catch (e) {
			xmlHttp = false;
		}
	} else {
		try {
			xmlHttp = new XMLHttpRequest();
		} catch (e) {
			xmlHttp = false;
		}
	}

	// controlla se l'oggetto esiste o ritorna l'errore
	if (!xmlHttp) {
		alert("Errore nella creazione oggetto XMLHttpRequest");
	} else {
		return xmlHttp;
	}
}

// funzione che apre la connessione con PHP per mezzo di XMLHttpRequest e mette l'oggetto in attesa della risposta
	
function process(){
	console.log("process");
	
	// se XMLHttpRequest esiste
	if (xmlHttp) {
		// prova a connetterti al server
		try {
			// apri la connessione
			xmlHttp.open("GET", "php/index.php", true);

			// setta il gestore d'evento
			xmlHttp.onreadystatechange = handleRequestStateChange;

			// invia la richiesta
			xmlHttp.send(null);
		}
		// cattura l'errore
		catch (e) {
			alert("Impossibile connettersi al server:\n" + e.toString());
		}
	}

};

// funzione eseguita ogni volta che il gestore di evento riceve l'evento di cambiament dello stato della risposta
function handleRequestStateChange() {
	// se readyState e' 4 la risposta e' completata
	if (xmlHttp.readyState == 4) {
		
		// controlla se lo stato della risposta HTTP sia ok
		if (xmlHttp.status == 200) {
			try {
				// se OK, fai qualcosa
				handleServerResponse();
			} catch(e) {
				// mostra il messaggio di errore
				alert("Errore nel ricevere la risposta HTTP: " + e.toString());
			}
		} else {
			// show status message
			alert("Errore nel ricevere la risposta:\n" + xmlHttp.statusText);
		}
	}

}

// funzione che prende la risposta del server in JSON o XML e ci fa qualcosa
function handleServerResponse() {
	console.log("testo della risposta: " + xmlHttp.responseText);
	console.log("handleServerResponse");
	
	 // leggi la risposta come JSON
	responseJSON = JSON.parse(xmlHttp.responseText);
	
         // genera una variabile che contenga l'output html
	var html = "<ul>"; 
	
         // itera l'array
	for (var i=0; i<responseJSON.books.length; i++) {
              html += "<li>" + responseJSON.books[i].title +  "</li>";
	}	
	html += "</ul>";

	// ottieni un riferimento alla ad un elemento della pagina HTML
	myDiv = document.getElementById("myDivElement");

	// genera HTML
	myDiv.innerHTML = "<p>Server says: </p>" + html;

}
