// ----------------------------------------------------------------
//     				   ArcWeb Services Site Starter Client
// ----------------------------------------------------------------
// Purpose:  Manages "active" navigation functionality.  
//           + Manages map coordinate logic.
//           + Uses DHTML to produce rubber-banding effect 
//             when user zooms in or out.  This is handled
//             by the zoomBox class.
// ----------------------------------------------------------------
// Notes:		
// -------------------------------------------------------------------

// The following variables are global to the page.
	// These vars reference HTML tags in the page whose
	// values may be read or set dynamically.
    var m_radZoomIn; //Mouse function radio buttons
    var m_radIdentify;
    var m_radZoomOut;
    var m_radPan;
    var m_radRecenter;
    var m_txtXCoord;
    var m_txtYCoord;
    var m_imgLoading;
    var m_imgMapCanvas;
    var m_divMapBorder;
    var m_divZoomBox;
	var m_divMapTools;
	var m_divNorth;
	var m_divSouth;
	var m_divEast;
	var m_divWest;
	var m_CurX;   //Mouse position
	var m_CurY;
	var m_Vscroll_Pos = 0;  //used to check user's scroll pos
	var m_Hscroll_Pos = 0;
    var	m_hvMinX;  //Current extent
    var	m_hvMinY;
    var	m_hvMaxX;
    var	m_hvMaxY;
    var m_hvOrigMinX; //Original extent
    var m_hvOrigMinY;
    var m_hvOrigMaxX;
    var m_hvOrigMaxY;
    var m_ActiveLayer; 
    var m_hCurLevel;  //zoom bar level
	var m_hvMapPage;
	var mapScale;
	var sFactor;
	var Type_Request;   // used to identify different types of request to the server
	                    // "M" = new map extent or size
	                    // "HM" = highlighted map
	                    // "SQ" = spatial query
	                    // "MSQ" = spatial query with recentering
	
	//used for dyanmic pan 
	var m_divMap;
	var m_MouseButton;
	var m_ImgCenX = new Number (0);		// map center X coord resulting from draggable pan (pixels)
	var m_ImgCenY = new Number (0);		// map center Y coord resulting from draggable pan (pixels)
	var m_ImgStartX = new Number (0);	// mouse down X coord (pixels)
	var m_ImgStartY = new Number (0);	// mouse down Y coord (pixels)
	var m_ImgDeltaX = new Number (0);	// horizontal distance mouse moved (pixels)
	var m_ImgDeltaY = new Number (0);	// vertical distance mouse moved (pixels)
	var m_ImgScreenX = new Number (0);	// X (left) position of map image in screen space (screen pixels)
	var m_ImgScreenY = new Number (0);	// Y (top) position of map image in screen space (screen pixels)
	var m_ImgX = new Number (0);			// current mouse event X coord (pixels)
	var m_ImgY = new Number (0);			// current mouse event Y coord (pixels)	
	var m_ImgW = new Number (0);			// image width (pixels)		
	var m_ImgH = new Number (0);			// image height (pixels)
	var m_MapUnits = new String ("");		// map units
	var singleClick = "false";				//Single Click Zoom 'Zach added
	var m_hvPanning;						//Sets Panning State 'Zach added
	var m_hvIdentify = "false";
	var m_hvCurTab;

	// These vars represent javascript classes that will
	// handle logic.
    var m_mapViewer;  // Object of type map.  Handles map coordinate management.

    var m_zbxZoom;      // Object of type zoombox.  Handles drawing the zoombox.  
				        // Operates entirely within page coordinates and has no 
				        // awareness of the map space or even the image that 
				        // represents the map on the page.

    var m_iToolMode;    // Indicates the currently selected tool, where
				        //				+ Identify  = 1
				        //				+ Zoom-in = 2	
				        //				+ Zoom-out = 3
					    //				+ Pan = 4		
					    //				+ Recenter = 5			        	

	var m_sClientBrowserType;	// Possible values: "IE", "Netscape"
	var m_sClientPlatform;		// Possible values: "Windows","Mac"
    
    		           // The array that stores the level extent widths				  
	//Orig. Blueviewer settings: var m_ExtentWidths = new Array(0.005, 0.015, 0.035, 0.1, 0.3, 0.75, 2, 6, 10, 30, 110);
    var m_ExtentWidths = new Array(300, 600, 3200, 70000, 230000);

	var m_lTimerID = 1; // used only for hiding the "Wait" image for Netscape 6.x

	// Determine browser type and platform.

	if (navigator.appName.indexOf("Netscape")>=0) {
		m_sClientBrowserType = 'Netscape';
	} else if (navigator.appName.indexOf('Microsoft') >=0) {
		m_sClientBrowserType = 'IE';
	} else {
	}

	if (navigator.userAgent.indexOf("Win") >= 0) {
		m_sClientPlatform = 'Windows';
	} else if (navigator.platform.indexOf("Mac") >= 0) {
		m_sClientPlatform = 'Mac';
	} else {
	}
    

// *******************************************************************
// *********************** STARTUP FUNCTION **************************
// *******************************************************************


