/** (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;
		};


var contatorediv=0;

function createDiv(tagparent,divid,divclass) 
{ 
	var divTag = document.createElement("div"); 
	
	divTag.id = divid; 
	divTag.className =divclass;
	divTag.innerHTML="loading";  
	prendiElementoDaId(tagparent).appendChild(divTag); 
} 



	
function IsNotUneven(numero)
{
    if (isNaN(numero) == false){ return (numero %2 == 1 ?  true : false);} else {return null;}
}

function expand() {	
	for (var i=0; i<expand.arguments.length; i++) {		
		var element = document.getElementById(expand.arguments[i]);		
		element.style.display ="block";	
		}
}
function Collapse() {	
	for (var i=0; i<Collapse.arguments.length; i++) {		
		var element = document.getElementById(Collapse.arguments[i]);		
		element.style.display ="none";
		//element.setAttribute( 'style', 'display:none' );
		}
}


function openClose() {	
	for (var i=0; i<openClose.arguments.length; i++) {		
		var element = prendiElementoDaId(openClose.arguments[i]);
		element.style.display = (element.style.display == "none") ? "block" : "none";	
		}
}

function muovi_apri(current,fine,e){
		if (current<(fine)) {
			current+=10;
			prendiElementoDaId(e).style.height=current+'px';
			setTimeout('muovi_apri('+current+','+fine+',\''+e+'\')',1); 
		}else {
			prendiElementoDaId(e).style.height=fine+'px';
		}
	}
	
function muovi_chiudi(current,e){
		if (current>0) {
			current-=10;
			prendiElementoDaId(e).style.height=((current>0)?(current):(0))+'px';
			setTimeout('muovi_chiudi('+current+',\''+e+'\')',1); 
		}else {
			//alert(e);
			//prendiElementoDaId(e).style.height='0px';
			prendiElementoDaId(e).style.visibility="hidden";
		}
	}
	
function openClose_slow() {	
	
	
	for (var i=0; i<openClose_slow.arguments.length; i++) {		
		var element = prendiElementoDaId(openClose_slow.arguments[i]);
		//alert(element.altezza);
		if (element.getAttribute('altezza')==undefined){
			element.setAttribute('altezza',element.offsetHeight);
			element.style.position='relative';
			}
			//alert(element.getAttribute('altezza'));
		if (element.style.visibility=='visible'){
			muovi_chiudi(element.offsetHeight,openClose_slow.arguments[i]);
		}else{
			
			muovi_apri(0,element.getAttribute('altezza'),openClose_slow.arguments[i]);
			element.style.visibility ="visible";
		}
	}
}


function loader(f){
	var element = prendiElementoDaId(f);
	element.innerHTML="<img src='../immagini/ajax-loader.gif' >";
	}




function Viewport(){ 
	this.windowX = (document.documentElement && document.documentElement.clientWidth) || window.innerWidth || self.innerWidth || document.body.clientWidth;
	this.windowY = (document.documentElement && document.documentElement.clientHeight) || window.innerHeight || self.innerHeight || document.body.clientHeight;
	this.scrollX = (document.documentElement && document.documentElement.scrollLeft) || window.pageXOffset || self.pageXOffset || document.body.scrollLeft;
	this.scrollY = (document.documentElement && document.documentElement.scrollTop) || window.pageYOffset || self.pageYOffset || document.body.scrollTop;
	this.pageX = (document.documentElement && document.documentElement.scrollWidth) ? document.documentElement.scrollWidth : (document.body.scrollWidth > document.body.offsetWidth) ? document.body.scrollWidth : document.body.offsetWidth;
	this.pageY = (document.documentElement && document.documentElement.scrollHeight) ? document.documentElement.scrollHeight : (document.body.scrollHeight > document.body.offsetHeight) ? document.body.scrollHeight : document.body.offsetHeight;
	return this.pageY;
}



	
	// 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;
		};





/** 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";
	
function caricaTesto(nomediv,nomeFile) {

  // variabili di funzione
  var
    // assegnazione oggetto XMLHttpRequest
    ajax = assegnaXMLHttpRequest(),
    // assegnazione elemento del documento
    elemento = prendiElementoDaId(nomediv),
    // risultato booleano di funzione
    usaLink = true;
   //stringa dei parametri GET
    string_var ="";
	
  // 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

	for (var i=3; i<caricaTesto.arguments.length; i++) {		
		if (IsNotUneven(i) == false){ string_var=string_var+caricaTesto.arguments[i]+"&"; } else { string_var=string_var+caricaTesto.arguments[i]+"="; }
		//alert(string_var);
	}
	
switch (caricaTesto.arguments[2]){

	case 'get':{
		ajax.open(caricaTesto.arguments[2], nomeFile+'?'+string_var, true);			
	break;}
	case 'post':{
		ajax.open(caricaTesto.arguments[2], nomeFile, true);
		ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		ajax.setRequestHeader("Content-length", string_var.length );
	break;}
	}



	// 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;
		  ajaxEvalJS(elemento.id);
		  
		}else {
          // errore di caricamento
          elemento.innerHTML = "Impossibile effettuare l'operazione richiesta.<br />";
          elemento.innerHTML += "Errore riscontrato: " + statusText[ajax.status];
        }
      } 
    }

    // invio richiesta

switch (caricaTesto.arguments[2]){

	case 'get':{
   			ajax.send(null);	
	break;}
	case 'post':{
			ajax.send(string_var);
	break;}
	}


 
  }
   
  return usaLink;
}

ajaxEvalJS = function(elementId) {
	var scripts = document.getElementById(elementId).getElementsByTagName('script');
	var code;
	for (var i = 0; i < scripts.length; i++) {
		code =	scripts[i].innerHTML ? scripts[i].innerHTML : 
			scripts[i].text ? scripts[i].text : 
			scripts[i].textContent;
		try {
			eval(code);
		} catch(e) {
			alert(e);
		}
	}
}


function confermaElimina(nomefile,nomeid,id,testo,riconferma)
{
action=confirm(testo);
if ((riconferma)&&(action==true)){ action2=confirm('Sicuro di voler continuare?'); }else {action2=true;}
if ((action==true)&&(action2==true)) parent.self.location.href = nomefile+"?"+nomeid+"="+id;
}

function trim(str)
{
   return str.replace(/^\s*|\s*$/g,"");
   
}

function echeck(str) {

		var at="@"
		var dot="."
		var lat=str.indexOf(at)
		var lstr=str.length
		var ldot=str.indexOf(dot)
		if (str.indexOf(at)==-1){return false}
		if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr){return false}
		if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==lstr){return false}
		if (str.indexOf(at,(lat+1))!=-1){return false }
		if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot){return false }
		if (str.indexOf(dot,(lat+2))==-1){return false }
		if (str.indexOf(" ")!=-1){return false}
 		return true					
	}
