function loadImages()
{
	imageArray = new Array();
	imageArray.push("images/icon_map_32.png");
	imageArray.push("images/icon_timefilter_activate.png");
	preloadImages(imageArray);
}

function load()
{
	resizeMap();
	if (GBrowserIsCompatible())
	{
		map = new GMap2(document.getElementById("Map"));
        map.setCenter(new GLatLng(48.191918686614486, 14.11868691444397), 13);
        map.savePosition();

		map.addControl(new GSmallMapControl());
		map.addControl(new GMapTypeControl());
		map.addControl(new GScaleControl());
		map.enableScrollWheelZoom();
		map.enableContinuousZoom();

		GEvent.addListener(map, "mousemove", function(latlng) { printLatLng(latlng) });
		GEvent.addListener(map, "maptypechanged", function() { MapType_Changed() });

		// Read markers
		var markers = readFireDepartments();
		ffmMarkers = ffmMarkers.concat(markers);
		markers = readEventMarkers();				// This function is defined in a PHP file
		ffmMarkers = ffmMarkers.concat(markers);


		var eventId = readEventId();

		if(eventId == 0)
		{
			// Initialize time filter to current date
			var now = new Date();
			document.getElementById("SelectStartMonth").options[now.getMonth()].selected = true;
			years = document.getElementById("SelectStartYear").options;
			for(i = 0; i < years.length; i++)
			{
				if(years[i].value == now.getFullYear())
					years[i].selected = true;
			}

			document.getElementById("SelectEndMonth").options[now.getMonth()].selected = true;
			years = document.getElementById("SelectEndYear").options;
			for(i=0; i<years.length; i++)
			{
				if(years[i].value == now.getFullYear())
					years[i].selected = true;
			}
		}
		else
		{
			var selectedEvent = null;

			// Find the event
			for(i = 0; i < ffmMarkers.length; i++)
			{
				if(ffmMarkers[i].id == eventId)
				{
					selectedEvent = ffmMarkers[i];
					break;
				}
			}

			// Select the provided event
			if (selectedEvent)
			{
				// Enable checkbox
				switch(selectedEvent.type)
				{
					case MarkerType.EventTechnical: document.getElementById("EventTechnicalBox").checked = true; break;
					case MarkerType.EventFire: document.getElementById("EventFireBox").checked = true; break;
					case MarkerType.EventExercise: document.getElementById("EventExerciseBox").checked = true; break;
					case MarkerType.EventYouth: document.getElementById("EventYouthBox").checked = true; break;
					case MarkerType.EventAppointment: document.getElementById("EventAppointmentBox").checked = true; break;
					case MarkerType.EventNews: document.getElementById("EventNewsBox").checked = true; break;
				}

				// Adapt time filter
				document.getElementById("SelectStartMonth").options[selectedEvent.date.getMonth()].selected = true;
				document.getElementById("SelectEndMonth").options[selectedEvent.date.getMonth()].selected = true;
				years = document.getElementById("SelectStartYear").options;
		        for(i = 0; i < years.length; i++)
				{
					if(years[i].value == selectedEvent.date.getFullYear())
					{
						years[i].selected = true;
						document.getElementById("SelectEndYear").options[i].selected = true;
						break;
					}
				}

				selectMarker(selectedEvent.id);
			}
		}

		// Initialize member variables
		document.getElementById("TimeFilterBox").checked = true;
        document.getElementById("FireDepartmentBox").checked = true;
		timeFilterEnabled = true;
		setFilterStartDate();
		setFilterEndDate();

		// Show markers and so on
		validateTimeFilter();
		setMarkerVisibility();
		refreshEventMarkerList();
	}
}

/**
 * Print latitude and longitude.
 * @param {GLatLng} latlng A latitude/longitude object
 * @param {CoordinateFormat} coordinateFormat The format specifies the look of the coordinates
 */
function printLatLng(latlng)
{
	var latitude  = formatLatitude(latlng.lat(), coordinateFormat);
	var longitude = formatLongitude(latlng.lng(), coordinateFormat);
	document.getElementById("LatitudeLabel").innerHTML = latitude;
	document.getElementById("LongitudeLabel").innerHTML = longitude;
}

/**
 * Load all fire departments.
 * @return {array(FfmMarker)} An array of FfmMarkers
 */
