
var http = getHTTPObject();

var usandoRaton = false;
var divResults='';
var ctrNombre='';

/**
url que se pedirá al servidor para las sugerencias
*/
function formarUrlEval(accion) {
	return 	"'Buscador?accion="+accion+"&calle='+val('calle')+'&numero='+val('numero')+'&idmunicipio='+val('idmunicipio')+" +
			"'&idprovincia='+val('idprovincia')+'&cp='+val('cp')+'&distancia='+val('distancia')+'&unidadDistancia1='+val('unidadDistancia1')+" +
			"'&tipoCentro1='+val('tipoCentro1')+'&tratamiento='+quitarTildes(val('tratamiento'))+'&sintoma='+quitarTildes(val('sintoma'))+" +
			"'&nombre='+quitarTildes(val('nombre'))+'&producto='+quitarTildes(val('producto'))+'&gmapsLat='+val('gmapsLat')+" + 
			"'&gmapsLong='+val('gmapsLong')";
}

function quitarTildes(s) {
	var r = s.replace(/Á/, "A").replace(/É/, "E").replace(/Í/, "I").replace(/Ó/, "O").replace(/Ú/, "U");
	return	r.replace(/á/, "a").replace(/é/, "e").replace(/í/, "i").replace(/ó/, "o").replace(/ú/, "u");
}

function actdesplegable(nombre,valor,frm)
{
	if (!frm) frm = "formu";
	for (var i=0;i<eval('document.getElementById("'+frm+'").'+nombre+'.length');i++)
	{
		  if (eval('document.getElementById("'+frm+'").'+nombre+'.options[i].value')==valor)
          {eval('document.getElementById("'+frm+'").'+nombre+'.selectedIndex=i');return}
	}
	//Si no encuentra ningún option con ese value, se busca por texto
	for (var i=0;i<document.getElementById(frm)[nombre].length;i++)
	{
		  if (document.getElementById(frm)[nombre].options[i].text==valor)
          {document.getElementById(frm)[nombre].selectedIndex=i;return}
	}	
}

/*
function handleHttpResponse() {

  if (typeof http !='undefined' && http.readyState == 4) {
	
	var resul=http.responseXML; //alert(http.responseText);
		
	if(resul && resul.documentElement && resul.documentElement.nodeName!='vacio'){
		
		var nodos = resul.documentElement.childNodes;
		
		gsc_emptyresults(document.getElementById(divResults));
		
		for (i=0; i<nodos.length; i++) 
           {
	  			if (nodos[i].childNodes[0]) 
	  			{	  		
		  		//lista=lista+nodos[i].childNodes[0].nodeValue+"<br/>";
				//PARA MOSTRAR EL NÚMERO DE COINCIDENCIAS EN LA PARTE DERECHA																												
				//gsc_addresult(document.getElementById('search-servicios'), document.getElementById('tratamiento'), nodos[i].childNodes[0].nodeValue,nodos[i].attributes[0].value, i == 0);
				 gsc_addresult(document.getElementById(divResults), document.getElementById(ctrNombre), nodos[i].childNodes[0].nodeValue,"", i == 0);						      	
				}
            }
 		gsc_show(document.getElementById(divResults));
	}		  	
  }
}
*/

function recibido(xml) {
	
	if(xml && xml.documentElement && xml.documentElement.nodeName!='vacio'){
		
		var nodos = xml.documentElement.childNodes;
		
		gsc_emptyresults(document.getElementById(divResults));
		
		for (i=0; i<nodos.length; i++) 
           {
	  			if (nodos[i].childNodes[0]) 
	  			{	  		
		  		//lista=lista+nodos[i].childNodes[0].nodeValue+"<br/>";
				//PARA MOSTRAR EL NÚMERO DE COINCIDENCIAS EN LA PARTE DERECHA																												
				//gsc_addresult(document.getElementById('search-servicios'), document.getElementById('tratamiento'), nodos[i].childNodes[0].nodeValue,nodos[i].attributes[0].value, i == 0);
				 gsc_addresult(document.getElementById(divResults), document.getElementById(ctrNombre), nodos[i].childNodes[0].nodeValue,"", i == 0);						      	
				}
            }
 		gsc_show(document.getElementById(divResults));
	}	
}

