var baseIcon = new GIcon(G_DEFAULT_ICON);
baseIcon.shadow = "http://www.google.com/mapfiles/shadow50.png";
baseIcon.iconSize = new GSize(20, 34);
baseIcon.shadowSize = new GSize(37, 34);
baseIcon.iconAnchor = new GPoint(9, 34);
baseIcon.infoWindowAnchor = new GPoint(9, 2);

var memberIconS = new GIcon(G_DEFAULT_ICON);
memberIconS.shadow = null;
memberIconS.image = "/images/marker_member.png";
memberIconS.iconAnchor = new GPoint(7, 7);
memberIconS.iconSize = new GSize(15, 15);

var memberIconM = new GIcon(G_DEFAULT_ICON);
memberIconM.shadow = null;
memberIconM.image = "/images/marker_member.png";
memberIconM.iconAnchor = new GPoint(10, 10);
memberIconM.iconSize = new GSize(20, 20);

var memberIconL = new GIcon(G_DEFAULT_ICON);
memberIconL.shadow = null;
memberIconL.image = "/images/marker_member.png";
memberIconL.iconAnchor = new GPoint(13, 13);
memberIconL.iconSize = new GSize(25, 25);

var memberIconXL = new GIcon(G_DEFAULT_ICON);
memberIconXL.shadow = null;
memberIconXL.image = "/images/marker_member.png";
memberIconXL.iconAnchor = new GPoint(15, 15);
memberIconXL.iconSize = new GSize(30, 30);

var networkIcon = new GIcon(G_DEFAULT_ICON);
networkIcon.shadow = null;
networkIcon.image = "/images/marker_network.png";
networkIcon.iconAnchor = new GPoint(15, 15);
networkIcon.iconSize = new GSize(30, 30);

var memberMap = {
	map: null,
	markers: [],
	_lat: null,
	_lng: null,
	_zoom: null,
	_timeout: null,
	request: null,

	init: function(aroundTheWorld)
	{
		if (typeof aroundTheWorld == "undefined") aroundTheWorld = false;
		
		memberMap.request = GXmlHttp.create();
		memberMap.request.open("GET", (aroundTheWorld ? "/xml/memberWorldMap.xml" : "/xml/memberMap.xml"), true);
		memberMap.request.onreadystatechange = memberMap.load;
		memberMap.request.send(null);
	},
	load: function()
	{
		if (memberMap.request.readyState != 4) return false;

		memberMap.map = new GMap2(document.getElementById("googlemap"));
        memberMap.map.setCenter(new GLatLng(53.5382, -113.503), 1);
        memberMap.map.addControl(new GLargeMapControl3D());

		var isM = (memberMap.request.responseXML.documentElement.getAttribute("member") == "true");

		var c = memberMap.request.responseXML.documentElement.getElementsByTagName("city");

		if (c)
		{
			for (var i = 0, l = c.length; i < l; i++)
			{
				var _html = "<b>" + c[i].getAttribute("name");
				if (c[i].getAttribute("prov_state"))
				{
					_html += ", " + c[i].getAttribute("prov_state");
				}
				_html += ", " + c[i].getAttribute("country") + "</b><br />\r\n";
				
				var mc = parseInt(c[i].getAttribute("membercount"));
				
				_html += c[i].getAttribute("membercount");
				if (parseInt(c[i].getAttribute("membercount")) == 1)
				{
					_html += " member";
				}
				else
				{
					_html += " members";
				}
				
				if (isM)
				{
					_html += "<br /><br /><a href=\"/members/directory/?city=" + c[i].getAttribute("name") + "\">View all members</a>";
				}
				
				var m = new GMarker(new GLatLng(c[i].getAttribute("latitude"), c[i].getAttribute("longitude")), { icon: (mc < 5 ? memberIconS : (mc < 15 ? memberIconM : (mc < 30 ? memberIconL : memberIconXL))) });

				GEvent.bind(m, "click", { marker: m, html: _html }, function() {
					memberMap.map.openInfoWindowHtml(this.marker.getLatLng(), this.html, { maxWidth: 200, onOpenFn: memberMap.actions.info_onOpen, onCloseFn: memberMap.actions.info_onClose, pixelOffset: new GSize(0, -21) });
				});

				memberMap.map.addOverlay(m);
				
				memberMap.markers.push(m);
			}
		}
		
		var n = memberMap.request.responseXML.documentElement.getElementsByTagName("network");
		
		if (n)
		{
			for (var i = 0, l = n.length; i < l; i++)
			{
				var _html = "<b>" + n[i].getAttribute("name") + "</b>";
				if (n[i].getAttribute("location"))
				{
					_html += "<br />\r\n" + n[i].getAttribute("location");
				}
				
				var d = n[i].textContent || n[i].innerText;
				
				if (d)
				{
					_html += "<br /><br />" + d;
				}
				
				if (n[i].getAttribute("url"))
				{
					_html += "<br /><br /><a target=\"_blank\" href=\"" + n[i].getAttribute("url") + "\">" + n[i].getAttribute("url") + "</a>";
				}
				
				var m = new GMarker(new GLatLng(n[i].getAttribute("latitude"), n[i].getAttribute("longitude")), { icon: networkIcon });

				GEvent.bind(m, "click", { marker: m, html: _html }, function() {
					memberMap.map.openInfoWindowHtml(this.marker.getLatLng(), this.html, { maxWidth: 200, onOpenFn: memberMap.actions.info_onOpen, onCloseFn: memberMap.actions.info_onClose, pixelOffset: new GSize(0, -21) });
				});

				memberMap.map.addOverlay(m);
				
				memberMap.markers.push(m);
			}
		}
	},
	actions: {
		info_onOpen: function()
		{
			if (memberMap._timeout)
			{
				window.clearTimeout(memberMap._timeout);
				memberMap._timeout = null;
			}
			
			var c = memberMap.map.getCenter();

			memberMap._lat = c.lat();
			memberMap._lng = c.lng();
			memberMap._zoom = memberMap.map.getZoom();
		},
		info_onClose: function()
		{
			if (memberMap._lat && memberMap._lng && memberMap._zoom)
			{
				memberMap._timeout = window.setTimeout("memberMap.map.setCenter(new GLatLng(" + memberMap._lat + ", " + memberMap._lng + "), " + memberMap._zoom + ")", 100);
				memberMap._lat = null;
				memberMap._lng = null;
				memberMap._zoom = null;
			}
		}
	}
};

// Set up Event Listener
function addEvent(elm, evType, fn, useCapture) { 
	if (elm.addEventListener) { elm.addEventListener(evType, fn, useCapture); return true; } 
	else if (elm.attachEvent) { var r = elm.attachEvent('on' + evType, fn); return r; }
	else { elm['on' + evType] = fn; }
}

//addEvent(window, 'load', memberMap.init, true);
