/* Author: David Mimms (david.mimms avantinformatica.it)
 * Desc: Make XHR request
 * Date: Sept 2006
 */

function initXHRObject (wantXML) {
	var http_request = false;
	
	if (!wantXML) wantXML = false;

	if (window.XMLHttpRequest) { // Mozilla, Safari,...
		http_request = new XMLHttpRequest();
		if (http_request.overrideMimeType && wantXML == true) {
			http_request.overrideMimeType('text/xml');
		}
	} else if (window.ActiveXObject) { // IE
		try {
			http_request = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try {
				http_request = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e) {}
		}
	}

	return http_request;
}

function sendRequest (http_request, url, rmethod, sendData) {
	http_request.open (rmethod, url, true);
	
	if (!sendData) sendData = null;
	
	if (rmethod == 'POST') {
		http_request.setRequestHeader ('Content-Type', 'application/x-www-form-urlencoded');
		http_request.setRequestHeader ("Content-length", sendData.length);
	}
	
	http_request.send (sendData);
	return http_request;
}

function setStates (http_request, wantXML, onReady, onError) {
	http_request.onreadystatechange = function() {
		try {
			if (http_request.readyState == 4) {
				if (http_request.status == 200) {
					var response = (wantXML == true) ? http_request.responseXML : http_request.responseText;
					onReady (response);
				} else {
					onError (http_request.statusText);
				}
			}
		} catch (e) {
//			onError (e.description);
		}
	};
	return http_request;
}

function XHRObject (url, onReady, onError, wantXML, rmethod, sendData) {
	http_request = initXHRObject (wantXML);
	
	if (!http_request) {
		onError ('Cannot create an XMLHTTP instance');
		return false;
	}
	
	http_request = setStates (http_request, wantXML, onReady, onError);
	return sendRequest (http_request, url, rmethod, sendData);
}