function readFireDepartments()
{
	var markers = new Array();
	var ffMarchtrenk = new GLatLng(48.191918686614486, 14.11868691444397);
	var ffKappern = new GLatLng(48.18916499806361, 14.12967324256897);

	var text = "<b>Freiwillige Feuerwehr Marchtrenk<\/b><br />";
	text += "Linzer Stra&szlig;e 43<br />";
	text += "4614 Marchtrenk<br />";
	text += "Tel.: 07243 / 58112<br />";
	text += "<a href='http://www.feuerwehr-marchtrenk.at' target='_blank'>www.feuerwehr-marchtrenk.at<\a>";
	var marker = new FfmMarker(MarkerType.FireDepartment, getFireDepartmentMarker(ffMarchtrenk, text, 'Feuerwehr Marchtrenk'));
	marker.load();
	markers.push(marker);

	text = "<b>Freiwillige Feuerwehr Kappern<\/b><br />";
	text += "Paul-Hahn-Stra&szlig;e 23<br />";
	text += "4614 Marchtrenk<br />";
	text += "Tel.: 07243 / 52515<br />";
	text += "<a href='http://www.ff-kappern.at' target='_blank'>www.ff-kappern.at<\/a>";
	marker = new FfmMarker(MarkerType.FireDepartment, getFireDepartmentMarker(ffKappern, text, 'Feuerwehr Kappern'));
	marker.load();

	markers.push(marker);
	return markers;
}

/**
 * Create a fire department marker.
 * @param {GLatLng} coordinates The coordinates of the fire department
 * @param {string} htmlText The text shown in the opening window
 * @para {string} myTitle The title shown in the opening window
 * @return {GMarker} A GoogleMaps marker
 */
function getFireDepartmentMarker(coordinates, htmlText, myTitle)
{
	var imageUrl = 'images/icon_house_red.png';
	var shadowUrl = 'images/icon_house_shadow.png';
	var myIcon = new GIcon(G_DEFAULT_ICON);

	myIcon.image = imageUrl;
	myIcon.shadow = shadowUrl;
	myIcon.iconSize = new GSize(32, 32);
	myIcon.shadowSize = new GSize(59, 32);
	myIcon.iconAnchor = new GPoint(16, 16);
	myIcon.infoWindowAnchor  = new GPoint(16, 16);
	myIcon.imageMap = new Array(12,1, 21,1, 25,7, 26,27, 5,27, 5,15);

	var markerOptions = { icon:myIcon, title:myTitle };
	var marker = new GMarker(coordinates, markerOptions);

	GEvent.addListener(marker, "click", function() { this.openInfoWindowHtml(htmlText); });

	return marker;
}

/**
 * Create an event marker.
 * @param {double} latitude The latitude of the event
 * @param {double} longitude The longitude of the event
 * @param {MarkerType} markerType The type of the marker
 * @para {string} eventTitle The title of the event
 * @return {GMarker} A GoogleMaps marker
 */
function getEventMarker(latitude, longitude, markerType, eventTitle)
{
	var imageUrl;
	var shadowUrl = 'images/icon_event_shadow.png';
	switch(markerType)
	{
		case MarkerType.EventTechnical: imageUrl = 'images/icon_event_technical.png'; break;
		case MarkerType.EventFire: imageUrl = 'images/icon_event_fire.png'; break;
		case MarkerType.EventExercise: imageUrl = 'images/icon_event_exercise.png'; break;
		case MarkerType.EventAppointment: imageUrl = 'images/icon_event_appointment.png'; break;
		case MarkerType.EventYouth: imageUrl = 'images/icon_event_youth.png'; break;
		case MarkerType.EventNews: imageUrl = 'images/icon_event_news.png'; break;
	}

	var eventIcon = new GIcon(G_DEFAULT_ICON);
	eventIcon.image = imageUrl;
	eventIcon.shadow = shadowUrl;
	eventIcon.iconSize = new GSize(32, 32);
	eventIcon.shadowSize = new GSize(59, 32);
	eventIcon.infoWindowAnchor  = new GPoint(16, 2);

	var coordinates = new GLatLng(latitude, longitude);
	var markerOptions = { icon:eventIcon, title:eventTitle };

	var marker = new GMarker(coordinates, markerOptions);
	return marker;
}

/**
 * Changes the icon of the map type button
 */
