/**
* Copyright (c) 2008, Canterbury City Council. All rights reserved.
* aiwg@beerdragon.co.uk
*/
var _gis_area = document.getElementById ("gis_area");
var _gis_tilesW, _gis_tilesH;
var _gis_tile, _gis_imageurl;
var _gis_mousecapture, _gis_mouse_x, _gis_mouse_y, _gis_noclick;
var _gis_easting, _gis_northing, _gis_scale;
var _gis_pushpin_x, _gis_pushpin_y;
var _gis_onclick_url = null, _gis_onclick_xenc, _gis_onclick_yenc, _gis_onclick_zenc;
var _gis_onclick_ajax = null, _gis_onclick_js;
var _gis_area_x = 0, _gis_area_y = 0;
function _gis_compatible () {
if (!document.documentElement && !document.body) return false;
if (!_gis_area) return false;
_gis_area.style.position = "relative";
if (!_gis_area.offsetWidth || !_gis_area.offsetHeight) return false;
if (!_gis_area.offsetLeft || !_gis_area.offsetTop) return false;
var p = _gis_area;
while (p != null) {
_gis_area_x += p.offsetLeft;
_gis_area_y += p.offsetTop;
p = p.offsetParent;
}
return true;
}
function _gis_idiv (i, j) {
return Math.floor (i / j);
}
function _gis_imul (i, j) {
return Math.floor (i * j);
}
function _gis_refresh () {
if (_gis_easting < 500000) _gis_easting = 500000; else
if (_gis_easting > 700000) _gis_easting = 700000;
if (_gis_northing < 100000) _gis_northing = 100000; else
if (_gis_northing > 200000) _gis_northing = 200000;
if (_gis_scale < 1000) _gis_scale = 1000; else
if (_gis_scale > 250000) _gis_scale = 250000;
mpp = 0.00026458333333333 * _gis_scale;
leftE = _gis_easting - _gis_imul (_gis_area.offsetWidth / 2, mpp);
tileW = _gis_imul (256, mpp);
leftE2 = leftE % tileW;
leftE -= leftE2;
leftX = -_gis_idiv (leftE2, mpp);
topN = _gis_northing + _gis_imul (_gis_area.offsetHeight / 2, mpp);
tileH = _gis_imul (256, mpp);
topN2 = topN % tileH;
topN = topN - topN2;
topY = _gis_idiv (topN2, mpp) - 256;
x = leftX;
e = leftE;
url = _gis_imageurl + "z=" + _gis_scale + "&";
urlPin = (_gis_pushpin_x && _gis_pushpin_y) ? url + "px=" + _gis_pushpin_x + "&py=" + _gis_pushpin_y + "&" : 0;
for (i = 0; i < _gis_tilesW; i++) {
y = topY;
n = topN;
for (j = 0; j < _gis_tilesH; j++) {
t = _gis_tile[i][j];
if (urlPin) {
mapurl = ((_gis_pushpin_x >= e - 30 * mpp) && (_gis_pushpin_x < e + tileW + 30 * mpp) && (_gis_pushpin_y >= n - 40 * mpp) && (_gis_pushpin_y < n + tileH + 40 * mpp)) ? urlPin : url;
} else {
mapurl = url;
}
if ((t.easting != e) || (t.northing != n) || (t.mapurl != mapurl)) {
t.innerHTML = "";
}
t.style.left = x + "px";
t.style.top = y + "px";
y += 256;
n -= tileH;
}
x += 256;
e += tileW;
}
}
function _gis_mousedown (e) {
if (e == null) if ((e = window.event) == null) return;
var popup = document.getElementById ("gis_popup");
if (popup && (popup.style.display == "block")) popup.style.display = "none";
_gis_mousecapture = true;
_gis_noclick = false;
_gis_mouse_x = e.clientX;
_gis_mouse_y = e.clientY;
if (_gis_area.setCapture) _gis_area.setCapture ();
_gis_area.style.cursor = "move";
}
function _gis_mouseup (e) {
_gis_mousecapture = false;
if (_gis_area.releaseCapture) {
_gis_area.releaseCapture ();
} else if (_gis_area.setCapture) {
_gis_area.setCapture (false);
}
_gis_area.style.cursor = "auto";
}
function _gis_rotl (arr) {
tmp = arr[0];
for (i = 0; i < arr.length - 1; i++) {
arr[i] = arr[i + 1];
}
arr[i] = tmp;
}
function _gis_rotr (arr) {
tmp = arr[i = arr.length - 1];
for (; i > 0; i--) {
arr[i] = arr[i - 1];
}
arr[0] = tmp;
}
function _gis_mousemove (e) {
if (!_gis_mousecapture) return;
_gis_noclick = true;
if (e == null) if ((e = window.event) == null) return;
mpp = 0.00026458333333333 * _gis_scale;
dx = _gis_imul (_gis_mouse_x - e.clientX, mpp);
dy = _gis_imul (e.clientY - _gis_mouse_y, mpp);
if ((dx == 0) || (dy == 0)) return;
_gis_mouse_x = e.clientX;
_gis_mouse_y = e.clientY;
w1 = _gis_imul (_gis_area.offsetWidth / 2, mpp);
xx = _gis_easting - w1;
w2 = _gis_imul (256, mpp);
x = _gis_idiv (xx - (xx % w2), w2);
xx = (_gis_easting += dx) - w1;
x -= _gis_idiv (xx - (xx % w2), w2);
h1 = _gis_imul (_gis_area.offsetHeight / 2, mpp);
yy = _gis_northing + h1;
h2 = _gis_imul (256, mpp);
y = _gis_idiv (yy - (yy % h2), h2);
yy = (_gis_northing += dy) + h1;
y -= _gis_idiv (yy - (yy % h2), h2);
if (x < 0) {
if (x > -_gis_tilesW) {
while (x < 0) {
_gis_rotl (_gis_tile);
x++;
}
}
} else if (x > 0) {
if (x < _gis_tilesW) {
while (x > 0) {
_gis_rotr (_gis_tile);
x--;
}
}
}
if (y < 0) {
if (y > -_gis_tilesH) {
while (y < 0) {
for (j = 0; j < _gis_tilesW; j++) {
_gis_rotr (_gis_tile[j]);
}
y++;
}
}
} else if (y > 0) {
if (y < _gis_tilesH) {
while (y > 0) {
for (j = 0; j < _gis_tilesW; j++) {
_gis_rotl (_gis_tile[j]);
}
y--;
}
}
}
_gis_refresh ();
}
function _gis_onclick (e) {
if (_gis_noclick) return;
if (e == null) if ((e = window.event) == null) return;
mpp = 0.00026458333333333 * _gis_scale;
x = _gis_easting + _gis_imul ((e.pageX ? e.pageX : (e.clientX + (document.documentElement ? document.documentElement : document.body).scrollLeft)) - _gis_area_x - _gis_area.offsetWidth / 2, mpp);
y = _gis_northing + _gis_imul (_gis_area.offsetHeight / 2 - ((e.pageY ? e.pageY : (e.clientY + (document.documentElement ? document.documentElement : document.body).scrollTop)) - _gis_area_y), mpp);
gis_getdata (x, y);
}
function gis_getdata (easting, northing) {
url = (_gis_onclick_url != null) ? _gis_onclick_url.replace (_gis_onclick_xenc, easting).replace (_gis_onclick_yenc, northing).replace (_gis_onclick_zenc, _gis_scale) : null;
if (_gis_onclick_ajax != null) {
req = null;
if (typeof XMLHttpRequest != "undefined") {
req = new XMLHttpRequest ();
} else if (window.ActiveXObject) {
req = new ActiveXObject ("Microsoft.XMLHTTP");
} else {
_gis_onclick_ajax = null;
}
if (req != null) {
req.onreadystatechange = function (_req) {
return function () {
if (_req.readyState == 4) {
//document.write (_req.responsetext);
// _gis_onclick_js (_req.responsetext);
_gis_onclick_js (_req.responseXML.documentElement.childNodes[0].nodeValue, url);
}
};
} (req);
req.open ("GET", _gis_onclick_ajax + "&x=" + easting + "&y=" + northing + "&z=" + _gis_scale, true);
req.send (null);
return;
}
}
if (url != null) document.location = url;
}
function gis_zoomin () {
if (_gis_scale > 250000) _gis_scale=250000; else
if (_gis_scale > 200000) _gis_scale=200000; else
if (_gis_scale > 150000) _gis_scale=150000; else
if (_gis_scale > 100000) _gis_scale=100000; else
if (_gis_scale > 50000) _gis_scale=50000; else
if (_gis_scale > 25000) _gis_scale=25000; else
if (_gis_scale > 10000) _gis_scale=10000; else
if (_gis_scale > 5000) _gis_scale=5000; else
if (_gis_scale > 2500) _gis_scale=2500; else
if (_gis_scale > 1000) _gis_scale=1000; else
return;
_gis_refresh ();
}
function gis_setzoom (scale) {
_gis_scale = scale + 1;
gis_zoomin ();
}
function gis_getzoom () {
return _gis_scale;
}
function gis_zoomout () {
if (_gis_scale < 1000) _gis_scale=1000; else
if (_gis_scale < 2500) _gis_scale=2500; else
if (_gis_scale < 5000) _gis_scale=5000; else
if (_gis_scale < 10000) _gis_scale=10000; else
if (_gis_scale < 25000) _gis_scale=25000; else
if (_gis_scale < 50000) _gis_scale=50000; else
if (_gis_scale < 100000) _gis_scale=100000; else
if (_gis_scale < 150000) _gis_scale=150000; else
if (_gis_scale < 200000) _gis_scale=200000; else
if (_gis_scale < 250000) _gis_scale=250000; else
return;
_gis_refresh ();
}
function _gis_init (params, easting, northing, scale, pushpin, search) {
_gis_area.style.overflow = "hidden";
_gis_area.style.maxHeight = _gis_area.style.height = _gis_area.offsetHeight + "px";
_gis_imageurl = "/cgi-bin/authority/gis/planningapps?mode=map&" + params;
_gis_easting = easting;
_gis_northing = northing;
_gis_scale = scale;
_gis_pushpin_x = pushpin ? easting : 0;
_gis_pushpin_y = pushpin ? northing : 0;
html = "