var myRequest = null;

function getElement(id) {
 var elemento;
 
 // se esiste il metodo getElementById
 // questo if sarà diverso da false, null o undefined
 // e sarà quindi considerato valido, come un true
 if(document.getElementById)
  elemento = document.getElementById(id);
 
 // altrimenti è necessario usare un vecchio sistema
 else
  elemento = document.all[id];

 // restituzione elemento
 return elemento;
}

// funzione per assegnare l'oggetto XMLHttpRequest
// compatibile con i browsers più recenti e diffusi
/*
function creaXMLHttpRequest(responseFunction){
	var ajax = null;
	try {
		ajax = new XMLHttpRequest();
	} catch(err) {
		try {
			ajax = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (err) {
			ajax = new ActiveXObject("Microsoft.XMLHTTP");
		}
	}
	ajax.onreadystatechange = responseFunction;
	return ajax;
} 
*/
function creaXMLHttpRequest(responseFunction){
	var ajax = null;
  ajax = assegnaXMLHttpRequest();
	ajax.onreadystatechange = responseFunction;
	return ajax;
} 
function assegnaXMLHttpRequest() {
var XHR = null,
    browserUtente = navigator.userAgent.toUpperCase();
 
 // browser standard con supporto nativo
 // non importa il tipo di browser
 if(typeof(XMLHttpRequest) === "function" || typeof(XMLHttpRequest) === "object") XHR = new XMLHttpRequest();
 
 // browser Internet Explorer
 // è necessario filtrare la versione 4
 else if(window.ActiveXObject && browserUtente.indexOf("MSIE 4") < 0) {
    // la versione 6 di IE ha un nome differente
    // per il tipo di oggetto ActiveX
    if(browserUtente.indexOf("MSIE 5") < 0) XHR = new ActiveXObject("Msxml2.XMLHTTP");

    // le versioni 5 e 5.5 invece sfruttano lo stesso nome
    else XHR = new ActiveXObject("Microsoft.XMLHTTP");
 }
 return XHR;
} 
function getResponse(){
	if(myRequest.readyState == 4 && myRequest.status == 200){
		//alert("OK --- state= " + myRequest.readyState + " status " + myRequest.status)
    //alert(myRequest.responseText);
		return myRequest.responseText;
	} else {
		//alert("NO --- state= " + myRequest.readyState + " status " + myRequest.status)
		//if(myRequest.responseText) showError(myRequest.responseText);
		return false;
	}
}
function getParams(){
	frm = document.forms[0];
	numElements = frm.elements.length
	params = "";
	for(i=0; i < numElements; i++){
		if(frm.elements[i].type == 'checkbox' && frm.elements[i].checked == false) continue;
		params += frm.elements[i].name + "=" + encodeURIComponent(frm.elements[i].value);
		if(i < numElements - 1) params += "&";
	}
	return params;
}

function ajaxPost(serverProgram, responseFunction){
	var args = new Array("content");
	for(i=2; i<arguments.length; i++){
		args[args.length] = arguments[i];
	}
	var handler = function() {
		var content = getResponse();
		if(content != false){
			args[0] = content;
			return responseFunction.apply(this, args);
		}
	}
	myRequest = creaXMLHttpRequest(handler);
	myRequest.open("POST", serverProgram, true);
	myRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	myRequest.send(getParams());
}

function ajaxGet(serverProgram, responseFunction){
	var args = new Array("content");
	
	for(i=2; i<arguments.length; i++){
		args[args.length] = arguments[i];
	}
	var handler = function() {
		var content = getResponse();
		if(content != false){
			args[0] = content;
			return responseFunction.apply(this, args);
		}
	}
	myRequest = creaXMLHttpRequest(handler);
	myRequest.open("GET", serverProgram, true);
  myRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");  
	myRequest.send(null);
}