//////////////////////////////////////////////////////////////////////////////////////
//
//  Clase miniAjax para ejecutar un fichero PHP y devolver el resultado a 
//  un objeto que disponga de "innerHTML".
//
//  Para llamar a la clase, usar la siguiente estructura:
//
//   <script type="text/javascript">
//      var xx = new myAjax();
//      xx.RefreshObj('<fichero_php_con parámetros','nombre_del_objeto');
//  </script>
//
//////////////////////////////////////////////////////////////////////////////////////


///////////////////////////////////////////
// Definimos el constructor de la clase
///////////////////////////////////////////
function myAjax() { 
  
  //Declaramos variables privadas a esta función
  var req = "";     // Guardará la referencia de: Microsoft.XMLHTTP  
  var div = "";     // Guardará el nombre del objeto DIV que se refrescará
  
  // Declaramos métodos públicos que puedan ser llamados desde fuera de la clase:  xx.getObject()
  this.getObject = getObject;    
  this.RefreshObj = RefreshObj;
  this.RefreshObjPost = RefreshObjPost;
  
  ////////////////////////////////////////////////////////////////
  // Carga el contenido de un PHP en un objeto DIV, vía GET
  ////////////////////////////////////////////////////////////////
  function RefreshObj(purl, podiv) {

	// Guarda el nombre del objeto DIV donde se asignará el resultado
	div = podiv;
	
	if(window.XMLHttpRequest) {
		req = new XMLHttpRequest();
	} else if(window.ActiveXObject) {
		req = new ActiveXObject("Microsoft.XMLHTTP");
	}
    
	req.open("GET", purl, true);
	req.onreadystatechange = callback;
	req.send(null);
    }
    
  ////////////////////////////////////////////////////////////////
  // Carga el contenido de un PHP en un objeto DIV, vía POST
  ////////////////////////////////////////////////////////////////
  function RefreshObjPost(purl, podiv, pcForm) {

    var params = '';

    // Compone los parámetros del form
    var elem = document.getElementById(pcForm).elements

    for(var i = 0; i < elem.length; i++){
      
      if(params!=""){
        // Si ya tiene valor, le añade el separador de parámetros
        params += "&"
      }
      
      //params += "<b>Type:</b>" + elem[i].type + "&nbsp&nbsp";
      //params += "<b>Name:</b>" + elem[i].name + "&nbsp;&nbsp;";
      //params += "<b>Value:</b><i>" + elem[i].value + "</i>&nbsp;&nbsp;";
      
      // Compone los parámetros
      params += elem[i].name + "=" + elem[i].value;
	  
	  //alert(elem[i].name + " - " + elem[i].value);
    }
    
    // Asigna el nombre del objeto DIV donde se asignará el resultado
    div = podiv;
    
    if(window.XMLHttpRequest) {
        req = new XMLHttpRequest();
    } else if(window.ActiveXObject) {
        req = new ActiveXObject("Microsoft.XMLHTTP");
    }
    req.open("POST", purl, true);

    //Envía la información de la cabecera
    req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    req.setRequestHeader("Content-length", params.length);
    req.setRequestHeader("Connection", "close");
    
    req.onreadystatechange = callback;
    req.send(params);
  }
  
  ////////////////////////////////////////////////////////////////
  // Devuelve el identificador de un objeto pasado como parámetro
  ////////////////////////////////////////////////////////////////
   function getObject(obj) {
        var o;
        if(document.getElementById) o = document.getElementById(obj);
        else if(document.all) o = document.all.obj;    
        return o;    
    }

  ////////////////////////////////////////////////////////////////
  // MÉTODO PRIVADO (por no haber sido declarado arriba).  
  //  Gestiona la solicitud de la petición.  Cuando termine,
  // asigna al objeto DIV el resultado
  ////////////////////////////////////////////////////////////////
  function callback () {
       if(req.readyState == 4 && req.status == 200) {
           var response = req.responseXML;    
           var resp = response.getElementsByTagName("response");
        getObject(div).innerHTML = resp[0].getElementsByTagName("content")[0].childNodes[0].nodeValue;
       }
  }

}
