var map = null;
var bounds = null;
var currentMarker = null;
var mapDiv = null;
var containerDiv = null;
var clickedX = 0;
var clickedY = 0;
var isLoaded = false;

function loadMap() {
  if (GBrowserIsCompatible()) {
    mapDiv.style.background = '#fff';
    mapDiv.style.cursor = '';
    map = new GMap2(mapDiv);
    map.enableScrollWheelZoom();
    map.addControl(new GLargeMapControl());
    
    bounds = new GLatLngBounds();
    for (var i = 0; i < luoghi.length; i++) {
      bounds.extend(new GLatLng(luoghi[i].lat, luoghi[i].lng));
    }
    var latSpan = bounds.toSpan().lat();
    map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds));

    var newBounds = map.getBounds();
    var newLatSpan = newBounds.toSpan().lat();
    if (latSpan/newLatSpan > .90) { map.zoomOut(); }

    for (var i = 0; i < luoghi.length; i++) {
      var marker = createMarker(i);
      var latlng = marker.getLatLng();
      var pixel = map.fromLatLngToDivPixel(latlng);
      if (Math.abs(pixel.x - clickedX) < 12 && Math.abs(pixel.y - clickedY) < 20) {
        //GEvent.trigger(marker, 'click');
      }
      map.addOverlay(marker);
    }
  }
}

function zoomToAll() {
  map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds));
}

function createMarker(i) {
  var luogo = luoghi[i];
  //alert(luogo.iconasede);
  var icona = new GIcon(G_DEFAULT_ICON);
  icona.iconSize = new GSize(20, 28);
  icona.image = luogo.iconasede;
  icona.shadow = null;
  markerOptions = { icon: icona };
  
  var marker = new GMarker(new GLatLng(luogo.lat, luogo.lng), markerOptions);
  GEvent.addListener(marker, 'click', function() {
    marker.html = 
    [
	    '<b>', luogo.nome, '</b>',
	    '<br>',
	    luogo.indirizzo,
	    '<br>',
	    'Tel: ', luogo.telefono,
	    '<br>',
	    'E-mail: ', '<a href="mailto:', luogo.email, '">',luogo.email, '</a>'
    ].join('');
    currentMarker = marker;
    marker.openInfoWindowHtml(marker.html);
  });
  return marker;
}


function formatAddressForMaps(luogo) {
  var address = luogo.street + ' ' + luogo.city + ' ' + luogo.state + ' ' + luogo.zip;
  return escape(address.replace(' ', '+'));
}

function _cel(elementType, id) {
  var element = document.createElement(elementType);
  element.id = id;
  return element;
}

/**
 * Loads in the Maps API script. This is called after some sort of user interaction.
 * The script loads asynchronously and calls loadMap once it's in.
 */
function loadScript() {
  if (!isLoaded) {
    isLoaded = true;
    var div = document.createElement('div');
    div.className = 'message';
    div.innerHTML = 'Caricamento mappa...';
    div.style.left = (500/2 - 53) + 'px';
    div.style.top = 500/2 + 'px';
    mapDiv.appendChild(div);
    
    var script = document.createElement('script');
    script.type = 'text/javascript';
    script.src = 'http://maps.google.com/maps?file=api&v=2.x' + 
                 '&async=2&callback=loadMap&key=ABQIAAAAAX2zBQwE9dF7Fl4KZCcj0RRnt0EBTiijK7vnx2_IHrUuRRT80hR6JfT_xOKFeutkQlYZspF3UVcqXw';
    document.body.appendChild(script);
  }
}

/**
 * Sets up the gadget by setting CSS and click events.
 */
function caricaMappaAcli() {
  containerDiv = document.getElementById('container');
  mapDiv = document.getElementById('lamappa');
  loadScript(); 

  mapDiv.style.cursor = 'pointer';
}