// JavaScript Document
var toolmode = 0;   			//sets variable for selected tool button
var imageDownID = "";
var cursor_val = "";			// variable to hold cursor image value

var serverpath = "http://derbyshiremaps.derbyshire.gov.uk/planaccess/";
var thetheme = "Portal3_layers";
var thepartner = "DCC";

var colour_background_layers = "";		//text list of colour background map layers
var mono_background_layers = "";		//text list of mono background map layers
var current_background_layers = "";		//sets to either colour_background_layers or mono_background_layers
var current_layers = "";
var layers_list_array = new Array();		//xxx	//array of allowed layers from PA Layer admin db
var layers_list_display_array = new Array();	//xxx	//array of layer display names from PA Layer admin db
var url_layers_array = new Array();		//xxx	//array of layer display names from calling URL
var the_layersi = "";

var max_zoom = 155000;
var min_zoom = 100;
var zoom = "40000";
var easting = "429000";
var northing = "360000";
var mapwidth = "450";
var mapheight = "300";
var gridref = "";

var post_thepartner = "";
var thepc = "";
var thecoordsstr = "";

var add_chosen = "no";
var addeasting = "";
var addnorthing = "";

var seeded_search_layer = "";
var seeded_search_layer_display = "";	//xxx
var seeded_search_field = "";
var seeded_search_value = "";


function right(e) {
	//var msg = "Sorry, you don't have permission to right-click.";
	if (navigator.appName == 'Netscape' && e.which == 3) {
		//alert(msg);
		return false;
		}
	if (navigator.appName == 'Microsoft Internet Explorer' && event.button==2) {
		//alert(msg);
		return false;
	} 
	else return true;
}


function trap() {
	if(document.images) {
    		for(i=0;i<document.images.length;i++) {
			document.images[i].onmousedown = right;
			document.images[i].onmouseup = right;
		}
	}
}





// *****************************************************************************************************
// ******************************* Set up of initial variable values ***********************************
// *****************************************************************************************************




function setup_portal() {

	colour_background_layers = "DCCDistricts,Carto_Text,Topo_Line,Carto_Area,Topo_Area,10Kcolour,50Kcolour,Road Atlas,Miniscale_Colour";
	mono_background_layers = "DCCDistricts,Carto_Text,Topo_Line_Mono,10Kmono,50Kmono,Road_Atlas_Mono,Miniscale_Mono";
	current_background_layers = colour_background_layers;

	var coordsstr = document.getElementById("pc_coords").value;
	if (coordsstr.match(",") == ",") {
		thecoordsstr = coordsstr;
		var coords_array = thecoordsstr.split(",");
		easting = coords_array[0];
		northing = coords_array[1];
		zoom = "1000";
	} else {
		var the_eastingi = document.getElementById("eastingi").value;
		var the_northingi = document.getElementById("northingi").value;
		if (the_eastingi != "" && the_northingi != "") {
			easting = the_eastingi;
			northing = the_northingi;
			var marker = document.getElementById("markeri").value;
			if (marker == "yes") {
				add_chosen = "yes";
				addeasting = easting;
				addnorthing = northing;
			}
		}
	}

	var post_thepartner = document.getElementById("partner").value;
	if (post_thepartner != "") {
		thepartner = post_thepartner.toUpperCase();
	}

	var the_backi = document.getElementById("backi").value;
	if (the_backi == "mono") {
		current_background_layers = mono_background_layers;
		document.getElementById('mono_map').checked="checked";
	}

	the_layersi = document.getElementById("thelayersi").value;
	if (the_layersi != "") {
		check_layers(the_layersi);		//xxx
	}

	if ((document.getElementById('fm_search_layer').value != "") &&
		(document.getElementById('fm_search_field').value != "") &&
		(document.getElementById('fm_search_value').value != "")) {
			seeded_search_field = document.getElementById('fm_search_field').value;
			seeded_search_value = document.getElementById('fm_search_value').value;
			seeded_search_layer_display = document.getElementById('fm_search_layer').value;		//xxx
			seeded_search_layer = display_to_dataset(seeded_search_layer_display);			//xxx
			seeded_layer_search();
	}

	var the_zoomi = document.getElementById("zoomi").value;
	if (the_zoomi != "") {
		zoom = the_zoomi;
	}

	update_zoom_bar();
	setmap_labels();
	getMap();
}




function homepage_link() {

	switch (thepartner)
	{
	case "AVC":
  		window.open("http://www.ambervalley.gov.uk", "_blank");
  		break
	case "BOL":
  		window.open("http://www.bolsover.gov.uk", "_blank");
  		break
	case "CBC":
  		window.open("http://www.chesterfield.gov.uk", "_blank");
  		break
	case "DCC":
  		window.open("http://www.derbyshire.gov.uk", "_blank");
  		break
	case "DDC":
  		window.open("http://www.derbyshiredales.gov.uk", "_blank");
  		break
	case "DER":
  		window.open("http://www.derby.gov.uk", "_blank");
  		break
	case "ERE":
  		window.open("http://www.erewash.gov.uk", "_blank");
  		break
	//case "FIR":
  	//	window.open("http://www.derbyshire-fire-service.co.uk", "_blank");
  	//	break
	case "HPC":
  		window.open("http://www.highpeak.gov.uk", "_blank");
  		break
	case "NED":
  		window.open("http://www.ne-derbyshire.gov.uk", "_blank");
  		break
	case "PDP":
  		window.open("http://www.peakdistrict-npa.gov.uk", "_blank");
  		break
	case "SDC":
  		window.open("http://www.south-derbys.gov.uk", "_blank");
  		break
	case "EPL":
  		window.open("http://www.derbyshire.gov.uk", "_blank");
  		break
	default:
  		//do nothing
  		break
	} 
}


