
// ---------------------------------------------------------------------------------------------------------------------------------------
// ---------------------------------------------------------------------------------------------------------------------------------------
// ---------------------------------------------------------------------------------------------------------------------------------------
// ---------------------------------------------------------------------------------------------------------------------------------------
    var map;                                  // En map sera cargara el mapa principal de google.

    // --------------------------------------------------------------------------
    // --------------------------------------------------------------------------
	var gTrafico=[];
	var gZonas=[];


// ---------------------------------------------------------------------------------------------------------------------------------------
// --------------                                                                                                            -------------
// --------------                                          load                                                              -------------
// --------------                                                                                                            -------------
// ---------------------------------------------------------------------------------------------------------------------------------------
function load() 
{if (GBrowserIsCompatible())
	   {// -------------------------------------------------------------------------------------------------
		var maxZoom =17;    var minZoom =  12;           // Valores de zoom maximo y minimo que se permiten.
		var pLat=43.538579; var pLng    =-5.66;          // Poicion central en el mapa como valor inicial
		var dLat=0.06;      var dLng    =0.1;            // Margenes de movimientos que permitiremos desde la posicion central.

		// --------------------------------------------------------------------------------------------------
		map=new GMap2(document.getElementById("contenedorMapaCentral"));   // Llamada al constructor del mapa
		map.setCenter(new GLatLng(43.538579, -5.66),14);                   // Sets the map view to the given center
		map.enableScrollWheelZoom();                                       // Enables zooming using a mouse's scroll wheel. Note: scroll wheel zoom is disabled by default. (Since 2.78)
		map.enableInfoWindow();                                            // Enables info window operations on the map (enabled by default).
        //map.addControl(new GSmallMapControl());                            // Adds the control to the map. map.addControl(new GMapTypeControl());
        
        if (GBrowserIsCompatible()) {
            var opts2 = {
              zoomInBtnTitle : "Aumentar",
              zoomOutBtnTitle : "Reducir",
              moveNorthBtnTitle : "Vista hacia arriba",
              moveSouthBtnTitle : "Vista hacia abajo",
              moveEastBtnTitle : "Vista a la derecha",
              moveWestBtnTitle : "Vista a la izquierda",
              homeBtnTitle : "Vista inicial"
            };
            var extLargeMapControl2 = new ExtLargeMapControl(opts2);
            map.addControl(extLargeMapControl2);
        }else{
            map.addControl(new GLargeMapControl());
        }
        map.addControl(new GMapTypeControl()); 
		//map.addControl(new GOverviewMapControl());						   // Habilita la ventana de busqueda rapida
		map.globalBounds = new GLatLngBounds(new GLatLng(pLat-dLat,pLng-dLng),new GLatLng(pLat+dLat,pLng+dLng)); // Crear y Almacena el rectangulo con margenes permitos
                                                                                                                 // Escuadra inf izqnew GLatLng(pLat-dLat,pLng-dLng) 
                             
      
		// --------------------------------------------------------------------------------------------------
		var mt  = map.getMapTypes();				                	 // Returns the array of map types registered with this map.
		for (var i=0; i<mt.length; i++){                                 // Para cada tipo de mapa
			mt[i].getMinimumResolution = function() {return minZoom;}   //      se marca el zoom minimo}  //      se marca el zomm maximo
	    }
        // -------------------------------------------------------------------------------------------------
 		GEvent.addListener(map, 'move', function()           // Añadimos funcion para cada vez que se dispare move en el map
			   {var pos = this.getCenter();                  // Centro del mapa en la situacion actual
				var tgb = this.globalBounds;                 // Rectagulo con las posiciones maximas y minimas permitidas. Almacenado previamente
				if (tgb.contains(pos)) return;               // Ojo puede que de problemas. Ver documentacion a partir de la 2.88

                // Si llega aqui, El mapa se sale de los maximos permitidos, corregimos posicion
				var X = pos.lng();                   var Y = pos.lat();                  // X, Y longitud y latitud actuales
				var maxX = tgb.getNorthEast().lng(); var maxY = tgb.getNorthEast().lat();// Longitud minima,y maxima almacenada previamente
				var minX = tgb.getSouthWest().lng(); var minY = tgb.getSouthWest().lat();// Latitud  minima,y maxima almacenada previamente
													
				if (X < minX) X = minX+0.0001;       // Si pasa la longitud minima. Izquierda
				if (X > maxX) X = maxX-0.0001;       // Si pasa la longitud maxima. Derecha
				if (Y < minY) Y = minY+0.0001;       // Si pasa la latitud minima.  Abajo.
				if (Y > maxY) Y = maxY-0.0001;       // Si pasa la latitud maxima.  Arraba
				this.setCenter(new GLatLng(Y,X));    // Colocamos el centro con las coordenas refcitificadas      												
				}); 
	    GEvent.addListener(map, "zoomend", function(zoomViejo, zoomNuevo) { terminoZoom(zoomViejo, zoomNuevo);});	
				

		//alert(tablaDePictogramas.length);
		try{
	       
		  for (var i=0;i<tablaDePictogramas.length;i++){
		      map.addOverlay(tablaDePictogramas[i]);
		   }/**/
		}catch(ex){
		   //alert(ex);
		}
          
         
         
	} // del if
} // de la funcion

