// aimsClick.js
/*
*  JavaScript template file for ArcIMS HTML Viewer
*       dependent on aimsXML.js, ArcIMSparam.js, aimsCommon.js, aimsMap.js,
*       aimsLayers.js, aimsDHTML.js
*       aimsNavigation.js
*/

aimsClickPresent=true;
legendVisible=false;
layersVisible=true;

var onOVArea = false;

// Global vars to save mouse position
var mouseX=0;
var mouseY=0;
var mmapX=0;
var mmapY=0;
var x1=0;
var y1=0;
var x2=0;
var y2=0;
var zleft=0;
var zright=0;
var ztop=0;
var zbottom=0;

var totalMeasure=0;
var currentMeasure=0;
var lastTotMeasure=0;




//Added this from Measure sample -CKT 062706
//MeasureArea
var currentArea = 0;
//end MeasureArea









// variables for interactive clicks
var clickCount = 0;
var clickPointX = new Array();
var clickPointY = new Array();
var clickMeasure = new Array();
    // type - 1=Measure; 2=SelectLine ; 3=SelectPolygon
var clickType = 1;

var shapeSelectBuffer = false;

var panning=false;
var zooming=false;
var selectBox=false;
var blankImage = "images/map.gif";

var leftButton =1;
var rightButton = 2;
if (isNav) {
    leftButton = 1;
    rightButton = 3;
}


/*  *****************************************************
*   Point click functions
*   used by Measure and Select by Line/Polygon
*   *****************************************************
*/

// put a point at click and add to clickCount
function clickAddPoint() {
    var theX = mouseX;
    var theY = mouseY;
    getMapXY(theX,theY);
    clickPointX[clickCount]=mapX;
    clickPointY[clickCount]=mapY;
	if (!use_jsgraphics) clickCount += 1;
    selectCount=0;
    totalMeasure = totalMeasure + currentMeasure;
        //var u = Math.pow(10,numDecimals);
        //if (totalMeasure!=0) totalMeasure = parseInt(totalMeasure*u+0.5)/u;
		
		
		
		
		
		//Added this from Measure sample -CKT 062706
		//MeasureArea
      if (clickCount > 2) {
        ComputeArea();
        }
      else
        currentArea = 0;
    // end MeasureArea
		
		
		
		

    clickMeasure[clickCount]=totalMeasure;
    legendTemp=legendVisible;
    legendVisible=false;
    layersVisible=false;
	if (!use_jsgraphics)
	{
		var theString = writeXML();
		var theNum = 99;
		sendToServer(imsURL,theString,theNum);
	}
}

// zero out all clicks in clickCount
function resetClick() {
    var c1 = clickCount;
    clickCount=0;
    clickPointX.length=1;
    clickPointY.length=1;
	
	
	
	//Added this from Measure sample -CKT 062706	
		//MeasureArea
	currentArea=0;
	  // end MeasureArea

	
	
	
	
    currentMeasure=0;
    totalMeasure=0;
    lastTotMeasure=0;
    clickMeasure.length=1;
    selectCount=0;

    legendTemp=legendVisible;
    legendVisible=false;
    layersVisible=false;
    var theString = writeXML();
    var theNum = 99;
	if ((!use_jsgraphics) && (!activate_rb)) {
		sendToServer(imsURL,theString,theNum);
	}

    if (toolMode==20) updateMeasureBox();

}

// remove last click from clickCount
function deleteClick() {
    var c1 = clickCount;
    clickCount=clickCount-1;
    selectCount=0;
    if (clickCount<0) clickCount=0;
    if (clickCount>0) {
        totalMeasure = clickMeasure[clickCount]
        clickPointX.length=clickCount;
        clickPointY.length=clickCount;
        clickMeasure.length=clickCount;

    } else {
        totalMeasure=0;
        clickMeasure[0]=0;
    }
    currentMeasure=0;
    if (c1>0) {
        legendTemp=legendVisible;
        legendVisible=false;
        layersVisible=false;
        var theString = writeXML();
        var theNum = 99;
        sendToServer(imsURL,theString,theNum);
    }

}










// MeasureArea
function ComputeArea () {
  var workarea = 0.0;

  cai = clickCount - 1;
  caj = 0;

  while (caj < clickCount) {
    xjyi = clickPointX[caj] * clickPointY[cai];
    xiyj = clickPointX[cai] * clickPointY[caj];
    xydiff = (xjyi - xiyj);
    workarea = workarea+xydiff;
    cai = caj;
    caj = parseFloat(caj + 1);  
  }

  units2 = invertUnits(ScaleBarUnits, MapUnits);
  units2 = units2 * units2;

//workarea = Math.abs(workarea / ( 2.0 * units2) * 640);   // hard-coded for SqMiles to Acres
  workarea = Math.abs(workarea / ( 2.0 * units2));    // hard-coded for SqMiles

  var u = Math.pow(10,numDecimals);
  if (!isNav) workarea = parseInt(workarea * u + 0.5) / u

  currentArea = workarea;  
}


