//Called as the user scrolls/zooms around. //Maniplate hrefs of the view tab and various other links function updatelinks(lon,lat,zoom,layers,extents) { var decimals = Math.pow(10, Math.floor(zoom/3)); var node; lat = Math.round(lat * decimals) / decimals; lon = Math.round(lon * decimals) / decimals; node = document.getElementById("permalinkanchor"); if (node) { var args = getArgs(node.href); args["lat"] = lat; args["lon"] = lon; args["zoom"] = zoom; if (layers) { args["layers"] = layers; } node.href = setArgs(node.href, args); } node = document.getElementById("viewanchor"); if (node) { var args = getArgs(node.href); args["lat"] = lat; args["lon"] = lon; args["zoom"] = zoom; if (layers) { args["layers"] = layers; } node.href = setArgs(node.href, args); } node = document.getElementById("exportanchor"); if (node) { var args = getArgs(node.href); args["lat"] = lat; args["lon"] = lon; args["zoom"] = zoom; if (layers) { args["layers"] = layers; } node.href = setArgs(node.href, args); } node = document.getElementById("editanchor"); if (node) { if (zoom >= 11) { var args = new Object(); args.lat = lat; args.lon = lon; args.zoom = zoom; node.href = setArgs("/edit", args); node.style.fontStyle = 'normal'; } else { node.href = 'javascript:alert("zoom in to edit map");'; node.style.fontStyle = 'italic'; } } node = document.getElementById("historyanchor"); if (node) { if (zoom >= 11) { var args = new Object(); //conjure a bounding box centred at the lat/lon. //TODO: feed actual bounds of the window through to here somehow. minlon = extents.left; minlat = extents.bottom; maxlon = extents.right; maxlat = extents.top; minlon = Math.round(minlon * decimals) / decimals; minlat = Math.round(minlat * decimals) / decimals; maxlon = Math.round(maxlon * decimals) / decimals; maxlat = Math.round(maxlat * decimals) / decimals; args.bbox = minlon + "," + minlat + "," + maxlon + "," + maxlat; node.href = setArgs("history/", args); node.style.fontStyle = 'normal'; } else { node.href = 'javascript:alert("zoom in to see editing history");'; node.style.fontStyle = 'italic'; } } } function getArgs(url) { var args = new Object(); var querystart = url.indexOf("?"); if (querystart >= 0) { var querystring = url.substring(querystart + 1); var queryitems = querystring.split("&"); for (var i = 0; i < queryitems.length; i++) { if (match = queryitems[i].match(/^(.*)=(.*)$/)) { args[unescape(match[1])] = unescape(match[2]); } else { args[unescape(queryitems[i])] = null } } } return args; } function setArgs(url, args) { var queryitems = new Array(); for (arg in args) { if (args[arg] == null) { queryitems.push(escape(arg)); } else { queryitems.push(escape(arg) + "=" + escape(args[arg])); } } return url.replace(/\?.*$/, "") + "?" + queryitems.join("&"); } function getStyle(el, property) { var style; if (el.currentStyle) { style = el.currentStyle[property]; } else if( window.getComputedStyle ) { style = document.defaultView.getComputedStyle(el,null).getPropertyValue(property); } else { style = el.style[property]; } return style; }