var request = null;
/*Funzione che ingloba la costruzione dell'oggetto request
Parametri:
reqType : il tipo di richiesta HTTP per esempio GET o POST.
url: l'URL del programma lato server.
asynch : segnala se inviare la richiesta in modo asincrono o meno.
resphandle: il nome della funzione per la gestione della risposta.
Eventuali altri parametri , rappresentati da arguments[4], sono dati da inviare nel caso di
richiesta POST.
*/

var queryString; //conterrą i dati da inviare a post
var time;
var conteggio = 0;
var datoSearch;
var urlAction;
var divInner;
var metodoRichiesta;
var data_url;


function httpRequest(reqType,url,bool,respHandle,data_url){
	//browser basati su Mozilla
	if(window.XMLHttpRequest){
		request = new XMLHttpRequest();
	}else if(window.ActiveXObject){
		request = new ActiveXobject("Msxml2.XMLHTTP");
		if(! request){
			request = new ActiveXObject("Microsoft.XMLHTTP");
		}
	}
	if(request) {
		//se il parametro reqType e POST,allora
		//il quintoargomento della funzionew contiene i dati da inviare
		if(reqType.toLowerCase() != "post"){
			initReq(reqType,url,bool,respHandle);
		}else {
			//i dati da inviare in POST
			var args = arguments[4];
			if(args != null && args.length >0){
				initReq(reqType,url,bool,respHandle,args);	
			}
		
		}
	} else {
		alert("Il borwser utilizzato non permette di usare tutte le funzionalitą di questa applicazione ")	
	}
	
}//kiude funzione

function setQueryString(){
	queryString ="";
	var frm = document.forms[0];
	var numberElements = frm.elements.length;
	for(var i = 0; i < numberElements;i++){
	if(i < numberElements-1){
		queryString += frm.elements[i].name+"="+encodeURIComponent(frm.elements[i].value)+"&";
		
	}else {
		queryString += frm.elements[i].name+"="+encodeURIComponent(frm.elements[i].value);
	}
		
	}
	return queryString;
}


function elaborazione(parametro,urlAction,div,metodo,loading) {
	
	datoSearch = parametro;
	url = urlAction;
	divInner = div;
	metodoRichiesta = metodo;
	
	if(loading == true){
	div = document.getElementById(divInner);
	div.innerHTML = "Loading...<br><img src='images/loading.gif'>";
	time = window.setTimeout('sendData()',0000);
	} else {
	
		sendData();
	
	}
}


function sendData(datoSearch){
	
	window.clearTimeout(time);
	
	setQueryString();
	
	if(metodoRichiesta.toLowerCase() != 'post'){
		url = url+this.datoSearch;
	}
	//se la richiesta e POST dentro data_url ci sono tutti i valori dei campi inviati dal form!!
	data_url = setQueryString();
	httpRequest(metodoRichiesta,url,true,handleResponse,data_url);
	
	
}


//gestore d'eventi per XMLHttpRequest
function handleResponse(){
	
	if(request.readyState == 4){
		
		if(request.status == 404){
			alert("URL ERRATO!!!")
		} else 	if(request.status == 200){
			//qui mettereo l'animazione prima della fine dell'elaborazione
			//alert(request.responseText);
			div = document.getElementById(divInner);
			div.innerHTML = request.responseText;
		}else {
			alert(request.status);
			alert("Si č verifica un problema generico!!!");	
		}	
	}	
	
}

/*inizializziamo un oggetto request gią instanziato*/
 function initReq(reqType,url,bool,respHandle){
	try{
		/*Specifica la funzione per la gestione della risposta HTTP*/
		request.onreadystatechange=respHandle;
		request.open(reqType,url,bool);
		//se reqType č POST,allora il quinto argomento
		//passato alla funzione contiene i dati da inviare
		if(reqType.toLowerCase() == "post"){
			request.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=UTF-8");
			request.send(arguments[4]);
		}else {
			request.send(null);
		}
	} catch (errv) {
		
		alert("L'applicazione non č in grado di contattare il server.\n"+errv.message);	
	}
	
}