﻿/*
 * Librería que contiene las funciones para crear los objetos AJAX y recuperar los datos
 */

function nuevoAjax(xmlhttp){

   try {
       xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
    } 
   catch (e) {
       try {
         xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
      } 
      catch (E) {
          xmlhttp = false;
      }
   }
   if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
      xmlhttp = new XMLHttpRequest();
   }
   return xmlhttp
}

function cargarContenido(pagina,destino){
   var contenedor;
   var ajax;
   
   contenedor = document.getElementById(destino);
   ajax = nuevoAjax(ajax);
   ajax.open("GET", pagina, true);
   ajax.onreadystatechange=function() {
      if (ajax.readyState==4) {
         contenedor.innerHTML = ajax.responseText;
      }
   }
   ajax.send(null);
}





function ObtenerObjetoAjax() 
{ 		
	var peticionHttp = null;
	try
	{
		//Comprobación para navegadores Firefox, Opera y Safari
		if (window.XMLHttpRequest) 
		{
			peticionHttp = new XMLHttpRequest();
		}
		//Comprobación para navegadores IE
		
		else if (window.ActiveXObject) 
		{
			//Comprobamos para JavaScript 5.0. Si da error,
			//creamos un objeto con la versión anterior
			
			try
			{
				peticionHttp = new ActiveXObject("MSXML2.XMLHTTP.3.0");
			}
			catch (e1) 
			{
				peticionHttp = new ActiveXObject("Microsoft.XMLHTTP");
			}
		}
		//Comprobación para IceBrowser
		else if (window.createRequest) 
		{
			peticionHttp = window.createRequest();
		}
		//Si el navegador no soporta ajax retornamos null
		else
		{
			peticionHttp = null;
			
		}
	}
	catch (e2) 
	{
		return null;
	}
	return peticionHttp;
}

function ObtenerDatosASinc(url, tipoResultado, metodo, parametrosPost,cacheDatos, funcionPintarDatos) 
{
    try
    {
        //Obtenemos la instancia del objeto XmlHttpObject
        //funcionPintarDatos('<img src="img/cargando.gif" />');
        var objAjax = ObtenerObjetoAjax();
        //Nos suscribimos al evento onreadystatechange para manejar los
        //posibles estados de la petición para que se lance la
        //función recibida por parámetro

        objAjax.onreadystatechange = function()
        {
            switch (objAjax.readyState) 
            {
                //Petición no inicializada
                case 0:
                    break;              

                //Conexión con el servidor establecida
                //(llamada a send)

                case 1:
                    break;               

                //Enviando petición
                case 2:
                    //Aquí se podría mostrar un gif que indicase
                    //que se está realizando la petición al servidor
                    //Habría que ocultarlo en el caso 4,
                    //cuando ya se ha recibido la respuesta
                    break;                 

                //Recibiendo petición
                case 3:

                    break;
                 

                //Respuesta del servidor recibida
                case 4:

                    //Si el status code de la respuesta es 200,
                    //todo ha ido bien
                    if (objAjax.status == 200) 
                    {
                        switch (tipoResultado) 
                        {
                            case 'XML':
                            funcionPintarDatos(objAjax.responseXML);
                            break;

                            case 'TEXT':
                            funcionPintarDatos(objAjax.responseText);
                            break;

                            default:
                            funcionPintarDatos(objAjax.responseText);

                            break;
                        }
                    }

                    //Si no, no ha ido bien y retornamos el texto
                    //equivalente al status code

                    else 
                    {
                        switch (tipoResultado) 
                        {
                            case 'XML':
                                funcionPintarDatos('<a>' + objAjax.statusText + '</a>');
                                break;

                            case 'TEXT':
                                funcionPintarDatos(objAjax.statusText);
                                break;

                            default:
                                funcionPintarDatos(objAjax.statusText);
                                break;
                        }
                    }
                    break;                     

                //No hay más estados en la petición,
                //por lo que no hacemos nada

                default:
                    break;
            }
        };         

        //Si realizamos la petición por POST
        if (metodo == 'POST') 
        {
            //Si no recibimos parámetros ponemos la variable a null
            if (parametrosPost == 'undefined' || !parametrosPost) 
            {
                parametrosPost = null;
            }      

            objAjax.open('POST', url, true);
            objAjax.setRequestHeader('Content-type','application/x-www-form-urlencoded');
            objAjax.send(parametrosPost);
        }

        //Si no la realizamos por GET.
        else {            

            //Internet Explorer cachea las peticiones por GET,
            //por lo que agregamos un parametro random si se
            //quiere evitar

            if (!cacheDatos) 
            {
                var separadorUrl = (url.indexOf('?') > -1) ? '&' : '?';

                url += separadorUrl + 'rndCache=' + Math.random();
            }                        
            objAjax.open('GET', url, true);
            objAjax.send(null);
        }
    }

    catch (e) 
    {
        //Si hay un error mostramos su mensaje
        alert(e.message);
    }
}