function changeMapTypeButton()
{
	if(map.getCurrentMapType() == G_NORMAL_MAP)
	{
		document.getElementById("MapTypeButton").firstChild.src = "images/icon_satellite_32.png";
	}
	else
	{
		document.getElementById("MapTypeButton").firstChild.src = "images/icon_map_32.png";
	}
}

/**
 * Resizes the map so that it fits to the browser window.
 */
function resizeMap()
{
	mapElement = document.getElementById("Map");
	width = (getWindowWidth() - 450) < 400 ? 400 : (getWindowWidth() - 450);
	height = (getWindowHeight() - 110) < 200 ? 200 : (getWindowHeight()  - 110);
	mapElement.style.width = width + "px";
	mapElement.style.height = height + "px";
	document.getElementById("EventMarkerList").size = Math.round(height / 16);
}



/**************    Enum 	  ************************/

var CoordinateFormat = { DEG:0, DMS:1, DEM:2 };
var MarkerType = {
	Undefined:0,
	EventTechnical:1,
	EventFire:2,
	EventExercise:3,
	EventYouth:4,
	EventAppointment:5,
	EventNews:6,
	FireDepartment:7
};



/***********	 Classes		   *******************/

function FfmMarker(type, marker)
{
	this.type = type;
	this.marker = marker;
	this.title;
	this.id;
	this.infowindowtabs;
	this.loaded = false;
	this.visible = false;
	this.date;
}

FfmMarker.prototype.show = function()
{
	if(this.loaded)
		this.visible = true;
}

FfmMarker.prototype.hide = function()
{
	this.visible = false;
}

FfmMarker.prototype.load = function()
{
	this.loaded = true;
}

FfmMarker.prototype.unload = function()
{
	this.loaded = false;
	this.visible = false;
}

function FfmMarkerSortType(a, b)
{
	return a.type - b.type;
}





/***********	 Functions		   *******************/


/**
 * This function converts a DEG coordinate into DMS.
 * @param {int} number The coordinate do be converted
 * @return associative array
 */
function convertToDMS(number)
{
	var dms = new Array(3);
	dms["degree"] = Math.floor(number);
	dms["minute"] = Math.floor((number * 60) % 60);
	dms["second"] = ((number * 3600) % 60).toFixed(2);
	return dms;
}

/**
 * This function converts a DEG coordinate into DEM.
 * @param {int} number The coordinate do be converted
 * @return associative array
 */
function convertToDEM(number)
{
	var dem = new Array(3);
	dem["degree"] = Math.floor(number);
	dem["minute"] = ((number * 60) % 60).toFixed(4);
	return dem;
}

/**
 * Adds leading zeros to a value.
 * @param {int} The input number
 * @param {int} Length of the output
 * @return {string}
 */
function addLeadingZeros(value, number)
{
	count = number - (Math.floor(value).toString()).length;
	for(i=0; i<count; i++)
	{
		value = "0" + value;
	}
	return value;
}

/**
 * Adapts the format of the latitude
 * @param
 * @param
 * @return
 */
function formatLatitude(lat, coordinateFormat)
{
	var text;
	if(lat >= 0)
	{
		text = "N ";
	}
	else
	{
		text = "S ";
		lat = Math.abs(lat);
	}

	if(coordinateFormat == CoordinateFormat.DMS)
	{
		var dms = convertToDMS(lat);
		text += addLeadingZeros(dms.degree, 2) + "&deg; " +
				addLeadingZeros(dms.minute, 2) + "' " +
				addLeadingZeros(dms.second, 2) + "''";
	}
	else if(coordinateFormat == CoordinateFormat.DEM)
	{
		var dem = convertToDEM(lat);
		text += addLeadingZeros(dem.degree, 2) + "&deg; " +
				addLeadingZeros(dem.minute, 2) + "'";
	}
	else
	{
		lat = lat.toFixed(6)
		text += addLeadingZeros(lat, 2) + "°";
	}

	return text;
}

/**
 * Adapts the format of the longitude.
 * @param
 * @param
 * @return
 */
