//********************** constants ******************************
var vOverMapHeight = 140;
var vOverMapWidth = 233;

//////////////////////////////////////////////////////////////////

// tool numbers
var ZOOM_IN_AREA = 0;
var ZOOM_OUT_AREA = 1;
var PAN = 2;
var ATTRIBUTE = 3;
var GET_COORDINATE = 4;
var MEASURE_DISTANCE = 5;
var MEASURE_AREA = 6;

// panning direction
var PAN_WEST = 0;
var PAN_EAST = 1;
var PAN_NORTH = 2;
var PAN_SOUTH = 3;

// mouse button
var LEFT_BUTTON = 0;
var RIGHT_BUTTON = 2;

// highlight color
var HIGHLIGHT_COLOR = "yellow";
// URLs
var SVG_IMAGE_URL = "GetSvgMap.aspx";

// map size limit
var MAX_MAP_WIDTH = 1200;
var MAX_MAP_HEIGHT = 1200;
var MIN_MAP_WIDTH = 100;
var MIN_MAP_HEIGHT = 100;

// map scale limit
var MAX_SCALE = 1000000;
var MIN_SCALE = 50;

// action interval
var SVG_ACTION_INTERVAL = 500;	// ms

// default selected tool
var DEFAULT_TOOL = ZOOM_IN_AREA;

// overview map size
var OVERVIEW_MAP_WIDTH = 210;
var OVERVIEW_MAP_HEIGHT = 130;

// default size for main map
var DEFAULT_MAP_WIDTH = 850;
var DEFAULT_MAP_HEIGHT = 650;
var AREA_UNIT = 'acres';

var FOOT_PER_METER = 3937.0/1200.0;

var BACKGROUND_LAYER_ID = "Background";
var NORTH_ARROW_ID = "NorthArrow";
var SCALE_BAR_ID = "scaleBar";
var SEARCH_SHAPE_ID = "shape";
var RESULT_PANEL_ID = "ResultPanel";
var MAP_TIP_ID = "MapTip";
var GEO_TIFF_LAYER_ID = "GeoreferencedTiffs";
var IMAGE_GROUP_NAME = "Images";
//********************** end of constants ***********************

var g_strTipRectStyle = "stroke:black;fill:#edefc2;stroke-width:1";

// map size
var vMapWidth = DEFAULT_MAP_WIDTH;
var vMapHeight = DEFAULT_MAP_HEIGHT;

var vScale = vInitialScale;
var vCenterLong = vInitialX;
var vCenterLat  = vInitialY;

var vStartLong = 0
var vEndLong = 0
var vStartLat = 0
var vEndLat = 0
var vStartMouseX = 0
var vEndMouseX = 0
var vStartMouseY = 0
var vEndMouseY = 0

var vTool = DEFAULT_TOOL;

var g_nMaxViewParcelScale = 5000 - 1;
var g_nMinViewParcelScale = 10;

var g_bShowAerialPhoto = false;

var g_bFirstTime = true;

var ori_x = 0;
var ori_y = 0;
var mul_x = 0;
var mul_y = 0;

var bMouseDown = false;
var bOverviewMousedown = false;

var LocationIndicator = null;
var ZoomInBox = null;

var g_strVisibleLayers = "jur_cnty,jur_muni,rd_fwy,";	//  Initial Visible Layer IDs which is separated by comma ','
var g_strInactiveLayers = "";	// holds inactive layers which is separated by comma ','

var gLayerParams = "";

// for map tip
var tipRec = null;
var tipTxt = null;
var tipGrp = null;
var nTipTxtOffsetX = -0.25 * 12;
var nTipTxtOffsetY = -0.9 * 12;

var bShowToolTip = true;
var bHighlight = true;

var loadingMapWin = null;	// for handle of the waiting window of the main map
var bFullyloaded = false;	// for keeping track of the main map status
var bMapLoaded = false;		// for determining which map is load first, overview or main

var SVGDocument = null;
var g_objSVGUtils = null;

var g_nHistoryLength = 5;
var g_nHistoryIndex = -1;
var g_aryHistory = null;

var pagePath;
pagePath = window.location.href.toLowerCase();
pagePath = pagePath.replace(/\?.*/, "");		// remove query string
pagePath = pagePath.substr(0, pagePath.lastIndexOf("/"));

function CheckSVGViewerVersion()
{
	var strViewerVersion = "" + top.MainMapFrame.document.MapImageID.getSVGViewerVersion();
	var strTemp = strViewerVersion.split(";");
	strViewerVersion = strTemp[strTemp.length - 1];
	strViewerVersion = strViewerVersion.replace(/^\s/, "");
	strViewerVersion = strViewerVersion.replace(/\s$/, "");
	if (1.0 * strViewerVersion < 3)
		alert("This site requires Adobe SVG Viewer 3.0 or higher to view images.");
}

function initPageSVG(evt)
{
	if (g_bFirstTime)
	{
		if (document.layers)		// Netscape
			setTimeout("CheckSVGViewerVersion()", 1000);
		else
			CheckSVGViewerVersion();

		g_bFirstTime = false;
	}

	if (!g_objSVGUtils)
	{
		g_objSVGUtils = new SVGUtils(top.MainMapFrame.document.MapImageID);
	}

	SVGDocument = GetDocumentRoot(evt);

	// initialize ori_x, ori_y, mul_x, mul_y
    GetSvgMapParameters(null); 
    
	if (g_strHiliteParcelID != null)
		HiliteParcel(SVGDocument);

	if (nDrawGeodetic == 1) {
		var star = null;
		star = _newuse(SVGDocument,"#gpshp",vMapWidth * 0.5,vMapHeight * 0.5,0,"0.1");
		star.setAttribute("style", "fill:none;stroke:yellow;stroke-width:30px");
		if (star)
			SVGDocument.getDocumentElement().appendChild(star);    
		nDrawGeodetic = 0;
	}
	else if (nDrawGeodetic == 2) {
		var star = null;
		star = _newuse(SVGDocument,"#star",vMapWidth * 0.5,vMapHeight * 0.5,0,"0.1");
		//star.setAttribute("style", "fill:none;stroke:red;stroke-width:10px");
		if (star)
			SVGDocument.getDocumentElement().appendChild(star);    
		nDrawGeodetic = 0;
	}

	//Get NorthArrow layer and adjust position	
	var NorthArrow = SVGDocument.getElementById(NORTH_ARROW_ID);	
	if(NorthArrow != null)
	{		    
		var translate = "translate(10," + (vMapHeight-70) + ")" ;
		NorthArrow.setAttribute("transform",  translate);
	}	

	bOverviewMousedown = false;
	bMouseDown = false;

	AddEventListeners();

	AddScaleBar(SVGDocument);	

	// prepare shape
	prepareShape(SVGDocument);

	if (LocationIndicator != null)
	{		    
		LocationIndicator.getStyle().setProperty("display", "none");
		// reset the transform for the overview map
		LocationIndicator.setAttribute("transform", "");
		drawAreaRec();
		LocationIndicator.getStyle().setProperty("display", "inline");
	}
	
	//For map tip 
	tipRec = SVGDocument.createElement("rect"); 
	tipRec.setAttribute("y", nTipTxtOffsetY);
	tipRec.setAttribute("x", nTipTxtOffsetX);
	tipRec.setAttribute("width", "1");
	tipRec.setAttribute("height", 1.25*12);
	tipRec.setAttribute("style", g_strTipRectStyle); 
	tipTxt = SVGDocument.createElement("text");
	tipTxt.setAttribute("style", "font-family:Arial; font-size:" + 12 + ";fill:black;"); 
	tipGrp = SVGDocument.createElement("g");
	tipGrp.setAttribute("transform", "translate(0,0)");
	tipGrp.setAttribute("visibility", "hidden");
	tipGrp.appendChild(tipRec);
	tipGrp.appendChild(tipTxt);
	SVGDocument.getDocumentElement().appendChild(tipGrp);
	// end for map tip

	bMapLoaded = true;

	closeWaitWin();
}

