var Left = 0.0;
var Right = 0.0;
var Top = 0.0;
var Bottom = 0.0;

var CurrentLeft = 0.0;
var CurrentRight = 0.0;
var CurrentTop = 0.0;
var CurrentBottom = 0.0;

var mapx = 0.0;
var mapy = 0.0;
var zoomFactor = 1.5;
var imsdpi = 96;

//var mWidth;
//var mHeight;
//var topOffset = 0;
//var leftOffset = 0;
var contextMenuWidth = 125;
var contextMenuHeight = 150;
var xDistance = Math.abs(CurrentRight-CurrentLeft);
var yDistance = Math.abs(CurrentTop-CurrentBottom);
var panX = xDistance * panFactor;
var panY = yDistance * panFactor;
//var pixelX = xDistance/mWidth;
//var pixelY = yDistance/mHeight;
var mapX = CurrentLeft;
var mapY = CurrentTop;
var lastLeft = CurrentLeft;
var lastRight = CurrentRight;
var lastTop = CurrentTop;
var lastBottom = CurrentBottom;
var panFactor = 85/100;
var showXYs = true;
var enforceFullExtent = false;
var currentMapScale = '';
// variables for ovmap offset
var ovHspc = 0;
var ovVspc = 0;

var ovImageVar;
var ovBorderWidth = 1;
var ovExtentBoxSize = 1;

var i2Width = 132;
var i2Height = 56;

var fullOVLeft = 0.0;
var fullOVRight = 0.0;
var fullOVTop = 0.0;
var fullOVBottom = 0.0;
var fullOVWidth = 0.0;
var fullOVHeight = 0.0;

var showXYs = true;

var xHalf = 0.0;
var yHalf = 0.0;

var lastClickX = 0.0;
var lastClickY = 0.0;
var lastSegment = 0.0;
var firstTotalMeasure = 0.0;

var showAcetateLayer = true; 
//variable for the current cursor type.
var Ccursor = "default";
var addToSelect = false;
var currentToolMode;

var enforceFullExtent = true;
var fullWidth = 20000;

var markup = false;

var subjectSiteX;
var subjectSiteY;

// get the coords at mouse position
function getMouse(e) 
{
	window.status="";
	getImageXY(e);


	if ((mouseX>(mWidth+leftOffset)) || (mouseY>(mHeight+topOffset)) || (mouseX<=leftOffset) ||(mouseY<=topOffset)) 
	{
		chkMouseUp(e);
		if(markup) drawVML(0);
	} 
	else 
	{
		mouseStuff();
	}
		return false;
}

function initExtents()
{
	defaultLeft = CurrentLeft;
	defaultBottom = CurrentRight;
	defaultRight = CurrentBottom;
	defaultTop = CurrentTop;
}


//Convert the screen x,y coords to map coords.
function getMapXY(xIn,yIn) 
{
	var x1, x2, x3, y1, y2, y3;
	// normalize the map coords
	x1 = Math.abs(CurrentRight - CurrentLeft);
	y1 = Math.abs(CurrentTop - CurrentBottom);

	//prevent divide by 0
	x1==0?x1=0.1:x1=x1;
	y1==0?y1=0.1:y1=y1;
	
	x2 = mWidth;
	y2 = mHeight;

	//prevent divide by 0
	x2==0?x2=1:x2=x2;
	y2==0?y2=1:y2=y2;

	x3 = x1 / x2;
	y3 = y1 / y2;
	
	tempy3 = y3;

	xIn = xIn - leftOffset;
	yIn = ((yIn - topOffset) * -1) + (mHeight);
	
	// calculate where the mouse point is in map nomalized coords, and denormalize
	mapX = xIn * x3 + CurrentLeft;
	mapY = yIn * y3 + CurrentBottom;
	
}

//Convert the screen x,y coords to map coords.
function convertToMapUnits(coord,type) 
{
	var x1, x2, x3, y1, y2, y3;
	var returnVal;
	
	// normalize the map coords
	x1 = Math.abs(CurrentRight - CurrentLeft);
	y1 = Math.abs(CurrentTop - CurrentBottom);

	//prevent divide by 0
	x1==0?x1=0.1:x1=x1;
	y1==0?y1=0.1:y1=y1;
	
	x2 = mWidth;
	y2 = mHeight;

	//prevent divide by 0
	x2==0?x2=1:x2=x2;
	y2==0?y2=1:y2=y2;

	x3 = x1 / x2;
	y3 = y1 / y2;
	
	tempy3 = y3;

	if(type){
		coord = coord - leftOffset;
		returnVal = coord * x3 + CurrentLeft;
	} else {
		coord = ((coord - topOffset) * -1) + (mHeight);
		returnVal = coord * y3 + CurrentBottom;
	}
	return returnVal;
}

function getImageXY(e) 
{
	if (isNav) {
		mouseX=e.pageX;
		mouseY=e.pageY;
	} else {
		mouseX=event.clientX + document.body.scrollLeft;
		mouseY=event.clientY + document.body.scrollTop;
	}
}	

// zoom in around mouse click
function zoomin(e) 
{
	getMapXY(mouseX,mouseY);
	var tempLeft=lastLeft;
	var tempRight=lastRight;
	var tempTop=lastTop;
	var tempBottom=lastBottom;
	
	Left = mapX - (xHalf/zoomFactor);
	Right = mapX + (xHalf/zoomFactor);
	Top = mapY + (yHalf/zoomFactor);
	Bottom = mapY - (yHalf/zoomFactor);

	getMap('zoomin');
	
}

