var usingAJAX = false;
var AJAX_error = "", function_to_call = null;
var action = "";
var objAJAX;

function NEW_XMLHTTP()
{
  if (window.XMLHttpRequest)
    return new XMLHttpRequest();
  else
  {
	if (window.ActiveXObject)
    	return new ActiveXObject("Microsoft.XMLHTTP");
    else
		alert("Non posso inizializzare AJAX");
  }
}

// getpost indica se richiamare il metodo GET o quello POST
// url     indica la url da richiamare
// action  il parametro action della querystring
// params  altri parametri
function goAJAX(getpost, str_url, str_action, str_params, fToCall)
{
  getpost = getpost.toUpperCase();
  
  if (getpost != "GET" && getpost != "POST")
  {
    alert("Richiamata la funzione goAJAX con un metodo diverso da GET/POST (metodo: " + getpost + ")");
    return false;
  }
  
  // Se AJAX è in uso, dico di aspettare 500ms e poi riprovo
  if (usingAJAX)
  {
    var strFunction = "goAJAX('" + getpost + "', '" + str_url + "', '" + str_action + "', '" + str_params + "')";
    setTimeout(strFunction, 500);
    return;
  }
  
  /* Se non esiste l'oggetto objAJAX tento di crearlo */
  if (objAJAX == null) objAJAX = NEW_XMLHTTP();
  /* Se non ci son riuscito, esco (tanto l'avviso d'errore di creazione lo dà la funzione NEW_XMLHTTP()) */
  if (!objAJAX) return;

  usingAJAX = true;
  AJAX_error = "";
  action = str_action;
  function_to_call = fToCall;
  
  var strQUERYSTRING = "";
  if (str_action != "")
    strQUERYSTRING = "action="+str_action;
  if (str_params != "")
    strQUERYSTRING += (strQUERYSTRING != "" ? "&" : "") + str_params;
  
  objAJAX.open(getpost, str_url + (getpost == "GET" ? "?"+strQUERYSTRING : ""), true);
  objAJAX.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  objAJAX.onreadystatechange = AJAX_listener;
  objAJAX.send(getpost == "POST" ? strQUERYSTRING : null);
}

function AJAX_listener()
{
  if (objAJAX.readyState == 4)
  {
    var strErrore = "";
    
    if (objAJAX.status == 200)
    {
      var xml = objAJAX.responseXML;
      if (xml)
      {
        if (function_to_call != null)
          function_to_call(xml);
      }
      else
        strErrore = "Errore nell'interpretazione del risultato XML";
    }
    else
      strErrore = "Errore di navigazione: " + objAJAX.statusText;
    
    if (strErrore != "") alert(strErrore);
    usingAJAX = false;
  }
}