/* ***********************************************************
DHTMLMapViewer.js
Javascript for viewer.asp page in Map Viewer
by Howie Sternberg (howies@snet.net)
--------------------------------------------------------------
Browser compatibility - supports NN4, IE, and W3C DOMs. 
Includes DHTML for draggable pan, rubberbanding zoom and select,
and to position a graphic point on map where user clicks to 
identify features.
--------------------------------------------------------------
Dependencies - A version of DHTMLapi.js by Danny Goodman that 
was modified by Howie Sternberg. See DHTMLapi.js for details.
--------------------------------------------------------------
History - May 2004, Initial code
        - Sep 2004, Revised for Map Viewer 2nd Edition
        - April 2005 Modifications by John Buckler
************************************************************ */

// Global variables
var zMapForm = new String("document.Mapform.");
var zMapTools = new String("document.");
var zMapAction = new Number (2);
var zMapTool = new Number (1);
var zMouseButton = new Number(1);
var zUsingMapTool
var zDemoDHTML
zUsingMapTool = Boolean(false);
zDemoDHTML = Boolean(false);
var zScreenOriginX = new Number (0);
var zScreenOriginY = new Number (0);
var zScreenX = new Number (0);
var zScreenY = new Number (0);
var zStartX = new Number (0);
var zStartY = new Number (0);
var zChngX = new Number (0);
var zChngY = new Number (0);
var zX = new Number (0);
var zY = new Number (0);
var zCenX = new Number (0);
var zCenY = new Number (0);
var zMinX = new Number (0);
var zMinY = new Number (0);
var zMaxX = new Number (0);
var zMaxY = new Number (0);
var zImgW = new Number (0);
var zImgH = new Number (0);
var objMap
var objSelBoxTop
var objSelBoxBottom
var objSelBoxLeft
var objSelBoxRight
var objZoomBoxTop
var objZoomBoxBottom
var objZoomBoxLeft
var objZoomBoxRight
var objPoint

// Set mouse event handlers and create style objects
function initMapDHTML() {
	if (!isNN4) {

	//	mapEvent.onmousedown = startmouse;
	//	mapEvent.onmousemove = movemouse;
	//	mapEvent.onmouseup = stopmouse;
	} else {
		document.mapAnchor.document.mapWindow.mapEventWrap.onmousedown = startmouse;
		document.mapAnchor.document.mapWindow.mapEventWrap.onmousemove = movemouse;
		document.onmouseup = stopmouse;
		setNSEventCapture();
	} 
	window.onresize = onresize	
	objMap = getObject("mapImgWrap");
	objSelBoxTop = getObject("mapSelBoxTop");
	objSelBoxBottom = getObject("mapSelBoxBottom");
	objSelBoxLeft = getObject("mapSelBoxLeft");
	objSelBoxRight = getObject("mapSelBoxRight");
	objZoomBoxTop = getObject("mapZoomBoxTop");
	objZoomBoxBottom = getObject("mapZoomBoxBottom");
	objZoomBoxLeft = getObject("mapZoomBoxLeft");
	objZoomBoxRight = getObject("mapZoomBoxRight");
	objPoint = getObject("mapPointWrap");
}

// Set globals to forms for Navigator 4
function initMap() {		
	if (isNN4) {
		zMapTools = "document.mapTools.document.";
		zMapForm = "document.mapFormWrap.document.mapForm.";
	}
}

// Set Map Action - set global variables to form elements and submit mapForm
function setMapAction(n) {
	eval(zMapForm + "reset();")
	eval(zMapForm + "mapaction.value = " + n + ";")
	eval(zMapForm + "maptool.value = " + zMapTool + ";")
	eval(zMapForm + "mapimgx.value = " + zMinX + ";")
	eval(zMapForm + "mapimgy.value = " + zMaxY + ";")
	eval(zMapForm + "mapimgx2.value = " + zMaxX + ";") 
	eval(zMapForm + "mapimgy2.value = " + zMinY + ";")
	if (!zDemoDHTML) {
		eval(zMapForm + "submit();")
	} else {
		window.alert(" mapForm Elements\n\n mapaction: " + n + "\n maptool: " + zMapTool + "\n mapimgX: " + zMinX + "\n mapimgY: " + zMaxY + "\n mapimgX2: " + zMaxX + "\n mapimgY2: " + zMinY + "\n (pixels)")
		window.location = "viewerdhtmldemo.htm"				
	}
}

