var map;
var marker = [];
var markerImage = [
"http://www.residenzedepoca.it/inc/files/images/standard_marker.png", //0 - bluette
"http://maps.google.com/mapfiles/dd-start.png",
"http://maps.google.com/mapfiles/dd-end.png",
"http://www.residenzedepoca.it/inc/files/images/hover_marker.png",//3 - arancio
"http://www.residenzedepoca.it/inc/files/images/visited_marker.png", //4 - violetto
"http://www.residenzedepoca.it/inc/files/images/selected_marker.png" //5 - bordeaux
];

var distanza_approssimata = 0;

var teksti = " ";

function sideBar(line, j, evidenzia, mostra)
{
  
  // Rendo invisibili partner troppo distanti (non posso cancellarli altrimenti 
  // mi sballa l'evidenziazione dei segnalini...)
  if(!mostra)
    teksti += "<div style='visibility:hidden;font-size:0px;'>";

  teksti += "<li><span ";

  if(evidenzia){
  /* Se c'è un partner da evidenziare (es. se ci troviamo nella sezione "dove siamo"
  *  di una scheda) lo segnalo con un colore speciale 
  */
      teksti += " class='nome_partner evidenziato' style='text-decoration: none; font-size:120%;' ";
  }
  teksti += "onclick='GEvent.trigger(marker["+j+"],\"click\")' ";
  teksti += "onmouseover='GEvent.trigger(marker["+j+"],\"mouseover\")' ";
  teksti += "onmouseout='GEvent.trigger(marker["+j+"],\"mouseout\")' ";
  teksti += ">";
  teksti += line;
  teksti += "</span></li>";

  // Chiudo il DIV usato per rendere invisibili i partner troppo distanti.
  if(!mostra)  
    teksti += "</div>";
  
  // inietta HTML nel div
  document.getElementById("sidebar").innerHTML = teksti;
}


