// This code is developed by Guerrieri Luca                                                                #
// copyright (C) 2006/2007 lucaguerrieri@techrama.com
// This code is released under the terms of the GPL v.2 License.
//
// The author is not responsible for data loss, or any kind of trouble that
// results from the use of this software.
// USE IT AT YOUR OWN RISK!
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

	//  Identifichiamo l'elemento con ID
		function prendiElementoDaId(id_elemento) {
			var elemento;
			if(document.getElementById)
				elemento = document.getElementById(id_elemento);
			else
				elemento = document.all[id_elemento];
			return elemento; //restituiamo l'elemento trovato
		};

	// Assegnamo il giusto 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;
		};

	// Carichiamo il file da inserire,
	// resource	The resource that we want load
	// nameID	ID where we put the readed resource
	// type		type of load 'static' or 'dinamyc'

		function loadResource(resource, nameID, type) {
	       	var
		    // assegnazione oggetto XMLHttpRequest
		    ajax = assegnaXMLHttpRequest(),
		    // assegnazione elemento del documento
		    elemento = prendiElementoDaId(nameID),
		    //Messaggio di attesa

			// RICORDARSI DI AGGIUSTARE IL LINK

		    testoAttesa="<img src='./images/loading.gif'/> Un attimo prego ...",
		    // risultato booleano di funzione
		    usaLink = true;

  		    // se l'oggetto XMLHttpRequest non � nullo
			if(ajax) {
				usaLink = false;	// il link al file non deve essere usato
		    // impostazione richiesta asincrona in GET del file specificato

		    // RICORDARSI DI AGGIUSTARE IL LINK
				ajax.open("get",'http://www.forlex.it/pxaserver/libreria/collector.inc.php?resource='+resource+'&id='+nameID+'&type='+type, true);
		    // rimozione dell'header "connection" come "keep alive"
				ajax.setRequestHeader("connection", "close");
		    // impostazione controllo e stato della richiesta
				ajax.onreadystatechange = function() {
				elemento.innerHTML=testoAttesa;
		    // 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];
      					}
    				}
  			}
			ajax.send(null);	// invio richiesta
		}
		return usaLink;
		};


		function loadResourceParam(resource, nameID, type,params) {
	       	var
		    // assegnazione oggetto XMLHttpRequest
		    ajax = assegnaXMLHttpRequest(),
		    // assegnazione elemento del documento
		    elemento = prendiElementoDaId(nameID),
		    //Messaggio di attesa

			// RICORDARSI DI AGGIUSTARE IL LINK

		    testoAttesa="<img src='./images/loading.gif'/> Un attimo prego ...",
		    // risultato booleano di funzione
		    usaLink = true;

  		    // se l'oggetto XMLHttpRequest non � nullo
			if(ajax) {
				usaLink = false;	// il link al file non deve essere usato
		    // impostazione richiesta asincrona in GET del file specificato

		    // RICORDARSI DI AGGIUSTARE IL LINK
			    ajax.open("get",'http://www.forlex.it/pxaserver/libreria/collector.inc.php?resource='+resource+'&id='+nameID+'&type='+type+'&params='+params, true);
			  
		    // rimozione dell'header "connection" come "keep alive"
				ajax.setRequestHeader("connection", "close");
		    // impostazione controllo e stato della richiesta
				ajax.onreadystatechange = function() {
				elemento.innerHTML=testoAttesa;
		    // 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];
      					}
    				}
  			}
			ajax.send(null);	// invio richiesta
		}
		return usaLink;
		};

		function loadResourceHtml(resource, nameID, type) {
	       	var
		    // assegnazione oggetto XMLHttpRequest
		    ajax = assegnaXMLHttpRequest(),
		    // assegnazione elemento del documento
		    elemento = prendiElementoDaId(nameID),
		    //Messaggio di attesa

			// RICORDARSI DI AGGIUSTARE IL LINK

		    testoAttesa="<img src='./images/loading.gif'/> Un attimo prego ...",
		    // risultato booleano di funzione
		    usaLink = true;

  		    // se l'oggetto XMLHttpRequest non � nullo
			if(ajax) {
				usaLink = true;	// il link al file non deve essere usato
		    // impostazione richiesta asincrona in GET del file specificato

		    // RICORDARSI DI AGGIUSTARE IL LINK
			      ajax.open("get",'http://www.forlex.it/pxaserver/libreria/collector.inc.php?resource='+resource+'&id='+nameID+'&type='+type, true);
				
		    // rimozione dell'header "connection" come "keep alive"
				ajax.setRequestHeader("connection", "close");
		    // impostazione controllo e stato della richiesta
				ajax.onreadystatechange = function() {
				elemento.innerHTML=testoAttesa;
		    // 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];
      					}
    				}
  			}
			ajax.send(null);	// invio richiesta
		}
		return usaLink;
		};




	// funzione di caricamento testo tabMenu
		// Gestice le chiamate dai tab del menu
		// menuID : Identificativo del menu (id="" nel tag ul)
		// fileID : File da caricare in caso di selezione
		// nomeID : ID dell'area d'inserimento del file caricato
		// itemID : Identificativo del tab (quella selezionato, di norma this)
		function tabMenu(menuID, fileID, nomeID, itemID, tipo) {
			var testoAttesa="<img src='../images/loading.gif' /> Un attimo prego ...";
			this.onclick=function(){
			var elencoLI=document.getElementById(menuID).getElementsByTagName("li");

			for (var i=0; i<elencoLI.length; i++)
				elencoLI[i].className=""
				itemID.parentNode.className="active";
			};
			document.getElementById(nomeID).innerHTML=testoAttesa;
			loadResource(fileID,nomeID,tipo);
			// Funzione per ricordare il tab scelto
			//ricordaScelta(itemID,fileID);
		};
		//TODO : funzione per ricordare le scelta eseguita
		function ricordaScelta (activeTabID, fileID){
			setCookie(activeTabID, fileID);
		};
		//TODO : funzione per impostare  i Cookie in caso volessimo ricordare le scelta eseguita
		function setCookie(name, value){
			document.cookie = name+"="+value //cookie value is domain wide (path=/)
		}
		//TODO : funzione per leggere i Cookie in caso volessimo ricordare le scelta eseguita
		function getCookie(Name){
			var re=new RegExp(Name+"=[^;]+", "i"); //construct RE to search for target name/value pair
			if (document.cookie.match(re)) //if cookie found
				return document.cookie.match(re)[0].split("=")[1] //return its value
				return ""
		}
/** 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";

// Esempio di link

// <div id="identificativo" > </div>
// <a href=# onclick="return loadResource('link1','identificativo', 'static');" onkeypress="return this.onclick();" tabindex="1">link</a>
// <a href=# onclick="javascript: loadResource('link1','identificativo', 'static');" onkeypress="return this.onclick();" tabindex="1">link</a>
// <a href=# onclick="javascript: loadResourceParam('link1','identificativo', 'static','placeholder*data');" onkeypress="return this.onclick();" tabindex="1">link</a>