// === Global variable that can be used by the context handling functions ==
var clickedPixel;
var menuVisible = false;

var map;
var mgr;
var numLevels = 6; //Aantal zoomlevels
var number_colors = 17; // Aantal kleuren in onderstaande array (10/2/2011 van 20 => 17)
var colors = new Array( //0 - 7
new Array("red",	"#FF0000"), 	
new Array("green",	"#00FF00"), 	
new Array("blue",	"#0000FF"), 	
new Array("orange",	"#DE4B04"),
new Array("rose",	"#F59DB2"),
new Array("black",	"#000000"),
new Array("white",	"#FFFFFF"), 
//new Array("dim_grey",	"#545454"),
new Array("firebrick",	"#8E2323"),
new Array("magenta",	"#FF00FF"),
//new Array("copper",	"#B87333"),
new Array("cyan",	"#00FFFF"), 	
new Array("yellow",	"#FFFF00"),
new Array("aquamarine", "#70DB93"),
//new Array("brass",	"#B5A642"),
//new Array("cadet_blue",	"#5F9F9F"),
new Array("dark_green", "#2F4F2F "),
new Array("dark_purple",	"#871F78"),
new Array("flesh",	"#F5CCB0"),
//new Array("forest_green",	"#238E23"),
new Array("quartz",	"#D9D9F3"),
//new Array("rich_blue",	"#5959AB"),
new Array("okergeel",	"#FFC50B"),
new Array("roodrose",	"#E81A4B")
);

// === create the context menu div ===
var contextmenu = document.createElement("div");
contextmenu.style.visibility="hidden";
contextmenu.style.background="#ffffff";
contextmenu.style.color="#000000";
contextmenu.style.border="1px solid #000000";

contextmenu.innerHTML = '<div class="google_map_contextmenu">&nbsp;&nbsp;<a href="javascript:zoomIn()">Zoom in</a><br>'
                      + '&nbsp;&nbsp;<a href="javascript:zoomOut()">Zoom out</a><br>'
                      + '&nbsp;&nbsp;<a href="javascript:zoomInHere()">Zoom in here</a><br>'
                      + '&nbsp;&nbsp;<a href="javascript:zoomOutHere()">Zoom out here</a><br>'
                      + '&nbsp;&nbsp;<a href="javascript:centreMapHere()">Centre map here</a>&nbsp;&nbsp;</div>';
                      
function doLoad(myMapType) {
	if (GBrowserIsCompatible()) {
		map = new GMap2(document.getElementById("map"),{draggableCursor:'crosshair'});
		
		if(myMapType == 1) map.setMapType(G_SATELLITE_MAP);
		map.addControl(new GScaleControl());
		map.addControl(new GLargeMapControl());
		map.addControl(new GMapTypeControl());
		map.setCenter(new GLatLng(52.964301,6.017761), 8);
		//map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds)); //5
		map.getContainer().appendChild(contextmenu);
		GEvent.addListener(map, 'click', mapClick);
		
		// === listen for singlerightclick ===
		GEvent.addListener(map,"singlerightclick",function(pixel,tile) {
		  // store the "pixel" info in case we need it later
		  // adjust the context menu location if near an egde
		  // create a GControlPosition
		  // apply it to the context menu, and make the context menu visible
		  menuVisible = true; //Zodat bij een klik op de kaart het menu wordt weggehaald
		  clickedPixel = pixel;
		  var x=pixel.x;
		  var y=pixel.y;
		  if (x > map.getSize().width - 120) { x = map.getSize().width - 120 }
		  if (y > map.getSize().height - 100) { y = map.getSize().height - 100 }
		  var pos = new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(x,y));  
		  pos.apply(contextmenu);
		  contextmenu.style.visibility = "visible";
		});
	}
}
function mapClick(marker, point) {
	if (!menuVisible) {
		myClick(marker, point);
	}else{
		hideMenu();
		menuVisible = false;
	}
}
// === functions that perform the context menu options ===
function zoomIn() {
  // perform the requested operation
  map.zoomIn();
  // hide the context menu now that it has been used
  contextmenu.style.visibility="hidden";
}      
function zoomOut() {
  // perform the requested operation
  map.zoomOut();
  // hide the context menu now that it has been used
  contextmenu.style.visibility="hidden";
}      
function zoomInHere() {
  // perform the requested operation
  var point = map.fromContainerPixelToLatLng(clickedPixel)
  map.zoomIn(point,true);
  // hide the context menu now that it has been used
  contextmenu.style.visibility="hidden";
}      
function zoomOutHere() {
  // perform the requested operation
  var point = map.fromContainerPixelToLatLng(clickedPixel)
  map.setCenter(point,map.getZoom()-1); // There is no map.zoomOut() equivalent
  // hide the context menu now that it has been used
  contextmenu.style.visibility="hidden";
}      
function centreMapHere() {
  // perform the requested operation
  var point = map.fromContainerPixelToLatLng(clickedPixel)
  map.setCenter(point);
  // hide the context menu now that it has been used
  contextmenu.style.visibility="hidden";
}
// === If the user clicks on the map, close the context menu ===
/*GEvent.addListener(map, "click", function() {
  contextmenu.style.visibility="hidden";
});
*/
// === If the user clicks on the map, close the context menu ===
function hideMenu(){
  contextmenu.style.visibility="hidden";
};
//---------- GOOGLE MAPS FUNCTIES ----------------//

