var locations = new Array();
var myLatlng;
var map;
var bounds;
var markers = new Array();
var distance;
var geocoder;
var initialLocation;
var myLocationCoords;

function initializeMap()
{

	if (!$('afmap')) return false;

	$('afmap').setStyle(
	{
	        width : '683px',
	        height : '400px'
	});

	initialLocation = new google.maps.LatLng(50, 30);

	var myOptions =
	{
	        zoom : 2,
	        mapTypeId : google.maps.MapTypeId.ROADMAP,
	        mapTypeControl : true,
	        mapTypeControlOptions :
	        {
		        style : google.maps.MapTypeControlStyle.HORIZONTAL_BAR
	        },
	        navigationControl : true,
	        navigationControlOptions :
	        {
		        style : google.maps.NavigationControlStyle.DEFAULT
	        },
	        center : new google.maps.LatLng(50, 30),
	        zoom : 2
	}
	map = new google.maps.Map(document.getElementById("afmap"), myOptions);

	new Ajax.Request("/Ajax/reseller",
	{
		onSuccess : function(req)
		{
			try
			{
				var items = req.responseJSON.resellers;
				
				for ( var i = 0; i < items.length; i++)
				{
					setMarker(items[i], i);
				}

			}
			catch (e)
			{
				alert(e);
			}
		}
	});

	try
	{
		if (navigator.geolocation)
		{

			navigator.geolocation.getCurrentPosition(function(position)
			{
				myLocationCoords = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);

			}, function()
			{
				handleNoGeolocation();
			});
		}
		else if (google.gears)
		{
			var geo = google.gears.factory.create('beta.geolocation');
			geo.getCurrentPosition(function(position)
			{
				myLocationCoords = new google.maps.LatLng(position.latitude, position.longitude);

			}, function()
			{
				handleNoGeoLocation();
			});

		}
		else
		{
			handleNoGeolocation();
		}
		function handleNoGeolocation()
		{

			myLocationCoords = new google.maps.LatLng(google.loader.ClientLocation.latitude, google.loader.ClientLocation.longitude);
		}
	}
	catch (e)
	{
		alert(e.message);
	}

}

function myLocation()
{
	initialLocation = myLocationCoords;
	ZoomToMarkerBounds();
}

function ZoomToMarkerBounds()
{
	try
	{
		var shortest = false;
		var boundobject;

		for ( var i = 0; i < markers.length; i++)
		{
			var marker = markers[i];

			var legx = Math.pow((initialLocation.lat() - marker.getPosition().lat()), 2);
			var legy = Math.pow((initialLocation.lng() - marker.getPosition().lng()), 2);

			var hyp = Math.sqrt(legx + legy);

			if (hyp < shortest || !shortest)
			{
				shortest = hyp;
				boundobject = marker;
			}
		}

		var swlat = boundobject.getPosition().lat() < initialLocation.lat() ? boundobject.getPosition().lat() : initialLocation.lat();
		var swlng = boundobject.getPosition().lng() < initialLocation.lng() ? boundobject.getPosition().lng() : initialLocation.lng();
		var nelat = boundobject.getPosition().lat() > initialLocation.lat() ? boundobject.getPosition().lat() : initialLocation.lat();
		var nelng = boundobject.getPosition().lng() > initialLocation.lng() ? boundobject.getPosition().lng() : initialLocation.lng();
		var zoombounds = new google.maps.LatLngBounds(new google.maps.LatLng(swlat - 0.02, swlng - 0.02), new google.maps.LatLng(nelat + 0.02, nelng + 0.02));
		map.fitBounds(zoombounds);
		map.panTo(boundobject.getPosition());
	}
	catch (e)
	{

	}

}

function setMarker(item, zIndex)
{

	var adress = "<p><img src='/media/aflogo.php?ID="+item.ID+"' style='float:right'/><strong>" + item.Namn + "</strong><br/>" + item.Adress1 + "<br/>" + item.Postnr + " " + item.Ort;
	adress += "<br/>Tel: " + item.Telefon1 + "<br/>Fax: " + item.Fax + "<br/>E-post: <a href='mailto:" + item.Epost + "'>" + item.Epost + "</a>";
	adress += "<br/>Web: <a href='http://" + item.URL + "'target='_blank'>" + item.URL + "</a></p>";

	var marker = new google.maps.Marker(
	{
	        position : new google.maps.LatLng(item.Lat.replace(",", "."), item.Lon.replace(",", ".")),
	        title : item.Namn,
	        //icon : new google.maps.MarkerImage('http://www.edsbyn.com/images/icons/logopin.png', new google.maps.Size(32, 38), new google.maps.Point(0, 0), new google.maps.Point(13, 38))
	        icon : new google.maps.MarkerImage('http://www.edsbyn.com/images/icons/logopin2.png', new google.maps.Size(16, 16), new google.maps.Point(0, 0), new google.maps.Point(8, 8))
	});
	markers.push(marker);
	marker.setMap(map);
	marker.setZIndex(zIndex);

	google.maps.event.addListener(marker, 'click', function(e)
	{
		map.setZoom(16);
		map.panTo(marker.getPosition());
		$('infoArea').innerHTML = adress;
		map.clicked = item.ID;
	});

	google.maps.event.addListener(marker, "mouseover", function()
	{
		if(map.clicked != item.ID)
			map.clicked = false;
		$('infoArea').innerHTML = adress;
	});

	google.maps.event.addListener(marker, "mouseout", function()
			{
				if(!map.clicked)
					$('infoArea').innerHTML = '';
			});

	
	return marker;
}

function searchMap(value)
{
	var geocoder = new google.maps.Geocoder();
	var address =
	{
		address : value
	};
	geocoder.geocode(address, function(results, status)
	{
		if (status == google.maps.GeocoderStatus.OK)
		{
			initialLocation = results[0].geometry.location;
			map.setCenter(initialLocation);
			ZoomToMarkerBounds();
		}
		else
		{
			alert("Geocode was not successful for the following reason: " + status);
		}

	});

}

google.load("maps", "3",
{
	other_params : "sensor=false"
});
google.setOnLoadCallback(initializeMap);

