// Costanti longitudine e latitudine di partenza
var __LONGITUDINE__ = 13;
var __LATITUDINE__  = 42;
var __DEFAULT_ZOOM__ = 15;
var __DEFAULT_SMALL_ZOOM__ = 6;

// Variabili globali
var GoogleMap;
var geocoder;	//geocoder
var startPoint = new GLatLng(__LATITUDINE__,__LONGITUDINE__);	//punto iniziale
var MarkerPoint;   //as Point, il punto del marker
var MarkerX;   //as Marker, il marker vero e proprio (ultimo creato)
var marker_created = false;	//indica se è stato creato un marker (utile solo quando si deve avere solo 1 marker)
var OneMarker = false; //indica se deve esserci solo 1 marker


/* Crea una nuova istanza della mappa */
function newBasicIstance(scroll_zoom)
{
   // Ottiene l'elemento della pagina chiamato "map" (il DIV) e crea la mappa utilizzandolo come contenitore.
   //var map = new GMap2(document.getElementById(__GMAP_CONTAINER__));                
   map = new GMap2(document.getElementById(__GMAP_CONTAINER__));
   map.setCenter(startPoint, __DEFAULT_SMALL_ZOOM__);	// NON SPOSTARE DA QUI
   map.savePosition();
   
   // Aggiunge dei controlli per lo zoom e lo spostamento 
  map.addControl(new GLargeMapControl()); 	// freccette e barra scorrimento

   // Aggiunge i pulsanti per scegliere il tipo di mappa
   map.addControl(new GMapTypeControl());

   map.enableDragging();         // abilita il trascinamento
   map.enableInfoWindow();       // abilita i quadri informazione
   map.enableDoubleClickZoom();  // abilita lo zoom con il doppio click
   map.enableContinuousZoom();   // abilita lo zoom continuato
   if(scroll_zoom)	map.enableScrollWheelZoom();  // abilita lo zoom con la rotellina del mouse
   
   return map;
}

// Caricamento effettivo della mappa (da richiamare in onLoad di <body>)
function mapLoad(scroll_zoom, quick_search, marker_creator, onlyOneMarker, delete_marker_onclick)
{
   if (GBrowserIsCompatible())
   {
      if(scroll_zoom== undefined || scroll_zoom==null)   scroll_zoom=false;
   	  map = newBasicIstance(scroll_zoom);
	  
	  if(marker_creator== undefined || marker_creator==null)   marker_creator=false;
	  if(delete_marker_onclick== undefined || delete_marker_onclick==null)   delete_marker_onclick=false;
	  Marker_delOnClick = delete_marker_onclick;
	  if(onlyOneMarker== undefined || onlyOneMarker==null)   onlyOneMarker=false;
	  OneMarker = onlyOneMarker;
	  
	  // Abilita la creazione di marker
	  if(marker_creator)
      GEvent.addListener( map, "click", function(marker, point) {
                                        if (!marker)                 { MarkerPoint = point; NewMarker(MarkerPoint); }
					                    else if(Marker_delOnClick)   { MarkerPoint = null;  DeleteMarker(marker); }   });
   
      // Richiama il geocoder - x la ricerca rapida
	  if(quick_search== undefined || quick_search==null)   quick_search=false;
      if(quick_search)	geocoder = new GClientGeocoder();
	  
	  return map;
   }
}

// Gestisce la creazione di un marker semplice
function NewMarker_OnlyOne(map, point, description, ico)
{
   // Elimina un marker già esistente
   if(marker_created && OneMarker)   DeleteMarker_onClick(MarkerX);

   // Processo di creazione
   if(ico==null || ico==undefined)   MarkerX = new GMarker(point);
   else
   {
	   var w=32;
	   var h=32;
	   var NewIcon = new GIcon();
	   NewIcon.image = ico;
	   NewIcon.iconSize = new GSize(w, h);
	   NewIcon.iconAnchor = new GPoint(w/2, h);
	   NewIcon.infoWindowAnchor = new GPoint(w, h/2);
	   MarkerX = new GMarker(point, NewIcon);
   }
   map.addOverlay(MarkerX);
   
   if(!Marker_delOnClick)   GEvent.addListener(MarkerX, "click", function() { MarkerX.openInfoWindowHtml(description);});
   marker_created=true;
   zoom = map.getZoom();
   if(zoom < __DEFAULT_ZOOM__)   zoom = __DEFAULT_ZOOM__;
   map.setCenter(point, zoom);
   map.savePosition();
   
   // Impostazione dati per form
   //document.getElementById(__GMAP_LAT_INPUT__).value = MarkerPoint.lat();
   //document.getElementById(__GMAP_LNG_INPUT__).value = MarkerPoint.lng();
   //document.getElementById(__GMAP_GOTO_MARKER_BTN__).removeAttribute('disabled');
   
   return point;
}