function startUp() {
document.getElementById("imgLoading").style.visibility = "visible";

// Purpose: Fires when the page first loads.  


		// Find the HTML tags that will be used throughout the
		// page.
	m_imgMapCanvas = document.getElementById("imgMapCanvas");
    m_imgLoading = document.getElementById("imgLoading");
	m_divZoomBox = document.getElementById("divZoomBox");
	m_divMapBorder = document.getElementById("divMapBorder");
  	m_divNorth = document.getElementById("divNorth");
  	m_divSouth = document.getElementById("divSouth");
  	m_divEast = document.getElementById("divEast");
  	m_divWest = document.getElementById("divWest");
  	m_divMapTools = document.getElementById("divMapTools");
	m_hvMinX = document.getElementById("hvMinX").value;
	m_hvMinY = document.getElementById("hvMinY").value;
	m_hvMaxX = document.getElementById("hvMaxX").value;
	m_hvMaxY = document.getElementById("hvMaxY").value;
	m_hvOrigMinX = document.getElementById("hvOrigMinX");
	m_hvOrigMinY = document.getElementById("hvOrigMinY");
	m_hvOrigMaxX = document.getElementById("hvOrigMaxX");
	m_hvOrigMaxY = document.getElementById("hvOrigMaxY");
	m_hvMapPage = document.getElementById("hvMapPage");
	m_CurX = document.getElementById("hvCurX");
	m_CurY = document.getElementById("hvCurY");
	m_ActiveLayer = document.getElementById("hActiveLayer");
	m_hCurLevel = document.getElementById("hCurLevel");
	m_divRecenter = document.getElementById("Recenter");
	m_divExplanation = document.getElementById("Explanation");
	m_misAlignExpl = document.getElementById("MisalignmentExpl");
	m_hvToolMode = document.getElementById("hvToolMode"); 
	m_hvMapPage = document.getElementById("hvMapPage"); //this is the display page
	
	//dynamic pan mode
	m_hvPanning = document.getElementById("hvPanning"); 
	m_divMap = document.getElementById("divMap");
	m_ImgW = m_imgMapCanvas.width;
	m_ImgH = m_imgMapCanvas.height;
	m_MapUnits = document.getElementById("hvMapUnits");
	
	var imgID;
	if (document.getElementById("hvCurTab").value == "Results" || document.getElementById("hvResults").value == "True" ) {
	    imgID = "imgResults";  
	} else if (document.getElementById("hvCurTab").value == "Search") {
	    imgID = "imgSearch";  
	} else if (document.getElementById("hvCurTab").value == "Layers") {
	    imgID = "imgLayers";  
	} else if (document.getElementById("hvCurTab").value == "Legend") {
	    imgID = "imgLegend";  
	} else if (document.getElementById("hvCurTab").value == "Help") {
	    imgID = "imgHelp";
	}
	    
	tabChange(imgID);

	// make sure image size and icon are updated
    var sSize = document.getElementById("hvImageSize").value;
	if (sSize == "SMALL") {
		document.getElementById("SmallDisplay").src = "Images/SmallDisplayOn.gif";
        document.getElementById("MediumDisplay").src = "Images/MediumDisplayOff.gif";
	} else {
		document.getElementById("SmallDisplay").src = "Images/SmallDisplayOff.gif";
        document.getElementById("MediumDisplay").src = "Images/MediumDisplayOn.gif";
	}


//showWaitImage();
hideWaitLoad();


		// Create a map coordinate manager.
	m_mapViewer = new map(m_divMap.offsetLeft,
  						  m_divMap.offsetTop,
						  m_imgMapCanvas.width,	
						  m_imgMapCanvas.height,
						  m_ExtentWidths,
						  new rect(m_hvMinX, m_hvMinY, m_hvMaxX, m_hvMaxY)
						  );

//This is scary... If the map looses M_mapViewer it auto refreshes itself...	
if (m_mapViewer.value = null) {
window.location.reload(false);
}
    

		// Create a zoom box.
    m_zbxZoom = new zoomBox(m_divZoomBox);
    m_divZoomBox.style.visibility = 'hidden';
   
		// Initialize the tool mode. 
	handleToolClick(returnActiveTool(m_hvToolMode.value));
		
		// Assign custom event handlers to mousedown, mousemove, 
		// and mouseup.
	if (m_sClientBrowserType == 'Netscape') {
		document.captureEvents(Event.MOUSEDOWN | Event.MOUSEMOVE | Event.MOUSEUP);
	}
	document.onmousedown = handleMouseDown;
	document.onmousemove = handleMouseMove;
	document.onmouseup = handleMouseUp;
	
	//Restore Identify marker (very small zoom box) if one exists
	var newSize = document.getElementById("hvImgSizeChanged").value;
//	if (newSize == "N" && m_hvToolMode.value == 1) { //&& document.frmParams.hCurLevel.value < 5 && document.frmParams.optRecenter[0].checked == 0) {
//		var m_divZoomBox = divZoomBox;
//		m_divZoomBox.style.left = m_CurX.value;
//		m_divZoomBox.style.top = m_CurY.value
//		//m_divZoomBox.style.width = ;
//		//m_divZoomBox.style.height = 4;
//		m_divZoomBox.style.visibility = 'visible';	
//	}	

	document.getElementById("hvImgSizeChanged").value = "N"	
	
	// Assign an event handler to the m_imgMapCanvas onload event.
    
            sFactor = (m_hvMaxX - m_hvMinX);
            sFactor = sFactor / m_ImgW;
            //SFactor = # of Feet Per Pixel (Assuming screen is 96dpi)
            sFactor = sFactor * 96 * 12.0; //Number of Meters per Pixel
            
            var xSize = document.getElementById("hvImageSize").value;
            if (xSize == "SMALL") {
            mapScale = sFactor;
            }else{
            mapScale = (sFactor / 0.726);
        	}
        	
	if (mapScale > 475000) {
	m_hCurLevel.value = 5;
	updateZoomLevel(m_hCurLevel.value);
	
	}
	
	if (mapScale <= 400000 && mapScale > 157500) {
	m_hCurLevel.value = 4;
	updateZoomLevel(m_hCurLevel.value);	
	}
	
	if (mapScale <= 157499 && mapScale > 78556) {
	m_hCurLevel.value = 3;
	updateZoomLevel(m_hCurLevel.value);	
	}
	
	if (mapScale <= 78555 && mapScale > 17021) {
	m_hCurLevel.value = 2
	updateZoomLevel(m_hCurLevel.value);		
	}
	
	if (mapScale < 17020) {
	m_hCurLevel.value = 1;
	updateZoomLevel(m_hCurLevel.value);		
	}	


    	
}
// *******************************************************************
// *********************** EVENT HANDLERS  ***************************
// *******************************************************************