function loadMap(identificativo, flag_mappa)
{
    map = new GMap2(document.getElementById("map"));
    
    // Aggiunge controllo per lo zoom
    map.addControl(new GSmallZoomControl());
        
    // Aggiunge controllo per selezionare la tipologia: Mappa - Satellite - Ibrida
    map.addControl(new GMapTypeControl());

    // Costruzione del rettangolo
    var bounds = new GLatLngBounds();

    // Centro della mappa corrispondente al centro del rettangolo identificato dal parametro bounds
    map.setCenter(bounds.getCenter());

    new GKeyboardHandler(map);
    map.enableContinuousZoom();
    map.enableDoubleClickZoom();
    
    var max_distanza = document.getElementById('max_distanza').value;
    var totale = document.getElementById('totale').value;
    var coefficiente = document.getElementById('coefficiente').value;

    //alert("farò "+totale+" cicli");
    for (var i = 0; i < totale; i++)
    {
      //alert(i);
      /* Determina latitudine e longitudine*/  
      var lat = document.getElementById('lat'+i).value;
      var lng = document.getElementById('long'+i).value;

      /* Crea nuovo punto */  
      var point = new GLatLng(lat,lng);
      //alert('Partner '+ i + ':'+document.getElementById('nome'+i).value + point );

      if(flag_mappa == 'is_map')
      {
      /*************************************************************************
      * MAPPA DI ZONA (regione, provincia, località)
      * Visualizzo segnalini tutti dello stesso colore                    
      */
          var partnerEvidenziato = false;
          
          if(document.getElementById('tipo_mappa').value == "regione") {
              // REGIONE: ignoro distanze
              var distanza = 0;
              var partnerEvidenziato = false;
          } else {
              // PROVINCIA O AREA: considero le distanze (e ignoro il primo elemento, che indica l'area corrente)
              if(i == 0) {
                  var distanza = 0;
                  var partnerEvidenziato = true;
              } else
                  var distanza = point.distanceFrom(marker[0].getLatLng()) * coefficiente;
          }

          
          document.getElementById('distanza'+i).value = distanza;
          
          var label = document.getElementById('nome'+i).value;
          /*alert("nome("+i+"):" + document.getElementById('nome'+i).value);*/

          if(distanza > 0){
              distanza_approssimata = Math.round((distanza)/1000); 
              
              var nascondi_distanza = (document.getElementById('nascondi_distanza').value == "si");
              if(!nascondi_distanza)
                  label += ' <br><small>(' + distanza_approssimata + ' km)</small>';
          }
          else
              distanza_approssimata = 0;
          
      }
      else
      {
      /*************************************************************************
      * MAPPA "DOVE SIAMO" (relativa ad una scheda partner)
      * Evidenzio il partner con un colore speciale e segnalo distanze con gli altri partner di zona
      */

          if(document.getElementById('id_partner'+i).value == identificativo){
          /* Se c'è un partner da evidenziare (es. se ci troviamo nella sezione "dove siamo"
          *  di una scheda), setto un flag che permetterà di segnalarlo con un colore opportuno... 
          */
              var partnerEvidenziato = true;
              var distanza = -1;
          } else {
              var partnerEvidenziato = false;
              var distanza = point.distanceFrom(marker[0].getLatLng()) * coefficiente;
              document.getElementById('distanza'+i).value = distanza;
          }
          
          /* Testo da mostrare nella sidebar (es. nome della dimora) */  
            var label = document.getElementById('nome'+i).value;
            
            if(distanza > 0){
                distanza_approssimata = Math.round((distanza)/1000); 
                label += ' <br><small>(' + distanza_approssimata + ' km)</small>';
            } else
                distanza_approssimata = 0;
          
          var nascondi_distanza = false;
      }
      
      
      /**
      * Visualizzo solo partner che si trovano ad una distanza max prestabilita
      */  
          if(distanza_approssimata <= max_distanza || (document.getElementById('provincia'+i).value == document.getElementById('seo_name_provincia').value))
          {
          /**
          * Richiama funzione che mostra elenco delle dimore nella sidebar, associando a ciascuna i relativi "eventi" (mouseover ecc.)
          */  
              sideBar(label,i,partnerEvidenziato, true);
    
          /*************************************************************************
          * Prepara contenuto HTML da mostrare nel balloon (infowindow) del marcatore
          */  
              var contenuto = '<div class="" style="padding:20px;margin:20px;background-color: #ffffff;line-height:1px;">';
              contenuto = '<div class="evidenziato" style="padding:5px;line-height:1em">' + document.getElementById('nome'+i).value + '</div>';
              //contenuto += '<br><span class="small" style="padding:5px;">(' + document.getElementById('localita'+i).value + ')</span>';

              if((distanza_approssimata > 0) && (!nascondi_distanza)){
                    contenuto += '<div class="bitsmall" style="padding:5px;line-height:1em">distanza da '+ document.getElementById('nome0').value +': circa <strong>';
                    contenuto += distanza_approssimata + ' km</strong></div>';
              }
              if(!partnerEvidenziato) {
                    contenuto += '<a class="spicca bitsmall" style="padding:5px;line-height:1em" href="/' + document.getElementById('scheda'+i).value + '">Apri scheda</a>';
              }
              contenuto += '</div>';
    
          /**
          * Richiama funzione che crea marker sulla mappa, associando a ciascuno
          * i relativi "eventi" (mouseover ecc.)
          */  
              ZMarker(point,contenuto,1,0,i,null,partnerEvidenziato);
          
          /**
          * Estende il rettangolo di visualizzazione così da includere anche quest'ultimo marker
          */  
              bounds.extend(point);
              //alert("ESTENDO:"+document.getElementById('nome'+i).value);
          }
          else
          {
              sideBar(label,i,partnerEvidenziato, false);
          }
            
    }// end for

    // Determina livello di zoom (se c'è un solo partner, default 12)
    if(totale > 1)
        var zoomlevel = (map.getBoundsZoomLevel(bounds))
    else
        var zoomlevel = 12;
        
    // Centra e zoomma indietro
    map.setCenter(bounds.getCenter(),zoomlevel);
    map.zoomOut();
    
}