// Set current map tool when user clicks it. Swap tool images.
function setMapTool(n) {
	zMapTool = parseInt(n);
	var s = new String("")
	var mapscale = new Number(0)
	var activeminscale = new Number(0)
	var activemaxscale = new Number(0)
	var identifyminscale = new Number(0)
	var identifymaxscale = new Number(0)
	s = eval(zMapForm + "mapscale.value")
	mapscale = parseFloat(s)
	s = eval(zMapForm + "activeminscale.value")
	activeminscale = parseFloat(s)
	s = eval(zMapForm + "activemaxscale.value")
	activemaxscale = parseFloat(s)
	s = eval(zMapForm + "identifyminscale.value")
	identifyminscale = parseFloat(s)
	s = eval(zMapForm + "identifymaxscale.value")
	identifymaxscale = parseFloat(s)  
	eval(zMapTools + "zoomin.src = aImg[0].src;")
	eval(zMapTools + "zoomout.src = aImg[1].src;")
	eval(zMapTools + "pan.src = aImg[2].src;")
	if ((activeminscale < mapscale) & (mapscale < activemaxscale)) {
		eval(zMapTools + "select.src = aImg[3].src;")
	}
	if ((identifyminscale < mapscale) & (mapscale < identifymaxscale)) {
		eval(zMapTools + "identify.src = aImg[4].src;")
	}
	if (n == 1) eval(zMapTools + "zoomin.src = aImgOn[0].src;")
	if (n == 2) eval(zMapTools + "zoomout.src = aImgOn[1].src;")
	if (n == 3) eval(zMapTools + "pan.src = aImgOn[2].src;")
	if ((activeminscale < mapscale) & (mapscale < activemaxscale)) {
		if (n == 4) {
			eval(zMapTools + "select.src = aImgOn[3].src;")
		}
	}
	if ((identifyminscale < mapscale) & (mapscale < identifymaxscale)) {
		if (n == 5) {
			eval(zMapTools + "identify.src = aImgOn[4].src;")
		}
	}
}

// Causes extra redraw, but neccessary to reset positions in NN4
function onresize() {
	if (isNN4) {
		eval(zMapForm + "submit();")		
	}
}

// onmousedown event handler - initialize global variables
function startmouse(evt) {
if (Mapform.strTool.value=="SelRec"){
zMapTool = 1
	}
	else if (Mapform.strTool.value=="Zoomrec")
	{
zMapTool = 1
	}
	else
	{
	zMapTool=0
	}

	zMouseButton = (evt) ? evt.which : event.button
	evt = (evt) ? evt : event;
	if (zMouseButton == 1) {
		if (evt.x) {				
			zStartX = evt.x;
			zStartY = evt.y;
		} else {
			zStartX = evt.layerX;
			zStartY = evt.layerY;		
		}
		zUsingMapTool = Boolean(true);
		zX = zStartX;
		zY = zStartY;
		zMinX = 0;
		zMinY = 0;
		zMaxX = 0;
		zMaxY = 0;
		zChngX = 0;
		zChngY = 0;
		zScreenOriginX = evt.screenX - zStartX;
		zScreenOriginY = evt.screenY - zStartY;
		zImgW = getObjectWidth("mapImgWrap");
		zImgH = getObjectHeight("mapImgWrap");
		objPoint.visibility = "hidden";
		if (zMapTool == 1) {
			zMapAction = 10;	
			objZoomBoxTop.width = 0;
			objZoomBoxBottom.width = 0;
			objZoomBoxLeft.height = 0;
			objZoomBoxRight.height = 0;
			objZoomBoxTop.visibility = "visible";
			objZoomBoxBottom.visibility = "visible";
			objZoomBoxLeft.visibility = "visible";
			objZoomBoxRight.visibility = "visible";
		} else if (zMapTool == 2) {
			zMapAction = 11;
			objZoomBoxTop.width = 0;
			objZoomBoxBottom.width = 0;
			objZoomBoxLeft.height = 0;
			objZoomBoxRight.height = 0;
			objZoomBoxTop.visibility = "visible";
			objZoomBoxBottom.visibility = "visible";
			objZoomBoxLeft.visibility = "visible";
			objZoomBoxRight.visibility = "visible";
		} else if (zMapTool == 3) {
			zMapAction = 12;
			zCenX = zStartX;
			zCenY = zStartY;
			zChngX = 0;
			zChngY = 0;
		} else if (zMapTool == 4) {
			zMapAction = 13;
			objSelBoxTop.width = 0;
			objSelBoxBottom.width = 0;
			objSelBoxLeft.height = 0;
			objSelBoxRight.height = 0;
			objSelBoxTop.visibility = "visible";
			objSelBoxBottom.visibility = "visible";
			objSelBoxLeft.visibility = "visible";
			objSelBoxRight.visibility = "visible";
		} else if (zMapTool == 5) {
			zMapAction = 14;
		}
	} 
	return false;
}

