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

//VARIABIEL DOVE MEMORIZZO LA PAGINA CHE RICHIEDE IL JS
var root = null;
//*****************************************************

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

		function call_f(f,args)
		{
		  f.call_self = function(ars)
		  {
			var callstr = "";
			for(var i = 0; i < ars.length; i++)
			{
			  callstr += "ars["+i+"]";
			  if(i < ars.length - 1)
			  {
				callstr += ',';
			  }
			}
			eval("this("+callstr+")");
		  };
		
		  return f.call_self(args);
		};
		
		function caricaTesto(nomeFile, nomeDiv, fnzCallBack, fnzArg) 
		{	
		  // variabili di funzione
		  var
			// assegnazione oggetto XMLHttpRequest
			ajax = assegnaXMLHttpRequest(),
			// assegnazione elemento del documento
			elemento = prendiElementoDaId(nomeDiv),
			// risultato booleano di funzione
			usaLink = true;
			
			// se l'oggetto XMLHttpRequest non č nullo
		  if(ajax) {
			// il link al file non deve essere usato
			usaLink = false;
			
			//ajax.setRequestHeader("content-type", "text/html; charset=iso-8859-1");
		
			// impostazione richiesta asincrona in GET
			// del file specificato
			ajax.open("get", nomeFile, true);
			
			// 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) 
			  {
				//alert(statusText[ajax.status]);
				// verifica della risposta da parte del server
			   if(statusText[ajax.status] === "OK")
			   {   // operazione avvenuta con successo
				  /*var i= ajax.responseText.indexOf("<body>");
				  var j= ajax.responseText.indexOf("</body>");
				  
				  //alert(ajax.responseText+" "+i+" "+j);
  				  alert(i+" "+j);
				  
				  var tmpHtml = ajax.responseText.substring(i+6,j);*/
				  var tmpHtml = ajax.responseText;
				 
				 if (fnzCallBack != undefined && fnzCallBack != null)
				 {
					 call_f(fnzCallBack, fnzArg);
				 }
				elemento.innerHTML = tmpHtml;				 
			  }
				else {
					// errore di caricamento
				  elemento.innerHTML = "Impossibile effettuare l'operazione richiesta.<br />";
				  elemento.innerHTML += "Errore riscontrato: " + statusText[ajax.status];
				}
			  } 
		}
	
		// invio richiesta
		ajax.send(null);
		
	  }
	   
	  return usaLink;
	} 