function handleMouseDown(evt) {
// Purpose:  Any time a mouse button is depressed, this function
//           is given the opportunity to respond to the event.
//
//           For the purposes of the map, we are only interested
//           in the click if it happened within the map area, so 
//           an initial check kicks us out of the function if the
//           click has not occurred in the map area.
//
//           If the click is over the map, then -- depending on
//           the tool mode -- either the zoombox must be started
//           or a recenter must be performed.


	// Get event coordinates by browser-specific means.
	var eventX;
	var eventY;
	
	if (m_sClientBrowserType == 'Netscape') {
		eventX = evt.clientX;
		eventY = evt.clientY;
	} else {
		eventX = event.clientX;
		eventY = event.clientY;
	}
	

	// Adjust for any vertical or horizontal scrolling done by user
	if (m_sClientBrowserType == 'IE') {
		m_VScroll_Pos = document.body.scrollTop;
		m_HScroll_Pos = document.body.scrollLeft;
	} else {
		m_VScroll_Pos = window.pageYOffset;
		m_HScroll_Pos = window.pageXOffset;
	}	
	
	// Add any user scroll to eventY
		eventY = eventY + m_VScroll_Pos;
		eventX = eventX + m_HScroll_Pos;
		
	//Add Loading Message To Mouse Click 
	if (document.getElementById("hvCurTab").value == "Search"){
	    if (document.getElementById("hvImageSize").value == "SMALL") {
	    //Loads Wait Image on server side button click
	        if ((eventX >= 747 && eventX <= 797 && eventY >= 275 && eventY <= 294) || (eventX >= 706 && eventX <= 798 && eventY >= 303 && eventY <= 322) || (eventX >= 719 && eventX <= 810 && eventY >= 375 && eventY <= 394) || (eventX >= 695 && eventX <= 785 && eventY >= 397 && eventY <= 415)) { 
	        showWaitImage();
	        }
	    }else{
	        //Large Map
	        if ((eventX >= 914 && eventX <= 964 && eventY >= 275 && eventY <= 294) || (eventX >= 873 && eventX <= 966 && eventY >= 304 && eventY <= 322) || (eventX >= 884 && eventX <= 974 && eventY >= 375 && eventY <= 393) || (eventX >= 859 && eventX <= 951 && eventY >= 397 && eventY <= 415)) { 
	        showWaitImage();
	        }
	    }
   }
	
		// Check to see if click is over map
	if (!(m_mapViewer.isEventOverMap(eventX, eventY))) {
	m_hvPanning = "False"; //Click is not on map 'Zach added
		return;	
	}
	m_hvPanning = "True"; //Click is on map 'Zach Added
	
	//Make sure it was the left mouse button
	m_MouseButton = (evt) ? evt.which : event.button
	evt = (evt) ? evt : event;
	if (m_MouseButton ==1) {
	
		//dynamic pan mode
		m_ImgStartX = getEventX(evt);
		m_ImgStartY = getEventY(evt);
		m_ImgX = m_ImgStartX;
		m_ImgY = m_ImgStartY;
		m_ImgScreenX = eventX - m_ImgStartX;
		m_ImgScreenY = eventY - m_ImgStartY;
	

	    switch(m_iToolMode) {
	
	        case 1: // identify mode -- execute a spatial query
	            var ptUserClick = m_mapViewer.toMapPoint(eventX, eventY); 
			    document.getElementById("hXParam").value = ptUserClick.x;
			    document.getElementById("hYParam").value = ptUserClick.y;
			    m_hvIdentify = "true";
			    document.getElementById("hvIdentify").value = m_hvIdentify;
					//Don't do navigational stuff if too far away from county border
					
						m_CurX.value = eventX;
				        m_CurY.value = eventY;
				        m_zbxZoom.show();
				        m_zbxZoom.start(eventX-2, eventY-2);
				        m_zbxZoom.update(eventX-2, eventY-2);
				        m_zbxZoom.stop(); 
	
			    var inCountyExtent = false;	
			    if (ptUserClick.x >= 400302.7 && ptUserClick.x <= 553501.6 && ptUserClick.y >= 97740.3 && ptUserClick.y <= 265904.7) {
				    inCountyExtent = true;
			    }

		        if (inCountyExtent) {	
			        if (document.frmParams.hCurLevel.value < 5) { 
				        Type_Request="SQ";  // a spatial query from click on map -- WITHOUT RECENTERING
				        document.getElementById("hTypeRequest").value = "SQ";
				    }    
			   } 
			   
			  break;
			   
	
		    case 2: // zoom in mode
			    if ((m_sClientBrowserType == 'IE') && (m_sClientPlatform == 'Windows')) {
	  		// For IE, a call to "setCapture" is made to ensure that
				// new IE dragging events do not interfere with capturing 
				// the mousemove events -- effectively, this turns off 
				// drag and drop events temporarily.
				m_imgMapCanvas.setCapture(); 
			    }
			    m_zbxZoom.show();
			    m_zbxZoom.start(eventX, eventY);
			    break;
			
		    case 3: // zoom out mode
			    if ((m_sClientBrowserType == 'IE') && (m_sClientPlatform == 'Windows')) {
	  		// For IE, a call to "setCapture" is made to ensure that
				// new IE dragging events do not interfere with capturing 
				// the mousemove events -- effectively, this turns off 
				// drag and drop events temporarily.
				m_imgMapCanvas.setCapture(); 
			    }
			    m_zbxZoom.show();
			    m_zbxZoom.start(eventX, eventY);
			    break;	
			
		    case 4: // dynamic pan mode
			  	
			// For IE, a call to "setCapture" is made to ensure that
			// new IE dragging events do not interfere with capturing 
			// the mousemove events -- effectively, this turns off 
			// drag and drop events temporarily.
			if ((m_sClientBrowserType == 'IE') && (m_sClientPlatform == 'Windows')) {
			    m_imgMapCanvas.setCapture(); 
			    }
			    m_ImgCenX = m_ImgStartX;
			    m_ImgCenY = m_ImgStartY;
			    m_ImgDeltaX = 0;
			    m_ImgDeltaY = 0;
			    break;
	}
  } // end of mouse1
	
}

function handleMouseMove(evt) {
// Purpose:  Any time the mouse moves anywhere on the document, 
//           this function is given the opportunity to respond to 
//           the event.

	//dynamic pan mode
	m_MouseButton = (evt) ? evt.which : event.button
	evt = (evt) ? evt : event;
	

	// Get event coordinates by browser-specific means.
	var eventX;
	var eventY;

	if (m_sClientBrowserType == 'Netscape') {
		eventX = evt.clientX;
		eventY = evt.clientY;
	} else {
		eventX = event.clientX;
		eventY = event.clientY;
	}

    // If the mouse isn't currently over the map, we
    // have nothing to do.
    
	if (!(m_mapViewer.isEventOverMap(eventX, eventY))) {
	return;
	}
	
		var mouseMoveEvt = (m_mapViewer.toMapPoint(eventX, eventY));
       px9 = mouseMoveEvt.x;
	   py9 = mouseMoveEvt.y;
	    convertSP(px9,py9);
	
	//reportCoords(m_mapViewer.toMapPoint(eventX, eventY)); // update the textbox to reflect
	
	if (m_MouseButton==1) {
	
	if (m_iToolMode ==1) { //If current tool is identify, their is no movement allowed!
		if (m_zbxZoom.isInProgress){
			return;
		}
	} 																																										 // the current coordinates.
		// If the current tool is zoom in and a zoombox is in progress, update
		// the zoom box.
		if (m_iToolMode == 2 || m_iToolMode == 3) { //We're zooming in or out here 'Zach Added
			if (m_zbxZoom.isInProgress) {
				m_zbxZoom.update(eventX, eventY);
			}	
			
		}
		
		//dynamic pan mode
		if ((m_iToolMode == 4) && (m_hvPanning == "True")) { //We're panning here 'Zach Added
			if ((evt.x) > m_ImgScreenX) {
				if ((evt.x) < (m_ImgScreenX + m_ImgW + m_divMap.offsetLeft)) {
					if ((evt.y) > m_ImgScreenY) {
						if ((evt.y) < (m_ImgScreenY + m_ImgH + m_divMap.offsetTop)) {			
							if (evt.x) {				
								m_ImgX = evt.x;
								m_ImgY = evt.y;
							} else {
								m_ImgX = evt.layerX;
								m_ImgY = evt.layerY;		
							}
						}
					}
				}
			}		  	
			//window.status="m_ImgX= " + m_ImgX + " m_ImgY= " + m_ImgY + "|" + eventX + "," + eventY
			
				if ((evt.x) > m_ImgScreenX) {
					if ((evt.x) < (m_ImgScreenX + m_ImgW + m_divMap.offsetLeft)) {
						if ((evt.y) > m_ImgScreenY) {
							if ((evt.y) < (m_ImgScreenY + m_ImgH + m_divMap.offsetTop)) {
								if (m_ImgX > m_ImgStartX ) {
									zImgMaxX = Math.min(m_ImgW + m_divMap.offsetLeft ,m_ImgX);
									m_ImgDeltaX = zImgMaxX - m_ImgStartX;
								} else {
									m_ImgDeltaX = m_ImgX - m_ImgStartX;
								}
								if (m_ImgY > m_ImgStartY) {
									zImgMaxY = Math.min(m_ImgH + m_divMap.offsetTop,m_ImgY);
									m_ImgDeltaY = zImgMaxY - m_ImgStartY;
								} else {
									m_ImgDeltaY = m_ImgY - m_ImgStartY;
								}
					//window.status="m_ImgX= " + m_ImgX + " m_ImgY= " + m_ImgY + " m_ImgDeltaX,m_ImgDeltaY= " + m_ImgDeltaX + "," + m_ImgDeltaY;
					 			
								moveObject(m_imgMapCanvas.style,m_ImgDeltaX,m_ImgDeltaY);				
								m_ImgCenX = ((m_ImgW / 2) - m_ImgDeltaX);
								m_ImgCenY = ((m_ImgH / 2) - m_ImgDeltaY);
								zMapX = getMapCoordX(m_ImgCenX,m_ImgW,m_hvMinX,m_hvMaxX,m_MapUnits);	
								zMapY = getMapCoordY(m_ImgCenY,m_ImgH,m_hvMinY,m_hvMaxY,m_MapUnits);
	                 
	                // window.status="m_ImgX= " + m_ImgX + " m_ImgY= " + m_ImgY + "|" + m_ImgCenX + "," + m_ImgCenY + " m_ImgDeltaX,m_ImgDeltaY= " + m_ImgDeltaX + "," + m_ImgDeltaY;			 
					//window.status=zMapX + "," + zMapY + " | " + m_ImgCenX + "," + m_ImgCenY + " | " + m_ImgW + "," + m_ImgH + " | " + m_hvMinX.value + ","  + m_hvMinY.value + " | " + m_hvMaxX.value + "," + m_hvMaxY.value + " | " + m_MapUnits;
								
					// map coordinates for center of map while dragging image to pan map
					   //window.status = "Center at X: " + zMapX + " Y: " + zMapY + " (" + m_MapUnits +")";
					  // window.status = "In Map X:= " + (evt.x) + ", Y:= " + (evt.y) 
	
							}
						}
					}
				}
						
						
		}
					
  
	}
      evt.cancelBubble = true; 
      
}