// onmousemove event handler - change global variable values and move objects
function movemouse(evt) {
if (Mapform.strTool.value=="SelRec"){
zMapTool = 1
	}
	else if (Mapform.strTool.value=="Zoomrec")
	{
zMapTool = 1
	}
	else
	{
	zMapTool=0
	}
	if (zUsingMapTool) {
		evt = (evt) ? evt : event;
		if (zMouseButton == 1) {
			if (evt.x) {				
				zX = evt.x;
				zY = evt.y;
			} else {
				zX = evt.layerX;
				zY = evt.layerY;		
			}
			if ((zMapAction == 10) || (zMapAction == 11)) {		
				if (zX > zStartX) {
					zMinX = zStartX;
					zMaxX = Math.min(zImgW,zX);
				} else {
					zMinX = Math.max(0,zX);
					zMaxX = zStartX;
				}
				if (zY > zStartY) {
					zMinY = zStartY;
					zMaxY = Math.min(zImgH,zY);
				} else {
					zMinY = Math.max(0,zY);
					zMaxY = zStartY;
				}
				objZoomBoxTop.left = zMinX;
				objZoomBoxTop.top = zMinY;
				objZoomBoxBottom.left = zMinX;
				objZoomBoxBottom.top = Math.min(zMaxY,zImgH - 3);
				objZoomBoxLeft.left = zMinX;
				objZoomBoxLeft.top = zMinY;
				objZoomBoxRight.left = Math.min(zMaxX,zImgW - 3);
				objZoomBoxRight.top = zMinY;
				zChngX = zMaxX - zMinX;
				zChngY = zMaxY - zMinY;
				if (!document.layers) {
					document.zoomMapImgTop.width = zChngX;
					document.zoomMapImgBottom.width = zChngX;
					document.zoomMapImgLeft.height = zChngY;
					document.zoomMapImgRight.height = zChngY;
				} else {
					objZoomBoxTop.clip.width = zChngX;
					objZoomBoxBottom.clip.width = zChngX;
					objZoomBoxLeft.clip.height = zChngY;
					objZoomBoxRight.clip.height = zChngY;		
				}
				//window.status =  "zScreenOriginX=" + zScreenOriginX + ", zScreenOriginY=" + zScreenOriginY + ", screenX=" + evt.screenX + ", screenY=" + evt.screenY + ", startX: " + zStartX + ", startY: " + zStartY + ", x: " + zX + ", y: " + zY + ", chngX: " + zChngX + ", chgnY: " + zChngY
			} else if (zMapAction == 12) {
				if ((evt.screenX) > zScreenOriginX) {
					if ((evt.screenX) < (zScreenOriginX + zImgW)) {
						if ((evt.screenY) > zScreenOriginY) {
							if ((evt.screenY) < (zScreenOriginY + zImgH)) {
								if (zX > zStartX ) {
									zMaxX = Math.min(zImgW,zX);
									zChngX = zMaxX - zStartX;
								} else {
									zChngX = zX - zStartX;
								}
								if (zY > zStartY) {
									zMaxY = Math.min(zImgH,zY);
									zChngY = zMaxY - zStartY;
								} else {
									zChngY = zY - zStartY;
								}
								//window.status =  "zScreenOriginX=" + zScreenOriginX + ", zScreenOriginY=" + zScreenOriginY + ", screenX=" + evt.screenX + ", screenY=" + evt.screenY + ", startX: " + zStartX + ", startY: " + zStartY + ", x: " + zX + ", y: " + zY + ", chngX: " + zChngX + ", chgnY: " + zChngY
								objMap.left = zChngX;
								objMap.top = zChngY;							
								zCenX = ((zImgW / 2) - zChngX);
								zCenY = ((zImgH / 2) - zChngY);							
							}
						}
					}
				}
			} else if (zMapAction == 13) {		
				if (zX > zStartX) {
					zMinX = zStartX;
					zMaxX = Math.min(zImgW,zX);
				} else {
					zMinX = Math.max(0,zX);
					zMaxX = zStartX;
				}
				if (zY > zStartY) {
					zMinY = zStartY;
					zMaxY = Math.min(zImgH,zY);
				} else {
					zMinY = Math.max(0,zY);
					zMaxY = zStartY;
				}
				objSelBoxTop.left = zMinX;
				objSelBoxTop.top = zMinY;
				objSelBoxBottom.left = zMinX;
				objSelBoxBottom.top = Math.min(zMaxY,zImgH - 3);
				objSelBoxLeft.left = zMinX;
				objSelBoxLeft.top = zMinY;
				objSelBoxRight.left = Math.min(zMaxX,zImgW - 3);
				objSelBoxRight.top = zMinY;
				zChngX = zMaxX - zMinX;
				zChngY = zMaxY - zMinY;
				if (!document.layers) {
					document.selMapImgTop.width = zChngX;
					document.selMapImgBottom.width = zChngX;
					document.selMapImgLeft.height = zChngY;
					document.selMapImgRight.height = zChngY;
				} else {
					objSelBoxTop.clip.width = zChngX;
					objSelBoxBottom.clip.width = zChngX;
					objSelBoxLeft.clip.height = zChngY;
					objSelBoxRight.clip.height = zChngY;		
				}
				//window.status =  "zScreenOriginX=" + zScreenOriginX + ", zScreenOriginY=" + zScreenOriginY + ", screenX=" + evt.screenX + ", screenY=" + evt.screenY + ", startX: " + zStartX + ", startY: " + zStartY + ", x: " + zX + ", y: " + zY + ", chngX: " + zChngX + ", chgnY: " + zChngY	
			}
		}
		evt.cancelBubble = true;
		return false;
	}
}

