var map;
function setup_map(feed_url, show_checkbox_flag, center_point)
{
	if (GBrowserIsCompatible()) {
		gmarkers = [];
		gicons = [];
		baseIcon = new GIcon(G_DEFAULT_ICON);
		baseIcon.iconAnchor = new GPoint(6,20);
		baseIcon.iconSize = new GSize(12,20);
		baseIcon.infoWindowAnchor = new GPoint(9,2);


		// create the map
		map = new GMap2(document.getElementById("map"));
		map.addControl(new GLargeMapControl());
		map.addControl(new GMapTypeControl());

		if(center_point == undefined)
		{
			// Center to England
			country = "England";
			geocoder = new GClientGeocoder();
			geocoder.getLatLng(country, function (point) {
				if (!point) {
					// Handle error
				} else {
					// map.setCenter(point, 8, G_PHYSICAL_MAP);
					map.setCenter(point, 8, G_NORMAL_MAP);
					map.setZoom(6);
				}
			});
		}	
		else
		{
			// Center on the county
			geocoder = new GClientGeocoder();
			geocoder.getLatLng(center_point, function (point) {
				if (!point) {
					// Handle error
				} else {
					map.setCenter(point, 7, G_NORMAL_MAP);
					map.setZoom(7);
				}
			});

		}

		$.ajax({
			url: feed_url,
			dataType: 'json',
			type: 'GET',
			success: function(received_data) {	
				data_list = received_data;
				var category_hash = new Object();

				for(i=0;i<data_list.length;i++)
				{
					// Add the category
					if(category_hash[data_list[i].category_name] == undefined)
					{
						var category_string = '<div style="border-top: 0px solid #ccc;padding:3px 0px 3px 0px;"><input type="checkbox" id="check' + i + '" onclick="boxclick(this.checked,\'' + data_list[i].category_name + '\')" checked=checked />' + '<img height="14" src="/images/maps/' + data_list[i].map_icon + '" />' + data_list[i].category_name + '</div';
						if(show_checkbox_flag) $('#map_options').append(category_string);
						category_hash[data_list[i].category_name] = 1;
					}

					// Add the marker
					var lat = data_list[i].latitude 
					var lng = data_list[i].longitude;
					var point = new GLatLng(lat,lng);
					var name = data_list[i].name;
					//var address = '<strong>' + name + "</strong><br>" + data_list[i].address_1 + '<br>' + data_list[i].address_2 + '<br>' + data_list[i].address_3 + '<br>' + data_list[i].postcode + "<br></p><p style='margin: 0px;padding: 0px;'><a href='http://" + data_list[i].website + "' target='_blank'>" + data_list[i].website  + '</a></p>'; // + 'Click here for details</p>';
					var address = '<strong>' + name + "</strong>"; 
					address += '<br/>';
					if(data_list[i].website != undefined)
					{
						if(data_list[i].website_text != undefined)
						{
							address += "<a href='" + data_list[i].website + "'>" + data_list[i].website_text  + '</a><br />';
						}
						else
						{
							address += "<a href='http://" + data_list[i].website + "' target='_blank'>" + data_list[i].website  + '</a><br />';
						}
					}
					address += "<br/>";
					if(data_list[i].address_1 != undefined && data_list[i].address_1 != '') address += data_list[i].address_1 + '<br />';
					if(data_list[i].address_2 != undefined && data_list[i].address_2 != '') address += data_list[i].address_2 + '<br />';
					if(data_list[i].address_3 != undefined && data_list[i].address_3 != '')  address += data_list[i].address_3 + '<br />';
					if(data_list[i].city != undefined && data_list[i].city != '') address += data_list[i].city + '<br />';
					if(data_list[i].town != undefined && data_list[i].town != '') address += data_list[i].town + '<br />';
					if(data_list[i].county_name != undefined) address += data_list[i].county_name + '<br />';
					if(data_list[i].postcode != undefined) address += data_list[i].postcode + '<br />';
					if(data_list[i].contact_1_name != undefined) address += 'Primary contact: ' + data_list[i].contact_1_name + '<br />';
					if(data_list[i].telephone_1 != undefined) address += 'Telephone: ' + data_list[i].telephone_1 + '<br />';
					if(data_list[i].email != undefined) address += 'Email: <a href="mailto:"' + data_list[i].email + '>' + data_list[i].email + '</a><br />';
					var html = '<p>' + address + '</p>';
					var category = data_list[i].category_name;
					var marker = createMarker(point,name,html,data_list[i].map_icon, category);
					map.addOverlay(marker);
				}

				if(data_list.length==1)
				{
					// There is only 1 item, zoom in on it
					var point = new GLatLng(data_list[0].latitude,data_list[0].longitude);
					map.setCenter(point, 8, G_NORMAL_MAP);
					map.setZoom(12);
				}
			}
		});
	}
	else {
		alert("Sorry, the Google Maps API is not compatible with this browser");
	}
	// This Javascript is based on code provided by the
	// Community Church Javascript Team
	// http://www.bisphamchurch.org.uk/   
	// http://econym.org.uk/gmap/
	//]]>
}
// A function to create the marker and set up the event window
function createMarker(point,name,html,url,category) {
	var icon = new GIcon(baseIcon,"/images/maps/" + url);
	var marker = new GMarker(point, icon);
	// === Store the category and name info as a marker properties ===
	marker.mycategory = category;
	marker.myname = name;
	GEvent.addListener(marker, "click", function() {
		marker.openInfoWindowHtml(html);
	});
	gmarkers.push(marker);
	return marker;
}

// == shows all markers of a particular category, and ensures the checkbox is checked ==
function show(category) {
	for (var i=0; i<gmarkers.length; i++) {
		if (gmarkers[i].mycategory == category) {
			gmarkers[i].show();
		}
	}
	// == check the checkbox ==
	//document.getElementById(category+"box").checked = true;
}

// == hides all markers of a particular category, and ensures the checkbox is cleared ==
function hide(category) {
	for (var i=0; i<gmarkers.length; i++) {
		if (gmarkers[i].mycategory == category) {
			gmarkers[i].hide();
		}
	}
	// == clear the checkbox ==
	// document.getElementById(category+"box").checked = false;
	// == close the info window, in case its open on a marker that we just hid
	map.closeInfoWindow();
}

// == a checkbox has been clicked ==
function boxclick(checked,category) {
	if (checked) {
		show(category);
	} else {
		hide(category);
	}
	// == rebuild the side bar
	makeSidebar();
}

function myclick(i) {
	GEvent.trigger(gmarkers[i],"click");
}


// == rebuilds the sidebar to match the markers currently displayed ==
function makeSidebar() {
/*
	var html = "";
	for (var i=0; i<gmarkers.length; i++) {
		if (!gmarkers[i].isHidden()) {
			html += '<a href="javascript:myclick(' + i + ')">' + gmarkers[i].myname + '<\/a><br>';
		}
	}
	document.getElementById("side_bar").innerHTML = html;
*/
}