function handleHttpResponseSelect() {

  if (typeof http !='undefined' && http.readyState == 4) {
	desBloquearCamposBusqueda();

	var resul=http.responseXML; //alert(http.responseText);
		
	if(resul && resul.documentElement && resul.documentElement.nodeName!='vacio'){
		
	  	gsc_vaciarSelect(document.getElementById(ctrNombre));
		
		var nodos = resul.documentElement.childNodes;
		
		for (i=0; i<nodos.length; i++) 
           {
           
	  			if (nodos[i].childNodes[0]) 
	  			{	  		
				 gsc_addresultSelect(document.getElementById(ctrNombre), nodos[i].childNodes[0].nodeValue, nodos[i].attributes[0].childNodes[0].nodeValue);
				}
            }
	} else {
	  	gsc_vaciarSelect(document.getElementById(ctrNombre), "(No se ha encontrado ningún centro)");
	}		  	
	cargandoTipos = false;	
	
	// ocultar imagen cargando
	if(get("ctr_cargando"))
		get("ctr_cargando").style.display='none';
  }
}

function handleHttpResponseSelectInit() {



  if (typeof http !='undefined' && http.readyState == 4) {
	gsc_vaciarSelect(document.getElementById('idmunicipio'));	
	var resul=http.responseXML; 

	if(resul && resul.documentElement && resul.documentElement.nodeName!='vacio'){
		var nodos = resul.documentElement.childNodes;
		
		for (i=0; i<nodos.length; i++) 
           {
           		if (nodos[i] && nodos[i].childNodes[0]) 
	  			{	  		
					gsc_addresultSelect(document.getElementById('idmunicipio'),nodos[i].childNodes[0].nodeValue, nodos[i].attributes[0].childNodes[0].nodeValue);
				}
            }

		p_municipio=document.getElementById('idmunicipio1').value;
		var frm;
		if (get("frmFormu")) {
			frm = "frmFormu";
		} else {
			frm = "formu";
		}
		actdesplegable('idmunicipio',p_municipio, frm);
	}		  	
  }
}

function invocar(url){
	
	if (ctrNombre=='tipoCentro' || ctrNombre=='idmunicipio') {
		http.open("GET", url, true);	
		http.onreadystatechange = handleHttpResponseSelect;
		http.send(null);
	}else if(ctrNombre == 'inicio') {
		http.open("GET", url, true);	
		http.onreadystatechange = handleHttpResponseSelectInit;
		http.send(null);				
	} else {
		//http.onreadystatechange = handleHttpResponse;
		
		//var nombreDiv = "#ctr_" + ctrNombre;
		
		// mostrar mensaje cargando
		$("#ctr_cargando").ajaxStart(function(){
		  //bloquearCamposBusqueda();
		  $(this).show();
		});
		
		// llamada ajax
		$.get(url, {}, function(data) {
			recibido(data);
		});
		
		// ocultar mensaje cargando
		$("#ctr_cargando").ajaxStop(function(){
		  $(this).hide();
		  desBloquearCamposBusqueda();
		});
	}	
}

function getHTTPObject() {
  var xmlhttp;
  try {
	xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
  } catch (e) {
	 try {
		xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
	 } catch (E) {
		xmlhttp = false;
	 }
  }
  
  if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
	try {
	  xmlhttp = new XMLHttpRequest();
	} catch (e) {
	  xmlhttp = false;
	}
  }
  return xmlhttp;
}

/*googlesuggestclone.js */

var gsc_basicmatch = /[a-z0-9]/i;

var intValue = 0, tIni, tAct;
var key, nombre, results, accion;
function retardo(e,nombre,results,accion) {
	key=e.keyCode? e.keyCode : e.charCode;
	
	if(get('idprovincia').value=='' && key!=27 && key!=38 && key!=40){
		alert('Debe rellenar el campo obligatorio provincia');
		return false;
	}

	this.nombre = nombre;
	this.results = results;
	this.accion = accion;
	tAct = new Date().getTime();
	
	if (key==27 || key==38 || key==40) keyCode();
	if(nombre!='tipoCentro' && document.getElementById(nombre).value.length<3) {
		tIni = tAct;
		return;
	}
	if (tAct - tIni < 1500) {
		intValue=window.clearTimeout(intValue);
		intValue=window.setTimeout("keyCode()", 1500);
	} else 
		keyCode();
	tIni = tAct;
}

