<!--
var _http;
var _responseUnitialized;
var _responseLoading;
var _responseLoaded;
var _responseInteractive;
var _responseComplete;
var _autoFocus;

function MMJAjax(sStateChangeHandler, bAutoFocus) {
    this.sendRequest = MMJAjax_sendRequest;
    this.setResponseHandler = MMJAjax_setResponseHandler;
    this.setAutoFocus = MMJAjax_setAutoFocus;
    if (sStateChangeHandler) this.stateChangeHandler =  eval(sStateChangeHandler);
    else this.stateChangeHandler =  MMJAjax_processResponse;
    this.addData = MMJAjax_addData;
    this.setMethod = MMJAjax_setMethod;
    this.data = '';
    this.smethod = 'GET';
    this.dataCount = 0;
    if (!_http) _http = getHTTPObject();
    if (_http) {
        _autoFocus = bAutoFocus;
        _responseComplete = fillElement;
    }
}

function MMJAjax_setAutoFocus(bAutoFocus) {
    _autoFocus = bAutoFocus;
}

function MMJAjax_setMethod(sMethod) {
    this.smethod = sMethod;
}

function MMJAjax_addData(sKey, sValue) {
    this.data += '&' + escape(sKey) + '=' + escape(sValue);
    this.dataCount++;
}

function MMJAjax_sendRequest(sURL) {
    try {
        // aggiunge il timestamp ai parametri dell'URL per evitare ogni possibile
        // caching da parte del browser
        var timestamp = new Date();
        if (sURL.lastIndexOf('?') < 0) sURL += '?';
        else sURL += '&';
        sURL += timestamp.getTime();
        // recupero parametri
        if (this.dataCount > 0) this.data = this.data.substr(1);
        else this.data = null;
        _http.abort();
        _http.onreadystatechange = this.stateChangeHandler;
        _http.open(this.smethod, sURL, true);
        _http.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
        _http.send(this.data);
        this.data = '';
        this.dataCount = 0;
    } catch (e) {
        alert(e);
    }
}

function MMJAjax_setResponseHandler(iState, sResponseHandler) {
    if (_http && sResponseHandler) {
        switch (iState) {
            case 0:     // unitialized
                _responseUnitialized = eval(sResponseHandler);
                break;
            case 1:     // loading
                _responseLoading = eval(sResponseHandler);
                break;
            case 2:     // loaded
                _responseLoaded = eval(sResponseHandler);
                break;
            case 3:     // interactive
                _responseInteractive = eval(sResponseHandler);
                break;
            case 4:     // complete
                _responseComplete = eval(sResponseHandler);
                break;
            default:
        }
    }
}

function MMJAjax_processResponse() {
    if (_http) {
        switch (_http.readyState) {
            case 0:     // unitialized
                break;
            case 1:     // loading
                break;
            case 2:     // loaded
                break;
            case 3:     // interactive
                break;
            case 4:     // complete
                try {
                    if (_http.status == 200 && _http.responseText.indexOf('invalid') == -1) {
                        _responseComplete(_http.responseXML, _autoFocus);
                    } else if (_http.status == 204) {
                        _http.abort();
                    }
                } catch(e) {}
                break;
        }
    }
}

function getHTTPObject() {
    var xmlhttp;
    /*@cc_on
    @if (@_jscript_version >= 5)
        try {
            xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e1) {
            try {
                xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e2) {
                xmlhttp = false;
            }
        }
    @else
        xmlhttp = false;
    @end @*/
    if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
        try {
            xmlhttp = new XMLHttpRequest();
        } catch (e) {
            xmlhttp = false;
        }
    }
    return xmlhttp;
}

