﻿var map;
var positions = [];


function loadShoplocator() {
  if (GBrowserIsCompatible()) {
    map = new GMap2(document.getElementById("googlemap"));
    map.addControl(new GMapTypeControl());
    map.addControl(new GLargeMapControl());
    // map.addControl(new GOverviewMapControl());
    map.setCenter(new GLatLng(52.25, 5.30), 7);
    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(), 10);
  mgr.addMarkers(getNormalMarkers(), 9, 9);
  mgr.addMarkers(getSmallMarkers(), 8,8);
  //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++) {
    batch.push(createMarkerIsis(i));
  }
  return batch;
}

function getNormalMarkers(){
  var batch = [];
  for (i=0;i<positions.length;i++) {
    
    batch.push(createMarkerIsisNormal(i));
  }
  return batch;
}

function getSmallMarkers(){
  var batch = [];
  for (i=0;i<positions.length;i++) {
    
    batch.push(createMarkerIsisSmall(i));
  }
  return batch;
}


function createMarkerIsis(i){
    var Icon = new GIcon();
    Icon.iconSize = new GSize(30, 30);
    Icon.iconAnchor = new GPoint(6, 35);
    Icon.infoWindowAnchor = new GPoint(6, 35);
    Icon.image = "/interface/images/googlemap/ziengs_groot.gif";
    var Marker = new GMarker(new GLatLng(positions[i].lon,positions[i].lat), Icon);
    var idAdres =  positions[i].klik;
        //Marker.bindInfoWindowHtml("<div class='shop_overzicht'><h2>" + positions[i].naam + "</h2><p>" + positions[i].text + positions[i].klik +".</p></div>");
    GEvent.addListener(Marker, "click", function(){showAdres(idAdres);});
    return(Marker);
}

function createMarkerIsisNormal(i){
    var Icon = new GIcon();
    Icon.iconSize = new GSize(25, 25);
    Icon.iconAnchor = new GPoint(5, 29);
    Icon.infoWindowAnchor = new GPoint(5, 29);
    Icon.image = "/interface/images/googlemap/ziengs.gif";
    var Marker = new GMarker(new GLatLng(positions[i].lon,positions[i].lat), Icon);
    var idAdres =  positions[i].klik;
    //Marker.bindInfoWindowHtml("<div class='shop_overzicht'><h2>" + positions[i].naam + "</h2><p>" + positions[i].text + ".</p></div>");
    GEvent.addListener(Marker, "click", function(){showAdres(idAdres);});
    return(Marker);
}

function createMarkerIsisSmall(i){
    var Icon = new GIcon();
    Icon.iconSize = new GSize(20, 20);
    Icon.iconAnchor = new GPoint(4, 24);
    Icon.infoWindowAnchor = new GPoint(4, 24);
    Icon.image = "/interface/images/googlemap/ziengs_klein.gif";
    var Marker = new GMarker(new GLatLng(positions[i].lon,positions[i].lat), Icon);
    var idAdres =  positions[i].klik;
        //Marker.bindInfoWindowHtml("<div class='shop_overzicht'><h2>" + positions[i].naam + "</h2><p>" + positions[i].text + positions[i].klik +".</p></div>");
    GEvent.addListener(Marker, "click", function(){showAdres(idAdres);});
    return(Marker);
}



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(9, 9);
    Icon.iconAnchor = new GPoint(5, 5);
    Icon.infoWindowAnchor = new GPoint(5, 5);
    Icon.image = "/interface/images/googlemap/ziengs_stip.gif";
    batch.push(createZoomMarker(i, 12, 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);
};	


function haalDichtsBijZijnde(pc){
  var puntenPc = pc.split('~');
  var kms =new Array();
  var punten =new Array();
  
  if (positions.length > 0){
    for(i=0;i<positions.length; i++){
      kms[i] = calculateDistance(puntenPc, positions[i]);
    }
  }
  
  var kilometers = 3000;
  var id;
  
  for(i=0;i<kms.length; i++){
   if(parseFloat(kilometers) > parseFloat(kms[i])){
     kilometers = kms[i];
     id = i;
   }  
  }
  
  
  
  if(id != NaN){
    var latLng = new GLatLng(positions[id].lon,positions[id].lat);
    map.setCenter(latLng, 12);
    showAdres('adres_' + id);
  }
  
}


function getGeoCode(pc){
var place =  pc + " NL";
var punten = '';
geocoder = new GClientGeocoder();
geocoder.getLatLng(place, function(point) {
if (!point) {
  alert(place + " postcode niet gevonden!");
} else {
  //var info = "<h3>"+place+"</h3>Latitude: "+point.y+"  Longitude:"+point.x;
  //var marker = new GMarker(point);
  //map.addOverlay(marker);
  //marker.openInfoWindowHtml(info);
  //alert(point.x + ' - ' + point.y);
  punten = (point.x + '~' + point.y);
  haalDichtsBijZijnde(punten);
}
});
}

function calculateDistance(punt, positie)
{
  try
  {
    var glatlng1 = new GLatLng(punt[0], punt[1]);
    var glatlng2 = new GLatLng(positie.lat, positie.lon);
    var miledistance = glatlng1.distanceFrom(glatlng2, 3959).toFixed(1);
    var kmdistance = (miledistance * 1.609344).toFixed(1);
      return kmdistance;
  }
  catch (error)
  {
    alert(error);
  }
}