aTamanyos=new Array(13,13,13,32,32,32,64,64,128,256);
function terminoZoom(zoomViejo,zoomNuevo){
   try{
	  ancho=aTamanyos[(zoomNuevo-12)];
	  /*ancho=Math.pow(2,(zoomNuevo-10));
	  if (ancho>128)
	     ancho=128;
	  else if(ancho<16) 
	     ancho=16;*/
	  //alert(zoomNuevo-5);
	  //alert(ancho);
	  for (var i=0;i<tablaDePictogramas.length;i++){
	      icono= tablaDePictogramas[i].getIcon();
	      icono.iconSize=new GSize(ancho,ancho);
	      //icono.image="http://www.gijon.es/imagenes/departamentos/Directorio%5Cpictogramas%5CTorre%20Musel.png";
	      //tablaDePictogramas[i].setImage(icono.image);
	      map.removeOverlay(tablaDePictogramas[i]);
	      
	      map.addOverlay(tablaDePictogramas[i]);
	   }/**/
	}catch(ex){
	   //alert(ex);
	}
}




// ---------------------------------------------------------------------------------------------------------------------------------------
// --------------                                      mostrarCapa                                                           -------------
// ---------------------------------------------------------------------------------------------------------------------------------------
function mostrarCapa(capa)
{	
	// -----------------------------------------------------------------------------------------------------------------------------------
	var posicion = posicionCapaCargada(capa);      // Posicion en las tablas de la capa cargada si esta cargada. Si no esta cargada devolvera -1.                        
	if (posicion>=0)                             // Si (posicion<0) la capa no esta cargada
		{
    // -----------------------------------------------------------------------------------------------------------------------------------
	 tablaDeMarkerManager[posicion] = new MarkerManager(map, {borderPadding:1});     // Elemento necesario para añadir todos los marker de una vez. OJO usamos MarkerManager y no GMarkerManager
	 tablaDeMarkerManager[posicion].addMarkers(tablaDeMarkersXCapa[posicion],12,17); // Añadimos los todos los markers de la capa que se encuentrarn en la posicion dada 
	 tablaDeMarkerManager[posicion].refresh();										 // Hasta que no se refresque los cambios no se muestran en pantalla	
	} 
}


// ---------------------------------------------------------------------------------------------------------------------------------------
// --------------                                      OcultarCapa                                                           -------------
// ---------------------------------------------------------------------------------------------------------------------------------------
function ocultarCapa(capa)
{ 
	try{
	   var posicion = posicionCapaCargada(capa);             // Obtenemos la posicion en la que esta cargada la capa
	   if (posicion<0)                                       // Si la posicion es menor que 0 la capa no esta cargada
	      {return 0;}                                        //       sino esta cargada no hay nada que borrar en la visualizacion

	   tablaDeMarkerManager[posicion].clearMarkers();        // Borramos todos marker visibles de la capa. (! solo se borran de la visualizacion).
   }catch(ex){
   }
}



// ---------------------------------------------------------------------------------------------------------------------------------------
// --------------                                      posicionCapaCargada                                                   -------------
// ---------------------------------------------------------------------------------------------------------------------------------------
function posicionCapaCargada(capa)
{   for (var i=0; i< tablaDeCapasCargadas.length;i++) // Buscamos en la tabla de capas, el valor capa dado
		if (tablaDeCapasCargadas[i]==capa) return i;  //     si lo encontramos devolvemos la posicion en la que se encuantra

	return -1;                                        // Si llega, la capa no ha sido encontra y retornamos -1
}

