function GetXMLHttpRequest() {
    var obj;
    // Dichiariamo una variabile che indica se l'oggetto è stato creato
    // o meno dato che si procederà per tentativi
    var creato = false;
    try {
        // Crea l'oggetto XMLHttpRequest (funziona con Firefox, Mozilla, 
        // Opera, Safari e Internet Explorer dalla 7)
        obj = new XMLHttpRequest();
        creato = true;
    } catch (e) {
        // Per le versioni precedenti alla 7 di IE si procede tentando di
        // creare l'oggetto ActiveX XMLHttpRequest, che assume nomi diversi
        // a seconda delle versioni
        var IEXMLHttpRequestNames = new Array("Microsoft.XmlHttp", "MSXML4.XmlHttp", "MSXML3.XmlHttp",
            "MSXML2.XmlHttp", "MSXML.XmlHttp");
        
        for (var i = 0; i < IEXMLHttpRequestNames .length; i++) {
            try {
                obj = new ActiveXObject(IEXMLHttpRequestNames[i]);
                creato = true;
            } catch (e) { }
        }
    }
    
    // Se è stato possibile creare l'oggetto lo restituisce altrimenti
    // da come risultato null
    if (creato) {
        return obj;
    } else {
        return null;    
    }
}
	
// Funzione richiamata quando si clicca su un link del menu, richiede al
// server e mostra i dati in questione
function ajaxGet(page,tar,noWait) {
		if (!noWait) wait();
    // Otteniamo l'oggetto XMLHttpRequest
    var request = GetXMLHttpRequest()
    // Nel caso AJAX non sia supportato restituisce true, il che permette
    // di essere reindirizzati al file specificato nell'href, infatti il
    // valore restituito dall'evento onClick indica se ignorare href o
    // meno
    if (request == null) return true;
    // Predispone una richiesta di tipo GET a pagina#.txt sincrona (ultimo 
    // parametro false), ovvero arresta l'esecuzione fino al 
    // completamento dell'operazione
    request.open("GET", page, false);
    // Esegue l'operazione senza inviare alcun dato specifico
    request.send(null);
    
    // Se l'operazione ha avuto successo (codice HTTP 200) sostituisce
    // il contenuto del DIV "content" con il testo scaricato altrimenti
    // mostra codice e testo dell'errore
    if(request.status == 200) {
        document.getElementById(tar).innerHTML = request.responseText;
    } else {
        //alert("Si è verificato un errore: \n" + request.status + " - " + request.statusText);
		  document.getElementById(tar).innerHTML = "<code>Error loading '" + page + "' into '" + tar + "': \n" + request.status + " - " + request.statusText + "</code";
    }
	 if (!noWait) clear();
    return false;
}
function tinyMceCallback(source,tar) {
document.getElementById(tar).value=tinyMCE.getContent(source);
}


//##################################################################################
//## FORM SUBMIT WITH AJAX                                                        ##
//## @Author: Simone Rodriguez aka Pukos <http://www.SimoneRodriguez.com>         ##
//## @Version: 1.2                                                                ##
//## @Released: 28/08/2007                                                        ##
//## @License: GNU/GPL v. 2 <http://www.gnu.org/copyleft/gpl.html>                ##
//##################################################################################


function ajaxPost(strURL,formname,responsediv,responsemsg,mce) {
	var xmlHttpReq = false;
	var self = this;
	// Xhr per Mozilla/Safari/Ie7
	if (window.XMLHttpRequest) {
		self.xmlHttpReq = new XMLHttpRequest();
	}
	// per tutte le altre versioni di IE
	else if (window.ActiveXObject) {
		self.xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
	}
	self.xmlHttpReq.open('POST', strURL, false);
	self.xmlHttpReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	self.xmlHttpReq.onreadystatechange = function() {
		if (self.xmlHttpReq.readyState == 4) {
			// Quando pronta, visualizzo la risposta del form
			updatepage(self.xmlHttpReq.responseText,responsediv);
			//tinyMCE.execCommand('mceRemoveControl',false,'tinyMceArea'); 
		} else {
			// In attesa della risposta del form visualizzo il msg di attesa
			updatepage(responsemsg,responsediv);
		}
	}
	self.xmlHttpReq.send(getquerystring(formname));
}

function getquerystring(formname) {
    var form = document.forms[formname];
	var qstr = "";

    function GetElemValue(name, value) {
		 
        qstr += (qstr.length > 0 ? "&" : "")
            + escape(name).replace(/\+/g, "%2B") + "="
          	+ value.replace('&',escape('&'));
			 //  + escape(value ? value : "").replace(/\+/g, "%2B");
			//+ escape(value ? value : "").replace(/\n/g, "%0D");
    }
	
	var elemArray = form.elements;
    for (var i = 0; i < elemArray.length; i++) {
			var element = elemArray[i];
			var elemType = element.type.toUpperCase();
			var elemName = element.name;
			if (elemName) {
				if (elemType == "TEXT"
				|| elemType == "TEXTAREA"
				|| elemType == "PASSWORD"
				|| elemType == "BUTTON"
				|| elemType == "RESET"
				|| elemType == "SUBMIT"
				|| elemType == "FILE"
				|| elemType == "IMAGE"
				|| elemType == "HIDDEN")
				GetElemValue(elemName, element.value);
				else if (elemType == "CHECKBOX" && element.checked)
				GetElemValue(elemName, 
				element.value ? element.value : "On");
				else if (elemType == "RADIO" && element.checked)
				GetElemValue(elemName, element.value);
				else if (elemType.indexOf("SELECT") != -1)
				for (var j = 0; j < element.options.length; j++) {
					var option = element.options[j];
					if (option.selected)
					GetElemValue(elemName,
					option.value ? option.value : option.text);
				}
			}
    }
    return qstr;
}
function updatepage(str,responsediv){
    document.getElementById(responsediv).innerHTML = str;
}