function Ajax(Parametros,NombrePrograma,onReadyStateFunction){
	if(window.XMLHttpRequest) {
		xmlhttp = new XMLHttpRequest();
	} else if(window.ActiveXObject) {
		xmlhttp = new ActiveXObject('Microsoft.XMLHTTP');
	} else {
		return true;
	}
	xmlhttp.open('post',NombrePrograma, true);
	xmlhttp.setRequestHeader('Content-type','application/x-www-form-urlencoded'); // sending it as encoded formdata
	xmlhttp.setRequestHeader('Content-length',Parametros.length); // we need to specify the length of the contents
	xmlhttp.setRequestHeader('Connection','close'); // Connection is to be closed after transfer
	/* Modif AG 2007-12-01 Ref. 2065- Se añadió parámetro onReadyStateFunction */
	if (onReadyStateFunction){
		xmlhttp.onreadystatechange=function(){
			if (xmlhttp.readyState == 4){
				onReadyStateFunction(xmlhttp.responseText);
			};
		};
	};
	xmlhttp.send(Parametros); 	
	return xmlhttp;
};

/*Rutina para decodificar Código HTML proveniente del response del ajax. 
Recibe Código HTML codificado con la función htmlentities() de php y devuelve el código HTML Limpio.*/
/* Modif EC 2008-08-26 Ref. xxxx - función creada por AG y colocada aquí por EC */
function decodeString(string){
	if (!window.__formater){
		window.__formater = document.all ? document.createElement('<textarea></textarea>') : document.createElement('textarea');
	};
	//Se usa .innerHTML para que se escriba como verdadero html y los '&lt;' pasen a '<'
	__formater.innerHTML = string;
	//innerHTML devuelve la etiqueta aún codificada, por lo que se usa .value para obtener '<'
	return __formater.value;
};




