var zoom = 16; //hoger is dichterbij
var MapTypeId = 'TERRAIN'; // ROADMAP | SATELLITE | HYBRID | TERRAIN 
var address = "Kooikersweg 7a, Grave, Nederland";
var country = "Nederland";
var title = "Computersystemen de Mars";
var content = "<strong>Computersystemen de Mars</strong><br />Kooikersweg 7a<br />5361 VA Grave<br />Nederland";
var infoWidth = '200';
var image = "/googlemaps/googleflag.png";
var shadow = "/googlemaps/googleflag_shadow.png";
var alternativeRoutes = true;
var disableDefaultUI = false; //true voor verdwijnen van alle controls
var navigationControl = true; //false voor verdwijnen van navigatie controls
var mapTypeControl = true; //false voor verdwijnen van maptype knoppen
var scaleControl = false; //false voor verdwijnen van scale indicator
var NavigationControlStyle = 'SMALL'; // SMALL | ZOOM_PAN | ANDROID | DEFAULT
var ControlPosition = 'TOP_LEFT'; // TOP_CENTER | TOP_LEFT | TOP_RIGHT | LEFT_TOP | RIGHT_TOP | LEFT_CENTER | RIGHT_CENTER | LEFT_BOTTOM | RIGHT_BOTTOM | BOTTOM_CENTER | BOTTOM_LEFT | BOTTOM_RIGHT
var MapTypeControlStyle = 'DROPDOWN_MENU'; // HORIZONTAL_BAR | DROPDOWN_MENU | DEFAULT
var MapTypeControlPosition = 'TOP_RIGHT'; // TOP_CENTER | TOP_LEFT | TOP_RIGHT | LEFT_TOP | RIGHT_TOP | LEFT_CENTER | RIGHT_CENTER | LEFT_BOTTOM | RIGHT_BOTTOM | BOTTOM_CENTER | BOTTOM_LEFT | BOTTOM_RIGHT
var ScaleControlPosition = 'BOTTOM_LEFT'; // TOP_CENTER | TOP_LEFT | TOP_RIGHT | LEFT_TOP | RIGHT_TOP | LEFT_CENTER | RIGHT_CENTER | LEFT_BOTTOM | RIGHT_BOTTOM | BOTTOM_CENTER | BOTTOM_LEFT | BOTTOM_RIGHT
var center = new google.maps.LatLng(52.132633, 5.291266); //Nederland

var DirectionsTravelMode = 'DRIVING'; // DRIVING | WALKING | BICYCLING
var DirectionsUnitSystem = 'METRIC'; // METRIC | IMPERIAL
var avoidHighways = false; //true voor snelwegen vermeiden
var avoidTolls = false; //true voor tolwegen vermeiden
var draggable = true; //true voor verslepen van route

var directionDisplay;
var directionsService;
var geocoder;
var map;
var markerArray = [];
var stepDisplay;

$(document).ready(function(){
	if($("#googlemaps_container").length > 0){
		initialize();
	}
	$("#googlemaps_calc").unbind('click');
	$("#googlemaps_calc").click(function(){
		var googlemaps_from = $("#googlemaps_from").val() + ', '+country;
		var googlemaps_to = address;
		getDirections(googlemaps_from, googlemaps_to);
	});
});


function initialize() {
	directionsService = new google.maps.DirectionsService();
	geocoder = new google.maps.Geocoder();
	var myOptions = {
		zoom: zoom,
		//center: center,
		
		//BEGIN CONTROLS
		disableDefaultUI: disableDefaultUI, 
		navigationControl: navigationControl,
		mapTypeControl: mapTypeControl,
		scaleControl: scaleControl,
		navigationControlOptions:{
			style: google.maps.NavigationControlStyle[NavigationControlStyle], 
			position: google.maps.ControlPosition[ControlPosition] 
		},
		mapTypeControlOptions:{
			style: google.maps.MapTypeControlStyle[MapTypeControlStyle],
			position: google.maps.ControlPosition[MapTypeControlPosition] 
		},
		scaleControlOptions:{
			position: google.maps.ControlPosition[ScaleControlPosition]
		},
		//END CONTROLS
		
		mapTypeId: google.maps.MapTypeId[MapTypeId]
	};
	map = new google.maps.Map(document.getElementById("googlemaps"),myOptions);
	
	var rendererOptions = {
		map: map,
		draggable: draggable
	}
	directionsDisplay = new google.maps.DirectionsRenderer(rendererOptions);
	directionsDisplay.setPanel(document.getElementById("directionsPanel"));
	
	stepDisplay = new google.maps.InfoWindow();
	
	codeAddress(address, title, content, infoWidth, image, shadow);
}

