// Recordamos los valores por si falla la llamada poder repetirla
var doAjax_url;
var doAjax_f;
var doAjax_loading;
var doAjax_error = false;
var doAjax_intentoserror = 0;
var req;

function doAjaxv2(url,f,loading)
{
// FUNCIÓN GENÉRICA: se le pasa en url la dirección del XML a cargar (incluidos parámetros) 
//                   en f el nombre de la función a ejecutar cuando el XML esté cargado
//					 y en loading la función a ejecutar mientras el XML está cargando.					 
	doAjax_url = url;
	doAjax_f = f;
	doAjax_loading = loading;

	// branch for native XMLHttpRequest object
    if (window.XMLHttpRequest) 
	{
        req = new XMLHttpRequest();
        req.onreadystatechange = ajaxcheckv2;
        req.open("GET", url, true);
        req.send(null);
    	// branch for IE/Windows ActiveX version
    } 
	else if (window.ActiveXObject) 
	{
        req = new ActiveXObject("Microsoft.XMLHTTP");
        if (req) 
		{
            req.onreadystatechange = ajaxcheckv2;
            req.open("GET", url, true);
            req.send();
        }
    }
}

function ajaxcheckv2()
{		
	try
	{
		v = req.readyState;
		if (v == 4)
		{
			// only if "OK"
			if (req.status == 200)
			{
				// ...processing statements go here...
				doAjax_intentoserror = 0;
				eval(doAjax_f);
			}
		}
	}
	catch(e) 
	{
		if(doAjax_intentoserror < 3)
			if(confirm('Ha ocurrido un error de comunicación con el servidor. ¿Desea reintentar?'))
			{
				doAjax_intentoserror ++;
				doAjax(doAjax_url,doAjax_f,doAjax_loading);
			}
			else
			{
				doAjax_intentoserror = 0;			
				hideerror('ERROR: No se ha podido establecer comunicación con el servidor.');
			}
		else
		{
			alert('Error de comunicación con el servidor.\nPor favor, vuelva a intentarlo pasados unos minutos.');
			doAjax_intentoserror = 0;
			hideerror('ERROR');
		}
	}
}
