// Creazione dell'oggetto XMLHttpRequest
function getAjaxObject() {
	var req;

	if (window.XMLHttpRequest) {   		// Firefox, Safari, Opera
		req = new XMLHttpRequest();
		}
	else if (window.ActiveXObject) {		// IE 6+
		req = new ActiveXObject("Msxml2.XMLHTTP");
		} 
	else if (window.ActiveXObject) {   	// IE 5
		req = new ActiveXObject("Microsoft.XMLHTTP");
		}
	return (req);
	}
	
var ajaxReq = getAjaxObject();

// Handler di risposta
function displayAjaxResponse() {
	if (ajaxReq.readyState == 4) {
	  if (ajaxReq.status == 200) {
		var response = ajaxReq.responseText;
            if (response) {
				document.getElementById("feedback").innerHTML = response;
				}
			}
	  else {
			document.getElementById("feedback").innerHTML = "<strong class=\"red\">Server response: Error "+ajaxReq.status+" - Si sono verificati dei problemi.</strong>";
			}
		}
	else {
		attesa="<img src=\"./images/wait16trans.gif\" alt=\"...\" /> Trasferimento dati in corso...";
		document.getElementById("feedback").innerHTML = attesa;
		}
	}

// Handler per risposte ausiliarie
function display2ndAjaxResponse() {
	if (ajaxReq.readyState == 4) {
	  if (ajaxReq.status == 200) {
		var response = ajaxReq.responseText;
            if (response) {
                  document.getElementById("feedback2").innerHTML = response;
			}
		}
	  else {
		document.getElementById("feedback2").innerHTML = "<strong class=\"red\">Server response: Error "+ajaxReq.status+" - Si sono verificati dei problemi.</strong>";
		}
	  }
	else {
		attesa="<img src=\"./images/wait16trans.gif\" alt=\"...\" /> Trasferimento dati in corso...";
		document.getElementById("feedback2").innerHTML = attesa;
		}
	}

// Handler di risposta generico
function updateWithAjaxResponse(target) {
	targetEl = document.getElementById(target);
	if (ajaxReq.readyState == 4) {
	  if (ajaxReq.status == 200) {
		var response = ajaxReq.responseText;
            if (response) {
                  targetEl.innerHTML = response;
			}
		}
	  else {
			targetEl.innerHTML = "<strong class=\"red\">Server response: Error "+ajaxReq.status+" - Si sono verificati dei problemi.</strong>";
		}
	  }
	else {
		attesa="<img src=\"./images/wait16trans.gif\" alt=\"...\" /> Trasferimento dati in corso...";
		targetEl.innerHTML = attesa;
		}
	}

// Codifica dei parametri per il metodo POST - VERSIONE COMPLETA
function getPostParam(formId) {
  var param = "";
  var primo = true;
  var form = document.forms[formId];
  var numeroElementi = form.elements.length;
  var j=0;

  for (var i = 0; i < numeroElementi; i++) {
    if (form.elements[i].type == "radio") {
        var scelte = form.elements[i];
 //       for (j=0; j< scelte.length; j++) {
            if (scelte.checked) {
 				if (primo == false) param += "&";
				else primo = false; 
				param +=form.elements[i].name+"="+encodeURIComponent(scelte.value);
				}
 //         }
        }
    else if (form.elements[i].type!="checkbox" && form.elements[i].type !="select-multiple") {
		if (primo == false) param += "&";
		else primo = false; 

		param +=form.elements[i].name+"="+encodeURIComponent(form.elements[i].value);
        }
	else if (form.elements[i].type=="select-multiple") {
		numeroScelte=form.elements[i].options.length;
		for (j=0; j<numeroScelte; j++) {
			if (form.elements[i].options[j].selected) {
				if (primo == false) param += "&";
				else primo = false; 

				param +=form.elements[i].name+"="+encodeURIComponent(form.elements[i].options[j].value);
				}
			}
		}
	else if (form.elements[i].checked) {
		if (primo == false) param += "&";
		else primo = false; 

		param +=form.elements[i].name+"="+encodeURIComponent(form.elements[i].value);
        }
  	}

   return (param)
}

// Chiamata AJAX principale per il metodo GET
function sendGetRequest(url,param) {
	var el = document.getElementById(param);
	var reqUrl = url+"?"+param+"="+ el.value;
	ajaxReq.onreadystatechange = displayAjaxResponse;
	ajaxReq.open("GET",reqUrl,true);
	ajaxReq.send(null);
	}

// Chiamata AJAX diretta per il metodo GET
function sendDirectGetRequest(url,param,value) {
	var reqUrl = url+"?"+param+"="+ value;
	ajaxReq.onreadystatechange = displayAjaxResponse;
	ajaxReq.open("GET",reqUrl,true);
	ajaxReq.send(null);
	}

// Chiamata AJAX principale per il metodo POST
function sendPostRequest(reqUrl,formId) {
	paramList = getPostParam(formId);
	ajaxReq.onreadystatechange = displayAjaxResponse;
	ajaxReq.open("POST",reqUrl,true);
	ajaxReq.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	ajaxReq.setRequestHeader("Content-length", paramList.length);
	ajaxReq.setRequestHeader("Connection", "close");	
	ajaxReq.send(paramList);
	}

// Chiamata AJAX ausiliaria per il metodo GET
function send2ndGetRequest(url,param) {
	var el = document.getElementById(param);
	var reqUrl = url+"?"+param+"="+ el.value;
	ajaxReq.onreadystatechange = display2ndAjaxResponse;
	ajaxReq.open("GET",reqUrl,true);
	ajaxReq.send(null);
	}

// Chiamata AJAX ausiliaria per il metodo POST
function send2ndPostRequest(reqUrl,formId) {
	paramList = getPostParam(formId);
	ajaxReq.onreadystatechange = display2ndAjaxResponse;
	ajaxReq.open("POST",reqUrl,true);
	ajaxReq.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	ajaxReq.setRequestHeader("Content-length", paramList.length);
	ajaxReq.setRequestHeader("Connection", "close");	
	ajaxReq.send(paramList);
	}

// Chiamata AJAX principale per le liste aggiungi-togli
function addRemoveItem(reqUrl,formId,target) {
	paramList = getPostParam(formId);
	ajaxReq.onreadystatechange = function() { updateWithAjaxResponse(target); };
	ajaxReq.open("POST",reqUrl,true);
	ajaxReq.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	ajaxReq.setRequestHeader("Content-length", paramList.length);
	ajaxReq.setRequestHeader("Connection", "close");	
	ajaxReq.send(paramList);
	}

// Annullamento operazioni
function cancelOp() {
	document.getElementById("feedback").innerHTML = "&nbsp;";
	if (document.getElementById("feedback2")) document.getElementById("feedback2").innerHTML = "&nbsp;";
	}

function cancel2ndOp() {
	document.getElementById("feedback2").innerHTML = "&nbsp;";
	}

// Annullamento generico
function clearTarget(target) {
	el=document.getElementById(target);
	el.innerHTML = "&nbsp;";
	}
