      var map = null;

      function average(markers) {
	      var total = 0;
        for (var i = 0;i < markers.length; i++) {
          total = total + markers[i].value;
        }
        var value = Math.round(total * 10 / markers.length) / 10;

        // different index for different icons showed on cluster maker.
        var index = parseInt(value / 30, 10) + 1;
        return {
          text: value,
          index: index
        };
      };


      function initialize() {
        if(GBrowserIsCompatible()) {
          map = new GMap2(document.getElementById('map'));
          map.setCenter(new GLatLng(53.381581, -7.943115), 7);
          map.addControl(new GLargeMapControl());
          var icon = new GIcon(G_DEFAULT_ICON);
          icon.image = "http://chart.apis.google.com/chart?cht=mm&chs=24x32&chco=FFFFFF,008CFF,000000&ext=.png";
          var markers = [];

          for (var i = 0; i < data.count; ++i) {
            var latlng = new GLatLng(data.customers[i].latitude, data.customers[i].longitude);
            var marker = new GMarker(latlng, {icon: icon});
            marker.value = i;

            	GEvent.addListener(marker, "click", function(ll) {
              		var mdiv = document.createElement('div');
             		 mdiv.innerHTML = data.customers[this.value].address;
              		this.openInfoWindow(mdiv);
            	});


            markers.push(marker);
          }

          var markerCluster = new MarkerClusterer(map, markers, {'calculator': average, 'zoomOnClick': false});
          GEvent.addListener(markerCluster, "clusterclick", function(cluster) {
            var cdiv = document.createElement('div');
            var cmarkers = cluster.getMarkers();
            for (var i = 0; i < cmarkers.length; ++i) {
              cdiv.innerHTML += 'Marker ' + cmarkers[i].marker.value + '<br/>';
            };
            map.openInfoWindow(cluster.getCenter(), cdiv);
          });
        }
      }