function getSvgURL(wdsName, templateName, w, h, cx, cy, s, hg, strOnLoadFunction)
{
	// update g_strVisibleLayers and g_strInactiveLayers variables
	UpdateLayerStatusStrings();

	wdsName = wdsName.replace(/\?$/, '');
	var width = w*s*0.000868045;
	var height = Math.abs(h*s*0.000868045);
	var urx = cx + width/2.0;
	var ury = cy + height/2.0;
	var llx = cx - width/2.0;
	var lly = cy - height/2.0;
	var bbox = llx+","+lly+","+urx+","+ury;
	if (templateName == SVG_OVERVIEW_TEMPLATE)
		hg = gOverviewLayersOrder;
	else
		hg = g_strVisibleLayers;
	
	var strURL = wdsName + '?BBOX=' + bbox + '&WIDTH=' + w + '&HEIGHT=' + h + '&LAYERS=' + hg;
	if (templateName != SVG_OVERVIEW_TEMPLATE)
		strURL += "&LAYERVARS="+gLayerParams;
	else
		strURL += "&LAYERVARS=";
	strURL += "&TEMPLATE="+templateName;
	return strURL;
}

function GetDocumentRoot(oEvt)
{
	return oEvt.getTarget().getOwnerDocument();
}

function AddEventListeners()
{   
	var oElement = SVGDocument.getElementsByTagName("svg").item(0);
	if(oElement == null) return;
	var bUseCapture = false;
	
	//Mouse up
	oElement.addEventListener("mouseup",ELup,bUseCapture);

	//Mouse move
	oElement.addEventListener("mousemove",ELmove,bUseCapture);

	//Mouse down
	oElement.addEventListener("mousedown",ELdown,bUseCapture);

	//Mouse over	
	oElement.addEventListener("mouseover",ELover,bUseCapture);	
	
	//Mouse out	
	oElement.addEventListener("mouseout",ELout,bUseCapture);			  
}

function AddOverviewEventListeners(oElement, bUseCapture)
{   	
	//Mouse up
	oElement.addEventListener("mouseup",OverviewELup,bUseCapture);

	//Mouse move
	oElement.addEventListener("mousemove",OverviewELmove,bUseCapture);

	//Mouse down
	oElement.addEventListener("mousedown",OverviewELdown,bUseCapture);
}

function GetSvgMapParameters(evt)
{
   var root;

    if(evt == null)
		root = top.MainMapFrame.document.MapImageID.getSVGDocument();
	else
	    root = evt.getTarget().getOwnerDocument();

	var originAry = GetOrigin(root);
	ori_x = originAry[0];
	ori_y = originAry[1];
	
	var multiplierAry = GetMultiplier(root);
	mul_x = multiplierAry[0];
	mul_y = multiplierAry[1];
}

function drawAreaRec(evt)
{
	var svgViewer;
	var DocRoot = null;
	// evt not null means this function is called from within the overview's onload event.
	// Since the "getSVGDocument()" function is not stable for Netscape, we try to avoid
	// using it.
	if (evt)
	{
		DocRoot = evt.getTarget().getOwnerDocument();
	}
	else
	{
		if (document.all)
			svgViewer = top.fraLeftFrame.document.OverviewMap;
		else
			svgViewer = top.fraLeftFrame.document.pnlMap.document.embeds[0];

		if (!svgViewer)
			return;

		DocRoot = svgViewer.getSVGDocument();
    }

    if(DocRoot == null) 
      return false

    EleOrigin = DocRoot.getElementsByTagName("origin").item(0);
    if(EleOrigin == null)
		return false;    

	var x = ori_x + (vMapWidth*1.0/mul_x);
    var y = ori_y + (vMapHeight*1.0/mul_y);

    var omp_ori_x = EleOrigin.getAttribute("x")*1.0;
    var omp_ori_y = EleOrigin.getAttribute("y")*1.0;

    EleMul = DocRoot.getElementsByTagName("scale").item(0);
    if(EleMul == null)
		return false;

    var omp_mul_x = 1.0 / EleMul.getAttribute("x");
    var omp_mul_y = 1.0 / EleMul.getAttribute("y");

    var x0 = (ori_x-omp_ori_x)*omp_mul_x
    var x1 = (x-omp_ori_x)*omp_mul_x

    var y0 = (ori_y-omp_ori_y)*omp_mul_y
    var y1 = (y-omp_ori_y)*omp_mul_y

    var x2 = x0-x1;
    if(x2<0)
       x2 = 0-x2;

	var par;
    if(x2>6)
		par = x0 + ',' + y0 + ',' + x0 + ',' +  y1 + ',' +  x1 + ',' + y1 + ',' + x1 + ',' + y0 + ',' + x0 +','+y0    
	else
	{
	    x0 = (x0 + x1)/2
	    y0 = (y0 + y1)/2
	    yTop = y0+5;
	    yBottom = y0-5;
	    xTop = x0+5;
	    xBottom = x0-5;

		par = xBottom + ',' + y0 + ',' + x0 + ',' +  y0 + ',' +  x0 + ',' + yBottom + ',' + x0 + ',' + y0 + ',' + x0 +','+yTop + ',' + x0 + ',' + y0 +','+ xTop +','+y0;
	}

	if(LocationIndicator != null)
	{
	    var LocationIndicatorStyle = LocationIndicator.getStyle();

		LocationIndicator.setAttribute("points", par);
		LocationIndicatorStyle.setProperty("display", "inline");
		if(x2>6)
		{
			LocationIndicatorStyle.setProperty("stroke-width", 1);
			LocationIndicatorStyle.setProperty("opacity", 0.4);
		}
		else
		{
			LocationIndicatorStyle.setProperty("stroke-width", 3);
			LocationIndicatorStyle.setProperty("opacity", 1);
		}
	}
}

