/** (C) HTML.IT - insieme di funzioni ed oggetti utili per interagire con ajax */

// carica un testo esterno e lo mette in 'elemento'

function caricaTesto(nomeFile,element) {
  var
    ajax = assegnaXMLHttpRequest(),
    elemento = prendiElementoDaId(element),
    usaLink = true;
  
  if(ajax) {
    usaLink = false;
    ajax.open("get", noCache(nomeFile), true);
    ajax.setRequestHeader("connection", "close");
    ajax.setRequestHeader("Cache-Control", "no-store, no-cache, must-revalidate");
    ajax.setRequestHeader("Pragma", "no-cache");    
    ajax.onreadystatechange = function() {
      if(ajax.readyState === readyState.COMPLETATO) {
        if(statusText[ajax.status] === "OK")
          elemento.innerHTML = ajax.responseText;
        else {
          elemento.innerHTML = "Impossibile effettuare l'operazione richiesta.<br />";
          elemento.innerHTML += "Errore riscontrato: " + statusText[ajax.status];
        }
      } 
    }
    ajax.send(null);
  }
  //window.scrollTo(0,170);
  if (!isInView(elemento)) window.scrollTo(0,170);//elemento.scrollIntoView();
  
  return usaLink;
} 

/*uguale a Caricatesto ma non scolla element*/
function caricaTestoNoScroll(nomeFile,element) {
  var
    ajax = assegnaXMLHttpRequest(),
    elemento = prendiElementoDaId(element),
    usaLink = true;
  
  if(ajax) {
    usaLink = false;
    ajax.open("get", noCache(nomeFile), true);
    ajax.setRequestHeader("connection", "close");
    ajax.setRequestHeader("Cache-Control", "no-store, no-cache, must-revalidate");
    ajax.setRequestHeader("Pragma", "no-cache");    
    ajax.onreadystatechange = function() {
      if(ajax.readyState === readyState.COMPLETATO) {
        if(statusText[ajax.status] === "OK")
          elemento.innerHTML = ajax.responseText;
        else {
          elemento.innerHTML = "Impossibile effettuare l'operazione richiesta.<br />";
          elemento.innerHTML += "Errore riscontrato: " + statusText[ajax.status];
        }
      } 
    }
    ajax.send(null);
  }
  return usaLink;
} 


/* trova la posizione left e top dell'oggetto */
function findPos(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}
	
	objpos={"left":curleft,"top":curtop};
	return (objpos);
}


/* ritorna true se l'oggetto è visibile */
function isInView(oObject)
{
    var objpos=findPos(oObject);
    return (objpos["top"]>document.documentElement.scrollTop)  
}



function noCache(uri){return uri.concat(/\?/.test(uri)?"&":"?","noCache=",(new Date).getTime(),".",Math.random()*1234567)};


/** 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;
		}

	// funzione per crea un layer volante e carica del contenuto al suo interno
		function showbox(nomeFile,newelement) {
		  	bod = document.getElementsByTagName('body')[0];
	      ne = document.createElement('div');
	      ne.id	= newelement;
	      ne.className = 'floatbox' ;
	      ne.style.border = '2px #BAC2C4 solid';
        ne.style.background = '#F6F6F6';
        ne.style.zIndex = '2000';        
        ne.style.position = "absolute";
        ne.style.marginLeft = 'auto';
        ne.style.marginRight = 'auto';
        ne.style.width = '379px';        
        ne.style.top = '100px';
        coords=centerEl(379,300);                                        
        ne.style.left = coords[1]+'px';        
        ne.style.textAlign = 'left';
        ne.style.padding = '3px';        
	      /*ne.innerHTML = '<div id="lbLoadMessage">'+'<p>Loading</p>'+'</div>';*/
	      overlay('blackpanel');
		    bod.appendChild(ne);		                     
        status = caricaTesto(nomeFile,newelement);
        /*alert(status);*/	        
        return status;
		}
		

		
		// Mostra/nasconde un elemento
		function togglewin(element) {
        elemento = prendiElementoDaId(element);
        if (elemento.style.display != "none")
            elemento.style.display = "none";
        else elemento.style.display = "inline";                         
    }

    // data lunghezza e altezza trova le coordinate per centrare un elemento nel browser 
    // coords[1]: left; coords[2]: top
    function centerEl(w,h){
      coords= new Array();
      coords[1] = Math.round ((screen.width - w) / 2);
      coords[2] = Math.round ((screen.height - h) / 2);
      return coords;
    }
    
		function overlay(newelement) {
		  	bod = document.getElementsByTagName('body')[0];
	      nl = document.createElement('div');
	      nl.id	= newelement;
	      nl.className = 'overlay' ;
        nl.style.background = '#000';
        nl.style.display = 'block';        
        nl.style.zIndex = '1000';        
        nl.style.position = "absolute";       
        nl.style.width = '100%';        
        nl.style.height = '800px';        
        nl.style.top = '0';                                        
        nl.style.left = '0';               
      	nl.style.mozOpacity="0.5";
      	nl.style.opacity=".50";
      	nl.style.filter= "alpha(opacity=50)";    
		    bod.appendChild(nl);		                     
		}    



/** 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";
