var mapType;
var icon; //path wordt gezet in include_googlemapsrequiredscript.php
var currentPoint = null;
var startingPoint;
var startZoom;
var bounds;
var mapcenter;

var map;

function initProjectMap(mapTypeString, latitude, longitude)
{
	if (GBrowserIsCompatible()) 
	{
		mapType = (typeof mapTypeString == 'undefined') ? 'overzicht' : mapTypeString;
		
		if((typeof latitude != 'undefined') && (typeof longitude != 'undefined'))
		{
			mapCenter = new GLatLng(latitude, longitude);
		}
		else
		{		
			bounds = new GLatLngBounds(new GLatLng(-90, -180), new GLatLng(90, 180));
			mapCenter = bounds.getCenter();
		}
		
		switch(mapType)
		{
			case 'overzicht':
				startZoom = 1;
				break;
			case 'detail':
			case 'home':
			default:
				startZoom = 8;
				break;
		}
		
		//GLog.write('init started');
		map = new GMap2(document.getElementById("map"));
		map.setCenter(mapCenter, startZoom);
		//map.getBoundsZoomLevel(bounds);
		
		//add controls
		addControls();
		
		if(mapType == 'overzicht')
		{
			//zorg dat je kan zoomen via de scrollwheel van de muis
			map.enableScrollWheelZoom();
		}
		
		//geef standaard de sattelietmap weer
		map.setMapType(G_SATELLITE_MAP);
		
		//initialiseer het standaardicoon voor de markers
		icon = new GIcon(G_DEFAULT_ICON, iconPath);
		icon.iconSize = new GSize(35, 35);
		icon.shadow = 'img/custom_icon_shadow2.png';
		icon.shadowSize = new GSize(53.0, 35.0);
		icon.imageMap = new Array(0,0,0,25,25,25,25,0); //het klikbare gedeelte van de marker
		
		//teken de markers
		showMarkers()
	}
}

function addControls()
{
	switch(mapType)
	{
		case 'overzicht':
			map.addControl(new GLargeMapControl3D());
			map.addControl(new GScaleControl());
			map.addControl(new GMapTypeControl());
			var minimap = new GOverviewMapControl(new GSize(100, 100));
			map.addControl(minimap);
			minimap.hide();
			break;
		case 'detail':
		case 'home':
		default:
			map.addControl(new GSmallMapControl());
			break;
	}
}

function showMarkers()
{
	switch(mapType)
	{
		case 'overzicht':
			for (id in markers) 
			{
				initializePoint(markers[id]);
			}
			break;
		case 'detail':
		case 'home':
		default:
			var marker;
			var clickable = typeof(singlePointHtml) != 'undefined';
			marker = new GMarker(mapCenter, {icon:icon, clickable:clickable});
			if(clickable)
			{
				GEvent.addListener(marker, 'click', function() {
					marker.openInfoWindowHtml(singlePointHtml);
				});	
			}
			map.addOverlay(marker);
			if(clickable)
			{
				GEvent.trigger(marker, 'click');
			}
			break;
	}	
}

function initializePoint(pointData)
{
	var point = new GLatLng(pointData.lat, pointData.lon);
	var marker = new GMarker(point, icon);
	var listItem = document.createElement('li');
	
	var listItemLink = listItem.appendChild(document.createElement('a'));
	var listItemLinkHTML = '<strong>' + pointData.name + ' </strong>';
	listItemLink.href = "#";
	listItemLink.className = 'listtitle';
	listItemLink.innerHTML = listItemLinkHTML;
	
	var listItemInfo = document.createElement('p');
	var listItemInfoHTML = '<a href="' + pointData.link + '">click here for more information</a>';
	listItemInfo.innerHTML = listItemInfoHTML;
	
	var infoWindowHTML = '<div><p>';
	infoWindowHTML += '<strong>' + pointData.name + ' </strong>';
	infoWindowHTML += '<br/>' 
	infoWindowHTML += pointData.description + '<br/>';
	if(pointData.image)
	{
		infoWindowHTML += '<img src="' + pointData.image + '" style="height:188px;" /><br/>';
	}
/*
	infoWindowHTML += '<a href="' + pointData.link + '">view details</a>';
*/
	infoWindowHTML += '</p></div>';
	
	var focusPoint = function() 
	{
		if(currentPoint != null)
		{
			GEvent.trigger(currentPoint, "unfocusPoint");
		}
		listItem.appendChild(listItemInfo);
		listItem.className = 'hier';
		currentPoint = marker;
		map.panTo(point);
		
		marker.openInfoWindowHtml(infoWindowHTML,{ maxWidth: 500 } );
		
		return false;
	}
	
	//functie om focus te verwijderen
	var unfocusPoint = function()
	{
		listItem.removeChild(listItemInfo);
		listItem.className = '';
	}
	
	//eventlistener voor focussen van een punt	
	GEvent.addListener(marker, 'click', focusPoint);
	//zorg dat de event ook getriggerd wordt als in de lijst geklikt wordt.
	listItemLink.onclick = focusPoint;
	
	//creeer extra event
	GEvent.addDomListener(marker, 'unfocusPoint', unfocusPoint);
	
	//voeg de lijstwaarden toe aan de lijst
	document.getElementById('sidebar-list').appendChild(listItem);
	
	//voeg de marker toe aan de map
	map.addOverlay(marker);
}

window.onunload = GUnload;