
/** 
 * Googlekarta för Google maps v3
 * 
 * 2010.Nov.24   TD   Skapad för kopplingsdialogen i html/update/koppla.php
 * 2011.Jan.25   TD   La till kartan på fastighetsägarnas objektskort och på konferens
 * 2011.Feb.02   TD   Kommenterade ut v2 funktionerna i den här filen
 * 2011.Mar.10   TD   La till mapReady
 * 
 * Exempel:
 *    map = new MapV3();
 *    map.zoom = 8;
 *    map.drawMap();
 */
function MapV3()
{
	this.marker;
	this.markerTitle = '';
	this.markerDraggable = false;
	
	this.mapReady; // function to run after map is drawn if needed. must be called after drawMap(). refer to lokal_print.php
	
	this.zoom = 6;
	this.maxZoom = null;
	this.zoomControlSize = google.maps.ZoomControlStyle.SMALL;
	
	this.panControl = false;
	
	this.lat = 58.1933; // Boxholm som defaultort, 
	this.lng = 15.0546;
	this.latLng = new google.maps.LatLng(this.lat,this.lng);
	
	// function enablePanControl
	this.enablePanControl = function()
	{
		this.panControl = true;
	};
	
	// function setCoords
	this.setCoords = function(lat, lng)
	{
		this.latLng = new google.maps.LatLng(lat,lng);
	};

	
	// function setLargeZoomControls
	this.setLargeZoomControls = function()
	{
		this.zoomControlSize = google.maps.ZoomControlStyle.LARGE;
	};

	
	// function setNewMarker
	this.setNewMarker = function(location)
	{
		// sätt ny position
		this.latLng = location;
		// ta bort den gamla markören
		this.marker.setMap(null);
		// skapa ny markör
		this.marker = new google.maps.Marker({
				position: this.latLng,
				map: this.map,
				draggable: true,
				title: this.markerTitle
		});
	};
	
	
	// function drawMap
	this.drawMap = function()
	{
		// map options
		var myOptions = {
			center: this.latLng,
			mapTypeId: google.maps.MapTypeId.ROADMAP,
			streetViewControl: false,
			panControl: this.panControl,
			mapTypeControlOptions: {
				/*
				mapTypeIds: [google.maps.MapTypeId.ROADMAP, google.maps.MapTypeId.SATELLITE, google.maps.MapTypeId.TERRAIN],
				style: google.maps.MapTypeControlStyle.DROPDOWN_MENU,
				position: google.maps.ControlPosition.RIGHT_BOTTOM
				*/
				mapTypeIds: [google.maps.MapTypeId.ROADMAP, google.maps.MapTypeId.SATELLITE],
				style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR
			},
			zoom: this.zoom,
			maxZoom: this.maxZoom,
			zoomControlOptions: {
				style: this.zoomControlSize
			}
		};
		
		// själva kartan
		this.map = new google.maps.Map(document.getElementById('map_canvas'), myOptions);
		
		// setup marker
		this.marker = new google.maps.Marker({
			position: this.latLng,
			map: this.map,
			draggable: this.markerDraggable,
			title: this.markerTitle
		});
		
		this.mapReady = function(perform) { // can receive a function to be performed after the map has been loaded
			google.maps.event.addListener(this.map, 'tilesloaded', perform);
		}; 
	};
}

/** 
 * Googlekarta för Google maps v2
 * 
 * Skall fasas ut
 *
var map = null;
var geocoder = null;
var zoomControl = null;
var ort;
var gatuaddress;


// ----------{ Initiera karta }---------- 
function initMap(gaddr, ortnamn)
{
	gatuaddress = gaddr;
	ort = ortnamn;
	
	if (GBrowserIsCompatible())
	{	
	    	map = new google.maps.Map2(document.getElementById('map_canvas')); // öppna en ny karta 
	    	geocoder = new GClientGeocoder(); // en geocoder översätter gatuadresser till logitud/latitud 
	    	geocoder.setBaseCountryCode("SE"); // föredra sökresultat från Sverige
	    	
	    	zoomControl = new GSmallZoomControl3D(); // zoomkontroll till så att användaren kan zooma
		map.addControl(zoomControl);
				
		var bottomRight = new GControlPosition(G_ANCHOR_BOTTOM_RIGHT, new GSize(10,20)); // karttypsväljaren med tillhörande inställningar för position och de typer man får välja
		map.removeMapType(G_HYBRID_MAP);		
		var mapControl = new GMapTypeControl();
		map.addControl(mapControl, bottomRight);

		
		if (geocoder)
		{
			var address = gatuaddress + ', ' + ort;		
			geocoder.getLocations(address, addOrtOchGataToMap);		
		}
	}
}


// ----------{ Hitta gata och ort }---------- 
function addOrtOchGataToMap(response) // responsen ser ut så här: http://code.google.com/apis/maps/documentation/services.html#Geocoding_Structured
{
	if (!response || response.Status.code != 200 || response.Placemark[0].AddressDetails.Accuracy < 6) // ju högre nummer ju bättre match (1=land etc.)
	{ 	
		geocoder.getLocations(ort, addOrtToMap); // det gick inte, så nu föröker vi att endast hitta orten
	}
	else // TODO: logga via ajax google-koordinater för den här lokalen
	{
		place = response.Placemark[0];
		var point = new GLatLng(place.Point.coordinates[1], place.Point.coordinates[0]);
		var marker = new GMarker(point);
		map.setCenter(point, 14);
		map.addOverlay(marker);
	}
}


// ----------{ Hitta endast ort }---------- 
function addOrtToMap(response)
{	
	if (!response || response.Status.code != 200) // TODO: lägg till loggning via ajax på lokaler där vi hamnar i det här läget
	{
		return;
	}
	else
	{
		place = response.Placemark[0];
		var point = new GLatLng(place.Point.coordinates[1], place.Point.coordinates[0]);
		var marker = new GMarker(point);
		map.setCenter(point, 11);
		map.addOverlay(marker);
	}
}


// ----------{ Initiera karta med koordinater som input }---------- 
function initMapCoord(latitude, longitude)
{
	if (GBrowserIsCompatible())
	{	
	    map = new google.maps.Map2(document.getElementById('map_canvas')); // öppna en ny karta 
	    	
	    zoomControl = new GSmallZoomControl3D(); // zoomkontroll till så att användaren kan zooma
		map.addControl(zoomControl);
				
		var bottomRight = new GControlPosition(G_ANCHOR_BOTTOM_RIGHT, new GSize(10,20)); // karttypsväljaren med tillhörande inställningar för position och de typer man får välja
		map.removeMapType(G_HYBRID_MAP);		
		var mapControl = new GMapTypeControl();
		map.addControl(mapControl, bottomRight);

		var point = new GLatLng(latitude, longitude);
		var marker = new GMarker(point);
		map.setCenter(point, 14);
		map.addOverlay(marker);
	}
}
*/
