/********************************************
require jsUtilities.js, ajax_lib.js, GMap API
********************************************/
var map;
var clubMarkers = new Object();
var clubMarkersToAdd = new Object();
var clubs = new Object();


/**********************************************
Map Correspondance
**********************************************/
function loadMap() {
	if (GBrowserIsCompatible()) {
		//map initialize
		map = new GMap2(document.getElementById("map"));
		map.addControl(new GSmallMapControl());
		//custom function for map, panTo if map is loaded, otherwise setCenter
		map.moveTo = function (point, zoomLevel) {
			if (map.isLoaded()) {
				if (zoomLevel) map.setZoom(zoomLevel);
				map.panTo(point);
			}
			else {
				map.setCenter(point, zoomLevel);
			}
		};
		//custom function for map, move to the given marker and optional zoom level, and then open info window of the marker
		map.moveToMarker = function (marker, zoomLevel) {
			map.moveTo(marker.getPoint(), zoomLevel);
			setTimeout(function () {
				marker.openInfoWindowHtml(marker.info);
			}, 1000);
		};
		//function to add markers within the current bounds of the map
		map.addMarkersInBound = function (markers) {
			for (id in markers) {
				if (map.getBounds().contains(markers[id].getPoint())) {
					map.addOverlay(markers[id]);
					delete markers[id];
				}
			}
		};
		//add listener on map move end, add markers on move end
		GEvent.addListener(map, "moveend", function () {
			map.addMarkersInBound(clubMarkersToAdd);
		});
		map.moveTo(new GLatLng(0,0), 15);
		$("loading").innerHTML = "Loading...";
		//retrieve markers XML and construct the data into clubMarkers[clud id], clubMarkersToAdd[club id] and clubs[letter category]
		firstTime = true;
		ajaxLoadMarkerALL();
		
		/*
		ajaxGet('getClubsMapXML.php', function(reqObj) {
			var markers = reqObj.responseXML.getElementsByTagName("marker");
			for (var i = 0; i < markers.length; i++) {
				var cid = markers[i].getAttribute("cid");
				var clubName = markers[i].getAttribute("clubName");
				var time = markers[i].getAttribute("time");
				var place = markers[i].getAttribute("place");
				var lat = parseFloat(markers[i].getAttribute("lat"));
				var lng = parseFloat(markers[i].getAttribute("lng"));
				var marker = createMarker(lat, lng, clubName, time, place, cid);
				clubMarkers[cid] = marker;
				clubMarkersToAdd[cid] = marker;
				var letterCatgory = clubName.toUpperCase().charAt(0);
				if (!clubs[letterCatgory]) clubs[letterCatgory] = new Array();
				clubs[letterCatgory].push({id:cid, name:clubName});
			}
			//page default at the first club in category "A"
			getClubs("A");
			$("loading").innerHTML = "Loading Complete";
			fade("loading", 100, 0, 1000, function () {
				document.getElementById("loading").style.display = "none";
			});
		});
		*/
	}
}

function ajaxLoadMarkerALL() {
	ajaxGet('getClubsMapXML.php', function(reqObj) {
		var markers = reqObj.responseXML.getElementsByTagName("marker");
			for (var i = 0; i < markers.length; i++) {
				var cid = markers[i].getAttribute("cid");
				var clubName = markers[i].getAttribute("clubName");
				var letterCatgory = clubName.toUpperCase().charAt(0);
				if (!clubs[letterCatgory]) clubs[letterCatgory] = new Array();
				clubs[letterCatgory].push({id:cid, name:clubName});
		}
		
		if(firstTime) {
			//page default at the first club in category "A"
			getClubs("A");
			$("loading").innerHTML = "Loading Complete";
			fade("loading", 100, 0, 1000, function () {
				document.getElementById("loading").style.display = "none";
			});
			firstTime = false;
		}
	});
}

function ajaxLoadMarker(cid) {
	ajaxGet("getClubsMapXML.php?cid=" + cid, function(reqObj) {
		var markers = reqObj.responseXML.getElementsByTagName("marker");
		var clubName = markers[0].getAttribute("clubName");
		var time = markers[0].getAttribute("time");
		var place = markers[0].getAttribute("place");
		var lat = parseFloat(markers[0].getAttribute("lat"));
		var lng = parseFloat(markers[0].getAttribute("lng"));
		var marker = createMarker(lat, lng, clubName, time, place, cid);
		clubMarkers[cid] = marker;
		clubMarkersToAdd[cid] = marker;
		map.moveToMarker(marker, 15);
	});
}

function createMarker(lat, lng, clubName, time, place, cid) {
	var marker = new GMarker(new GLatLng(lat, lng), {title: clubName});
	marker.info = "<div style='font-weight: bold' class='title'>Rotary Club of " + clubName + "</div><br/><div><span style='font-weight: bold'>Time: </span>" + time + "</div><div style='font-weight: bold'>Location:</div><div>" + place + "</div><br/><div>> <a href='club.php?cid=" + cid + "'>more club info</a></div>";
	GEvent.addListener(marker, "click", function () {
		map.moveTo(marker.getPoint());
		setTimeout(function () {
			marker.openInfoWindowHtml(marker.info);
		}, 500);
	});
	return marker;
}


/**********************************************
Clubs
**********************************************/
function getClubs(letter) {
	$("clubsAvailable").innerHTML = "";
	for (var i=0; i < clubs[letter].length; i++) {
		var clubNode = document.createElement("a");
		clubNode.setAttribute("href", "javascript:goClub(" + clubs[letter][i].id + ");void(0);");
		var clubName = document.createTextNode(clubs[letter][i].name);
		clubNode.appendChild(clubName);
		$("clubsAvailable").innerHTML += " | ";
		$("clubsAvailable").appendChild(clubNode);
	}
	goClub(clubs[letter][0].id);
}

function goClub(cid) {
	ajaxLoadMarker(cid);
}