function formatLongitude(lng, coordinateFormat)
{
	var text;
	if(lng >= 0)
	{
		text = "E ";
	}
	else
	{
		text = "W ";
		lng = Math.abs(lng);
	}

	if(coordinateFormat == CoordinateFormat.DMS)
	{
		var dms = convertToDMS(lng);
		text += addLeadingZeros(dms.degree, 3) + "&deg; " +
				addLeadingZeros(dms.minute, 2) + "' " +
				addLeadingZeros(dms.second, 2) + "''";
	}
	else if(coordinateFormat == CoordinateFormat.DEM)
	{
		var dem = convertToDEM(lng);
		text += addLeadingZeros(dem.degree, 3) + "&deg; " +
				addLeadingZeros(dem.minute, 2) + "'";
	}
	else
	{
		lng = lng.toFixed(6);
		text += addLeadingZeros(lng, 3) + "°";
	}

	return text;
}

/*
 * Show / Hide markers depending on layer and time filter.
 */
function setMarkerVisibility()
{
	// Get active event layers
	var activeEventLayers = new Array();
	if(document.getElementById("EventTechnicalBox").checked) activeEventLayers.push(MarkerType.EventTechnical);
	if(document.getElementById("EventFireBox").checked) activeEventLayers.push(MarkerType.EventFire);
	if(document.getElementById("EventExerciseBox").checked) activeEventLayers.push(MarkerType.EventExercise);
	if(document.getElementById("EventYouthBox").checked) activeEventLayers.push(MarkerType.EventYouth);
	if(document.getElementById("EventAppointmentBox").checked) activeEventLayers.push(MarkerType.EventAppointment);
	if(document.getElementById("EventNewsBox").checked) activeEventLayers.push(MarkerType.EventNews);
	if(document.getElementById("FireDepartmentBox").checked) activeEventLayers.push(MarkerType.FireDepartment);

	// Set visibility
	for(i = 0; i < ffmMarkers.length; i++)
	{
		var showMarker = false;
		var ffmMarker = ffmMarkers[i];

		// Check layer
		if(activeEventLayers.contains(ffmMarker.type))
		{
			// Check time filter
			if (timeFilterEnabled && ffmMarker.type != MarkerType.FireDepartment)
			{
				if(ffmMarkers[i].date >= filterStartDate && ffmMarkers[i].date <= filterEndDate)
				{
					showMarker = true;
				}
				else
				{
					showMarker = false;
				}
			}
			else
			{
				showMarker = true;
			}
		}
		else
		{
			showMarker = false;
		}

		// Show or hide marker
		if (showMarker)
		{
			if (!ffmMarker.visible)
			{
				map.addOverlay(ffmMarker.marker);
				ffmMarker.show();
			}
		}
		else
		{
			map.removeOverlay(ffmMarker.marker);
			ffmMarker.hide();
		}
	}
}

/*
 * Activate or deactivate the time filter.
 */
function setTimeFilter()
{
	var disabled = !timeFilterEnabled;
	document.getElementById("TimeFilterButton").firstChild.src = disabled ? "images/icon_timefilter_activate.png" : "images/icon_timefilter_deactivate.png";
	document.getElementById("SelectStartMonth").disabled = disabled;
	document.getElementById("SelectStartYear").disabled = disabled;
	document.getElementById("SelectEndMonth").disabled = disabled;
	document.getElementById("SelectEndYear").disabled = disabled;
}

/**
 * Check whether the filter makes sense.
 */
function validateTimeFilter()
{
	// Validation
	if(filterEndDate < filterStartDate)
	{
		document.getElementById("ShowEvents").innerHTML = "<div class='useless'>Dieser Filter macht zwar<br /> keinen Sinn, aber bitte ...</div>";
	}
	else
	{
		document.getElementById("ShowEvents").innerHTML = "Zeige Ereignisse";
	}
}

function setFilterStartDate()
{
	startMonth = document.getElementById("SelectStartMonth").selectedIndex;
	startYear = document.getElementById("SelectStartYear").options[document.getElementById("SelectStartYear").selectedIndex].value;
	filterStartDate = new Date(startYear, startMonth, 1);
}

function setFilterEndDate()
{
	endMonth = document.getElementById("SelectEndMonth").selectedIndex;
	endYear = document.getElementById("SelectEndYear").options[document.getElementById("SelectEndYear").selectedIndex].value;
	filterEndDate = new Date(endYear, endMonth, getDaysPerMonth(endYear, endMonth));
}

/**
 *
 */