function portal_link() {

	var the_portal_link = "http://derbyshiremaps.derbyshire.gov.uk/Portal_32/launch_portal.asp?";
	the_portal_link += "style=" + thepartner;
	the_portal_link += "&easting=" + easting;
	the_portal_link += "&northing=" + northing;
	the_portal_link += "&zoom=" + zoom;

	if (current_background_layers == mono_background_layers) {
		the_portal_link += "&back=mono";
	}

	if (current_layers != "") {
		the_portal_link += "&layers=" + the_layersi;
	}

  	window.open(the_portal_link, "_blank");
}



function seeded_layer_search() {							//NEW 3.2

	var sURL = serverpath + "dialogbox_MapInformation.asp?theme=" + thetheme + "&mapwidth=" + mapwidth + "&mapheight=" + mapheight + "&mapmode=GetBounds";
	sURL += "&infomode=xml&layername=" + seeded_search_layer + "&fieldname=" + seeded_search_field + "&fieldvalue=" + seeded_search_value;

	xmlinfoRequestObj = window.XMLHttpRequest?new XMLHttpRequest():new ActiveXObject("Microsoft.XMLHTTP")
	xmlinfoRequestObj.onreadystatechange = proccess_seededsearch_XML;
	xmlinfoRequestObj.open("GET", sURL, true);
	xmlinfoRequestObj.send(null);
}


function proccess_seededsearch_XML() {								//NEW 3.2
	if (xmlinfoRequestObj.readyState == 4 && (xmlinfoRequestObj.status == 200 || xmlinfoRequestObj.status == 304)) {
		xmlDoc = xmlinfoRequestObj.responseXML;
		check_search_results();
	}
}


function check_search_results() {								//NEW 3.2

	var x = 0;
	var map_search_x = "";
	var map_search_y = "";
	var map_search_width = "";

	LayerIndex = 0;
	var SEARCHnodeName = "";
	var SEARCHnodeText = "";

	rootNode = xmlDoc.documentElement;

	for ( x = 0; x < rootNode.childNodes.length; x++ ) {

		if (BrowserName == "Netscape") {
			SEARCHnodeText = rootNode.childNodes.item(x).firstChild.nodeValue;
			SEARCHnodeName = rootNode.childNodes.item(x).nodeName;
		} else {
			SEARCHnodeText = rootNode.childNodes.item(x).text;
			SEARCHnodeName = rootNode.childNodes.item(x).nodeName;
		}

		if ( SEARCHnodeName.toUpperCase() == "CENTERX" ) {
			map_search_x = SEARCHnodeText;
				 
		} else if ( SEARCHnodeName.toUpperCase() == "CENTERY" ) {
			map_search_y = SEARCHnodeText;

		} else if ( SEARCHnodeName.toUpperCase() == "MAPWIDTH" ) {
			map_search_width = SEARCHnodeText;
		}
	}

	xmlDoc = null;

	if (map_search_x != "" && map_search_y != "" && map_search_width != "") {

		if (map_search_width > max_zoom) {
			zoom = max_zoom;
		} else if (map_search_width < min_zoom) {
			zoom = min_zoom;
		} else {
			zoom = map_search_width;
		}
		if (document.getElementById("zoomi").value != "") {
			zoom = document.getElementById("zoomi").value;
		}

		easting = map_search_x;
		northing = map_search_y;

		if (current_layers == "" ) {
			current_layers = seeded_search_layer;
		} else { 
			current_layers = current_layers + "," + seeded_search_layer;
		}

		dis_anim();
		getMap();
		setmap_labels();
		update_zoom_bar();
	}
}



// *****************************************************************************************************
// ****************************************** Set up layers ********************************************
// *****************************************************************************************************



//list of allowed layers for portal (from layer admin database query)
function layer_array(layer_list) {				//xxx

	layers_list_array = layer_list.split(",");
}


//list of layer display names for portal (from layer admin database query)	//xxx
function layerdisplay_array(displayname_list) {

	layers_list_display_array = displayname_list.split(",");
}


function check_layers(the_layersi) {					//xxx

	url_layers_array = the_layersi.split(",");
	current_layers = "";
	var url_layer = "";
	var x = 0;
	for (x in url_layers_array) {
		url_layer = url_layers_array[x];
		var y = 0;
		var layer_disp_name = "";
		for (y in layers_list_display_array) {
			layer_disp_name = layers_list_display_array[y];
			if (layer_disp_name.toUpperCase() == url_layer.toUpperCase()) {
				current_layers = current_layers + layers_list_array[y] + ",";
			}
		}
	}
}