function handleMouseUp(evt) {
	// Purpose:  Any time a mouse button is released, this function is 
	//					 given the opportunity to respond to the event.

	// Get event coordinates by browser-specific means.

	var eventX;
	var eventY;
	var mapLimit;
	var Type_Request;
	Type_Request = "";
	

	if (m_mapViewer.isEventOverMap(eventX, eventY)){  //Automates an overpull on pan 'Zach added
	mapLimit = "True"
	}else{
	mapLimit = "False"
	}
	    
	if (m_sClientBrowserType == 'Netscape') {
		eventX = evt.clientX;
		eventY = evt.clientY;
	} else {
		eventX = event.clientX;
		eventY = event.clientY;
	}

	if (m_sClientBrowserType == 'IE') {
	
	 //Check to see if user clicked on 'hidden pixel'
	 var shiftPressed=0;
	 shiftPressed=event.shiftKey;
	 if (shiftPressed != 0 && eventX <= 10 && eventX >= 0 && eventY <= 10 && eventY >= 0) {
	 openVersion();
	 } 
	 }

    // If the mouse isn't currently over the map, we
    // have nothing to do.
	if (!(m_mapViewer.isEventOverMap(eventX, eventY))) {
		if ((m_iToolMode == 4 || m_iToolMode == 3 || m_iToolMode == 2) && (mapLimit == "True") && (m_hvPanning == "True")) { //Check were click was ended and pan's map accordingly 'Zach added
			if (eventY <= 77) {
				moveSouth();
				return; 
			}
				if (eventY >= m_imgMapCanvas.height ) {
					moveNorth();
					return;
				}
					if (eventX <= 121) {
						moveEast();
						return;
					}
						if (eventX >= m_imgMapCanvas.width) {
							moveWest();
							return;
						}
		}	
		return;
	}
	if (m_MouseButton==1) {
	
			if (m_iToolMode == 1) {
				Type_Request = "SQ"; //Set's the on up event to send a identify click...
			}
	    

		if (m_iToolMode == 2 || m_iToolMode == 3) { //zooming in or out
			Type_Request = "M";
			// If a ZoomBox is not in progress, we've got nothing
			// to do.
			if (!(m_zbxZoom.isInProgress())) {
			return;
			}
			//window.status = "toolmode is 1, zoom in progress";
	
			// Release the capture that was set in the mousedown
			// handler (again, this is something that we have to do because
			// of drag events in IE).
			if ((m_sClientBrowserType == 'IE') && (m_sClientPlatform == 'Windows')) {
			 	document.releaseCapture();
			 	m_zbxZoom.stop();
		    }
			// Stop the current effect.
			

			// If the width of the zoom box is less than five pixels,
			// treat is as a single click and zoom in one map level.
			// Otherwise, set the extent to the zoom box.
			  
			if ((Math.abs(m_zbxZoom.getStartX() - m_zbxZoom.getEndX()) < 5) && (Math.abs(m_zbxZoom.getStartY() - m_zbxZoom.getEndY()) < 5) && m_iToolMode == 2)  {	//zoom-in 
				var ptUserClick = m_mapViewer.toMapPoint(m_zbxZoom.getStartX(), m_zbxZoom.getStartY());
				
				var mapWidthsimple; //Max extent on ZoomIn 'Zach added
				mapWidthsimple = (m_hvMaxX - m_hvMinX);
					if (mapWidthsimple <= 300){
					}else{
						m_mapViewer.zoom(0.5); //Zoom In on single click 'Zach added
						m_mapViewer.recenter(ptUserClick);
						singleClick = "True"; //User did not drag a box' 
					}			
			
	      
			} else if ((Math.abs(m_zbxZoom.getStartX() - m_zbxZoom.getEndX()) < 5) && (Math.abs(m_zbxZoom.getStartY() - m_zbxZoom.getEndY()) < 5) && m_iToolMode == 3)  {	//zoom-out	
				var ptUserClick = m_mapViewer.toMapPoint(m_zbxZoom.getStartX(), m_zbxZoom.getStartY());
				
				var mapWidthsimple; //Min extend on ZoomOut 'Zach added
				mapWidthsimple = (m_hvMaxX - m_hvMinX);	
					if (mapWidthsimple >= 125000) {
						ZoomToLevel(5);
					return;
					}else if (mapWidthsimple < 125000) { //Don't know what I'm checking this?
						m_mapViewer.zoom(1.5) //Zoom Out on single click 'Zach added
						m_mapViewer.recenter(ptUserClick);
						singleClick = "True"
					}
				
			} else {
  				borderWidth = 0;
  				if (m_sClientBrowserType == 'Netscape') {
					borderWidth = 4; // 2 times border width
				}
				var ptStart = m_mapViewer.toMapPoint(m_zbxZoom.getStartX()+borderWidth, m_zbxZoom.getStartY()+borderWidth);
				var ptEnd   = m_mapViewer.toMapPoint(m_zbxZoom.getEndX()+borderWidth, m_zbxZoom.getEndY()+borderWidth);
				
				if (m_iToolMode == 2 && singleClick == 'false') {  //Zoom-in Box
				    if (m_mapViewer.isEventOverMap(eventX, eventY)){
				    m_mapViewer.setExtent(new rect(ptStart.x,ptStart.y,ptEnd.x,ptEnd.y));
				    }
			    }
			    
			    if (m_iToolMode == 3) {  //Zoom-out Box
			        //adjust extent proportionately to height of zoom box
			        // Calculate the proportion of the height of current map rectangle to the height of zoom box map rectangle
			        var mRect = new rect(m_hvMinX, m_hvMinY, m_hvMaxX, m_hvMaxY);
			        var zRect = new rect(ptStart.x,ptStart.y,ptEnd.x,ptEnd.y);
			        
			        var mTop = mRect.getTop(); //Top of Map
			        var mBottom = mRect.getBottom(); //Bottom of Map
			        var mRight = mRect.getRight(); //Right Side of Map
			        var mLeft = mRect.getLeft(); //Left Side of Map
			        var zTop = zRect.getTop(); //Top of Zoom Box
			        //var zBottom = zRect.getBottom(); //Bottom of Zoom Box
			        var zRight = zRect.getRight(); //Right Side of Zoom Box
			        //var zLeft = zRect.getLeft(); //Left Side of Zoom Box
			        
			        var xDistance = (mRight - mLeft); //Total Width of Map
			        var yDistance = (mTop - mBottom); //Total Height of Map 
			        
			        var yRatio = (zTop / mTop); //Height Ratio of Box to Map
			        var xRatio = (zRight / mRight); //Width Ratio of Box to Map
			        
			        var xAdd = xRatio * xDistance; //Width Spacing to Add to Map Extent
			        var yAdd = yRatio * yDistance; //Height Spacing to Add to Map Extent 
			        
			        var eLeft = mLeft - xAdd; //Final X-Min Coordinate
			        var eRight = mRight + xAdd; //Final X-Max Coordinate
			        var eTop = mTop + yAdd; //Final Y-Max Coordinate
			        var eBottom = mBottom - yAdd; //Final Y-Min Coordinate
			        
			        //use calculation or the original extent
			        if (eLeft < m_hvOrigMinX.value || eBottom < m_hvOrigMinY.value || eRight > m_hvOrigMaxX.value ||eTop > m_hvOrigMaxY.value) {
			          eLeft = m_hvOrigMinX.value;
			          eRight = m_hvOrigMaxX.value;
			          eBottom = m_hvOrigMinY.value;
			          eTop = m_hvOrigMaxY.value;
			        }
			          
				    m_mapViewer.setExtent(new rect(eLeft, eBottom, eRight, eTop));	    
			    }
			    
			} // end Math.abs...
			//
			
		//}
		
	    } else if ((m_iToolMode == 4) && (m_hvPanning == "True")) { //Pan is on map and within mapframe 'Zach Added
		//dynamic pan mode
		
		// Release the capture that was set in the mousedown
		// handler (again, this is something that we have to do because
		// of drag events in IE).
		    if ((m_sClientBrowserType == 'IE') && (m_sClientPlatform == 'Windows')) {
			    document.releaseCapture();
		    }
		
		    var ptUserClick = m_mapViewer.toMapPoint(m_ImgCenX + m_divMap.offsetLeft, m_ImgCenY + m_divMap.offsetTop);
		    m_mapViewer.recenter(ptUserClick);
		    m_imgMapCanvas.src="images/transparent.gif"; //added this to hide map before moving, stops jerking
	        moveObject(m_imgMapCanvas.style,0,0); 
	        Type_Request ="M"
	    }
    
    m_hCurLevel.value = m_mapViewer.getLevel() - 2;
       
    updateZoomLevel(m_hCurLevel.value); //Updates ZoomBar 'Zach added 
	} // end if mouse1 
	else {
	
			//window.status = "toolmode is 2, mouse up function, just return";
			return;
	 
	}
	
	if (m_hvPanning == "False") {
	return;
	} 

	submit(Type_Request);
}