// zoom out from mouse click
function zoomout(e) 
{
	getMapXY(mouseX,mouseY);
	var tempLeft=lastLeft;
	var tempRight=lastRight;
	var tempTop=lastTop;
	var tempBottom=lastBottom;

	Left = mapX - (xHalf/zoomFactor) * 2.5;
	Right = mapX + (xHalf/zoomFactor) * 2.5;
	Top = mapY + (yHalf/zoomFactor) * 2.5;
	Bottom = mapY - (yHalf/zoomFactor) * 2.5;
	
	if (enforceFullExtent){
		if ((Right-Left)<fullWidth){
			getMap('zoomout');
		}
	} else
	getMap('zoomout');
}

function mouseStuff() 
{
	if (zooming) 
	{
		x2=mouseX;
		y2=mouseY;
		setClip();
	} 
	else if(panning) 
	{
		x2=mouseX;
		y2=mouseY;
		panMouse();	
	}
	else if(markup)
	{
		x2=mouseX;
		y2=mouseY;
		drawVML(5);	
	}
	else if(movegraphic)
	{
		x2=mouseX;
		y2=mouseY;
		if(!isVisible("subjectSite")) showLayer("subjectSite");
		moveGraphic();
	
	}
	
	getMapXY(mouseX,mouseY);
	
	if (showXYs) 
	{
		var mouseString = mapX + ", " + mapY
		window.status = mouseString;
	}
	if (toolMode == 5){
		updateMeasureTotals();
	}
}

function moveBox()
{
	moveLayer('ZoomBox', mouseX-(zoomBoxW/3),mouseY-(zoomBoxH/3));
}

// start zoom in.... box displayed
function startZoomBox(e) 
{
	getImageXY(e);
	
	// keep it within the MapImage
	if (zooming) 
	{
		stopZoomBox(e);
	} 
	else 
	{
		x1=mouseX;
		y1=mouseY
		x2=x1+1;
		y2=y1+1;
		zleft=x1;
		ztop=y1;
		zbottom=y1;
		zright=x1;
		boxIt(x1,y1,x2,y2);
		zooming=true;
	}
	return false;
}

// stop zoom box display... zoom in
function stopZoomBox(e) 
{
	zooming=false;
	hideLayer("zoomBoxTop");
	hideLayer("zoomBoxLeft");
	hideLayer("zoomBoxRight");
	hideLayer("zoomBoxBottom");
	if(toolMode == 7){
		pix2map(zleft,zbottom,zright,ztop);
		getMap('selectrect');
	} else
	if(toolMode == 105){
		drawVML(5);
	} else {
		if (zright == zleft && ztop == zbottom)
		{
			zoomin(e);
		}
		else 
		{
			pix2map(zleft,zbottom,zright,ztop);
			getMap('zoomin');
		}
	}
	return true;
}

// start zoom out... box displayed
function startZoomOutBox(e) 
{
	getImageXY(e);
	// keep it within the MapImage
	if ((mouseX<mWidth) && (mouseY<mHeight)) 
	{
		if (zooming) 
		{
			stopZoomOutBox(e);
		} 
		else 
		{
			x1=mouseX;
			y1=mouseY
			x2=x1+1;
			y2=y1+1;
			zleft=x1;
			ztop=y1;
			zbottom=y1;
			zright=x1
			boxIt(x1,y1,x2,y2);
			zooming=true;
		}
	}
	return false;
}
// stop zoom out box. . . zoom out
function stopZoomOutBox(e) 
{

	zooming=false;
	hideLayer("zoomBoxTop");
	hideLayer("zoomBoxLeft");
	hideLayer("zoomBoxRight");
	hideLayer("zoomBoxBottom");
	if (zright == zleft && ztop == zbottom)
	{
	
		zoomout(e);
	}
	else 
	{
		pix2map(zleft,zbottom,zright,ztop);
			
		var x1, x2, x3, y1, y2, y3;
		x1 = CurrentRight - CurrentLeft;
		y1 = CurrentTop - CurrentBottom;
		x2 = Right - Left;
		y2 = Top - Bottom;
		x3 = x1 / x2;
		y3 = y1 / y2;
		
		Left = Left - x2 * x3;
		Right = Right + x2 * x3;
		Top = Top + y2 * y3;
		Bottom = Bottom - y2 * y3;
		
		if (enforceFullExtent){
			if ((Right-Left)<fullWidth){
				getMap('zoomout');
			}
		} else
		getMap('zoomout');
	}
	return true;
}

// clip zoom box layer to mouse coords
function setClip() 
{	
	var tempX=x1;
	var tempY=y1;
	if (x1>x2) 
	{
		zright=x1;
		zleft=x2;
	} 
	else 
	{
		zleft=x1;
		zright=x2;
	}
	if (y1>y2) 
	{
		zbottom=y1;
		ztop=y2;
	} 
	else 
	{
		ztop=y1;
		zbottom=y2;
	}
	
	if ((x1 != x2) && (y1 != y2)) 
	{
		boxIt(zleft,ztop,zright,zbottom);
	}
}

// move map image with mouse
function panMouse() {
	var xMove = x2-x1;
	var yMove = y2-y1;
	var cLeft = -xMove;
	var cTop = -yMove;
	var cRight = mWidth;
	var cBottom = mHeight;
	if (xMove>0) {
		cLeft = 0;
		cRight = mWidth - xMove;
	}
	if (yMove>0) {
		cTop = 0;
		cBottom = mHeight - yMove;
	}
	clipLayer2("theMap",cLeft,cTop,cRight,cBottom);
	moveLayer("theMap",xMove+hspc,yMove+vspc);
}