// ---------------------------------------------------------------------------------------------------------------------------------------
// --------------                                      obtenerNuevaPosicion                                                   ------------
// ---------------------------------------------------------------------------------------------------------------------------------------
function obtenerNuevaPosicion(capa)
{	var aux = tablaDeMarkersXCapa.length;			// Mientras que las capas no se descargen las nuevas posiciones siempre iran al final de la 
    tablaDeCapasCargadas[aux]= capa;                // de la tabla, almecenamos primero en auxiliar pq sino modificamos el valor de 
	return tablaDeMarkersXCapa.length;              // tablaDeMarkersXCapa.length, tb se podría tablaDeMarkersXCapa[tablaDeMarkersXCapa.length]=capa
}

var aCapasKML=new Array();
function marcarCapa(poObjeto,psKML){
   // Tenemos el objeto check
   mostrarPlano();
   
   //Desmarcamos las marcas
   if(marcaBusqueda)
      map.removeOverlay(marcaBusqueda);
   marcaBusqueda=null;
   if(poObjeto.checked){
      //Pintamos
      mostrarCapa(poObjeto.value);
      
      
      var oO=localiarDT(poObjeto);
      oO.style.backgroundColor='#E3CBBE';
      abrirAmbito(oO);
      
      
      //Si estamos muy cerca, nos alejamos
      if(map.getZoom()>18){
         map.setZoom(18);
      }
      
      
      //Miramos si tiene KML.
      if(psKML!=null && psKML.length>0){
         if(aCapasKML.length==0){
            var oEspera=ponerEspera(poObjeto);
            var KML=cargarKML(psKML,oEspera);
            aCapasKML.push(new Array("cap"+poObjeto.value,KML ));
            map.addOverlay(KML);
         }else{
            //Buscamos el kml Correspondiente
            var bBusco=true;
            var sValor="cap"+poObjeto.value;
            
            for(var i=0;i<aCapasKML.length;i++){
               if(bBusco){
                  if(aCapasKML[i][0]==sValor){
                     var KML=aCapasKML[i][1];
                     map.addOverlay(KML);
                     
                     bBusco=false;
                  }
               }
            }
            if(bBusco){
               var oEspera=ponerEspera(poObjeto);
               var KML=cargarKML(psKML,oEspera);
               aCapasKML.push(new Array("cap"+poObjeto.value,KML ));
               map.addOverlay(KML);
            }
         }
      }
   }else{
      ocultarCapa(poObjeto.value);
      var oO=localiarDT(poObjeto);
      //Comprobamos si hay alguna marca...
      var oDD=oO;
      while (oDD.tagName!="DD"){
         oDD=oDD.nextSibling;
      }
      var oI=oDD.getElementsByTagName("INPUT"),bM=false,i;
      i=0;
      while(i<oI.length && !bM){
         bM=oI[i].checked;
         i++;
      }
      if(!bM){
          oO.style.backgroundColor='#F2F1E9';
      }
      
      if(psKML.length>0){
         //Buscamos el elemento.
         var sValor="cap"+poObjeto.value;
         var bBusco=true;
         for(var i=0;i<aCapasKML.length;i++){
            if(bBusco){
               if(aCapasKML[i][0]==sValor){
                   var KML=aCapasKML[i][1];
                   
                   map.removeOverlay(KML);
                   //map.removeControl(KML);
                   bBusco=false;
               }
            }
            /*else{
               if(i>0)
                  aCapasKML[i--]=aCapasKML[i];
            }*/
         }
         if (!bBusco){
            //aCapasKML.pop();
         }
         //aCapasKML.push(new Array("cap"+poObjeto.value, cargarKML(psKML)));
         
      }
   }
}
function marcarCapaOculta(psKML){
   // Tenemos el objeto check
   mostrarPlano();
   
      //Si estamos muy cerca, nos alejamos
      if(map.getZoom()>18){
         map.setZoom(18);
      }
      
      
      //Miramos si tiene KML.
      if(psKML!=null && psKML.length>0){
         if(aCapasKML.length==0){
            //var oEspera=ponerEspera(poObjeto);
            var KML=cargarKML(psKML,null);
            //aCapasKML.push(new Array("cap"+poObjeto.value,KML ));
            map.addOverlay(KML);
         }else{
            //Buscamos el kml Correspondiente
            var bBusco=true;
            var sValor="cap"+poObjeto.value;
            
            for(var i=0;i<aCapasKML.length;i++){
               if(bBusco){
                  if(aCapasKML[i][0]==sValor){
                     var KML=aCapasKML[i][1];
                     map.addOverlay(KML);
                     
                     bBusco=false;
                  }
               }
            }
            if(bBusco){
               //var oEspera=ponerEspera(poObjeto);
               var KML=cargarKML(psKML,null);
               //aCapasKML.push(new Array("cap"+poObjeto.value,KML ));
               map.addOverlay(KML);
            }
         }
      }
}
function ponerEspera(poO){
   try{
      var imgNueva=document.createElement("IMG");
      imgNueva.src="../Imagenes/Callejero/Iconos/espera.gif";
      imgNueva.style.width="16px";
      imgNueva.style.height="16px";
      imgNueva.style.cssFloat="none";
      var divNueva=document.createElement("DIV");
      divNueva.style.textAlign="center";
      divNueva.style.border="none";
      divNueva.appendChild(imgNueva);
      
      return poO.parentNode.appendChild(divNueva)
   }catch(ex){
     return null;
   }
}
function quitarEspera(poO){
   if(poO){
      try{
         poO.parentNode.removeChild(poO);
      }catch(ex2){
         
      }; 
   }
}
function localiarDT(oO){
    var iI=10;
    while (oO.tagName!="DD" && iI-->0){ 
        oO=oO.parentNode; 
    }; 
    iI=10;
    while (oO.tagName!="DT" && iI-->0){ 
        oO=oO.previousSibling; 
    }; 
    return oO;
}
function cargarKML(psURL,poO){
    var KML1=new GGeoXml(psURL);
    GEvent.addListener(KML1, 'load', function() {
      if (KML1.loadedCorrectly()) {
        KML1.gotoDefaultViewport(map);
      }
      if(poO){
         quitarEspera(poO);
      }
    });/**/
    return KML1;
}
// ---------------------------------------------------------------------------------------------------------------------------------------
// --------------                                          crearMarker                                                       -------------
// ---------------------------------------------------------------------------------------------------------------------------------------
function crearMarker(point, name,id, icono)
{	var marker = new GMarker(point, {icon:icono,title:name});
	/*var tabs   =[new GInfoWindowTab("Descripcion","<STRONG>"+name+" </STRONG><p>"+descripcion+"</p>"),
		         new GInfoWindowTab("Foto", "<IMG ALIGN='CENTER' SRC="+foto+">")];*/

	GEvent.addListener(marker, 'click', function() {cargarMarca(id,marker);});
	return marker;
}