//MeasureArea return number of mapunits per scalebar unit
function invertUnits(sUnits,mUnits) { 

var mDistance = 0.0; 
if (mUnits == "FEET") { 
if (sUnits=="MILES") { 
mDistance = 5280; 
} else if (sUnits == "METERS") { 
mDistance = 3.280833; 
} else if (sUnits == "KILOMETERS") { 
mDistance = 3280.833; 
} else if (sUnits == "FEET") { 
mDistance = 1.0; 
} 
} else { //METERS 
if (sUnits=="MILES") { 
mDistance = 1609; 
} else if (sUnits == "FEET") { 
mDistance = 0.304800609601; 
} else if (sUnits == "KILOMETERS") { 
mDistance = 0.000304800609601; 
} else if (sUnits == "METERS") { 
mDistance = 1.0; 
} 
} 
return mDistance; 
} 


// end MeasureArea
















//keep track of currently selected tool, and display it to user
// set the imsMap cursor tool
function clickFunction (toolName) {

	if ((use_jsgraphics) && (!activate_rb)) // Delete the js_graphics
	{
		deactivateRubberband();
		resetPolyline();
	}
	
    if (hasLayer("measureBox"))
        hideLayer("measureBox");

    // Added by CAT - reset the tools in the header to 0 - the user will click again to activate a tool.
    if ((toolName == "zoomin") || (toolName == "zoomout") || (toolName == "fullextent") || (toolName == "pan"))
       parent.TitleFrame.resetFunctionTool();

    currentSelectionState = 0;

    switch(toolName) {	
	
		case "getpoint":
		alert("Help:  Click a point on the map.  The Coordinates will be displayed.");
		//*****040903
		//get the new point
		panning=false;
		zooming=false;
		selectBox=false;
		toolMode = 11111;

		break;	
	
	
    case "restart":
       top.window.location.reload();
       break

    // Zooming functions
    case "zoomin":
        // zoom in mode
        toolMode = 1;
        panning=false;
        selectBox=false;
        if (isIE)   {
            document.all.theTop.style.cursor = "crosshair";
            theCursor = document.all.theTop.style.cursor;
        }
        modeBlurb = modeList[0];
        //if (useTextFrame) parent.TextFrame.document.location= appDir + "text.htm";
        break
    case "zoomout":
        // zoom out mode
        toolMode = 2;
        panning=false;
        selectBox=false;
        if (isIE)   {
            document.all.theTop.style.cursor = "crosshair";
            theCursor = document.all.theTop.style.cursor;
        }
        modeBlurb = modeList[1];
        //if (useTextFrame) parent.TextFrame.document.location= appDir + "text.htm";
        break
    case "zoomlast":
        zoomBack();
        panning=false;
        zooming=false;
        selectBox=false;
        break
    case "zoomactive":
        //alert(LayerExtent[ActiveLayerIndex]);
        var q = LayerExtent[ActiveLayerIndex].split("|");
        panning=false;
        zooming=false;
        selectBox=false;
        //zoomToEnvelope(parseFloat(q[0]),parseFloat(q[1]),parseFloat(q[2]),parseFloat(q[3]));

        var l = parseFloat(setDecimalString(q[0]));
        var b = parseFloat(setDecimalString(q[1]));
        var r = parseFloat(setDecimalString(q[2]));
        var t = parseFloat(setDecimalString(q[3]));
        var w = r-l;
        var h = t-b;
        // add a bit of a margin around the layer
        var wm = w * (5/100);
        var hm = h * (5/100);
        l = l - wm;
        r = r + wm;
        b = b - hm;
        t = t + hm;
        zoomToEnvelope(l,b,r,t);
        break
    case "fullextent":
        fullExtent();
        break

    // Pan functions
    case "pan":
        // pan mode
        toolMode = 3;

        zooming=false;
        selectBox=false;
        if (isIE)   {
            document.all.theTop.style.cursor = "move";
            theCursor = document.all.theTop.style.cursor;
        }
        modeBlurb = modeList[2];
        //if (useTextFrame) parent.TextFrame.document.location= appDir + "text.htm";
        break

    //RESTART THE APPLICATION
    case "restart":
       top.window.location.reload();
           break

    // Identify-Hyperlink functions
    case "identify":
        // identify mode - layer attributes - requires aimsIdentify.js
        panning=false;
        zooming=false;
        selectBox=false;
        shapeSelectBuffer = false;
        aimsCSV = true;

        if (canQuery) {
            toolMode = 4;

            if (isIE)   {
                document.all.theTop.style.cursor = "crosshair";
                theCursor = document.all.theTop.style.cursor;
            }
            modeBlurb = modeList[3];
        } else {
            alert(msgList[46]);
        }
        //alert("Function Not Implemented");



        showGeocode=false;
        if (useTextFrame) parent.TextFrame.document.location= appDir + "text.htm";
        hideLayer("measureBox");
        break

    case "identifyall":
        // identify drill mode
        panning=false;
        zooming=false;
        selectBox=false;
        shapeSelectBuffer = false;
        toolMode = 5;
        if (canQuery) {
            if (isIE)   {
                document.all.theTop.style.cursor = "crosshair";
                theCursor = document.all.theTop.style.cursor;
            }
            //modeBlurb = modeList[19]; // identify all
            modeBlurb = modeList[20]; // identify visible features
            //modeBlurb = modeList[3]; // identify
        } else {
            alert(msgList[46]);
        }
        //alert("Function Not Implemented");
        showGeocode=false;
        drawSelectBoundary=false;
        if (useTextFrame) parent.TextFrame.document.location= appDir + "text.htm";
        hideLayer("measureBox");		
        break
    case "hyperlink":
        // hyperlink mode - requires aimsIdentify.js
        var isOk = false;
        var j=-1;
        panning=false;
        zooming=false;
        selectBox=false;
        shapeSelectBuffer = false;
        toolMode = 15;
        modeBlurb = modeList[9];
        showGeocode=false;
        if (useTextFrame) parent.TextFrame.document.location= appDir + "text.htm";
        hideLayer("measureBox");
        var isOk = checkHyperLinkLayer(ActiveLayerIndex)
        if (isOk) {
            if (canQuery) {


                if (isIE)   {
                    document.all.theTop.style.cursor = "crosshair";
                    theCursor = document.all.theTop.style.cursor;
                }

            } else {
                alert(msgList[46]);
            }
            //alert("Function Not Implemented");
        } else {
            currentHyperLinkLayer="";
            currentHyperLinkField="";
            alert(msgList[47]);

        }
        break

    case "hyperlinkany":
        // hyperlink mode - requires aimsIdentify.js
        var j=-1;
        panning=false;
        zooming=false;
        selectBox=false;
        shapeSelectBuffer = false;
        toolMode = 30;
        modeBlurb = modeList[9];
        showGeocode=false;
        if (useTextFrame) parent.TextFrame.document.location= appDir + "text.htm";
        hideLayer("measureBox");
            if (canQuery) {


                if (isIE)   {
                    document.all.theTop.style.cursor = "crosshair";
                    theCursor = document.all.theTop.style.cursor;
                }

            } else {
                alert(msgList[46]);
            }
            //alert("Function Not Implemented");
        break

    // Measure-Unit function
    case "measure":
	    alert("Measure Help:  Click points on the map to measure. \nDouble-click or right-click to end.");
        panning=false;
        zooming=false;
        selectBox=false;
        shapeSelectBuffer = false;
        if (clickCount>0) {
            if (totalMeasure==0) resetClick();
        }
        toolMode = 20;
        if (isIE)   {
            document.all.theTop.style.cursor = "crosshair";
            theCursor = document.all.theTop.style.cursor;
        }
        modeBlurb = modeList[12];
        if (clickType==1) {
            //if (useTextFrame) parent.TextFrame.location= appDir + "measure.htm";
                showLayer("measureBox");
                updateMeasureBox();
        }
        showGeocode=false;
        break

    case "setunits":
        if (useTextFrame) {
            parent.TextFrame.location = "setUnits.htm";
        } else {
            window.open((appDir + "setUnits.htm"),"OptionWindow","width=575,height=120,scrollbars=yes,resizable=yes");
        }
        break

    // Graphic Selection functions
    case "shape":
        panning=false;
        zooming=false;
        selectBox=false;
        shapeSelectBuffer = false;
        toolMode = 21;
        if (isIE)   {
            document.all.theTop.style.cursor = "crosshair";
            theCursor = document.all.theTop.style.cursor;
        }

        modeBlurb = modeList[13];

        showGeocode=false;

        hideLayer("measureBox");
        break

    case "selectbox":
	
	// SET THE ACTIVE LAYER TO PARCELS
		dbLinkLayer = "Parcels";
		//dbLinkLayer = "Parcels";
         matchDBLinkLayer(dbLinkLayer);

        panning=false;
        zooming=false;
        aimsCSV = true;
        // select mode - requires aimsSelect.js
        if (canQuery) {
            toolMode = 10;
            queryTool=0;
            clickCount=0;
            showBuffer=false;
            if (isIE)   {
                document.all.theTop.style.cursor = "crosshair";
                theCursor = document.all.theTop.style.cursor;
            }

            modeBlurb = modeList[4];
        } else {
            alert(msgList[46]);
        }
        //alert("Function Not Implemented");	
		
        showGeocode=false;
        if (useTextFrame) parent.TextFrame.document.location= appDir + "text.htm";
        hideLayer("measureBox");
        break

    case "selectpoint":
        panning=false;
        zooming=false;
        shapeSelectBuffer = false;
        // select mode - requires aimsSelect.js
        if (canQuery) {
            toolMode = 11;
            queryTool=0;
            clickCount=0;
             resetClick();
            if (isIE)   {
                document.all.theTop.style.cursor = "hand";
                theCursor = document.all.theTop.style.cursor;
            }

            modeBlurb = modeList[5];
        } else {
            alert(msgList[46]);
        }
        //alert("Function Not Implemented");
        showGeocode=false;
        showBuffer=false;
        hideLayer("measureBox");
        break

    case "selectline":
	     currentSelectionState = 0;
		alert("Select Help:  Click points on the map to draw line. \nDouble-click to end.");
        legendVisible=false;
        layersVisible=false;
        panning=false;
        zooming=false;
        shapeSelectBuffer = false;
        aimsCSV = true;
        // select mode - requires aimsSelect.js
        if (canQuery) {
            toolMode = 12;
            queryTool=0;
            if (isIE)   {
                document.all.theTop.style.cursor = "crosshair";
                theCursor = document.all.theTop.style.cursor;
            }
            hideLayer("measureBox");
                // Win1 = open("select.htm","QueryWindow","width=400,height=300,scrollbars=no,resizable=no");
            modeBlurb = modeList[6];
        } else {
            alert(msgList[46]);
        }
        showGeocode=false;
        showBuffer=false;
        break
		

	case "selectpoly":
	    currentSelectionState = 0;
		alert("Select Help:  Click points on the map to draw poly. \nDouble-click to end.");
		// SET THE ACTIVE LAYER TO PARCELS
		 dbLinkLayer = "Parcels";
		 //dbLinkLayer = "Parcels";
         matchDBLinkLayer(dbLinkLayer);
		legendVisible=false;
        layersVisible=false;
        panning=false;
        zooming=false;
        shapeSelectBuffer = false;
        aimsCSV = true;
        // select mode - requires aimsSelect.js
        if (canQuery) {
            toolMode = 13;
            queryTool=0;
            if (isIE)   {
                document.all.theTop.style.cursor = "crosshair";
                theCursor = document.all.theTop.style.cursor;
            }
            hideLayer("measureBox");
                // Win1 = open("select.htm","QueryWindow","width=400,height=300,scrollbars=no,resizable=no");
            modeBlurb = modeList[6];
        } else {
            alert(msgList[46]);
        }
        showGeocode=false;
        showBuffer=false;
        break
		
		case "selectcircle":
        panning=false;
        zooming=false;
        shapeSelectBuffer = false;
        aimsCSV = true;
        // select mode - requires aimsSelect.js
        if (canQuery) {
            toolMode = 22;
            queryTool=0;
            if (isIE)   {
                document.all.theTop.style.cursor = "crosshair";
                theCursor = document.all.theTop.style.cursor;
            }
            hideLayer("measureBox");
                // Win1 = open("select.htm","QueryWindow","width=400,height=300,scrollbars=no,resizable=no");
            modeBlurb = modeList[6];
        } else {
            alert(msgList[46]);
        }
        showGeocode=false;
        showBuffer=false;
        break
		
    case "selectshape":
        panning=false;
        zooming=false;
        shapeSelectBuffer = false;
        // select mode - requires aimsSelect.js
        if (canQuery) {
            toolMode = 16;
            queryTool=0;
            if (isIE)   {
                document.all.theTop.style.cursor = "crosshair";
                theCursor = document.all.theTop.style.cursor;
            }
            hideLayer("measureBox");
            if (useTextFrame) {
                parent.TextFrame.document.location= appDir + "select.htm";
            } else {
                Win1 = open("select.htm","QueryWindow","width=400,height=250,scrollbars=no,resizable=yes");
            }
            modeBlurb = modeList[8];
        } else {
            alert(msgList[46]);
        }
        //alert("Function Not Implemented");
        showGeocode=false;
        showBuffer=false;
        break
    ///*
    case "buffershape":
        panning=false;
        zooming=false;

        // interactive shape buffer - not implemented
        if (canQuery) {
            toolMode = 17;
            //toolMode = 16;
            queryTool=0;
            shapeSelectBuffer = true;
            if (isIE)   {
                document.all.theTop.style.cursor = "crosshair";
                theCursor = document.all.theTop.style.cursor;
            }
            hideLayer("measureBox");
            if (useTextFrame) {
                parent.TextFrame.document.location= appDir + "shapeBuffer.htm";
            } else {
                Win1 = open("shapeBuffer.htm","QueryWindow","width=575,height=150,scrollbars=yes,resizable=yes");
            }
            modeBlurb = modeList[11];
        } else {
            alert(msgList[46]);
        }
        //alert("Function Not Implemented");
        showGeocode=false;
        showBuffer=false;
        break
        //*/
    // Geocode Function
    case "geocode":
        panning=false;
        zooming=false;
        selectBox=false;
        shapeSelectBuffer = false;
        aimsCSV = true;
        // geocode mode - requires aimsGeocode.js
        hideLayer("measureBox");
        modeBlurb = modeList[14];
        setupGeocode();
        //parent.TextFrame.document.location= appDir + "addmatch.htm";
        break

    // Query - Search - Find functions
    case "query":
        // query mode - requires aimsQuery.js
        panning=false;
        zooming=false;
        selectBox=false;
        shapeSelectBuffer = false;
        queryStartRecord=1;
        //toolMode=
        queryTool=51;
        if (canQuery) {
            LayerFields.length=1;
            LayerFieldType.length=1;
            LayerFieldCount=0;
            toolMode=8;
            modeBlurb=modeList[15];

            fieldIndex=0;
            setQueryString="";
            hideLayer("measureBox");
            queryForm();
        } else {
            alert(msgList[46]);
        }
        showGeocode=false;
        showBuffer=false;
        break

    case "storedquery":
        // storedquery mode - requires aimsQuery.js
        panning=false;
        zooming=false;
        selectBox=false;
        shapeSelectBuffer = false;
        queryStartRecord=1;
        queryTool=1;
        toolMode=51;
        modeBlurb="Search";
        if (canQuery) {
            toolMode=51;
            modeBlurb=modeList[16];
            fieldIndex=0;
            setQueryString="";
            hideLayer("measureBox");
            getStoredQueries();
        } else {
            alert(msgList[46]);
        }
        showGeocode=false;
        showBuffer=false;
        break

    case "find":
        //find
        toolMode=9;
        panning=false;
        zooming=false;
        selectBox=false;
        shapeSelectBuffer = false;
        queryStartRecord=1;
        queryTool=1;
        if (canQuery) {
            LayerFields.length=1;
            LayerFieldType.length=1;
            LayerFieldCount=0;

            fieldIndex=0;
            setQueryString="";
            hideLayer("measureBox");
            modeBlurb = modeList[17];
            findForm();
        } else {
            alert(msgList[46]);
        }
        showGeocode=false;
        showBuffer=false;
        break

    case "clearsel":
         clearSelection();
         break

    // Buffer function  -- the next 4 functions - unfortunately, we cannot have a case statement list... case "buff_dist", "abut_dir"
    case "buff_dist":
        //buffer - requires aimsBuffer.js
		alert("NOTICE\n\nThis Abutter's Tool is for REFERENCE PURPOSES ONLY.\n\nCertified Abutters Lists must be obtained from the\n Town of Enfield Office of Assessors.");
        writeBufferForm(toolName);
        break

    case "abut_dir":
        //buffer - requires aimsBuffer.js
        writeBufferForm(toolName);
        break

    case "abut_abut":
        //buffer - requires aimsBuffer.js
        writeBufferForm(toolName);
        break

    case "abut_abut_dist":
        //buffer - requires aimsBuffer.js
        writeBufferForm(toolName);
        break

	case "help":
		// loads a new window to show information about the application
      var Win1 = window.open ('help_index.htm','Helpwin','titlebar=No,toolbar=No,scrollbars=No,resizable=Yes,top=10,left=10,width=' + screenWidth/1.3 + ',height=' + screenHeight/1.3);
        //alert("Feature Temporarily Disabled...Try Again Later");
  	break

    case "options":
        writeOptionForm();
        break

    // Print function
    case "print":
         printIt();
         break

    // custom modes
    case "dbidentify":
	    //currentlySelectedFeatureID="";
        legendVisible=false;
        layersVisible=false;
        panning=false;
        zooming=false;
        selectBox=false;
        shapeSelectBuffer = false;
		showBuffer=false;
		aimsBufferPresent=false;
        // identify mode - requires custom db query - not in basic
        if (canQuery) {
            toolMode = 40;
            if (isIE)   {
                document.all.theTop.style.cursor = "hand";
                theCursor = document.all.theTop.style.cursor;
            }

            modeBlurb = modeList[3];
        } else {
            alert(msgList[46]);
        }
        //alert("Function Not Implemented");

        showGeocode=false;
        // if (useTextFrame) parent.TextFrame.document.location= appDir + "text.htm";
        hideLayer("measureBox");
        break

    case "extract":
         extractIt();
         break

    case "legend":
        if (aimsLegendPresent) {
            if (imsURL!="") {
                layersVisible = false;
                if (hasTOC) {
                    if (legendVisible) {
                        legendVisible=false;
                        parent.TOCFrame.document.location=appDir+"toc.htm";
                    } else {
                        legendVisible=true;
                        getLegend();
                    }
                } else {
                    legendVisible=true;
                    getLegend();
                }
            } else {
                alert(msgList[45]);
            }
        } else {
            alert(msgList[50]);
        }
        break

    case "layerlist":
        //JB stop showing the LEGEND
        legendVisible=false;
        layersVisible=true;
		
		// If the currently selected feature is populated
		if (currentlySelectedFeatureID.length >1) {
			
					// If the state is ID Feature and the queryframe is populated by showSelect.asp
					if (parent.QueryFrame.location == "http://" + hostName + "/" + SiteName + "/showSelect.asp") {
						  
						 // alert ("http://" + hostName + "/" + SiteName + "/showSelect.asp");
					
					// If the select mode radio button is checked
			         if (parent.QueryFrame.selectModeN.checked)  {
						 currentSelectionState = 0;
					 }
			        
					 if (parent.QueryFrame.selectModeA.checked)  {
						 currentSelectionState = 1;
					 }
						
					 if (parent.QueryFrame.selectModeR.checked)  {
						 currentSelectionState = 2;
					 }
					
				  }  // end if Parent.queryframe.location
					
		 }  // end if (currentlySelectedFeatureID.length >1) {
	
                writeLayerListForm();
				
				
        break

    case "toggleDataWin":
            // Show the data window - if there is a currently selected feature.
            if (currentlySelectedFeatureID.length > 0) {
               legendVisible=false;
               layersVisible=false;              
               var featureString = 'select ' + dbFieldList + ' from ' + dbTableList + ' where ' + dbIDField + ' IN (' + currentlySelectedFeatureID + ') order by ' + dbIDField;
               writeDBResponsePage (featureString);
            } else {
               alert ('Please select a feature to toggle the data window');
            }
            break

    case "about":
        // loads a new window to show information about the application
       var Win1 = window.open ('about.asp','Aboutwin','titlebar=No,toolbar=No,scrollbars=Yes,resizable=Yes,top=0,left=0,width=' + screenWidth/4 + ',height=' + screenHeight/1.8);
        break

    case "disclaimer":
        // loads a new window to show information about the application
        var Win1 = window.open ('disclaimer.htm','Discwin','titlebar=No,toolbar=No,scrollbars=Yes,resizable=Yes,top=10,left=10,width=' + screenWidth/4 + ',height=' + screenHeight/2);
        //var Win1 = window.open ('arcimsInfo.htm','imsInfo','titlebar=No,toolbar=No,scrollbars=No,resizable=Yes,top=0,left=0,width=100,height=100);
        break

    case "newSelect":
	
	    currentSelectionState = 0;
		//currentlySelectedFeatureID="";
		parent.QueryFrame.location='showSelect.asp';
	    modeBlurb = "New sel";
        break

   case "newSelectLinePoly":	
	    currentSelectionState = 0;
	    modeBlurb = "New sel";
        break

    case "addToSelect":
        currentSelectionState = 1;
        modeBlurb = "++ Select";
        break
    case  "removeFromSelect":
        currentSelectionState = 2;
        modeBlurb = "-- Select";
        break

    default:
        alert(msgList[51]);
    }
    modeName=modeBlurb;
    if (useModeFrame) {
        writeModeFrame(modeBlurb);
    } else if ((drawFloatingMode) && (modeLayerOn)) {
        writeModeLayers(modeBlurb);
    } else if ((modeRefreshMap) && (drawModeOnMap)) {
        //var theString = writeXML();
        sendMapXML();
    }
}