function moveGraphic(){
	moveLayer("subjectSite",mouseX-117,mouseY);
	return false;
}
function drawGraphic(){
	moveLayer("subjectSite",mouseX-117,mouseY);
	getMapXY(mouseX-59,mouseY)
	subjectSiteX = mapX;
	subjectSiteY = mapY;
	movegraphic = false;
}
// start pan.... image will move
function startPan(e) {
	moveLayer("theMap",hspc,vspc);

	getImageXY(e);
	// keep it within the MapImage
	if ((mouseX<mWidth) && (mouseY<mHeight)) {
		if (panning) {
			stopPan(e);
		} else {
			x1=mouseX;
			y1=mouseY
			x2=x1+1;
			y2=y1+1;
			panning=true;
		}
	}
	return false;

}

// stop moving image.... pan 
function stopPan(e) 
{
	window.scrollTo(0,0);
	panning=false;
	
	var ixOffset = x2-x1;
	var iyOffset = y1-y2;
	var xOffset = (ixOffset / mWidth) * (CurrentRight - CurrentLeft);
	var yOffset = ((iyOffset) / mHeight) * (CurrentTop - CurrentBottom);

	Left = CurrentLeft - xOffset;
	Right = CurrentRight - xOffset;
	Top = CurrentTop - yOffset;
	Bottom = CurrentBottom - yOffset;
	
	hideLayer("theMap");
	moveLayer("theMap",leftOffset,topOffset);
	clipLayer2("theMap",0,0,mWidth,mHeight);

	getMap('pan');
	return true;
}


// pan to mouse click
function pan(e) 
{
	getMapXY(mouseX,mouseY);
	var tempLeft=lastLeft;
	var tempRight=lastRight;
	var tempTop=lastTop;
	var tempBottom=lastBottom;
	
	Left = mapX - xHalf;
	Right = mapX + xHalf;
	Top = mapY + yHalf;
	Bottom = mapY - yHalf;
	getMap('pan')
}	



// perform appropriate action with mapTool
function mapTool(e) 
{
	//alert('mapTool')
	var theButton= 0;
	
	if (isNav) {
		theButton = e.which;
	} else {
		theButton =window.event.button;
	}	

	if (theButton==1) 
	{
		getImageXY(e);

		if ((mouseX>=leftOffset) && (mouseX<=(parseInt(mWidth+leftOffset))) && (mouseY>=topOffset) && (mouseY<=(parseInt(mHeight+topOffset)))) 
		{
			//alert(mouseX+','+mouseY+','+leftOffset+','+topOffset+','+mWidth+','+mHeight+','+(parseInt(mWidth+leftOffset))+','+(parseInt(mHeight+topOffset)))
			
			switch(toolMode) 
			{
				case 1:
					startZoomBox(e);
					return false;
					break;
				case 2:
					startZoomOutBox(e);
					return false;
					break;
				case 3:
					//pan(e);
					startPan(e);
					return false;
					break;
				case 4:
					identify(e);
					break;
				case 5:
					measure(e);
					break;	
				case 6: //single-click
					checkKey();
					selectPoint(e);
					break;		
				case 7: //rectangle select
					checkKey();
					startZoomBox(e);
					return false;
					break;	
				case 8: // line select
					checkKey();
					addPoint(e);
					return false;
					break;	
				case 9: //polygon select
					checkKey();
					addPoint(e);
					return false;
					break;	
				case 101: //
					drawVML(1);
					break;
				case 102: //
					drawVML(2);
					break;
				case 103: //
					drawVML(3);
					break;
				case 104: //
					drawVML(4);
					break;
				case 105: //
					startZoomBox(e);
					return false;
					break;	
				case 106: //
					drawGraphic();
					break;							
				default:
			
			}
		}
	} else
	if (theButton==2){
		return false;
	} 
}

function checkKey(){
	if(window.event.ctrlKey)
		addToSelect = true;
	else
		addToSelect = false;

}

function identify(e){
//if (toolMode == 4) 
	//{
		getImageXY(e)
		getMapXY(mouseX,mouseY);
		//alert(mouseX+','+mouseY+'\n'+mapX+','+mapY);
		getMap('identify');
	//}

}

function selectPoint(e){
	getImageXY(e)
	getMapXY(mouseX,mouseY);
	getMap('selectpoint');
}

function measure(e){
	getImageXY(e)
	getMapXY(mouseX,mouseY);
	lastSegment = getSegment(lastClickX,lastClickY,mapX,mapY);
	lastClickX = mapX;
	lastClickY = mapY;
	showAcetateLayer = true;
	getMap('measure');
}

function addPoint(e){
	getImageXY(e)
	getMapXY(mouseX,mouseY);
	if(toolMode == 8){
		getMap('addpointline');
	} else 
	if(toolMode == 9){
		getMap('addpointpoly');
	}
}

// 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 == 7) && (zooming)) 
	{
		stopZoomBox(e);
	}
	if((toolMode == 105)&& (zooming)) 
	{
		stopZoomBox(e);
	}
	if((toolMode == 106)&&(movegraphic)) 
	{
		movegraphic = false	
	}		

	return false;
}

function pix2map(left,bottom,right,top)
{
	//alert(left+','+bottom+','+right+','+top)
	getMapXY(left,bottom);
	Left = mapX;
	Bottom = mapY;
	getMapXY(right,top);
	Right = mapX;
	Top = mapY;
}


var currentSel = true;
var submenu1 = false;
var submenu2 = false;

function showSel(id){
	var linkobj = document.getElementById(id);
	linkobj.style.backgroundColor = '#DDDD22';	
	linkobj.style.cursor = "hand";
}

function hideSel(id){
	var linkobj = document.getElementById(id);
	linkobj.style.backgroundColor = '#eaeef2';	
	linkobj.style.cursor = "default";
}

function handleClick(arg){
	if(isVisible("ZoomBoxMenu2")){
		if(arg != 'none'){
			zoomToArea(arg)
		}
		hideLayer("ZoomBoxMenu2");
	}
	toolMode = currentToolMode;
}

