var Map;
var MapAction = 'View';
var MapModel = 'Search';
var MapAccommodationSource;

var MapControlOptions;
var MapOptions;
var MapZoomControlOptions;
var MapLatitude = null;
var MapLongitude = null;
var MapZoomlevel = null;
var MapZoomlevelDefault = 6;

var MapMarkerIcon = null;
var MarkerCluster = null;
var Markers = [];

function InitMap() {
	if( MapLatitude == null
		|| MapLongitude == null
		|| MapZoomlevel == null ) {
		alert( 'Locatie voor kaart niet ingevoerd.');
	}
	
	// set map center
	var MapCenter = new google.maps.LatLng(MapLatitude, MapLongitude);
    
	if( MapModel == 'Search' ) {		
		// set control options
	    MapControlOptions = {
	    	mapTypeIds: [google.maps.MapTypeId.ROADMAP, 
	    	             //google.maps.MapTypeId.HYBRID, 
	    	             google.maps.MapTypeId.SATELLITE 
	    	             //google.maps.MapTypeId.TERRAIN
	    	             ],
	    	style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR
	    	//position: google.maps.ControlPosition.LEFT_TOP DROPDOWN_MENU
	    };
	    
		// set scale options
	    MapZoomControlOptions = {
	    	style: google.maps.ZoomControlStyle.SMALL
	    };
	    
	    // set map options
	    MapOptions = {
			zoom: MapZoomlevel,
			center: MapCenter,
			mapTypeId: google.maps.MapTypeId.ROADMAP,
			mapTypeControlOptions: MapControlOptions,
			zoomControlOptions: MapZoomControlOptions,
			scrollwheel: true,
			streetViewControl: false,
			minZoom: 3 // bij uitzoomen wordt zoomlevel lager 
			, maxZoom: 15			
	    };

	} else if( MapModel == 'Product' ) {		
		// set control options
	    MapControlOptions = {
	    	mapTypeIds: [google.maps.MapTypeId.ROADMAP, 
	    	             //google.maps.MapTypeId.HYBRID, 
	    	             google.maps.MapTypeId.SATELLITE 
	    	             //google.maps.MapTypeId.TERRAIN
	    	             ],
	    	style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR
	    	//position: google.maps.ControlPosition.LEFT_TOP DROPDOWN_MENU
	    };
	    
		// set scale options
	    MapZoomControlOptions = {
	    	style: google.maps.ZoomControlStyle.SMALL
	    };
	    
	    // set map options
	    var MaxZoom = 20;
	    if( MapAccommodationSource == 1 ) {
	    	// max zoom novasol
	    	MaxZoom = 10;
	    }
	    MapOptions = {
			zoom: MapZoomlevel,
			center: MapCenter,
			mapTypeId: google.maps.MapTypeId.ROADMAP,
			mapTypeControlOptions: MapControlOptions,
			zoomControlOptions: MapZoomControlOptions,
			scrollwheel: true,
			streetViewControl: false,
			minZoom: 3
			, maxZoom: MaxZoom
	    };
	}    
	// Create default Marker Icon
    MapMarkerIcon = CreateMarkerIcon( 'Default' );
}

function MapChangeCenter( LatLng ) {
	Map.panTo( LatLng );
}

function MapMoveToCenter() {
	var LatLng = new google.maps.LatLng(MapLatitude, MapLongitude);
	Map.panTo( LatLng );
}

function DisplayMap() {
    Map = new google.maps.Map(document.getElementById("map_canvas"),
    		MapOptions);
    
    if( MapModel == 'Search' ) {
    	MapAddEvents();
	}    
}

function MapAddEvents() {
	google.maps.event.addListener(Map, 'click', function(event) {
		if( MapAction == 'CircleAdd' ) {
			ChangeMapState( 'Circle', event.latLng );
		} else if( MapAction == 'CircleEdit' ) {
			ChangeMapState( 'Circle', event.latLng );
		}		
	});

    var input = document.getElementById('searchTextField');
    var autocomplete = new google.maps.places.Autocomplete(input);

	google.maps.event.addListener(autocomplete, 'place_changed', function() {
		var place = autocomplete.getPlace();
		ChangeMapState( 'Keyword', place.geometry.location );
	});
    //autocomplete.bindTo('bounds', Map);	     
}

function DisplayMarkers() {
	var zoom = 8;//10
	var size = 20;//30

	MarkerCluster = new MarkerClusterer(Map, Markers, {
	  maxZoom: zoom,
	  gridSize: size
	});	
}

function ResetMarkers() {
	if( MarkerCluster != null ) {
		MarkerCluster.clearMarkers();
		MarkerCluster = null;
		Markers = [];
	}	
}

function ZoomToDefault() {
	if( Map.getZoom() != MapZoomlevelDefault ) {
		Map.setZoom( MapZoomlevelDefault );
	}
}
