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

function MMJAjax(sStateChangeHandler, bAutoFocus, bForceClear) {
	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;
		_forceClear = bForceClear;
	}
}

function MMJAjax_setAutoFocus(bAutoFocus) {
	_autoFocus = bAutoFocus;
}

function MMJAjax_setForceClear(bForceClear) {
	_forceClear = bForceClear;
}

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) {
						_responseComplete(_http.responseXML, _autoFocus, _forceClear);
					} 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, bForceClear) {
	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.nodeName.toLowerCase()) {
							case 'span':
							case 'td':
							case 'table':
							case 'tbody':
								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.innerHTML = '';
									k = 0;
									while (k < oValueNode.childNodes.length) {
										if (oValueNode.childNodes.item(k).firstChild)
											oElement.innerHTML += decode64(oValueNode.childNodes.item(k).firstChild.data);
										k++;
									}
								} else if (bForceClear) oElement.innerHTML = '';
								break;
							case 'input':
							default:
								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++;
											}
										} else if (bForceClear) oElement.value = '';
										if (typeof(FCKeditorAPI) != 'undefined') {
											if (FCKeditorAPI.GetInstance) {
												var oFCKIstance = FCKeditorAPI.GetInstance(oElementNode.nodeName);
												if (oFCKIstance)
													oFCKIstance.SetHTML(decode64(oElement.value));
											}
										}
										break;
									case 'select-one':
									case 'select-multiple':
										if (bForceClear) iDelta = 0;
										else iDelta = (oElement.type == 'select-one' ? 1 : 0);
// 										else iDelta = (oElement.type == 'select-one' ? 1 : oElement.length);
										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 && oValueNode.childNodes.length) {
														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 && oValueNode.childNodes.length) oElement.checked = (oValueNode.firstChild.data ? true : false);
										}
										break;
									default:
								}
								break;
						}
						oElement.disabled = false;
					}
				}
			}
			if (bAutoFocus) MMJ_selectFocused(oElement);
		}
	} catch (e) { }
	return oElement;
}

//-->