function checkMouseLeave(){
if(!currentSel) hideLayer("Menu1");

}
function checkMouseOut(){
	//alert(mouseX+' '+mouseY);
	if((mouseX > 0)&&(mouseY>-18)){ 
		showLayer("Menu1")
	} else { 
		parent.MapFrame.toolMode = parent.MapFrame.currentToolMode;
		hideLayer("Menu1")
	}
}

function handleContextMenuClick(type){

	hideLayer('theContextMenu');
	resetContextMenu();
	if(type == 1){
		getMap("completeselection");
	} else
	if(type == 2){
		getMap("removelastpoint");
	} else
	if(type == 3){
		setTool('clear');
	}
}
			
function showContextMenu(){
	if((mouseX > leftOffset) && (mouseX < mWidth+leftOffset) && (mouseY > topOffset) && (mouseY < mHeight+topOffset)){
		if((toolMode == 8) || (toolMode == 9)){
			currentToolMode = toolMode;
			toolMode = 1111;
			
			var tempX;
			var tempY;
			
			tempX = mouseX;
			tempY = mouseY;
			if(tempX > mWidth-155) tempX = tempX - 154;
			if(tempY > mHeight-60) tempY = tempY - 56;
			
			moveLayer('theContextMenu',tempX,tempY);
			showLayer('theContextMenu');
			
			return false;
		}
	} else {
		hideLayer('theContextMenu');		
	}
}
function resetContextMenu(){
	var obj;
	obj = document.getElementById("cm1");
	if(obj != null)	obj.src = "images/cm1b.gif";
	obj = document.getElementById("cm2");
	if(obj != null) obj.src = "images/cm2b.gif";
	obj = document.getElementById("cm3");
	if(obj != null) obj.src = "images/cm3b.gif";
}


function zoomToArea(id){
	document.getElementById("Hidden10").value = id;
	getMap('zoomtoarea');
}

function processLink(x,y){
	getMapXY(x,y);
	getMap('getlink')
}

function updateParams(){

	if(parent.searchFrame.redirectPage != ''){
		parent.document.location = parent.searchFrame.redirectPage;
	} else {
		hideLayer('loadingMap');
		//if(parent.searchFrame.currentTool != null){
		//	parent.maptoolFrame.setTool(parent.searchFrame.currentTool);
		//}
		
		var mapImageURL = parent.searchFrame.document.WebForm1.Hidden12.value;
				 
		if(mapImageURL != ""){
		
			var content = '<img name="theImage" src="' + mapImageURL + '" border=0 hspace=0 vspace=0 width=' + (mWidth) + ' height=' + (mHeight) + '>';
			hideLayer("loadingMap");
			replaceContent("theMap", content);
			if(!isVisible("theMap")) showLayer("theMap");
		}
	
		if(parent.maptoolFrame.document.getElementById("tbScale") != null){
			if (currentMapScale != '') {
				//parent.maptoolFrame.tbScale.value = currentMapScale;
				parent.maptoolFrame.document.getElementById("tbScale").value = currentMapScale;
			}
		}
		
		var acetateImageURL = parent.searchFrame.document.WebForm1.Hidden22.value;
		
		if((acetateImageURL != "") && (showAcetateLayer)){
			
			var content = '<img name="theClickImage" src="' + acetateImageURL + '" border=0 hspace=0 vspace=0 width=' + (mWidth) + ' height=' + (mHeight) + '>';
			
			hideLayer("loadingMap");
			replaceContent("theClicks",content);
			
			if(!isVisible("theClicks")) showLayer("theClicks");
			
			updateMeasureTotals();
		} else {
			if(isVisible("theClicks")) hideLayer("theClicks");
		}
		
		xHalf = (CurrentRight - CurrentLeft)/2;
		yHalf = (CurrentTop - CurrentBottom)/2;
	}
}


function updateTools(){

	parent.searchFrame.document.WebForm1.Hidden3a.value = mWidth;
	parent.searchFrame.document.WebForm1.Hidden4a.value = CurrentRight - CurrentLeft;

}

// get the Map Image width
function getMapWidth () {
	var mapFrameWidth = thePageWin.innerWidth;
	if (mapFrameWidth == null) {
		mapFrameWidth = thePageDoc.body.clientWidth;
	}
	return mapFrameWidth;
}

 //get the Map Image height
function getMapHeight () {
	var mapFrameHeight = thePageWin.innerHeight;
	if (mapFrameHeight == null) {
		mapFrameHeight = thePageDoc.body.clientHeight;
	}
	return mapFrameHeight;
}

function openPrintWindow(mapURL,legendURL){
//alert("openPrintWindow, " + mapURL +"," + legendURL)
	if((mapURL != '')&&(legendURL != '')){
		var win1 = window.open("","printwin","width=700,height=550");
		win1.document.writeln("<html><body>");
		win1.document.writeln("<table><tr><td colspan=2 align=center>City of North Vancouver Print Map<td></tr>");
		win1.document.writeln("<tr><td valign=top><img src=");
		win1.document.writeln(mapURL);
		win1.document.writeln("><td><td valign=top><img src=");
		win1.document.writeln(legendURL);
		win1.document.writeln("</td></tr></table></body></html>");
		win1.document.close();
		if (window.focus) {win1.focus()}

	}
}

function openPDFWindow(pdfURL){

//alert("openPDFWindow, " + pdfURL)

	if(pdfURL != ''){
		if(pdfURL.indexOf('.pdf') > 0){
			var win1 = window.open(pdfURL,"printwin","width=700,height=550,resizeable=yes,resizable=yes");
			return false;
		} else
		if(pdfURL.indexOf('.htm') > 0){
			var win1 = window.open(pdfURL,"printwin","width=700,height=550,scrollbars=yes,menubar=yes,location=yes,status=yes,toolbar=yes,resizable=yes");
			return false;
		}
	}
}