/** 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";
		
		
		// funzione per leggere il contenuto presente
// all'interno di un nodo XML, ad esempio
// su <guida>ajax</guida> restituisce solo ajax
	function leggiContenuto(item, nomeNodo) 
	{
	  return item.getElementsByTagName(nomeNodo).item(0).firstChild.nodeValue;
	};
	
	function parsaXml(xml) {

			 // variabili di funzione
			 var
			
			  // Otteniamo la lista degli item dall'RSS 2.0 di edit
			  items = xml.getElementsByTagName("item"),
			
			  // la variabile di ritorno, in questo esempio, č testuale
			  risultato = "",
			
			  // questa variabile conterrā tutti gli item raggruppati
			  // per categoria
			  nodoItem = new Object(),
			
			  // questa variabile verrā utilizzata come stringa temporanea
			  // durante le operazioni di parsing
			  categoria;
			
			 // ciclo di lettura degli elementi
			 for(var a = 0, b = items.length; a < b; a++) {
			
			  // peculiaritā dell'RSS 2.0 di edit č la presenza del tag
			  // author per ogni item. Non presente invece negli item
			  // di feedburner ed in questo caso non viene considerato
			  if(items[a].getElementsByTagName("author").length === 1) {
			
			   // assegnamo la categoria alla stringa temporanea
			   categoria = leggiContenuto(items[a], "category");
			
			   // se l'oggetto nodoItem non ha ancora alcun elemento
			   // per la categoria appena letta
			   if(!nodoItem[categoria])
				 // si istanzia l'oggetto.categoria come nuovo array
				 nodoItem[categoria] = new Array();
			
			   // aggiunta di un item alla categoria assegnata
			   // [length al posto di push serve per evitare errori con vecchi browser]
			   nodoItem[categoria][nodoItem[categoria].length] = ({
				titolo: leggiContenuto(items[a], "title"),
				link: leggiContenuto(items[a], "guid"),
				data: leggiContenuto(items[a], "pubDate"),
				autore: leggiContenuto(items[a], "author")
			   });
			  };
			 };
			
			 // una volta popolato l'oggetto nodoItem con categorie
			 // ed una lista di post per ogni categoria
			 // non resta che popolare la variabile di ritorno
			 // con una lista non ordinata di informazioni
			 risultato = "<ul>";
			 for(categoria in nodoItem) {
			
			  // per ogni categoria si aggiunge un punto alla lista non ordinata
			  risultato += "<li><strong>" + categoria +
			"</strong><ul>";
			  // per ogni elemento dell'array si aggiungono
			  // le informazioni alla lista
			  for(var a = 0, b = nodoItem[categoria].length; a < b; a++) {
			
			   risultato +=
				"<li><a href=\"" +
				nodoItem[categoria][a].link +
				"\">" +
				nodoItem[categoria][a].titolo +
				"</a>, di " +
				nodoItem[categoria][a].autore +
				"<br /><span>" +
				nodoItem[categoria][a].data + "</span></li>";
			  };
			
			  // chiudiamo la lista creata
			  risultato += "</ul></li>";
			 };
			
			 // chiusura della lista non ordinata di categorie
			 risultato += "</ul>";
			
			 return risultato;
};

//FUNZIONE DA USARE E PERSONALIZZARE PER LEGGERE LE CIVETTE per la HOMEPAGE!!

function caricaTestoDiv(nomeFile, nomeDivTo, nomeDivFrom) {
	
  // variabili di funzione
  var
    // assegnazione oggetto XMLHttpRequest
    ajax = assegnaXMLHttpRequest(),
    // assegnazione elemento del documento
    elemento = prendiElementoDaId(nomeDivTo),
    // risultato booleano di funzione
    usaLink = true;
  // se l'oggetto XMLHttpRequest non č nullo
  if(ajax) {
    // il link al file non deve essere usato
    usaLink = false;
	
	//ajax.setRequestHeader("content-type", "text/html; charset=iso-8859-1");

	// impostazione richiesta asincrona in GET
    // del file specificato
    ajax.open("get", nomeFile, true);

    // 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
          var i= ajax.responseText.indexOf("<div id=\""+nomeDivFrom+"\">");
		  var j= ajax.responseText.indexOf("<!--"+nomeDivFrom+"-->");
		  
		  var tmpHtml = ajax.responseText.substring(i+12+nomeDivFrom.length ,j);
		  
		  //alert(leggiContenuto(ajax.responseXML));
		  elemento.innerHTML = tmpHtml;
		  return true;
		  
	  }
        else {
          // errore di caricamento
          elemento.innerHTML = "Impossibile effettuare l'operazione richiesta.<br/>";
          elemento.innerHTML += "Errore riscontrato: " + statusText[ajax.status];
        }
      } 
    }

    // invio richiesta
    ajax.send(null);
  }
   
  return usaLink;
} ;

function caricaTestoSenzaDiv(nomeFile) 
{
	// variabili di funzione
	var
	// assegnazione oggetto XMLHttpRequest
	ajax = assegnaXMLHttpRequest(),
	// risultato booleano di funzione
	usaLink = true;

	// se l'oggetto XMLHttpRequest non č nullo
	if(ajax)
	{
		// il link al file non deve essere usato
		usaLink = false;
		// impostazione richiesta sincrona in GET del file specificato
		ajax.open("get", nomeFile, false);
		// rimozione dell'header "connection" come "keep alive"
		ajax.setRequestHeader("connection", "close");
		
		// invio richiesta
		ajax.send(null);
		
		// 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")
				{  
					usaLink = true;
				}
			}
		}
	}
	return usaLink;
}

function caricamentoSincrono(nomeFile) 
{
	var cod = -1;
    // Otteniamo l'oggetto XMLHttpRequest
    var request = assegnaXMLHttpRequest()
    // Nel caso AJAX non sia supportato restituisce true, il che permette
    // di essere reindirizzati al file specificato nell'href, infatti il
    // valore restituito dall'evento onClick indica se ignorare href o
    // meno
    if (request == null) return true;
    // Predispone una richiesta di tipo GET a pagina#.txt sincrona (ultimo 
    // parametro false), ovvero arresta l'esecuzione fino al 
    // completamento dell'operazione
    request.open("GET", nomeFile, false);
    // Esegue l'operazione senza inviare alcun dato specifico
    request.send(null);
    
    // Se l'operazione ha avuto successo (codice HTTP 200) sostituisce
    // il contenuto del DIV "content" con il testo scaricato altrimenti
    // mostra codice e testo dell'errore
    if(request.status == 200) 
	{
        //cod = request.responseText;
		cod = request.responseXML;
			
    } else 
	{
        cod = -1;
    }
    return cod;
}

function ricercaAjax(nomeFile, params, login) 
{
  var ajax = assegnaXMLHttpRequest()
  if(ajax) 
  {
    ajax.open("POST", nomeFile, true);

    ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	ajax.setRequestHeader("Content-length", params.length);
	ajax.setRequestHeader("Connection", "close");

	// impostazione controllo e stato della richiesta
    ajax.onreadystatechange = function() 
	{//Call a function when the state changes.
		if(ajax.readyState == 4 && ajax.status == 200) 
		{
			document.getElementById('loading-results').style.display = 'none';
			document.getElementById('search-results').innerHTML=ajax.responseText;
			
			if(login!='login')
				document.location.href = root+'#result';
			trackingFiltri();
		}
	}
	ajax.send(params);
  }
}


function sendMyemailForm(id,form,home_site)
{
	var oggetto = document.getElementById('form'+id).oggetto.value;
	var messaggio = document.getElementById('form'+id).messaggio.value;
	var numero_carta = document.getElementById('form'+id).carta.value;
	var email = document.getElementById('form'+id).email.value;
	var trackingScrivici = document.getElementById('form'+id).trackingScrivici.value;
	
	var ajax = assegnaXMLHttpRequest();
	var parameters = "oggetto="+oggetto+"&messaggio="+messaggio+"&numero_carta="+escape(numero_carta)+"&email="+email+"&form="+form+"&fromFaq=true";  
	ajax.open("POST", home_site + "ergpiu/myemail/myEmail_functions.php", true);  

	//Send the proper header information along with the request  
	ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded");  
	ajax.setRequestHeader("Content-length", parameters .length);  
	ajax.setRequestHeader("Connection", "close");  
   
	ajax.onreadystatechange = function()
	{
    	if(ajax.readyState == 4) 
		{  
        	 if(ajax.responseText=='sent')
			 {
				/* 
				  TRACKING ADACTO 
				  tracciamento invio richiesta dal form FAQ MyEmail
				*/
				TrackingSezione(trackingScrivici,0,1);
				document.getElementById('feedback'+id).style.display = 'block';
				document.getElementById('faq'+id).style.display = 'none';
				document.getElementById('form'+id).reset();
			 }
    	}  
	}
	ajax.send(parameters);
}  

