var selectedObj;
var offsetX=0, offsetY=0;
var minX, minY, maxX, maxY;  //start pos of div: mapImageHolder

var startX = "";
var startY = "";  //for VML or DIV to draw box/oval

var divHeight, divWidth;
var clickCount=0;

var item =-1;
var polygon = new Array();

var imgDot = new Image();
imgDot.src="images/dotNew.gif";

var priorTool;


//used for default minx, maxx, miny, maxy settings
//of div map holder
function setObjectMinMax(divID){
	var divHolder;
	if(document.layers){
		divHolder = document.layers[divID];
	}else if(document.all){
		divHolder = document.all(divID);
	}else if(document.getElementById(divID)){
		divHolder = document.getElementById(divID);
	}
	minX = getObjectLeft(divHolder);
	maxX = minX + getObjectWidth(divHolder);
	minY = getObjectTop(divHolder);
	maxY = minY + getObjectHeight(divHolder);
	
	//alert("minX=" + minX + ",maxX=" + maxX + ",minY=" + minY + ",maxY=" + maxY);
}

function setSelectedElem(evt){
	var target = (evt.target) ? evt.target : evt.srcElement;
	var divID = (target.id && target.src) ? target.id : "" //+ "Holder" : ""
	if(divID){		
		if(document.layers){
			selectedObj = document.layers[divID];
		}else if(document.all){
			selectedObj = document.all(divID);
		}else if(document.getElementById(divID)){
			selectedObj = document.getElementById(divID);
		}
		//selectedObj.zindex = -1000;
		//setZIndex(selectedObj,150);		
		//selectedObj.zindex = 100;
		return;
	}	
	selectedObj = null;
	return;
}