//function keyCode(key,nombre,results,accion)//event,nombre control, div resultados, accion
function keyCode()//event,nombre control, div resultados, accion
/*
accion=1 se llama desde el desplegable de tipos de centro <- esta no se usa esta en esta función
accion=2 se llama desde el campo tratamiento
accion=3 se llama desde el campo síntoma
accion=4 se llama desde el campo productos
*/
{

	usandoRaton = false;

	//var key=e.keyCode? e.keyCode : e.charCode
	
  //  key = getKeycode(e);
    
    switch (key) {
        case 27: // escape
            gsc_hide(document.getElementById(results));
            return false;
            break;
        case 38: // up arrow
            gsc_handleup(document.getElementById(results), document.getElementById(nombre));
            return false;
            break;
        case 40: // down arrow
            gsc_handledown(document.getElementById(results), document.getElementById(nombre));
            return false;
            break;
        default:
        	if(nombre!='tipoCentro')
	        	if (document.getElementById(nombre).value.length<3) return;
        	
        	divResults=results;
        	ctrNombre=nombre;

			// Buscar dirección en gmaps antes de hacer la llamada a invocar(url)
			var urlEval = formarUrlEval(accion);	
			var jsEncontrada = 'invocar(' + urlEval + ');';
			var jsNoEncontrada = "alert('No se ha encontrado la dirección especificada.');";
			gmapsBuscarDireccion(jsEncontrada, jsNoEncontrada);	
        	
        	break;
            //%3\$s.start();
    }
    return true;
}


/**
	Flag que indica si hay que volver a cargar la lista de tipos
*/
var cargarTipos = true;

/**
	Flag que indica si la lista de tipos se está cargando
*/
var cargandoTipos = false; 

function select_Focus(nombre, accion)
/*
accion=1 se llama desde el desplegable de tipos de centro <- sólo se usa esta en esta función
accion=2 se llama desde el campo tratamiento
accion=3 se llama desde el campo síntoma
accion=4 se llama desde el campo productos
*/
{
	if (!cargarTipos || cargandoTipos) {
		// Si no hay que volver a cargar la lista o ya se está cargando, salimos de la función
		return true;
	}

	if(get('idprovincia').value == 0) {
		alert('Debe rellenar el campo obligatorio provincia');
		return false;
	}	
	
	cargarTipos = false;
	cargandoTipos = true;
	
	var select = get(nombre);
	select.options.length = 0;
	select.options[select.options.length] = new Option("(Cargando tipos de centro...)", "0");

	ctrNombre=nombre;
	
	// mostrar imagen cargando
	if(get("ctr_cargando"))
		get("ctr_cargando").style.display='block';

	// Buscar dirección en gmaps antes de hacer la llamada a invocar(url)
	var urlEval = formarUrlEval(accion);	
	var jsEncontrada = 'invocar(' + urlEval + ');';
	var jsNoEncontrada = "alert('No se ha encontrado la dirección especificada.');";
	gmapsBuscarDireccion(jsEncontrada, jsNoEncontrada);	

    return true;
}

function select_Init(nombre)
{
	ctrNombre='inicio';
	var url='/servlet/G_Centros?idprovincia=' + get('idprovincia').options[get('idprovincia').selectedIndex].value;
	invocar(url);
}

function select_FocusProvincia(nombre)
{
	ctrNombre=nombre;
	var url='/servlet/G_Centros?idprovincia=' + get('idprovincia').options[get('idprovincia').selectedIndex].value;
	invocar(url);
    return true;
}

function gsc_getquery(elt, q)
{
    q = ltrim(q);
    q = q.replace('\s+', ' ');
    if (q.length == 0 || !gsc_basicmatch.test(q)) {
        gsc_emptyresults(elt);
        return '';
    }
 
    if (elt.currentQuery && (elt.currentQuery == q || elt.tempQuery == q))
        return '';
 
    elt.currentQuery = q;
    return q;
}
 
function gsc_hide(elt)
{
    if (elt) elt.style.display = 'none';
}

function gsc_hideOnBlur(elt) {
	if (!usandoRaton) gsc_hide(elt);
}
 
function gsc_ishidden(elt)
{
    return elt.style.display == 'none';
}
 
function gsc_show(elt)
{
    if (elt) elt.style.display = 'block';
}
 