// check for mouseup
function chkMouseUp(e) {
    if ((toolMode == 1) && (zooming)) {
            stopZoomBox(e);

    }
    if ((toolMode == 2) && (zooming)) {
            stopZoomOutBox(e);
    }
    if ((toolMode == 3) && (panning)) {
            stopPan(e);

    }
    
    	if ((toolMode == 5)) {
		mmouseX = mouseX;
     	mmouseY = mouseY;
	    getMapXY(mmouseX,mmouseY);
	    mmapX=mapX;
	    mmapY=mapY;
	}
	
	
    if ((toolMode == 10) && (selectBox)) {
            stopSelectBox(e);
    }

    return false;

}

// perform appropriate action with mapTool
function mapTool (e) {
    var theButton= 0;
    // get the button pushed... if right, ignore... let browser do the popup... it will anyway
    if (isNav) {
        theButton = e.which;
    } else {
        theButton =window.event.button;
    }
    if (theButton==leftButton) {
        getImageXY(e);
        if ((mouseX>=0) && (mouseX<iWidth) && (mouseY>=0) && (mouseY<iHeight)) {
            //if ((!isNav) || (!is5up)) {
            if ((hasOVMap) && (ovIsVisible) && (mouseX<i2Width+ovBoxSize) && (mouseY<i2Height) && (ovMapIsLayer)) {
                    //alert(mouseX + ", " + mouseY);
                    ovMapClick(mouseX,mouseY);

                    window.status = "On OV Map Area";
                //}
            } else {
                //alert(mouseX + "," + mouseY);
                //alert("Toolmode: " + toolMode);
                switch(toolMode) {
                case 1:
                        startZoomBox(e);
                        return false;
                        break

                case 2:
                        startZoomOutBox(e);
                        return false;
                        break
                case 3:
                        startPan(e);
                        return false;
                        break

                case 4:
                    identify(e);
                    break

                case 5:
                    // identify all
                    identifyAll(e);
                    break

                // custom modes
                /*
                case 6:
                    // route - requires custom route routine - not in default
                    routeClick = routeClick + 1;
                    if (routeClick > 2) routeClick = 2;
                    setRouteXY()
                    writeRoutePage();
                    break
                case 7:
                    // proximity - requires custom proximity routine - not in default
                    proxCount=0;
                    proximitySearch(e);
                    break

                */
                case 10:
                    //select(e);					
                        if (aimsDBPresent) {
						   matchDBLinkLayer(dbLinkLayer);
						   layersVisible=false;
                           startSelectBox(e);
                           return false;
                        }
                        break
                case 11:
                    //select point
                    if (checkIfActiveLayerAvailable()) {
                        select(e);
                    }
                    break
			
				case 12:
					//select line
					dbLinkLayer = "Parcels";
					//dbLinkLayer = "Parcels";
					matchDBLinkLayer(dbLinkLayer);
					parent.MapFrame.selectionMode=1
					if (checkIfActiveLayerAvailable()) {
						clickType=2;
						if (use_jsgraphics) {
							activateRubberband(e);
						}
						else {
							clickAddPoint();
							if (useTextFrame) {
								if (parent.TextFrame.document.title!==modeList[60]) {
									parent.TextFrame.document.location= appDir + "selectline.htm";
								}
							}
						}
					}
					break
				
				case 13:
					//select polygon
					parent.MapFrame.selectionMode=1
					dbLinkLayer = "Parcels";
					//dbLinkLayer = "Parcels";
					matchDBLinkLayer(dbLinkLayer);
					if (checkIfActiveLayerAvailable()) {
						clickType=3;
						if (use_jsgraphics) {
							activateRubberband(e);
						}
						else {
							clickAddPoint();
							if (useTextFrame) {
								if (parent.TextFrame.document.title!==modeList[7]) {
									parent.TextFrame.document.location= appDir + "selectpoly.htm";
								}
							}
						}
					}
					break
					
                case 15:
                    // hyperlink
                    hyperLink(e);
                    break
                case 16:
                    //select shape
                    if (checkIfActiveLayerAvailable()) {
                        clickType=2;
                        clickAddPoint();
                        if (useTextFrame) {
                            if (parent.TextFrame.document.title!==modeList[8]) {
                                parent.TextFrame.document.location= appDir + "select.htm";
                            }
                        }
                    }
                    break
                    ///*
                case 17:
                    //buffer shape -
                    if (checkIfActiveLayerAvailable()) {
                        clickType=2;
                        clickAddPoint();
                        if (useTextFrame) {
                            if (parent.TextFrame.document.title!=modeList[11]) {
                                parent.TextFrame.document.location= appDir + "shapeBuffer.htm";
                            }
                        }
                    }
                    break
                    //*/
				case 20:
					// measure
					clickType=1;
					if (use_jsgraphics) {
						activateRubberband(e);
						clickAddPoint();
					}
					else {
						clickAddPoint();
					}
					break
                case 21:
                    // shape
                    clickType=4;
                    clickAddPoint();
                    break
				case 22:
					//select circle
					if (checkIfActiveLayerAvailable()) {
						clickType=1;
						if (use_jsgraphics) {
							activateRubberband(e);
						}
						else alert ("Function Not Implemented!");
					}
					break
                case 30:
                    // hyperlink
                    hyperLinkAny(e);
                    break
					
					
					case 11111:
					
					//find coordinates of new point
					pixelX = xDistance / iWidth;
					mapX = pixelX * mouseX + eLeft;
					var theY = iHeight - mouseY;
					pixelY = yDistance / iHeight;
					mapY = pixelY * theY + eBottom;					
					var u = Math.pow(10,numDecimals);
					var uX = parseInt(mapX * u + (5/10)) / u
					var uY= parseInt(mapY * u + (5/10)) / u
					
					
					
					var alatLonDdStr = convertSP(uX,uY);
					var aall = alatLonDdStr.split("|");
					var aLonDD = aall[0];
					var aLatDD = aall[1];
					aLatDD = (Math.round(aLatDD * 100000)) / 100000;
					aLonDD = (Math.round(aLonDD * 100000)) / 100000;
					
				   
					alert ("Map Coordinates for the Selected Point: \n \n Latitude & Longitude \n  Latitude :  " + aLatDD + ", Longitude :  " + aLonDD + "  \n\nState Plane Coordinates - NAD83 Feet \n  Northing : " + uX + ", Easting :  " + uY);
	 
					
					break;

					//*****/042103			
					
					
                case 40:
                    // db identify - requires custom db query - not in default
                    if (aimsDBPresent) {
						matchDBLinkLayer(dbLinkLayer);
                        dbIdentify(e);
						parent.MapFrame.selectionMode=1;
                    }
                    break
                default:
                    if (toolMode>=1000) {
                        customMapTool(e);
                    }
                }
            }
        }
    }
	if (theButton==rightButton)
	{
	    if (toolMode>=1000)
	    {
            customMapTool(e);
        }
                    
		if ((use_jsgraphics) && (activate_rb))
		{
			if (toolMode==22) circleCentreSaved=false;
			
			deactivateRubberband();
			closePolyline(e);
			resetClick();
		}
	}
}

