
/**
 * KML con las resultados geocodificados.
 */
var resultadoGeoCodificados;

/**
 * Cuando el select de la provincia cambia, se actualiza el select de las carreteras y municipios.
 *
 * @return
 * @type void
 */
function onProvinceChanged() {
	
	verFila('municipio00', true);
	verFila('municipio01', true);
	
	verFila('carretera00', true);
	verFila('carretera01', true);
	
	var select = document.getElementById('provinceId');
	
	var provinceSelectedIndex = select.options[select.selectedIndex].value; 
	
	var provinceSelected = select.options[select.selectedIndex].text;
	
	var selectMunicipio = document.getElementById('municipioId');
	
	selectMunicipio.length = 0;
	
	var url = 'MunicipioESSelect';
	var urlRoad = 'CarreteraESSelect';
	
	if (provinceSelectedIndex != 0) {
		url += '?provincia=' + encodeURIComponent(provinceSelected);
		urlRoad += '?provincia=' + encodeURIComponent(provinceSelected);
		
		new Ajax.Request(
			url,
			{
				method:'post',
				asynchronous:false,
				onComplete:function(request) {
					updateSelect(request, 0, [], 'municipioId');
				},
				onLoading:function(request) {
					addOption('municipioId', 'Cargando...', 1);
				}
			}
		);
		
	} else {
		urlRoad = 'CarreteraPrincipalESSelect';
		
		var option = document.createElement('option');
		
		option.text = 'Municipios';
		option.value = 0;
	
		var municipioSelect = document.getElementById('municipioId');
				
	    try {
			municipioSelect.add(option, null); // standards compliant
		} catch (ex) {
			municipioSelect.add(option); // IE only
		}
		
	}
	
	new Ajax.Request(
		urlRoad,
		{
			method:'post',
			asynchronous:false,
			onComplete:function(request) {
				updateSelect(request, 0, [], 'roadId');
			},
			onLoading:function(request) {
				addOption('roadId', 'Cargando...', 1);
			}
		}
	);
	
}

/**
 * Cuando el select del municipio cambia, se oculta el select de las carreteras.
 *
 * @return
 * @type void
 */
function onMunicipioChanged() {
	var municipio = document.getElementById('municipioId');
	
	var municipioSeleccionadoIndice = municipio.options[municipio.selectedIndex].value; 
	
	var municipioSeleccionado = municipio.options[municipio.selectedIndex].text;
	
	if (municipioSeleccionadoIndice != 0) {
		verFila('carretera00', false);
		verFila('carretera01', false);
	} else {
		verFila('carretera00', true);
		verFila('carretera01', true);
	}
}

/**
 * Cuando el select de las carreteras cambia, se oculta el select de los municipios.
 *
 * @return
 * @type void
 */
function onRoadChanged() {

	var carretera = document.getElementById('roadId');
	
	var carreteraSeleccionadaIndice = carretera.options[carretera.selectedIndex].value;
	
	var carreteraSeleccionada = carretera.options[carretera.selectedIndex].text;

	if (carreteraSeleccionadaIndice != 0) {
		verFila('municipio00', false);
		verFila('municipio01', false);
	} else {
		verFila('municipio00', true);
		verFila('municipio01', true);
	}
}

/**
 * Se busca todos los puntos para los valores seleccionados y recibe la respuesta en cadenas con formato XML para luego procesarlas y mostrarlas.
 *
 * @return
 * @type void
 */
function estaciones() {
	
	verFila("lateralErrorServicio00",false);
	verFila("lateralErrorServicio01",false);
	verFila("lateralErrorServicio02",false);
	
	var inf = document.getElementById("informe");
	var i;
	var tam = inf.rows.length;
	for (i = 0 ; i < tam - 1; i++) {
		inf.deleteRow(1);
	}
	
	verFila("informe",false);
	verFila("informeTam",false);
	
	map.clearOverlays();
	
	var provincia = document.getElementById('provinceId');
	
	var provinciaSeleccionadaIndice = provincia.options[provincia.selectedIndex].value; 
	
	var provinciaSeleccionada = provincia.options[provincia.selectedIndex].text;
	
	var municipio = document.getElementById('municipioId');
	
	var municipioSeleccionadoIndice = municipio.options[municipio.selectedIndex].value; 
	
	var municipioSeleccionado = municipio.options[municipio.selectedIndex].text;
	
	var carretera = document.getElementById('roadId');
	
	var carreteraSeleccionadaIndice = carretera.options[carretera.selectedIndex].value;
	
	var carreteraSeleccionada = carretera.options[carretera.selectedIndex].text;
	
	var tipoCarburante = document.getElementById('tipoGasolinaId');
	
	var tipoCarburanteSeleccionado = tipoCarburante.options[tipoCarburante.selectedIndex].value;
	
	var url = 'LecturaEstacion';
	var buscar = false;
	
	if (provinciaSeleccionadaIndice != 0) {
		
		buscar = true;
		url += '?provincia=' + encodeURIComponent(provinciaSeleccionada);
		
		if (carreteraSeleccionadaIndice != 0) {
			
			url += '&carretera=' + carreteraSeleccionada;
			
		} else if (municipioSeleccionadoIndice != 0) {
			
			url += '&municipio=' + encodeURIComponent(municipioSeleccionado);
			
		} else {
			map.setCenter(new GLatLng(40.396764, -3.713379), 5);
			buscar = false;
			verFila("lateralErrorServicio00",true);
			verFila("lateralErrorServicio01",true);
			verFila("lateralErrorServicio02",true);
		}
	} else if (carreteraSeleccionadaIndice != 0){
		
		buscar = true
		url += '?carretera=' + carreteraSeleccionada;
		
	} else {
		map.setCenter(new GLatLng(40.396764, -3.713379), 5);
		buscar = false;
		verFila("lateralErrorServicio00",true);
		verFila("lateralErrorServicio01",true);
		verFila("lateralErrorServicio02",true);
	}
	
	if (tipoCarburanteSeleccionado != "Ninguna") {
		url += '&tipoCarburante=' + tipoCarburanteSeleccionado;
	}else{
		url += '&tipoCarburante=Gasolina98';
	}
	if (buscar) {
		new Ajax.Request(
			url,{
				method:'post',
				asynchronous:false,
				onSuccess: function(transport, json) {
					resultadoGeoCodificados = transport.responseText;
				}
			}
		);
		
		informeEstaciones();
	}
}