function engage(evt){

try{
	//alert('engage');
	//save Results Panel
	saveResultsHTML();
	setAdvSearchLayerToHiddenTag();
	evt = (evt) ? evt : window.event;
	
	if(isRightMouse(evt)){
		return true; //false;
	}
	
	var id =(evt.srcElement) ? evt.srcElement.id : evt.target.id;
//alert(id)	
	//close Address numbers dropdown if use clicks elsewhere
	var id2 = id.toLowerCase();
	if(id2.indexOf("divstreetnums")==-1 && 
			 id2.indexOf("imgarrowdown")==-1 &&
			 id2.indexOf("divstreets")==-1 &&
			 id2.indexOf("divcities")==-1 &&
			 id2.indexOf("divstreets")==-1 &&
			 id2.indexOf("divaddressitem")==-1 &&
			 id2.indexOf("divmaps")==-1 && 
			 id2.indexOf("divblock")==-1 &&
			 id2.indexOf("divlot")==-1 &&
			 id2.indexOf("divunit")==-1 &&
			 id2.indexOf("imgmap")==-1 &&
			 id2.indexOf("imgblock")==-1 &&
			 id2.indexOf("imglot")==-1 &&
			 id2.indexOf("imgunit")==-1){
		 hideAddressObjects();
	}else{
		return;
	}	
	
	var tool = document.getElementById("txtToolState").value.toLowerCase();
	var txtX1 = document.getElementById("x1");
	var txtY1 = document.getElementById("y1");
	
	if(id!="mapImage"){
		selectedObj = null;
		return true;
	}

	setSelectedElem(evt); //set map as selected object
	
	if(selectedObj){
		if(document.body && document.body.setCapture){
			// event capture in IE/win
			document.body.setCapture();
		}


		setObjectMinMax("mapImageHolder"); // boh added 06/30/09
		var coords = getPageEventCoords(evt);
		startX = coords.left-minX;
		startY = coords.top	-minY;
		//alert(startX);
		//alert(startY);
		txtX1.value = startX;
		txtY1.value = startY;

		//document.getElementById("divCoords").style.left = document.getElementById("divCoords").style.left;
		//document.getElementById("divCoords").style.visibility='hidden';

		switch (tool.toLowerCase()){		
			case "measure distance":
				doMeasureDistance(evt);
				return false;
				break;	
					
			/*  obsolete (used in results). TC: 7/22/06
			case "hyperlink":				
				showRetrieving();
				__doPostBack("mapImage","")
				return true;
				break;
			*/	
			case "identify":	
				var coords = getPageEventCoords(evt);
				startX = coords.left-minX;
				startY = coords.top-minY;
				if(isIE4){startX+=4;startY+=4}
				document.forms[0].x1.value=startX;
				document.forms[0].y1.value=startY;		
				showRetrieving();
				//__doPostBack("mapImage","")
				//return false;
				break;	
				
			case "select by radius":
				drawDot(startX+minX,startY+minY);
				document.onmouseup=releaseDrawLine;
				break;	
				
			case "select by polygon":
				document.onmouseup=null;
				clickX[clickCount]=startX;
				clickY[clickCount]=startY;
				var startx,starty,endx,endy;
				
				document.getElementById("tblPolyLink").style.visibility="visible";								
				if(isVML){
					if(clickCount>0){
						startx=clickX[clickCount-1] + minX;
						starty=clickY[clickCount-1] + minY;
						endx=clickX[clickCount] + minX;
						endy=clickY[clickCount]+minY;
						createVMLLine(startx,starty,endx,endy);
					}	
				}else{  //navigator
					//not sure what to draw...
				}
				var theLeft = startX;
				var theTop =  startY;
				
				
				
				(theLeft+minX,theTop+minY);				
				
				clickCount++;
				return false;
				break;
				
			case "select by line":
				var x = startX;
				var y = startY;
				document.onmouseup=releaseDrawLine;
				break;
			
			case "display map coordinates":
				drawDot(startX + minX,startY + minY);
				document.forms[0].x1.value = startX;
				document.forms[0].y1.value = startY;
				
				//get real map coords
				//make 'dot' at point
				var x = Get_Map_PointX(startX);
				var y = Get_Map_PointY(startY);
				setAnnoString("Point","","0",startX,startY,"","");
				
				//then put label above
				//var x = Get_Map_PointX(startX+minX)
				//var y = Get_Map_PointY(startY+minY)
				var divMouse=document.getElementById("divCoords");
				var theText =divMouse.innerHTML;
				y = theText.substr(0,theText.toLowerCase().indexOf("<br>"));
				x = theText.substring(theText.toLowerCase().indexOf("<br>")+4,theText.length);
				setAnnoString("Text",y,2,startX+10,startY-20,"","");
				setAnnoString("Text",x,2,startX+10,startY-5,"","");
				showRetrieving();
				__doPostBack("mapImage","");
				document.onmouseup=null;
				return false;
				break;
				
			case "display lat/long coordinates":
				drawDot(startX + minX,startY + minY);
				document.forms[0].x1.value = startX;
				document.forms[0].y1.value = startY;
				
				//get real map coords
				//make 'dot' at point
				//var x = Get_Map_PointX(startX)
				//var y = Get_Map_PointY(Ynew);	
				setAnnoString("Point","","0",startX,startY,"","");		
				
				//then put label above
				var divMouse=document.getElementById("divCoords");
				var theText =divMouse.innerHTML;
				if(Lat1stParallel==Lat2ndParallel){					
					//projection does not use Standard Parallels
					//for click postback to set DMS
					//so, use the mouse coords in postback.
					//setAnnoString is done in W/S call.				
					GetLatLongFromMapCoords(document.forms[0].txtServiceName.value,startX,startY);
				}else{
					//projection is uses Standard Parallel 1 & 2
					y = theText.substr(0,theText.toLowerCase().indexOf("<br>"));
					x = theText.substring(theText.toLowerCase().indexOf("<br>")+4,theText.length);
					setAnnoString("Text",y,2,startX+10,startY-20,"","");
					setAnnoString("Text",x,2,startX+10,startY-5,"","");	
				}
				showRetrieving();
				__doPostBack("mapImage","");
				//document.onmouseup=null;
				return false;
				break;
				
			case "measure area":
				//handled when menu repoints .onclick of map image to doMeasureArea()
				doMeasureArea(evt);
				return false;
				break;
				
			//user anno cases			
			case "circle anno":
				//taken care of in 'dragIt()
				break;
				
			case "rectangle anno":
				//taken care of in dragIt()
				break;
				
			case "line anno":
				if(isIE4 || isIE6CSS){
					var x = startX;
					var y = startY;
				}else{
					var x = startX;
					var y = startY;
				}
				
				document.onmouseup=releaseDrawLine;				
				break;
				
			case "text anno":
				if(document.forms[0].txtUserTextAnno.value==""){
					alert("Please enter text to set on the map");
					document.forms[0].txtUserTextAnno.focus();
					return false;
				}
				var newX = startX;
				var newY = startY;
				 //generate the anno string to the hidden text box 
				//to have ArcIMS draw it on the map.
				if(document.forms[0].ddlCoordType.selectedIndex==0){
					var txt = document.forms[0].txtHiddenAnno;
					//user has 'At mouse click selected
					//var divAnno = document.createElement("DIV");
					//divAnno.className="textanno";
					var divAnno = document.getElementById("divTextAnno")
					divAnno.style.left=newX + minX;
					divAnno.style.top=newY + minY;
					divAnno.innerHTML = document.forms[0].txtUserTextAnno.value;
					divAnno.style.visibility="visible";
					//document.body.appendChild(divAnno);
					setAnnoString("text",document.forms[0].txtUserTextAnno.value,"0",startX,startY,"","");
				}				
				var divText = document.getElementById("divTextAnno");
				divText.style.visibility="hidden";
				selectedObj=null;
				showRetrieving();
				__doPostBack("mapImage","");
				break;
				
			case "point anno":
				var ddl = document.forms[0].ddlCoordType;
				var cdType = ddl.options[ddl.selectedIndex].value;
				if(cdType>"0"){
					if(evt.preventDefault){
						evt.preventDefault();
					}else{
						evt.cancelBubble=true;
					}
					if(evt.stopPropogation){
						evt.stopProgation();
					}else{
						if(isIE4){
							evt.cancelBubble=true;
						}
					}
					return;
				}
				var theX = new Number();
				var theY = new Number();
				var x = new Number();
				var y = new Number();
				theX = startX;
				x=theX + parseInt(minX);
				theY = startY;
				y = theY + parseInt(minY);
				//alert(minX);
				//alert(minY);
				drawDot(x,y);
				setAnnoString("point","",cdType,startX,startY,"","");
				
				selectedObj=null;
				//document.onmouseup=release;
				if(evt.preventDefault){
					evt.preventDefault();
				}else{
					evt.cancelBubble=true;
				}
				if(evt.stopPropogation){
					evt.stopProgation();
				}else{
					if(isIE4){
						evt.cancelBubble=true;
					}
				}
				showRetrieving();
				__doPostBack("mapImage","");
				return false;
				break;
		}		
		return false;
	}
  }catch(ex){
	alert("engage method:\n" + ex.message);
  }
}