function codeAddress(address, title, info, infoWidth, image, shadow){
	geocoder.geocode({ 'address': address}, function(results, status){
		if(status == google.maps.GeocoderStatus.OK){
			map.setCenter(results[0].geometry.location);
			addMarker(results[0].geometry.location, title, info, infoWidth, image, shadow);
		}else{
			alert("Geocode was not successful for the following reason: " + status);
		}
	});
}

function getDirections(origin, destination){
	for(i = 0; i < markerArray.length; i++){
		markerArray[i].setMap(null);
	}
	var request = {
		origin:origin, 
		destination:destination,
		travelMode: google.maps.DirectionsTravelMode[DirectionsTravelMode], 
		unitSystem: google.maps.DirectionsUnitSystem[DirectionsUnitSystem], 
		provideRouteAlternatives: alternativeRoutes, //true voor meerdere/alternatieve routes (kan langer duren)
		avoidHighways: avoidHighways, 
		avoidTolls: avoidTolls 
	};
	
	directionsService.route(request, function(response, status){
		if(status == google.maps.DirectionsStatus.OK){
			if(!alternativeRoutes){
				directionsDisplay.setDirections(response);
				showSteps(response);
			}else{
				var warnings = document.getElementById("warnings_panel");
				$("#warnings_panel").html("" + response.routes[0].warnings + "");
				directionsDisplay.setDirections(response);
			}
		}
	});
}

function addMarker(location, title, info, infoWidth, image, shadow){
	var image = new google.maps.MarkerImage(image,
		new google.maps.Size(20, 32),
		new google.maps.Point(0,0),
		new google.maps.Point(0, 32));

	var shadow = new google.maps.MarkerImage(shadow,
		new google.maps.Size(37, 32),
		new google.maps.Point(0,0),
		new google.maps.Point(0, 32));

	var shape = {
		coord: [1, 1, 1, 20, 18, 20, 18 , 1],
		type: 'poly'
	};

	var marker = new google.maps.Marker({
		map: map,
		position: location,
		title: title,
		icon: image,
		shadow: shadow,
		shape: shape
	});

	if(info != ''){
		var infowindow = new google.maps.InfoWindow({
			content: info,
			maxWidth: infoWidth
		});
		
		google.maps.event.addListener(marker, 'click', function() {
			infowindow.open(map,marker);
		});
	}
	markerArray.push(marker);
}

function showSteps(directionResult){
	var myRoute = directionResult.routes[0].legs[0];
	for(var i = 0; i < myRoute.steps.length; i++){
		var marker = new google.maps.Marker({
			position: myRoute.steps[i].start_point, 
			map: map
		});
		attachInstructionText(marker, myRoute.steps[i].instructions);
		markerArray[i] = marker;
	}
}

function attachInstructionText(marker, text){
	google.maps.event.addListener(marker, 'click', function(){
		stepDisplay.setContent(text);
		stepDisplay.open(map, marker);
	});
}

function clearOverlays(){
	if(markerArray){
		for(i in markerArray){
			markerArray[i].setMap(null);
		}
	}
}

function showOverlays(){
	if(markerArray){
		for(i in markerArray){
			markerArray[i].setMap(map);
		}
	}
}

function deleteOverlays(){
	if(markerArray){
		for(i in markerArray){
			markerArray[i].setMap(null);
		}
		markerArray.length = 0;
	}
}

function handleNoGeolocation(errorFlag) {
	if (errorFlag == true) {
		alert("Geolocation service failed.");
		initialLocation = newyork;
	}else{
		alert("Your browser doesn't support geolocation. We've placed you in Siberia.");
		initialLocation = siberia;
	}
	map.setCenter(initialLocation);
}