function display_to_dataset(display_title) {		//xxx		//converts display name to layer name code

	var x = 0;
	var dataset_name, display_name;

	for (x in layers_list_display_array) {
		display_name = layers_list_display_array[x];
		if (display_name.toUpperCase() == display_title.toUpperCase()) {
			dataset_name = layers_list_array[x];
		}
	}
	return dataset_name;
}



//***********************************************************************************
// Do Client Side Browser Checking
//***********************************************************************************		
	
// Sniff the browser and it's version
	
var BrowserName = navigator.appName;
var BrowserVersion;
	
var is_major = parseInt(navigator.appVersion);
var is_minor = parseFloat(navigator.appVersion);
var agt = navigator.userAgent.toLowerCase();
    
// If the browser is IE then do futher checks on the version
if ( BrowserName == "Microsoft Internet Explorer" ) {
       	
	var is_ie3    = (is_major < 4);
	var is_ie4    = (is_major == 4) && (agt.indexOf("msie 4")!=-1);
	var is_ie5    = (is_major == 4) && (agt.indexOf("msie 5.0")!=-1);
	var is_ie5_5  = (is_major == 4) && (agt.indexOf("msie 5.5") !=-1);
	var is_ie6    = (is_major == 4) && (agt.indexOf("msie 6.")!=-1);
		
	if ( is_ie3 ) {
		BrowserVersion = "3";
	}
	else if ( is_ie4 ) {
		BrowserVersion = "4";
	}
	else if ( is_ie5 ) {
		BrowserVersion = "5";
	}
	else if ( is_ie5_5 ) {
		BrowserVersion = "5.5";
	}
	else if ( is_ie6 ) {
		BrowserVersion = "6";
	}
} else {
	BrowserVersion = parseInt(navigator.appVersion);
} 





// *****************************************************************************************************
// ******************************** Zoom events (NB not map click zoom) ********************************
// *****************************************************************************************************


// for zoom bar, hover over effect
function zoom_OverImage(imageObj) {

	if ( imageDownID != imageObj.name ) {

		if ( imageObj.name == "Zplus" ) {
			imageObj.src = "images/zoomlevel/Zoom-bar_plus2.gif";
		}
		else if ( imageObj.name == "Zminus" ) {
			imageObj.src = "images/zoomlevel/Zoom-bar_minus2.gif";
		}
	}
	ChangeRollovercursor(imageObj.id);
}


// for zoom bar, to reset after hover over effect
function zoom_OutImage(imageObj) {

	if ( imageDownID != imageObj.name ) {

		if ( imageObj.name == "Zplus" ) {
			imageObj.src = "images/zoomlevel/Zoom-bar_plus.gif";
		}
		else if ( imageObj.name == "Zminus" ) {
			imageObj.src = "images/zoomlevel/Zoom-bar_minus.gif";
		}
	}
}




//document.onmousedown = moveme_onmousedown;
//document.onmouseup = moveme_onmouseup;
//document.onmousemove = moveme_onmousemove;

var zoomselect = "off";
var zoomdrag = "off";

function zoombar_on() {							//NEW 3.2
	zoomselect = "on";
	zoompointer.onmousedown = moveme_onmousedown;			//NEW 3.2
	zoompointer.onmouseup = moveme_onmouseup;
	zoompointer.onmousemove = moveme_onmousemove;
}


function zoombar_off() {						//NEW 3.2
	zoomselect = "off";
	moveme_onmouseup();
}



function moveme_onmousedown(e) {					//NEW 3.2

	if (zoomselect == "on") {
		zoomdrag = "on";
		if (BrowserName == "Netscape" ) {
			mouseX = e.pageX;
		} else {
			mouseX = event.clientX - 2;
			if (BrowserName == "Microsoft Internet Explorer") {		//IE correction
				mouseX += document.body.scrollLeft;
			}
		}
		return false
	}
}

function moveme_onmouseup(e) {						//NEW 3.2

	if (zoomdrag == "on") {	
		zoomdrag = "off"
 		ZoomBarChanged();
 	}
}

function moveme_onmousemove(e) {					//NEW 3.2

	if ((zoomselect == "on") && (zoomdrag == "on")) {

		mouseX = 0;

		if (BrowserName == "Netscape" ) {
			mouseX = e.pageX;
		} else {
			mouseX = event.clientX - 2;
			if (BrowserName == "Microsoft Internet Explorer") {		//IE correction
				mouseY += document.body.scrollLeft;
			}
		}

		obj = document.getElementById("zoombar_div");
		var oX = obj.offsetLeft;
		oX = oX + obj.parentNode.offsetLeft; 			// finds the absolute position of the object

		var theX = mouseX - oX;					// finds the relative position of the object
		var max_right = 152; 
		var min_left = 24;

		if (theX >= max_right) {
			if (BrowserName == "Netscape" ) {	
				zoompointer.style.left=145;
			} else {		
				zoompointer.style.pixelLeft=145;
			}
			zoomdrag = "off"
 			ZoomBarChanged();

 		} else if (theX <= min_left) {
			if (BrowserName == "Netscape" ) {	
				zoompointer.style.left=31;
			} else {		
				zoompointer.style.pixelLeft=31;
			}
			zoomdrag = "off"
 			ZoomBarChanged();

 		} else {	
			if (BrowserName == "Netscape" ) {	
				zoompointer.style.left=theX-1;
			} else {		
				zoompointer.style.pixelLeft=theX-3;
			}
		}
	}
	return false
}