/**
 * Función que rellena el formulario lateral.
 *
 * @param {Object} myvar Elemento usado por google para referenciar al mapa.
 * @param {String} name Nombre del elemento que se está utilizando para el informe.
 * @param {String} type Tipo de elemento que se esta utilizando para el informe (en nuestro caso siempre serán marcas).
 * @param {int} i Posición dentro del KML.
 * @param {String} desc Descripción con toda la información necesaria para mostrarla en el informe.
 * @return
 * @type void
 */
function side(myvar,name,type,i,desc) {
	if (type == "marker") {
		var inf = document.getElementById("informe");
		var fila = inf.insertRow(inf.rows.length);
		
		var icono = fila.insertCell(0);
		var direccion = fila.insertCell(1);
		//var distribuidor = fila.insertCell(2);
		
		var urlInicio = '<a href="javascript:GEvent.trigger(' + myvar+ '.gmarkers['+i+'],\'click\')">';
		var urlFin = '</a>';
		
		var cadenaInicioInformacion = "<div id='oculto'>";
		var cadenaFinInformacion = "</div>";
		
		var descripcion = desc.substring(
							desc.indexOf(cadenaInicioInformacion) + cadenaInicioInformacion.length,
							desc.indexOf(cadenaFinInformacion));
		
		var informacion = descripcion.split("***");
		
		/*
		icono.innerHTML = urlInicio + "<img src=" + informacion[0] + " />" + urlFin;
		direccion.innerHTML = urlInicio + informacion[1] + urlFin;
		distribuidor.innerHTML = urlInicio + informacion[2] + urlFin;
		*/
		
		informacion[2] = informacion[2].toLowerCase();
		
		if (informacion[2] == "gasolinera no abanderada") {
			informacion[2] = "no abanderada";
		}
		
		var distribuidorArray = informacion[2].split(" ");
		
		if (distribuidorArray.length > 1) {
			for (var j = 0 ; j < distribuidorArray.length ; j++) {
				var caracterPrimero = distribuidorArray[j].charAt(0); 
				distribuidorArray[j] = caracterPrimero.toUpperCase() + distribuidorArray[j].substring(1);
			}
		} else {
			var caracterPrimero = distribuidorArray[0].charAt(0); 
			distribuidorArray[0] = caracterPrimero.toUpperCase() + distribuidorArray[0].substring(1);
		}
		
		var distribuidorStr = "";
		
		for (var j = 0 ; j < distribuidorArray.length ; j++) {
			distribuidorStr += " " + distribuidorArray[j];
		}
		
		informacion[2] = distribuidorStr;
		
		icono.innerHTML = urlInicio + informacion[1] + urlFin;
		direccion.innerHTML = urlInicio + informacion[2] + urlFin;
		
		if (informacion.length > 3) {
			//se ha seleccionado un carburante
			//var precioCarburante = fila.insertCell(3);
			var precioCarburante = fila.insertCell(2);
			
			if (informacion[3] == '--') {
				informacion[3] = "Sin datos";
			}
			
			precioCarburante.innerHTML = urlInicio + informacion[3] + urlFin;
			
			verFila("informeCarburante", true);
			
			//var tipoCarburante = document.getElementById('tipoGasolinaId');
			
			//var tipoCarburanteSeleccionado = tipoCarburante.options[tipoCarburante.selectedIndex].text;
			
			document.getElementById("informeCarburante").innerHTML = 'PRECIO';
		} else {
			verFila("informeCarburante",false);
		}
			
	}
	return "";
}

/**
 * Función que genera los puntos y los informes tras recibir el KML.
 *
 * @return
 * @type void
 */
function informeEstaciones() {
	var xotree = new XML.ObjTree();
	var inf = document.getElementById("informe");
	var i;
	var tam = inf.rows.length;
	for (i = 0 ; i < tam - 1; i++) {
		inf.deleteRow(1);
	}
	exml = new EGeoXml(
		"exml",
		map,
		null,
		{
			sidebarid:"sidebar",
			nozoom:false,
			sortbyname:false,
			sidebarfn:side,
			iwoptions:{maxHeight:200,autoScroll:true}
		});
	
	verFila("idIcono", false);
	
	exml.parseString(resultadoGeoCodificados);
	
	//poner información en la barra lateral.
	verFila("informeTam", true);
	verFila("informe", true);
}