function SetTool(vToolNum)
{
	// clear measuring shapes
	ClearMeasuringShapes();
	RestartMeasuring();
	
	// clear searching shapes
	DeleteShape();
	
	vTool = vToolNum
}

function GetOrigin(oSVGRoot)
{
	var originAry = [0.0, 0.0];

    with (oSVGRoot.getElementsByTagName("origin").item(0))
    {
		originAry[0] = getAttribute("x")*1.0;
		originAry[1] = getAttribute("y")*1.0;
	}
	
	return originAry;
}

function GetMultiplier(oSVGRoot)
{
	var multiplierAry = [0.0, 0.0];

    with (oSVGRoot.getElementsByTagName("scale").item(0))
    {
	    multiplierAry[0] = 1.0 / getAttribute("x");
		multiplierAry[1] = 1.0 / getAttribute("y");
    }
    
    return multiplierAry;
}

function UpdateMapSize(nWidth, nHeight)
{
	top.MainMapFrame.document.MapImageID.height = vMapHeight = nHeight;
	top.MainMapFrame.document.MapImageID.width = vMapWidth = nWidth;
}

function _newrect(root, x, y, width, height, stroke, strokeWidth)
{
	var rect = root.createElement('rect');
	rect.setAttribute("width", width);
	rect.setAttribute("height", height);
	rect.setAttribute("x", x);
	rect.setAttribute("y", y);
	rect.getStyle().setProperty("stroke", stroke);
	rect.getStyle().setProperty("stroke-width", strokeWidth);
	rect.getStyle().setProperty("fill",   "none");
	return rect;
}

function AddScaleBar(svgRoot)
{
	var nLen = 0;
	var scale = 100.0 / mul_x;
	if (bUseMeter) {
		scale /= FOOT_PER_METER;
		if (scale < 1000.0) {
			if (scale > 100)
				scale = Math.round(scale);
			else
				scale = Math.round(scale * 100) / 100.0;	// keep 2 decimal digits
			nLen = UpdateScaleValue(svgRoot, scale + " m");
		}	
		else {
			scale /= 1000.0;
			if (scale > 100)
				scale = Math.round(scale);
			else
				scale = Math.round(scale * 100) / 100.0;	// keep 2 decimal digits
			nLen = UpdateScaleValue(svgRoot, scale + " km");
		}
	}
	else {
		if (scale < 5279.79) {
			if (scale > 100)
				scale = Math.round(scale);
			else
				scale = Math.round(scale * 100) / 100.0;	// keep 2 decimal digits
			nLen = UpdateScaleValue(svgRoot, scale + " ft");
		}	
		else {
			scale /= 5279.79;
			if (scale > 100)
				scale = Math.round(scale);
			else
				scale = Math.round(scale * 100) / 100.0;	// keep 2 decimal digits
			nLen = UpdateScaleValue(svgRoot, scale + " mi");
		}
	}

	var x = svgRoot.getDocumentElement().getAttribute("width") * 1.0 - 120 - nLen;
	var y = svgRoot.getDocumentElement().getAttribute("height") * 1.0 - 25;

	svgRoot.getElementById("scaleText").getParentNode().setAttribute("transform", "translate(" + x + "," + y + ")");
}

function UpdateScaleValue(svgRoot, strText)
{
	var scaleText = svgRoot.getElementById("scaleText");
	if (scaleText.getFirstChild() == null)
	{
		var textNode = svgRoot.createTextNode(strText)
		scaleText.appendChild(textNode);
	}
	else
		scaleText.getFirstChild().setNodeValue(strText);

	return scaleText.getComputedTextLength();
}

//Mouse down event
ELdown = function MouseDown(evt)
{
	if (evt.button != LEFT_BUTTON)	// only response to left mouse button
	{
		// disable right click on map if not in 'intranet' mode
		if (!g_bIntranet && evt.button == RIGHT_BUTTON)
			evt.preventDefault();
		return false;
	}

    if(!bFullyloaded)
		return;
		
    var tagValue = evt.getTarget();
    if(tagValue == null)
		return false;
    
    var idName = tagValue.getParentNode().getAttribute('id')	
	if(idName == null)
       return;

	if (idName == NORTH_ARROW_ID)
		return;

	vStartMouseX = evt.getClientX()    
	vStartMouseY = evt.getClientY()
	vEndMouseX = vStartMouseX;
	vEndMouseY = vStartMouseY;
	
	vStartLong = ori_x + (vStartMouseX*1.0/mul_x);
	vStartLat = ori_y + (vStartMouseY*1.0/mul_y);
	vEndLong = vStartLong;
	vEndLat = vStartLat;  
	
	if (g_bPlaceShape)
	{
		// hide old shape
		if (g_strGeometryType == "rectangle")
		{
			CircleShape.getStyle().setProperty("display", "none");
			PolygonShape.getStyle().setProperty("display", "none");
			closeShapeCircle.getStyle().setProperty("display", "none");
		}
		else if (g_strGeometryType == "circle")
		{
			RectangleShape.getStyle().setProperty("display", "none");
			PolygonShape.getStyle().setProperty("display", "none");
			closeShapeCircle.getStyle().setProperty("display", "none");
		}
		else if (g_strGeometryType == "polygon")
		{
			RectangleShape.getStyle().setProperty("display", "none");
			CircleShape.getStyle().setProperty("display", "none");
		}
	}

    bMouseDown = true;        	    
}