function handleToolClick(iToolMode) {
	switch(iToolMode) {
	    case 1:
			// identify mode
			m_imgMapCanvas.style.cursor = "hand";
			document.getElementById("imgIdentify").style.borderColor = "Red";
			document.getElementById("imgZoomIn").style.borderColor = "Black";
			document.getElementById("imgZoomOut").style.borderColor = "Black";
			document.getElementById("imgPan").style.borderColor = "Black";
			document.getElementById("imgClearMap").style.borderColor = "Black";
			
			document.getElementById("imgIdentify").border = "2";
			document.getElementById("imgZoomIn").border = "1";
			document.getElementById("imgZoomOut").border = "1";
			document.getElementById("imgPan").border = "1";
			document.getElementById("imgClearMap").border = "1";
			
			document.getElementById("hvToolMode").value = "1";
			
			break;
		case 2:
			// zoom in mode
			m_imgMapCanvas.style.cursor = "crosshair";
			document.getElementById("imgIdentify").style.borderColor = "Black";
			document.getElementById("imgZoomIn").style.borderColor = "Red";
			document.getElementById("imgZoomOut").style.borderColor = "Black";
			document.getElementById("imgPan").style.borderColor = "Black";
			document.getElementById("imgClearMap").style.borderColor = "Black";
			
			document.getElementById("imgIdentify").border = "1";
			document.getElementById("imgZoomIn").border = "2";
			document.getElementById("imgZoomOut").border = "1";
			document.getElementById("imgPan").border = "1";
			document.getElementById("imgClearMap").border = "1";
			
			document.getElementById("hvToolMode").value = "2";
			break;
		case 3:
			// zoom out mode
			m_imgMapCanvas.style.cursor = "crosshair";
			document.getElementById("imgIdentify").style.borderColor = "Black";
			document.getElementById("imgZoomIn").style.borderColor = "Black";
			document.getElementById("imgZoomOut").style.borderColor = "Red";
			document.getElementById("imgPan").style.borderColor = "Black";
			document.getElementById("imgClearMap").style.borderColor = "Black";
			
			document.getElementById("imgIdentify").border = "1";
			document.getElementById("imgZoomIn").border = "1";
			document.getElementById("imgZoomOut").border = "2";
			document.getElementById("imgPan").border = "1";
			document.getElementById("imgClearMap").border = "1";
			
			document.getElementById("hvToolMode").value = "3";
			break;	    
		
		case 4:
			// dynamic pan mode
			m_imgMapCanvas.style.cursor = "move";
			document.getElementById("imgIdentify").style.borderColor = "Black";
			document.getElementById("imgZoomIn").style.borderColor = "Black";
			document.getElementById("imgZoomOut").style.borderColor = "Black";
			document.getElementById("imgPan").style.borderColor = "Red";
			document.getElementById("imgClearMap").style.borderColor = "Black";
			
			document.getElementById("imgIdentify").border = "1";
			document.getElementById("imgZoomIn").border = "1";
			document.getElementById("imgZoomOut").border = "1";
			document.getElementById("imgPan").border = "2";
			document.getElementById("imgClearMap").border = "1";
			
			document.getElementById("hvToolMode").value = "4";
			break;
	}
	m_iToolMode = iToolMode;
}