function ZoomBarChanged() {						//NEW 3.2

	var zoompointer_left = 0;
	if (BrowserName == "Netscape" ) {	
		zoompointer_left = zoompointer.style.left;
		zoompointer_left = Number(zoompointer_left.substr(0,(zoompointer_left.length-2)));
	} else {		
		zoompointer_left = zoompointer.style.pixelLeft;
	}

	var zoom_ratio = (145-32) / Math.sqrt(Math.sqrt(max_zoom - min_zoom));
	zoom = ((zoompointer_left - 32) / zoom_ratio);
	zoom = min_zoom + (zoom * zoom * zoom * zoom);

	if (zoom >= max_zoom) {
		zoom = max_zoom;
		if ((BrowserName == "Netscape" ) && (zoompointer.style.left > 145)) {	
			zoompointer.style.left=145;
		} else if (zoompointer.style.left > 145){		
			zoompointer.style.pixelLeft = 145;
		}
	}
	if (zoom <= min_zoom) {
		zoom = min_zoom;
		if ((BrowserName == "Netscape" ) && (zoompointer.style.left < 31)) {	
			zoompointer.style.left=31;
		} else if (zoompointer.style.left < 31) {		
			zoompointer.style.pixelLeft = 31;
		}
	}
	zoom = String(Math.round(zoom));

	setmap_labels();
	dis_anim();
	getMap();
}


function update_zoom_bar() {						//NEW 3.2

	var zoompointer_left = 0;
	var zoom_ratio = (145-31) / Math.sqrt(Math.sqrt(max_zoom - min_zoom));
	zoompointer_left = (Math.sqrt(Math.sqrt(zoom - min_zoom)) * zoom_ratio);

	if (BrowserName == "Netscape" ) {	
		zoompointer.style.left = zoompointer_left + 31;
	} else {		
		zoompointer.style.pixelLeft = zoompointer_left + 31;
	}
}

function zoomin() {							//NEW 3.2

	if (zoom <= min_zoom) {
		// Do nothing
	} else {
		dis_anim();
		calc_zoom_step('in');
		getMap();
		update_zoom_bar();
		setmap_labels();
	}
}



function zoomout() {							//NEW 3.2

	if (zoom >= max_zoom) {
		// Do nothing
	} else {
		dis_anim();
		calc_zoom_step('out');
		getMap();
		update_zoom_bar();
		setmap_labels();
	} 
}


function calc_zoom_step(zoom_direction) {				//NEW 3.2

	var zoompointer_left = 0;
	if (BrowserName == "Netscape" ) {	
		zoompointer_left = zoompointer.style.left;
		zoompointer_left = Number(zoompointer_left.substr(0,(zoompointer_left.length-2)));
	} else {		
		zoompointer_left = zoompointer.style.pixelLeft;
	}

	var max_right = 145; 
	var min_left = 24;
	var thestep = (145 - 31) / 12;

	if (zoom_direction == "in") {

		if (zoompointer_left > min_left) {
			if (BrowserName == "Netscape" ) {	
				zoompointer.style.left = zoompointer_left - thestep;
			} else {		
				zoompointer.style.pixelLeft = zoompointer_left - thestep;
			}			
			ZoomBarChanged();

		} else {
			zoom = zoom;
		}

	} else {
	
		if (zoompointer_left < max_right) {
			if (BrowserName == "Netscape" ) {	
				zoompointer.style.left = zoompointer_left + thestep;
			} else {		
				zoompointer.style.pixelLeft = zoompointer_left + thestep;
			}			
			ZoomBarChanged();

		} else {
			zoom = zoom;
		}
	}
}


function wheel(event) {								//NEW 3.2

        var delta = 0;

        if (!event) {					// For IE. 
                event = window.event;
	}
        if (event.wheelDelta) { 			// IE/Opera.
                delta = event.wheelDelta/120;
        }  else if (event.detail) { 			// Mozilla case. 
		delta = -event.detail/3;		// In Mozilla, sign of delta is different than in IE. Also, delta is multiple of 3 
	}

	// If delta is nonzero, handle it. Basically, delta is now positive if wheel was scrolled up, and negative, if wheel was scrolled down.
       	if (delta) {
                wheel_zoom(delta);
	}
	//Prevent default actions caused by mouse wheel
        if (event.preventDefault) {
                event.preventDefault();
	}

	event.returnValue = false;
}


function wheel_zoom(delta) {							//NEW 3.2

    	if (delta < 0) {		// zoom out
		zoomout();
        } else {			// zoom in
		zoomin();
	}
}

 

// *****************************************************************************************************
// ******************************************* Pan bar events ******************************************
// *****************************************************************************************************



