var req;

function xmlreq(url, method, handler, data) {
	if (!method) method = 'GET';
	var objectIDs = new Array(
		"Microsoft.XMLHTTP",
		"Msxml2.XMLHTTP",
		"MSXML2.XMLHTTP.3.0",
		"MSXML2.XMLHTTP.4.0"
	);
	var success = false; // ie?

	for (i=0; !success && i < objectIDs.length; i++) {
		try {
			req = new ActiveXObject(objectIDs[i]);
			success = true;
		} catch (e) { req = false; }
	}

	if (!req) {
		req = new XMLHttpRequest();
	}

	if (req) {
		//req.onreadystatechange = handler ? eval(handler) : processReqChange;
		// req.onreadystatechange = processReqChange;
		req.onreadystatechange = function () { processReqChange(handler); }
		req.open(method, url, true);
		if (method == 'POST') req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=iso-8859-1');
		if (!data) data = success ? '' : 'null';
		else data = data;
		req.send(data);
	}
	else {
		alert('Debe habilitar los componentes ActiveX de su navegador');
	}
}
function processReqChange(handler) {
	switch(req.readyState) {
		case 1:
			parent.window.status = 'Enviando solicitud...';
		break;
		case 2:
			parent.window.status = 'Recibiendo respuesta...';
		break;
		case 3:
			parent.window.status = 'Recibiendo respuesta...';
		break;
		case 4:
			parent.window.status = 'Respuesta recibida';

			if (req.status == 200) {
				if (handler) { eval(handler(req)); }
			}
			else {
				alert('Lo siento, ha ocurrido un error al contactarme con el servidor. Error ' + req.status + ' (' + req.statusText + ')');
			}
				setTimeout("parent.window.status = ''", 1000);
		break;
		default:
				alert('Lo siento, no ha sido posible contactarse con el servidor. Revise su conexion e intente nuevamente.');
				setTimeout("parent.window.status = ''", 1000);
	}
}