function openExportMapWindow(exportMapURL){
alert("openExportMapWindow, " + pdfURL)

	if(exportMapURL != ''){
		var win1 = window.open(exportMapURL,"printwin","menubar=yes,width=600,height=500,resizeable=yes,resizable=yes");
		return false;
	}

}

function getSegment(x1,y1,x2,y2){

	var segmentLength = 0.0;
	var xDist = x1 - x2;
	var yDist = y1 - y2;
	segmentLength = Math.sqrt((xDist * xDist) + (yDist * yDist));
	return(segmentLength);
		
}

function updateMeasureTotals(){

	var segmentLength = 0.0;
	var totalLength = 0.0;
	var segmentString;
	var lastSegmentString;
	var totalString;
	var polygonArea = '';
	
	if(lastClickX != 0){
		segmentLength = getSegment(lastClickX,lastClickY,mapX,mapY);
		segmentString = segmentLength.toString().substr(0,(segmentLength.toString().indexOf('.')+3));	
		if (lastSegment != 0){
			lastSegmentString = lastSegment.toString().substr(0,(lastSegment.toString().indexOf('.')+3));	
		}
	}

	if(parent.searchFrame.measureTotal != '0.0'){
		totalLength = parent.searchFrame.measureTotal;
		totalString = totalLength.toString().substr(0,(totalLength.toString().indexOf('.')+3));	
		var content = '<table border=0 cellpadding=0 cellspacing=0><tr class="displayRow"><td><input type=text class=displayText name=measure1 value=" Total Length: '+totalString+'m" maxsize=25></td></tr><tr class="displayRow"><td><input type=text class=displayText name=measure2 value=" Last Segment: '+lastSegmentString+'m" maxsize=25></td></tr><tr class="displayRow"><td><input type=text class=displayText name=measure2 value=" This Segment: '+segmentString+'m" maxsize=25></td></tr>'
		if(parent.searchFrame.measureAreaTotal != '0'){
			var tempArea = parent.searchFrame.measureAreaTotal;
			if(tempArea.indexOf(".")>0){
				tempArea = tempArea.substr(0,tempArea.indexOf(".")+3)
			}
			content += '<tr class="displayRow"><td><input type=text class=displayText name=measure3 value=" Polygon Area: ' + tempArea + 'sq m" maxsize=25></td></tr>';
		}
		content += '</table>';
		
		replaceContent("measureTotals", content);
		if(!isVisible("measureTotals")){
			showLayer("measureTotals");
		}
	}
}

function reset(){
	lastClickX = 0.0;
	lastClickY = 0.0;
	hideLayer("measureTotals");
	hideLayer("theClicks");
	hideLayer("subjectSite");
	firstTotalMeasure = 0.0;
	coordString = '';
	if(parent.searchFrame.measureTotal != null)
	parent.searchFrame.measureTotal = '0.0';
	showAcetateLayer = false;
	parent.searchFrame.document.WebForm1.Hidden22.value = "";
	parent.searchFrame.document.WebForm1.Hidden30.value = "";
	parent.searchFrame.document.WebForm1.Hidden31.value = "";
	coordString = ''
	
	//getMap('clear');
}


function setTool(tool){
	//alert('mapFrame, ' + tool);
	switch(tool) 
	{
	case 'full':
		getMap('full');
		break;
	case 'previous':
		getMap('previous');
		break;
	case 'zoomin':
		toolMode = 1;
		Ccursor = "crosshair";
		break;
	case 'zoomout':
		toolMode = 2;
		Ccursor = "crosshair";
		break;
	case 'pan':
		toolMode = 3;
		Ccursor = "move";
		break;
	case 'identify':
		toolMode = 4;
		Ccursor = "default";
		break;
	case 'measure':
		toolMode = 5;
		Ccursor = "crosshair";
		showAcetateLayer = true;
		//hideLayer("theClicks");
		//hideLayer("measureTotals");
		//reset();
		break;
	case 'selectpoint':
		toolMode = 6;
		Ccursor = "default";
		break;
	case 'selectrect':
		toolMode = 7;
		Ccursor = "crosshair";
		break;
	case 'selectline':
		//reset();
		toolMode = 8;
		Ccursor = "crosshair";
		showAcetateLayer = true;
		hideLayer("theClicks");
		break;
	case 'selectpoly':
		//reset();
		toolMode = 9;
		Ccursor = "crosshair";
		showAcetateLayer = true;
		hideLayer("theClicks");
		break;
	case 'zoomtoselection':
		getMap('zoomtoselection');	
		break;
	case 'print':
		getMap('print');
		break;
	case 'exportimage':
		getMap('exportimage');
		break;	
	case 'clear':
		reset();
		getMap('clear');
		break;
	case 'drawpoly':
		toolMode = 101;
		Ccursor = "default";
		drawVML(0);
		break;
	case 'drawline':
		toolMode = 102;
		Ccursor = "default";
		drawVML(0);
		break;
	case 'drawrect':
		toolMode = 105;
		Ccursor = "default";
		drawVML(0);
		break;	
	case 'drawpoint':
		toolMode = 103;
		Ccursor = "default";
		drawVML(0);
		break;
	case 'drawtext':
		toolMode = 104;
		Ccursor = "default";
		drawVML(0);		
		break;
	case 'subjectsite':
		toolMode = 106;
		Ccursor = "default";
		movegraphic = true;
		break;	
	}
	if(isIE){
		document.all.theMap.style.cursor = Ccursor;
	}
}