function refreshEventMarkerList()
{
	ffmMarkers.sort(FfmMarkerSortType);
	var type = MarkerType.Undefined;
	var list = document.getElementById("EventMarkerList");

	// Clear list
	while(list.hasChildNodes())
	{
		list.removeChild(list.firstChild);
	}

	for(i = 0; i < ffmMarkers.length; i++)
	{
		ffmMarker = ffmMarkers[i];

		if(ffmMarker.type == MarkerType.FireDepartment || !ffmMarker.visible)
			continue;

		// Determine if new optgroup has to be created
		if(ffmMarker.type != type)
		{
			var optgroup = document.createElement("optgroup");
			switch(ffmMarker.type)
			{
				case MarkerType.EventTechnical: optgroup.label = "Technische Einsätze"; break;
				case MarkerType.EventFire: optgroup.label = "Brandeinsätze"; break;
				case MarkerType.EventExercise: optgroup.label = "Übungen"; break;
				case MarkerType.EventYouth: optgroup.label = "Jugend"; break;
				case MarkerType.EventAppointment: optgroup.label = "Termine"; break;
				case MarkerType.EventNews: optgroup.label = "News"; break;
			}
			list.appendChild(optgroup);
		}

		newOption = new Option(ffmMarker.title);
		newOption.value = ffmMarker.id;
		list.options[list.length] = newOption;

		type = ffmMarker.type;
	}
}

/*
 * Shows the info window for a specific marker.
 */
function selectMarker(markerId)
{
	for(i = 0; i < ffmMarkers.length; i++)
	{
		ffmMarker = ffmMarkers[i];
		if(ffmMarker.id == markerId)
		{
			if(!ffmMarker.visible)
			{
				map.addOverlay(ffmMarker.marker);
				ffmMarker.show();
			}
			ffmMarker.marker.openInfoWindowTabsHtml(ffmMarker.infowindowtabs);
			break;
		}
	}
}

/*
 * Set the checkbox for all kinds of events.
 * @param (bool) checked
 */
function setEventTypeBoxes(checked)
{
	document.getElementById("EventTechnicalBox").checked   = checked;
	document.getElementById("EventFireBox").checked        = checked;
	document.getElementById("EventExerciseBox").checked    = checked;
	document.getElementById("EventYouthBox").checked       = checked;
	document.getElementById("EventAppointmentBox").checked = checked;
	document.getElementById("EventNewsBox").checked        = checked;
	document.getElementById("FireDepartmentBox").checked   = checked;
}



/***********   EventHandler   ***************/

/**
 * The type of map changed (satellite, ...)
 */
function MapType_Changed()
{
	if(map.getCurrentMapType() == G_NORMAL_MAP)
	{
		document.getElementById("MapTypeButton").firstChild.src = "images/icon_satellite_32.png";
	}
	else
	{
		document.getElementById("MapTypeButton").firstChild.src = "images/icon_map_32.png";
	}
}

/**
 * Show / hide the alarm area.
 */
function AlarmAreaBox_Clicked()
{
	// Refresh alarm area
	if(document.getElementById("AlarmAreaBox").checked)
		map.addOverlay(alarmarea);
	else
		map.removeOverlay(alarmarea);
}

function TimeFilterBox_Clicked()
{
	timeFilterEnabled = document.getElementById("TimeFilterBox").checked;
	setTimeFilter();
	setMarkerVisibility();
	refreshEventMarkerList();
}

function SelectStartMonth_Changed()
{
	setFilterStartDate();
	validateTimeFilter();
	setMarkerVisibility();
	refreshEventMarkerList();
}

function SelectStartYear_Changed()
{
	setFilterStartDate();
	validateTimeFilter();
	setMarkerVisibility();
	refreshEventMarkerList();
}

function SelectEndMonth_Changed()
{
	setFilterEndDate();
	validateTimeFilter();
	setMarkerVisibility();
	refreshEventMarkerList();
}

function SelectEndYear_Changed()
{
	setFilterEndDate();
	validateTimeFilter();
	setMarkerVisibility();
	refreshEventMarkerList();
}

function EventTypeBox_Clicked()
{
	setMarkerVisibility();
	refreshEventMarkerList();
}

function EventMarkerList_Changed()
{
	var list = document.getElementById("EventMarkerList");
	selectMarker(list.options[list.options.selectedIndex].value);
}

function CoordinateSystemBox_Clicked(format)
{
	coordinateFormat = format;
	printLatLng(map.getCenter(), format)
}

function HomeButton_Clicked()
{
	map.setCenter(new GLatLng(48.191918686614486, 14.11868691444397), 13);
}

