var map = null;
var geocoder = null;
var marker = null;
var pw = null;
var pe = null;
var ps = null;
var pn = null;
var markers = null;
var gdir = null;

var xMapDefaultZoom = 14;
var xMapURL = null;
var xMapFeed = null;
var xMapFeeds = [];

function showAddress(address) {
	map.clearOverlays();
	geocoder = new GClientGeocoder();
	if (geocoder) {
		geocoder.getLatLng(
			address,
			function(point) {
				if (!point) {
					alert(address + " not found");
				} else {
					map.setCenter(point, 10);
					var marker = new GMarker(point);
					map.addOverlay(marker);
					marker.openInfoWindowHtml(address);
					jumpToLatLng(point.lat(),point.lng());
				}
			}
		);
	}
}

function setDirections(from, to) {
	if (!gdir) {
	var mapdirs = document.getElementById("map-driving-directions");
	gdir = new GDirections(null, mapdirs);
	GEvent.addListener(gdir, "load", onGDirectionsLoad);
	GEvent.addListener(gdir, "error", handleErrors);
	function handleErrors(){}
	function onGDirectionsLoad(){}
	}
	gdir.load("from: " + from + " to: " + to );
 	return false;
}

function jumpToLatLong(lat,lng) {
		if (!map) {
			loadMap();
		}
		var point = new GLatLng(parseFloat(lat), parseFloat(lng));

		GEvent.addListener(map, "moveend", function() {
			var center = map.getCenter();
			var bounds = map.getBounds();
			var sw = bounds.getSouthWest();
			var ne = bounds.getNorthEast();
			var w = Math.round(sw.lng()-0.5);
			var s = Math.round(sw.lat()-0.5);
			var e = Math.round(ne.lng()+0.5);
			var n = Math.round(ne.lat()+0.5);
			if (w<pw || pw == null || e>pe || pe==null || s<ps || ps==null || n>pn || pn==null) {
				pw = w; pe = e; ps = s; pn = n;
				map.clearOverlays();
		for (var fi = 0; fi < xMapFeeds.length; fi++ ) {
				// --------------------------------------------------
				// alert(xMapFeeds[fi]+"?e="+e+"&w="+w+"&n="+n+"&s="+s); 
				// -------------------------------------------------- 
				GDownloadUrl(xMapFeeds[fi]+"?e="+e+"&w="+w+"&n="+n+"&s="+s, function(data, responseCode) {
					var xml = GXml.parse(data);
					markerspecs = xml.documentElement.getElementsByTagName("marker");
					var icon=null;
					if (markerspecs.length>0) {
						icon = new GIcon();
						icon.image = markerspecs[0].getAttribute('image');
						if (markerspecs[0].getAttribute('shadow')) {
							icon.shadow = markerspecs[0].getAttribute('shadow');
						};
						if (parseInt(markerspecs[0].getAttribute('sizex'))
							&& parseInt(markerspecs[0].getAttribute('sizey'))
						) {
							icon.iconSize = new GSize(
								parseInt(markerspecs[0].getAttribute('sizex'))
								, parseInt(markerspecs[0].getAttribute('sizey'))
							);
						}
						if (parseInt(markerspecs[0].getAttribute('anchorx'))
							&& parseInt(markerspecs[0].getAttribute('anchory'))
						) {
							icon.iconAnchor = new GPoint(
								parseInt(markerspecs[0].getAttribute('anchorx'))
								, parseInt(markerspecs[0].getAttribute('anchory'))
							);
						}
						if (parseInt(markerspecs[0].getAttribute('infox'))
							&& parseInt(markerspecs[0].getAttribute('infoy'))
						) {
							icon.infoWindowAnchor = new GPoint(
								parseInt(markerspecs[0].getAttribute('infox'))
								, parseInt(markerspecs[0].getAttribute('infoy'))
							);
						}
					}
					markers = xml.documentElement.getElementsByTagName("item");
					for (var i = 0; i < markers.length; i++) {
						var info =
							'<strong><a href="'
							+ markers[i].getAttribute('item_url')
							+ '">'
							+ markers[i].getAttribute('item_name')
							+ '</a></strong>'
							+ '<br />'
							+ ''
							+ markers[i].getAttribute('item_teaser')
						;
						var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")), parseFloat(markers[i].getAttribute("long")));
						var marker = createMarker(point, info, icon);

						map.addOverlay(marker)
						
						if ( 
							( xMapURL == markers[i].getAttribute('item_url') )
							|| ( xMapURL.replace(/http:\/\/work/,'http://www') == markers[i].getAttribute('item_url') )
							|| ( xMapURL.replace(/http:\/\/draft/,'http://www') == markers[i].getAttribute('item_url') )
						) {
							marker.openInfoWindowHtml(info);
						}

					}
				});
			}
			}
		});
		map.setCenter(point, xMapDefaultZoom);
}

function createMarker(point,info,icon) {
var icon;
	// --------------------------------------------------
	// var icon = new GIcon();
	// icon.image = "http://www.worldgolf.com/images/maps/flag.png";
	// icon.iconSize = new GSize(22, 22);
	// icon.iconAnchor = new GPoint(11, 11);
	// icon.infoWindowAnchor = new GPoint(11, 11);
	// var marker = new GMarker(point, icon);
	// -------------------------------------------------- 
var marker;
if (icon) {
	marker = new GMarker(point, icon);
} else {
	marker = new GMarker(point);
}
	GEvent.addListener(marker, "click", function() {
		marker.openInfoWindowHtml(info);
	});
	return marker; 
}

function loadMap() {
	if (GBrowserIsCompatible()) {
		map = new GMap2(document.getElementById("map"));
		var mt = map.getMapTypes(); 
		for (var i=0; i<mt.length; i++) { 
			mt[i].getMinimumResolution = function() {return 9;} 
		} 
		map.addControl(new GLargeMapControl());
		map.addControl(new GMapTypeControl());
		map.addControl(new GOverviewMapControl());
		map.addControl(new GScaleControl());
	}
}