function cargarMarca(id,marker){
   GDownloadUrl("obtenerDirectorio.aspx?id="+id, function(data) 
	   {var xml     = GXml.parse(data);
		var markers = xml.documentElement.getElementsByTagName("marker");// Carga los del xml en la tabla marker
		for (var i = 0; i < markers.length; i++)                         // Por cada elemento de la tabla
	    {
	         var nombre     = markers[i].getAttribute("name");           //     extraemos el nombre
			 var foto       = markers[i].getAttribute("foto");	         //          ··	
 			 var descripcion= markers[i].getAttribute("descripcion");    //  La sgt linea  generamos GLatlng que necesitamos
 			 var conImagen  = markers[i].getAttribute("imagen");
 			 var idDirectorio=markers[i].getAttribute("id");
 			 var contenidoHTML   ="<table><tr>";
 			 contenidoHTML+="<td colspan=\"2\"><strong>"+nombre+"</strong></td>";
 			 contenidoHTML+="</tr></tr>";
 			 if(conImagen=="1"){
 			    contenidoHTML+="<td><div class=\"BocataImagen\"><img src=\""+foto+"\" alt\"\"/></div></td>";
 			    contenidoHTML+="<td>"+descripcion+"</td>";
 			 }else{
 			    contenidoHTML+="<td colspan=\"2\">"+descripcion+"</td>";
 			 }
 			 contenidoHTML+="</tr><tr><td colspan=\"2\" class=\"BocataDerecha\"><a href=\"javascript://Mostrar Ficha\" onclick=\"mostrarFichaDirectorio("+idDirectorio+")\">m&aacute;s informaci&oacute;n</a></td>";
 			 contenidoHTML+="</tr></table>";
             marker.openInfoWindowHtml(contenidoHTML);
 	    }
 	   });

}
var marcaBusqueda=null;
function mostrarPunto(lng,lat, nombre,id, icono){
   var posiciones;
   var punto=new GLatLng(lat,lng);
   if(marcaBusqueda)
      map.removeOverlay(marcaBusqueda);
   marcaBusqueda = new GMarker(punto, {icon:((icono)?tablaDeIconosXCapa[icono]:IconoPunto),title:nombre});
   map.setCenter(punto,16);
   
   map.addOverlay(marcaBusqueda);
   
   if(id){
    cargarMarca(id,marcaBusqueda);
   }
    mostrarPlano();
}