function blockIt(){
	return false;
}

function doMeasureArea(evt){
	evt = (evt) ? evt : window.event;
	if(isRightMouse(evt)){
		return;
	}
	var id =(evt.srcElement) ? evt.srcElement.id : evt.target.id;
	if(id!="mapImage"){
		selectedObj = null;
		return true;
	}
	setSelectedElem(evt); //above	
	if(selectedObj){
		if(document.body && document.body.setCapture){
			//engage event capture in IE/win
			document.body.setCapture();
		}
		
	}
	var coords = getPageEventCoords(evt);
	startX = coords.left-minX;
	startY = coords.top-minY;
	drawDot(startX + minX,startY + minY);
	var theDiv = document.getElementById("measureDistance");
	//theDiv.style.left=minX;
	//theDiv.style.top =minY;
	theDiv.style.visibility="visible";
	item++; //used in polygonArea()
	clickX[clickCount]=startX;
	clickY[clickCount]=startY;	
				
	var startx,starty,endx,endy;			
	if(isVML){
		evt.cancelBubble=true;
		if(clickCount>0){
			startx=clickX[clickCount-1] + minX;
			starty=clickY[clickCount-1] + minY;
			endx=clickX[clickCount] + minX;
			endy=clickY[clickCount] + minY;
			createVMLLine(startx,starty,endx,endy);
		}	
	}else{  //navigator
		if(evt.stopPropogation){
			evt.stopProgation();
		}
		if(evt.preventDefault){
			evt.preventDefault();
		};
		//don't draw if not IE
	}
	clickCount++
	var newX = Get_Map_PointX(startX);
	var newY = Get_Map_PointY(startY);
	polygon = addToPoly(polygon,item,newX,newY);
	var area = polygonArea(polygon,polygon.length);
	var newArea = roundIt(area);
	var sMeasure = "AREA: " + newArea + " SF,";
	sMeasure += roundIt(newArea/43560) + " AC, ";
	sMeasure += roundIt(newArea/(5280 * 5280)) + " SqMi";
	theDiv.innerHTML = sMeasure;
	selectedObj = null;
	//document.onmouseup=null;
	
	if(isVML){
		self.blur();
		self.focus();
	}
	
	document.onmouseup=null;
	return false;
	
}

