/***********************************************************

Tramite questo insieme di variabili e funzioni, si possono
utilizzare le funzionalitą di AJAX in maniera efficente e
senza un eccessivo uso di codice!

***********************************************************/

var jsXML = new Object();

jsXML.getXMLHttpRequest = function() {
    if(typeof(XMLHttpRequest)!='undefined'){
        return new XMLHttpRequest();
    }
    else
    {
        return new ActiveXObject("Msxml2.XMLHTTP")
    }
}

jsXML.setPost = function(req) {
    req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
}

jsXML.sendSync = function(url, body) {
    var req = this.getXMLHttpRequest();
    method=(arguments[2])?arguments[2]:"POST";
    req.open(method, url, false);
    if(method=="POST") jsXML.setPost(req);
    req.send(body);
    return req.responseText;
}

jsXML.sendAsync = function(method, url, body, action, onfault, onwait){
    var req = this.getXMLHttpRequest();
    var onreadystate = function(){
        if(req.readyState==4){
            try{
                if(req.status&&req.status==200) {
					// il server ha risposto: resetto il timeout!
					clearTimeout(timeoutId);
                    if(action!=null) action(req.responseText, req);
                } else {
                    if(onfault!=null) onfault(req.statusText);
                }
            } catch(e){}
        } else {
            if(onwait!=null) onwait(req.readyState);
        }
    }
    req.onreadystatechange = onreadystate;
    req.open(method, url, true);
    if(method=="POST") jsXML.setPost(req);
    if(body==null) body='';
	// setto un timeout per la scadenza della richiesta!
	timeoutId = setTimeout(timesUp,10000); // 10 secondi di timeout!!!
    req.send(body);

	//funzione di gestione del timeout:
	function timesUp() {
		req.abort();
		onfault("Request Timeout");
	}

}

/***********************************************************

Per effettuare una richiesta sincrona:

var response=jsXML.sendSync("myServerPage.xnl", "par1=abc&par2=1", "POST");

------------------------------------------------------------

Per effettuare una richiesta asincrona:

//callback per la risposta positiva
function responseSuccess(responseText) {
    //fai qualcosa col responseText
}

//callback per l'errore
function responseError(errorMessage) {
    //fai qualcosa con ErrorMessage
}

//callback per l'attesa
function responseWaiting(readyState) {
    //sta caricando...
}

jsXML.sendAsync("POST", "myServerPage.xml", "par1=abc&par2=1", responseSuccess, responseError, responseWaiting);


***********************************************************/
