
// Create our "tiny" marker icon
var icon = new GIcon();
icon.iconSize = new GSize(37, 36);
icon.shadowSize = new GSize(50, 31);
icon.iconAnchor = new GPoint(18, 26);
icon.infoWindowAnchor = new GPoint(18, 18);

var alticon = new GIcon();
alticon.iconSize = new GSize(26, 26);
alticon.shadowSize = new GSize(42, 26);
alticon.iconAnchor = new GPoint(12, 20);
alticon.infoWindowAnchor = new GPoint(12, 12);

/////////////////////////////////////

var map = null;
var tinymap = null;
var gdir;
var hasRefreshed = false;

function toggleGoogleMaps(lat, long) {
	var imageBlock = document.getElementById('imageBlock');
	if( imageBlock )
		if ( imageBlock.style.display == '' || imageBlock.style.display == 'block' )
			imageBlock.style.display = 'none';
		else
			imageBlock.style.display = 'block';

	var googlemaps = document.getElementById( 'googleMapsContainer');

	if( googlemaps )
		googlemaps.style.display = ( googlemaps.style.display == 'none' || googlemaps.style.display == '' ) ? 'block' : 'none';

	if(googlemaps.style.display == 'block' && !hasRefreshed) {
		initMap();
		addSingleMarker(lat, long);
		hasRefreshed = true;
	}

	return false;
}


function initMap() {

	if (GBrowserIsCompatible()) {

        map = new GMap2(document.getElementById('googleMapsContainer'));
		map.setCenter(new GLatLng(0, 0), 2, G_HYBRID_MAP);
        map.addControl(new GOverviewMapControl());

        map.enableDoubleClickZoom();
        map.enableContinuousZoom();

        // nivigatie
        map.addControl(new GLargeMapControl());

        // switch satteliet / straatmap
		map.addControl(new GMapTypeControl());

	}

}


function showNearestMarker(){

		// Clear maps

		if(typeof(map) != 'undefined'){
			map.clearOverlays();
		}

		// Get plaats

		var plaats = document.getElementById('google_plaats').value;
		plaats = plaats.toLowerCase();

		/*
		 *  Als nederland niet voorkomt in de string
		 *  voeg deze dan toe.
		 */

		if(plaats.indexOf("nederland") == -1){
			plaats = plaats + ',Nederland';
		}

		// Verkrijg coordination

		var geocoder = new GClientGeocoder();

		if (geocoder) {
    			geocoder.getLatLng(plaats,
    			function(point) {

    				if(!point){
    					alert('Uw locatie kon niet worden berekend !');
    					loadXml('/nl/hoofdmenu/store-locater/getcoordinates');

    				}

    				else{
   						// Load xml
   						loadXml('/nl/hoofdmenu/store-locater/getcoordinates?lat=' + point.lat() + '&lng=' + point.lng());

    				} // Else

	   		  }); // Function

	   } // If

} // showNearestMarker


function clearDir(){

	// Clear directions

	if(typeof(gdir) != 'undefined'){
		gdir.clear();
	}

}


function initTinyMap(mapid,lat,lng,draggable, fld1,fld2,fld3, zoom) {
	if (GBrowserIsCompatible()) {

        var point = new GLatLng(parseFloat(lat),
	                            parseFloat(lng));

        tinymap = new GMap2(document.getElementById(mapid));
        tinymap.setCenter(point, zoom, G_HYBRID_MAP);
        tinymap.addControl(new GOverviewMapControl());

        tinymap.enableDoubleClickZoom();
        tinymap.enableContinuousZoom();

        // nivigatie
        tinymap.addControl(new GLargeMapControl());

        // switch satteliet / straatmap
		tinymap.addControl(new GMapTypeControl());

		if (draggable) {

			var tmpMarker = new GMarker(point,{
				    	draggable: true,
				    	title: 'locatie op kaart'
				    });

			GEvent.addListener(tmpMarker, "dragstart", function() {tinymap.closeInfoWindow();});
			GEvent.addListener(tmpMarker, "dragend", function() {
             point = tmpMarker.getPoint();
             $(fld1).value = '200';
             $(fld2).value = point.y;
             $(fld3).value = point.x;
               });

		} else {

			 var tmpMarker = new GMarker(point,{
				    	title: 'locatie op kaart'
				    });

		}

		tinymap.addOverlay(tmpMarker);

	}
}

function addSingleMarker(lat, lng) {
	var point = new GLatLng(parseFloat(lat), parseFloat(lng));
	var bounds = new GLatLngBounds;

	bounds.extend(point);
	map.addOverlay(new GMarker(point));

	map.setCenter(bounds.getCenter(), zoom);
}

