/*
 * predefined:
 * var markers;
 * var initCurrentPointID;
*/

var icon;
var currentPoint = null;
var mapcenter;
var map;
var dynamicBounds;
var iconimage;
var iconshadow;
var iconshape;
var isIE6;

function initProjectMap()
{		
	isIE6 = /msie|MSIE 6/.test(navigator.userAgent);
	
	var bounds = new google.maps.LatLngBounds(new google.maps.LatLng(-90, -180), new google.maps.LatLng(90, 180));
	mapCenter = bounds.getCenter();
	
	var startZoom = ((typeof initCurrentPointID == 'undefined') || initCurrentPointID == null) ? 3 : 16;
	
	var mapOptions = {
		// -> http://code.google.com/apis/maps/documentation/v3/reference.html#Map%20options
		zoom: 			startZoom,
		center: 		mapCenter, 
		mapTypeControl:	false,
		mapTypeId: 		google.maps.MapTypeId.HYBRID
	};

	map = new google.maps.Map(document.getElementById("map"), mapOptions);

	//initialiseer de markers
	dynamicBounds = new google.maps.LatLngBounds();
	setIconValues();
	initMarkers();
	if(initCurrentPointID == null);
	{
		//zorg dat alle punten zichtbaar zijn op de map.
		map.fitBounds(dynamicBounds);
	}
}

function setIconValues()
{
	currenticonimage = new google.maps.MarkerImage('img/markers/image_blue.png',
												//size  
												new google.maps.Size(31,18),	
												//origin
												new google.maps.Point(0, 0),	
												//anchor
												new google.maps.Point(0,18));	
	iconimage = new google.maps.MarkerImage('img/markers/image.png',
												//size  
												new google.maps.Size(31,18),	
												//origin
												new google.maps.Point(0, 0),	
												//anchor
												new google.maps.Point(0,18));	
	iconshadow = new google.maps.MarkerImage('img/markers/shadow.png',
												 new google.maps.Size(40,18),
												 new google.maps.Point(0, 0),
												 new google.maps.Point(0,18));
	iconshape = {
		coord: [27,0,29,1,29,2,30,3,30,4,30,5,30,6,30,7,21,8,21,9,20,10,20,11,20,12,20,13,20,14,20,15,19,16,18,17,12,17,11,16,10,15,10,14,10,13,10,12,10,11,10,10,10,9,0,8,0,7,0,6,0,5,0,4,0,3,1,2,2,1,3,0],
		type: 'poly'};
}

function initMarkers()
{
	//de markers var moet reeds gevuld zijn!
	for (id in markers) 
	{
		initializePoint(markers[id]);
	}
}

function initializePoint(pointData)
{
	var point = new google.maps.LatLng(pointData.lat, pointData.lon);

	var marker = new google.maps.Marker({
		map: map,
		position: point,
        title: pointData.name
	});
	
	if(!isIE6)
    {
		marker.icon = (initCurrentPointID == pointData.id ? currenticonimage : iconimage),
		marker.shadow = iconshadow,
		marker.shape = iconshape
    }
	
	var listItem = document.createElement('li');
	
	var listItemLink = listItem.appendChild(document.createElement('a'));
		listItemLink.href = "#";
	var listItemLinkHTML = pointData.name;
		listItemLink.innerHTML = listItemLinkHTML;
	
	var listItemBreak = document.createElement('br');
	var listItemInfo = document.createElement('a');
		listItemInfo.href = pointData.link;
		listItemInfo.className = 'readmore';
	var listItemInfoHTML = "click here for more information";
		listItemInfo.innerHTML = listItemInfoHTML;
	
	var infoWindowHTML  = '<h1>' + pointData.name + '</h1>' +
						  '<p>' + 
						  	pointData.description +
						  '</p>';
	
	var infowindow = new google.maps.InfoWindow({
	    content: infoWindowHTML,
	    maxWidth: 170
	});
	
	var focusPoint = function() 
	{
		if(currentPoint != null)
		{
			google.maps.event.trigger(currentPoint, "unfocusPoint");
		}
		listItem.appendChild(listItemBreak);
		listItem.appendChild(listItemInfo);
		listItem.className = 'hier';
		currentPoint = marker;
		infowindow.open(map,marker);
		return false;
	}
	
	//functie om focus te verwijderen
	var unfocusPoint = function()
	{
		infowindow.close();
		listItem.removeChild(listItemBreak);
		listItem.removeChild(listItemInfo);
		listItem.className = '';
		currentPoint = null; //nodig als je unfocussed door de infowindow te sluiten
		return false;
	}
	
	//eventlistener voor focussen van een punt
	google.maps.event.addListener(marker, 'click', focusPoint);
	
	//zorg dat de event ook getriggerd wordt als in de lijst geklikt wordt.
	listItemLink.onclick = focusPoint;
	
	//creeer extra event
	google.maps.event.addDomListener(marker, 'unfocusPoint', unfocusPoint);

	//eventlistener voor sluiten van een infowindow
	google.maps.event.addListener(infowindow, 'closeclick', unfocusPoint);
	
	//voeg de lijstwaarden toe aan de lijst
	document.getElementById('projectlist').appendChild(listItem);
	
	//focus on this point if it is the initially focused one
	if(initCurrentPointID == pointData.id)
	{
		//google.maps.event.trigger(marker, "click");
		map.panTo(point);
	}
	//update values to set mapcenter
	dynamicBounds.extend(point);
}