/********************************************************************************
* Nombre:		  lib_ajax                                                          *
* Version:		1.00                                                              *
* Fecha:		  2007-05-01                                                        *
* Autor:		  Iván Miranda                                                      *
* Licencia:		OpenSource                                                        *
*********************************************************************************
* Compilado de rutinas generales en desarrollos que relizan intercambio de      *
* de información mediante el diseño AJAX.                                       *
*********************************************************************************
*                                                                               *
*********************************************************************************
* Licencia:		OpenSource                                                        *
* Puedes modificar libremente este código, respetando el nombre de sus autores	*
* en las aplicaciones involucradas.                                             *
* Por favor, informa de las actualizaciones a este código en:                   *
* 		pa.ivan.miranda@gmail.com                                                 *
********************************************************************************/

//Crea una carga asincrona en el documento
function ajxCargaAsincrona(url, id_contenedor) {
var objAsincrono = false;
		
	if (window.XMLHttpRequest) {
	// Si es Firefox, Safari, etc...
		objAsincrono = new XMLHttpRequest()
	} 
	else if (window.ActiveXObject) {
	// ...pero si es IE
		try { objAsincrono = new ActiveXObject("Msxml2.XMLHTTP"); } 
		catch (e) { // en caso que sea una versión antigua
			try{ objAsincrono = new ActiveXObject("Microsoft.XMLHTTP");	}
			catch (e) {	}
		}
	}
	else
		return false;
	objAsincrono.onreadystatechange=function() { // función de respuesta
		ajxCargarAsincrono(objAsincrono, id_contenedor)
	}
	objAsincrono.open('GET', url, true); // asignamos los métodos open y send
	objAsincrono.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
	objAsincrono.send(null);
};

function ajxCargaAsincronaPOST(url, id_contenedor, post) {
var objAsincrono = false;
	if (window.XMLHttpRequest) {
	// Si es Firefox, Safari, etc...
		objAsincrono = new XMLHttpRequest()
	} 
	else if (window.ActiveXObject) {
	// ...pero si es IE
		try { objAsincrono = new ActiveXObject("Msxml2.XMLHTTP"); } 
		catch (e) { // en caso que sea una versión antigua
			try{ objAsincrono = new ActiveXObject("Microsoft.XMLHTTP");	}
			catch (e) {	}
		}
	}
	else
		return false;
	objAsincrono.onreadystatechange=function() { // función de respuesta
		ajxCargarAsincrono(objAsincrono, id_contenedor)
	}
	objAsincrono.open('POST', url, true); // asignamos los métodos open y send
	objAsincrono.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
	objAsincrono.send(post);
};


//muestra el contenido de un url en una sección asincrona
function ajxCargarAsincrono(pagina_requerida, id_contenedor) {
	if (pagina_requerida.readyState == 4 && (pagina_requerida.status==200 || window.location.href.indexOf("http")==-1))
  	ajxAsignaHTMLDivision(id_contenedor,pagina_requerida.responseText);
  else
    document.getElementById(id_contenedor).innerHTML = "<img src=\"cargando.gif\" alt=\"\" title=\"Cargando...\" border=\"0\" /><strong>Cargando...</strong>";
};

//Esta funcion reprocesa los scripts en una respuesta desde AJAX para que puedan dispararse
//desde del navegador, agragandolos al header del contenedor para su ejecucion
function ajxAsignaHTMLDivision(objeto,html,processScripts) {
  objObjeto = document.getElementById(objeto);
  objObjeto.innerHTML = html;
  if(html.trim() != ''){
    var objScripts = objObjeto.getElementsByTagName("script");
    for(intElemento = 0; intElemento<objScripts.length; intElemento++) {
      var objEtiquetaScript = document.createElement("script");
      document.getElementsByTagName("head")[0].appendChild(objEtiquetaScript);
    //esto funciona bien en Firefox...
      try {
          objEtiquetaScript.text = objScripts[intElemento].childNodes[0].data; 
      }
    //... si hay un error es por que navegan con explorer asi que asigno el script de otro modo
      catch(e) {
        try {
          objEtiquetaScript.text = objScripts[intElemento].text;
        }
      //...si aún no funciona mandamos el error y solicitamos utilizar otro tipo de navegador
        catch(e) {
		      alert('Tu navegador no tiene soporte para la carga dinámica.\n' + e.name + " - "+e.message);
	      }
	    }
    }
  }
};

//Obtiene la respuesta de un AJAX
function ajxObtenRespuesta(url, id_contenedor, post) {
var objAsincrono = false;
	if (window.XMLHttpRequest) {
	// Si es Firefox, Safari, etc...
		objAsincrono = new XMLHttpRequest()
	} 
	else if (window.ActiveXObject) {
	// ...pero si es IE
		try { objAsincrono = new ActiveXObject("Msxml2.XMLHTTP"); } 
		catch (e) { // en caso que sea una versión antigua
			try{ objAsincrono = new ActiveXObject("Microsoft.XMLHTTP");	}
			catch (e) {	}
		}
	}
	else
		return false;
	objAsincrono.onreadystatechange=function() { // función de respuesta
		if (objAsincrono.readyState == 4 && objAsincrono.status==200)
  	  return pagina_requerida.responseText;
	}
	objAsincrono.open('POST', url, true); // asignamos los métodos open y send
	objAsincrono.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
	objAsincrono.send(post);
};