ELup = function MouseUp(evt,flag)
{
	if (evt.button != LEFT_BUTTON)	// only response to left mouse button
		return false;
	
	var tagValue = evt.getTarget();
	if (tagValue.getParentNode().getAttribute('id') != null)
	{
		if (tagValue.getParentNode().getAttribute('id') == NORTH_ARROW_ID)
		{       
			var arrowId = tagValue.getAttribute('id');
			if (arrowId == 'north')
				ArrowPanTo(PAN_NORTH);
			else if (arrowId == 'south')
				ArrowPanTo(PAN_SOUTH);
			else if (arrowId == 'west')
				ArrowPanTo(PAN_WEST);
			else if (arrowId == 'east')
				ArrowPanTo(PAN_EAST);

			bMouseDown = false;
			return;
		}
	}

	if (!bMouseDown) return false;
	
	bMouseDown = false;

	if(!bFullyloaded)
		return;   	

	if (evt.detail > 1)		// double click, end measuring
	{
		// remove the last point
		if (vTool == MEASURE_DISTANCE || vTool == MEASURE_AREA)
		{
			RemoveLastMeaPoint();
			RestartMeasuring();
		}

		return;
	}
	
    var MouseX = evt.getClientX();
    var MouseY = evt.getClientY();

    var bClick = false;
    if (Math.abs(MouseX - vStartMouseX) < 5 && Math.abs(MouseY - vStartMouseY) < 5)
		bClick = true;

    vEndLong = ori_x + (evt.getClientX()*1.0/mul_x);
    vEndLat = ori_y + (evt.getClientY()*1.0/mul_y);
    
    if (g_bPlaceShape)
    {
		// stop measuring
		RestartMeasuring();
		
		if(g_strGeometryType == 'rectangle')
		{			
			pickedPoint = new Array();
			pickedPointNum = 0;				
				
			pickedPoint[pickedPointNum] = new PointCoor(vStartLong,vStartLat);
			pickedPointNum++;
			
			pickedPoint[pickedPointNum] = new PointCoor(vEndLong,vStartLat);
			pickedPointNum++;
			
			pickedPoint[pickedPointNum] = new PointCoor(vEndLong,vEndLat);
			pickedPointNum++;
			
			pickedPoint[pickedPointNum] = new PointCoor(vStartLong,vEndLat);
			pickedPointNum++;
			
			pickedPoint[pickedPointNum] = new PointCoor(vStartLong,vStartLat);
			pickedPointNum++;
			
			g_bPlaceShape = false;
		}
		else if(g_strGeometryType == 'circle')
		{
			pickedPoint = new Array();
			pickedPointNum = 0;				
			pickedPoint[pickedPointNum] = new PointCoor(vStartLong,vStartLat);
			pickedPointNum++;
			
			g_bPlaceShape = false;
		}
		else if(g_strGeometryType == 'polygon')		
		{
			if(bPolygonShapeBegin == true)
			{
				var num = pickedPoint.length;				
				pickedPoint = new Array();
				pickedPointNum = 0;				
				
				pickedPoint[pickedPointNum] = new PointCoor(vEndLong,vEndLat);
				pickedPointNum++;
				
				PolygonShapeSX = MouseX;
				PolygonShapeSY = MouseY;				
				PolygonShape.setAttribute( 'd', 'M ' + MouseX + ' ' + MouseY + ' L ' + MouseX + ' ' + MouseY );
				PolygonShape.getStyle().setProperty("fill","none")						
				
				//Draw the starting point as a circle									
				closeShapeCircle.setAttribute("cx", MouseX);
				closeShapeCircle.setAttribute("cy", MouseY);
								
				bPolygonShapeBegin = false;
				PolygonShape.getStyle().setProperty("display",   "inline");
				closeShapeCircle.getStyle().setProperty("display",   "inline");										
			}
			else
			{
				// maximum points reached, close the shape and show message
				if (pickedPointNum >= g_nMaxPoints)
				{
					MouseX = PolygonShapeSX;
					MouseY = PolygonShapeSY;
					
					alert("Maximum number of points reached.\n\nShape is closed automatically.");
				}
				
				if (closeToEnd(MouseX,MouseY,PolygonShapeSX,PolygonShapeSY))
				{
					MouseX = PolygonShapeSX;
					MouseY = PolygonShapeSY;
					PolygonShape.getStyle().setProperty("fill","red");
					PolygonShape.getStyle().setProperty("display","inline");				
					closeShapeCircle.getStyle().setProperty("display","none");
					pickedPoint[pickedPointNum] = new PointCoor(pickedPoint[0].x,pickedPoint[0].y);						
			
					g_bPlaceShape = false;
				}
				else
				{
					var newPoint = new PointCoor(MouseX, MouseY);
					if (IsSearchShapeSelfCross(newPoint))
					{
						alert("Line segments should not cross each other.");
						return;
					}

					pickedPoint[pickedPointNum] = new PointCoor(vEndLong,vEndLat);
				}
					
				PolygonShape.setAttribute( 'd', PolygonShape.getAttribute('d') + " " + MouseX + " " + MouseY );				
				pickedPointNum++;
			}
		}
		return;
    }
    
    if (vTool == PAN)		//Pan
    {
		// reset view box
		SVGDocument.getElementsByTagName("svg").item(0).setAttribute("viewBox", "");

		Pan(bClick);
	}
	else if (vTool == ZOOM_IN_AREA)		//Zoom in area  
	{
		ZoomInBox.getStyle().setProperty("display",   "none");
		ZoomInArea(evt,true);
	}
	else if (vTool == ZOOM_OUT_AREA)	//Zoom in area
	{
	    ZoomInBox.getStyle().setProperty("display",   "none");
		ZoomInArea(evt,false);
	}
	else if (vTool == ATTRIBUTE)
		ShowAttributes(evt);
	else if (vTool == GET_COORDINATE)
		ShowCoordinate(vEndLong, vEndLat);
	else if (vTool == MEASURE_DISTANCE)		// measure distance
		AddMeaDisPoint(MouseX, MouseY, vEndLong, vEndLat);
	else if (vTool == MEASURE_AREA)		// measure area
		AddMeaAreaPoint(MouseX, MouseY, vEndLong, vEndLat);
}

OverviewELdown = function OverviewMouseDown(evt)
{	
	if (evt.button != LEFT_BUTTON)	// only response to left mouse button
	{
		// disable right click on map if not in 'intranet' mode
		if (!g_bIntranet && evt.button == RIGHT_BUTTON)
			evt.preventDefault();
		return false;
	}

	if (!bFullyloaded)
		return false;

	var target = evt.getTarget();
	if (!target)
		return;
		
	var idName = null;
	while (target && target.nodeName != "#document")
	{
		idName = target.getAttribute('id');
		
		if(idName && idName == 'overViewIndicator')
		{
			vStartMouseX = evt.getClientX();
			vStartMouseY = evt.getClientY();		
			bOverviewMousedown = true;
			break;
		}

		target = target.getParentNode();
	}
}

