var map;
var clusterer;
var gmarkers = [];
var htmls = [];
var localSearch = new GlocalSearch();
var order = 0;

// Define the icons
var iconStandalone = new GIcon();
iconStandalone.image = '/images/map-standalone.png';
iconStandalone.iconSize = new GSize(32, 34);
iconStandalone.shadow = '/images/map-standalone-shadow.png';
iconStandalone.shadowSize = new GSize(41, 34);
iconStandalone.transparent = '/images/map-standalone-transparent.png';
iconStandalone.iconAnchor = new GPoint(3, 34);
iconStandalone.infoWindowAnchor = new GPoint(25, 10);
iconStandalone.infoShadowAnchor = new GPoint(25, 10);

var iconBigNightIn = new GIcon();
iconBigNightIn.image = '/images/map-bignightin.png';
iconBigNightIn.iconSize = new GSize(32, 34);
iconBigNightIn.shadow = '/images/map-standalone-shadow.png';
iconBigNightIn.shadowSize = new GSize(41, 34);
iconBigNightIn.transparent = '/images/map-standalone-transparent.png';
iconBigNightIn.iconAnchor = new GPoint(3, 34);
iconBigNightIn.infoWindowAnchor = new GPoint(25, 10);
iconBigNightIn.infoShadowAnchor = new GPoint(25, 10);

var iconFilmDay = new GIcon();
iconFilmDay.image = '/images/map-filmday.png';
iconFilmDay.iconSize = new GSize(32, 34);
iconFilmDay.shadow = '/images/map-standalone-shadow.png';
iconFilmDay.shadowSize = new GSize(41, 34);
iconFilmDay.transparent = '/images/map-standalone-transparent.png';
iconFilmDay.iconAnchor = new GPoint(3, 34);
iconFilmDay.infoWindowAnchor = new GPoint(25, 10);
iconFilmDay.infoShadowAnchor = new GPoint(25, 10);

var iconPicnic = new GIcon();
iconPicnic.image = '/images/map-picnic.png';
iconPicnic.iconSize = new GSize(32, 34);
iconPicnic.shadow = '/images/map-standalone-shadow.png';
iconPicnic.shadowSize = new GSize(41, 34);
iconPicnic.transparent = '/images/map-standalone-transparent.png';
iconPicnic.iconAnchor = new GPoint(3, 34);
iconPicnic.infoWindowAnchor = new GPoint(25, 10);
iconPicnic.infoShadowAnchor = new GPoint(25, 10);

var iconRoadTrip = new GIcon();
iconRoadTrip.image = '/images/map-roadtrip.png';
iconRoadTrip.iconSize = new GSize(32, 34);
iconRoadTrip.shadow = '/images/map-standalone-shadow.png';
iconRoadTrip.shadowSize = new GSize(41, 34);
iconRoadTrip.transparent = '/images/map-standalone-transparent.png';
iconRoadTrip.iconAnchor = new GPoint(3, 34);
iconRoadTrip.infoWindowAnchor = new GPoint(25, 10);
iconRoadTrip.infoShadowAnchor = new GPoint(25, 10);

var iconSportsDay = new GIcon();
iconSportsDay.image = '/images/map-sportsday.png';
iconSportsDay.iconSize = new GSize(32, 34);
iconSportsDay.shadow = '/images/map-standalone-shadow.png';
iconSportsDay.shadowSize = new GSize(41, 34);
iconSportsDay.transparent = '/images/map-standalone-transparent.png';
iconSportsDay.iconAnchor = new GPoint(3, 34);
iconSportsDay.infoWindowAnchor = new GPoint(25, 10);
iconSportsDay.infoShadowAnchor = new GPoint(25, 10);

var iconStoryTime = new GIcon();
iconStoryTime.image = '/images/map-storytime.png';
iconStoryTime.iconSize = new GSize(32, 34);
iconStoryTime.shadow = '/images/map-standalone-shadow.png';
iconStoryTime.shadowSize = new GSize(41, 34);
iconStoryTime.transparent = '/images/map-standalone-transparent.png';
iconStoryTime.iconAnchor = new GPoint(3, 34);
iconStoryTime.infoWindowAnchor = new GPoint(25, 10);
iconStoryTime.infoShadowAnchor = new GPoint(25, 10);

var iconHighlighted = new GIcon();
iconHighlighted.image = '/images/map-highlighted.png';
iconHighlighted.iconSize = new GSize(32, 34);
iconHighlighted.shadow = '/images/map-standalone-shadow.png';
iconHighlighted.shadowSize = new GSize(41, 34);
iconHighlighted.transparent = '/images/map-standalone-transparent.png';
iconHighlighted.iconAnchor = new GPoint(3, 34);
iconHighlighted.infoWindowAnchor = new GPoint(25, 10);
iconHighlighted.infoShadowAnchor = new GPoint(25, 10);