function doBuffer(bufferSize,units){

	//alert(bufferSize+', '+units);
	// add checking here
	
	parent.searchFrame.document.WebForm1.Hidden25.value = bufferSize;
	parent.searchFrame.document.WebForm1.Hidden26.value = units;
	getMap('buffer');
}

function exportSelection(fileType,exportQuery,exportType){
//alert(fileType+','+exportQuery+','+exportType)
	parent.searchFrame.document.WebForm1.Hidden27.value = fileType;
	parent.searchFrame.document.WebForm1.Hidden29.value = exportQuery;
	if(exportType == 1){
		getMap('exportfile');
	} else  
	if(exportType == 2) {
		getMap('exportimage');
	}
}

function zoomToScale(scale){
	
	//alert(parent.maptoolFrame.tbScale.value+', '+scale);
	
	if((scale != null)&&(scale != '')){
		requestedScale = scale;
	} else {
		//requestedScale = parent.maptoolFrame.tbScale.value;
		requestedScale = parent.maptoolFrame.document.getElementById("tbScale").value;
	}
	//alert(requestedScale)
	var retval = regular(requestedScale);
	
	if(retval){
		var mapunitspix = (CurrentRight - CurrentLeft) / mWidth;
		var currentMapWidth = CurrentRight - CurrentLeft;
		var currentMapHeight = CurrentTop - CurrentBottom;
		var pagemetresperpix = 0.0254 / imsdpi;
				
		var newMapWidth = requestedScale * pagemetresperpix * mWidth;
		var newMapHeight = (newMapWidth / (CurrentRight - CurrentLeft)) * (CurrentTop - CurrentBottom);
		var incr = 0.0;
				
		if(currentMapWidth > newMapWidth){
			incr = (currentMapWidth - newMapWidth) /2;
			Left = CurrentLeft + incr;
			Right = CurrentRight - incr;
			incr = (currentMapHeight - newMapHeight) /2;
			Top = CurrentTop - incr;
			Bottom = CurrentBottom + incr;
		} else {
			incr = (newMapWidth - currentMapWidth) /2;
			Left = CurrentLeft - incr;
			Right = CurrentRight + incr;
			incr = (newMapHeight - currentMapHeight) /2;
			Top = CurrentTop + incr;
			Bottom = CurrentBottom - incr;
		} 
		//alert(Left+','+Right+','+Bottom+','+Top+'\n'+CurrentLeft+','+ CurrentRight+','+CurrentBottom+','+CurrentTop);
		getMap('zoomtoscale');
	} else {
		parent.maptoolFrame.tbScale.value = "";
		alert("A numeric value is required.");
	}
}

function regular(string) {
    if (string.search(/^[0-9]*$/) != -1)
         return true;
     else
         return false;
}




/*
VML specific functions
*/
var clickCount = 0;
var clickPointX = new Array();
var clickPointY = new Array();
var startOfPath = "m ";
var endOfPath = " e";
var currentPolyList = ''; 
var currentRectangleList = '';
var currentLineList = ''; 
var currentPointList = ''; 
var currentTextPointList = '';
var currentTextList = '';
var polyLineInd = ' ';
var drawPathList = '';
var coordString = '';
var lastType = 0;
var markupCount = 0;	
var textMarkupCount = 0;	