OverviewELmove = function OverviewMouseMove(evt)
{    
    if(bOverviewMousedown)
    {
		vEndMouseX = evt.getClientX();
		vEndMouseY = evt.getClientY();
		var offsetX = vEndMouseX - vStartMouseX;
		var offsetY = vEndMouseY - vStartMouseY;
		
		LocationIndicator.setAttribute("transform", "translate(" + offsetX + ", " + offsetY +")");
    }
}

OverviewELup = function OverviewMouseUp(evt)
{
	if (evt.button != LEFT_BUTTON)
		return;

	if (!bFullyloaded)
		return false;

    if(!bOverviewMousedown)    return;  	

	bOverviewMousedown = false;

	var oSVGRoot = GetDocumentRoot(evt);   
    
	// get ori_x, ori_y, mul_x, mul_y of overview map
    GetSvgMapParameters(evt);
    
	vEndMouseX = evt.getClientX();
	vEndMouseY = evt.getClientY();	

    var offsetX = vEndMouseX*1.0 - vStartMouseX*1.0;
	var offsetY = vEndMouseY*1.0 - vStartMouseY*1.0;

    vOffsetLong = offsetX*1.0/mul_x;
    vOffsetLat = offsetY*1.0/mul_y; 
    
	// reset ori_x, ori_y, mul_x, mul_y of main map
    GetSvgMapParameters(null)
    
	vCenterLong += vOffsetLong;
	vCenterLat += vOffsetLat;
	
	var vSVGImage = getSvgURL(SVG_IMAGE_URL, SVG_TEMPLATE, vMapWidth, vMapHeight, vCenterLong, vCenterLat, vScale, g_strVisibleLayers);
    
	RefreshSVG(top.MainMapFrame.document.MapImageID, vSVGImage);
}

ELmove = function MouseMove(evt,flag)
{
	if(!bFullyloaded)
		return;

	var tagValue = evt.getTarget();
    if(tagValue == null)
		return false;
    
    // this block of code is for updating the XY frame
    UpdateCoordinate(evt);
	// **************************************************

	if(bMouseDown)
	{
		vEndMouseX = evt.getClientX()
		vEndMouseY = evt.getClientY()
	    
		// mouse pointer is out of the viewer area, treat it as mouse up
		if (vEndMouseX <= 0 || vEndMouseX >= vMapWidth || vEndMouseY <= 0 || vEndMouseY >= vMapHeight)
		{
			MouseUp(evt);
			return;
		}
	    
		x = ori_x + (vEndMouseX*1.0/mul_x);
		y = ori_y + (vEndMouseY*1.0/mul_y);	
    
	    if (g_bPlaceShape)
	    {
			if (g_strGeometryType == "rectangle")
			{
				RectangleShape.getStyle().setProperty("display",   "inline");		
				with (Math)
				{
					RectangleShape.setAttribute("x", min(vStartMouseX, vEndMouseX));
					RectangleShape.setAttribute("y", min(vStartMouseY, vEndMouseY));
					RectangleShape.setAttribute("width", abs(vStartMouseX - vEndMouseX));
					RectangleShape.setAttribute("height", abs(vStartMouseY - vEndMouseY));
				}
			}
			else if (g_strGeometryType == "circle")
			{
				CircleShape.getStyle().setProperty("display",   "inline");		
				with (Math)
				{
					CircleShape.setAttribute("cx", vStartMouseX);
					CircleShape.setAttribute("cy", vStartMouseY);
					CircleShapeRadius = sqrt((vStartMouseX - vEndMouseX)*(vStartMouseX - vEndMouseX)+(vStartMouseY - vEndMouseY)*(vStartMouseY - vEndMouseY));
					CircleShapeRadius = round(CircleShapeRadius)
					CircleShape.setAttribute("r", CircleShapeRadius);
					CircleRadius = CircleShapeRadius/mul_x;
				}
			}	
			return;
	    }
	    
	    if (vTool == ZOOM_IN_AREA || vTool == ZOOM_OUT_AREA)
	    {
			with (Math)
			{
				ZoomInBox.setAttribute("x", min(vStartMouseX, vEndMouseX));
				ZoomInBox.setAttribute("y", min(vStartMouseY, vEndMouseY));
				ZoomInBox.setAttribute("width", abs(vStartMouseX - vEndMouseX));
				ZoomInBox.setAttribute("height", abs(vStartMouseY - vEndMouseY));
			}
			ZoomInBox.getStyle().setProperty("display",   "inline");
		}
		else if (vTool == PAN)
		{
			var vbX = vStartMouseX - vEndMouseX;
			var vbY = vStartMouseY - vEndMouseY;
			SVGDocument.getElementsByTagName("svg").item(0).setAttribute("viewBox", vbX + " " + vbY + " " + vMapWidth + " " + vMapHeight);
		}
	}		
}

ELout = function MouseOut(evt,flag)
{
	if (!bFullyloaded)
		return;

	if (tipGrp)
		tipGrp.setAttribute("visibility", "hidden");

	var target = evt.getTarget();
	if (target == null)
		return;

    var idName = null;
	if (target.nodeName == "text" || target.nodeName == "textPath")		// annotation layer
	{
		var layer = FindLayerElement(target);
		idName = layer.getAttribute("id");
	}
	else		
		idName = target.getParentNode().getAttribute('id')
    
	if (idName == NORTH_ARROW_ID)
    {       	
       	target.getStyle().setProperty("opacity", 0.5);
       	return;    
    }

	if (idName && g_strInactiveLayers != null)
	{
		if (g_strInactiveLayers.match(idName + ","))	// inactive
		return;
	}

	if (bHighlight)
	{    
		if (idName == BACKGROUND_LAYER_ID || idName == SCALE_BAR_ID || idName == SEARCH_SHAPE_ID || idName == RESULT_PANEL_ID || idName == MAP_TIP_ID)
			 return false;
			 
		if (idName && g_strInactiveLayers != null)
		{
			if(g_strInactiveLayers.match(idName + ","))
			   return false;
		}
			
		var oldStyle = target.getAttribute("OrigStyle");
		if (oldStyle != null)
			target.setAttribute("style", oldStyle);		
	}	
}

