var bMostrarPopup = true;

var provincias = ristra_provincias;
 document.getElementById('cboProvincia').options[document.getElementById('cboProvincia').options.length] = new Option ("", "");
 
 for (var provi=0; provi<provincias.length; provi++) 
 {
	document.getElementById('cboProvincia').options[document.getElementById('cboProvincia').options.length] = new Option (provincias[provi], ristra_codigos_provincias[provi]);

 }

//<![CDATA[
if (GBrowserIsCompatible()) 
{
	//INICIO
	var bMapaCargado = false;
	var map = null;
	var geocoder = null;
	var directions = null;
	var bounds = null;

	//Punto de inicio
	var ePuntoInicio	= null;
	var ehtmlInicio		= "";
	var bExistePuntoInicio = false;
	
	var zoom_max = 16; var zoom_min = 6; 
	var zoom_selec = 16;

	var arr_tiendas=[];
	//Array con la información de todas las tiendas que se indican en la izquierda
	var arr_tiendas_final=[];
	//Array para los puntos del mapa
	var gmarkers = [];
	//Array para el html de los bocadillos
	var htmls = [];
	
	var v_direccion;
	var v_provincia;
	var v_poblacion;
	var v_cp;
	var v_btienda;
	var v_bdistribuidor;
	var bCargarDatosMove = true;

	var gPrimeraVez = true;

	var global_sel_marker=null; //Se coloca una variable global con el punto seleccionado.
	var global_point_ruta_busqueda=null; // Punto de origen para la creación de rutas

	var bTiendaPrincipal=false; //Tienda principal de gran vía
	
	map = new GMap2(document.getElementById("map_canvas"));				
	map.addControl(new GScaleControl()); //add scale to map
	map.addControl(new GLargeMapControl());	//add large zoom and pan controls
	map.addControl(new GMapTypeControl()); //add map type control
	//map.removeMapType(G_HYBRID_MAP); 
	//Se crea el evento que controla el movimiento en el mapa
	GEvent.addListener(map, "moveend", function() 
	{
		if (bMapaCargado && bCargarDatosMove)
			cargarDatosMove(v_btienda,v_bdistribuidor,v_provincia,v_poblacion,v_cp);
	});

	map.setCenter(new GLatLng(39.963667,-3.24922),zoom_min);	
	//map.addOverlay(new GStreetviewOverlay());

	geocoder = new GClientGeocoder();

	directions = new GDirections(map,document.getElementById("rutas"));
	//Se crea el evento que controla el error en las direcciones
	GEvent.addListener(directions, "error", function() 
	{						
		var cadena_error="";
		switch (directions.getStatus().code)
		{
			case G_GEO_BAD_REQUEST: cadena_error='No se ha podido analizar correctamente la solicitud de ruta.';break;
			case G_GEO_SERVER_ERROR: cadena_error='No se ha podido procesar correctamente la solicitud de ruta o de códigos geográficos, sin saberse el motivo exacto del fallo.';break;
			case G_GEO_MISSING_QUERY: 
			case G_GEO_BAD_REQUEST: cadena_error='No se ha especificado ninguna consulta.';break;
			case G_GEO_UNKNOWN_ADDRESS: cadena_error='No se ha encontrado una ubicación geográfica que se corresponda con la dirección especificada.';break;
			case G_GEO_UNAVAILABLE_ADDRESS: cadena_error='El código geográfico de la dirección indicada o de la ruta para la consulta de ruta proporcionada no puede devolverse por motivos jurídicos o contractuales.';break;
			case G_GEO_UNKNOWN_DIRECTIONS: cadena_error='No hay ninguna ruta disponible entre los dos puntos para ese modo de ruta.';break;
			case G_GEO_BAD_KEY: cadena_error='La clave proporcionada no es válida o no coincide con el dominio para el cual se ha indicado.';break;
			case G_GEO_TOO_MANY_QUERIES: cadena_error='La clave proporcionada ha sobrepasado el límite de solicitudes en un período de 24 horas.';
		}
		document.getElementById("rutas_error").style.display='block';
		document.getElementById("rutas").style.display='none';

		document.getElementById("rutas_error_mensaje").innerHTML="<strong>"+cadena_error+"</strong>"
   });
   //FIN INICIO

  //FUNCIONES	

	//FUNCIONES DEL MAPA

	//Pinta la parte izquierda del mapa donde están las direcciones de todas las tiendas
	function pintarHTMLenlace(elem)
	{
		var cadena_enlace = "<b>" + elem.nombre + "</b><br>" + elem.direccion + "<br>" +
						 elem.ciudad + " - " + elem.provincia + "<br>" +
						 elem.cp + " - Tlf:" + elem.telefono;
		var html = "<div class='bocadillo_marker texto2_4'>" + cadena_enlace + "</div>";			
		return html;
	}

	function pintarSideBar()
	{
		var sCadena="";

		for (var i=0;i<arr_tiendas_final.length;i++)
		{
			var elem = arr_tiendas_final[i];

			var label1 = elem.nombre;
			var label2 = "<span>" + elem.direccion + "<br>" + elem.ciudad + " - " + elem.provincia + "<br>" +
						 elem.cp + " - Tlf:" + elem.telefono + "</span>";
			sCadena += '<div style="margin:5px 2px 5px 2px" class="texto2_4">'+(i+1)+'. <a href="javascript:seleccionarDireccion(' + i + ')">' + label1 + '</a><br>'+label2+'</div>';
		}
		return sCadena;
	}

	//Muestra el bocadillo de información de la dirección al pulsar sobre una tienda del mapa
	function seleccionarDireccion(iContador,marker,html) 
	{
		var lmarker;
		var lhtml;
		if (iContador==null)
		{
			lmarker	= marker;
			lhtml	= html;
		}
		else
		{
			lmarker = gmarkers[iContador];
			lhtml	= htmls[iContador];				
		}			

		document.getElementById("contenido-ruta-a").innerHTML = lhtml;
		lat = lmarker.getPoint().lat();
		lng = lmarker.getPoint().lng();
		lhtml += '<div style="text-align:center;padding-top:0.5em"><a href=javascript:createRuta_inicial(\''+lat+'\',\''+lng+'\') class="boton_generico"><img src="/on/io/es/pie/tiendas-telefonica/bot_comollegar.jpg" alt="Cómo llegar"></a></div>'; 

		global_sel_marker=lmarker;
		if (lmarker.isHidden()) lmarker.show();		
		lmarker.openInfoWindowHtml(lhtml);
		//map.setCenter(lmarker.getPoint(),zoom_selec);
	}		
	
	//Crea una marca en el mapa
	function createMarker(point, html) {
		var icon = new GIcon(G_DEFAULT_ICON);
		icon.image = "/on/io/es/pie/tiendas-telefonica/icono.png";
		//icon.shadow = "";
		icon.iconSize = GSize(20,34);
		
		var marker = new GMarker(point, icon);		
		
		//Evento para el control del click sobre un punto del mapa
		GEvent.addListener(marker, "click", function()
		{				
			seleccionarDireccion(null,marker,html);
		});			

		gmarkers[gmarkers.length] = marker;
		htmls[htmls.length] = html;					

		return marker;
	}	
	//crea el punto de origen en el mapa
	function createMarkerInicialPoint(point, html) {
		
		var marker = new GMarker(point);
		GEvent.addListener(marker, "click", function() {marker.openInfoWindowHtml(html);});						
		return marker;
	}	
	//FIN FUNCIONES DEL MAPA
	
	//CREA RUTA		
	function createRuta_inicial(lat,lng)
	{
		if (global_point_ruta_busqueda==null)
		{
			var v_provincia="";
			if (document.getElementById('cboProvincia').value!= "")
				v_provincia = quitar_acentos(document.getElementById('cboProvincia').options[document.getElementById('cboProvincia').selectedIndex].text);

			document.getElementById("txtDireccion_busqueda").value = document.getElementById("txtDireccion").value + ", " + v_provincia;
		}
		document.getElementById("boton_como_llegar").onclick=function(){createRuta(lat,lng)}
		
		document.getElementById("direcciones_rutas").style.display='block';
		document.getElementById("direcciones_enlaces").style.display='none';

		document.getElementById("rutas").innerHTML='';
		document.getElementById("rutas").style.display='none';			

		global_sel_marker.closeInfoWindow();
		createRuta(lat,lng);	
	}
	
	function createRuta(lat,lng)
	{				
		if (bglobal_direccion_busqueda_modificada)
		{
			if (geocoder) 
			{
				var v_direccion = document.getElementById("txtDireccion_busqueda").value;
				//Búsqueda de código postal en dirección
				/*av_direccion = v_direccion.split(',');
				bCodigoPostalEncontrado=false;
				for (var i=0;i<av_direccion.length;i++)
				{
					if (parseInt(av_direccion[i],10) >= 1000)
					{
						bCodigoPostalEncontrado=true;
						break;
					}
				}
				var iCodPostal="";
				if (!bCodigoPostalEncontrado)
					iCodPostal = document.getElementById('cboProvincia').value + '000,';*/	
				//Búsqueda de código postal en dirección

				//var address = v_direccion + "," + iCodPostal + "Spain";					
				var address = v_direccion + "," + "Spain";					
				geocoder.getLatLng(
				  address,
				  function(point) {				
					if (!point) 
					{						  
					  document.getElementById("rutas_error").style.display='block';
					  document.getElementById("rutas").style.display='none';
					  document.getElementById("rutas_error_mensaje").innerHTML="<strong>No se encuentra la dirección indicada</strong>";
					  return;
					} 
					else 
					{ 	
					   global_point_ruta_busqueda=point;	
					   createRuta_final(lat,lng);
					}						
				  }
				);
			}				
		}
		else
		{
			createRuta_final(lat,lng);
		}	
	}

	//lat,lng de destino
	//point_ruta_busqueda de destino
	function createRuta_final(lat,lng)
	{
		var apoints = [];

		if (global_point_ruta_busqueda!=null)
		{			
			apoints[0] = global_point_ruta_busqueda;
			bglobal_direccion_busqueda_modificada=false;
		}
		else
			apoints[0] = ePuntoInicio;
					
		apoints[1] = new GLatLng(parseFloat(lat),parseFloat(lng));			

		//Si es en la misma ventana			
		if (document.getElementById('cboTipoRuta').value=='pie')
			directions.loadFromWaypoints(apoints,{locale: 'es_ES',travelMode:G_TRAVEL_MODE_WALKING});
		else
			directions.loadFromWaypoints(apoints,{locale: 'es_ES',travelMode:G_TRAVEL_MODE_DRIVING});
		
		document.getElementById("rutas").style.display='block';
		document.getElementById("rutas_error").style.display='none';
	}

	function cerrar_ventana_ruta()
	{
		document.getElementById("direcciones_rutas").style.display='none';
		document.getElementById("direcciones_enlaces").style.display='block';

		document.getElementById('cboTipoRuta').value="coche";
		global_point_ruta_busqueda=null;			

		//Se quitan todas las rutas que halla
		directions.clear();
	}

	//Funciones txtDireccion
	function onchange_direcciones()
	{
		// hide the info window, otherwise it still stays open where the removed marker used to be
		if (bEjecutaChange) 
		{
			map.getInfoWindow().hide();
			map.clearOverlays();
			//Se quitan todas las rutas que halla
			directions.clear();

			// empty the array
			gmarkers			= [];
			htmls				= [];
			arr_tiendas			= [];
			arr_tiendas_final	= [];
			
			map.setCenter(new GLatLng(40.463667,-3.74922),zoom_min);
			document.getElementById("contenido_direcciones").style.display='none';
			document.getElementById("direcciones_rutas").style.display='none';
			document.getElementById("contenido_direcciones_inicial").style.display='block';
		}
		bEjecutaChange = true;
	}

	var bglobal_direccion_busqueda_modificada=false;
	function onchange_txtDireccion_busqueda(obj)
	{
		//Se quitan todas las rutas que halla
		directions.clear();
		bglobal_direccion_busqueda_modificada=true;			
	}

	function cargarDatos_txtDireccion(valor,provincia)
	{
		document.getElementById('txtDireccion').value = valor;
		for (var i=0;i<document.getElementById('cboProvincia').options.length;i++)
		{
			if (quitar_acentos(document.getElementById('cboProvincia').options[i].text).toLowerCase()==quitar_acentos(provincia).toLowerCase())
				document.getElementById('cboProvincia').selectedIndex=i;
		}
		document.getElementById('ejemplos_busqueda').style.display='none';

		onchange_direcciones();
	}
	//Fin Funciones txtDireccion
	//FIN CREA UNA RUTA		


	//FUNCIONES QUE SE EJECUTAN CUANDO SE MUEVE EN EL MAPA
	var arr_tiendas_final_aux;
	var gmarkers_aux;
	function borrarPuntosNoEnBounds()
	{	
		//Los aux los usamos para los borrados para evitar crear los puntos otra vez en el mapa que ya hayamos creado previamente.
		arr_tiendas_final_aux = [];
		gmarkers_aux = [];

		for (var i=0;i<arr_tiendas_final.length;i++)
			arr_tiendas_final_aux.push(arr_tiendas_final[i]);

		for (var i=0;i<gmarkers.length;i++)
			gmarkers_aux.push(gmarkers[i]);

		var i=0;
		while (i<gmarkers_aux.length && gmarkers_aux.length>0)
		{
			if (!bounds.containsLatLng(gmarkers_aux[i].getPoint()))
			{
				map.removeOverlay(gmarkers_aux[i]);
				gmarkers_aux.splice(i,1); 
				arr_tiendas_final_aux.splice(i,1);					
			}
			else 
			{
				gmarkers_aux[i].hide();
				i++;			
			}
		}
	}

	var max_tiendas_a_cargar=50;
	function cargarDatosMove(v_btienda,v_bdistribuidor,v_provincia)
	{	
		var bAnadirTienda;

		if (arr_tiendas.length > 0)
		{				
			bounds = map.getBounds();
			borrarPuntosNoEnBounds();

			arr_tiendas_final=[];
			htmls=[];
			gmarkers=[];

			var pos=0;
			for (var i=0;i<arr_tiendas.length;i++)
			{
				var elem = arr_tiendas[i];
				var lat = parseFloat(elem.latitud);
				var lng = parseFloat(elem.longitud);
				var point = new GLatLng(lat,lng);
				if (bounds.containsLatLng(point))
				{
					bAnadirTienda = true;
					for (var j=0;j<arr_tiendas_final_aux.length;j++)
					{
						var elem2 = arr_tiendas_final_aux[j];
						if (elem == elem2)
						{
							bAnadirTienda = false;								
							var html = pintarHTMLenlace(elem);
							gmarkers[pos]=gmarkers_aux[j];
							htmls[pos]=html;
							arr_tiendas_final[pos]=elem2;
							gmarkers_aux[j].show();
							pos++;
							break;
						}
					}

					if (bAnadirTienda)
					{
						var html = pintarHTMLenlace(elem);
						var marker = createMarker(point,html);		
						map.addOverlay(marker);	
							
						gmarkers[pos]=marker;
						htmls[pos]=html;
						arr_tiendas_final[pos]=arr_tiendas[i];		
						pos++;
					}
					if (pos >= max_tiendas_a_cargar) break;
				}
			}
			document.getElementById("contenido_direcciones").innerHTML = pintarSideBar();
			document.getElementById("contenido_direcciones").style.display='block';
			document.getElementById("contenido_direcciones_inicial").style.display='none';
		}	
	}
	//FIN FUNCIONES QUE SE EJECUTAN CUANDO SE MUEVE EN EL MAPA
	
	//FUNCIONES DE BÚSQUEDA
	//Muestra el punto inicial y carga la direcciones de las tiendas
	function cargarDatos(v_btienda,v_bdistribuidor,v_provincia)
	{	
		arr_tiendas = getTiendas (v_btienda,v_bdistribuidor,v_provincia);	
		if (arr_tiendas.length > 0)
		{
			document.getElementById('datos_no_encontrados').style.display='none';
			document.getElementById('cargando_datos').style.display='none';
			document.getElementById('direcciones_enlaces').style.display='block';
			document.getElementById('direcciones_mapa').style.visibility='visible';

			map.setCenter(ePuntoInicio,zoom_max);
			bounds = map.getBounds();
			arr_tiendas_final=[];
			var jtiendas=0;
			var bAlgunaTienda = false;
			while (!bAlgunaTienda && map.getZoom()>zoom_min)
			{
				for (var i=0;i<arr_tiendas.length;i++)
				{
					var elem = arr_tiendas[i];
					var lat = parseFloat(elem.latitud);
					var lng = parseFloat(elem.longitud);
					var point = new GLatLng(lat,lng);
					if (bounds.containsLatLng(point))
					{
						bAlgunaTienda = true;
						arr_tiendas_final[jtiendas++]=arr_tiendas[i];
						if (jtiendas >= max_tiendas_a_cargar) break;
					}
				}
				if (!bAlgunaTienda)
				{
					map.setZoom(map.getZoom()-1);
					bounds = map.getBounds();
				}
			}

			for (var i=0;i<arr_tiendas_final.length;i++)
			{
				var elem = arr_tiendas_final[i];
				var lat = parseFloat(elem.latitud);
				var lng = parseFloat(elem.longitud);
				var point = new GLatLng(lat,lng);
				var html = pintarHTMLenlace(elem);									 
				var marker = createMarker(point,html);
				map.addOverlay(marker);
			}			
			document.getElementById("contenido_direcciones").innerHTML = pintarSideBar();
			document.getElementById("contenido_direcciones").style.display='block';
			document.getElementById("contenido_direcciones_inicial").style.display='none';

			document.location.href="#iramapa";

			bMapaCargado = true;
			bCargarDatosMove = true;

			if (bTiendaPrincipal)
			{
				seleccionarDireccion(0);
				bTiendaPrincipal=false;
			}

		}
		else
		{
			document.getElementById('datos_no_encontrados').style.display='block';
			document.getElementById('cargando_datos').style.display='none';
			document.getElementById('direcciones_enlaces').style.display='none';
			document.getElementById('direcciones_mapa').style.visibility='hidden';
		}

		if ((v_provincia=='CADIZ' || v_provincia=='MALAGA') && bMostrarPopup)
		{
			GB_showCenter('/on/io/recursos/emergente/index.htm?pagina_central=/on/io/es/pie/tiendas-telefonica/plan-andalucia.html&prov='+document.getElementById('cboProvincia').options[document.getElementById('cboProvincia').selectedIndex].text,550,250);
			bMostrarPopup = false;
		}
	}
	//Ejecuta la búsqueda de la dirección en google.
	function showAddress(v_btienda,v_bdistribuidor,v_direccion,v_provincia) 
	{
	  if (geocoder) {	
		//Búsqueda de código postal en dirección
		/*av_direccion = v_direccion.split(',');
		bCodigoPostalEncontrado=false;
		for (var i=0;i<av_direccion.length;i++)
		{
			if (parseInt(av_direccion[i],10) >= 1000)
			{
				bCodigoPostalEncontrado=true;
				break;
			}
		}
		var iCodPostal="";
		if (!bCodigoPostalEncontrado)
			iCodPostal = document.getElementById('cboProvincia').value + '000,';*/
		//Búsqueda de código postal en dirección

		//var address = v_direccion + "," + iCodPostal + v_provincia + ",Spain";	
		var address = v_direccion + "," + v_provincia + ",Spain";	

		geocoder.getLatLng(
		  address,
		  function(point) {				
			if (!point) {
			  alert("No se encuentra la dirección indicada. Se buscarán las tiendas más cercanas al centro de la ciudad");
			  //Se pasa la dirección vacía
			  if (v_direccion != "")
				 showAddress(v_btienda,v_bdistribuidor,"",v_provincia);	
							
			  return;
			} 
			else 
			{ 
			  var html = "<p class='texto2_4'>" + v_direccion + "</p>";
			  map.addOverlay(createMarkerInicialPoint(point, html));
			  //Variables con el punto de inicio
			  ePuntoInicio	= point;
			  ehtmlInicio	= html;
						 
			  //bounds.extend(point);
			}

			setTimeout('cargarDatos('+v_btienda+','+v_bdistribuidor+',"'+v_provincia+'")',100);
		  }
		);
	  }
	}					

	//Función que se ejecuta al realizar una nueva busqueda
	function buscar_tiendas()
	{												
		//Se quitan los espacios en blanco			
		borrarBlancos(document.getElementById('txtDireccion').value);
		
		if (document.getElementById('cboProvincia').value== "")
		{
			alert("Debe indicar la provincia de búsqueda.");
			return;
		}			

		// hide the info window, otherwise it still stays open where the removed marker used to be
		map.getInfoWindow().hide();
		map.clearOverlays();
		//Se quitan todas las rutas que halla
		directions.clear();

		// empty the array
		gmarkers			= [];
		htmls				= [];
		arr_tiendas			= [];
		arr_tiendas_final	= [];

		v_direccion="";
		v_provincia="";
		v_poblacion="";
		v_cp="";
		//La búsqueda se hace sin precisar tienda ni distribuidor
		v_btienda=true;
		v_bdistribuidor=true;
		bCargarDatosMove = false;

		document.getElementById('datos_no_encontrados').style.display='none';
		document.getElementById('cargando_datos').style.display='block';
		document.getElementById('direcciones_enlaces').style.display='none';
		document.getElementById('direcciones_mapa').style.visibility='hidden';			
		document.getElementById("direcciones_rutas").style.display='none';
		
		v_direccion			= quitar_acentos(document.getElementById('txtDireccion').value);
		if (document.getElementById('cboProvincia').value!= "")
			v_provincia = quitar_acentos(document.getElementById('cboProvincia').options[document.getElementById('cboProvincia').selectedIndex].text);
					
		showAddress(v_btienda,v_bdistribuidor,v_direccion,v_provincia);		
		
	}//function buscar_tiendas	
	//FIN FUNCIONES DE BÚSQUEDA

	//FIN FUNCIONES
}//GBrowserIsCompatible()
//]]>