function ResizeMap(sSize) {

    if (((sSize == 'SMALL') && (m_imgMapCanvas.className == 'SmallMap')) || 
        ((sSize == 'LARGE') && (m_imgMapCanvas.className == 'LargeMap'))) {
        return;
    }
    
    switch(sSize) { 
        case 'SMALL':
        m_imgMapCanvas.className = 'SmallMap';
        //dyanmic pan mode
        m_divMap.classname = 'SmallMap'; 
        m_ImgW = m_imgMapCanvas.width;
	    m_ImgH = m_imgMapCanvas.height;
	    m_divMap.style.width = m_imgMapCanvas.width;
	    m_divMap.style.height = m_imgMapCanvas.height;
        break;
        case 'LARGE':
        m_imgMapCanvas.className = 'LargeMap';
        //dyanmic pan mode
        m_divMap.classname = 'LargeMapMap'; 
        m_ImgW = m_imgMapCanvas.width;
	    m_ImgH = m_imgMapCanvas.height;
	    m_divMap.style.width = m_imgMapCanvas.width;
	    m_divMap.style.height = m_imgMapCanvas.height;
        break;
        default: 
        
        
        return; // invalid sSize value
    }

        // Create a new map coordinate manager.
    m_mapViewer = new map(m_divMap.offsetLeft,
  				    m_divMap.offsetTop,
				    m_imgMapCanvas.width,	
				    m_imgMapCanvas.height,
					m_ExtentWidths,
				    m_mapViewer.getExtent()
				    );


        //Orient other page elements - MapSizeImage, Map Border, Map Tools, Loading Image.
    switch(sSize) { 
        case 'SMALL':
        updateImgMapSize('LARGE');
        break;
        case 'LARGE':
        updateImgMapSize('SMALL');
        break;
    }
    
    posLoadingImage();
    posBorder();
    posBorderNavigation(); //must be called BEFORE posTools()
    posTools();  //must be called AFTER posBorderNavigation()

    submit();
}

function ZoomToLevel(iLevel) {           
	m_mapViewer.setLevel(iLevel);
    //Request a new map.
        document.getElementById("hCurLevel").value = iLevel;
    if (iLevel == '5') {
    submit("OE");
    }else{
    submit("M");
}
}

// *******************************************************************
// ********************** HELPER FUNCTIONS  **************************
// *******************************************************************

function hideWaitImage() {
    m_zbxZoom.hide();
    m_imgLoading.style.visibility = 'hidden';
}

function hideWaitLoad() {
   m_imgLoading.style.visibility = 'hidden';
}

function hideWaitImageForNetscape6() {
	if (m_imgMapCanvas.complete) {
		clearInterval(m_lTimerID);
		m_divZoomBox.style.visibility = 'hidden';
		m_imgLoading.style.visibility = 'hidden';
	}
}

function moveEast() {
    m_mapViewer.moveEast();
    submit("M");
}

function moveNorthEast() {
    m_mapViewer.moveNorthEast();
    submit("M");
}

function moveNorthWest() {
    m_mapViewer.moveNorthWest();
    submit("M");
}

function moveNorth() {
    m_mapViewer.moveNorth();
    submit("M");
}

function moveSouthEast() {
    m_mapViewer.moveSouthEast();
    submit("M");
}

function moveSouthWest() {
    m_mapViewer.moveSouthWest();
    submit("M");
}

function moveSouth() {
    m_mapViewer.moveSouth();
    submit("M");
}

function moveWest() {
    m_mapViewer.moveWest();
    submit("M");
}

function posBorder() {

    if (m_sClientBrowserType == 'Netscape') { 
		m_divMapBorder.style.left = m_divMap.offsetLeft - parseInt(m_divMapBorder.style.borderWidth.replace('px',''));
		m_divMapBorder.style.top = m_divMap.offsetTop - parseInt(m_divMapBorder.style.borderWidth.replace('px',''));
	} else { // browser must be IE
		m_divMapBorder.style.left = m_divMap.offsetLeft;
		m_divMapBorder.style.top = m_divMap.offsetTop;
	}
		
    m_divMapBorder.style.width = m_imgMapCanvas.width;
    m_divMapBorder.style.height = m_imgMapCanvas.height;
    m_divMapBorder.style.visibility = "visible";

}

function posBorderNavigation() {

    var borderOffset = 0;    
    if (m_sClientBrowserType == 'Netscape') {
		borderOffset = parseInt(m_divMapBorder.style.borderWidth.replace('px','')) 
	}
   
          //align the NORTH DIV       
    m_divNorth.style.top = m_divMap.offsetTop - (parseInt(m_divNorth.style.height.replace('px',''))) - borderOffset;
    m_divNorth.style.left = m_divMap.offsetLeft + (m_imgMapCanvas.width / 2)- (parseInt(m_divNorth.style.width.replace('px','')) / 2);    

         //align the SOUTH DIV
    m_divSouth.style.top = m_divMap.offsetTop + m_imgMapCanvas.height + borderOffset;
    m_divSouth.style.left = m_divMap.offsetLeft + (m_imgMapCanvas.width / 2)- (parseInt(m_divSouth.style.width.replace('px','')) / 2);   
  
         //align the EAST DIV       
    m_divEast.style.top = m_divMap.offsetTop + ((m_imgMapCanvas.height / 2) - (parseInt(m_divEast.style.height.replace('px','')) / 2));
    m_divEast.style.left = m_divMap.offsetLeft + m_imgMapCanvas.width + borderOffset;    

         //align the WEST DIV       
    m_divWest.style.top = m_divMap.offsetTop + ((m_imgMapCanvas.height / 2) - (parseInt(m_divWest.style.height.replace('px','')) / 2));
    m_divWest.style.left = m_divMap.offsetLeft - (parseInt(m_divWest.style.width.replace('px',''))) - borderOffset;   
}

function posLoadingImage() {
    m_imgLoading.style.top = (parseInt(m_divMap.style.top.replace('px','')) + (m_imgMapCanvas.height / 2) - (m_imgLoading.height / 2) );
    m_imgLoading.style.left = (parseInt(m_divMap.style.left.replace('px','')) + (m_imgMapCanvas.width / 2) - (m_imgLoading.width / 2) );
}

function posTools() {
    m_divMapTools.style.top = parseInt(m_divSouth.style.top.replace('px','')) + parseInt(m_divSouth.style.height.replace('px',''));
    m_divMapTools.style.width = m_imgMapCanvas.width;
}

function reportCoords(ptReport) {
	// Note: Use round() instead of toFixed(), since the latter isn't supported
  //       in IE Mac.
	m_txtXCoord.value = "X: "+(Math.round(ptReport.x*10000.0)/10000.0).toString();
	m_txtYCoord.value = "Y: "+(Math.round(ptReport.y*10000.0)/10000.0).toString();
}

function returnActiveTool(iToolMode) {
    if (iToolMode == 1) {
		return 1;
	}
	if (iToolMode == 2) {
		return 2;
	}
	if (iToolMode == 3) {
		return 3;
	}
	if (iToolMode == 4) {
		return 4;
	}
}

function showWaitImage() {
	m_imgLoading.style.visibility = 'visible';
}

