
// 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;

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-locator/getcoordinates');

    				}

    				else{
   						// Load xml
   						loadXml('/nl/hoofdmenu/store-locator/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) {
	if (GBrowserIsCompatible()) {

        var point = new GLatLng(parseFloat(lat),
                           parseFloat(lng));

        tinymap = new GMap2(document.getElementById(mapid));
        tinymap.setCenter(point, 10, 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 loadXml(url) {

		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")));
		    if ( parseInt(markers[i].getAttribute("inBounds")) == 1 )
		    	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);

		  }

		  var zoom = map.getBoundsZoomLevel(bounds);
		  if (zoom>10) zoom = 10;

		  map.setCenter(bounds.getCenter(), zoom);

		});

   }


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(address + " niet gevonden");
            } else {

			  tinymap.setCenter(point, 16);
				tinymap.clearOverlays();

				initTinyMap(mapid,point.lat(),point.lng(),true, fld1,fld2,fld3);


				$(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;
}