var iconFlagship = new GIcon();
iconFlagship.image = '/images/map-flagship.png';
iconFlagship.iconSize = new GSize(22, 34);
iconFlagship.shadow = '/images/map-flagship-shadow.png';
iconFlagship.shadowSize = new GSize(41, 34);
iconFlagship.transparent = '/images/map-flagship-transparent.png';
iconFlagship.iconAnchor = new GPoint(3, 34);
iconFlagship.infoWindowAnchor = new GPoint(25, 10);
iconFlagship.infoShadowAnchor = new GPoint(25, 10);

var icons = [];
icons[0]  = iconStandalone;
icons[1]  = iconBigNightIn;
icons[2]  = iconFilmDay;
icons[3]  = iconPicnic;
icons[4]  = iconRoadTrip;
icons[5]  = iconSportsDay;
icons[6]  = iconStoryTime;
icons[98] = iconHighlighted;
icons[99] = iconFlagship;

function usePointFromAddress(address)
{
	localSearch.setSearchCompleteCallback(null, function()
	{
		if (localSearch.results[0])
		{
			var resultLat = localSearch.results[0].lat;
			var resultLng = localSearch.results[0].lng;
			var point = new GLatLng(resultLat,resultLng);
			map.setCenter(point, 10);
		}
		else
		{
			alert('Address not found!');
		}
	});

	localSearch.execute(address + ', United Kingdom');
}

function orderOfCreation(marker, b)
{
	return order++;
}

function createMarker(point, content, icontype, url_title)
{
	var marker = new GMarker(point, {icon:icons[icontype],zIndexProcess:orderOfCreation});
	GEvent.addListener(marker, 'click', function()
	{
		marker.openInfoWindowHtml(content + '<br /><br /><a href="/events/' + url_title + '/">Visit the event\'s page</a>', {maxWidth: '200'});
	});
	gmarkers[url_title] = marker;
	return marker;
}

function loadEventsMap()
{
//var objEventType = document.getElementById('eventType');
//var eventType = objEventType.options[objEventType.selectedIndex].value

	var objEventDay = document.getElementById('eventDay');
	var eventDay = objEventDay.options[objEventDay.selectedIndex].value;

	var gwr = 0;
	var objGwr = document.getElementById('gwr');
	if (objGwr.checked)
		gwr = 1;

	var request = GXmlHttp.create();
//var url = '/inc/get-events-map.php?type='+eventType+'&day='+eventDay;
	var url = '/inc/get-events-map.php?day='+eventDay+'&gwr='+gwr;
	request.open('GET', url, true);
	request.onreadystatechange = function()
	{
		if (request.readyState == 4 && request.status == 200)
		{
			var xmlDoc = GXml.parse(request.responseText);
			var markers = xmlDoc.documentElement.getElementsByTagName('marker');

			if (gwr == 1)
				map.clearOverlays();
			else
				clusterer.RemoveAllMarkers();

			for (var i=0; i<markers.length; i++)
			{
				var lat = parseFloat(markers[i].childNodes[2].childNodes[0].nodeValue);
				var lon = parseFloat(markers[i].childNodes[3].childNodes[0].nodeValue);
				var point = new GLatLng(lat, lon);

				var title      = markers[i].childNodes[0].childNodes[0].nodeValue;
				var desc       = markers[i].childNodes[1].childNodes[0].nodeValue;
				var url_title  = markers[i].childNodes[4].childNodes[0].nodeValue;

//			var featured   = parseInt(markers[i].childNodes[4].childNodes[0].nodeValue);
				var event_type = parseInt(markers[i].childNodes[5].childNodes[0].nodeValue);

				var content = '<strong>' + title + '</strong><br /><br />' + desc;
				htmls[url_title] = content;

				var marker = createMarker(point, content, event_type, url_title);

				if (gwr == 1)
					map.addOverlay(marker);
				else
					clusterer.AddMarker(marker, title, url_title);
			}
		}
	}
	request.send(null);
}

function loadEventsList()
{
//var objEventType = document.getElementById('eventType');
//var eventType = objEventType.options[objEventType.selectedIndex].value

	var objEventDay = document.getElementById('eventDay');
	var eventDay = objEventDay.options[objEventDay.selectedIndex].value

	var zoom = map.getZoom();
	if (zoom < 5) { zoom = 5; map.setZoom(zoom); }

	var minX = map.getBounds().getSouthWest().lng();
	var maxX = map.getBounds().getNorthEast().lng();

	var minY = map.getBounds().getSouthWest().lat();
	var maxY = map.getBounds().getNorthEast().lat();

	var lat = map.getCenter().lat();
	var lng = map.getCenter().lng();

	document.getElementById('latitude').value  = lat;
	document.getElementById('longitude').value = lng;
	document.getElementById('zoom').value      = zoom;

	var gwr = 0;
	var objGwr = document.getElementById('gwr');
	if (objGwr.checked)
		gwr = 1;

	var request = GXmlHttp.create();
//var url = '/inc/get-events-list.php?minX='+minX+'&maxX='+maxX+'&minY='+minY+'&maxY='+maxY+'&lat='+lat+'&lng='+lng+'&zoom='+zoom+'&type='+eventType+'&day='+eventDay;
	var url = '/inc/get-events-list.php?minX='+minX+'&maxX='+maxX+'&minY='+minY+'&maxY='+maxY+'&lat='+lat+'&lng='+lng+'&zoom='+zoom+'&day='+eventDay+'&gwr='+gwr;
	request.open('GET', url, true);
	request.onreadystatechange = function()
	{
		if (request.readyState == 4 && request.status == 200)
		{
			var response = request.responseText;
			document.getElementById('events-list').innerHTML = response;
		}
	}
	request.send(null);
}

