//implementación estándar del objeto
function AJAX() {
	try { objeto = new ActiveXObject("Msxml2.XMLHTTP"); }
	catch (e) { try { objeto = new ActiveXObject("Microsoft.XMLHTTP"); } catch (E) { objeto = false; } }
	if (!objeto && typeof XMLHttpRequest != 'undefined') { objeto = new XMLHttpRequest(); }
	return objeto;
}

/*esta función envía datos a una página y la respuesta lo muestra en:
- alguna parte del documento (donde_poner_respuesta = id)
- en una ventana alert (donde_poner_respuesta = 'alert_window')
- o no hace nada (donde_poner_respuesta = '')
luego, si hubiera ejecuta una función tras la respuesta 
el último parámetro: 'agregar_reemplazar' es un valor boleano que de ser:
TRUE los datos cargados se agregarán, y en caso de ser
FALSE, se reemplazará; el predeterminado es FALSE*/
function SendAndLoadData(donde_enviar,metodo,datos_a_enviar,donde_poner_respuesta,funcion_a_ejecutar,agregar_reemplazar){
	nuevoAjax = AJAX();
	nuevoAjax.open(metodo, donde_enviar, true);
	nuevoAjax.onreadystatechange=function() {
		if (nuevoAjax.readyState == 4) {
		
			if(donde_poner_respuesta == 'alert_window' && nuevoAjax.responseText != '') {
				alert(nuevoAjax.responseText);
			} else if(donde_poner_respuesta != '' && donde_poner_respuesta != 'alert_window') {
				if(agregar_reemplazar) document.getElementById(donde_poner_respuesta).innerHTML += nuevoAjax.responseText;
				else document.getElementById(donde_poner_respuesta).innerHTML = nuevoAjax.responseText;
			}
			
			if(funcion_a_ejecutar != '') eval(funcion_a_ejecutar);
			
		}
	}
	if(metodo == 'POST'){
		nuevoAjax.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		nuevoAjax.send(datos_a_enviar);
	}else if(metodo == 'GET'){
		nuevoAjax.send(null);
	}
}