/*
    var pinID
    var map
    var punti
    var ppin
    var rc
    var validZoom
    var previousZoom
    var layers
    var map

     function GetMap(lat, long, zoomLevel)
(v.5)function aggiungiLayer(nomeLayer, layer)
(v.4)function DrawPoly(id,points,width,color)
(v.4)function AddPinLL(latitudine, longitudine, URLimmagine, titolo, descrizione)
(v.5)function AddPushPinShape(latitudine, longitudine, URLimmagine, titolo, descrizione)    
(v.4)function AddPin()
     function changeMapView(mode)
*/

 	//Variabili globali
    var pinID = 1;				// Inizializzazione degli identificativi dei PushPin
    var map = null;				// Creazione della variabile di mappa
    var punti = new Array;		// Vettore dei punti per il disegno del poligono
    var ppin = new Array;		// Vettore dei pushpin aggiunti alla mappa
    var rc = new Array;			// Vettore delle varie rotte calcolate
    var validZoom = null;	// Vettore di booleani che stabilisce quali zoom sono validi all'interno della pagina
    var previousZoom = 1;
    var layers = new Hashtable();
    var mapLayers = new Hashtable();    

    var map = null;

    //Inizializzazione della mappa
    function GetMap(lat, long, zoomLevel, tipo)
    {
      map = new VEMap('myMap');
      map.LoadMap(new VELatLong(lat,long), zoomLevel ,tipo , false);
      map.HideDashboard();
      //map.AttachEvent("onresize", controllaDimensioni);       
      map.AttachEvent("onendzoom", controllaDimensioni);
    }

	function GetMapCrociera(divName, lat, long, zoomLevel, tipo)
    {
      
	      map = new VEMap(divName);
	      map.LoadMap(new VELatLong(lat,long), zoomLevel ,tipo , false);
	      map.HideDashboard();
	      //map.AttachEvent("onresize", controllaDimensioni);       
	      map.AttachEvent("onendzoom", controllaDimensioni);
      
    }
    
   function aggiungiLayer(nomeLayer, layer)
   {
     val = layers.get(nomeLayer);
     if (val != undefined)
      layers.remove(nomeLayer);
     layers.put(nomeLayer, layer);
   }

   function getLayer(nomeLayer)
   {
    pl1 = layers.get(nomeLayer);
    if (pl1 != undefined)
     return pl1;
    else
    return null; 
   }      
   
   function aggiungiMapLayer(nomeLayer, layer)
   {
//     alert ("aggiunto:" + nomeLayer);
     val = layers.get(nomeLayer);
     if (val != undefined)
      mapLayers.remove(nomeLayer);
     mapLayers.put(nomeLayer, layer);
   }

   function getMapLayer(nomeLayer)
   {
    pl1 = mapLayers.get(nomeLayer);
    if (pl1 != undefined)
     return pl1;
    else
    return null; 
   }      
   
   
	//Disegno di una polilinea in funzione dei punti passati nel vettpre points
	//@id      id assegnato alla polilinea
	//@points  vettore di coordinate VELatLong utilizzato per ottenere la polilinea
	//@width   spessore della linea
	//@color   oggetto VEColor che definisce il colore della polilinea
	function DrawPoly(id,points,width,color)
    { 
      poly = new VEPolyline(id,points);
      poly.SetWidth(width); 
      poly.SetColor(color);
      map.AddPolyline(poly);
      map.SetMapView(points);
    } 
    
   //Aggiunta di un pushpin(map ver. 4) in un punto preciso (latitudine, longitudine)
   function AddPinLL(latitudine, longitudine, URLimmagine, titolo, descrizione)
   {   
     var pin = new VEPushpin(
      pinID, 
      new VELatLong(latitudine, longitudine),
      URLImmagine, 
      titolo, 
      descrizione
      );
     VEPushpin.ShowDetailOnMouseOver = true;
     VEPushpin.OnMouseOverCallback = function(x, y, title, details)
     { }
     map.AddPushpin(pin);
     pinID++;
     ppin[ppin.length] = pin;
     return pin;
   }   
   
   function AddPushPinShape(latitudine, longitudine, URLimmagine, titolo, descrizione)
   {   
     //var miaLL = new VELatLong((latitudine*1), (longitudine*1));
     var latLongPixel = map.LatLongToPixel(new VELatLong((latitudine*1), (longitudine*1)));
     miaLL = map.PixelToLatLong(new VEPixel(latLongPixel.x+12,latLongPixel.y+12));
          
     var pin = new VEShape(VEShapeType.Pushpin,  miaLL);     
     pin.SetCustomIcon(URLimmagine);
     pin.SetTitle(titolo);     
     pin.SetDescription(descrizione);
     pinID++;
     ppin[ppin.length] = pin;
     return pin;
   } 

    //Funzione che aggiunge un pushpin al centro della mappa
   function AddPin()
   {   
     var pin = new VEPushpin(
      pinID, 
      map.GetCenter(),
      null, 
      'Pushpin', 
      '<a href="#'+map.GetCenter+'" onclick="addPoint('+pinID+')">aggiungi come meta</a>'
      );
   
     VEPushpin.ShowDetailOnMouseOver = true;
     VEPushpin.OnMouseOverCallback = function(x, y, title, details)
     {     }
     map.AddPushpin(pin);
     pinID++;
     ppin[ppin.length] = pin;
   }   
   
   function changeMapView(mode)
   {
    map.SetMapStyle(mode);
   }
   
   function getMapCenter()
   {
    alert(map.GetCenter());
   }   
   
   function nascondiLayer(nomeLayer)
   {
     pl1 = layers.get(nomeLayer);
     if (pl1 != undefined)
    	 pl1.shapes.Hide();
   }
   
   function visualizzaLayer(nomeLayer)
   {
     pl1 = layers.get(nomeLayer);
     if (pl1 != undefined)
    	 pl1.shapes.Show();
   }

   function rimuoviMapLayer(nomeLayer)
   {
    try{
    pl1 = mapLayers.get(nomeLayer);
  //  alert (nomeLayer + " rimosso:" + pl1);
    if (pl1 != undefined)
    {
 	 map.DeleteShapeLayer(pl1);
     mapLayers.remove(nomeLayer);
 	} 
 	}catch(e)
 	{}
   }  

   
   function rimuoviLayer(nomeLayer)
   {
    try{
    pl1 = layers.get(nomeLayer);
    if (pl1 != undefined)
    {
 	 map.DeleteShapeLayer(pl1.shapes);
     layers.remove(nomeLayer);
 	} 
 	}catch(e)
 	{}
   }  
   
   	function posizionaMappa(latitudine_mappa, longitudine_mappa, zoom_level)
	{
	  vll = new VELatLong(parseFloat(latitudine_mappa), parseFloat(longitudine_mappa));
 	  if (zoom_level == null)
	   map.SetCenter(vll);
	  else
	   map.SetCenterAndZoom(vll, zoom_level);
	}
	
	function posizionaMarkerGenerico(latitude_pin, longitude_pin, titolo_PP, descrizione_PP, gif_PP,tipo_PP)
	{
	
     if (tipo_PP == 'porto')
      colore = 'rosa';

     genericLayer = new SkipperLayer();
     genericLayer.maxZoom=17;
     genericLayer.minZoom=0;
     descrizione_pin = "";
     gif_pin = "bussola.gif";


     if (tipo_PP == null)
      tipo_PP = 'meta';

     if (tipo_PP != 'porto')
     {    
      titoloDaInserire="<table cellpadding=0 cellspacing=0 border=0 width='330px'>";
	  titoloDaInserire += "<tr class='no_text'><td><img src='resources/img/varie/angolo_sx_rosa_info.gif'></td>";
	  titoloDaInserire += " <td width='100%' class=\"intestazione_rosa_testo_bianco\">";
	  titoloDaInserire += titolo_PP ;
	  titoloDaInserire += "</td><td class='intestazione_rosa_testo_blu' align='right'> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href=\"javascript:void(0);\" onclick=\"nascondiContenutoPP(); return false;\">X</a></td>";
	  titoloDaInserire += "<td><img src='resources/img/varie/angolo_dx_rosa_info.gif'></td></tr></table>";
      titolo = titoloDaInserire;        
     }
     else
     {
      titoloDaInserire="<table cellpadding=0 cellspacing=0 border=0 width='330px'>";
	  titoloDaInserire += "<tr class='no_text'><td><img src='resources/img/varie/angolo_sx_azzurro_info.gif'></td>";
	  titoloDaInserire += " <td width='100%' class=\"intestazione_azzurro_testo_bianco\">";
	  titoloDaInserire += titolo_PP;
	  titoloDaInserire += "</td><td class='intestazione_azzurro_testo_blu' align='right'> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href=\"javascript:void(0);\" onclick=\"nascondiContenutoPP(); return false;\">X</a></td>";
  	  titoloDaInserire += "<td><img src='resources/img/varie/angolo_dx_azzurro_info.gif'></td></tr></table>";
      titolo = titoloDaInserire;             
     }
     
     if (descrizione_PP != null)
     {
      descrizione_pin += descrizione_PP + '<br />';
      descrDaInserire = "<div style=\"height:200px; overflow : auto; width:330px; bgcolor=#FFFFFF; background-color:#FFFFFF;\"\">" + descrizione_pin;
     // descrDaInserire += '<br /><a href="javascript:void(0);" onclick="rimuoviLayer(\'genericLayer\');nascondiContenutoPP();return false;">chiudi</a>'; 
      descrDaInserire += "</div><table cellpadding=0 cellspacing=0 border=0 width='330'>";
      descrDaInserire += "<tr class='no_text'><td width='10' height='17'><img src='resources/img/varie/angolo_sx_bianco2.gif'></td><td width='310' height='17' class='sfondo_bianco'></td><td width='10'><img src='resources/img/varie/angolo_dx_bianco.gif'></td></tr></table>";
      
      descrizione_pin = descrDaInserire;
     } 
      
     if (gif_PP != null)
      gif_pin = gif_PP;
     var myMetaPin = AddPushPinShape(latitude_pin, longitude_pin, '/skippercms/resources/img/varie/'+ gif_pin, titolo, descrizione_pin);
     genericLayer.shapes.AddShape(myMetaPin);
     map.AddShapeLayer(genericLayer.shapes);	 	 
	 genericLayer.shapes.Show(); 
	 aggiungiLayer('genericLayer', genericLayer);     	 
	}
	
	 function IncludePoint(lat, long){
        var latLong = new VELatLong(parseFloat(lat), parseFloat(long));
        map.IncludePointInView(latLong);
      }

