/*********************************************/
/* Script ajax.js                            */
/* ----------------------------------------- */
/* Autor: Eduardo Martos Gómez.              */
/* Correo-e: eduardo.martos.gomez@gmail.com. */
/* Condiciones de uso: citar al autor.       */
/* Fecha: 02/11/2006.                        */
/*********************************************/

/*********************************************************/
/* Función nuevo_ajax ()                                 */
/* ----------------------------------------------------- */
/* Crea, inicializa y devuelve un objeto XMLHTTPRequest. */
/*********************************************************/
function nuevo_ajax ()
{
	var xmlhttp = false;
	try
	{
		// Creación del objeto ajax para navegadores diferentes a Explorer
		xmlhttp = new ActiveXObject ("Msxml2.XMLHTTP");
	}
	catch (e)
	{
		// o bien
		try
		{
			// Creación del objet ajax para Explorer
			xmlhttp = new ActiveXObject ("Microsoft.XMLHTTP");
		}
		catch (E)
		{
			xmlhttp = false;
		}
	}
	if (!xmlhttp && typeof XMLHttpRequest!='undefined')
	{
		xmlhttp = new XMLHttpRequest ();
	}
	return xmlhttp;
}

/*******************************************************/
/* Función get_html ()                                 */
/* --------------------------------------------------- */
/* Ejecuta la llamada AJAX y sustituye el contenido de */
/* id_obj por el resultado obtenido.                   */
/* Evita los problemas de juegos de caracteres y de    */
/* caché                                               */
/* Parámetros:                                         */
/* id_obj: identificador del objeto que se modifica.   */
/* destino: URL que AJAX llama y cuyo resultado usa.   */
/* metodo: get o post (HTTP).                          */
/*******************************************************/
function get_html (id_obj, destino, metodo, valor, frm)
{
	var ajax = false;
	var obj = document.getElementById (id_obj);
	ajax = nuevo_ajax ();
	ajax.open (metodo, destino+"&ms="+new Date().getTime());
	ajax.onreadystatechange = function ()
	{
		if (ajax.readyState == 4 && ajax.status == 200) 
		{
			obj.innerHTML = URLDecode (ajax.responseText);
			valor = URLDecode (valor);
		}
	}
	if (frm == true) ajax.setRequestHeader ("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");	
	ajax.send (valor);
}

/* --------------------------------------------------- */
/* Ejecuta la llamada AJAX
/* Evita los problemas de juegos de caracteres y de    */
/* caché                                               */
/* Parámetros:                                         */
/* destino: URL que AJAX llama y cuyo resultado usa.   */
/* metodo: get o post (HTTP).                          */
/*******************************************************/
function send_ajax (destino, metodo, params)
{
	var ajax = false;
	ajax = nuevo_ajax ();
	ajax.open (metodo, destino + "&ms=" + new Date ().getTime ());
	params = URLDecode (params);
	if (metodo.toLowerCase () == "post")
	{
		ajax.setRequestHeader ("Content-type", "application/x-www-form-urlencoded");
		ajax.setRequestHeader ("Content-length", params.length);
		ajax.setRequestHeader ("Connection", "close");
	}
	ajax.send (params);
}

function URLDecode (psEncodeString) {
	// Create a regular expression to search all +s in the string
	var lsRegExp = /\+/g;
	// Return the decoded string
	return unescape (String (psEncodeString).replace (lsRegExp, " "));
}