function loadingBar()
{
	var loader_bar = null;
	loader_bar=prendiElementoDaId('loader_bar');
	width=parseInt(loader_bar.style.width);
	loader_bar.style.width = (width+1) + 'px';
	if(width<=125)
		setTimeout("loadingBar()",300);
}


function html_entity_decode(str)
{
    try
	{
		var  tarea=document.createElement('textarea');
		tarea.innerHTML = str; return tarea.value;
		tarea.parentNode.removeChild(tarea);
	}
	catch(e)
	{
		//for IE add <div id="htmlconverter" style="display:none;"></div> to the page
		document.getElementById("htmlconverter").innerHTML = '<textarea id="innerConverter">' + str + '</textarea>';
		var content = document.getElementById("innerConverter").value;
		document.getElementById("htmlconverter").innerHTML = "";
		return content;
	}
}

function checkPromozioneCode(IdPromo, Codice, cardNumber, homeSite, sezioneToTrack)
{
	var ajax = assegnaXMLHttpRequest();
 	var nomeFile = homeSite + "ergpiu/promozioni/checkPromozioneCode.php";
	var params = "IdPromo=" + IdPromo + "&Codice=" + Codice + "&cardnumber=" + cardNumber ;
	$("#invia" + IdPromo).attr("disabled", true);
	if(ajax) 
  	{
    	ajax.open("POST", nomeFile, true);
    	ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		ajax.setRequestHeader("Content-length", params.length);
		ajax.setRequestHeader("Connection", "close");

		ajax.onreadystatechange = function() 
		{
			if(ajax.readyState == 4 && ajax.status == 200) 
			{
			
				if(ajax.responseText == 'OK')
				{	
					/*
						il tracking della validazione andata a buon fine viene fatta nella pagina di feedback 
						per non rischiare di lasciare la pagina prima che il tracciamento sia finito
					*/
					document.getElementById('promoForm' + IdPromo).submit();	
				}
				else
				{				
					if(sezioneToTrack != 'undefined' && sezioneToTrack != undefined)
						TrackingSezione(sezioneToTrack + "Validazione fallita|" + html_entity_decode(ajax.responseText)+ "|", 0, 1);
					$("#invia" + IdPromo).attr("disabled", false);
					$("body").append("<div id='popup-alert' style='height:" + $(document).height()+ "px'></div>");
					$("body").append('<div id="alert-promo" style="top:'+( ($(window).height()*0.5) + $(document).scrollTop() )+ '"><img src="'+homeSite+'images/erg-piu-failed.jpg" border="0" usemap="#Map" /><map name="Map" id="Map"><area shape="rect" coords="259,7,303,25" href="javascript:restorePaginaPromo();" /></map><div style="height:15px;"></div><div class="promo-alertText"><b>Attenzione!<br /></b>'+ajax.responseText+'</div></div>');
				}
			}
		}
		ajax.send(params);
  	}
}

function restorePaginaPromo()
{
	$("#popup-alert").remove();
	$("#alert-promo").remove();
}

function trackingClickPromozioni(homeSite, IdPromo, href, cardnumber)
{
	var ajax = assegnaXMLHttpRequest();
 	var nomeFile = homeSite + "tracking/tracking-click-promozioni.php";
	var params = "IdPromo=" + IdPromo + "&link=" + href + "&cardnumber=" + cardnumber;

	if(ajax) 
  	{
    	ajax.open("POST", nomeFile, true);
    	ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		ajax.setRequestHeader("Content-length", params.length);
		ajax.setRequestHeader("Connection", "close");
		ajax.onreadystatechange = function() 
		{
		
		
		}
		ajax.send(params);
	}
}