// onmouseup event handler - hide objects and call setMapAction()
function stopmouse(evt) {	
if (Mapform.strTool.value=="SelRec"){
zMapTool = 1
	}
	else if (Mapform.strTool.value=="Zoomrec")
	{
zMapTool = 1
	}
	else
	{
	zMapTool=0
	}
	if (zUsingMapTool) {
		evt = (evt) ? evt : event;
		if (zMouseButton == 1) {
			zUsingMapTool = Boolean(false);
			if ((zMapAction == 10) || (zMapAction == 11)) {
				if ((zChngX > 5) && (zChngY > 5)) {
					objZoomBoxTop.visibility = "hidden";
					objZoomBoxBottom.visibility = "hidden";
					objZoomBoxLeft.visibility = "hidden";
					objZoomBoxRight.visibility = "hidden";
					objZoomBoxTop.top = -3;
					objZoomBoxBottom.top = -3;
					objZoomBoxLeft.left = -3;
					objZoomBoxRight.left = -3;
				} else {
					zMinX = zX;
					zMaxY = zY;
					zMaxX = 0;
					zMinY = 0;
					objZoomBoxTop.visibility = "hidden";
					objZoomBoxBottom.visibility = "hidden";
					objZoomBoxLeft.visibility = "hidden";
					objZoomBoxRight.visibility = "hidden";
					objZoomBoxTop.top = -3;
					objZoomBoxBottom.top = -3;
					objZoomBoxLeft.left = -3;
					objZoomBoxRight.left = -3;
				}
			} else if (zMapAction == 12) {
				zMinX = zCenX
				zMaxY = zCenY
				zMaxX = 0;
				zMinY = 0;
			} else if (zMapAction == 13) {
				if ((zChngX > 4) && (zChngY > 4)) {
					objSelBoxTop.visibility = "hidden";
					objSelBoxBottom.visibility = "hidden";
					objSelBoxLeft.visibility = "hidden";
					objSelBoxRight.visibility = "hidden";
					objSelBoxTop.top = -3;
					objSelBoxBottom.top = -3;
					objSelBoxLeft.left = -3;
					objSelBoxRight.left = -3;
				} else {
					zMinX = zX
					zMaxY = zY
					zMaxX = 0;
					zMinY = 0;
					objSelBoxTop.visibility = "hidden";
					objSelBoxBottom.visibility = "hidden";
					objSelBoxLeft.visibility = "hidden";
					objSelBoxRight.visibility = "hidden";
					objSelBoxTop.top = -3;
					objSelBoxBottom.top = -3;
					objSelBoxLeft.left = -3;
					objSelBoxRight.left = -3;
				}
			} else if (zMapAction == 14) {
				zMinX = zX
				zMaxY = zY
				zMaxX = 0;
				zMinY = 0;
				objPoint.left = (zX - 3);
				objPoint.top = (zY - 3);
				objPoint.visibility = "visible";
			}
		//	setMapAction(zMapAction)
		
			Mapform.recminx.value = zMinX;
			Mapform.recminy.value = zMinY;
			Mapform.recmaxx.value = zMaxX;
			Mapform.recmaxy.value = zMaxY;
		}
	}
}

// Set event capture for Navigator 4
function setNSEventCapture() {
	document.mapAnchor.document.mapWindow.mapEventWrap.captureEvents(Event.MOUSEDOWN | Event.MOUSEMOVE);
	document.captureEvents(Event.MOUSEUP);
}
	
	