/*
			 * Autore: Giuseppe Leone - Master85
			 * Codice gratuitamente scaricato da http://www.masterdrive.it
			 * Sezione di interesse: Articoli Tecnici >> PHP
			 * MasterDrive.it (c) 2006.
			 */

/************************************************************************************************
/*___________________________    FUNZIONI PER DOPPIO COMBO BOX       __________________________*/	
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;
}
			
			/*
			 * Funzione per la popolazione della Seconda SELECT
			 */
			function populateSubSelection(){
				//Recupero i dati da inviare
				var mainSelection = document.getElementById("mainSelection");
				
				//Creo un nuovo oggetto XMLHTTPRequest
				var req = newXMLHttpRequest();
				
				//Invio la richiesta
				req.open("POST", "data.php", true);
				req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
				
				//Invio i dati POST
				req.send("choice=" + mainSelection.options[mainSelection.selectedIndex].value);
				
				//Gestore dell'evoluzione dello stato dell'oggetto req
				req.onreadystatechange = handleResponse(req, updateSubSelection);
			}
			
			/*
			 * 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.
			 * reg = Istanza XMLHTTPRequest
			 * XMLHandler = nome della funzione a cui passare il risultato XML da gestire
			 */
			function handleResponse(req, XMLHandler){
				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);
						}else{
							alert("Errore HTTP: " + req.status);
						}
					}
				}
			}
			
			/*
			 * Popolo la seconda SELECT
			 * XMLResult = Il risultato XML prodotto da handleResponse
			 */
			function updateSubSelection(XMLResult){
				//Gestisco il documento XML ricevuto e popolo la seconda SELECT
				var categoria = XMLResult.getElementsByTagName('categoria');
				
				//Recupero la seconda SELECT
				var subSelection = document.getElementById("subSelection");
				
				//Svuoto la secondo 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
					}
				}
			}
			
			

