    function load() {
		if (GBrowserIsCompatible()) {
			center = new GLatLng(cx, cy)
			map = new GMap2(document.getElementById("map"));
			map.addControl(new GLargeMapControl());
			map.addControl(new GOverviewMapControl());
			map.addControl(new GMapTypeControl());
			map.enableScrollWheelZoom();
			map.setCenter(center, cz);
			mgr = new MarkerManager(map, {trackMarkers:true});

			GEvent.addListener(map, 'zoomend', refreshIcon);
			GEvent.addListener(map, 'dragend', refreshIcon);

			window.setTimeout(refreshIcon, 0);
		}
	}

    function getIcon(images) {
		var icon = null;
		if (images) {
			if (icons[images[0]]) {
				icon = icons[images[0]];
			} else {
				icon = new GIcon();
				icon.image = "imgs/catdiv/gmap/" + iconData[images[0]].name;
				var size = iconData[images[0]].size;
				icon.iconSize = new GSize(size.width, size.height);
				icon.iconAnchor = new GPoint(size.width >> 1, size.height >> 1);
				icon.shadow = "imgs/catdiv/gmap/" + iconData[images[1]].name;
				size = iconData[images[1]].size;
				icon.shadowSize = new GSize(size.width, size.height);
				icons[images[0]] = icon;
			}
		}
		return icon;
	}

    function setupOfficeMarkers() {
		allmarkers.length = 0;
		for (var i in officeLayer) {
			var layer = officeLayer[i];
			var markers = [];
			if (layer["places"]) {
				for (var j in layer["places"]) {
					var place = layer["places"][j];
					var icon = getIcon(place["icon"]);
					var title = place["name"];
					var posn = new GLatLng(place["posn"][0], place["posn"][1]);
					var sdid = place["sdID"];
					var marker = createMarker(posn, title, icon, sdid); 
					markers.push(marker);
					allmarkers.push(marker);
				}
				mgr.addMarkers(markers, layer["zoom"][0], layer["zoom"][1]);
			}
		}
		mgr.refresh();
	}

	var ipos;
	var sdID;

	function createMarker(posn, title, icon, sdid) {
      var marker = new GMarker(posn, {title: title, icon: icon, draggable:false });
	  GEvent.addListener(marker, 'click', function() {ipos = posn; sdID = sdid; infoWindow();} ); 
      return marker;
    }

    function deleteMarker() {
      var markerNum = parseInt(document.getElementById("markerNum").value);
      mgr.removeMarker(allmarkers[markerNum]);
    }
   
    function clearMarkers() {
      mgr.clearMarkers();
    }
   
    function reloadMarkers() {
      setupOfficeMarkers();
    }

	function toCenter(lng, lat, zoom) {
		center = new GLatLng(lat, lng);
		map.setCenter(center, zoom);
		refreshIcon();
	}

	function refreshIcon() {
		var bn = map.getBounds();
		var sw = bn.getSouthWest();
		var ne = bn.getNorthEast();
		var si = '';
		for (var i in iconData) {
			var o = document.getElementById('i' + iconData[i].id);
			if (o && o.checked) {
				si += iconData[i].id + ',';
			}
		}
		si = si.substring(0, si.length -1);
		var purl = 's=' + sw.x + '&w=' + sw.y + '&n=' + ne.x + '&e=' + ne.y + '&i=' + si;

		ajax = new ajaxObjs();
		ajax.init();
		ajax.send('gmapajax.asp', purl);
		window.setTimeout('procAjax()', 100);
		return (true);
	}

	function showAll() {
		for (var i in iconData) {
			var o = document.getElementById('i' + iconData[i].id);
			if (o && !o.checked) {
				o.checked = true;
			}
		}

		refreshIcon();
	}

	function hideAll() {
		for (var i in iconData) {
			var o = document.getElementById('i' + iconData[i].id);
			if (o && o.checked) {
				o.checked = false;
			}
		}
		mgr.clearMarkers();
		mgr.refresh();
	}

	function procAjax() {
		if (ajax.busy == false) {
			var p = eval('(' + ajax.http.responseText + ')');
			officeLayer[0].places.length = 0;
			officeLayer[0].places = p;
			mgr.clearMarkers();
			window.setTimeout('setupOfficeMarkers()', 0);
		} else {
			window.setTimeout('procAjax()', 25);
		}
	}

	function infoWindow() {
		map.openInfoWindowHtml(ipos, '<div id="gmap_help">загрузка...</div>');
		bjax = new ajaxObjs();
		bjax.init();
		bjax.send('gmapinfo.asp', 'sdID=' + sdID);
		window.setTimeout('procInfo()', 100);
	}

	function procInfo() {
		if (bjax.busy == false) {
			var p = bjax.http.responseText;
			map.closeInfoWindow();
			map.openInfoWindowHtml(ipos, p);
		} else {
			window.setTimeout('procInfo()', 25);
		}
	}

	function search() {
		var o = document.getElementById('q');
		if (!o) { return; }
		if (o.value == '' || o.value.length < 2) {
			alert('Уточните условия поиска!');
			return;
		}
		var v = o.value;
//		var n = open('gmapsearch.asp?q=' + encodeURIComponent(v.toString()), '', 'width=500,height=400,status=no,toolbar=no,menubar=no,resizable=yes');
		var n = open('gmapsearch.asp?q=' + v.toString(), '', 'width=500,height=400,status=no,toolbar=no,menubar=no,resizable=yes');
	}

	function makeUrl() {
		z = map.getZoom();
		c = map.getCenter();
		x = c.lat();
		y = c.lng();
		return ('map.asp?x='+x+'&y='+y+'&z='+z);
	}

	function mailto() {
		var subj = 'ссылка на карту AllYachts.Ru';
		var body = 'http://www.allyachts.ru/' + makeUrl();
		
		var w = open('mailto:?body=' + encodeURIComponent(body) + '&subject=' + subj);
		if (w) w.close();
	}

	function geturl() {
		var d = document.getElementById('gmap_getlink');
		var o = document.getElementById('getlink');

		if (!o || !d) { return; }

		o.value = 'http://www.allyachts.ru/' + makeUrl();
		d.style.display = 'block';
	}

	function print() {
		var z = map.getZoom();
		var c = map.getCenter();
		var x = c.lat();
		var y = c.lng();
		var bn = map.getBounds();
		var sw = bn.getSouthWest();
		var ne = bn.getNorthEast();
		var si = '';
		for (var i in iconData) {
			var o = document.getElementById('i' + iconData[i].id);
			if (o && o.checked) {
				si += iconData[i].id + ',';
			}
		}
		si = si.substring(0, si.length -1);
		var purl = 's=' + sw.x + '&w=' + sw.y + '&n=' + ne.x + '&e=' + ne.y + '&x=' + x + '&y=' + y + '&z=' + z + '&i=' + si;

		var n = open('gmapprint.asp?' + purl, '', 'width=650,status=no,toolbar=no,menubar=yes');
	}

	function addLayer(n, x) {
		officeLayer[n].places[0] = x;
	}

	function panTo(lat, lng) {
		map.panTo(new GLatLng(lat, lng));
	}

