var locations = new Array();
var myLatlng;
var map;

function initializeMap()
{

	if (!$('map')) return false;

	myLatlng = new google.maps.LatLng(61.3130722222, 17.0575777778);
	var myOptions =
	{
	        zoom : 8,
	        center : myLatlng,
	        mapTypeId : google.maps.MapTypeId.HYBRID
	}
	map = new google.maps.Map(document.getElementById("map"), myOptions);

	new Ajax.Request("./getGeoTags.php",
	{
		onSuccess : function(req)
		{
			try
			{
				var host = document.location.hostname;
				var items = req.responseJSON;
				var marker;
				var date = 0;
				for ( var i = 0; i < items.length; i++)
				{
					marker = setMarker(items[i], i);
				}
				map.panTo(marker.getPosition());
				$('resetMap').onclick = function()
				{
					map.panTo(marker.getPosition());
				}
			}
			catch (e)
			{
				alert(e.message);
			}
		}
	});
}

function setMarker(item, zIndex)
{
	var distance = new google.maps.DirectionsService();
	var geocoder = new google.maps.Geocoder();

	var marker = new google.maps.Marker(
	{
	        position : new google.maps.LatLng(item.latitude, item.longitude),
	        title : item.geoDateFormatted + " - " + item.adress + " (" + item.distance / 1000 + " km)",
	        icon : new google.maps.MarkerImage('/gfx/icons/cycleicon2.png', new google.maps.Size(32, 37), new google.maps.Point(0, 0), new google.maps.Point(16, 37))
	});
	marker.setMap(map);
	marker.setZIndex(zIndex);

	var link = addLink(marker, item);

	google.maps.event.addListener(marker, 'click', function(e)
	{
		function fireEvent(element, event)
		{
			if (document.createEventObject)
			{
				var evt = document.createEventObject();
				return element.fireEvent('on' + event, evt)
			}
			else
			{
				var evt = document.createEvent("HTMLEvents");
				evt.initEvent(event, true, true);
				return !element.dispatchEvent(evt);
			}
		}

		map.panTo(marker.getPosition());
		fireEvent($(link), 'click');
	});

	marker.updateTitle = function()
	{
		marker.setTitle(item.geoDateFormatted + " - " + item.adress + " (" + item.distance / 1000 + " km)");
		return marker.getTitle();
	}

	marker.paintMap = function(response, status)
	{
		if (response)
		{
			item.adress = response[0].formatted_address;
			marker.updateTitle();
			item.title = marker.getTitle();
			link.title = marker.getTitle();
			distance.route(
			{
			        destination : marker.getPosition(),
			        origin : myLatlng,
			        travelMode : google.maps.DirectionsTravelMode.WALKING
			}, marker.route);
		}

	}
	marker.route = function(response, status)
	{
		if (response)
		{
			item.distance = response.routes[0].legs[0].distance.value;
			marker.updateTitle();
			item.title = marker.getTitle();
			link.title = marker.getTitle();
			updateGeoTag(item);
		}
	}

	if (!item.distance)
	{
		geocoder.geocode(
		{
			latLng : marker.getPosition()
		}, marker.paintMap);

	}

	return marker;
}

function addLink(marker, item)
{
	var div = $('locations');
	var link = $(document.createElement('a'));
	link.addClassName('block');
	link.rel = 'lightbox[]';
	link.href = '/images/scaled.php?file=' + item.name;
	link.title = marker.getTitle();
	link.onmouseover = function(e)
	{
		map.panTo(marker.getPosition());
	};
	link.onclick = function(e)
	{
		map.panTo(marker.getPosition());
		return false
	};
	div.appendChild(link);
	return link;
}

function updateGeoTag(item)
{

	new Ajax.Request('/updateGeoTag.php',
	{
	        method : 'post',
	        parameters : '&item=' + JSON.stringify(item),
	        onSuccess : function(req)
	        {

	        }
	});
}

google.load("maps", "3",
{
	other_params : "sensor=false"
});
google.setOnLoadCallback(initializeMap);

