﻿//Funcione ajax
//parametros: 	url	=dirección de petición
//			tipo	= tipo de respuesta que se desea obtener
//			asc 	= modo en el que va a comunicar: si es FALSE (0) hará una comunicación SINCRONA, mientras que si es (1) TRUE lo hara de forma ASINCRONA ()en modo asincrono no permite más de dos o tres comunicaciones simultaneas por lo que se recomienda el valor false.  
//EJEMPLO de USO
//	function buscarImagen(){
//		pal  =   FormSelCatalogo.palclave.value;							// obtengo un valor de filtro de la url
//		url = 'CatalogoListaImg.asp?palclave=' + pal;						// Monto la cadena que voy a pasar como url
//		document.getElementById('Catalogo').innerHTML=HttpRequestAjax(url,0,0);	// llamo a la función ajax y la respuesta que en este caso es tipo texto la inserto como HTML en un elemento de la página
//	}	

function HttpRequestAjax(url,tipo,asc)
{
    procesando=true;
	
	(asc == 0)?asinc=false:asinc=true;		// asinc=false comunicacion SINCRONA si es asinc=true la comunicacion es ASINCRONA (la segunda no se recomienda para multiples procesos ajax simultaneos)
	(tipo != 0)?tipo=1:tipo=0;				// tipo=0  devuelve texto    tipo=1 devuelve XML

    // alert(asinc.toString() + '\n' + tipo.toString());

	xmlHttp=GetXmlHttpObject();
	if (xmlHttp==null)
	{
		  alert ("Su navegador no soporta Tecnología AJAX!");
		  return;
	}
//	xmlHttp.onreadystatechange=stateChanged;
	//alert("Estamos en httpRequestAjax");
	//xmlHttp.onreadystatechange=eval(respuesta);
	url = AnsiUtf8(url);
	xmlHttp.onreadystatechange= HttpRespuestaOk;
	xmlHttp.open("POST",url,asinc);
	xmlHttp.send(null);
	while(procesando){
		//alert(procesando);
		xmlHttp.onreadystatechange= HttpRespuestaOk;
	}

	// bloquea el procedimiento hasta que hay respuesta
	//alert('antes de entrar \n' + procesando);
	// Solo si "OK"
	if (xmlHttp.status == 200 || xmlHttp.status == 304)
    {
		if(tipo==0)
		{
			resultado = xmlHttp.responseText;
			//document.getElementById(target).innerHTML = results;
			//return resultado;
		}else{
			resultado = xmlHttp.responseXML.documentElement;
			//return resultado;
		}
    } else {
		if(tipo==0)
		{
			resultado = 'ERROR';
			//return resultado;
	}else{
			resultado = "<?xml version='1.0' encoding='UTF-8'?><resultado><error>ERROR</error></resultado>";
			//return resultado;
		}
    }

	//alert('Fin:\n' + resultado);
	return resultado;

}