// update measureBox layer
function updateMeasureBox() {
    if (isNav4) {
        var theForm = document.layers["measureBox"].document.forms[0];
    } else {
        //var theForm = document.measureBox.forms[0];
        var theForm = document.forms[0];
    }
    var j = 1;
    for (var i=0;i<sUnitList.length;i++) {
        if (ScaleBarUnits==sUnitList[i]) j=i;
    }
        var u = Math.pow(10,numDecimals);
        var tMeas = 0;
        if (totalMeasure!=0) tMeas = parseInt(totalMeasure*u+0.5)/u;
    theForm.theMeasTotal.value = tMeas + " " + unitList[j];
    theForm.theMeasSegment.value = currentMeasure + " " + unitList[j];
	
	
		// MeasureArea
      //theForm.theMeasArea.value = currentArea + " Acres";
	  //theForm.theMeasArea.value = currentArea + " Sq Miles";
	theForm.theMeasArea.value = currentArea + " Sq " + unitList[j];
	// end MeasureArea
	
	
	
    showLayer("measureBox");

}

// If we're using the jg_graphics.
// Finish and perform appropriate action with mapTool on map DOUBLECLICK.
function finishPolyline(e) {
	
	if (use_jsgraphics) {
		if ((clickCount > 1) || (toolMode==22)) {
			deactivateRubberband(); // Hide rubberband
			closePolyline(e); // Close the polyline to a polygon-look-a-like
			circleCentreSaved=false;
			switch (toolMode) {
				case 13:
					sendShapeSelect(2); // Selection by polygon
				break;
				
				case 12:
					sendShapeSelect(1); // Selection by line
				break;
				
				case 20:
					resetClick(); // Reset measuring
				break;
				
				case 22:
					var dx = parseFloat(clickPointX[0]-circleCenterX);
					var dy = parseFloat(clickPointY[0]-circleCenterY);
					var buffDist = Math.round(Math.sqrt((Math.pow(dx,2))+(Math.pow(dy,2)))*100)/100;
					shapeBufferDistance = buffDist; // Buffer radius
					sendShapeSelect(0); // Selection by circle (buffer radius from point).
				break;
				
				default:
					return false;
			}
		}
		else 
		{
			if (activate_rb) {
				if (toolMode==13) alert("At least two or more points \nneeded to create a selection area.");
			}
		}
	}
	else alert("Error:js_graphics are not in use!");
}

function noContext() {
	return false;
}




// set the cursor of the specified layer
function setCursor(divLayer, cursor) {
	var dObj = getLayer(divLayer);
	if (dObj!=null) {
		dObj.cursor = cursor;
		theCursor = dObj.cursor;
	}
}



