var showErrors = true;
//
// FUNCION GENERAL - crea una instancia XMLHttpRequest
//
function createXmlHttpRequestObject() 
{
 
  // almacenará la referencia al objeto XMLHttpRequest
   var xmlHttp;
   // esto debe funcionar para todos los navegadores excepto IE6 y más antiguos
  try
  {
    // intenta crear el objeto XMLHttpRequest
    xmlHttp = new XMLHttpRequest();
  }
  catch(e)
  {
    // asume IE6 o más antiguo
    var XmlHttpVersions = new Array("MSXML2.XMLHTTP.6.0",
                                    "MSXML2.XMLHTTP.5.0",
                                    "MSXML2.XMLHTTP.4.0",
                                    "MSXML2.XMLHTTP.3.0",
                                    "MSXML2.XMLHTTP",
                                    "Microsoft.XMLHTTP");
    // prueba cada id hasta que uno funciona
    for (var i=0; i<XmlHttpVersions.length && !xmlHttp; i++) 
    {
      try 
      { 
        // prueba a crear el objeto XMLHttpRequest
        xmlHttp = new ActiveXObject(XmlHttpVersions[i]);
      } 
      catch (e) {} // ignora error potencial
    }
  }
  // devuelve el objeto creado o muestra un mensaje de error
  if (!xmlHttp)
    displayError("Error al crear el objeto XMLHttpRequest.");
  else 
    return xmlHttp;
}

// función que muestra un mensaje de error
function displayError($message)
{
  // ignora errores si showErrors es falso
  if (showErrors)
  {
    // devuelve error mostrando Off
    showErrors = false;
    // muestra mensaje error
 
    alert("Error encontrado: \n" + $message);
    // reintenta validación después de 10 segundos
    setTimeout("validar();", 10000);
  }
}// contiene una instancia de XMLHttpRequest

//
//
// DESPLEGAR CONSULTA
// Función llamada por el evento. Permite que se lleve a cabo todo el proceso ayax, haciendo interactuar las anteriores funciones
// primer parámetro es la url a la que se quiere enviar la peticion
// segundo parámetro es la peticion misma
// tercer parámetro es la función que se ejecutará en la página y es la que procesará los devuelto por la petición
// cuarto parámetro es el tipo de petición (get o post)
// quinto parámetro le indicará a la funcion anterior que trate el tipo de datos como text si es 0 o como xml si es 1


function ejecutarPeticion(url,query,funcion,reqtype,getxml) 
{
	xmlHttp=createXmlHttpRequestObject();
//
// envia la peticion si el servidor no esta ocupado
//
//	if (xmlHttp.readyState == 4)|| (xmlHttp.readyState == 0)
  // cuando readyState es 4, leemos la respuesta del servidor
	xmlHttp.onreadystatechange = function()
										{
										if(xmlHttp.readyState == 4)
											{
											if(xmlHttp.status == 200)
												{
												var item = xmlHttp.responseText;
											    if(getxml==1)
													{
											        item = xmlHttp.responseXML;
													}
													eval(funcion + '(item)');
												}
											}
											
											else
											{     // si readyState ha cambiado
               									  // pero readyState <> 4
           									document.getElementById('resultados').innerHTML = '<img src="images/loading.gif">';
 											}
										}
	if(reqtype=='post')
		{
		Peticion_post(url,query,xmlHttp);
		}
	else
		{
		Peticion_get(url,query,xmlHttp);
		}
}
function Peticion_get(url, query, xmlHttp)
	{
	var Aleatorio=parseInt(Math.random()*99999999);
	xmlHttp.open("GET", url+"?"+query+"&rand="+Aleatorio, true);
	xmlHttp.send(null);
	}
// Función que realiza una petición POST
// primer parámetro es la url a la que se quiere enviar la peticion
// segundo parámetro es la peticion misma
// tercer parámetro es el nombre de la instancia del objeto XMLHTTPRequest
function Peticion_post(url, query, xmlHttp)
	{
	xmlHttp.open("POST", url, true);
	xmlHttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
	xmlHttp.send(query);
	}
	
// Función que determina si la respuesta que se recibe es como texto o como xml
// primer parámetro es el nombre de la función que queremos usar para procesar la respuesta
// segundo argumento le indicara si lo que tiene que manejar para los datos devueltos es como texto o como xml
function llamar_Funcion(funcion,item)
	{
	eval(funcion + '(item)');
	}
//
// DESPLEGAR CONSULTA - Muestra los testimonios en la tabla testimonios
//
function muestra_consulta(resultado)
{
	document.getElementById("resultados").innerHTML=resultado;
}