ELover = function MouseOver(evt,flag)
{   
	if (!bFullyloaded)
		return;
		
	var target = evt.getTarget();
	if (target == null)
		return;
	
    var idName = null;
	if (target.nodeName == "text" || target.nodeName == "textPath")		// annotation layer
	{
		var layer = FindLayerElement(target);
		idName = layer.getAttribute("id");
	}
	else		
		idName = target.getParentNode().getAttribute('id')
    
	if (bShowToolTip || idName == NORTH_ARROW_ID)
	{
		if (idName != BACKGROUND_LAYER_ID)
		{
			if (idName && g_strInactiveLayers != null)
			{
				if (g_strInactiveLayers.match(idName + ","))		// inactive
				return;
			}

			// remove old map tip
			while (tipTxt.hasChildNodes())
				tipTxt.removeChild(tipTxt.getLastChild());
			tipGrp.setAttribute("visibility", "hidden");

			//For map tip
			var tip = target.getAttribute('tip');
			if (tip && tip.length > 0)
			{
				if (!tip.match(/^\s*$/) && !tip.match(/\*/))
				{
					// window.svgTitle.element = evt.getCurrentTarget();
					var nameAry = tip.split(";");
					var strLen = 0 ;
					var nLines = 0;
					for(var i=0 ; i< nameAry.length; i++)
					{
						var strMapTip = nameAry[i].replace(/^\s*(\S+.*\S+)\s*$/, "$1");
						if (strMapTip == "")
							continue;

						var tspan = SVGDocument.createElement('tspan'); 
						if (nLines > 0)
						{
							tspan.setAttribute('x', '0');
							tspan.setAttribute('dy', '1em');
						}
						else
							tspan.setAttribute('y', '3');
						tspan.appendChild(SVGDocument.createTextNode(strMapTip));
						tipTxt.appendChild(tspan);
						var len = tspan.getComputedTextLength();
						if(len > strLen)
						{
							strLen = len;
						}
						
						nLines++
					} 

					if (nLines > 0)
					{
						var nRecWidth = strLen + 0.5*12;
						var nRecHeight = 12*nLines + 0.5*12;
						tipRec.setAttribute("width", nRecWidth);
						tipRec.setAttribute("height", nRecHeight);

						var x = evt.getClientX() + 5 - nTipTxtOffsetX;
						var y = evt.getClientY() - 5 - nRecHeight - nTipTxtOffsetY;

						if (x + nRecWidth > vMapWidth)
							x = x - 2*5 - nRecWidth;

						if (y < -1 * nTipTxtOffsetY)
							y = y + 2*5 + nRecHeight;

						tipRec.setAttribute("style", g_strTipRectStyle);
						tipRec.getStyle().setProperty("display", "inline");
						tipGrp.setAttribute("transform", "translate(" + x + "," + y + ")");
						tipGrp.setAttribute("visibility", "visible");
					}
					//For map tip 
				}
			}
		}
	}

    if (idName == NORTH_ARROW_ID)
    {
       	target.getStyle().setProperty("opacity", 1);
       	return;
    } 

	if (bHighlight)
	{
		if (idName == BACKGROUND_LAYER_ID || idName == SCALE_BAR_ID || idName == SEARCH_SHAPE_ID || idName == RESULT_PANEL_ID || idName == MAP_TIP_ID)
			 return false;
			 
		if (idName && g_strInactiveLayers != null)
		{
			if (g_strInactiveLayers.match(idName + ","))
			   return false;
		}

		var style = target.getAttribute("style");
		if(style == null)
			return false;
				
		if (target.getAttribute("OrigStyle") == null)	// set the attribute only at the first time
			target.setAttribute("OrigStyle", style);
		
		target.getStyle().setProperty("stroke", HIGHLIGHT_COLOR);		

		if(isFilled(target))
			target.getStyle().setProperty("fill", HIGHLIGHT_COLOR);
	}			
}

function FindLayerElement(target)
{
	var retTarget = target;
	while (retTarget && retTarget.nodeName != "g" && retTarget.nodeName != "#document")
	{
		retTarget = retTarget.getParentNode();
	}
	return retTarget;
}

function isFilled(target)
{
	var bIsFilled = false;
	while (target && target.nodeName != "#document")
	{
		var style = target.getStyle();
		if (style && style.getPropertyValue("fill"))
		{
			if (style.getPropertyValue("fill") != "none")
				bIsFilled = true;

			break;
		}
		
		target = target.getParentNode();
	}

	return bIsFilled;
}

function _newRectangle( root,x, y ,width,height,stroke_color,stroke_width,fill_color,opacity) {
	var rectangle = root.createElement( 'rect' );
	
	rectangle.setAttribute("x",x);
	rectangle.setAttribute("y", y);					
	rectangle.setAttribute("width", width);
	rectangle.setAttribute("height", height);		
	
	rectangle.getStyle().setProperty("stroke", stroke_color);
	rectangle.getStyle().setProperty("stroke-width", stroke_width);
	rectangle.getStyle().setProperty("fill",   fill_color);				
	rectangle.getStyle().setProperty("opacity",opacity);		

	return rectangle; 
}

function _newpath(root, x, y , opacity) {
	var path = root.createElement( 'path' );			
	path.getStyle().setProperty("stroke", "red");
	path.getStyle().setProperty("fill",   "none");				
	path.getStyle().setProperty("opacity",opacity)

	path.setAttribute( 'd', 'M ' + x + ' ' + y + ' L ' + x + ' ' + y );
	return path;
}

function _newcircle( root,x, y ,r,fill,stroke,opacity) {
	var circle = root.createElement( 'circle' );
	
	circle.setAttribute("cx", x);
	circle.setAttribute("cy", y);					
	circle.setAttribute("r", r);		
	
	circle.getStyle().setProperty("stroke", stroke);
	circle.getStyle().setProperty("fill",   fill);				
	circle.getStyle().setProperty("opacity",opacity)
	return circle; 
}

function _newpolyline( root,stroke, stroke_width, fill_color, opacity)
{
	var path = root.createElement( 'polyline' );
	path.getStyle().setProperty("stroke", stroke);
	path.getStyle().setProperty("stroke-width", stroke_width);
	path.getStyle().setProperty("fill", fill_color);
	path.getStyle().setProperty("opacity", opacity);
	path.getStyle().setProperty("stroke-linecap",   "round");				
	path.getStyle().setProperty("stroke-linejoin",   "round");			
	return path;
}