function HttpRequestForm(url, formid, tipo, asc){
         var Formulario = document.getElementById(formid);
         var longitudFormulario = Formulario.elements.length;
         var cadenaFormulario = "";
         var sepCampos;
         sepCampos = "";
         for (var i=0; i <= Formulario.elements.length-1;i++) 
		 {
         	cadenaFormulario += sepCampos+Formulario.elements[i].name+'='+encodeURI(Formulario.elements[i].value);
         	sepCampos="&";
		 }
		
		//alert(cadenaFormulario);
		 
		if(cadenaFormulario==""){ cadenaFormulario=null;}
		
		procesando=true;
	
		(asc == 0)?asinc=false:asinc=true;		// asinc=false comunicacion SINCRONA si es asinc=true la comunicacion es ASINCRONA (la segunda no se recomienda para multiples procesos ajax simultaneos)
		(tipo != 0)?tipo=1:tipo=0;				// tipo=0  devuelve texto    tipo=1 devuelve XML

		xmlHttp = GetXmlHttpObject();
  		if (xmlHttp==null)
	  	{
			alert ("Su navegador no soporta Tecnología AJAX!");
		  	return;
	  	}
		url = AnsiUtf8(url);
  		xmlHttp.open("POST",url,asinc);
		xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
		xmlHttp.onreadystatechange= HttpRespuestaOk;
		xmlHttp.send(cadenaFormulario);

		while(procesando){
			//alert(procesando);
			xmlHttp.onreadystatechange= HttpRespuestaOk;
		}

		// bloquea el procedimiento hasta que hay respuesta
		//alert('antes de entrar \n' + procesando);
		// Solo si "OK"
		if (xmlHttp.status == 200 || xmlHttp.status == 304)
	    {
			if(tipo==0)
			{
				resultado = xmlHttp.responseText;
				//document.getElementById(target).innerHTML = results;
				//return resultado;
			}else{
				resultado = xmlHttp.responseXML.documentElement;
				//return resultado;
			}
	    } else {
			if(tipo==0)
			{
				resultado = 'ERROR';
				//return resultado;
			}else{
				resultado = "<?xml version='1.0' encoding='UTF-8'?><resultado><error>ERROR</error></resultado>";
				//return resultado;
			}
	    }

		//alert('Fin:\n' + resultado);
		return resultado;
}

function GetXmlHttpObject()
{
	var xmlHttp=null;
	try
	  {
		  // Firefox, Opera 8.0+, Safari
		  xmlHttp=new XMLHttpRequest();
	  }
	catch (e)
	  {
		  // Internet Explorer
		  try
		    {
		  		xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
		    }
		  catch (e)
		    {
		  		xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
		    }
	  }
	return xmlHttp;
}

function HttpRespuestaOk() {
	// Solo si es "loaded"
	//procesando=true;
	//alert(xmlHttp.readyState + '\n Procesando: ' + procesando);
	if (xmlHttp.readyState == 4)
		{
			procesando=false;
		}
}

// Ajax hace todas sus comunicaciones en UTF 8 por lo que debemos hacer una conversión de Ansi a utf 8 con los string que así lo determinen
function AnsiUtf8(str){
	chrAnsi = new Array('À','Á','Â','Ã','Ä','Å','Æ','Ç','È','É','Ê','Ë','Ì','Í','Î','Ï','Ð','Ñ','Ò','Ó','Ô','Õ','Ö','×','Ø','Ù','Ú','Û','Ü','Ý','Þ','ß','à','á','â','ã','ä','å','æ','ç','è','é','ê','ë','ì','í','î','ï','ð','ñ','ò','ó','ô','õ','ö','÷','ø','ù','ú','û','ü','ý','þ','ÿ');

	utf8Hex = new Array('%C3%80','%C3%81','%C3%82','%C3%83','%C3%84','%C3%85','%C3%86','%C3%87','%C3%88','%C3%89','%C3%8A','%C3%8B','%C3%8C','%C3%8D','%C3%8E','%C3%8F','%C3%90','%C3%91','%C3%92','%C3%93','%C3%94','%C3%95','%C3%96','%C3%97','%C3%98','%C3%99','%C3%9A','%C3%9B','%C3%9C','%C3%9D','%C3%9E','%C3%9F','%C3%A0','%C3%A1','%C3%A2','%C3%A3','%C3%A4','%C3%A5','%C3%A6','%C3%A7','%C3%A8','%C3%A9','%C3%AA','%C3%AB','%C3%AC','%C3%AD','%C3%AE','%C3%AF','%C3%B0','%C3%B1','%C3%B2','%C3%B3','%C3%B4','%C3%B5','%C3%B6','%C3%B7','%C3%B8','%C3%B9','%C3%BA','%C3%BB','%C3%BC','%C3%BD','%C3%BE','%C3%BF');

	for (i=0; i<chrAnsi.length; i++){
	str=str.replace(chrAnsi[i],utf8Hex[i])
	}

	return str;
}