// for pan bars, hover over effect
function Pan_OverImage(imageObj) {

	if ( imageObj.name == "upb" ) {
		imageObj.src = "images/panbars/up2.gif";
	}
	else if ( imageObj.name == "downb" ) {
		imageObj.src = "images/panbars/down2.gif";
	}
	else if ( imageObj.name == "leftb" ) {
		imageObj.src = "images/panbars/left2.gif";
	}
	else if ( imageObj.name == "rightb" ) {
		imageObj.src = "images/panbars/right2.gif";
	}
	else if ( imageObj.name == "nwb" ) {
		nwb1.src = "images/panbars/corner_nw_a2.gif";
	}
	else if ( imageObj.name == "neb" ) {
		neb1.src = "images/panbars/corner_ne_a2.gif";
	}
	else if ( imageObj.name == "seb" ) {
		seb1.src = "images/panbars/corner_se_a2.gif";
	}
	else if ( imageObj.name == "swb" ) {
		swb1.src = "images/panbars/corner_sw_a2.gif";
	}
	ChangeRollovercursor(imageObj.id);
}


// for pan bars, to reset after hover over effect
function Pan_OutImage(imageObj) {

	if ( imageObj.name == "upb" ) {
		imageObj.src = "images/panbars/up.gif";
	}
	else if ( imageObj.name == "downb" ) {
		imageObj.src = "images/panbars/down.gif";
	}
	else if ( imageObj.name == "leftb" ) {
		imageObj.src = "images/panbars/left.gif";
	}
	else if ( imageObj.name == "rightb" ) {
		imageObj.src = "images/panbars/right.gif";
	}
	else if ( imageObj.name == "nwb" ) {
		nwb1.src = "images/panbars/corner_nw_a.gif";
	}
	else if ( imageObj.name == "neb" ) {
		neb1.src = "images/panbars/corner_ne_a.gif";
	}
	else if ( imageObj.name == "seb" ) {
		seb1.src = "images/panbars/corner_se_a.gif";
	}
	else if ( imageObj.name == "swb" ) {
		swb1.src = "images/panbars/corner_sw_a.gif";
	}
}



function pan(thedirection) {

	dis_anim();

	switch (thedirection)
	{
	case "west":
		easting = String(Math.round(parseInt(easting) - (parseInt(zoom) / 2)));
  		break
	case "east":
		easting = String(Math.round(parseInt(easting) + (parseInt(zoom) / 2)));
  		break
	case "north":
		northing = String(Math.round(parseInt(northing) + (parseInt(zoom) / 3)));
  		break
	case "south":
		northing = String(Math.round(parseInt(northing) - (parseInt(zoom) / 3)));
  		break
	case "nw":
		easting = String(Math.round(parseInt(easting) - (parseInt(zoom) / 2)));
		northing = String(Math.round(parseInt(northing) + (parseInt(zoom) / 3)));
  		break
	case "ne":
		easting = String(Math.round(parseInt(easting) + (parseInt(zoom) / 2)));
		northing = String(Math.round(parseInt(northing) + (parseInt(zoom) / 3)));
  		break
	case "se":
		easting = String(Math.round(parseInt(easting) + (parseInt(zoom) / 2)));
		northing = String(Math.round(parseInt(northing) - (parseInt(zoom) / 3)));
  		break
	case "sw":
		easting = String(Math.round(parseInt(easting) - (parseInt(zoom) / 2)));
		northing = String(Math.round(parseInt(northing) - (parseInt(zoom) / 3)));
  		break
	}

	getMap();
	setmap_labels();
}






// *****************************************************************************************************
// ******************************************* Map Tool events *****************************************
// *****************************************************************************************************



function ChangeRollovercursor(id)
{
  var element = document.getElementById(id);
  if ( element ) {
    element.style.cursor = "pointer";
    element.style.cursor = "hand";
  }
}



// for buttons, hover over effect
function OverImage(imageObj) {

	if ( imageDownID != imageObj.name ) {

		if ( imageObj.name == "zoominb" ) {
			imageObj.src = "images/buttons/zoom_in2.gif";
		}
		else if ( imageObj.name == "zoomoutb" ) {
			imageObj.src = "images/buttons/zoom_out2.gif";
		}
		else if ( imageObj.name == "panb" ) {
			imageObj.src = "images/buttons/pan2.gif";
		}
	}
	ChangeRollovercursor(imageObj.id);
}


// for buttons, to reset after hover over effect
function OutImage(imageObj) {

	if ( imageDownID != imageObj.name ) {

		if ( imageObj.name == "zoominb" ) {
			imageObj.src = "images/buttons/zoom_in.gif";
		}
		else if ( imageObj.name == "zoomoutb" ) {
			imageObj.src = "images/buttons/zoom_out.gif";
		}
		else if ( imageObj.name == "panb" ) {
			imageObj.src = "images/buttons/pan.gif";
		}
	}
}