function openWaitWin()
{
	bFullyloaded = false;
	window.status = "Loading map ...";
/*
	var winOptions;
	if (document.all)
	{
		with (top.MainMapFrame.document.body)
		{
			var nLeft = top.MainMapFrame.screenLeft + Math.round((clientWidth - 250) / 2);
			var nTop = top.MainMapFrame.screenTop + Math.round((clientHeight - 130) / 2);
			winOptions = "left=" + nLeft + ",top=" + nTop + ",height=130,width=250";
		}
	}
	else if (document.layers)
	{
		with (screen)
		{
			var nLeft = availLeft + Math.round((availWidth - 250) / 2);
			var nTop = availTop + Math.round((availHeight - 130) / 2);
			winOptions = "screenX=" + nLeft + ",screenY=" + nTop + ",height=130,width=250";
		}
	}
	else
	{
		alert("Unsupported browser.");
		return;
	}

	loadingMapWin = window.open(pagePath + "/wait.html", "wait", winOptions);
*/
}

function closeWaitWin()
{
/*
	if (loadingMapWin != null && !loadingMapWin.closed)
	{
		loadingMapWin.close();
		loadingMapWin = null;
	}		
*/
	window.status = "Done";
	bFullyloaded = true;
}

function UpdateCoordinate(evt)
{
    var vStartMouseX = evt.getClientX()    
    var vStartMouseY = evt.getClientY()
    
    var vStartLong = ori_x + (vStartMouseX*1.0/mul_x);
    var vStartLat = ori_y + (vStartMouseY*1.0/mul_y);
    var vStartLong1 = vStartLong;
    var vStartLat1 = vStartLat;
	if (bUseMeter) {
		vStartLong1 /= FOOT_PER_METER;
		vStartLat1 /= FOOT_PER_METER;
	}
    
    var text = "Scale: " + Math.round(vScale) + "   X : "+Math.round(vStartLong1) + "   Y : "+ Math.round(vStartLat1) ; 

	top.window.status=text;
}

function RefreshSVG(oSVGObj, strURL)
{	
	if (oSVGObj != null && bFullyloaded)
	{			
		// end measuring
		aryMeaPointObjs = new Array();		// important!!! this determines whether to hide points, which may cause problem in Netscape
		RestartMeasuring();

		bFullyloaded = false;
		openWaitWin();

		if (g_bPlaceShape)
			DeleteShape();

		if (g_nHistoryIndex < g_nHistoryLength - 1)
			g_nHistoryIndex++;
		else
		{
			g_aryHistory.shift();
		}
		
		g_aryHistory[g_nHistoryIndex] = [vCenterLong, vCenterLat, vScale];
		// trim the history array
		while (g_aryHistory.length - 1 > g_nHistoryIndex)
			g_aryHistory.pop();

		oSVGObj.setSrc(strURL);	
	}
}

function MapHistory(bBack)
{
	var oSVGObj = top.MainMapFrame.document.MapImageID;

	if (oSVGObj != null && bFullyloaded)
	{
		if (bBack)
		{
			if (g_nHistoryIndex > 0)
				g_nHistoryIndex--;
			else
			{
				alert("Beginning of history reached.");
				return;
			}
		}
		else	// forward
		{
			if (g_nHistoryIndex < g_aryHistory.length - 1)
				g_nHistoryIndex++;
			else
			{
				alert("End of history reached.");
				return;
			}
		}
		
		// end measuring
		aryMeaPointObjs = new Array();		// important!!! this determines whether to hide points, which may cause problem in Netscape
		RestartMeasuring();

		bFullyloaded = false;
		openWaitWin();

		if (g_bPlaceShape)
			DeleteShape();

		vCenterLong = g_aryHistory[g_nHistoryIndex][0];
		vCenterLat = g_aryHistory[g_nHistoryIndex][1];
		vScale = g_aryHistory[g_nHistoryIndex][2];
		var strURL = getSvgURL(SVG_IMAGE_URL, SVG_TEMPLATE, vMapWidth, vMapHeight, vCenterLong, vCenterLat, vScale, g_strVisibleLayers);

		oSVGObj.setSrc(strURL);	
	}
}

function Zoom(bZoomin)
{
	if (bZoomin && vScale <= MIN_SCALE)
	{
		alert("Minimum scale reached.");
		return;
	}
	else if (!bZoomin && vScale >= MAX_SCALE)
	{
		alert("Maximum scale reached.");
		return;
	}

    if(bZoomin)
		vScale = vScale / 2;		
	else
		vScale = vScale * 2;		
		
	if(vScale<MIN_SCALE)
		vScale = MIN_SCALE;
		
	if(vScale > MAX_SCALE)
	   vScale =  MAX_SCALE;

	vCenterLong = vEndLong;
	vCenterLat = vEndLat;

	var vSVGImage = getSvgURL(SVG_IMAGE_URL, SVG_TEMPLATE, vMapWidth, vMapHeight, vCenterLong, vCenterLat, vScale, g_strVisibleLayers);
	
	RefreshSVG(top.MainMapFrame.document.MapImageID, vSVGImage);
}

function ZoomInArea(evt, bZoomIn) //Zoom out when bZoomIn = false
{
	var tmpX = vStartMouseX-vEndMouseX;
	if(tmpX<0)
		tmpX = 0- tmpX
		
	tmpY = vStartMouseY-vEndMouseY;
	if(tmpY<0)
	tmpY= 0- tmpY	
	
	if(tmpX < 5 && tmpY < 5)
	{
		Zoom(bZoomIn);	
		return;
	}

	var oSVGRoot = GetDocumentRoot(evt);
          
	if(bZoomIn)    
    {
		scale = vScale*(tmpX+tmpY)/(vMapHeight+vMapWidth);
		vCenterLong = ori_x + ((vStartMouseX+vEndMouseX)*0.5/mul_x);	
		vCenterLat = ori_y + ((vStartMouseY+vEndMouseY)*0.5/mul_y); 
	}
	else
	{
	    scale = vScale*(vMapHeight+vMapWidth)/(tmpX+tmpY);	    
	}
	
	if(scale <= MIN_SCALE) 
	{
	   scale = MIN_SCALE;
	   alert("Minimum scale reached.");
	}
	else if(scale >= MAX_SCALE)
	{
		scale = MAX_SCALE;
		alert("Maximum scale reached.");
	}		
		
	if(!bZoomIn)
	{
		var cx = ori_x + vMapWidth*0.5/mul_x ;
		var cy = ori_y + vMapHeight*0.5/mul_y ;
		
		var new_mul_x = mul_x * vScale/scale;
		var new_mul_y = mul_y * vScale/scale;
		vCenterLong = cx + (vMapWidth-vStartMouseX-vEndMouseX)*0.5 / new_mul_x ;
		vCenterLat = cy + (vMapHeight-vStartMouseY-vEndMouseY)*0.5 / new_mul_y ;  
	}
	
	vScale = scale;				

	var vSVGImage = getSvgURL(SVG_IMAGE_URL, SVG_TEMPLATE, vMapWidth, vMapHeight, vCenterLong, vCenterLat, vScale, g_strVisibleLayers);

	RefreshSVG(top.MainMapFrame.document.MapImageID, vSVGImage);
}