function doMeasureDistance(evt){
	evt = (evt) ? evt : window.event;
	if(isRightMouse(evt)){
		return;
	}
	
	var id =(evt.srcElement) ? evt.srcElement.id : evt.target.id
	if(id!="mapImage"){
		selectedObj = null;
		return true;
	}
	
	setSelectedElem(evt); //above	
	if(selectedObj){
		if(document.body && document.body.setCapture){
			//engage event capture in IE/win
			document.body.setCapture();
		}		
	}
	
	var coords = getPageEventCoords(evt);
	startX = coords.left-minX;
	startY = coords.top-minY;
	drawDot(startX + minX,startY + minY);
	
	var theDiv = document.getElementById("measureDistance");
	//theDiv.style.left=minX;
	//theDiv.style.top =minY;
	theDiv.style.visibility="visible";
	
	item++; //used in polygonArea()
	
	clickX[clickCount]=startX;
	clickY[clickCount]=startY;	
				
	var startx,starty,endx,endy;
	if(isVML){
		evt.cancelBubble=true;
		if(clickCount>0){
			startx=clickX[clickCount-1] + minX;
			starty=clickY[clickCount-1] + minY;
			endx=clickX[clickCount] + minX;
			endy=clickY[clickCount] + minY;
			createVMLLine(startx,starty,endx,endy);
		}	
	}else{  //navigator
		if(evt.stopPropogation){
			evt.stopProgation();
		}
		if(evt.preventDefault){
			evt.preventDefault();
		};
		//don't draw if not IE
	}
	clickCount++
	var newX = Get_Map_PointX(startX);
	var newY = Get_Map_PointY(startY);
	polygon = addToPoly(polygon,item,newX,newY);
	if (polygon.length == 1) {
		sMeasure = "Click another point"
	} else {
		var area = getPolylineLength(polygon,polygon.length-1,polygon.length-2);
		var newArea = roundIt(area)
		var sMeasure = "LENGTH: " + newArea + " feet,";
		area = getPolylineLength(polygon,polygon.length-1,0);
		newArea = roundIt(area)
		sMeasure += "TOTAL:  " + newArea + " feet";
	}
	theDiv.innerHTML = sMeasure;
	selectedObj = null;
	//document.onmouseup=null;
	
	if(isVML){
		self.blur();
		self.focus();
	}
	
	document.onmouseup=null;
	return false;
	
}
function drawDot(x,y){
	x-=2;
	y-=2;
	var imgx = document.createElement("IMG");
	imgx.style.position='absolute';
	imgx.style.left = x + 'px';
	imgx.style.top = y + 'px';
	imgx.style.zIndex = '160';
	imgx.src = eval(imgDot).src;
	document.body.appendChild(imgx);
	return false;
}

function roundIt(theNumber){
	//this simply truncates after the second decimal (no rounding)
	if(isNaN(theNumber)){
		return "";
	}else{
		var num = new String(theNumber);
		var pos = num.indexOf(".");
		if(pos>0){
			return num.substring(0,parseInt(pos)+4);
		}else{
			return num;
		}		
	}
}

//user tools
function dragIt(evt){
	evt = (evt) ? evt : event;
	var x, y, width, height, top, left;
	var tool;
	tool = document.forms[0].txtToolState.value.toLowerCase();
	if(selectedObj){
		var coords = getPageEventCoords(evt);
		x = coords.left - (startX+minX);
		y = coords.top - (startY+minY);
	}
	switch(tool){
		case "zoom in":
			doZoom(evt);
			break;
		case "zoom out":
			doZoom(evt);
			break;
		case "pan":
			if(selectedObj){
				shiftTo(selectedObj,x,y);
			}
			break;	
			
		case "measure":
			//do nothing, page has already posted back on click;
			break;
			
		case "select by rectangle":
			if(selectedObj){
				doZoom(evt);
			}
			break;
			
		case "select by radius":
			if(selectedObj){
				drawCircle(evt);				
				//drawLine(evt)
			}
			break;	
			
		case "select by line":
			if(selectedObj){
				drawLine(evt);
			}
			break;
			
		case "select by polygon":
			//do nothing here...
			//handled in 'engage' and 'double-click events
			break;
			
		case "circle anno":
			document.onmouseup=releaseDrawCircle;
			drawCircle(evt);
			break;
			
		case "rectangle anno":
			doZoom(evt);
			break;	
			
		case "line anno":
			if(selectedObj){
				drawLine(evt);
			}
			break;
		
		case "text anno":
			if(document.forms[0].txtUserTextAnno.value==""){return false;}
			var ddl = document.forms[0].ddlCoordType;
			if(ddl.selectedIndex==0){
				//attach an Anno icon to the mouse;
				doTextAnnoDrag(evt);
			}
			break;
			
		case "display lat/long coordinates":
			//do nothing. handled in 'showCoords(evt)'
			break;
	}
	return;
}