function addShapePolyLine(points)
{
 if (points.length>1)
 {
     var pin = new VEShape(VEShapeType.Polyline,  points);
     pin.SetCustomIcon();
     pin.HideIcon();     
     pinID++;
     ppin[ppin.length] = pin;
     return pin;
 }
}

function AddPolyline(points, idPL)
{
 poly = new VEPolyline(idPL,points);
 map.AddPolyline(poly);
}
      
function addPolyline(points)
{
 poly = new VEPolyline('1',points,new VEColor(0,0,255,1));

 map.AddPolyline(poly);
}


 function loadXMLPushPinTag(skipperLayerName, xmlPushPinDocument)
   {
     addLoadingPushPin('xmlLoading-'+skipperLayerName);
     skipperLayerNew = getMapLayer(skipperLayerName);
     if (skipperLayerNew != null)
     {
     skipperLayerNew.Hide();
     rimuoviMapLayer(skipperLayerName);   
     skipperLayerNew = new VEShapeLayer;
   
     dimensione = (xmlPushPinDocument.getElementsByTagName("shapes")[0].getElementsByTagName("pushpin").length);
     for(cn=0; cn<dimensione; cn++)
     {
      titolo          = (xmlPushPinDocument.getElementsByTagName("shapes")[0].getElementsByTagName("pushpin")[cn].getElementsByTagName("titolo")[0].text);
      latitudeXMap    = (xmlPushPinDocument.getElementsByTagName("shapes")[0].getElementsByTagName("pushpin")[cn].getElementsByTagName("latitude")[0].text);
      longitudeXMap   = (xmlPushPinDocument.getElementsByTagName("shapes")[0].getElementsByTagName("pushpin")[cn].getElementsByTagName("longitude")[0].text);
      URLImmagine     = (xmlPushPinDocument.getElementsByTagName("shapes")[0].getElementsByTagName("pushpin")[cn].getElementsByTagName("immagine")[0].text);
      descrizione     = (xmlPushPinDocument.getElementsByTagName("shapes")[0].getElementsByTagName("pushpin")[cn].getElementsByTagName("descrizione")[0].text);
	  var myPin = AddPushPinShape(parseFloat(latitudeXMap), parseFloat(longitudeXMap), URLImmagine, titolo, descrizione);
 	  skipperLayerNew.AddShape(myPin);
     }
   //alert("1");
   aggiungiMapLayer(skipperLayerName, skipperLayerNew);
   //alert("2");
   }
   removeLoadingPushPin('xmlLoading-'+skipperLayerName);
   return skipperLayerNew;
 }    
 
  var loadingCall=0;
  var loadingLayer=null
  
  var loadingLayers = new Hashtable();
  function addLoadingPushPin(idName,ricerca)
   {
    //alert ("load:" + idName);
    pl1 = loadingLayers.get(idName);
    if (pl1 == undefined)
    {
     cmd = '<div><img src="/skippercms/resources/img/varie/loading.gif\" /></div>';
     if (ricerca==null)
      sCP = AddMyControl('none', idName, cmd, '150px', '230px', '130px','200px');      
     else 
      sCP = AddMyControl('none', idName, cmd, '200px', '150px', '130px','200px');      
     loadingLayers.put(idName, sCP);
     //alert("a:" + idName);
    } 
    //loadingCall++;
    return false;
  }    
 
 
 function removeLoadingPushPin(idName)
 {
    pl1 = loadingLayers.get(idName);
    if (pl1 != undefined)
    {
     //alert("r:" + idName);
     RemoveMyControl(pl1);
     loadingLayers.remove(idName);
    }
   return false;
 } 
 
 function disegnaItinerarioCrociere(vettoreTappeCrociera,vettoreDesc)
 {

   //Gestione dei tre layer fissi del itinerari
  rimuoviLayer('itinerarioLayer');

  itinerarioLayer = new SkipperLayer();
  itinerarioLayer.maxZoom=17;
  itinerarioLayer.minZoom=0;
  for (cn=0; cn<vettoreTappeCrociera.length; cn++)
  {
   var myPortoPin = AddPushPinShape(vettoreTappeCrociera[cn].Latitude, vettoreTappeCrociera[cn].Longitude, '/skippercms/resources/img/varie/tappa.gif',vettoreDesc[cn],vettoreDesc[cn]);
   itinerarioLayer.shapes.AddShape(myPortoPin);
   var myPortoPin = AddPushPinShape(vettoreTappeCrociera[cn].Latitude, vettoreTappeCrociera[cn].Longitude, '/skippercms/resources/img/numeriTappe/' + (cn+1) + '.gif',vettoreDesc[cn],vettoreDesc[cn]);
   itinerarioLayer.shapes.AddShape(myPortoPin);
  }
  
   if (vettoreTappeCrociera.length>1)
   {
    //polyLinePin = addShapePolyLine(vettoreTappeCrociera);
    //itinerarioLayer.shapes.AddShape(polyLinePin);
    map.AddShapeLayer(itinerarioLayer.shapes);
   }
 
   itinerarioLayer.shapes.Show(); 
	
   //Aggiunta/aggiornamento layer itinerari
   aggiungiLayer('itinerarioLayer', itinerarioLayer);
   


   
   //polylineItinerario = addPolyline(vettoreTappe, idPolylineItinerario)
   controllaDimensioni();  
 }   
 