function Pan(bClick)
{
	if (bClick)
	{
		vCenterLong = vEndLong;
		vCenterLat = vEndLat;
	}
	else
	{
		vCenterLong -= vEndLong - vStartLong;
		vCenterLat -= vEndLat - vStartLat;
	}

	var vSVGImage = getSvgURL(SVG_IMAGE_URL, SVG_TEMPLATE, vMapWidth, vMapHeight, vCenterLong, vCenterLat, vScale, g_strVisibleLayers);

	RefreshSVG(top.MainMapFrame.document.MapImageID, vSVGImage);
}

function ShowAttributes(evt)
{
	if (!bFullyloaded)
		return false;

	if (evt.button != LEFT_BUTTON)	// only response to left mouse button
		return false;

	var target = evt.getTarget();
	if (target == null)
		return false;						
	
	var strFeatureID = target.getAttribute('id');
	var layer = target;
	while (layer.nodeName != "g" && layer.nodeName != "#document")
		layer = layer.getParentNode();
	if (!layer.hasAttributes)
		return false;

	var strLayerID = layer.getAttribute('id');

	var winURL = pagePath + "/ShowAttribute.aspx?lid=" + escape(strLayerID) + "&fid=" + escape(strFeatureID);
	var win = window.open(winURL,"Attribute",'height=600,width=500,scrollbars=1,resizable=1');
	win.focus();
	AddWindow(win);
}

function ReloadMapFrame()	// for Netscape only
{
	// end measuring
	aryMeaPointObjs = new Array();		// important!!! this determines whether to hide points, which may cause problem in Netscape
	RestartMeasuring();

	bFullyloaded = false;
	openWaitWin();

	top.MainMapFrame.location.reload();
}

function ResizeMap()
{
    // recalculate the frame size and adjust the SVG size accordingly
    if (document.all)
    {
		var oldWidth= vMapWidth;
		var oldHeight= vMapHeight;
		UpdateMapSize(top.MainMapFrame.document.body.clientWidth, parent.MainMapFrame.document.body.clientHeight);

		vScale = vScale * Math.max(oldWidth/vMapWidth, oldHeight/vMapHeight);
		var vSVGImage = getSvgURL(SVG_IMAGE_URL, SVG_TEMPLATE, vMapWidth, vMapHeight, vCenterLong, vCenterLat, vScale, g_strVisibleLayers);

		RefreshSVG(top.MainMapFrame.document.MapImageID, vSVGImage);
	}
	else if (document.layers)
	{
		ReloadMapFrame();
	}
	else
	{
		alert("Unsupported browser.");
		return;
	}
}

function ReloadBaseMap()
{
	vScale = vInitialScale * DEFAULT_MAP_HEIGHT/vMapHeight;
	vCenterLong = vInitialX;
	vCenterLat = vInitialY;
	
	var bHasAPhoto = false;
	for (var i = 0; i < gFeatureGroups.length; i++)
		for (var j = 0; j < gFeatureGroups[i].aryFeatures.length; j++)
			if (gFeatureGroups[i].aryFeatures[j].strFeatureID == "countyap" && gFeatureGroups[i].aryFeatures[j].bVisible)
			   bHasAPhoto = true;
			   
	g_strImageID = null;		// remove geo-tiff if there is any.
	if (bHasAPhoto) g_bFill = false;		// reset the Area Feature Fill as false
	else g_bFill = true;		// reset the Area Feature Fill as true

	var vSVGImage = getSvgURL(SVG_IMAGE_URL, SVG_TEMPLATE, vMapWidth, vMapHeight, vCenterLong, vCenterLat, vScale, g_strVisibleLayers);
	RefreshSVG(top.MainMapFrame.document.MapImageID, vSVGImage);
}

function SwitchOverviewMap()
{
	bShowOverviewMap = !bShowOverviewMap;
	
	if (document.all)
	{
		if (bShowOverviewMap)
			top.fraLeftFrame.document.all.pnlMap.style.display = "inline";
		else
			top.fraLeftFrame.document.all.pnlMap.style.display = "none";
	}
	else if (document.layers)
	{
		if (bShowOverviewMap)
		{
			top.fraLeftFrame.document.layers["pnlMap"].visibility = "show";
			top.fraLeftFrame.document.layers["pnlTabs"].top = 0;
		}
		else
		{
			top.fraLeftFrame.document.layers["pnlMap"].visibility = "hide";
			top.fraLeftFrame.document.layers["pnlTabs"].top = -140;
		}
	}
}

function _newuse( root,symbol,x, y, angle ,scale)
{
	var use = root.createElement( 'use' );			
	
	var trans = "translate(" + x + ", " + y + ") rotate(" + angle+") scale(" + scale + ")" ;
	
	use.setAttributeNS('http://www.w3.org/1999/xlink','xlink:href',symbol); 	
	use.setAttribute('transform',trans);
			
	return use;
}

// For the pan arrows
function ArrowPanTo(direction) 
{
    var offsetX = (vMapWidth*0.5/mul_x);
    var offsetY = (vMapHeight*0.5/mul_y);
    
    if (direction == PAN_WEST)			//Pan west
		vCenterLong = vCenterLong - offsetX;
	else if (direction == PAN_EAST)		//pan east
		vCenterLong = vCenterLong + offsetX;
	else if (direction == PAN_NORTH)	//Pan north
		vCenterLat = vCenterLat - offsetY;
	else if (direction == PAN_SOUTH)	//Pan south
		vCenterLat = vCenterLat + offsetY;
	else
		  return false;
	
	var vSVGImage = getSvgURL(SVG_IMAGE_URL, SVG_TEMPLATE, vMapWidth, vMapHeight, vCenterLong, vCenterLat, vScale, g_strVisibleLayers);
	RefreshSVG(top.MainMapFrame.document.MapImageID, vSVGImage);
}

function PointCoor(x,y)
{    
	this.x = Math.round((x*10))/10;
	this.y = Math.round((y*10))/10;
}
