var markerData    = {1: [], 2: [], 3: []};
var currentMarker = null;


function createProjectMarker(data, map) {
	if( data.html.projects.length == 0 ) return;
	var infoHtml = {projects: []};

	for( var k in data.html ) {
		for( var i in data.html[k] ) {
			switch( k )
			{
				case 'projects':
					infoHtml[k].push('<li><a href="' + projectLink[k] + data.html[k][i].id + '">' + data.html[k][i].title + '</a></li>');
					break;
				default:
					infoHtml[k].push('<a href="' + projectLink[k] + data.html[k][i] + '">' + '</a>');
					break;
			}
		}
	}

	var icon = new GIcon();
	icon.shadow = "./img/maps/shadow50.png";
	icon.image  = "./img/maps/marker.png";
	icon.iconSize = new GSize(20, 34);
	icon.shadowSize = new GSize(37, 34);
	icon.iconAnchor = new GPoint(9, 34);
	icon.infoWindowAnchor = new GPoint(9, 2);
	icon.infoShadowAnchor = new GPoint(18, 25);

   var ttCountry = data.country;
   

	var point  = new GLatLng(data.lat, data.lng);
	var marker = new GMarker(point, {icon: icon, title: ttCountry});
	markerData[data.zoom].push(marker);

	GEvent.addListener(marker, "click", function()
	{
      	if( currentMarker && currentMarker.setImage ) currentMarker.setImage('./img/maps/marker.png');
   		if( marker && marker.setImage ) {
   			marker.setImage('./img/maps/marker_on.png');
   			currentMarker = marker;
			}
			
         document.getElementById('projectdata').innerHTML = '<h2><img src="./img/maps/marker.gif" align="bottom" width="13" height="22" style="margin-right: 1px;" valign="bottom" />' + data.country + '</h2>' + '<ul>' + infoHtml.projects.join('\n') + '<li class="allprojects"><a href="' + projectLink.allprojects + 'countries=' + data.country_id + '">' + document.getElementById('more_projects_in').innerHTML + ' ' + data.country + ' (' + data.projectcount + ') &rsaquo;</a></li></ul>';
		 
		 switchSearchCondition('projectdata');
			map.panTo(point);
		if( map.getZoom() < 3 ) {
			map.zoomIn();
			map.setCenter(point);
		}
	});

	GEvent.addListener(marker, "dblclick", function()
	{
		if( map.getZoom() == 3 ) {
			document.location.href = projectLink.allprojects + '&countries=' + data.country_id.replace(/ /, '_');
		}
	});

	return marker;
}
var map;
function initGoogleMaps() {
	if( GBrowserIsCompatible() ) {
		map = new GMap2(document.getElementById("google_maps"));
		var mt  = map.getMapTypes();
		var zrn = [1, 3];

      customZoomControl = document.createElement('div');
		customZoomControl.style.position = 'absolute';
		customZoomControl.style.left = '5px';
		customZoomControl.style.top  = '5px';

		var customZoomOutControl = document.createElement('img');
		var customZoomInControl  = document.createElement('img');

      with( customZoomOutControl.style ) { display = 'block'; marginBottom = '3px'; cursor = 'pointer'; }
      with( customZoomInControl.style ) { display = 'block'; cursor = 'pointer'; }

		customZoomOutControl.src     = 'img/maps/gm_zoomout.png';
		customZoomInControl.src      = 'img/maps/gm_zoomin.png';
		customZoomInControl.onclick  = function() { map.zoomIn(); };
		customZoomOutControl.onclick = function() { map.zoomOut(); };
		customZoomInControl.title    = 'Inzoomen';
		customZoomOutControl.title   = 'Uitzoomen';

		customZoomControl.appendChild(customZoomInControl);
		customZoomControl.appendChild(customZoomOutControl);

		map.getContainer().appendChild(customZoomControl);
		map.enableScrollWheelZoom();
		map.enableContinuousZoom();
		new GKeyboardHandler(map);
		map.setCenter(new GLatLng(17.0000, 10.0000), 1);

		for( var i = 0; i < mt.length; i++ ) {
			mt[i].getMinimumResolution = function() { return zrn[0]; }
			mt[i].getMaximumResolution = function() { return zrn[1]; }
		}

      GEvent.addListener(map, 'move', function() { limitMapBounds(map); });
      GEvent.addListener(map, 'zoomend', function() { limitMapBounds(map); });

	}
}

function limitMapBounds(map) {
	var curCenter    = map.getCenter();
	var curZoom      = map.getZoom();
	var curLatitude  = curCenter.lat();
	var curLongitude = curCenter.lng();
	var maxLngTop    = [0.000000, 63.233627, 78.420193, 82.425629];
	var maxLngBottom = [0.000000, -64.168106, -78.630005, -82.494823];

	if( curLatitude > maxLngTop[curZoom] ) map.setCenter(new GLatLng(maxLngTop[curZoom], curLongitude));
	else if( curLatitude < maxLngBottom[curZoom] ) map.setCenter(new GLatLng(maxLngBottom[curZoom], curLongitude));
}

function jsonParseMarkers(data) {
	//var json = eval(data);
	if(!map) {
		setTimeout(function() {jsonParseMarkers(data);}, 1000);
	} else {
		for( var i = 0; i < data.length; i++ ) {
			createProjectMarker(data[i], map);
		}

		addStoredMarkers(map);
	}
}

function addStoredMarkers(map) {
	var manager = new GMarkerManager(map, {maxZoom: 3});

	for( var z in markerData ) {
		if( markerData[z].length == 0 ) continue;
		manager.addMarkers(markerData[z], z);
		manager.refresh();
	}
}

function hideProjectInfo() {
	$('#projectdata').hide();
}

function showProjectInfo() {
	$('#projectdata').show();
}

addEvent(window, 'load', initGoogleMaps);