function doZoom(evt){
	//used for Select By Rectangle
	//Select By Radius is function doZoomRadius
	var x, y;
	var xStartX = parseInt(startX) + parseInt(minX);
	var yStartY = parseInt(startY) + parseInt(minY);
	try{
		if(selectedObj){		
			var coords = getPageEventCoords(evt);
			x = coords.left;
			y = coords.top;
			if( ( x >= minX) && (x <= maxX) && (y >= minY) && (y <= maxY) ){
				//user is doing Rectangle
				if(isVML){ //DHTMLAPI.js
				    //is select by rectangle or radius					    			    
				    r = document.getElementById("rubberBand"); // Make <vml> box visible
					r.style.visibility = 'visible';
					//size X
					if(x < xStartX){
						// going to be negitive since user is moving to the left						
						r.style.pixelLeft = x;
						r.style.width = xStartX - x; //neg number
					}else if(x > xStartX){
						r.style.pixelLeft = xStartX;
						r.style.width = x - xStartX;    
					}else{
						r.style.pixelLeft = x;
						r.style.width = 1;
					}
					//size Y
					if(y < yStartY){
						r.style.pixelTop = y;
 						r.style.height = yStartY - y;
 					}else if(y > startY){
						r.style.pixelTop = yStartY;
						r.style.height = y - yStartY;
					}else{
						r.style.pixelTop = y;
						r.style.height = 1;
					}								

				}else{  //NON IE browsers
				
					drawRectangle(xStartX,yStartY,x,y);
					/*r = document.getElementById("selectBox"); //use DIV tag		
					r.style.visibility = 'visible';
					if(x < xStartX){
						// going to be negitive since user is moving to the left
						r.style.left = x //pixelLeft = x;
						r.style.width = xStartX - x; //r.style.pixelLeft;//neg number
					}else if(x > xStartX){
						r.style.left = xStartX;
						r.style.width = x - (xStartX);    
					}else{
						r.style.left = xStartX
						r.style.width = 0;
					}
					if(y < yStartY){
						//r.style.pixelTop = y;
						r.style.top = y
 						r.style.height =  yStartY - y; //r.style.pixelTop;
 					}else if(y > yStartY){
						r.style.top = yStartY
						r.style.height = y - yStartY;
					}else{
						r.style.top = yStartY
						r.style.height = 0;
					} 	
					*/			
				}	/*	*/		
			}
		}
	}catch (ex){
		alert(ex.description);
	}
 }
 
 
 function drawRectangle(x1,y1,x2,y2){
	if(selectedObj){
		var r = document.getElementById("selectBox"); //use DIV tag		
		r.style.visibility = 'visible';
		//r.style.position="absolute";
		//r.style.zIndex=165;
		
		if(x1 < x2){
			r.style.left = x1;
			r.style.width = x2 - x1; 
		}else if(x1 > x2){
			r.style.left = x2;
			r.style.width = x1 - x2;    
		}else{
			r.style.left = x1;
			r.style.width = 1;	
		}
		//size Y
		if(y1 < y2){
			r.style.top = y1;
			r.style.height = y2 - y1; 
		}else if(y1 > y2){
			r.style.top = y2;
			r.style.height = y1 - y2;    
		}else{
			r.style.top = y2;
			r.style.height = 1;	
		}							
	}	
	return;		
 }
 
 function drawCircle(evt){
	if(selectedObj){
		var oval, x, y, xDiff, yDiff, distance;
		var xStartX = startX + minX;
		var yStartY = startY + minY;
		var left, top;
		var line = new Array();
		var txtRadDist = document.forms[0].txtRadiusDistance;
		//showCoords(evt);
		try{
			if(selectedObj){			
				document.onmouseup = releaseDrawCircle;
				x = (evt.pageX) ? evt.pageX: evt.clientX;
				y = (evt.pageY) ? evt.pageY: evt.clientY;
				
				var vOval = document.getElementById("vSelectOval");
				xDiff=Math.abs(x-xStartX);
				yDiff=Math.abs(y-yStartY);
				
				if(xDiff>yDiff){
					distance = xDiff;
					if(x > startX){
						vOval.style.top = yStartY - xDiff;
						vOval.style.width = xDiff * 2;
						vOval.style.left = xStartX - xDiff;
						vOval.style.height = xDiff * 2;
						vOval.style.visibility="visible";
					}else{
						vOval.style.top = yStartY - xDiff;
						vOval.style.width = xDiff * 2;
						vOval.style.left = x;
						vOval.style.height = xDiff * 2;
						vOval.style.visibility="visible";
					}
				}else{
					distance = yDiff;
					if(y > startY){
						vOval.style.top = yStartY - yDiff;
						vOval.style.width = yDiff * 2;
						vOval.style.left = xStartX - yDiff;
						vOval.style.height = yDiff * 2;
						vOval.style.visibility="visible";
					}else{
						vOval.style.top = y;
						vOval.style.width = yDiff * 2;
						vOval.style.left = xStartX - yDiff;
						vOval.style.height = yDiff * 2;
						vOval.style.visibility="visible";
					}
				}
			}
			
			var lineLength = getLineLength(xStartX,x,yStartY,y); //DHTMLAPI.js
			lineLength = lineLength * getMeasureUnits();
			
			var theDiv = document.getElementById("divCoords");
			theDiv.style.visibility="visible";
			var theTop,theLeft;
			if((y-20)<minY){
				theTop = minY;
			}else{
				theTop = y - 20;
			}
			
			if((x-minX)<minX){
				theLeft = minX;
			}else{
				theLeft = x + 8;
			}
			theDiv.style.top = theTop;
			theDiv.style.left= theLeft;
			theDiv.innerHTML = "Radius: " + formatNumber2Dec(lineLength) + " ft";			 	
 	
 		}catch (ex){
 			alert(ex.message);
 		}
 	 }	
 }
 

 
 function releaseDrawCircle(evt){
	evt = (evt) ? evt : ((window.event) ? event : null);
	var x1, x2, y1, y2;
	var xDiff, yDiff;
	var xStartX = startX  + minX;
	var yStartY = startY + minY;
	var docX1, docX2, docY1, docY2;
	
	try{
		if(selectedObj){
			endx = (evt.pageX) ? evt.pageX-minX : evt.clientX-document.body.scrollLeft-document.body.clientLeft-minX; // the page x when event happens
			endy = (evt.pageY) ? evt.pageY-minY : evt.clientY-document.body.scrollTop-document.body.clientTop-minY;
			//get pointers to x,y hidden fields for server
			document.forms[0].x2.value=endx;
			document.forms[0].y2.value=endy;
			
			//record hidden anno for server
			if(document.forms[0].txtToolState.value.toLowerCase()=="circle anno"){
				//need to convert to coords and flip Y for acetate layer
				setAnnoString("circle","","",startX,startY,endx,endy,"","","","","","");
			}
			//force a post
			showRetrieving();
			selectedObj = null;
			document.onmouseup=null;
			__doPostBack("mapImage","");
			return false;
			
		}
		return false;;
	}
	catch (ex){
		alert(ex.description);
		return false;
	}	
 }
 
 function drawLine(evt){
	var endx, endy;
	var xStartX = startX + minX;
	var yStartY = startY + minY;
	
	try{
		if(selectedObj){	
			if(isVML){
				//get current mouse position
				endx = evt.clientX + document.body.scrollLeft - document.body.clientLeft;//use clientX or pageX do to VML is document api not image.
				endy = evt.clientY + document.body.scrollTop - document.body.clientTop; 
				makeVMLLine(xStartX,yStartY,endx,endy);
			}
			else{
				//none IE, 
			}
		}	
	
	}catch (ex){
	  alert(ex.message);
	}		
}
 