function mostrarFichaDirectorio(id){
    try{
        GDownloadUrl("directorio.aspx?mE=J&id="+id, function(data){
            var oB=document.getElementById("ficha");
            oB.innerHTML=data;
            ocultarPlano();
         });
    }catch(ex){
    //alert(ex)
    };
}
function ocultarPlano(){
   var oO;
   try{
        oO=document.getElementById("contenedorMapaCentral");
        oO.style.visibility="hidden";
        oO=document.getElementById("controlCierre");
        oO.style.visibility="hidden";
        oO=document.getElementById("botonMapaCompleto");
        oO.style.visibility="hidden";
        oO=document.getElementById("ficha");
        oO.style.visibility="visible";
   }catch(ex){
   //alert(ex);
   }
}
function mostrarPlano(){
   var oO;
   try{
        oO=document.getElementById("contenedorMapaCentral");
        oO.style.visibility="visible";
        oO=document.getElementById("controlCierre");
        oO.style.visibility="visible";
        oO=document.getElementById("botonMapaCompleto");
        oO.style.visibility="visible";
        oO=document.getElementById("ficha");
        oO.style.visibility="hidden";
   }catch(ex){
   }
}
// ---------------------------------------------------------------------------------------------------------------------------------------
// ---------------------------------------------------------------------------------------------------------------------------------------
// ---------------------------------------------------------------------------------------------------------------------------------------
// ---------------------------------------------------------------------------------------------------------------------------------------
// ---------------------------------------------------------------------------------------------------------------------------------------
// ---------------------------------------------------------------------------------------------------------------------------------------
// ---------------------------------------------------------------------------------------------------------------------------------------
// ---------------------------------------------------------------------------------------------------------------------------------------
// ---------------------------------------------------------------------------------------------------------------------------------------
// ---------------------------------------------------------------------------------------------------------------------------------------
// ---------------------------------------------------------------------------------------------------------------------------------------
// ---------------------------------------------------------------------------------------------------------------------------------------
// ---------------------------------------------------------------------------------------------------------------------------------------
// ---------------------------------------------------------------------------------------------------------------------------------------
// ---------------------------------------------------------------------------------------------------------------------------------------
// ---------------------------------------------------------------------------------------------------------------------------------------
function mostrarZonas(zona)
{	 //alert('ss');
	GDownloadUrl("zonas.xml", function(data) 
		{var xml = GXml.parse(data);
		 var markers = xml.documentElement.getElementsByTagName("zona");

		 for (i=0; i < markers.length; i++) 
		   	 {var coordenadas=[];
			  var nombreZona=markers[i].getAttribute("nombre");
				
			  for (j=1; j < markers[i].childNodes.length; j=j+2)

				 {//alert(markers[i].childNodes);
                var lat=markers[i].childNodes[j].attributes["lat"].nodeValue;
				  var lng=markers[i].childNodes[j].attributes["lng"].nodeValue;

				  coordenadas.push(new GLatLng(lat,lng));}
						
			  var color;
			  color="#00CC66";
			
		      gZonas.push(crearZona(coordenadas,"#f33f00", 1, 1, "#ff0000", 0.2,nombreZona));
			   map.addOverlay(gZonas[0]);
		     } // del for

	   }); // de la funcion
}  // de la funcion general



