window.rates = [{"id":1,"service_rate_id":1,"distance_from":"0.000","distance_to":"1.999","price":"0.00","created_at":"2015-09-07 12:20:39","updated_at":"2022-05-06 18:49:34"},{"id":2,"service_rate_id":1,"distance_from":"2.000","distance_to":"15.000","price":"36.00","created_at":"2015-09-07 12:20:39","updated_at":"2022-05-06 18:49:34"},{"id":3,"service_rate_id":1,"distance_from":"15.001","distance_to":"9999.000","price":"29.00","created_at":"2015-09-07 12:20:39","updated_at":"2022-05-06 18:49:34"}]; window.entry_fee = 259.00; var ageElements = { start:null, end:null, price:null, distance:null, map:null, submit:null, googleMap:null, autocompleteStart: null, autocompleteEnd: null }; var ageGoogleServices = { directionsService: null, directionsDisplay: null }; var marker; function ageSetElements(start, end, price, distance, map, submit) { ageElements = { start: start, end:end, price:price, distance:distance, map:map, submit:submit } } function navigate() { var startGroup = $(ageElements.start.parentNode); var endGroup = $(ageElements.end.parentNode); var startAddress = ageElements.start.value; var endAddress = ageElements.end.value; if (startAddress && endAddress) { startGroup.addClass('has-success'); startGroup.removeClass('has-danger'); endGroup.addClass('has-success'); endGroup.removeClass('has-danger'); displayRoute(startAddress, endAddress, ageGoogleServices.directionsService, ageGoogleServices.directionsDisplay) } else { if (!startAddress) { startGroup.addClass('has-danger'); startGroup.removeClass('has-success'); startGroup.removeClass('primary-color-border'); } if (!endAddress) { endGroup.addClass('has-danger'); endGroup.removeClass('has-success'); endGroup.removeClass('primary-color-border'); } } } function ageInitCalc() { ageElements.googleMap = new google.maps.Map(ageElements.map, { zoom: 10, center: {lat: 49.738431, lng: 13.373637} }); ageGoogleServices.directionsService = new google.maps.DirectionsService; ageGoogleServices.directionsDisplay = new google.maps.DirectionsRenderer({ draggable: true, map: ageElements.googleMap, }); ageGoogleServices.directionsDisplay.addListener('directions_changed', function () { computeTotalDistance(ageGoogleServices.directionsDisplay.getDirections()); }); // Marker marker = new google.maps.Marker({ map: ageElements.googleMap }); // Start ageElements.autocompleteStart = new google.maps.places.Autocomplete(ageElements.start); google.maps.event.addListener(ageElements.autocompleteStart, 'place_changed', function () { marker.setVisible(false); var place = ageElements.autocompleteStart.getPlace(); if (!place.geometry) { // Inform the user that the place was not found and return. // TODO return; } // If the place has a geometry, then present it on a map. if (place.geometry.viewport) { ageElements.googleMap.fitBounds(place.geometry.viewport); } else { ageElements.googleMap.setCenter(place.geometry.location); ageElements.googleMap.setZoom(17); // Why 17? Because it looks good. } navigate(); }); /// END ageElements.autocompleteEnd = new google.maps.places.Autocomplete(ageElements.end); google.maps.event.addListener(ageElements.autocompleteEnd, 'place_changed', function () { marker.setVisible(false); var place = ageElements.autocompleteEnd.getPlace(); if (!place.geometry) { // Inform the user that the place was not found and return. // TODO return; } // If the place has a geometry, then present it on a map. if (place.geometry.viewport) { ageElements.googleMap.fitBounds(place.geometry.viewport); } else { ageElements.googleMap.setCenter(place.geometry.location); ageElements.googleMap.setZoom(17); // Why 17? Because it looks good. } navigate(); }); $(ageElements.end).keydown(function(e) { if (e.keyCode == 13) { e.preventDefault(); navigate(); } }); $(ageElements.submit).on('click', navigate); } function geolocate() { if (navigator.geolocation) { navigator.geolocation.getCurrentPosition(function (position) { var geolocation = { lat: position.coords.latitude, lng: position.coords.longitude }; var circle = new google.maps.Circle({ center: geolocation, radius: position.coords.accuracy }); ageElements.autocompleteStart.setBounds(circle.getBounds()); ageElements.autocompleteEnd.setBounds(circle.getBounds()); }); } } function displayRoute(origin, destination, service, display) { service.route({ origin: origin, destination: destination, //waypoints: [{location: origin}, {location: destination}], travelMode: google.maps.TravelMode.DRIVING //avoidTolls: true }, function (response, status) { if (status === google.maps.DirectionsStatus.OK) { display.setDirections(response); } else { alert('Could not display directions due to: ' + status); } }); } function computeTotalDistance(result) { var total = 0; var myroute = result.routes[0]; for (var i = 0; i < myroute.legs.length; i++) { total += myroute.legs[i].distance.value; } total = total / 1000; var distanceLocal = total; var price = 0.0; for(var key in window.rates) { if (window.rates.hasOwnProperty(key)) { var rate = window.rates[key]; var range = parseFloat(rate['distance_to']) - parseFloat(rate['distance_from']); if (distanceLocal >= range) { price += range * parseFloat(rate['price']); distanceLocal -= range; } else { price += distanceLocal * parseFloat(rate['price']); distanceLocal = 0; } } } if (distanceLocal > 0) { alert('Could not determine price.'); return; } price += window.entry_fee; ageElements.distance.innerHTML = total.toFixed(2).toString().replace(".", ","); ageElements.price.innerHTML = Math.round(price); }