function disabilitaEvento()
{
 return true;
}

var caricato=null;
var shapeInfoPanel = null;
function ShapeInfo(e)
        {
            
            if(e.elementID != null)
			{
			
                shape = map.GetShapeByID(e.elementID);
				if (caricato==null)
				{
				 caricato=shape;
	             mostraContenutoPP(315,315);
                }
				else
				{
  				 nascondiContenutoPP();
  				 if (map.GetShapeByID(e.elementID) != caricato)
  				 {
  				  shape = map.GetShapeByID(e.elementID);
  				  caricato=shape;
	              mostraContenutoPP(315,315);
	             } 
  			    }
  			    return true;
			}else
  			  return false;
  		}
		
function mostraContenutoPP(larghezza, posizione)
{
 //cmd =  caricato.GetTitle() + '<div style="bgcolor=#FFFFFF; background-color:#FFFFFF">' + shape.GetDescription() + '</div>';
 cmd = "<div id='modulo_popup' class='pannelloCartografico'>" + shape.GetTitle() + '<div class="panelCartograficoBody panelCartograficoBorders sfondoBody"><div id="popup_container">' + shape.GetDescription() + '</div><div class="clearer"></div></div><b class="arbottom"><b class="res4"></b><b class="res3"></b><b class="res2"></b><b class="res1"></b></b></div>';
 shapeInfoPanel = AddMyControl('pushPinInfo', 'pushPinInfoBox', cmd, '0px', larghezza + 'px',posizione+'px', posizione+'px');       
 
}

function nascondiContenutoPP()
{
 RemoveMyControl(shapeInfoPanel);
 caricato=null;
}

function ShapeInfo500(e)
        {
            
            if(e.elementID != null)
			{
			
                shape = map.GetShapeByID(e.elementID);
				if (caricato==null)
				{
				 caricato=shape;
                 mostraContenutoPP(150,100);
                }
				else
				{
  				 nascondiContenutoPP();
  				 if (map.GetShapeByID(e.elementID) != caricato)
  				 {
  				  shape = map.GetShapeByID(e.elementID);
  				  caricato=shape;
	              mostraContenutoPP(150,100);
	             } 
  			    }
  			    return true;
			}else
  			  return false;
  		}


function pulisciMappa()
{
     layers.moveFirst();
     for(cn=0; cn < layers.size(); cn++)
     {
      myL = new SkipperLayer();
      myL = layers.getValueByPos(cn);
      myL.shapes.remove(layers.getKeyByValue(layers.getValueByPos()));
      layers.next();
     }

}		
