ae38ecb6a53914239c903a252ba9aa4d83c13d57
[rails.git] / public / javascripts / site.js
1 //Called as the user scrolls/zooms around.
2 //Maniplate hrefs of the view tab and various other links
3 function updatelinks(lon,lat,zoom,layers,minlon,minlat,maxlon,maxlat) {
4   var decimals = Math.pow(10, Math.floor(zoom/3));
5   var node;
6
7   lat = Math.round(lat * decimals) / decimals;
8   lon = Math.round(lon * decimals) / decimals;
9
10   node = document.getElementById("permalinkanchor");
11   if (node) {
12     var args = getArgs(node.href);
13     args["lat"] = lat;
14     args["lon"] = lon;
15     args["zoom"] = zoom;
16     if (layers) {
17       args["layers"] = layers;
18     }
19     node.href = setArgs(node.href, args);
20   }
21
22   node = document.getElementById("viewanchor");
23   if (node) {
24     var args = getArgs(node.href);
25     args["lat"] = lat;
26     args["lon"] = lon;
27     args["zoom"] = zoom;
28     if (layers) {
29       args["layers"] = layers;
30     }
31     node.href = setArgs(node.href, args);
32   }
33
34   node = document.getElementById("exportanchor");
35   if (node) {
36     var args = getArgs(node.href);
37     args["lat"] = lat;
38     args["lon"] = lon;
39     args["zoom"] = zoom;
40     if (layers) {
41       args["layers"] = layers;
42     }
43     node.href = setArgs(node.href, args);
44   }
45
46   node = document.getElementById("editanchor");
47   if (node) {
48     if (zoom >= 11) {
49       var args = new Object();
50       args.lat = lat;
51       args.lon = lon;
52       args.zoom = zoom;
53       node.href = setArgs("/edit", args);
54       node.style.fontStyle = 'normal';
55     } else {
56       node.href = 'javascript:alert("zoom in to edit map");';
57       node.style.fontStyle = 'italic';
58     }
59   }
60   
61   node = document.getElementById("historyanchor");
62   if (node) {
63     if (zoom >= 11) {
64       var args = new Object();
65       //set bbox param from 'extents' object
66       if (typeof minlon == "number" &&
67           typeof minlat == "number" &&
68           typeof maxlon == "number" &&
69           typeof maxlat == "number") {
70       
71         minlon = Math.round(minlon * decimals) / decimals;
72         minlat = Math.round(minlat * decimals) / decimals;
73         maxlon = Math.round(maxlon * decimals) / decimals;
74         maxlat = Math.round(maxlat * decimals) / decimals;
75         args.bbox = minlon + "," + minlat + "," + maxlon + "," + maxlat;
76       }
77       
78       node.href = setArgs("/history", args);
79       node.style.fontStyle = 'normal';
80     } else {
81       node.href = 'javascript:alert("zoom in to see editing history");';
82       node.style.fontStyle = 'italic';
83     }
84   }
85 }
86
87 function getArgs(url) {
88   var args = new Object();
89   var querystart = url.indexOf("?");
90
91   if (querystart >= 0) {
92      var querystring = url.substring(querystart + 1);
93      var queryitems = querystring.split("&");
94
95      for (var i = 0; i < queryitems.length; i++) {
96         if (match = queryitems[i].match(/^(.*)=(.*)$/)) {
97            args[unescape(match[1])] = unescape(match[2]);
98         } else {
99            args[unescape(queryitems[i])] = null
100         }
101      }
102   }
103
104   return args;
105 }
106
107 function setArgs(url, args) {
108    var queryitems = new Array();
109
110    for (arg in args)
111    {
112       if (args[arg] == null) {
113          queryitems.push(escape(arg));
114       } else {
115          queryitems.push(escape(arg) + "=" + escape(args[arg]));
116       }
117    }
118
119    return url.replace(/\?.*$/, "") + "?" + queryitems.join("&");
120 }
121
122 function getStyle(el, property) {
123   var style;
124
125   if (el.currentStyle) {
126     style = el.currentStyle[property];
127   } else if( window.getComputedStyle ) {
128     style = document.defaultView.getComputedStyle(el,null).getPropertyValue(property);
129   } else {
130     style = el.style[property];
131   }
132
133   return style;
134 }