// ---------------------------------------------------------------------------------------------------------------------------------------
// ---------------------------------------------------------------------------------------------------------------------------------------
function crearZona(coodenada,colorBorde,anchoBorde,opacidadBorde,colorInterior,opacidadInterior,nombre){
			var zonal=new GPolygon(coodenada,colorBorde,anchoBorde,opacidadBorde,colorInterior,opacidadInterior);	
			GEvent.addListener(zonal, 'click', function() {alert(nombre);});
			return zonal;
}



























function crearCapaTrafico(){	
    GDownloadUrl("trafico.xml", function(data){
        var xml     = GXml.parse(data);
		var markers = xml.documentElement.getElementsByTagName("estadotrafico");
		
		for (i=0; i < markers.length; i++){
		    var calle   =markers[i].getAttribute("calle");
			var estado  =markers[i].getAttribute("estado");

		    var coordenadas=[];
			for (j=1; j < markers[i].childNodes.length; j=j+2){
			    var lat=markers[i].childNodes[j].attributes["lat"].nodeValue;
	 			var lng=markers[i].childNodes[j].attributes["lng"].nodeValue;
				coordenadas.push(new GLatLng(lat,lng));
		    }

			var color;
			switch (estado){
			    case "Fluido":    color="#00CC66"; break;
				case "Intenso":   color="#FF9900"; break;
  				case "Colapsado": color="#ff0000"; break;
  				case "Cortado":   color="#000000"; break;
  			}
								
			var linea=new GPolyline(coordenadas,color, 5,0.5); 	
	
			gTrafico.push(crearTrafico(coordenadas,color, 5,0.5,calle,estado));

	    }
	});
}

// ---------------------------------------------------------------------------------------------------------------------------------------
// ---------------------------------------------------------------------------------------------------------------------------------------
function crearTrafico(coordenada,colorLinea,anchoLinea,opacidadlinea,calle,estado)
{   	var linea= new GPolyline(coordenada,colorLinea,anchoLinea,opacidadlinea); 
		GEvent.addListener(linea, 'click', function() {alert(calle+":"+estado);});
		return linea;
}
// ---------------------------------------------------------------------------------------------------------------------------------------
// ---------------------------------------------------------------------------------------------------------------------------------------
function mostrarTrafico(objeto)
{	if (objeto.checked) 
		for (i=0;i<gTrafico.length;i++)
			 map.addOverlay(gTrafico[i]);
	  else
		for (i=0;i<gTrafico.length;i++)
			 map.removeOverlay(gTrafico[i]);	
}

/*


// ---------------------------------------------------------------------------------------------------------------------------------------
// ---------------------------------------------------------------------------------------------------------------------------------------
// ---------------------------------------------------------------------------------------------------------------------------------------
// ---------------------------------------------------------------------------------------------------------------------------------------
function crearCapaZonas()
{	GDownloadUrl("zonas.xml", function(data) 
		{var xml = GXml.parse(data);
		 var markers = xml.documentElement.getElementsByTagName("zona");

		 for (i=0; i < markers.length; i++) 
		   	 {var coordenadas=[];
			  var nombreZona=markers[i].getAttribute("nombre");
			
			  for (j=1; j < markers[i].childNodes.length; j=j+2)
				 {var lat=markers[i].childNodes[j].attributes["lat"].nodeValue;
				  var lng=markers[i].childNodes[j].attributes["lng"].nodeValue;
				  coordenadas.push(new GLatLng(lat,lng));}
			
			  var color;
			  color="#00CC66";
			
		      gZonas.push(crearZona(coordenadas,"#f33f00", 1, 1, "#ff0000", 0.2,nombreZona));
			   map.addOverlay(gZonas[0]);
		     } // del for

	   }); // de la funcion
}  // de la funcion general


// ---------------------------------------------------------------------------------------------------------------------------------------
// ---------------------------------------------------------------------------------------------------------------------------------------
function crearZona(coodenada,colorBorde,anchoBorde,opacidadBorde,colorInterior,opacidadInterior,nombre){
			var zonal=new GPolygon(coodenada,colorBorde,anchoBorde,opacidadBorde,colorInterior,opacidadInterior);	
			GEvent.addListener(zonal, 'click', function() {alert(nombre);});
			return zonal;
}

*/