google.load("maps", "2.x");

var map  = null;
var lat  = "45.7729";
var long = "9.339262";

var centerLat  = "43.504737";
var centerLong = "10.733643";

var centerZoom = 6;
var geocoder = null;
var address = '';

var mgr   = null;
var icons = {};

function load() {
  if (GBrowserIsCompatible()) {
	map = new GMap2(document.getElementById("googleMap"));
	map.addControl(new GLargeMapControl());
	map.setCenter(new GLatLng(centerLat,centerLong), centerZoom);
	map.setMapType(G_HYBRID_MAP);
	map.enableDoubleClickZoom();
	map.enableContinuousZoom();
	window.setTimeout(setupOfficeMarkers, 0);
  }
}	

function getIcon(images) {
  var icon = null;
  if (images) {
	if (icons[images[0]]) {
	  icon = icons[images[0]];
	} else {
	  icon = new GIcon();
	  icon.image = "/skin/website/widgets/map/" + images[0] + ".png";
	  var size = iconData[images[0]];
	  icon.iconSize = new GSize(size.width, size.height);
	  icon.iconAnchor = new GPoint(size.width >> 1, size.height >> 1);
	  //icon.shadow = "/skin/website/widgets/map/" + images[1] + ".png";
	  //size = iconData[images[1]];
	  //icon.shadowSize = new GSize(size.width, size.height);
	  icons[images[0]] = icon;
	}
  }
  return icon;
}

function createMarker(point,name,html,icon) {
	var marker = new GMarker(point, {icon:icon});
	GEvent.addListener(marker, "click", function() {
	    map.setCenter(point);
		map.setZoom(12);
		map.openInfoWindowHtml(point,html);
	});
	return marker;
}

function setupOfficeMarkers() {
  mgr = new GMarkerManager(map);
  for (var i in officeLayer) {
	var layer = officeLayer[i];
	var markers = [];
	for (var j in layer["places"]) {
	  var place = layer["places"][j];
	  var icon = getIcon(place["icon"]);
	  var posn = new GLatLng(place["posn"][0], place["posn"][1]);
	  //markers.push(new GMarker(posn, { title: place["name"], icon: icon }));
	  var marker = createMarker(posn,'mk'+j,'<b>'+place["name"]+'</b><br>'+place["tel"],icon);
      markers.push(marker);
	}
	mgr.addMarkers(markers, layer["zoom"][0], layer["zoom"][1]);
  }
  mgr.refresh();
}

google.setOnLoadCallback(load);