//called when a map tool button is clicked
function SelectTool(what,imageObjname) {

	if ( imageDownID != imageObjname ) {

		if ( imageObjname == "zoominb" ) {
			zoominb.src = "images/buttons/zoom_in2.gif";
			zoomoutb.src = "images/buttons/zoom_out.gif";
			panb.src = "images/buttons/pan.gif";
			theMap.onmousedown = mouseZoomDown;
			theMap.onmouseup = mouseZoomUp;
			theMap.onmousemove = moveZoomImage;
			toolmode = 1;
		}
		else if ( imageObjname == "zoomoutb" ) {
			zoominb.src = "images/buttons/zoom_in.gif";
			zoomoutb.src = "images/buttons/zoom_out2.gif";
			panb.src = "images/buttons/pan.gif";
			theMap.onmousedown = mouseZoomDown;
			theMap.onmouseup = mouseZoomUp;
			theMap.onmousemove = moveZoomImage;
			toolmode = 2;
		}
		else if ( imageObjname == "panb" ) {
			zoominb.src = "images/buttons/zoom_in.gif";
			zoomoutb.src = "images/buttons/zoom_out.gif";
			panb.src = "images/buttons/pan2.gif";
			theMap.onmousedown = mousePanDown;
			theMap.onmouseup = mousePanUp;
			theMap.onmousemove = moveImage;
			theMap.onmouseout = pan_out;
			toolmode = 3;
		}

		imageDownID = imageObjname;
		change_cursor(what);
	}
}



//called by SelectTool function to set cursor appropriate to map tool
function change_cursor(thevalue) {

	if ((thevalue == "magnify") || (thevalue == "mag_minus") || (thevalue == "cross_rm")) {
		cursor_val = "url(images/" + thevalue + ".cur)";
	} 

  	var element = document.getElementById("theMap");

	if (BrowserName == "Netscape") {				// only IE supports custom url style

		if ((thevalue == "magnify") || (thevalue == "mag_minus") || (thevalue == "cross_rm")) {
			element.style.cursor = "crosshair";
		} else {
    			element.style.cursor = "pointer";
    			element.style.cursor = "hand";
		}
	} else if (thevalue == "hand") {
    		element.style.cursor = "hand";
	} else {
		element.style.cursor = cursor_val;
	}
}






// *****************************************************************************************************
// ***************************************** Map Events ************************************************
// *****************************************************************************************************




function getMap() {

	if (current_layers != "") {
		current_layers = current_layers + ",";
	}
	if (add_chosen == "yes") {
	   theMap.src = serverpath + "getmapimage.asp?theme=" + thetheme + "&layers=" + current_layers + current_background_layers + "&mapwidth=" + mapwidth + "&mapheight=" + mapheight + "&easting=" + easting + "&northing=" + northing + "&zoom=" + zoom + "&SymbolPoints=" + addeasting + "," + addnorthing + "&SymbolPointStyle=red_circle";
	} else {
	   theMap.src = serverpath + "getmapimage.asp?theme=" + thetheme + "&layers=" + current_layers + current_background_layers + "&mapwidth=" + mapwidth + "&mapheight=" + mapheight + "&easting=" + easting + "&northing=" + northing + "&zoom=" + zoom;
	}
	//theMap.src = serverpath + "getmapimage.asp?theme=" + thetheme + "&layers=" + current_layers + current_background_layers + "&mapwidth=" + mapwidth + "&mapheight=" + mapheight + "&easting=" + easting + "&northing=" + northing + "&zoom=" + zoom;
	theMap.oncontextmenu = function() {return false;};
}


function dis_anim() {
	animation_div.innerHTML = "<img border=\"0\" src=\"images/circle_anim2.gif\" alt=\"\">";
}

function anim_off() {
	animation_div.innerHTML = "";
}




function setmap_labels() {

	//set map width lable on map
	lbl_mapwidth.innerHTML = Math.round(zoom);

	//set grid_ref label on map
	var lets = easting.substring(0,1) + northing.substring(0,1);

	switch (lets)
	{
	case "43":
  		gridref = "SK";
  		break
	case "33":
  		gridref = "SJ";
  		break
	case "44":
  		gridref = "SE";
  		break
	case "34":
  		gridref = "SD";
  		break
	default:
  		gridref = "";
	}

	if (gridref != "") {
		gridref += easting.substring(1,4) + northing.substring(1,4);
	} else {
		gridref = "out of area";
	}
	lbl_gridref.innerHTML = gridref;

}

function changebackmap(type) {

	dis_anim();
	if (type == "colour") {
		current_background_layers = colour_background_layers;
	} else if (type == "mono") {
		current_background_layers = mono_background_layers;
	}
	getMap();

}


var mapfunctions = false;
var mouseover = false;
var rX = 0;
var rY = 0;
var mouseX = 0;
var mouseY = 0;
var xcoor = 0;
var ycoor = 0;

function outOfMap() {
	mapfunctions = false;
}

function onMap() {
	mapfunctions = true;
	document.getElementById("theMap").focus();

	if (BrowserName == "Netscape" ) {
     	   theMap.addEventListener('DOMMouseScroll', wheel, false);         	// DOMMouseScroll is for mozilla.
	} else {
		theMap.onmousewheel = wheel;					// IE/Opera.	
	}
}

count_refreshes = 0;
// Move the image back to it's original position
function refreshMap() {

	count_refreshes = count_refreshes + 1;
	if (BrowserName == "Netscape" ) {	

		theMap.style.left=0;
		theMap.style.top=0;
	} else {
		theMap.style.pixelLeft = 0;
		theMap.style.pixelTop = 0;
	}
	anim_off();

	if (count_refreshes == 2) {
		words_wisdom_div.innerHTML = "";
		theMap.height = "300";
		theMap.width = "450";
	}
}




function NoMouseEvent(e) {
	// Do Nothing	
	return false
}


