var map, clusterer, greenIcon, redIcon, blueIcon, markersArray = [], customIcons = [], geocoder, spoint;

greenIcon = new GIcon();
greenIcon.image = "/front/ico_our.png";
greenIcon.iconSize = new GSize(21, 31);
greenIcon.iconAnchor = new GPoint(6, 20);
greenIcon.infoWindowAnchor = new GPoint(10, 2);
		
redIcon = new GIcon();
redIcon.image = "/front/ico_office.png";
redIcon.iconSize = new GSize(29, 34);
redIcon.iconAnchor = new GPoint(6, 20);
redIcon.infoWindowAnchor = new GPoint(15, 2);
		
blueIcon = new GIcon();
blueIcon.image = "/front/ico_agent.png";
blueIcon.iconSize = new GSize(21, 26);
blueIcon.iconAnchor = new GPoint(6, 20);
blueIcon.infoWindowAnchor = new GPoint(10, 2);

customIcons["our"] = greenIcon;
customIcons["agent"] = blueIcon;
customIcons["office"] = redIcon;


function GeoLocationOnMap(pointName){
  geocoder.getLocations('город Москва, ' + pointName, function(geoCode){
    if (typeof geoCode.Placemark != 'undefined') {
      if (geoCode.Placemark.length == 1) {
        if (typeof spoint != 'undefined') {
          map.removeOverlay(o);
        }
        spoint = new GLatLng(geoCode.Placemark[0].Point.coordinates[1],
                            geoCode.Placemark[0].Point.coordinates[0]);
        map.setCenter(spoint, 15);
        o = new GMarker(spoint);
        map.addOverlay(o);
      }else if(geoCode.Placemark.length > 1) {
        map.geocoder.suggest(geoCode.Placemark);
      }
    }
  });
}

function createMarker(point, name, address, type){
	var marker = new GMarker(point, customIcons[type]);
	marker.type = type;
	markersArray.push(marker);
	var html = "<b>" + name + "</b> <br/>" + address;
	GEvent.addListener(marker, 'click', function() {
		marker.openInfoWindowHtml(html);
	});
	return marker;
}
				
function initialize(){
	if(GBrowserIsCompatible()){
		map = new GMap2(document.getElementById("google_map"));
		geocoder = new GClientGeocoder();
		map.setCenter(new GLatLng(55.739482,37.608948), 10);
		map.addControl(new GSmallMapControl());
		map.addControl(new GMapTypeControl());
		//map.setUIToDefault();
		
		clusterer = new Clusterer(map);
		clusterer.SetMinMarkersPerCluster(3);
		clusterer.SetMaxLinesPerInfoBox(20);

		var point = new GLatLng(55.8455,37.534297);
		var name = 'Офис';
		var address = $("#google_map").attr("alt");
		var type = 'office';
		var marker = createMarker(point, name, address, type);
		map.addOverlay(marker);
		var html = "<b>" + name + "</b> <br/>" + address;
		marker.openInfoWindowHtml(html);
		
		GDownloadUrl("/system/php/csv.php", function(data){
			var xml = GXml.parse(data);
			var markers = xml.documentElement.getElementsByTagName("marker");
			for (var i = 0; i < markers.length; i++) {
				var name = markers[i].getAttribute("name");
				var address = markers[i].getAttribute("address");
				var type = markers[i].getAttribute("type");
				var point = new GLatLng(
					parseFloat(markers[i].getAttribute("lat")),
					parseFloat(markers[i].getAttribute("lng"))
				);
				var marker = createMarker(point, name, address, type);
				if(type == 'agent'){
					clusterer.AddMarker(marker, 'title');
				}else{
					map.addOverlay(marker);
				}
			}
		});
	}
}