function newXMLHttpRequest()
{
	var xmlreq = false;
	// Controllo il tipo di oggetto XMLHttpRequest da utilizzare
	if(window.XMLHttpRequest)
	{
		//Per browser non Microsoft
		xmlreq = new XMLHttpRequest();
	}
	else if(window.ActiveXObject)
	{
		//Cerco di creare l'oggetto via MS ActiveX
		try
		{
			//Nuove versioni per browser IE
			xmlreq = new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch(e1)
		{ //Errore riscontrato durante la creazione dell'oggetto
			try
			{
				//Precedenti versioni per browser IE
				xmlreq = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch(e2)
			{ //Nuovo errore durante la creazione dell'oggetto
				xmlreq = false;
			}
		}
	}
	//Restituisco l'eventuale oggetto XMLHttpRequest
	return xmlreq;
}

/*
* Ritorna una funzione per la gestione dello stato dell'oggetto req.
* Ed infine a stato finale raggiunto, invia la risposta XML alla funzione che dovra' gestire il tutto.
* req = Istanza XMLHTTPRequest
* XMLHandler = nome della funzione a cui passare il risultato XML da gestire
*/
function handleResponse( req, XMLHandler, div_id )
{
	return function()
	{
		// Controllo se l'oggetto req ha raggiunto lo stato finale
		if(req.readyState == 4)
		{
			// Inoltre accertiamoci di aver ottenuto il messaggio 200 dal server,
			if (req.status == 200)
			{
				// A questo punto richiamo la funzione che gestira' il risultato XML
				XMLHandler( req.responseXML, div_id );
			}
			else
			{
				alert("Errore HTTP: " + req.status);
			}
		}
	}
}

/*
* Funzione per la popolazione di una SELECT secondaria dopo aver selezionato un dato da una select primaria
select_id1: l'id della select da cui si e' selezionato un elemento
select_id2: l'id della select che si deve popolare
tipo_sel1: tipo di select (serve per scegliere il file xml che deve popolare la seconda select)
testoPrimaRiga: e' il testo che apparira' nella prima riga della select da popolare (es. "Seleziona ...")
*/
function populateSelect( select_id1, select_id2, tipo_sel1, testoPrimaRiga, campireset )
{
	// tipo
	var data = "";
	var id = "";
	if( tipo_sel1=="continenti" )
	{
		data = "include/data_stati.php";
		id = "idc";
	}
	else if( tipo_sel1=="stati" )
	{
		data = "include/data_regioni.php";
		id = "ids";
	}
	else if( tipo_sel1=="regioni" )
	{
		data = "include/data_province.php";
		id = "idr";
	}
	else if( tipo_sel1=="province" )
	{
		data = "include/data_localita.php";
		id = "idp";
	}
	
	// Recupero i dati da inviare
	var mainSelection = document.getElementById(select_id1);

	// Creo un nuovo oggetto XMLHTTPRequest
	var req = newXMLHttpRequest();

	// Invio la richiesta
	req.open("POST", data, true);
	req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

	// Invio i dati POST
	req.send( id + "=" + mainSelection.options[mainSelection.selectedIndex].value + "&testoPrimaRiga=" + testoPrimaRiga );

	req.onreadystatechange = handleResponse( req, updateSelect, select_id2 );

	// resetto le altre select
	if( campireset != "" )
	{
		var aridsel = campireset.split(",");
		for ( i=0; i<aridsel.length; i++ )
		{
			resetSelect(aridsel[i]);
		}
	}
}

/*
* Popolo la SELECT secondaria
* XMLResult = Il risultato XML prodotto da handleResponse
*/
function updateSelect( XMLResult, select_id2 )
{
	// Gestisco il documento XML ricevuto e popolo la seconda SELECT
	var categoria = XMLResult.getElementsByTagName('categoria');

	//Recupero la seconda SELECT
	var subSelection = document.getElementById( select_id2 );

	// Svuoto la seconda SELECT
	for (var i = subSelection.length - 1; i >= 0; i--)
	subSelection.remove(i);

	//Scorro gli elementi
	for (var i = 0; i < categoria.length; i++)
	{
		//Recupero i vari elementi singoli
		var item = categoria[i];

		//Creo il nuovo elemento OPTION da aggiungere nella seconda SELECT
		var NewOpt = document.createElement('option');
		NewOpt.value = item.getAttribute("value");
		NewOpt.text = item.firstChild.nodeValue;

		//Popolo la seconda SELECT
		try
		{
			subSelection.add(NewOpt, null); // Metodo Standard, non funziona con IE
		}
		catch(e)
		{
			subSelection.add(NewOpt); // Funziona solo con IE
		}
	}
}

/*
* Resetto una select
*/
function resetSelect(select_id)
{
	// Recupero la SELECT
	var subSelection = document.getElementById( select_id );
	// Svuoto la SELECT
	for (var i = subSelection.length - 1; i >= 0; i--) subSelection.remove(i);
}