function releaseDrawLine(evt){

	try{
		evt = (evt) ? evt : ((window.event) ? event : null);
		x = (evt.pageX) ? evt.pageX: (evt.clientX + document.body.scrollLeft - document.body.clientLeft );//use clientX or pageX do to VML is document api not image.
		y = (evt.pageY) ? evt.pageY: (evt.clientY + document.body.scrollTop - document.body.clientTop);
		document.forms[0].x2.value=x-minX;
		document.forms[0].y2.value=y-minY;
		document.onmousemove=null;
		if(document.forms[0].txtToolState.value.toLowerCase()=="line anno"){
			//need to convert to coords and flip Y for acetate layer
			setAnnoString("line","","",startX,startY,(x-minX),(y-minY),"","","","","","");
		}
		showRetrieving();
		__doPostBack("mapimage","");
		
	}catch(ex){
		alert(ex.message);
	}
}

//release selected map
function release(evt){
	evt = (evt) ? evt : ((window.event) ? event : null);
	var x1, x2, y1, y2;
	
	try{
		if(selectedObj){
			var selectByTool = document.forms[0].txtToolState.value.toLowerCase();
			//if(selectByTool.substring(0,6)=="select"){
				//don't handle mouse here. it's handled in the engage function onclick
				//return false;
			//}	
			//endx = evt.pageX ? (evt.pageX-minX): evt.clientX - document.body.scrollLeft - document.body.clientLeft - minX  ; // the page x when event happens
			//endy = evt.pageY ? (evt.pageY-minY) : evt.clientY - document.body.scrollTop - document.body.clientTop - minY ;
			
			var coords = getPageEventCoords(evt);
			endx = (coords.left-minX);
			endy = (coords.top-minY);

			// Set xMin, xMax, yMin, yMax according to how the zoombox was drawn.	    
			//find X's
			if (endx == startX){
				var tool = document.forms[0].txtToolState.value;
				tool = tool.toLowerCase();
				//check if tool is Zoom In or Zoom Out.
				//code changed to % of scale so, don't create
				//an envelope
				if(tool!='zoom in' && tool!='zoom out'){
					x1 = endx - pixel_tolerance; //maybe in the future this will call anuther function
					x2 = endx + pixel_tolerance;
				}else{
					x1 = endx; //maybe in the future this will call anuther function
					x2 = endx;
				}
			}else if(endx < startX){
				//Changes the startX if dragging to the left
				//x1 = endx - startX;
				x1 = endx;
				x2 = startX;	
			}else if (endx > startX){
				//same as above 
				x1=startX;
				x2=endx;
			}
			//find Y's
			if (endy == startY){
				var tool = document.forms[0].txtToolState.value
				tool = tool.toLowerCase();
				if(tool=='zoom in' || tool == 'zoom out'){
					y1 = endy;
					y2 = endy;					
				}else{
					y1 = (endy - pixel_tolerance);
					y2 = (endy + pixel_tolerance);
				}
			}else if (endy < startY){
				y1 = endy;
				y2 = startY;			
			}else if (endy > startY){
				y1=startY;
				y2=endy;
			}
			
			//check if zoom or pan
			if(document.forms[0].txtToolState.value.toLowerCase()=="pan"){
				x1 = (endx - startX) * -1;
				y1 = (endy - startY) * -1;
			}
			
			//set xy, x2, x3, xy for postback		
			document.getElementById("x1").value = x1;
			document.getElementById("y1").value = y1;
			document.getElementById("x2").value = x2;
			document.getElementById("y2").value = y2;
			
			if(selectByTool.toLowerCase()=="rectangle anno"){				
			    setAnnoString("rectangle","","",x1,y1,x2,y2,"","","","","","");
			}		
			
			//force a post
			//setZIndex(selectedObj,220);
			selectedObj = null;
			showRetrieving();
			__doPostBack("mapImage","");
			//
			return false;
		}
		return false;
	}
	catch (ex){
		alert(ex.description);
		return false;
	}	
	/*
	evt = (evt) ? evt : ((window.event) ? event : null);
	var x1, x2, y1, y2, x, y;
	
	try{
		if(selectedObj){
			var selectByTool = document.forms[0].txtToolState.value.toLowerCase()
			
			var coords = getPageEventCoords(evt)	
			x = coords.left
			y = coords.top
			
			// Set xMin, xMax, yMin, yMax according to how the zoombox was drawn.	    
			//find X's
			if (x==(parseInt(startX)+parseInt(minX))){
				x1 = x //- pixel_tolerance; //maybe in the future this will call anuther function
				x2 = x //parseInt(x) + parseInt(pixel_tolerance);
			}else if(x < startX){
				//Changes the startX if dragging to the left
				//x1 = endx - startX;
				x1 = x;
				x2 = startX ;	
			}else if (x > startX){
				//same as above 
				x1=startX
				x2=x
			}
			//find Y's
			if (y==(parseInt(startY)+parseInt(minY))){
				y1 = y //(y - pixel_tolerance);
				y2 = y //(parseInt(y) + parseInt(pixel_tolerance));
			}else if (y < startY){
				y1 = y;
				y2 = startY;			
			}else if (y > startY){
				y1=startY
				y2=y
			}
			
			//check if zoom or pan
			if(document.forms[0].txtToolState.value.toLowerCase()=="pan"){
				x1 =(x - (parseInt(startX)+parseInt(minX)) * -1) //(x - (startX) * -1
				y1 =(y - (parseInt(startY)+parseInt(minY)) * -1) //(y - startY) * -1
			}
			
			//set xy, x2, x3, xy for postback		
			document.getElementById("x1").value = x1;
			document.getElementById("y1").value = y1;
			document.getElementById("x2").value = x2;
			document.getElementById("y2").value = y2;
			
			if(selectByTool.toLowerCase()=="rectangle anno"){				
			    setAnnoString("rectangle","","",x1,y1,x2,y2,"","","","","","")
			}		
			
			//force a post
			//setZIndex(selectedObj,220);
			selectedObj = null;
			showRetrieving()
			__doPostBack("mapImage","");
			//
			return false;
		}
		return false;
	}
	catch (ex){
		alert(ex.description);
		return false;
	}	
	
	*/
}