function ZoomInButton_Clicked()
{
	map.zoomIn();
}

function ZoomOutButton_Clicked()
{
	map.zoomOut();
}

function ShowAllMarkersButton_Clicked()
{
	setEventTypeBoxes(true);
	setMarkerVisibility();
	refreshEventMarkerList();
}

function ClearMapButton_Clicked()
{
	setEventTypeBoxes(false);
	setMarkerVisibility();
	refreshEventMarkerList();
}

function TimeFilterButton_Clicked()
{
	document.getElementById("TimeFilterBox").checked = !timeFilterEnabled;
	timeFilterEnabled = !timeFilterEnabled;
	setTimeFilter();
	setMarkerVisibility();
	refreshEventMarkerList();
}

function MapTypeButton_Clicked()
{
	if(map.getCurrentMapType() == G_NORMAL_MAP)
	{
		map.setMapType(G_SATELLITE_MAP);
	}
	else
	{
		map.setMapType(G_NORMAL_MAP);
	}
}



// Definition of the alarm area polygon
var alarmarea = new GPolygon([
new GLatLng(48.186525609642615, 14.079580307006836),
new GLatLng(48.18734104496581, 14.078207015991211),
new GLatLng(48.18804202285582, 14.079923629760742),
new GLatLng(48.18978727309248, 14.077584743499756),
new GLatLng(48.19158968225954, 14.074795246124268),
new GLatLng(48.19171842334565, 14.07346487045288),
new GLatLng(48.194321784794, 14.07024621963501),
new GLatLng(48.19679628597103, 14.072906970977783),
new GLatLng(48.19749713452843, 14.077434539794922),
new GLatLng(48.19622415759206, 14.07846450805664),
new GLatLng(48.19610973114961, 14.084172248840332),
new GLatLng(48.1992563651997, 14.081897735595703),
new GLatLng(48.19965683203328, 14.08198356628418),
new GLatLng(48.20578501429347, 14.091596603393555),
new GLatLng(48.21033240957727, 14.08820629119873),
new GLatLng(48.21184811827814, 14.094042778015137),
new GLatLng(48.20824466187687, 14.10219669342041),
new GLatLng(48.210847183600976, 14.108247756958008),
new GLatLng(48.214021509067926, 14.106316566467285),
new GLatLng(48.21533693762587, 14.110608100891113),
new GLatLng(48.218882707144104, 14.121980667114258),
new GLatLng(48.21914005182481, 14.127988815307617),
new GLatLng(48.21942598884169, 14.135112762451172),
new GLatLng(48.220312383444636, 14.13567066192627),
new GLatLng(48.21942598884169, 14.136056900024414),
new GLatLng(48.22019801080989, 14.154167175292969),
new GLatLng(48.215994639231866, 14.154725074768066),
new GLatLng(48.2121626937074, 14.153952598571777),
new GLatLng(48.203725683609925, 14.157557487487793),
new GLatLng(48.20203811479942, 14.155068397521973),
new GLatLng(48.19677483127211, 14.151034355163574),
new GLatLng(48.19036662580978, 14.15811538696289),
new GLatLng(48.18724805738259, 14.15365219116211),
new GLatLng(48.185674395772345, 14.151420593261719),
new GLatLng(48.18058112333098, 14.137344360351562),
new GLatLng(48.18000881390192, 14.132323265075684),
new GLatLng(48.177175788137845, 14.120864868164062),
new GLatLng(48.174686030195716, 14.114470481872559),
new GLatLng(48.17225339130194, 14.106359481811523),
new GLatLng(48.169820636998494, 14.100308418273926),
new GLatLng(48.169820636998494, 14.094858169555664),
new GLatLng(48.1763172645737, 14.09296989440918),
new GLatLng(48.1798085040923, 14.083185195922852),
new GLatLng(48.18134657720463, 14.077091217041016),
new GLatLng(48.182491159803746, 14.079623222351074),
new GLatLng(48.18581030481767, 14.077370166778564),
new GLatLng(48.186525609642615, 14.079580307006836)],
"#f33f00", 3, 1, "#ff0000", 0.2);


var map;
var coordinateFormat = CoordinateFormat.DEG;
var timeFilterEnabled;
var filterStartDate = new Date();
var filterEndDate = new Date();
ffmMarkers = new Array();


