	// Load GMap controls.
	function LoadMap()
	{
		var map = false;
		if (GBrowserIsCompatible())
		{
			map = new GMap2(document.getElementById("map"));
			//map.addControl(new GMapTypeControl());		// Creates a control with buttons to switch between map types.
			//map.addControl(new GLargeMapControl());		// Creates a control with buttons to pan in four directions, and zoom in and zoom out, and a zoom slider.
			//map.addControl(new GScaleControl());		// Creates a control that displays the map scale.

			if (navigator.userAgent.match("MSIE")) {
				document.getElementById("map").attachEvent("onmousewheel", mouseWheelZoomingIE);
			} else if (navigator.userAgent.match("Gecko")) {
				document.getElementById("map").addEventListener("DOMMouseScroll", mouseWheelZoomingGecko, false);
			} else if (navigator.userAgent.match("Safari")) {
				document.getElementById("map").onmousewheel = mouseWheelZoomingIE;
			}
		}
		return map;
	}

	// This event is fired when the change of the map view ends.
	function MoveEnd()
	{
		var count = 0;
		var bounds = map.getBounds();
		var maxPoints = (map.getZoom() + 1) * 8 +50;
		// Remove all non-visible already painted markers
		for (i = 0; i < liveMarkers.length; i++)
		{
			var marker = liveMarkers[i];			
			if (marker.painted)
			{
				var visible = bounds.contains(marker.getPoint());
				if (visible) count++;
				else
				{
					map.removeOverlay(marker);
					marker.painted = false;
				}
			}
		}

		// Add non-painted markers which are visible, up to maxPoints
		for (i = 0; i < liveMarkers.length; i++)
		{
			var marker = liveMarkers[i];
			if ( centerPoint != '' && centerPoint != undefined ) {
				if (centerPoint.equals(marker.getPoint())) continue;
			}
			var visible = bounds.contains(marker.getPoint());
			if (visible && !marker.painted)
			{	
				if (count++ >= maxPoints) break;
				map.addOverlay(marker);
				marker.painted = true;
				count++;
			}
		}
	}


// Mouse scroll zooming
function mouseWheelZoomingIE(event)
{
	var delta = event.wheelDelta;
	event.returnValue = false;
	delta < 0 ? map.zoomOut() : map.zoomIn();
}

// Mouse scroll zooming
function mouseWheelZoomingGecko(event)
{
	var delta = event.detail * -1;
	event.preventDefault();
	delta < 0 ? map.zoomOut() : map.zoomIn();
}

// Creates a nice-looking marker with movie on top of a pin.
// @point	Marker's coordinate (lat, lng).
// @mid		Movie ID.
function createMarker(point, mid)
{
	var icon = createIcon(point, mid);
	return new GMarker(point, icon);
}

// Returns HTML code for direct movie playback.
// @mid		Movie ID.
function getPlayerCode(mid)
{
	var str;
	var width = 320, height = 270;
	str = '<div style=\"margin: 10px;\">';
	str += '<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="'+width+'" height="'+height+'" id="'+mid+'">';
	str += '<param name="allowScriptAccess" value="sameDomain" />';
	str += '<param name="movie" value="http://'+host+'/P320x240.swf?m='+mid+'" />';
	str += '<param name="quality" value="high" />';
	str += '<param name="scale" value="noscale" />';
	str += '<param name="wmode" value="transparent" />';
	str += '<embed src="http://'+host+'/P320x240.swf?m='+mid+'" quality="high" scale="noscale" wmode=\"transparent\" width="'+width+'" height="'+height+'" name="'+mid+'" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />';
	str += '</object>';
	str += '</div>';
	return str;
}

// Creates an icon for movie.
// @point	Icon's coordinate (lat, lng).
// @mid		Movie ID.
function createIcon(point, mid)
{
	var micon = new GIcon();
	micon.shadow = 'http://'+host+'/images/gmap/gicon_shadow.png';
	micon.iconSize = new GSize(40,30);
	micon.shadowSize = new GSize(65,44);
	micon.iconAnchor = new GPoint(30,44);
	micon.infoWindowAnchor = new GPoint(10,10);

	var icon = new GIcon(micon);
	icon.image = 'http://'+host+'/thumbD.mom?mid='+mid;
	return icon;
}

function createTinyMarker(point)
{
	var icon = createTinyIcon();
	return new GMarker(point, icon);
}

// Creates a tiny red icon.
function createTinyIcon()
{
	var icon = new GIcon();
	icon.image = "http://labs.google.com/ridefinder/images/mm_20_red.png";
	icon.shadow = "http://labs.google.com/ridefinder/images/mm_20_shadow.png";
	icon.iconSize = new GSize(12, 20);
	icon.shadowSize = new GSize(22, 20);
	icon.iconAnchor = new GPoint(6, 20);
	icon.infoWindowAnchor = new GPoint(5, 1);
	return icon;
}