function zoomStatic(level) {
var level;
m_mapViewer.zoom(level);
submit("M");
}

 
//SUBMIT SUBMIT SUBMIT SUBMIT SUBMIT SUBMIT SUBMIT SUBMIT SUBMIT
function submit(Type_Request) {
/* old Blueviewer version
	var sURL = m_hvMapPage.value+
		         "?XMIN="+m_mapViewer.getExtent().getLeft()+
				     "&YMIN="+m_mapViewer.getExtent().getBottom()+
						 "&XMAX="+m_mapViewer.getExtent().getRight()+
						 "&YMAX="+m_mapViewer.getExtent().getTop()+
						 "&WIDTH="+m_mapViewer.getTagWidth()+
						 "&HEIGHT="+m_mapViewer.getTagHeight();
	//alert(sURL);
*/	
    document.getElementById("hvWidth").value = m_mapViewer.getTagWidth()
    document.getElementById("hvHeight").value = m_mapViewer.getTagHeight()
    document.getElementById("hTypeRequest").value = Type_Request;
	showWaitImage();
	
	 if (Type_Request == "M" ) {
    //persistExtent();
    document.getElementById("hvMinX").value = m_mapViewer.getExtent().getLeft()
    document.getElementById("hvMinY").value = m_mapViewer.getExtent().getBottom()
    document.getElementById("hvMaxX").value = m_mapViewer.getExtent().getRight()  
    document.getElementById("hvMaxY").value = m_mapViewer.getExtent().getTop()
  }

	if (navigator.userAgent.indexOf('Netscape6/6') > -1) {
		m_lTimerID = setInterval("hideWaitImageForNetscape6();",100);
	}
	
  document.frmParams.submit()
 
}

function updateZoomLevel(inLevel) {
//alert(inLevel);
        var nLevels = m_ExtentWidths.length;
		for (i=1;i<nLevels+1;i++) {
			document.getElementById('imgZoomLevel' + i).src = 'images/tick.gif';
			if (i==inLevel) {
			    document.getElementById('imgZoomLevel' + i).src = 'images/tick_selected.gif';
			  m_hCurLevel.value = i;
			}
		}		
}

function ChangeMapSize(Size) {
var OldSize = document.frmParams.hvImageSize.value;
	    var winW;
	    var winH;
    if (Size != OldSize){
        document.frmParams.hvImgSizeChanged.value = OldSize + "|" + Size;
    } else {
        document.frmParams.hvImgSizeChanged.value = "N";
        return;  
    }
    document.frmParams.hvImageSize.value = Size;
    if (Size == "SMALL") {
        document.getElementById("SmallDisplay").src = "Images/SmallDisplayOn.gif";
        document.getElementById("MediumDisplay").src = "Images/MediumDisplayOff.gif";
    }
    if (Size == "MEDIUM") {
        document.getElementById("SmallDisplay").src = "Images/SmallDisplayOff.gif";
        document.getElementById("MediumDisplay").src = "Images/MediumDisplayOn.gif";
	}
	    submit("RESIZE");
	}
	
	function tabChange(imgID) {
    document.getElementById("hTypeRequest").value = "Tab change";
    
    document.getElementById("imgSearch").src = "Images/searchOff.gif";
    document.getElementById("imgSearch").style.top = "26px";
    document.getElementById("imgResults").src = "Images/ResultsOff.gif";
    document.getElementById("imgResults").style.top = "26px";
    document.getElementById("imgLayers").src = "Images/layersOff.gif";
    document.getElementById("imgLayers").style.top = "26px";
    document.getElementById("imgLegend").src = "Images/legendOff.gif";
    document.getElementById("imgLegend").style.top = "26px";
    document.getElementById("imgHelp").src = "Images/HelpOff.gif";
    document.getElementById("imgHelp").style.top = "26px";

    TypeRequest = "Tab change";
    
    switch(imgID) {      
	        case 'imgSearch': // Search tab
			    document.getElementById("hvCurTab").value = "Search";
			    document.getElementById("pnlSearhRad").style.visibility = "visible";
			    document.getElementById("pnlResultTools").style.visibility = "hidden";
                document.getElementById("pnlLayerTools").style.visibility = "hidden";
                document.getElementById("pnlLegendTools").style.visibility = "hidden";
                document.getElementById("pnlHelpTools").style.visibility = "hidden";
                document.getElementById("pnlHMapped").style.visibility = "visible";
			    document.getElementById("imgSearch").style.top = "28px";
			    document.getElementById("imgSearch").src = "Images/searchOn.gif";
			    
			    var radID;
	            if (document.getElementById("hvCurRadio").value == "PID") {
	            radID = "PID";  
	            } else if (document.getElementById("hvCurRadio").value == "Address") {
	            radID = "Address";  
	             } else if (document.getElementById("hvCurRadio").value == "Addition") {
	             radID = "Addition";  
	            } else if (document.getElementById("hvCurRadio").value == "PLSS") {
	             radID = "PLSS";  
                 }
			    radioChange(radID)
			    break;
			    
		    case 'imgResults': //Data tab
		        document.getElementById("hvCurTab").value = "Results";
		        document.getElementById("imgResults").style.top = "28px";
		        document.getElementById("imgResults").src = "Images/ResultsOn.gif";
		        document.getElementById("pnlHMapped").style.visibility = "hidden";
                document.getElementById("pnlSearhRad").style.visibility = "hidden";
                document.getElementById("pnlResultTools").style.visibility = "visible";
                document.getElementById("pnlLayerTools").style.visibility = "hidden";
                document.getElementById("pnlLegendTools").style.visibility = "hidden";
                document.getElementById("pnlHelpTools").style.visibility = "hidden";
                radioChange("Clear");
		        break;
		        
		    case 'imgLayers': //Layers tab
		        document.getElementById("hvCurTab").value = "Layers";
		        document.getElementById("imgLayers").style.top = "28px";
		        document.getElementById("imgLayers").src = "Images/layersOn.gif";
                document.getElementById("pnlSearhRad").style.visibility = "hidden";
                document.getElementById("pnlResultTools").style.visibility = "hidden";
                document.getElementById("pnlLayerTools").style.visibility = "visible";
                document.getElementById("pnlLegendTools").style.visibility = "hidden";
                document.getElementById("pnlHelpTools").style.visibility = "hidden";
                radioChange("Clear");
		        break;
		        
		   case 'imgLegend': //Legend tab
		        document.getElementById("hvCurTab").value = "Legend";
		        document.getElementById("imgLegend").style.top = "28px";
		        document.getElementById("imgLegend").src = "Images/legendOn.gif";
                document.getElementById("pnlSearhRad").style.visibility = "hidden";
                document.getElementById("pnlResultTools").style.visibility = "hidden";
                document.getElementById("pnlLayerTools").style.visibility = "hidden";
                document.getElementById("pnlLegendTools").style.visibility = "visible";
                document.getElementById("pnlHelpTools").style.visibility = "hidden";
                radioChange("Clear");
		        break;
		   
		     case 'imgHelp': //Legend tab
		        document.getElementById("hvCurTab").value = "Help";
		        document.getElementById("imgHelp").style.top = "28px";
		        document.getElementById("imgHelp").src = "Images/HelpOn.gif";
                document.getElementById("pnlSearhRad").style.visibility = "hidden";
                document.getElementById("pnlResultTools").style.visibility = "hidden";
                document.getElementById("pnlLayerTools").style.visibility = "hidden";
                document.getElementById("pnlLegendTools").style.visibility = "hidden";
                document.getElementById("pnlHelpTools").style.visibility = "visible";
                radioChange("Clear");
		        break;	        
    }
}