function fillElement(oXML, bAutoFocus) {
    var oElement = false;
    try {
        if (oXML && oXML.documentElement.nodeName.toLowerCase() == 'ajax') {
            var i, j, k, iIdx, iDelta, iSelected;
            var oElementNode, oOptionNode, oIdNode, oValueNode;
            var vDefault, vSelected;
            var bClear;
            for (i = 0; i < oXML.documentElement.childNodes.length; ++i) {
                oElementNode = oXML.documentElement.childNodes.item(i);
                if (oElementNode.nodeType == 1) {
                    oElement = getObject(oElementNode.nodeName);
                    if (oElement) {
                        switch (oElement.type) {
                            case 'hidden':
                            case 'password':
                            case 'text':
                            case 'textarea':
                                j = 0;
                                while (j < oElementNode.childNodes.length && oElementNode.childNodes.item(j).nodeType != 1) j++;
                                if (j < oElementNode.childNodes.length) {
                                    oValueNode = oElementNode.childNodes.item(j);
                                    oElement.value = '';
                                    k = 0;
                                    while (k < oValueNode.childNodes.length) {
                                        if (oValueNode.childNodes.item(k).firstChild)
                                            oElement.value += oValueNode.childNodes.item(k).firstChild.data;
                                        k++;
                                    }
                                }
                                break;
                            case 'select-one':
                            case 'select-multiple':
                                iDelta = (oElement.type == 'select-one' ? 1 : 0);
                                iIdx = 0;
                                iSelected = 0;
                                if (oElementNode.attributes.getNamedItem('default')) vDefault = oElementNode.attributes.getNamedItem('default').value;
                                else vDefault = false;
                                if (oElementNode.attributes.getNamedItem('selected')) vSelected = oElementNode.attributes.getNamedItem('selected').value;
                                else vSelected = false;
                                if (oElementNode.attributes.getNamedItem('clear')) bClear = (oElementNode.attributes.getNamedItem('clear').value > 0);
                                else bClear = true;
                                if (bClear) {
                                    oElement.options.length = iDelta;
                                    for (j = 0; j < oElementNode.childNodes.length; j++) {
                                        oOptionNode = oElementNode.childNodes.item(j);
                                        if (oOptionNode && oOptionNode.nodeType == 1) {
                                            k = 0;
                                            while (k < oOptionNode.childNodes.length && oOptionNode.childNodes.item(k).nodeType != 1) k++;
                                            oIdNode = oOptionNode.childNodes.item(k++);
                                            while (k < oOptionNode.childNodes.length && oOptionNode.childNodes.item(k).nodeType != 1) k++;
                                            oValueNode = oOptionNode.childNodes.item(k);
                                            if (oIdNode && oValueNode) {
                                                oElement.options[iIdx + iDelta] = new Option(oValueNode.firstChild.data, oIdNode.firstChild.data);
                                                if (vDefault && vDefault == oIdNode.firstChild.data) oElement.options[iIdx + iDelta].defaultSelected = true;
                                                if (vSelected && vSelected == oIdNode.firstChild.data) iSelected = iIdx + iDelta;
                                                iIdx++;
                                            }
                                        }
                                    }
                                } else if (vSelected) {
                                    j = 0;
                                    while (j < oElement.options.length && vSelected != oElement.options[j].value) j++;
                                    iSelected = j;
                                }
                                if (!vSelected && oElement.options.length == (iDelta + 1)) iSelected = iDelta;
                                oElement.selectedIndex = iSelected;
                                break;
                            case 'checkbox':
                            case 'radio':
                                j = 0;
                                while (j < oElementNode.childNodes.length && oElementNode.childNodes.item(j).nodeType != 1) j++;
                                if (j < oElementNode.childNodes.length) {
                                    k = 0;
                                    while (k < oElementNode.childNodes.length && oElementNode.childNodes.item(k).nodeType != 1) k++;
                                    oValueNode = oElementNode.childNodes.item(j).childNodes.item(k);
                                    if (oValueNode) oElement.checked = (oValueNode.firstChild.data ? true : false);
                                }
                                break;
                            default:
                        }
                        oElement.disabled = false;
                    }
                }
            }
            //if (bAutoFocus) MMJ_selectFocused(oElement);
        }
    } catch (e) { }
    return oElement;
}

//-->