// Gestisce la creazione di un marker semplice
function NewMarker(map, point, description, ico)
{
   var mark;
   // Processo di creazione
   if(ico==null || ico==undefined)   mark = new GMarker(point);
   else
   {
	   var w=32;
	   var h=32;
	   var NewIcon = new GIcon();
	   NewIcon.image = ico;
	   NewIcon.iconSize = new GSize(w, h);
	   NewIcon.iconAnchor = new GPoint(w/2, h);
	   NewIcon.infoWindowAnchor = new GPoint(w, h/2);
	   mark = new GMarker(point, NewIcon);
   }
   map.addOverlay(mark);
   GEvent.addListener(mark, "click", function() { mark.openInfoWindowHtml(description);});
   zoom = map.getZoom();
   if(zoom < __DEFAULT_ZOOM__)   zoom = __DEFAULT_ZOOM__;
   map.setCenter(point, zoom);
   map.savePosition();
   
   // Impostazione dati per form
   //document.getElementById(__GMAP_LAT_INPUT__).value = MarkerPoint.lat();
   //document.getElementById(__GMAP_LNG_INPUT__).value = MarkerPoint.lng();
   //document.getElementById(__GMAP_GOTO_MARKER_BTN__).removeAttribute('disabled');
   
   return point;
}


// Gestisce l'eliminazione di un marker
function DeleteMarker(marker)
{
   // Processo di eliminazione
   map.removeOverlay(marker);
   marker_created=false;
   
   // Impostazione dati per form
   //document.getElementById(__GMAP_LAT_INPUT__).value = "";
   //document.getElementById(__GMAP_LNG_INPUT__).value = "";
   //document.getElementById(__GMAP_GOTO_MARKER_BTN__).disabled = "disabled";
}




// Posiziona la mappa nel punto iniziale
function goTo_StartPosition()
{
   GoogleMap.setCenter(startPoint);
   GoogleMap.setZoom(__DEFAULT_SMALL_ZOOM__);
}

// Posiziona la mappa sul marker
function goTo_CreatedMarker()
{
   GoogleMap.returnToSavedPosition();
}



/************************************************************************************************
 *   Funzioni per la ricerca rapida                                                             *
 ************************************************************************************************/

// Recupero coordinate da Indirizzo, Città, Provincia . . . by http://etech.top-ix.org/api-how-to/15/personalizzare-la-propria-mappa/
/* La funzione showLocation() mostrata in questo esempio è richiamata quando si fa un click sul pulsante “cerca” di un form.
   Questa grazie al geocoder trova le coordinate dell’indirizzo e richiama la funzione addAddressToMap che, nel caso in cui l’indirizzo sia stato trovato, crea un marker.
   Una possibile implementazione di quest’ultima può essere: */
function searchLocation()
{
   var address = document.getElementById(__GMAP_SEARCH_INPUT__).value;
   geocoder.getLocations(address, addAddressToMap);
}

function addAddressToMap(response)
{
   map = GoogleMap;
   if (!response || response.Status.code != 200)
   {
      alert(__GMAP_SEARCH_ADDRESS_NOT_FOUND__);
   } 
   else
   {
      place = response.Placemark[0];
	  MarkerPoint = new GLatLng(place.Point.coordinates[1], place.Point.coordinates[0]);
	  NewMarker_onClick();
   }
}


function createMarkers_Div(text_container, array_name)
{
	var txt = document.getElementById(text_container);
	GEvent.addListener( GoogleMap, "click",
	function(marker, point) {
	if (!marker) { GoogleMap.addOverlay(new GMarker(point));
	               txt.innerHTML = txt.innerHTML + "<br />" + array_name + "[" + superCounter + "] = new Array(  \"" + point.lat() + "\", \"" + point.lng() + "\", \"" + "Latitudine: " + point.lat() + "&lt;br /&gt;Longitudine: " + point.lng()+ "\" );";
				   superCounter++;
	             }
	else         { GoogleMap.removeOverlay(marker); }   });
}

function createMarkers(array)
{
	var i = 0;
	var w = 25;
	var h = 25;
	var icons = new Array();
	// Crea l'icona personalizzata
	for(i=0; i<5; i++)
	{
	   icons[i] = new GIcon();
	   icons[i].image = "ico" + (i+1) + ".png";
	   icons[i].iconSize = new GSize(w, h);
	   icons[i].iconAnchor = new GPoint(w/2, h);
	   icons[i].infoWindowAnchor = new GPoint(w, 0);
	}
	//icons[0].shadow = ""; 
	//icons[0].shadowSize = "";
	
	for(i=0; i<array.length; i++)
	{
		createHtmlMarker(GoogleMap, new GLatLng(array[i][0], array[i][1]), array[i][2], icons[array[i][3]-1]);
	}
}

// Funzione che crea il Marker
function createHtmlMarker(map, point, description, ico)
{
   if(ico!=null && ico!=undefined)   var marker = new GMarker(point, ico);
   else   var marker = new GMarker(point);
   map.addOverlay(marker);//<div style="float:left; margin-right:10px;"><img src="'+ico.image+'" /></div>
   GEvent.addListener(marker, "click", function() { marker.openInfoWindowHtml(description);});
}

/***********************************************/

