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;
var parametro;
var divHidden;
var divNascosto;

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,divHidden) {
	
	datoSearch = parametro;
	url = urlAction;
	//alert(url);
	divInner = div;
	metodoRichiesta = metodo;
	divNascosto=divHidden;
	
	
	if(loading == true){
	div = document.getElementById(divInner);
	div.innerHTML = "Loading...";
	time = window.setTimeout('sendData()',6000);
	} 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();
	data_url = data_url+this.datoSearch;
	httpRequest(metodoRichiesta,url,true,handleResponse,data_url);
	//alert(data_url);
	
}


//gestore d'eventi per XMLHttpRequest
function handleResponse(){
 
 	if(request.readyState != 4){
 	
 		if(divNascosto != null){
				document.getElementById(divNascosto).style.visibility="visible";
		} 
 		div = document.getElementById(divInner);
 		div.innerHTML="<img src='img/dc_preloader.gif'>";
 	}	
 
	if(request.readyState == 4){
		
		if(request.status == 404){
			alert("URL ERRATO!!!")
		} else 	if(request.status == 200){
			if(divNascosto != null){
				document.getElementById(divNascosto).style.visibility="visible";			
			}
			div = document.getElementById(divInner);
			div.innerHTML = request.responseText;
			//alert(request.responseText);
		}else {
			alert(request.status);
			alert("Si e' verificato 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 e' in grado di contattare il server.\n"+errv.message);	
	}
	
}