/*
 * (c) 2009 Webclusive - Loek van Gent
 *
 *
 *
 */

(function($){
	$.fn.googleMap = function(options) {
		var opts = $.extend({}, $.fn.googleMap.defaults, options);

        opts.tinyMarker = new GIcon();
        
        // Laadt het icoontje
        var iconImage = new Image();
        iconImage.src = opts.iconImage;
        opts.tinyMarker.image = opts.iconImage;
        
        opts.tinyMarker.iconSize = new GSize(iconImage.width, iconImage.height);
        opts.tinyMarker.iconAnchor = new GPoint(6, 10);
        opts.tinyMarker.infoWindowAnchor = new GPoint(5, 1);
        
        var marker = null;
        	
		/* laad een google map met settings */
	    if (GBrowserIsCompatible()) {
	            /* Map wordt geladen in element met id gmap */
	    		var id = $(this).attr('id');
	    		if (!id) {
	    			$(this).attr('id', 'gmapId');
	    			id = 'gmapId';
	    		}
    			var gmap = new GMap2(document.getElementById(id));

	    		gmap.setCenter(new GLatLng(opts.center[0], opts.center[1]), opts.zoom);

	    		/* Toon wat controls */ 
	    		gmap.addControl(new GSmallZoomControl(), new GControlPosition(G_ANCHOR_BOTTOM_LEFT, new GSize(5,5)));
	    		gmap.addControl(new GMapTypeControl(), new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(5,5)));
	    		
	    		// LET OP! Overview zorgt ervoor dat het mis gaat met Ajax!!
	    		// gmap.addControl(new GOverviewMapControl(), new GControlPosition(G_ANCHOR_BOTTOM_RIGHT, new GSize(5,5)));
	            
	            // Gebruik ook de fysische kaart 
	    		gmap.addMapType(G_PHYSICAL_MAP);

	    		// Zet het maptype
	    		gmap.setMapType($.fn.googleMap.GetMapType(opts.mapType));
	            
	            /* Enable ook de muis */
	    		gmap.enableDoubleClickZoom();
	    		gmap.enableScrollWheelZoom();

	    		
	    }
	    
	    if (opts.url) {
	    	$.getJSON(opts.url, function(points){
	    		$.each(points, function(i, item){
	    			plotPoint(item.latitude, item.longitude, item.content);
	    		});
	    	}); 
	    }
	    
	    if (opts.onClick) {
	        GEvent.addListener(gmap, "click", function(overlay,point) {
	            if (overlay) {
	                gmap.removeOverlay(overlay);
	            }
	            if (point) {
	            	if (marker) gmap.removeOverlay(marker);
	            	var overlay = addPoint(point.y, point.x);
	                opts.onClick(point.y, point.x);
	            }
	        });
	    	
	    }	
		
	    // Plaats een punt op de kaart
	    var plotPoint = function(latitude, longitude, content) {
			var point = new GLatLng(latitude,  longitude);
			var marker = new GMarker(point, opts.tinyMarker);

			if (content) {
				GEvent.addListener(marker,'click',function(){
		            marker.openInfoWindowHtml(content);
		        });
			}
	        gmap.addOverlay(marker);
			
		};

		// Plaats een punt op de kaart en wis het laatst
		// geplaatse punt
	    var addPoint = function(latitude, longitude, content) {
			var point = new GLatLng(latitude,  longitude);
			marker = new GMarker(point, opts.tinyMarker);
	        gmap.addOverlay(marker);
			
		};
		
		
	};
	
	$.fn.googleMap.GetMapType = function (mapType) {
		switch(mapType) {
			case 'terrain':	//Hybrid Map
				mapType = G_PHYSICAL_MAP;
			break;
			case 'satellite':	// Satallite Imagery
				mapType = G_SATELLITE_MAP;
			break;
			case 'hybrid':	//Hybrid Map
				mapType = G_HYBRID_MAP;
			break;
			case 'map':	// Normal Map
				mapType = G_NORMAL_MAP;
			break;
		};
		return mapType;
	};
	
	$.fn.googleMap.defaults = {
		center  : [52, 5],
		zoom: 7,
		url: null,
		onClick: null,
		mapType: 'terrain',
		iconImage: '/images/icons/pointer.png'
	};

})(jQuery);