function radioChange(imgID) {

    switch(imgID) {
    
    case 'PID': // PID Search
        document.getElementById("radQSPID").checked = "Checked";
        document.getElementById("radQSAddress").checked = "";
        document.getElementById("radQSAddition").checked = "";
        document.getElementById("radQSTwpRng").checked = "";
        document.getElementById("pnlPIDQuery").style.visibility = "visible";
        document.getElementById("pnlAddressQuery").style.visibility = "hidden";
        document.getElementById("pnlAdditionQuery").style.visibility = "hidden";
        document.getElementById("pnlPLSSQuery").style.visibility = "hidden";
        document.getElementById("hvCurRadio").value = "PID"
        //Set Focus to textbox
        document.getElementById("txtQuickSearch").focus();
        
        break;
        
    case 'Address':
        document.getElementById("radQSPID").checked = "";
        document.getElementById("radQSAddress").checked = "Checked";
        document.getElementById("radQSAddition").checked = "";
        document.getElementById("radQSTwpRng").checked = "";
        document.getElementById("pnlPIDQuery").style.visibility = "hidden";
        document.getElementById("pnlAddressQuery").style.visibility = "visible";
        document.getElementById("pnlAdditionQuery").style.visibility = "hidden";
        document.getElementById("pnlPLSSQuery").style.visibility = "hidden";
        document.getElementById("hvCurRadio").value = "Address"
        //Set Focus to textbox
        document.getElementById("SearchPartner").focus();
        break;
        
    case 'Addition':
        document.getElementById("radQSPID").checked = "";
        document.getElementById("radQSAddress").checked = "";
        document.getElementById("radQSAddition").checked = "Checked";
        document.getElementById("radQSTwpRng").checked = "";
        document.getElementById("pnlPIDQuery").style.visibility = "hidden";
        document.getElementById("pnlAddressQuery").style.visibility = "hidden";
        document.getElementById("pnlAdditionQuery").style.visibility = "visible";
        document.getElementById("pnlPLSSQuery").style.visibility = "hidden";
        document.getElementById("hvCurRadio").value = "Addition"
        //Set Focus to textbox
        document.getElementById("txtQSAddName").focus();
        break;
        
    case 'PLSS':
        document.getElementById("radQSPID").checked = "";
        document.getElementById("radQSAddress").checked = "";
        document.getElementById("radQSAddition").checked = "";
        document.getElementById("radQSTwpRng").checked = "Checked";
        document.getElementById("pnlPIDQuery").style.visibility = "hidden";
        document.getElementById("pnlAddressQuery").style.visibility = "hidden";
        document.getElementById("pnlAdditionQuery").style.visibility = "hidden";
        document.getElementById("pnlPLSSQuery").style.visibility = "visible";
        document.getElementById("hvCurRadio").value = "PLSS"
        //Set Focus to textbox
        document.getElementById("txtTownship").focus();
        break;
        
    case 'Clear':
        document.getElementById("pnlPIDQuery").style.visibility = "hidden";
        document.getElementById("pnlAddressQuery").style.visibility = "hidden";
        document.getElementById("pnlAdditionQuery").style.visibility = "hidden";
        document.getElementById("pnlPLSSQuery").style.visibility = "hidden";
        document.getElementById("pnlHMapped").style.visibility = "hidden";
        break;
    }
 }
 
 function convertSP(uX,uY) {
a = 20925604.48;   		//major radius of ellipsoid, map units (NAD 83)
ec = 0.08181905782;  		//eccentricity of ellipsoid (NAD 83)
angRad = 0.01745329252;  	//number of radians in a degree
pi4 = Math.PI / 4;  		//Pi / 4
p0 = 44.79 * angRad; 	 	//latitude of origin
p1 = 44.8834 * angRad;  		//latitude of first standard parallel
p2 = 45.134 * angRad;  	//latitude of second standard parallel
m0 = -93.3834 * angRad;  	//central meridian
x0 = 500000.0; 		//False easting of central meridian, map units
y0 = 100000.0; 		//False northing of central meridian, map units

// Calculate the coordinate system constants.
with (Math) {
m1 = cos(p1) / sqrt(1 - (pow(ec,2)) * pow(sin(p1),2));  
m2 = cos(p2) / sqrt(1 - (pow(ec,2)) * pow(sin(p2),2));
t0 = tan(pi4 - (p0 / 2));
t1 = tan(pi4 - (p1 / 2));
t2 = tan(pi4 - (p2 / 2));
t0 = t0 / pow(((1 - (ec * (sin(p0)))) / (1 + (ec * (sin(p0))))),ec/2);  
t1 = t1 / pow(((1 - (ec * (sin(p1)))) / (1 + (ec * (sin(p1))))),ec/2);
t2 = t2 / pow(((1 - (ec * (sin(p2)))) / (1 + (ec * (sin(p2))))),ec/2);
n = log(m1 / m2) / log(t1 / t2);
f = m1 / (n * pow(t1,n)); 
rho0 = a * f * pow(t0,n);

// Convert the coordinate to Latitude/Longitude.

// Calculate the Longitude.
uX = uX - x0;
uY = uY - y0;
pi2 = pi4 * 2;

rho = sqrt(pow(uX,2) + pow((rho0 - uY),2));  
theta = atan(uX / (rho0 - uY));
txy = pow((rho / (a * f)),(1 / n));
lon = (theta / n) + m0;
uX = uX + x0;
uY = uY + y0;

// Estimate the Latitude
lat0 = pi2 - (2 * atan(txy));

// Substitute the estimate into the iterative calculation that
// converges on the correct Latitude value.
part1 = (1 - (ec * sin(lat0))) / (1 + (ec * sin(lat0)));
lat1 = pi2 - (2 * atan(txy * pow(part1,(ec/2))));

while ((abs(lat1 - lat0)) > 0.000000002) {
  lat0 = lat1;
  part1 = (1 - (ec * sin(lat0))) / (1 + (ec * sin(lat0)));
  lat1 = pi2 - (2 * atan(txy * pow(part1,(ec/2))));
  }

// Convert from radians to degrees.
Lat = lat1 / angRad;
Lon = lon / angRad;

//m_hvLongX.value = Lon;
//m_hvLatY.value = Lat;

//document.getElementById('txtLatitude').value =  "Y = "+(Math.round(m_hvLatY.value*10000.0)/10000.0).toString();
//document.getElementById('txtLongitude').value = "X = "+(Math.round(m_hvLongX.value*10000.0)/10000.0).toString();

window.status = "Latitude = " + (Math.round(Lat*10000.0)/10000.0).toString() + " | Longitude = " + (Math.round(Lon*10000.0)/10000.0).toString(); 

}
}
