/* ***********************************************   
** Javascript con per la gestione del dettaglio **
** download tramite AJAX nel portale "Lords of  **
** Knowledge"                                   **
**                                              **
** (c) 2009 by Ohmnibus <mail@ohmnibus.net>     **
**     powered by Alessandro Lacava             **
**     http://www.alessandrolacava.com          **
**                                              **
** Ogni utilizzo del presente file senza previa **
** autorizzazzione dell'autore è da             **
** considerare come atto di pirateria           **
** informatica. Per favore mettere a conoscenza **
** l'autore di eventuali abusi.                 **
************************************************ */

function retrieveData(idArea, idSubArea, idElement) {
	var url = "fileinfo_retriever.asp";
	var xhr;

	openLightBox("detailLightBox", "backgroundFade");

	xhr = createHttpRequest();
	xhr.open(
		"get",
		url + "?" + idArea + "&" + idSubArea + "&" + idElement,
		true);
	
	//funzione di callback
	xhr.onreadystatechange = function() {
		processResponse(xhr);
	}
	
	//invia la richiesta
	xhr.send(null);
}

function processResponse(xhr) {
	//controlla lo stato della risposta
	var rp = new ResponseProcessor(xhr);
	if(xhr.readyState == 4) {
		if (xhr.status == 200) {
			rp.produceHtml("detailLightBox");
		} else {
			rp.produceError("detailLightBox");
		}
	} else {
		rp.produceWait("detailLightBox", xhr.readyState);
	}
}

/* Classe per la gestione dell'output */
function ResponseProcessor(xhr) {
	this.EMPTY_RESPONSE = "Empty";
	this.NOTFOUND_RESPONSE = "NotFound";
	this.xhr = xhr;
}

ResponseProcessor.prototype = {
	
	produceHtml : function(container) {
		var html;
		
		html = this.getEmptyResponse();
		
		if (html == null) {
			var sites;
			eval("sites = " + this.xhr.responseText);
	
			html = this.buildHtmlFromObjArr(sites);
		}
		this.fillContainer(container, html);		
	},

	produceWait : function(container, readyState) {
		var html;
		
		html = "<div class=\"WaitImageContainer\"><img src=\"" + graphicPath + "loading.gif\" class=\"WaitImage\" /></div>";
		this.fillContainer(container, html);		
	},

	produceError : function(container) {
		var html;
		
		html = "<p>Si &egrave; verificato un errore durante il caricamento. Impossibile caricare le informazioni richieste.</p>"
		this.fillContainer(container, html);		
	},

	// Costruisce il codice HTML dall'oggetto JSON
	buildHtmlFromObjArr : function(objArr) {
		var ret;		
		var currentSite;
		
		ret = "";

		ret += "<div class=\"Download ReadTales\">";
		ret += "	<div class=\"title\">";
		ret += "		<h1>" + objArr.title + "</h1>";
		ret += "		<h2>" + objArr.abstract + "</h2>";
		ret += "	</div>";
		ret += "	<div class=\"Body\">";
		ret += "		" + objArr.body;
		ret += "	</div>";
		ret += "	<div class=\"Details\">";
		ret += "		<h2>Dettagli:</h2>";
		if (objArr.date != undefined) {
			ret += "		<p><span class=\"Field\">Data:</span> " + objArr.date + "</p>";
			ret += "		<p><span class=\"Field\">Dimensione:</span> " + objArr.sizeKbText + " Kb</p>"; //" (" + objArr.sizeByteText + " byte)</p>";
			ret += "		<p><span class=\"Field\">Formato:</span> " + objArr.format + "</p>";
			ret += "		<p><span class=\"Field\">Scaricato:</span> " + objArr.downloadCount + " volte</p>";
			ret += "		<p><span class=\"Field\">Scarica:</span> <a href=\"" + objArr.download + "\" title=\"Scarica &quot;" + objArr.fileName + "&quot;\">" + objArr.fileName + "</a></p>";
		} else {
			ret += "		<p>Impossibile aprire il file.</p>"
		}
		ret += "    </div>";
		ret += "</div>";
		
		return ret;
	},
	
	// Riempie il container con i risultati
	fillContainer : function(container, content) {
		//document.getElementById(container).innerHTML = content;
		var objContainer;
		if (canGetElement()) {
			objContainer = getElement(container);
			//if (this.xhr.readyState == 4) {
				objContainer.innerHTML = content + 
					"<a href=\"javascript:void(0)\" onclick=\"javascript:closeLightBox('detailLightBox', 'backgroundFade');\" class=\"CloseLabel\">Chiudi</a>";
			//} else {
			//	//In caricamento, non metto il pulsante di chiusura.
			//	objContainer.innerHTML = content;
			//}
		}
	},
	
	// Restituisce il contenuto adatto nel caso
	// la risposta sia vuota. Restituisce null se la risposta è valida
	getEmptyResponse : function() {
		var response = this.xhr.responseText;
		var retVal = null;
		if(response == this.NOTFOUND_RESPONSE) {
			var resp = "<p class=\"MessageHeader\">Elemento non trovato</p>";
			resp += "<p class=\"Message\">Spiacente, non &egrave; stato trovato nessun elemento corrispondente al valore ricercato.</p>";
			resp += "<p class=\"Message\">Si consiglia di ritentare utilizzando parole chiave pi&ugrave; generiche.</p>"

			retVal = resp;
		} else if(response == this.EMPTY_RESPONSE) {
			var resp = "<p class=\"MessageHeader\">Elemento non trovato</p>";
			resp += "<p class=\"Message\">L'elemento non &egrave; stato trovato.</p>";

			retVal = resp;
		} 
		
		return retVal;
	}
};