// *****************************************************************************************************
// *************************************** Pan Tool Events *********************************************
// *****************************************************************************************************


var xshift = 0;
var yshift = 0;
var pandrag = "off";


//called when user clicks down on map to pan
function mousePanDown(e) {

	if ( mapfunctions == true && toolmode == 3) {

		if (BrowserName == "Netscape" ) {
			mouseX = e.pageX;
			mouseY = e.pageY;
		} else {
			mouseX = event.clientX - 2;
			mouseY = event.clientY - 2;
			if (BrowserName == "Microsoft Internet Explorer") {		//IE correction
				mouseX += document.body.scrollLeft;
				mouseY += document.body.scrollTop;
			}
		}
		mouseover = true;

		if (BrowserName == "Netscape" ) {
			pleft=0;
			ptop=0;
		} else {
			pleft = theMap.style.pixelLeft;
			ptop = theMap.style.pixelTop;
		}
		xshift = 0;
		yshift = 0;
		xcoor = mouseX;
		ycoor = mouseY;
	}	
	return false
}



//called when user lets go of mouse after clicking down on map to pan or zoom
function mousePanUp(e) {	

	pandrag = "off"
	mouseover = false;
 	PanCoordinates();

}



function moveImage(e) {
		
	if ( mapfunctions == true && toolmode == 3 ) {
		
		if ( mouseover == true ) {
			
			pandrag = "on"

			if (BrowserName == "Netscape" ) {
				mouseX = e.pageX;
				mouseY = e.pageY;
			} else {
				mouseX = event.clientX - 2;
				mouseY = event.clientY - 2;
				if (BrowserName == "Microsoft Internet Explorer") {		//IE correction
					mouseX += document.body.scrollLeft;
					mouseY += document.body.scrollTop;
				}
			}
				
			if (BrowserName == "Netscape" ) {	
				theMap.style.left=pleft+mouseX-xcoor;
				theMap.style.top=ptop+mouseY-ycoor;
			} else {		
				theMap.style.pixelLeft=pleft+mouseX-xcoor;
				theMap.style.pixelTop=ptop+mouseY-ycoor;
			}
			xshift = pleft+mouseX-xcoor;	
			yshift = ptop+mouseY-ycoor;					
			return false
		}
	}
}



function pan_out(e) {

	if ( mouseover == true && toolmode == 3  && pandrag == "on") {

		pandrag = "off"
		mouseover = false;
 		PanCoordinates();
	} 
}



function PanCoordinates() {

	dis_anim();
	// Calculate the current bounds
	var mapX1 = parseInt(easting) - ( parseInt(zoom) / 2 );
	var mapX2 = parseInt(easting) + ( parseInt(zoom) / 2 );
	var mapY1 = parseInt(northing) - ( (parseInt(zoom) / mapwidth * mapheight) / 2 );
	var mapY2 = parseInt(northing) + ( (parseInt(zoom) / mapwidth * mapheight) / 2 );

	var oldCentreX = (mapX2-mapX1)/2+mapX1;
	var oldCentreY = (mapY1-mapY2)/2+mapY2;

	// Calculate the new X and Y
	easting = String(Math.round(oldCentreX - (xshift * parseInt(zoom) / mapwidth)));
	northing = String(Math.round(oldCentreY + (yshift * parseInt(zoom) / mapwidth)));

	getMap();
	setmap_labels();
}




// *****************************************************************************************************
// *************************************** Zoom Tool Events ********************************************
// *****************************************************************************************************


var xcoor2 = 0;
var ycoor2 = 0;
var rectx1 = 0;
var recty1 = 0;
var rectx2 = 0;
var recty2 = 0;


//called when user clicks down on map to pan
function mouseZoomDown(e) {

	if ( mapfunctions == true && (toolmode == 1 || toolmode == 2)) {

		mouseX = 0;
		mouseY = 0;
		xcoor = 0;
		ycoor = 0;

		if (BrowserName == "Netscape" ) {		
			mouseX = e.pageX;
			mouseY = e.pageY;
		} else {	
			mouseX = event.clientX - 2;
			mouseY = event.clientY - 2;
			if (BrowserName == "Microsoft Internet Explorer") {		//IE correction
				mouseX += document.body.scrollLeft;
				mouseY += document.body.scrollTop;
			}
			if ( BrowserName == "Microsoft Internet Explorer" ) {
				theMap.setCapture(); 			//Needed for IE so that map div does not get mixed up with rectangle div - sets all capture events to this element only
			}
		}
		mouseover = true;

		obj = document.getElementById("theMap");
		var oX = obj.offsetLeft;
		var oY = obj.offsetTop;
		oX = oX + obj.parentNode.offsetLeft;		// finds the absolute position of the object
		oY = oY + obj.parentNode.offsetTop;

		xcoor = mouseX - oX;				// finds the relative position of the object
		ycoor = mouseY - oY;

		xcoor2 = 0;
		ycoor2 = 0;
		xshift = 0;
		yshift = 0;

		rectx1 = xcoor;
		recty1 = ycoor;
		rectangle.style.width = 1;
		rectangle.style.height = 1;
		rectangle.style.left = rectx1 + "px";
		rectangle.style.top = recty1 + "px";
		rectangle.style.borderColor = "#000000";
		rectangle.style.position = "absolute"; 
		rectangle.style.borderStyle = "solid"
		rectangle.style.borderWidth = 2;
		rectangle.style.visibility = "visible";
	}	
	return false

}



