summaryrefslogtreecommitdiff
path: root/httemplate/view/directions.html
blob: 0b4d139e1176a1d2ca432b9a006484c3924f69df (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
%# the actual page
<& /elements/header-popup.html, {
     title => '',#$name,
     head  => include('.head'),
     etc   => 'onload="initialize()"',
     nobr  => 1,
   }
&>

<div id="directions_panel"></div>
<div id="map_canvas"></div>

<%def .head>
% my $lat = $cgi->param('lat');
% my $lon = $cgi->param('lon');
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />

<style type="text/css">
html { height: 100% }

body { height: 100%; margin: 0px; padding: 0px }

#map_canvas {
  height: 100%;
}

#directions_panel {
  height: 100%;
  float: right;
  width: 310px;
  overflow: auto;
  font-size: 80%;
}

@media print {
  #map_canvas { height: 500px; margin: 0; }
  #directions_panel { float: none; width: auto; }
}
</style>

<script type="text/javascript" src="https://maps.google.com/maps/api/js?v=3<% $apikey ? '&key='.$apikey : '' %>">
</script>

<script type="text/javascript">
var lengthLine=0;
var map;

function show_route() {
  var panel = document.getElementById('directions_panel');
  var directionsService = new google.maps.DirectionsService;
  var directionsDisplay = new google.maps.DirectionsRenderer;
  directionsDisplay.setMap(map);
  directionsDisplay.setPanel(panel);

  var directionsRequest = {
    origin: <%$origin |js_string%>,
    destination: <% $lat %>+","+<% $lon %>,
    travelMode: google.maps.TravelMode.DRIVING
  };

  directionsService.route(directionsRequest, function(result, status) {
    if ( status == google.maps.DirectionsStatus.OK ) {
      directionsDisplay.setDirections(result);
    } else { 
      var errmsg = ('<P STYLE="color: red;">Directions lookup failed with the following error: '+status+'</P>');
      if (status == 'REQUEST_DENIED') {
        errmsg = errmsg + <% include('/elements/google_maps_api_key.html' ) |js_string%>;
      }
      document.body.innerHTML = errmsg;
    }
  });
}

// function name specified by google maps api, special hook for auth errors
function gm_authFailure () {
  document.body.innerHTML = 
<% include('/elements/google_maps_api_key.html', autherror => $apikey ) |js_string%>;
}

function initialize() {
  var myOptions = {
    zoom: 14,
    rotateControl: true,
    mapTypeId: google.maps.MapTypeId.ROADMAP
  };

  map = new google.maps.Map(
    document.getElementById("map_canvas"),
    myOptions
  );
  map.setOptions( {rotateControl : true });

  show_route();
}
</script>
</%def>
<%shared>
my ($lat, $lon, $name, $origin);
my $conf = new FS::Conf;
my $apikey = $conf->config('google_maps_api_key');
</%shared>
<%init>

$name = $cgi->param('name');

$lat = $cgi->param('lat');
$lon = $cgi->param('lon');
$lat =~ /^-?\d+(\.\d+)?$/ or die "bad latitude: $lat";
$lon =~ /^-?\d+(\.\d+)?$/ or die "bad longitude: $lat";

$origin = $cgi->param('origin') or die "no origin specified";

</%init>