/* ***********************************************************
DHTMLMapViewer.js
Javascript for viewer.asp page in Map Viewer
by Howie Sternberg (howies@snet.net)
modified by Brent Thomas (IDFG) to include only essential 
    functions for simplified IDFG MapCenter interface.
--------------------------------------------------------------
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
        - Mar 2005, Stripped down and edited for IDFG MapCenter
************************************************************ */
// Sets form action
function loadPage(s) {
	eval(zMapForm + "reset();")
	eval(zMapForm + "action = '" + s + "'")
	eval(zMapForm + "submit();")
}

// Array of images for inactive (off) zoom, pan and identify tools
var aImg = new Array();
aImg[0] = new Image(16,16);
aImg[2] = new Image(16,16);
aImg[0].src = "images/zoomin_1.gif";
aImg[2].src = "images/pan_1.gif";

// Array of images for active (on) zoom, pan and identify tools
var aImgOn = new Array();
aImgOn[0] = new Image(16,16);
aImgOn[2] = new Image(16,16);
aImgOn[0].src = "images/zoomin_2.gif";
aImgOn[2].src = "images/pan_2.gif";

// 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 objZoomBoxTop
var objZoomBoxBottom
var objZoomBoxLeft
var objZoomBoxRight
var objPoint
var objLoading

// Set mouse event handlers and create style objects
function initMapDHTML() {
	if (!isNN4) {
		document.mapEvent.onmousedown = startmouse;
		document.mapEvent.onmousemove = movemouse;
		document.onmouseup = stopmouse;
	} else {
		document.mapAnchor.document.mapWindow.document.mapEventWrap.onmousedown = startmouse;
		document.mapAnchor.document.mapWindow.document.mapEventWrap.onmousemove = movemouse;
		document.onmouseup = stopmouse;
		setNSEventCapture();
	} 
	window.onresize = onresize	
	objMap = getObject("mapImgWrap");
	objZoomBoxTop = getObject("mapZoomBoxTop");
	objZoomBoxBottom = getObject("mapZoomBoxBottom");
	objZoomBoxLeft = getObject("mapZoomBoxLeft");
	objZoomBoxRight = getObject("mapZoomBoxRight");
	objPoint = getObject("mapPointWrap");
	objLoading = getObject("imgLoading");
}

// 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();")
	objLoading.visibility = "visible";
	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 + ";")
	eval(zMapForm + "submit();")
}

// Set current map tool when user clicks it. Swap tool images.
function setMapTool(n) {
	zMapTool = parseInt(n);
	var s = new String("")
	eval(zMapTools + "zoomin.src = aImg[0].src;")
	eval(zMapTools + "pan.src = aImg[2].src;")
	if (n == 1) eval(zMapTools + "zoomin.src = aImgOn[0].src;")
	if (n == 3) eval(zMapTools + "pan.src = aImgOn[2].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) {
	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 == 5) {
			zMapAction = 14;
		}
	} 
	return false;
}

// onmousemove event handler - change global variable values and move objects
function movemouse(evt) {
	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);							
							}
						}
					}
				}
			} 
		}
		evt.cancelBubble = true;
		return false;
	}
}

// onmouseup event handler - hide objects and call setMapAction()
function stopmouse(evt) {	
	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 == 14) {
				zMinX = zX
				zMaxY = zY
				zMaxX = 0;
				zMinY = 0;
				objPoint.left = (zX - 3);
				objPoint.top = (zY - 3);
				objPoint.visibility = "visible";
			}
			setMapAction(zMapAction)
			objLoading.visibility = "visible";
		}
	}
}

// Set event capture for Navigator 4
function setNSEventCapture() {
	document.mapAnchor.document.mapWindow.document.mapEventWrap.captureEvents(Event.MOUSEDOWN | Event.MOUSEMOVE);
	document.captureEvents(Event.MOUSEUP);
}