function initializeGMaps()
{
	if (GBrowserIsCompatible())
	{
		map = new GMap2(document.getElementById('map-canvas'));
		var lat  = Number(document.getElementById('latitude').value);
		var lon  = Number(document.getElementById('longitude').value);
		var zoom = Number(document.getElementById('zoom').value);

		map.setCenter(new GLatLng(lat, lon), zoom);

		map.removeMapType(G_PHYSICAL_MAP);
		
		var customUI = map.getDefaultUI();
		customUI.controls.scalecontrol = false;
		customUI.controls.largemapcontrol3d = true;
		map.setUI(customUI);

		var gwr = 0;
		var objGwr = document.getElementById('gwr');
		if (objGwr.checked)
			gwr = 1;

		if (gwr == 0)
		{
			clusterer = new Clusterer(map);
			clusterer.SetMaxVisibleMarkers(50);
			clusterer.SetMinMarkersPerCluster(5);
			clusterer.SetMaxLinesPerInfoBox(3);
		}

		GEvent.addListener(map, 'moveend', loadEventsList);

		loadEventsMap();
		loadEventsList();
	}
}

function toggleFlag(obj, url_title, title, status)
{
	var gwr = 0;
	var objGwr = document.getElementById('gwr');
	if (objGwr.checked)
		gwr = 1;

	if (status == 'on')
	{
		map.closeInfoWindow();

		point = gmarkers[url_title].getLatLng();
		if (gwr == 1)
			map.removeOverlay(gmarkers[url_title]);
		else
			clusterer.RemoveMarker(gmarkers[url_title]);

		if (obj.className == 'standalone')
		{
			obj.className = 'event-over-standalone';
		}
		else if (obj.className == 'bignightin')
		{
			obj.className = 'event-over-bignightin';
		}
		else if (obj.className == 'filmday')
		{
			obj.className = 'event-over-filmday';
		}
		else if (obj.className == 'picnic')
		{
			obj.className = 'event-over-picnic';
		}
		else if (obj.className == 'roadtrip')
		{
			obj.className = 'event-over-roadtrip';
		}
		else if (obj.className == 'sportsday')
		{
			obj.className = 'event-over-sportsday';
		}
		else if (obj.className == 'storytime')
		{
			obj.className = 'event-over-storytime';
		}
		else if (obj.className == 'flagship')
		{
			obj.className = 'event-over-flagship';
		}
		var marker = createMarker(point, htmls[url_title], '98', url_title);

		if (gwr == 1)
			map.addOverlay(marker);
		else
			clusterer.AddMarker(marker, title, url_title);
	}
	else if (status == 'off')
	{
		if (gwr == 1)
			map.removeOverlay(gmarkers[url_title]);
		else
			clusterer.RemoveMarker(gmarkers[url_title]);

		if (obj.className == 'event-over-standalone')
		{
			obj.className = 'standalone';
			var marker = createMarker(point, htmls[url_title], '0', url_title);
		}
		else if (obj.className == 'event-over-bignightin')
		{
			obj.className = 'bignightin';
			var marker = createMarker(point, htmls[url_title], '1', url_title);
		}
		else if (obj.className == 'event-over-filmday')
		{
			obj.className = 'filmday';
			var marker = createMarker(point, htmls[url_title], '2', url_title);
		}
		else if (obj.className == 'event-over-picnic')
		{
			obj.className = 'picnic';
			var marker = createMarker(point, htmls[url_title], '3', url_title);
		}
		else if (obj.className == 'event-over-roadtrip')
		{
			obj.className = 'roadtrip';
			var marker = createMarker(point, htmls[url_title], '4', url_title);
		}
		else if (obj.className == 'event-over-sportsday')
		{
			obj.className = 'sportsday';
			var marker = createMarker(point, htmls[url_title], '5', url_title);
		}
		else if (obj.className == 'event-over-storytime')
		{
			obj.className = 'storytime';
			var marker = createMarker(point, htmls[url_title], '6', url_title);
		}
		else if (obj.className == 'event-over-flagship')
		{
			obj.className = 'flagship';
			var marker = createMarker(point, htmls[url_title], '99', url_title);
		}

		if (gwr == 1)
			map.addOverlay(marker);
		else
			clusterer.AddMarker(marker, title, url_title);
	}
}

function zoomIn()
{
	currZoom = map.getZoom();
	map.setZoom(currZoom+1);

	document.getElementById('zoom').value = currZoom + 1;
}