function loadXml(url, lat, lng, zoom) {
		var lat = lat; var lng = lng; var zoom = zoom;
		GDownloadUrl(url, function(data, responseCode) {
		  var xml = GXml.parse(data);
		  var markers = xml.documentElement.getElementsByTagName("locatie");

		  var bounds = new GLatLngBounds;


		  for (var i = 0; i < markers.length; i++) {

		    var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")),
		                            parseFloat(markers[i].getAttribute("lng")));

		    bounds.extend(point);

		    var tmpMarker = new GMarker(point,{
		    	title: markers[i].getAttribute("title")
		    });

		    tmpMarker.htmlInfo = GXml.value(markers[i]);


		 		GEvent.bind(tmpMarker, "click", tmpMarker, function() {

				    		this.openInfoWindowHtml(this.htmlInfo);
			    });

		    map.addOverlay(tmpMarker);

		  }

		  if (zoom != undefined)
			map.setCenter(new GLatLng(lat, lng), zoom);
		  else {
			var zm = map.getBoundsZoomLevel(bounds);
			if (zm>10) zm = 10;

			map.setCenter(bounds.getCenter(), zm);
		  }

		});

   }


function doMapGeoCode(mapid,address, fld1,fld2,fld3) {

	var geocoder = new GClientGeocoder();

	var match = /^http.*ll\=([^&]+)&/i.exec(address);
	if(match) {
		address = match[1];
	}

	if (geocoder) {
        geocoder.getLatLng(
          address,
          function(point) {
            if (!point) {
              alert("Locatie niet gevonden");
            } else {

			  tinymap.setCenter(point, 16);
				tinymap.clearOverlays();

				initTinyMap(mapid,point.lat(),point.lng(), true, fld1,fld2,fld3, 14);

				$(fld1).value = '200';
				$(fld2).value = point.lat();
                $(fld3).value = point.lng();
            }
          }
        );
      }

}

function doGeoCode(address) {

	var geocoder = new GClientGeocoder();

	if (geocoder) {
        geocoder.getLatLng(
          address,
          function(point) {
            if (!point) {
              alert(address + " niet gevonden");
            } else {

			  tinymap.setCenter(point, 16);
			  tinymap.clearOverlays();

				initTinyMap(point.lat(),point.lng(),true);

				$('fldlatitude').value = point.lat();
                $('fldlongitude').value = point.lng();

            }
          }
        );
      }

}

function changeOverlays(xmlUrl) {
	if (GBrowserIsCompatible()) {

		map.clearOverlays();

		var bounds = new GLatLngBounds;

		GDownloadUrl(xmlUrl, function(data, responseCode) {
		  //alert(data);
		  var xml = GXml.parse(data);
		  var markers = xml.documentElement.getElementsByTagName("marker");
		  for (var i = 0; i < markers.length; i++) {

		    // GLog.write("New marker: " +markers[i].getAttribute("title"),"black");

		    var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")),
		                            parseFloat(markers[i].getAttribute("lng")));

		    bounds.extend(point);

		    if (markers[i].getAttribute('alticon')) {
		    	alticon.image = "/images/kaart/" + markers[i].getAttribute('alticon');
		    	var tmpMarker = new GMarker(point,{
			    	icon:  alticon,
			    	title: markers[i].getAttribute("title")
			    });
		    } else {
			    var tmpMarker = new GMarker(point,{
			    	icon:  icon,
			    	title: markers[i].getAttribute("title")
			    });
			}

		    tmpMarker.htmlInfo = GXml.value(markers[i]);

		    GEvent.bind(tmpMarker, "click", tmpMarker, function() {
		    		this.openInfoWindowHtml(this.htmlInfo);
		    	}
			);

		    map.addOverlay(tmpMarker);

		  }

		  map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds));
		  //map.setZoom(map.getBoundsZoomLevel(bounds));

		});

		return false;

	}
}

 function handleErrors(){
 		alert("De route kon niet worden berekend. Voer uw adres volledig in. (foutcode: " + gdir.getStatus().code+")");
}

function direct(adres,toadres) {
	directionsPanel = document.getElementById("routeBeschrijving");
	directionsPanel.innerHTML = '';

	clearDir();

	gdir = new GDirections(map,directionsPanel);
    GEvent.addListener(gdir, "error", handleErrors);
	GEvent.addListener(gdir, "addoverlay", adjustScroller);
	gdir.load('from: ' + adres + ', NL to: ' + toadres);
}

function zoomMapTo(lat,longitude,lvl) {
    map.setCenter(new GLatLng(lat, longitude), lvl);
}

function panMapTo(lat,longitude) {
	map.panTo(new GLatLng(lat,longitude));
}

function toonUrl(htmlUrl) {
    window.frames['searchresults'].location = htmlUrl;
	return false;
}