function drawVML(type) {
	/*
	0 = close the feature
	1 = polygon
	2 = line
	3 = point
	4 = text
	5 = rectangle
	
	*/
	if (type == 0){
		//alert('drawVML(0):' + currentLineList + ' lastType: ' + lastType)
		clickCount = 0;
		var separator = ", ";
		var templist = '';
		//alert('currentPolyList: '+currentPolyList+'\n\ncurrentLineList: '+currentLineList+', \n\nlastType: '+lastType+'\n\nshould be closing feature: '+templist)
		if(lastType == 1){
			currentPolyList = currentPolyList + drawPathList + separator;
			templist = currentPolyList;
		} else
		if(lastType == 2){
			currentLineList = currentLineList + drawPathList + separator;
			templist = currentLineList;
		}
		//alert('should be closing feature: '+templist+', lastType: '+lastType)
		drawPathList = '';
	} else {
		if (type == 1){
			endOfPath = ", xe";
		} else 
		if (type == 2){
			endOfPath = ", e";
		} else 
		if (type == 3){
			endOfPath = "";
		}else
		if (type == 5){
			endOfPath = ", xe";
		}
		lastType = type;
		var theX = window.event.x;
		var theY = window.event.y;
		drawPathList = "";
		var pathlist = "";
		
		vmlX = theX;
		vmlY = theY;
			
		clickPointX[clickCount]=vmlX;
		clickPointY[clickCount]=vmlY;
		clickCount += 1;
		
		if (clickCount == 1) {
			drawPathList = startOfPath+clickPointX[0]+","+clickPointY[0]+endOfPath;
		} else {
			markupCount = 1;
			pathlist = clickPointX[0]+","+clickPointY[0];
			while(markupCount < clickCount) {
				if(markupCount == 1) polyLineInd = ' l '; else polyLineInd = ' '; 
				pathlist = pathlist+polyLineInd+clickPointX[markupCount]+","+clickPointY[markupCount];
				markupCount += 1;
			}
			drawPathList = startOfPath+pathlist+endOfPath;
		}
		if (type == 1){
			//alert('currentPolyList: '+currentPolyList)
			if((currentPolyList != '')||(currentRectangleList!='')){
				if(clickCount > 1){
					var str = currentRectangleList + ' ' + currentPolyList + ' ' + drawPathList; 
					polyVML.path = str;
				}
			} else {
				polyVML.path = drawPathList; 
			}
			//alert('polyVML.path: '+polyVML.path)
		} 
		else
		if (type == 2){
			if(currentLineList != ''){
				if(clickCount > 1){
					var str = currentLineList + ' ' + drawPathList; 
					lineVML.path = str;
				}
			} else {
				lineVML.path = drawPathList; 
			}
		}
		else
		if (type == 3){
			clickCount = 0;
			currX = parseInt(vmlX);
			currY = parseInt(vmlY);
			currentPointList = currentPointList + drawPathList + " l " + currX + "," + (currY+1) + " " + (currX+1) + "," + (currY+1) + " " + (currX+1) + "," + currY + ", xe, ";  
			if(currentPointList != ''){
				pointVML.path = currentPointList; 
			}
		}
		else
		if (type == 4){
			clickCount = 0;
			markupCount += 1;
			currX = parseInt(vmlX);
			currY = parseInt(vmlY);
			
			if(currX > (mWidth-25)) currX = currX - 25;
			if(currY > (mHeight-15)) currY = currY - 15;
			var txtObj = parent.searchFrame.document.getElementById("markupText");
			if(txtObj != null){
				var text = txtObj.value;
				if((text != "") && (textMarkupCount < 10)){
					var vmlTxtObj = eval('vt'+(textMarkupCount+1));
					vmlTxtObj.innerHTML = text;
					x = currX
					y = currY;
					currentTextPointList += 'tx:,'+convertToMapUnits(currX,true)+','+convertToMapUnits(currY,false)+';,';
					currentTextList += text + ',';
					vmlTxtObj.style.left = x + "px";
					vmlTxtObj.style.top = y + "px";
					textMarkupCount += 1;
				} else
				if(textMarkupCount > 9){
					alert('A maximum of 10 separate text notes can be placed on a map.');
				}
			}
		}
		else
		if (type == 5){
			var polyList = 'm ' + zleft + ',' + zbottom + ' l ' + zleft + ',' + ztop + ' ' + zright + ',' + ztop + ' ' + zright + ',' + zbottom + ', xe, '
			//alert('currentRectangleList: '+currentRectangleList)
			if(currentRectangleList != ''){
				currentRectangleList = currentRectangleList + ' ' + polyList; 
			} else {
				currentRectangleList = polyList; 
			}
			//win1.document.writeln('polyList: ' + polyList)
			//alert(currentPolyList);
			polyVML.path = currentRectangleList + currentPolyList; 
		}
	}
}

function resetGraphics(){
	pointVML.path = "m 0 0 l 0,0 0,0 0,0 0,0 e";
	lineVML.path = "m 0 0 l 0,0 0,0 0,0 0,0 e";
	polyVML.path = "m 0 0 l 0,0 0,0 0,0 0,0 e";

	currentPolyList = '';
	currentRectangleList = '';
	currentLineList = '';
	currentPointList = '';
	currentTextPointList = '';
	currentTextList = '';
	clickCount = 0;
	markupCount = 0;
	textMarkupCount = 0;
	
	var obj = parent.searchFrame.document.getElementById('markupText');
	if(obj != null){
		obj.value = "";
	}
	for (var i=1;i<11;i++){
		var vmlTxtObj = eval('vt'+i);
		if(vmlTxtObj != null){
			vmlTxtObj.innerHTML = '';
		}
	}
}

/* Converts graphic VML coordinates to map coordinates, generates formatted string
*/
function convertGraphics(){

	coordString = '';
	
	//win1.document.close();
	//win1.document.open();
	
	if(currentPolyList != ''){
		var currentPolyArray = currentPolyList.split('m');
		var currentPolyListPart = '';
		//alert('currentPolyList is '+currentPolyList)
		//win1.document.writeln('currentPolyList '+currentPolyList+'<br>')
		for(var i=0;i<currentPolyArray.length;i++){
			currentPolyListPart = currentPolyArray[i].replace(/m/g,""); 
			//alert('currentPolyListPart '+i+': '+currentPolyListPart)
			//win1.document.writeln('currentPolyListPart '+i+': '+currentPolyListPart+'<br>')
			if((currentPolyListPart !='')&&(currentPolyListPart.length > 2)){
				//alert('calling convertGraphicCoords,currentPolyListPart is ' + currentPolyListPart )
				coordString += 'pl:,' + convertGraphicCoords(currentPolyListPart,1);
			}
		}
		currentPolyArray = '';
	}
	if(currentRectangleList != ''){
		var currentRectangleArray = currentRectangleList.split('m');
		var currentRectangleListPart = '';
		for(var i=0;i<currentRectangleArray.length;i++){
			currentRectangleListPart = currentRectangleArray[i].replace(/m/g,""); 
			if(currentRectangleListPart !=''){
				//alert('calling convertGraphicCoords,currentRectangleListPart is ' + currentRectangleListPart )
				coordString += 're:,' + convertGraphicCoords(currentRectangleListPart,1);
			}
		}
	}
	if(currentLineList!=''){
		var currentLineArray = currentLineList.split('m');
		var currentLineListPart = '';
		//alert('currentLineList is '+currentLineList)
		//win1.document.writeln('currentLineList '+currentLineList+'<br>')
		for(var i=0;i<currentLineArray.length;i++){
			currentLineListPart = currentLineArray[i].replace(/m/g,"");
			//alert('currentLineListPart '+i+': '+currentLineListPart) 
			//win1.document.writeln('currentLineListPart: '+currentLineListPart+'<br>')
			if((currentLineListPart!='')&&(currentLineListPart.length > 2)){
				//alert('calling convertGraphicCoords,currentLineListPart is ' + currentLineListPart )
				coordString += 'li:,' + convertGraphicCoords(currentLineListPart,2);
			}
		}
		currentLineArray = '';
	}
	if(currentPointList!=''){
		var currentPointArray = currentPointList.split('m');
		var currentPointListPart = '';
		//win1.document.writeln('currentPointList '+currentPointList+'<br>')
		for(var i=0;i<currentPointArray.length;i++){
			currentPointListPart = currentPointArray[i].replace(/m/g,"");
			//win1.document.writeln('currentPointListPart: '+currentPointListPart+'<br>')
			if(currentPointListPart!= ''){
				coordString += 'pt:,' + convertGraphicCoords(currentPointListPart,3); 
			}
		}
	}
	if((currentTextPointList != '') && (currentTextList != '')){
		coordString += currentTextPointList;
		var textList = currentTextList.split(',');
		currentTextList = '';
		for (var i=0;i<textList.length;i++){
			if(textList[i]!=''){
				currentTextList += textList[i] +',';
			}
		}
		if(currentTextList.lastIndexOf(',') == currentTextList.length-1){
			currentTextList = currentTextList.substr(0,currentTextList.lastIndexOf(','))
		}
	}
	//win1.document.writeln('coordString: '+coordString+'<br>')

}

