// variabili globali
var gmarkers = [];
var gmarkersPrimo = []; //array che contiene solo i marker che si visualizzano per primi
var markerCluster; // qui il marker cluster è globale
var mgr; 
var map=null;
var ib = null;
var primaCat = "maestro"; //la categoria da visualizzare per prima

// inizializza la mappa, viene richiamata per prima
function initialize() {
    var myOptions = {
        zoom: 5,
        center: new google.maps.LatLng(41.895633,12.488022), // centra la mappa su Roma
        //center: new google.maps.LatLng(latCentro,lngCentro),
        mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    // crea una nuova mappa
    map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
    var mgrOptions = {borderPadding: 100, maxZoom: 15, trackMarkers: false};
    mgr = new MarkerManager(map, mgrOptions);
    // associa un ascoltatore di eventi alla mappa
    google.maps.event.addListener(map, 'click', function() {
        for(var i=0; i<gmarkers.length; i++) 
         gmarkers[i].myInfoBox.close(); // al click su un area della mappa si chiudono le infoBox aperte
    });
    

    $.getJSON("Classes/loadMarkers.php", function(json) { 
        if (json.Locations.length>0) { 

            for (i=0; i<json.Locations.length; i++) { 

                var location = json.Locations[i]; 
                var point = new google.maps.LatLng(location.lat , location.lng);
                var name = location.nome;
                var html = location.html;
                var icona = location.icona
                //var category = location.stato;
                createMarker(point,name,html,map, icona); 
            } 
            
            markerCluster = new MarkerClusterer(map, gmarkersPrimo);       
            mgr.addMarkers(gmarkers,11);
            mgr.refresh()
            
        }

    });
 	
}             

// Questa funzione serve a genereare un generico marker con la infowindow e una categoria
function createMarker(coord,name,html,mappa,icona) {
//    if(category == primaCat) 
        visMarker = true;
//     else visMarker = false;
     var marker = new google.maps.Marker({
        position: coord,
        icon: "images/"+icona,
        map: mappa,
        title: name,
        visible: visMarker
    });
    // === registra la category come un marker properties ===
    //marker.mycategory = category;
    // opzioni che servono per inizializzare la infobox, da qui si settano diversi parametri utili. vedi documentazione per maggiori proprieta
    var options = {
                 boxClass: 'infoBox' //assegna una classe css con il nome uguale alla categoria del marker, in questo modo si separano le viste
                ,disableAutoPan: false
                ,maxWidth: 50
                //,pixelOffset: new google.maps.Size(-54, -93)
                ,zIndex: null            
                ,closeBoxMargin: "2px 2px 2px 2px"
                ,closeBoxURL: "http://www.google.com/intl/en_us/mapfiles/close.gif"
                ,infoBoxClearance: new google.maps.Size(20, 20)
                ,isHidden: false
                ,pane: "floatPane"
                ,enableEventPropagation: false
        };
    ib = new InfoBox(options); //crea fisicamente la infobox
    ib.setContent(html); // assegna il testo in html della infobox
    
    marker.myInfoBox = ib;
    gmarkers.push(marker); //mette il marker nel cluster
    //if (gmarkers[i].mycategory == primaCat) 
      gmarkersPrimo.push(marker);
   
    //apre l'infobox al click sul marker
    google.maps.event.addListener(marker, "click", function (e) {
        for(var i=0; i<gmarkers.length; i++) 
            gmarkers[i].myInfoBox.close();
        marker.myInfoBox.open(mappa, this);
    });
 
}



// == mostra tutti markers di una particolare category ==
function show(category) {
    var markersTemp = [];
	  hideAll();
    for (var i=0; i<gmarkers.length; i++) {
        if (gmarkers[i].mycategory == category) {
            gmarkers[i].setVisible(true);
            markersTemp.push(gmarkers[i]); // aggiunge il marcatore all'array temporaneo
        }
    }
    markerCluster.addMarkers(markersTemp); // aggiunge l'array di markatori nuovi da visualizzare
}

// == nascondi tutti i markers di una particolare category ==
function hide(category) {
    for (var i=0; i<gmarkers.length; i++) {
        if (gmarkers[i].mycategory != category) {
            gmarkers[i].setVisible(false);
            markerCluster.removeMarker(gmarkers[i]); // rimuove l'i-esimo marker dalla cluserizzazione
			     gmarkers[i].myInfoBox.close();
        }
    }
}

// == nascondi TUTTI i marker 
function hideAll() {
    for (var i=0; i<gmarkers.length; i++) {
        gmarkers[i].setVisible(false);
        markerCluster.removeMarker(gmarkers[i]);
		gmarkers[i].myInfoBox.close();
    }
}