//called when user lets go of mouse after clicking down on map to pan
function mouseZoomUp(e) {	

	if (BrowserName == "Microsoft Internet Explorer") {
		theMap.releaseCapture();  			//Needed for IE so that map div does not get mixed up with rectangle div - switches off previous capture command
	}
	mouseover = false;
 	ZoomCoordinates();
}





function moveZoomImage(e) {
	

	if ( mapfunctions == true && (toolmode == 1 || toolmode == 2)) {
		
		if ( mouseover == true ) {

			rectx2 = xcoor;
			recty2 = ycoor;
			mouseX = 0;
			mouseY = 0;

			if (BrowserName == "Netscape" ) {		
				mouseX = e.pageX;
				mouseY = e.pageY;
			} else {	
				mouseX = event.clientX - 2;
				mouseY = event.clientY - 2;
				if (BrowserName == "Microsoft Internet Explorer") {		//IE correction
					mouseX += document.body.scrollLeft;
					mouseY += document.body.scrollTop;
				}
			}

			obj = document.getElementById("theMap");
			var oX = obj.offsetLeft;
			var oY = obj.offsetTop;
			oX = oX + obj.parentNode.offsetLeft;		// finds the absolute position of the object
			oY = oY + obj.parentNode.offsetTop;

			xcoor2 = mouseX - oX;				// finds the relative position of the object
			ycoor2 = mouseY - oY;	
			rectx2 = xcoor2;
			recty2 = ycoor2;

			if (xcoor2 > xcoor) { xshift = xcoor2-xcoor; } 
				else { xshift = xcoor-xcoor2; }
			if (ycoor2 > ycoor) { yshift = ycoor2-ycoor; } 
				else { yshift = ycoor-ycoor2; }	
			

			if (xcoor2 > xcoor) {						
				rectangle.style.left = rectx1 + "px";
				rectangle.style.width = rectx2 - rectx1;
			} else {
				rectangle.style.left = rectx2 + "px";
				rectangle.style.width = rectx1 - rectx2;
			}

			if (ycoor2 > ycoor) {						
				rectangle.style.top  = recty1 + "px";
				rectangle.style.height = recty2 - recty1;
			} else {
				rectangle.style.top  = recty2 + "px";
				rectangle.style.height = recty1 - recty2;
			}

			return false
		}
	}
}




function ZoomCoordinates() {

	if (BrowserName == "Microsoft Internet Explorer") {
		theMap.releaseCapture();  			//Needed for IE so that map div does not get mixed up with rectangle div - switches off previous capture command
	}
	rectangle.style.visibility = "hidden";
	dis_anim();

	// Calculate the current bounds
	var mapX1 = parseInt(easting) - ( parseInt(zoom) / 2 );
	var mapY2 = parseInt(northing) + ( (parseInt(zoom) / mapwidth * mapheight) / 2 );

	if ((xcoor2 != xcoor) && (ycoor2 != ycoor) && ((xcoor2 != 0) && (ycoor2 != 0))) {		// if has used marquee zoom

		var newleft = mapX1 + (xcoor * parseInt(zoom) / mapwidth);
		var newright = mapX1 + (xcoor2 * parseInt(zoom) / mapwidth);
		var newtop = mapY2 - (ycoor * parseInt(zoom) / mapwidth);
		var newbottom = mapY2 - (ycoor2 * parseInt(zoom) / mapwidth);

		easting = String(Math.round(newleft + ((newright - newleft)/2)));
		northing = String(Math.round(newtop - ((newtop - newbottom)/2)));

		if (toolmode == 1) {									// zoom in

			if ((xshift / mapwidth) > (yshift / mapheight)) {

				zoom = Math.round(xshift * parseInt(zoom) / mapwidth);
			} else {
				xshift = mapwidth * (yshift / mapheight);
				zoom = Math.round(xshift * parseInt(zoom) / mapwidth);
			}


		} else if (toolmode == 2) {								// zoom out

			var the_ratio =  mapwidth / xshift;
			zoom = Math.round(zoom * the_ratio);

		}	

		if (zoom >= max_zoom) {
			zoom = max_zoom;
		} else if (zoom <= min_zoom) {
			zoom = min_zoom;
		}

	} else {											//if single click zoom

		easting = String(Math.round(mapX1 + (xcoor * parseInt(zoom) / mapwidth)));
		northing = String(Math.round(mapY2 - (ycoor * parseInt(zoom) / mapwidth)));

		if (toolmode == 1) {					//zoom in
			if (zoom > min_zoom) {
				calc_zoom_step('in');
			}

		} else if (toolmode == 2) {				//zoom out
			if (zoom < max_zoom) {
				calc_zoom_step('out');
			}
		}
		if (zoom > max_zoom) {
			zoom = max_zoom;
		} else if (zoom < min_zoom) {
			zoom = min_zoom;
		}
	}

	getMap();
	setmap_labels();
	update_zoom_bar();
}