// A special createZMarker function
// 'infowindowclose' listener is attached to marker
// It deletes the marker and creates a copy with lower z-index
// Feel free to use but please include:
// Originally created by Esa 2007

var n=1;
function count()
{
    n++;
    return n;
}

function ZMarker(point,label,n,imInd,i,visited,evidenzia_marker) 
{
    /**
    * Porta il segnalino dietro a tutti gli altri.
    * In questo modo, se i segnalini si sovrappongono, man mano che li evidenzio si vanno a posizionare dietro a tutti gli altri (altero il valore ZIndex)         
    */  
        function sendBack(marker,b) 
        {return GOverlay.getZIndex(marker.getPoint().lat())-n*100000000;}
    
    /* Crea un nuovo marker - se è il marker evidenziato, lo lascio sempre in primo piano */  
        if(evidenzia_marker)   
            marker[i] = new GMarker(point,{title:document.getElementById('nome'+i).value});
        else
            marker[i] = new GMarker(point,{title:document.getElementById('nome'+i).value, zIndexProcess:sendBack});

    /* ...aggiungilo alla mappa*/  
        map.addOverlay(marker[i]);
    
    /* Flag riservato al partner evidenziato (es: proprietario della scheda) */
    marker[i].evidenziato = evidenzia_marker; 
    
    /* Paletta rossa per il partner a cui appartiene la scheda, altrimenti colore di default */
        if(marker[i].evidenziato){
            marker[i].setImage(markerImage[5]);}
        else{
            marker[i].setImage(markerImage[imInd]);}
    
    marker[i].visited = visited;
    marker[i].windowIsOpen = false;

    /* Quando si clicca sul marker o sul link nella sidebar, si apre un box informativo (extinfowindow) */  
    GEvent.addListener(marker[i], 'click', function(){ 
      marker[i].openExtInfoWindow(
        map,
        "simple_example_window",
        label,
        {beakOffset: 3}
      ); 
      marker[i].windowIsOpen = true;
    });
    
    /* Alla chiusura di una extinfowindow marco il segnalino come visitato e lo  porto dietro agli altri (lo rimuovo e ne ricreo un altro mantenendo i suoi dati)*/ 
    GEvent.addListener(map,"extinfowindowclose",function(){
        if(marker[i].windowIsOpen)
        {
            marker[i].windowIsOpen = false;
            marker[i].visited = true;
      
            map.removeOverlay(marker[i]);
            ZMarker(point,label,count(),4,i, marker[i].visited, marker[i].evidenziato);
        }
    });

    GEvent.addListener(marker[i],'mouseover',function(){
    marker[i].setImage(markerImage[3]);
    document.getElementById("sidebar").getElementsByTagName("span")[i].style.background ="#ffcc43";
    /*document.getElementById("sidebar").getElementsByTagName("span")[i].style.textDecoration ="underline";*/
    });

    GEvent.addListener(marker[i],'mouseout',function(){
    if(evidenzia_marker){
    /* Paletta resta rossa per il partner evidenziato (es. quello a cui appartiene la scheda)*/
        marker[i].setImage(markerImage[5]);
    }
    else
    /* ...altrimenti colore di default per i marker già visitati*/
        if(marker[i].visited)
        {
            //document.getElementById("sidebar").getElementsByTagName("span")[i].style.color ="#551a8b";
            marker[i].setImage(markerImage[4]);
        }
        else
        {
            marker[i].setImage(markerImage[0]);
        }
    

    document.getElementById("sidebar").getElementsByTagName("span")[i].style.background ="rgb(255,255,255)";
    /*document.getElementById("sidebar").getElementsByTagName("span")[i].style.textDecoration ="underline";*/
    });

}


