﻿var map;
var positions = [];


function loadShoplocator() {
  if (GBrowserIsCompatible()) {
    map = new GMap2(document.getElementById("map"));
    map.addControl(new GMapTypeControl());
    map.addControl(new GLargeMapControl());
    // map.addControl(new GOverviewMapControl());
    map.setCenter(new GLatLng(53.183536, 6.16963), 14);
    map.enableDoubleClickZoom();
    map.enableScrollWheelZoom();
    //mgr = new MarkerManager(map, {trackMarkers:true});
    //window.setTimeout(setupOfficeMarkers, 0);
    loadMarkers();
    if (positions.length > 0)
    {
      //centerMap();
    }
  }
}

function loadMarkers(){
  mgr = new MarkerManager(map);
  mgr.addMarkers(getBigMarkers(), 16);
  mgr.addMarkers(getNormalMarkers(), 13, 15);
  mgr.addMarkers(getSmallMarkers(), 8,12);
  //6 = 7
  mgr.addMarkers(getSuperSmallMarkers(), 5,7);
  //mgr.addMarkers(getStipMarkers(),5);
  //mgr.addMarkers(getEnkelStipMarker(),1);
  mgr.refresh();
}

function getBigMarkers(){
  var batch = [];
  for (i=0;i<positions.length;i++) {
    var Icon = new GIcon();
    Icon.iconSize = new GSize(11, 11);
    Icon.iconAnchor = new GPoint(8, 8);
    Icon.infoWindowAnchor = new GPoint(8, 8);
    Icon.image = positions[i].image;
    var Marker = new GMarker(new GLatLng(positions[i].lon,positions[i].lat), Icon);
    Marker.bindInfoWindowHtml("<div><div><h2>" + positions[i].naam + "</h2><p>" + positions[i].adres + ", " + positions[i].postcode + ", " + positions[i].plaats + ".<br /></p></div><div style='width:120px;float:left'>" + positions[i].logo + "</div><div style='float:left;'><a href='javascript:zetEindbestemming(\"" + positions[i].lon + "," + positions[i].lat + "\",\"" + positions[i].naam + "\");'>Stel in als eindbestemming</a></div></div>");
    batch.push(Marker);
  }
  return batch;
}

function getNormalMarkers(){
  var batch = [];
  for (i=0;i<positions.length;i++) {
    var Icon = new GIcon();
    Icon.iconSize = new GSize(11, 11);
    Icon.iconAnchor = new GPoint(6, 6);
    Icon.infoWindowAnchor = new GPoint(6, 6);
    Icon.image = positions[i].image;
    var Marker = new GMarker(new GLatLng(positions[i].lon,positions[i].lat), Icon);

    Marker.bindInfoWindowHtml("<div><div><h2>" + positions[i].naam + "</h2><p>" + positions[i].adres + ", " + positions[i].postcode + ", " + positions[i].plaats + ".<br /></p></div><div style='width:120px;float:left'>" + positions[i].logo + "</div><div style='float:left;'><a href='javascript:zetEindbestemming(\"" + positions[i].lon + "," + positions[i].lat + "\",\"" + positions[i].naam + "\");'>Stel in als eindbestemming</a></div></div>");
    batch.push(Marker);
  }
  return batch;
}

function zetEindbestemming(strLonglat, strNaam){
    document.getElementById("tbx_route_van").value = strLonglat;
    document.getElementById("route_bestemming").value = strNaam;

}

function getSmallMarkers(){
  var batch = [];
  for (i=0;i<positions.length;i++) {
    var Icon = new GIcon();
    Icon.iconSize = new GSize(7, 7);
    Icon.iconAnchor = new GPoint(4, 4);
    Icon.infoWindowAnchor = new GPoint(4, 4);
    Icon.image = positions[i].image;
    batch.push(createZoomMarker(i, 14, Icon));
    
  }
  return batch;
}

function createZoomMarker(i, zoomlevel, Icon)
{
  var latLng = new GLatLng(positions[i].lon,positions[i].lat);
  var Marker = new GMarker(latLng, Icon);
  GEvent.addListener(Marker, "click", function(){map.setCenter(latLng, zoomlevel);});
  return Marker
}

function getSuperSmallMarkers(){
  var batch = [];
  for (i=0;i<positions.length;i++) {
    var Icon = new GIcon();
    Icon.iconSize = new GSize(7, 7);
    Icon.iconAnchor = new GPoint(4, 4);
    Icon.infoWindowAnchor = new GPoint(4, 4);
    Icon.image = positions[i].image;
    batch.push(createZoomMarker(i, 14, Icon));
  }
  return batch;
}


centerMap = function() {
	/* if an infoWindow is open, do not center map (return / do nothing) */
	var iW = map.getInfoWindow();	
	if(iW.getContentContainers().length > 0 && !iW.isHidden())
		return;
	for(var i in positions) {
		var this_lat = positions[i].lon || null;
		var this_lng = positions[i].lat || null;
		if(
			(this_lat && !isNaN(this_lat)) && 
			(this_lng && !isNaN(this_lng))
		) {
			var minLat = minLat || this_lat;
			var maxLat = maxLat || this_lat;
			var minLng = minLng || this_lng;
			var maxLng = maxLng || this_lng;
			
			//get min and max markers and save in variables
			minLat = Math.min(minLat, this_lat);
			maxLat = Math.max(maxLat, this_lat);
			minLng = Math.min(minLng, this_lng);
			maxLng = Math.max(maxLng, this_lng);						
		}
	}
	//avg of the coordinates
	var centerLat = minLat + ((maxLat - minLat) / 2);
	var centerLng = minLng + ((maxLng - minLng) / 2);
	//what's the distance of our coordinates? (in kilometers)	
	var dist = (6371 * 
					Math.acos(
						Math.sin(minLat / 57.2958) *						 						
						Math.sin(maxLat / 57.2958) + (
							Math.cos(minLat / 57.2958) * 
							Math.cos(maxLat / 57.2958) * 
							Math.cos(maxLng / 57.2958 - minLng / 57.2958)	
						)
					)					
				);
	//default zoom level
	var zoomLvl = 10;
	//determine the zoom level out of the calculated distance
	if(dist < 24576)
		zoomLvl = 1; 			
	if(dist < 12288)
		zoomLvl = 2; 			
	if(dist < 6144)
		zoomLvl = 3; 			
	if(dist < 3072)
		zoomLvl = 4;			
	if(dist < 1536)
		zoomLvl = 5; 
	if(dist < 768)
		zoomLvl = 6;		
	if(dist < 384)
		zoomLvl = 7;
	if(dist < 192)
		zoomLvl = 8;
	if(dist < 96)
		zoomLvl = 9;		
	if(dist < 48)
		zoomLvl = 10;	
	if(dist < 24)    
		zoomLvl = 11;
	if(dist < 11)    
		zoomLvl = 12;
	if(dist < 4.8)    
		zoomLvl = 13;
	if(dist < 3.2)    
		zoomLvl = 14;		
	if(dist < 1.6)    
		zoomLvl = 15;		
	if(dist < 0.8)
		zoomLvl = 16;		
	if(dist < 0.3)
		zoomLvl = 17;
				
	//center map and set zoomLvl
	var point = new GLatLng(centerLat+(dist/2500), centerLng);
	map.setCenter(point, zoomLvl);
};