function coords(x1,y1,x2,y2){
	var _x1,_x2,_x3,_x3;
	this._x1=x1;
	this._y1=y1;
	this._x2=x2;
	this._y2=y2;
	
	this.x1=function(){
		return this._x1;
	}
	this.y1=function(){
		return this._y1;
	}
	this.x2=function(){
		return this._x2;
	}
	this.y2=function(){
		return this._y2;
	}
}

function latitude(degrees,minutes,seconds){
	this.degrees = degrees;
	this.minutes = minutes;
	this.seconds = seconds;
}

function longitude(degrees,minutes,seconds){
	this.degrees = degrees;
	this.minutes = minutes;
	this.seconds = seconds;
}

function doTextAnnoDrag(evt){
	var txt = document.forms[0].txtDisplayCoords;
	if(txt.value=="1"){
		return true;
	}
	evt = (evt) ? evt : ((window.event) ? event : null);
	x = evt.pageX ? (evt.pageX): (evt.clientX) ; // the page x when event happens
	y = evt.pageY ? (evt.pageY) : (evt.clientY);	
	var theDiv = getRawObject("divTextAnno");
	if(x>minX && x<(minX + document.getElementById("mapImage").width) && 
		y >= minY && y <=(minY+document.getElementById("mapImage").height))
	{		
		var gotIt=false;
		annos = document.forms[0].radAnno;
		for(i=0;i<annos.length;i++){
			if(annos[i].checked){
				if(i==4){
					gotIt = true;
				}
			}
			if(gotIt){
				break;
			}
		}
		if (!gotIt){
			return false;
		}
		var sVal = document.forms[0].txtUserTextAnno.value;
		var sNewText = ""
		for(i=0;i<sVal.length;i++){
			if(sVal.charAt(i)=="\n"){
				sNewText += "<br/>";
			}else{
				sNewText += sVal.charAt(i);
			}
		}
		if(document.forms[0].ddlCoordType.selectedIndex==0){
			theDiv.style.left=x+2;
			theDiv.style.top=y+2;
			theDiv.innerHTML= sVal; //document.forms[0].txtUserTextAnno.value;
			theDiv.style.visibility="visible";
		}
	}else{
		theDiv.style.visibility="hidden";
	}
	
}	

function postPoly(){
	//loop through the X, Y arrays and post mouse coords to textboxes, then submit
	var i;
	if((clickCount<3) || (clickCount<3)){
		alert("You must have at least 3 points to select a polygon");
		return false;
	}
	//get pointers to X,Y textboxes
	var txtX1 = document.forms[0].x1;
	var txtY1 = document.forms[0].y1;
	txtX1.value="";
	txtY1.value="";
	for(i=0;i<clickCount;i++){
		txtX1.value +=(clickX[i]+ "|");
		txtY1.value +=(clickY[i]+ "|");
	}
	txtX1.value += clickX[0]; //close polygon back to first click point
	txtY1.value += clickY[0]; //close polygon back to first click point
	
	showRetrieving();
	__doPostBack("anchPolygon","");
}

function doDoubleClick(evt){
	if(selectedObj){
		var tool = document.forms[0].txtToolState.value;
		if(tool.toLowerCase()=="select by polygon"){
			if(clickX.length<3){
				alert("You must select at least 3 points to create a polygon.");
				return false;
			}
			postPoly();
			return false;
		}
	}
}	