function gsc_emptyresults(elt)
{
    if (!elt) return;
 
    elt.innerHTML = '';
    elt.numResults = 0;
    elt.selectedIndex = 0;
    elt.results = [];
    gsc_hide(elt);
}
 
function gsc_vaciarSelect(select, opcion0)
{
	if (!opcion0) opcion0 = "(Seleccione un tipo de centro)";
	select.options.length = 0;
	if (ctrNombre=='tipoCentro') select.options[select.options.length] = new Option(opcion0, "0");
} 

function gsc_addresult(elt, qElt, q, c, sel)
{
    if (!elt) return;
 
    if (sel) elt.selectedIndex = elt.numResults;
 
    idx = elt.numResults;
    elt.results[elt.numResults++] = q;
 
    var _res = '';
    _res += '<div class="' + (sel ? 'srs' : 'sr') + '"'
         +  ' onmouseover="gsc_mouseover(\'' + elt.id + '\', \'' + qElt.id + '\', ' + idx + ')"'
         +  ' onmouseout="gsc_mouseout(\'' + elt.id + '\', ' + idx + ')"'
         +  ' onclick="gsc_mouseclick(\'' + elt.id + '\', \'' + qElt.id + '\', ' + idx + ')">';
    _res += '<span class="srt">' + q + '</span>';
    if (c.length > 0)
        _res += '<span class="src">' + c + '</span>';
    _res += '</div>';
 
    elt.innerHTML += _res;
}
 
function gsc_addresultSelect(select, valor, id)
{
	//valor = cambiarTildes(valor);
	if (window.location.href.indexOf("/servlet/centros/Buscador") != -1) {
		if (valor == "(Localidad desconocida)") {
			valor = "(Todas las localidades)";
		} 
	}
	select.options[select.options.length] = new Option(valor, id);
} 
 
function gsc_mouseover(id, qId, idx)
{
	usandoRaton = true;
	
    elt = document.getElementById(id);
    elt.selectedIndex = idx;
    qElt = document.getElementById(qId);
    qElt.focus();
 
    gsc_highlightsel(elt);
}
 
function gsc_mouseout(id, idx)
{
    elt = document.getElementById(id);
    elt.selectedIndex = -1;
 
    gsc_highlightsel(elt);
}
 
function gsc_mouseclick(id, qId, idx)
{
	usandoRaton = true;

    elt = document.getElementById(id);
    qElt = document.getElementById(qId);
 
    qElt.value = elt.results[idx];
    //aqui: no enviar qElt.form.submit();
    gsc_hide(elt);
}
 
function gsc_handleup(elt, qElt)
{
    if (elt.numResults > 0 && gsc_ishidden(elt)) {
        gsc_show(elt);
        return;
    }
 	 
     if (elt.selectedIndex == 0)
        return;
    else if (elt.selectedIndex < 0)
         elt.selectedIndex = elt.numResults - 1;
    else
        elt.selectedIndex--;
        
    gsc_highlightsel(elt,qElt);
    //gsc_highlightsel(elt);
}
 
function gsc_handledown(elt, qElt)
{
    if (elt.numResults > 0 && gsc_ishidden(elt)) {
        gsc_show(elt);
        return;
    }
 
 	if (elt.numResults==1) // Un resultado
	 	gsc_highlightsel(elt, qElt);
    else if (elt.selectedIndex == elt.numResults-1)
        return;
    else if (elt.selectedIndex < 0)
        elt.selectedIndex = 0;
    else
        elt.selectedIndex++;
        
    gsc_highlightsel(elt, qElt);
}
 
function gsc_highlightsel(elt, qElt)
{
    divs = elt.getElementsByTagName('div');
 
    for (i = 0; i < divs.length; i++) {
        if (i == elt.selectedIndex) {
            divs[i].className = 'srs';
            elt.tempQuery = elt.results[i];
 
            if (qElt) {
                qElt.value = elt.results[i];
                if (qElt.createTextRange) {
                    r = qElt.createTextRange();
                   // r.moveStart('character', elt.currentQuery.length);
                    r.moveStart('character', 1);
                    r.moveEnd('character', qElt.value.length);
                    r.select();
                }
            }
        }
        else
            divs[i].className = 'sr';
    }
}

function cambiarTildes(valor) {
	return valor.replace(/#N#/, 'Ñ');
}