/**
 * Marker icon
 */
function tinyImage(opt_color, size, opt_preload){
  var color = opt_color||"red";
  var src_ = "pics/markers/"+size+"/mm_20_"+color+".png";
  if(opt_preload){
    var preImage = new Image();
    preImage.src = src_;
  }
  return  src_;
} 
function sailImage(opt_color, size, opt_preload ){
  var color = colors[(opt_color%number_colors)+1][0]||"red";
  var src_ = "pics/markers/"+size+"/sail_"+color+".png";
  if(opt_preload){
    var preImage = new Image();
    preImage.src = src_;
  }
  return  src_;
}
function markerImage(opt_color, opt_preload){
	var color = colors[opt_color][0]||"red";
  var src_ = "pics/markers/marker_"+color+".png";
  if(opt_preload){
    var preImage = new Image();
    preImage.src = src_;
  }
  return  src_;
}    
function tinyIcon(opt_color){
  var tiny = new GIcon();
  tiny.image = tinyImage(opt_color);
  tiny.shadow = "pics/markers/mm_20_shadow.png";
  tiny.iconSize = new GSize(12, 20);
  tiny.shadowSize = new GSize(22, 20);
  tiny.iconAnchor = new GPoint(6, 20);
  tiny.infoWindowAnchor = new GPoint(5, 1);
  tiny.imageMap = [4,0,0,4,0,7,3,11,4,19,7,19,8,11,11,7,11,4,7,0];
  tiny.transparent = "pics/markers/transparent.png"; 
  return tiny;
}
function sailIcon(opt_color, highlight){
  var tiny = new GIcon();
  tiny.image = sailImage(opt_color, 'normal');
  if(highlight == "1"){
  	tiny.shadow = "pics/markers/normal/sail_shadow_highlight.png";
  }else{
  	tiny.shadow = "pics/markers/normal/sail_shadow.png";
  }
  tiny.iconSize = new GSize(21, 30);
  tiny.shadowSize = new GSize(21, 30);
  tiny.iconAnchor = new GPoint(4, 19);
  tiny.infoWindowAnchor = new GPoint(4, 19);
  tiny.imageMap = [2,20,16,0,18,0,18,18,18,28];
  tiny.transparent = "pics/markers/normal/transparent.png"; 
  return tiny;
}
function sailIconSmall(opt_color, highlight){
  var tiny = new GIcon();
  tiny.image = sailImage(opt_color, 'small');
  if(highlight == "1"){
  	tiny.shadow = "pics/markers/small/sail_shadow_highlight.png";
  }else{
  	tiny.shadow = "pics/markers/small/sail_shadow.png";
  }
  var zoom = 5;
  var ratio = zoom / 100;
  tiny.iconSize = new GSize(10, 14);
  tiny.shadowSize = new GSize(10, 14);
  tiny.iconAnchor = new GPoint(3,9);
  tiny.infoWindowAnchor = new GPoint(3,9);
  tiny.imageMap = [1,10,8,0,9,0,9,9,9,14];
  tiny.transparent = "pics/markers/transparent.png"; 
  return tiny;
}
function sailIconSmallest(opt_color, highlight){
  var tiny = new GIcon();
  tiny.image = sailImage(opt_color, 'smallest');
  if(highlight == "1"){
  	tiny.shadow = "pics/markers/smallest/sail_shadow_highlight.png";
  }else{
  	tiny.shadow = "pics/markers/smallest/sail_shadow.png";
  }
  tiny.iconSize = new GSize(8, 10);
  tiny.shadowSize = new GSize(8, 10);
  tiny.iconAnchor = new GPoint(2, 6);
  tiny.infoWindowAnchor = new GPoint(2, 6);
  tiny.imageMap = [2,20,16,0,18,0,18,18,18,28];
  tiny.transparent = "pics/markers/transparent.png"; 
  return tiny;
}
function markerIcon(opt_color){
  var tiny = new GIcon();
  tiny.image = markerImage(opt_color, '');
  tiny.shadow = "pics/markers/marker_shadow.png";
  tiny.iconSize = new GSize(16, 31);
  tiny.shadowSize = new GSize(16, 31);
  tiny.iconAnchor = new GPoint(10, 17);
  tiny.infoWindowAnchor = new GPoint(10, 17);
  tiny.imageMap = [0,17,6,0,14,0,14,17];
  tiny.transparent = "pics/markers/transparent.png"; 
  return tiny;
}
function markerIconSmall(opt_color){
  var tiny = new GIcon();
  tiny.image = markerImage(opt_color, 'small');
  tiny.shadow = "pics/markers/small/marker_shadow.png";
  tiny.iconSize = new GSize(10, 20);
  tiny.shadowSize = new GSize(10, 20);
  tiny.iconAnchor = new GPoint(5, 13);
  tiny.infoWindowAnchor = new GPoint(5, 13);
  tiny.imageMap = [0,15,5,0,10,0,10,15];
  tiny.transparent = "pics/markers/transparent.png"; 
  return tiny;
}
function createMarker(point, title2,punaiseid, color, iconType, highlight) {
	if(iconType == "merkteken"){
		var marker = new GMarker(point,{title:title2, icon:markerIconSmall(color)});
		if(punaiseid > 0)
			GEvent.addListener(marker, "click", function(){LoadInfoWindow(marker,punaiseid,iconType)});
	}else{
		var marker = new GMarker(point,{title:title2, icon:sailIconSmall(color, highlight)});//fmod($counter,8)+1 8 is number of colors - 1 for markers
		GEvent.addListener(marker, "click", function(){LoadInfoWindow(marker,punaiseid,iconType)});
	}
	return marker;
}
function LoadAndPlotPositions(nummer,toDraw, useForce, sMessage, bFinished){
	if(!bFinished) bFinished = false;
	if(!sMessage) sMessage = false;
	if(!useForce) useForce = false;
	if(!positions_batch[nummer] || useForce){
		var the_url = "positions_xml.php?type=punaise&raceid="+raceid+"&rak="+rak+"&number="+nummer;
		if(toDraw == 'all'){
			the_url = the_url+"&all=true";
		}
		GDownloadUrl(the_url, function(data) {
			if(typeof changeStatus == 'function' && sMessage) { 
				changeStatus(sMessage);
			}
			var xml = GXml.parse(data);
		  //Posities voor iconen opslaan in array
			  var markers = xml.documentElement.getElementsByTagName("marker");
			  //Eventueel eerst de oude markers verwijderen
			  if(positions_batch[nummer]){
			  	RemovePositions(nummer);
			  	RemovePositionsOverlay(nummer);
			  }
			  //Array voor elke zoomlevel maken
			  positions_batch[nummer] = new Array(numLevels);
			  for (var i = 0; i < numLevels; i++) {
					positions_batch[nummer][i] = [];
				}
				//Over posities itereren en in array bij juiste zoomlevel zetten
			  for (var i = 0; i < markers.length; i++) {
			    var point = new GLatLng(parseFloat(markers[i].getAttribute("latitude")),
			                            parseFloat(markers[i].getAttribute("longitude")));	    
			    var titel = markers[i].getAttribute("titel");
			    var color = markers[i].getAttribute("number");
			    var zoomlevel = parseInt(markers[i].getAttribute("zoomlevel"));
			    if(toDraw == 'all' && zoomlevel <= 5){
			    	zoomlevel = zoomlevel+1;
			    	
			    }
			    var type = markers[i].getAttribute("type");
			    var punaiseid = markers[i].getAttribute("punaiseid");
			    var highlight = markers[i].getAttribute("merktekenid");
			    new_marker = createMarker(point, titel, punaiseid, color, type, highlight); //breedte, lengte, Titel, MarkerInfoWindow, kleurnummer, line_id, line_color, iconType, highlight
					positions_batch[nummer][zoomlevel].push(new_marker);
				if(i == 0){
					//Eerste positie voor zoomen opslaan
					 positions_zoom[nummer] = new_marker;
				}
			  }
			
		  //Overlays voor lijnen opslaan in array
			  var marker_encoded = xml.documentElement.getElementsByTagName("marker_encoded");
			  var my_points = new String();
			  var my_levels = new String();
			  numpoints_batch[nummer] = new Number();
			  //encodedPolyline = new GPolyline(Array(GLatLng(0,0),GLatLng(0,-1)));
			  for (var i = 0; i < marker_encoded.length; i++) {
				numpoints_batch[nummer] += parseInt(marker_encoded[i].getAttribute("numpoints"));
				my_points = marker_encoded[i].getAttribute("points");    
			    my_levels = marker_encoded[i].getAttribute("levels");    
			    var my_zoomFactor = marker_encoded[i].getAttribute("zoomFactor");    
			    var my_numLevels = marker_encoded[i].getAttribute("numLevels");    
			    var encodedPolyline = new GPolyline.fromEncoded({
			          color: colors[(nummer%number_colors)+1][1],
			          weight: 3,
			          points: my_points,
			          levels: my_levels,
			          zoomFactor: my_zoomFactor,
			          numLevels: my_numLevels
			        });
				  positions_overlays[nummer] = encodedPolyline;
				}
				
		 	if(toDraw == 'all'){
		 		toDraw = 'both';
	    }
			//Icoontjes tekenen
		  if(toDraw == 'icons' || toDraw == 'both' || toDraw == 'zoom'){
		  	for (var i = 0; i < numLevels; i++) {
		  		if(positions_batch[nummer][i].length > 0){
		  			mgr.addMarkers(positions_batch[nummer][i], i*3); //7 -> Nederland, Engeland en Duitsland op groot scherm
		  		}
		  	}
		  	mgr.refresh();
		  	if(toDraw == 'zoom'){
		  		ZoomOnPosition(nummer);
		  	}
		  }
		  //Lijnen tekenen
		  if((toDraw == 'lines' || toDraw == 'both')){
		  	map.addOverlay(positions_overlays[nummer]);
		  }
		  if(typeof changeStatus == 'function' && bFinished){
			  //Klaar -> Status updaten
			  changeStatus();
		  }
		});	
	}else{
		//Op nieuwe posities checken
		
		 //Icoontjes tekenen
		 if(toDraw == 'icons' || toDraw == 'both' || toDraw == 'zoom'){
	  	for (var i = 0; i < numLevels; i++) {
	  		if(positions_batch[nummer][i].length > 0){
	  			mgr.addMarkers(positions_batch[nummer][i], i*3); //7 -> Nederland, Engeland en Duitsland op groot scherm
	  		}
	  	}
		  mgr.refresh();
		  if(toDraw == 'zoom'){
		  	ZoomOnPosition(nummer);
		  }
	  }
	  //Lijnen tekenen
		if(toDraw == 'lines' || toDraw == 'both'){
	  	map.addOverlay(positions_overlays[nummer]);
	  }
	}
}
function UpdatePositions(nummer, toDraw, sMessage, bFinished){
	if(!bFinished) bFinished = false;
	if(!sMessage) sMessage = false;
	bUpdateNeeded = checkForNewPosition(nummer);
	if(bUpdateNeeded || bFinished){
		LoadAndPlotPositions(nummer,toDraw, true, sMessage, bFinished);
	}else if(typeof changeStatus == 'function' && bFinished){
		  //Klaar -> Status updaten
		  changeStatus();		
	}
}
function checkForNewPosition(nummer){
	bUpdateNeeded = false;
	iAlBekendePosities = numpoints_batch[nummer];
	//Controleren of er nieuwe posities zijn
	xmlhttp=GetXmlHttpObject();
	if(xmlhttp==null){
	  alert ("Browser does not support HTTP Request");
	  return false;
	}
	var the_url = "positions_xml.php?type=punaises_info&raceid="+raceid+"&rak="+rak+"&number="+nummer;
	xmlhttp.onreadystatechange=stateChanged;
	xmlhttp.open("GET",the_url,false);
	xmlhttp.send(null);
	if(xmlhttp.readyState == 4){
		XMLData = xmlhttp.responseText;
		var xml = GXml.parse(XMLData);
		//Posities voor iconen opslaan in array
		var info = xml.documentElement.getElementsByTagName("info");
		iBeschikbarePosities = 0;
		for (var i = 0; i < info.length; i++) {
			iBeschikbarePosities += parseInt(info[i].getAttribute("numpoints"));
		}
		if(iAlBekendePosities != iBeschikbarePosities){
			bUpdateNeeded = true;
		}
	}else{
		bUpdateNeeded = true;
	}
	return bUpdateNeeded;
}
function GetXmlHttpObject(){
	if (window.XMLHttpRequest){			
		// code for IE7+, Firefox, Chrome, Opera, Safari
		return new XMLHttpRequest();
	}
	if (window.ActiveXObject){
		// code for IE6, IE5
		return new ActiveXObject("Microsoft.XMLHTTP");
	}
	return null;
}
//function UpdatePositions(nummer, toDraw){
//	//Array maken om de nieuwste merktekens tijdelijk in op te slaan, zodat alleen deze geplot worden
//	updates_batch = new Array(numLevels);
//  for (var i = 0; i < numLevels; i++) {
//		updates_batch[i] = [];
//	}
//	if(positions_batch[nummer]){
//		var current_total = 0;
//		for (var i = 0; i < numLevels; i++) {
//  		current_total += positions_batch[nummer][i].length;
//  	}
//  	GDownloadUrl("positions_xml.php?type=punaise&raceid="+raceid+"&rak="+rak+"&number="+nummer, function(data) {
//			var xml = GXml.parse(data);
//		  //Posities voor iconen opslaan in array
//			  var markers = xml.documentElement.getElementsByTagName("marker");
//			  //Over posities itereren en in array bij juiste zoomlevel zetten
//			  for (var i = 0; i < markers.length; i++) {
//		    var point = new GLatLng(parseFloat(markers[i].getAttribute("latitude")),
//		                            parseFloat(markers[i].getAttribute("longitude")));	    
//		    var titel = markers[i].getAttribute("titel");
//		    var color = markers[i].getAttribute("number");
//		    var zoomlevel = markers[i].getAttribute("zoomlevel");
//		    var type = markers[i].getAttribute("type");
//		    var punaiseid = markers[i].getAttribute("punaiseid");
//		    var highlight = markers[i].getAttribute("merktekenid");
//		    new_marker = createMarker(point, titel, punaiseid, color, type, highlight); //breedte, lengte, Titel, MarkerInfoWindow, kleurnummer, line_id, line_color, iconType, highlight
//				positions_batch[nummer][zoomlevel].push(new_marker);
//				updates_batch[zoomlevel].push(new_marker)
//		  }
//		//Laatste positie voor zoomen opslaan
//		  positions_zoom[nummer] = new_marker;
//	  //Overlays voor lijnen opslaan in array
//		  var marker_encoded = xml.documentElement.getElementsByTagName("marker_encoded");
//		  var my_points = new String();
//		  var my_levels = new String();
//		  //encodedPolyline = new GPolyline(Array(GLatLng(0,0),GLatLng(0,-1)));
//		  for (var i = 0; i < marker_encoded.length; i++) {
//		  	my_points = marker_encoded[i].getAttribute("points");    
//		    my_levels = marker_encoded[i].getAttribute("levels");    
//		    var my_zoomFactor = marker_encoded[i].getAttribute("zoomFactor");    
//		    var my_numLevels = marker_encoded[i].getAttribute("numLevels");    			  
//			}
//			//Icoontjes tekenen (alleen nieuwste posities)
//		 	if(markers.length > 0 && (toDraw == 'icons' || toDraw == 'both' || toDraw == 'zoom')){
//		  	for (var i = 0; i < numLevels; i++) {
//		  		if(updates_batch[i].length > 0){
//		  			mgr.addMarkers(updates_batch[i], i*3); //7 -> Nederland, Engeland en Duitsland op groot scherm
//		  		}
//		  	}
//		  	mgr.refresh();
//		  }
//		  //Lijnen tekenen --- VOLGORDE VAN COMMANDOS BELANGRIJK!
//		  if(markers.length > 0){
//		  	if(toDraw == 'lines' || toDraw == 'both')
//		  		RemovePositionsOverlay(nummer); //Oude lijnen verwijderen
//		  		var encodedPolyline = new GPolyline.fromEncoded({
//          color: colors[(nummer%number_colors)+1][1],
//          weight: 3,
//          points: my_points,
//          levels: my_levels,
//          zoomFactor: my_zoomFactor,
//          numLevels: my_numLevels
//        });
//        //var polyline = new GPolyline(point,colors[(nummer%number_colors)+1][1], 2);
//        positions_overlays[nummer] = encodedPolyline;
//		  	if(toDraw == 'lines' || toDraw == 'both')
//		  		map.addOverlay(positions_overlays[nummer]);
//		  }
//		  if(toDraw == 'zoom'){
//	  		ZoomOnPosition(nummer);
//	  	}
//		});
//	}
//}
function RemovePositions(nummer){
	for (var i = 0; i < numLevels; i++) {
		for(marker in positions_batch[nummer][i]){
			mgr.removeMarker(positions_batch[nummer][i][marker]);
		}
	}
}
function RemovePositionsOverlay(nummer){
	map.removeOverlay(positions_overlays[nummer]);
}
function LoadInfoWindow(marker,the_id,iconType) {
	if(iconType == 'positie'){
		GDownloadUrl("positions_xml.php?type=punaise_info&punaiseid="+the_id, function(data) {
			var xml = GXml.parse(data);
		  var windows = xml.documentElement.getElementsByTagName("window");
		  for (var i = 0; i < windows.length; i++) {	  	
		  	var time = windows[i].getAttribute("time");
		  	var scheepsnaam = windows[i].getAttribute("scheepsnaam");
		  	var persoonsnaam = windows[i].getAttribute("persoonsnaam");
		  	var text_speed = windows[i].getAttribute("text_speed");
		  	var speed = windows[i].getAttribute("speed");
		  	var text_direction = windows[i].getAttribute("text_direction");
		  	var direction = windows[i].getAttribute("direction");
		  	var merktekennaam = windows[i].getAttribute("merktekennaam");
		  	var text_distance = windows[i].getAttribute("text_distance");
		  	var distance = windows[i].getAttribute("distance");
		  	var text_factor = windows[i].getAttribute("text_factor");
		  	var factor = windows[i].getAttribute("factor");
		  	var photo = windows[i].getAttribute("photo");
		  	var schipid = windows[i].getAttribute("schipid");
		  	var br = "<br>";
		  	//BASISINFORMATIE
		  	window_html = time + br + scheepsnaam + br + persoonsnaam + br + text_speed + ": " + speed + br + text_direction + ": " + direction;
		  	//MERKTEKENINFORMATIE
		  	if(merktekennaam && merktekennaam != ''){
		 			window_html = window_html + "<p>" + merktekennaam  + br+ text_distance + ": " + distance
		 			//FACTOR
		 			if(factor && factor != ''){
		 				window_html = window_html + br + text_factor + ": " + factor;
		  		}	  	
		  	}
		  	if(photo != ''){
		  		window_html = '<a href="" onClick="return openPunaises('+schipid+')"><img src="'+photo+'" border="0" \></a>' + "<p>" + window_html;
		  	}
		  	marker.openInfoWindowHtml('<div class = "google_map_info_window">' + window_html + '</div>');
			}
		});
	}else if(iconType == 'merkteken'){
		GDownloadUrl("positions_xml.php?type=marker_info&merktekenid="+the_id, function(data) {
			var xml = GXml.parse(data);
		  var windows = xml.documentElement.getElementsByTagName("window");
		  var window_html = '';
		  for (var i = 0; i < windows.length; i++) {	  	
		  	var placewithinleg = windows[i].getAttribute("placewithinleg");
		  	var markername = windows[i].getAttribute("name");
		  	var markertype = windows[i].getAttribute("markertype");
		  	var text_range = windows[i].getAttribute("text_range");
		  	var range = windows[i].getAttribute("range");
		  	var br = "<br>";
		  	//BASISINFORMATIE
		  	window_html = window_html + br + placewithinleg + ": " + markername + br + markertype + br + text_range + ": " + range + "nm";
		  	marker.openInfoWindowHtml('<div class = "google_map_info_window">' + window_html + '</div>');
			}
		});
	}
}
function openPunaises(schipid){
	the_url = "punaises.php?inline=yes"
	the_url=the_url+"&raceid="+raceid;
	the_url=the_url+"&rak="+rak;
	the_url=the_url+"&route="+route;
	the_url=the_url+"&schipid="+schipid;
	window.open(the_url,'_blank','width=1050, height=800,scrollbars=yes,toolbar=yes,resizable=yes');
	return false;
}
function LoadAndPlotMarkers(rak, my_route, toDraw){
	if(rak > 1){//Niet tegelijk merdere routes en rakken
		nummer = rak; 
	}else{
		nummer = my_route;
	}
	if(!markers_batch[nummer]){
		_url = "positions_xml.php?type=marker&raceid="+raceid+"&rak="+rak+"&route="+my_route;
		GDownloadUrl(_url, function(data) {
			var xml = GXml.parse(data);
		  var markers = xml.documentElement.getElementsByTagName("marker");
		  markers_batch[nummer] = [];
		  point = new Array(markers.length);
		  var bounds = new GLatLngBounds();
		  //Array voor elke zoomlevel maken
		  markers_batch[nummer] = new Array(numLevels);
		  for (var i = 0; i < numLevels; i++) {
				markers_batch[nummer][i] = [];
			}
		  for (var i = 0; i < markers.length; i++) {
		    point[i] = new GLatLng(parseFloat(markers[i].getAttribute("latitude")),
		                            parseFloat(markers[i].getAttribute("longitude")));	    
		    var titel = markers[i].getAttribute("titel");
		    var MarkerInfoWindow = titel;
		    var color = markers[i].getAttribute("color");
		    var type = markers[i].getAttribute("type");
		    var merktekenid = markers[i].getAttribute("merktekenid");
		   	var zoomlevel = markers[i].getAttribute("zoomlevel");
		   	new_marker = createMarker(point[i], titel, merktekenid, color, type, 0); //breedte, lengte, Titel, MarkerInfoWindow, kleurnummer, line_id, line_color, iconType, extendBounds (0||1)
				markers_batch[nummer][zoomlevel].push(new_marker);
				//BOUNDS uitbreiden (eventueel kieskeurig als een merkteken is gekozen)
				bounds.extend(point[i]);
		  }
		  if(markers.length > 1){
				map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds));
			}else{
				map.setCenter(bounds.getCenter(), 18);
			}		
		  //Lijnen opslaan
		  var polyline = new GPolyline(point,colors[color][1], 2);
			markers_overlays[nummer] = polyline;
			
			//Icoontjes tekenen
		  if(toDraw == 'icons' || toDraw == 'both'){
		  	for (var i = 0; i < numLevels; i++) {
		  		if(markers_batch[nummer][i].length > 0){
		  			mgr.addMarkers(markers_batch[nummer][i], i*3); //7 -> Nederland, Engeland en Duitsland op groot scherm
		  		}
		  	}
		  	mgr.refresh();
		  }
		  //Lijnen tekenen
		  if(toDraw == 'lines' || toDraw == 'both'){
				map.addOverlay(markers_overlays[nummer]);
			}
		});	
	}else{
		 //Icoontjes tekenen
		 if(toDraw == 'icons' || toDraw == 'both'){
	  	for (var i = 0; i < numLevels; i++) {
	  		if(markers_batch[nummer][i].length > 0){
	  			mgr.addMarkers(markers_batch[nummer][i], i*3); //7 -> Nederland, Engeland en Duitsland op groot scherm
	  		}
	  	}
		  mgr.refresh();
	  }
	  //Lijnen tekenen
		if(toDraw == 'lines' || toDraw == 'both'){
			map.addOverlay(markers_overlays[nummer]);
		}
	}
}
function RemoveMarkers(rak,my_route){
	if(route > 1){
		nummer = my_route;
	}else{
		nummer = rak;
	}
	for(marker in markers_batch[nummer]){
		mgr.removeMarker(markers_batch[nummer][marker]);
	}
}
function RemoveMarkerOverlay(my_route){
	map.removeOverlay(markers_overlays[my_route]);
}
function LoadAndPlotWaypoint(wp_id){
	_url = "positions_xml.php?type=waypoint&wp_id="+wp_id;
	GDownloadUrl(_url, function(data) {
		var xml = GXml.parse(data);
	  var markers = xml.documentElement.getElementsByTagName("marker");
	  
	  var bounds = new GLatLngBounds();
	  //Array voor elke zoomlevel maken
	  for (var i = 0; i < markers.length; i++) {
	    point = new GLatLng(parseFloat(markers[i].getAttribute("latitude")),
	                            parseFloat(markers[i].getAttribute("longitude")));	    
	    var naam = markers[i].getAttribute("naam");
	    var color = markers[i].getAttribute("color");
	    var type = markers[i].getAttribute("type");
	    new_marker = createMarker(point, naam, -1, color, type, 0); //breedte, lengte, Titel, MarkerInfoWindow, kleurnummer, line_id, line_color, iconType, extendBounds (0||1)
			//BOUNDS uitbreiden (eventueel kieskeurig als een merkteken is gekozen)
			bounds.extend(point);
	  }
	  if(markers.length > 1){
			map.setCenter(bounds.getCenter(), 7);
		}else{
			map.setCenter(bounds.getCenter(), 10);
		}		
	 	mgr.addMarker(new_marker,0); //7 -> Nederland, Engeland en Duitsland op groot scherm
	  mgr.refresh();
  });
}
function ZoomOnPosition(nummer){
	if(positions_batch[nummer]){
		var bounds = new GLatLngBounds();
		the_point = positions_zoom[nummer];
		point = the_point.getLatLng();
		bounds.extend(point);
		map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds)-5);
	}
	return false;
}
function ZoomOnMarker(lat,lng){
	var bounds = new GLatLngBounds();
	point = new GLatLng(lat,lng);
	bounds.extend(point);
	map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds)-5);
	return false;
}
function clearAll(){
	mgr.clearMarkers();
	map.clearOverlays();
}
//---------- EINDE GOOGLE MAPS FUNCTIES ----------------//