function convertGraphicCoords(coordList,type){

	coordList = coordList.replace(/l/g,","); 
	coordList = coordList.replace(/e/g,""); 
	coordList = coordList.replace(/x/g,""); 
	coordList = coordList.replace(/\s/g,","); 

	pointList = coordList.split(',');
	coordStr = "";

	var even = true;
	
	//win1.document.writeln('coordList: after replace '+coordList+'<br>')
	var pointCount = 0;
	for(var i=1;i<pointList.length;i++){
		if((pointList[i].length > 0)&&(pointList[i].indexOf(':')<0)){
			coordStr += convertToMapUnits(pointList[i],even) + ',';
			if(!even) even=true;
			else even = false;
			pointCount += 1;
			if(type == 3){
				if(pointCount == 2) break;
			}
		} else 
		if(pointList[i].indexOf(':')>0){
			coordStr += pointList[i];
		}
	}
	coordStr = pointList[0] + coordStr.substr(0,coordStr.length-2) + ';,'
	
	//alert('convertGraphicCoords,coordList is: '+coordList +'\n\ncoordstr is: '+coordStr);
	
	return coordStr;
}

function processGraphics(){

	drawVML(0);
	convertGraphics();
	if(coordString != ''){
		var currentMarkupList = parent.searchFrame.document.WebForm1.Hidden30.value;
		//alert(currentMarkupList)
		if(currentMarkupList != ''){
			parent.searchFrame.document.WebForm1.Hidden30.value = currentMarkupList + ',' + coordString;
		} else {
			parent.searchFrame.document.WebForm1.Hidden30.value = coordString;
		}
		var currentTextMarkupList = parent.searchFrame.document.WebForm1.Hidden31.value;
		if(currentTextMarkupList != ''){
			parent.searchFrame.document.WebForm1.Hidden31.value = currentTextMarkupList + ',' + currentTextList;
		} else {
			parent.searchFrame.document.WebForm1.Hidden31.value = currentTextList;
		} 
		//alert(parent.searchFrame.document.WebForm1.Hidden30.value +'\n'+parent.searchFrame.document.WebForm1.Hidden31.value)
		//alert('currentMarkupList: '+currentMarkupList+', new coordString: '+coordString+', Hidden30: '+parent.searchFrame.document.WebForm1.Hidden30.value)
		resetGraphics();
	}
}
  
function getMap(action){
	showLayer('loadingMap');
	if(action == 'startup'){
		var u = "toc.aspx?action=startup&w="+(mWidth)+"&h="+(mHeight);
		parent.searchFrame.location = u;
	} else {
	// refresh without initializing extents
	if(Left == 0){
		Left = CurrentLeft;
		Right = CurrentRight;
		Bottom = CurrentBottom;
		Top = CurrentTop;
	}
	parent.searchFrame.document.getElementById("Hidden1").value = action;
	parent.searchFrame.document.getElementById("Hidden2").value = Left;
	parent.searchFrame.document.getElementById("Hidden3").value = Bottom;
	parent.searchFrame.document.getElementById("Hidden4").value = Right;	
	parent.searchFrame.document.getElementById("Hidden5").value = Top;


	if((action != 'printreport')&&(action != 'print')&&(action != 'exportimage')&&(action != 'exportfile')){
		parent.searchFrame.document.WebForm1.Hidden9.value = 'mapnav'; 
	} else parent.searchFrame.document.WebForm1.Hidden9.value = action;
	
	parent.searchFrame.document.WebForm1.Hidden6.value = mapX;
	parent.searchFrame.document.WebForm1.Hidden7.value = mapY;
		
	if(action == 'identify'){
		parent.searchFrame.document.WebForm1.Hidden19.value = "4";
		parent.searchFrame.document.WebForm1.Hidden9.value = 'identify'; 
	}
	parent.searchFrame.document.getElementById("Hidden23").value = addToSelect;
	parent.searchFrame.document.WebForm1.Hidden8.value = "true";
	
	if (isVisible("subjectSite")){
		parent.searchFrame.document.WebForm1.Hidden32.value = "true";
		parent.searchFrame.document.WebForm1.Hidden33.value = subjectSiteX + ' ' + subjectSiteY;
	}
	
	if(!isNav){ // vml not supported in Mozilla/NS
		// setup VML acetate graphics
		if(action != 'clear'){
			processGraphics();
		} else 
			resetGraphics();
		// end VML
	}
	
	parent.searchFrame.document.WebForm1.action = "toc.aspx";
	
	parent.searchFrame.document.WebForm1.submit();
	
	}
}

