// aimsIdentify.js
/*
*  JavaScript template file for ArcIMS HTML Viewer
*		dependent on aimsXML.js, ArcIMSparam.js, aimsCommon.js, aimsMap.js, and aimsLayers.js
*		To be interactive, dependent also on aimsDHTML.js, aimsClick.js, and aimsNavigation.js
*/

aimsIdentifyPresent=true;

// hyperlink variables
var currentHyperLinkLayer="";
var currentHyperLinkField="";
var currentHyperLinkPrefix="";
var currentHyperLinkSuffix="";
var hyperlinkWindowWidth=500;
var hyperlinkWindowHeight=400;

// variable for search tolerance... dynamically set in app
var searchTolerance=1/100;
// starting record position for returned records
var queryStartRecord=1;

if (imsQueryURL=="") {
	imsQueryURL= imsURL + "&CustomService=Query";
	//alert(imsQueryURL);
}
var canQuery=true;
var newSelectCount=0;
var selectPoints = new Array();

// can features be selected if invisible or not within layer scale threshholds?
var canSelectInvisible=false;
var extDocName= "";

/*
***************************************************************************************

Identify functions 

***************************************************************************************
*/

// identify feature
function identify(e) {
	if (checkIfActiveLayerAvailable()) {
		highlightedOne="";
		var theX = mouseX;
		var theY = mouseY;
		getMapXY(theX,theY);
		searchTolerance = (xDistance/iWidth) * pixelTolerance;
		var tempWest = mapX - searchTolerance;
		var tempNorth = mapY + searchTolerance;
		var tempEast = mapX + searchTolerance;
		var tempSouth = mapY - searchTolerance;
		queryStartRecord=1;
		selectEnvelope='maxy="' + forceComma(tempNorth) + '" maxx="' + forceComma(tempEast) + '" miny="' + forceComma(tempSouth) + '" minx="' + forceComma(tempWest) + '"';
		selectionMode=2;
		var theString = writeGetFeatures(tempWest,tempSouth,tempEast,tempNorth);
		showRetrieveData();
		sendToServer(imsQueryURL,theString,identifyXMLMode);
	}
}

// hyperlink from feature in active layer
function hyperLink(e) {
	if (checkIfActiveLayerAvailable()) {
		if (currentHyperLinkLayer!="") {
			highlightedOne="";
			var theX = mouseX;
			var theY = mouseY;
			getMapXY(theX,theY);
			searchTolerance = (xDistance/iWidth) * pixelTolerance;
			var tempWest = mapX - searchTolerance;
			var tempNorth = mapY + searchTolerance;
			var tempEast = mapX + searchTolerance;
			var tempSouth = mapY - searchTolerance;
			var tempSwap = swapSelectFields;
			swapSelectFields=false;
			var tempSelect = selectFields;
			selectFields = LayerIDField[ActiveLayerIndex] + " " + LayerShapeField[ActiveLayerIndex] + " " + currentHyperLinkField;
			var theString = writeGetFeatures(tempWest,tempSouth,tempEast,tempNorth);
			selectFields = tempSelect;
			swapSelectFields=tempSwap;
			showRetrieveData();
			sendToServer(imsQueryURL,theString,hyperlinkXMLMode);
		} else {
			alert(msgList[47]);
		}
	}
}


// write out XML request to identify features
function writeGetFeatures(west1,south1,east1,north1) {
	if (swapSelectFields) {
		selectFields=selFieldList[ActiveLayerIndex];
	}
	var useString = writeIdentifyXML(ActiveLayer,ActiveLayerType,selectFields,west1,south1,east1,north1,maxFeaturesReturned,useLimitExtent);
	hightlightedOne="";
	return useString;
}

function writeIdentifyXML(theLayer,theLayerType,theFields,leftX,bottomY,rightX,topY,maxReturned,hasLimit) {
	var theString = '<ARCXML version="1.1">\n<REQUEST>\n<GET_FEATURES outputmode="xml" envelope="false" checkesc ="true" geometry="false" featurelimit="' + maxReturned + '">\n';
	theString += '<LAYER id="' + theLayer + '" />';
	theString += '<SPATIALQUERY subfields="' + theFields + '">';
	theString += '<SPATIALFILTER relation="area_intersection" >';
	theString += '<ENVELOPE maxy="' + forceComma(topY) + '" maxx="' + forceComma(rightX) + '" miny="' + forceComma(bottomY) + '" minx="' + forceComma(leftX) + '" />';
	theString += '</SPATIALFILTER>';
	theString += '</SPATIALQUERY>';
	if (hasLimit) {
		// keep this within the limitExtent
		theString += '<SPATIALFILTER relation="area_intersection">\n';
		theString += '<ENVELOPE maxx="' + forceComma(limitRight) + '" maxy="' + forceComma(limitTop) + '" minx="' + forceComma(limitLeft) + '" miny="' + forceComma(limitBottom) + '" />\n';
		theString += '</SPATIALFILTER>\n';
	}
	theString += '</GET_FEATURES>';
	theString += '</REQUEST>';
	theString += '</ARCXML>';
	return theString;

}

// parse XML response for selected features
function displayAttributeData(theReply) {
	var docObject = parent.MapFrame;
	var docName = "parent.MapFrame";
	if (!useTextFrame) docName = "opener.parent.MapFrame";
	var Win1;	
	setLayerFields(ActiveLayerIndex);
	var str = '<html><meta http-equiv="Content-Type" content="text/html; charset=' + docObject.charSet + '"><head><link REL="stylesheet" Type="text/css" HREF="' + appDir + 'sss.css"><title>' + docObject.titleList[7] + '</title></head>';
	str += '<body bgcolor="' + docObject.textFrameBackColor + '" text="' + docObject.textFrameTextColor + '" link="' + docObject.textFrameLinkColor + '" vlink="' + docObject.textFrameFormColor + '" LEFTMARGIN=0 onload="window.focus()" onunload="' + docName + '.focusOnData=false">';
	str += writeOutDataPage(theReply,ActiveLayerIndex,docObject,docName,Win1);
	
	str += '</body></html>';
	if (useTextFrame) {
		Win1 = parent.TextFrame;
		Win1.document.open();

	} else {
		Win1 = open("","DataWindow","width=575,height=250,scrollbars=yes,resizable=yes");
		extWin = Win1;
		focusOnData = true;

	}
	if (extDocName != "") 
		Win1.document.location  = extDocName;		
	else
		Win1.document.writeln(str);		
	
	Win1.document.close();
	hideRetrieveData();

}

function parseHyperLink(theReply) {
	//alert(theReply);
	var fList="";
	var lpos1 = 1;
	var lpos2 = 1;
	var pos = 0;
	var startpos = 0;
	var endpos = 0;
	var fString = theReply.substring(startpos,endpos);
	var featureCount = justGetFeatureCount(theReply);
	var linkString = "width=" + hyperlinkWindowWidth + ",height=" + hyperlinkWindowHeight + ",scrollbars=yes,resizable=yes"
	var selectedData="";
	var fCount = featureCount;
	//alert("displayAttributeData()[featurecount=" + featureCount + "]");
	selectCount = 0;
	var tempString="";
	if (featureCount > 0) {
		var searchStr = currentHyperLinkField + "=";
		
		newSelectCount += 1;

		endpos = 1;
		pos = theReply.indexOf(searchStr,1);
		startpos = pos + searchStr.length + 1;
		endpos =theReply.indexOf(dQuote,startpos);
		inData = theReply.substring(startpos,endpos);
		var theLinkURL = currentHyperLinkPrefix + inData + currentHyperLinkSuffix;
		if (parent.TextFrame!=null) {
			parent.TextFrame.document.open();
			parent.TextFrame.document.writeln('<html><meta http-equiv="Content-Type" content="text/html; charset=' + charSet + '"><head>');
			parent.TextFrame.document.writeln('	<title>' + titleList[9] + 's</title>');
			parent.TextFrame.document.writeln('</head>');
			parent.TextFrame.document.writeln('<body BGCOLOR="White" TEXT="Black" LEFTMARGIN=0 TOPMARGIN=0>');
			parent.TextFrame.document.writeln('<FONT FACE="Arial"><B>' + LayerName[ActiveLayerIndex] +'</B></font><FONT FACE="Arial" size="-2">');
			parent.TextFrame.document.writeln('<br>' + msgList[67] + theLinkURL );
			parent.TextFrame.document.writeln('</FONT>');
			parent.TextFrame.document.writeln('</body></html>');
			parent.TextFrame.document.close();
		}
		var Win1=open(theLinkURL,"",linkString);
	} else {
	
		//alert(tempString);
		if (parent.TextFrame!=null) {
			parent.TextFrame.document.open();
			parent.TextFrame.document.writeln('<html><meta http-equiv="Content-Type" content="text/html; charset=' + charSet + '"><head>');
			parent.TextFrame.document.writeln('	<title>' + titleList[9] + '</title>');
			parent.TextFrame.document.writeln('</head>');
			parent.TextFrame.document.writeln('<body BGCOLOR="White" TEXT="Black" LEFTMARGIN=0 TOPMARGIN=0>');
			parent.TextFrame.document.writeln('<FONT FACE="Arial"><B>' + LayerName[ActiveLayerIndex] +'</B></font><FONT FACE="Arial" size="-2">');
			parent.TextFrame.document.writeln('<br>' + msgList[68]);
			if (debugOn>0) {
				parent.TextFrame.document.writeln('<p>' + msgList[65] + '<br>');
				parent.TextFrame.document.writeln(untag(theReply));
			}
			parent.TextFrame.document.writeln('</FONT>');
			parent.TextFrame.document.writeln('</body></html>');
			parent.TextFrame.document.close();
		} else {
			var msg = msgList[69];
			if (debugOn>0) {
				msg = msg + msgList[9] + theReply;
			}
			alert(msg);
		}
	}
	hideRetrieveData();
}

// are there any selected features?
function checkSelected() {
	var isOk = false;
	if (selectCount>0) isOk = true;
	return isOk;
}

function checkHyperLinkLayer(layerIndex) {
	var canLink = false;
	//alert(hyperLinkLayers.length);
	for (var i=0; i<hyperLinkLayers.length; i++) {
			if (LayerName[layerIndex]==hyperLinkLayers[i]) {
				canLink=true;
				currentHyperLinkLayer=LayerName[layerIndex];
				currentHyperLinkField=hyperLinkFields[i];
				currentHyperLinkPrefix=hyperLinkPrefix[i];
				currentHyperLinkSuffix=hyperLinkSuffix[i];
			}
	}
	return canLink;

}

// check to see if active layer is in scale threshold and visible 
	// so it can be used for querying
function checkIfActiveLayerAvailable() {
	// is the override flag set?
	if (canSelectInvisible) {
		return true;
	} else {
		// is the current scale within the scale min and max?
		if ((mapScaleFactor>=LayerMinScale[ActiveLayerIndex]) && (mapScaleFactor<=LayerMaxScale[ActiveLayerIndex])) {
			// is the active layer visible?
			if (LayerVisible[ActiveLayerIndex]==1) {
				return true;
			
			} else {
				var msg = msgList[104] + LayerName[ActiveLayerIndex] + msgList[102] + LayerName[ActiveLayerIndex] + msgList[108];
				
				alert(msg);
				return false;
			}
		} else {
			var msg = msgList[104] + LayerName[ActiveLayerIndex] + msgList[101];
			//if ((!listAllLayers) && (hasTOC)) msg += msgList[103];
			alert(msg);
			return false;
		}
	}
}


/**************************************************************
*	functions and variables for Identify All
*	drill down through visible layers
**************************************************************/

var replyArray = new Array();
var fID = 0;
var fIndex = 0;
var idEast;
var idWest;
var idSouth;
var idNorth;


// identify feature
function identifyAll(e) {
	fID = 0;
	highlightedOne="";
	var theX = mouseX;
	var theY = mouseY;
	getMapXY(theX,theY);
	searchTolerance = (xDistance/iWidth) * pixelTolerance;
	var tempWest = mapX - searchTolerance;
	var tempNorth = mapY + searchTolerance;
	var tempEast = mapX + searchTolerance;
	var tempSouth = mapY - searchTolerance;
	idSouth = tempSouth;
	idNorth = tempNorth;
	idWest = tempWest;
	idEast = tempEast;
	replyArray.length=0;
	var j =-1;
	for (var i=(LayerID.length-1);i>=0;i--) {
		replyArray[i]="";
		if ((mapScaleFactor>=LayerMinScale[i]) && (mapScaleFactor<=LayerMaxScale[i]) && (LayerVisible[i]) && (LayerIsFeature[i])) j = i;

	}
	if (j>-1) {
		fID=j;
		var theString = writeGetFeaturesDrill(tempWest,tempSouth,tempEast,tempNorth,fID);
		showRetrieveData();
		sendToServer(imsQueryURL,theString,10);
	} else {
		alert(msgList[111]);
	}
}


function doIdentifyAll(theReply) {
    //drill tool loop sequence
	//alert(theReply);
   replyArray[fID] = theReply;
   fID++;
   if (fID < (LayerID.length)) {
   		if ((mapScaleFactor>=LayerMinScale[fID]) && (mapScaleFactor<=LayerMaxScale[fID]) && (LayerVisible[fID]) && (LayerIsFeature[fID])) {
      		theString = writeGetFeaturesDrill(idWest,idSouth,idEast,idNorth,fID);
			//alert(theString);
	  		sendToServer(imsQueryURL,theString,10);
	   	} else {
			doIdentifyAll("");
		}
   }
   
   if (fID == (LayerID.length)) {
	displayAttributeDataforDrill(replyArray);
	fID = 0;
   }
 }  //end doDrill()


 // write XML to identify features for drill ID
function writeGetFeaturesDrill(west1,south1,east1,north1,thefID) {
	if (swapSelectFields) {
		selectFields=selFieldList[thefID];
	}
	var useString = writeIdentifyXML(LayerID[thefID],LayerType[thefID],selectFields,west1,south1,east1,north1,maxFeaturesReturned,useLimitExtent);
	hightlightedOne="";
	return useString;
}

// parse XML response for selected features
function displayAttributeDataforDrill(theReplyArray) {
	var docObject = parent.MapFrame;
	var docName = docName = "parent.MapFrame";
	if (!useTextFrame) docName = "opener.parent.MapFrame";
	var str = '<html><meta http-equiv="Content-Type" content="text/html; charset=' + charSet + '"><head><link REL="stylesheet" Type="text/css" HREF="' + appDir + 'sss.css"><title>' + titleList[10] + '</title></head>\n';
	str += '<body bgcolor="' + docObject.textFrameBackColor + '" text="Black" link="Blue" vlink="Gray" LEFTMARGIN=0 onload="window.focus()" onunload="' + docName + '.focusOnData=false">\n';
	var lyrCount = 0;
	for (b=0;b<docObject.replyArray.length;b++) {
	 	if (docObject.replyArray[b]!="") {
		    //alert(theReply);
			theReply = docObject.replyArray[b];
			docObject.setLayerFields(b);

			str += writeOutDataPage(theReply,b,docObject,docName,Win1);
			
			lyrCount++;
		}
	}
	if (lyrCount==0) {
        str += '<center><FONT FACE="Arial" SIZE="-1"><b>' + docObject.msgList[112] + '</b></font></center>\n';
	}
	
	str += '</body></html>\n';
	var Win1;
	if (useTextFrame) {
		Win1 = parent.TextFrame;
		Win1.document.open();
	} else {
		Win1 = open("","DataWindow","width=575,height=250,scrollbars=yes,resizable=yes");
		extWin = Win1;
		focusOnData = true;

	}
	if (extDocName != "") 
		Win1.document.location  = extDocName;		
	else
		Win1.document.writeln(str);		
			
	Win1.document.close();
	hideRetrieveData();

}

// checks if any layer has hyperlink at location and links to first one matching
function hyperLinkAny(e) {
	if (hyperLinkLayers.length>0) {
		var j = -1;
		fIndex = 0;
		for (var i=layerCount-1;i>-1;i--) {
			
			if ((mapScaleFactor>=LayerMinScale[i]) && (mapScaleFactor<=LayerMaxScale[i]) && (LayerVisible[i]==1)) {
				fIindex = -1;
				for (var k = hyperLinkLayers.length-1;k>-1;k--) {
					if (hyperLinkLayers[k]==LayerName[i]) {
						fIndex = k;
						j = i;
					}
				}
			}

		}
		if (j>-1) {
			fID = j;
			highlightedOne="";
			var theX = mouseX;
			var theY = mouseY;
			getMapXY(theX,theY);
			searchTolerance = (xDistance/iWidth) * pixelTolerance;
			var west1 = mapX - searchTolerance;
			var north1 = mapY + searchTolerance;
			var east1 = mapX + searchTolerance;
			var south1 = mapY - searchTolerance;
			idSouth = south1;
			idNorth = north1;
			idWest = west1;
			idEast = east1;
			var tempSwap = swapSelectFields;
			swapSelectFields=false;
			var tempSelect = selectFields;
			selectFields = LayerIDField[fID] + " " + LayerShapeField[fID] + " " + hyperLinkFields[fIndex];
			var theString = writeIdentifyXML(LayerID[fID],LayerType[fID],selectFields,west1,south1,east1,north1,maxFeaturesReturned,useLimitExtent);

			selectFields = tempSelect;
			swapSelectFields=tempSwap;
			showRetrieveData();
			//if (useTextFrame) parent.TextFrame.document.location = "text.htm";
			sendToServer(imsQueryURL,theString,16);
			
		} else {
			alert(msgList[114]);
		}
	} else {
		alert(msgList[115]);
	}
}

function parseHyperLinkAny(theReply) {
	//alert(theReply);
	var fList="";
	var lpos1 = 1;
	var lpos2 = 1;
	var pos = 0;
	var startpos = 0;
	var endpos = 0;
	var fString = theReply.substring(startpos,endpos);
	var featureCount = justGetFeatureCount(theReply);
	var linkString = "width=" + hyperlinkWindowWidth + ",height=" + hyperlinkWindowHeight + ",scrollbars=yes,resizable=yes"
	var selectedData="";
	var fCount = featureCount;
	//alert("displayAttributeData()[featurecount=" + featureCount + "]");
	selectCount = 0;
	var tempString="";
	if (featureCount > 0) {
		var searchStr = hyperLinkFields[fIndex] + "=";
		
		newSelectCount += 1;

		endpos = 1;
		pos = theReply.indexOf(searchStr,1);
		startpos = pos + searchStr.length + 1;
		endpos =theReply.indexOf(dQuote,startpos);
		inData = theReply.substring(startpos,endpos);
		var theLinkURL = hyperLinkPrefix[fIndex] + inData + hyperLinkSuffix[fIndex];
		if (parent.TextFrame!=null) {
			parent.TextFrame.document.open();
			parent.TextFrame.document.writeln('<html><meta http-equiv="Content-Type" content="text/html; charset=' + charSet + '"><head>');
			parent.TextFrame.document.writeln('	<title>' + titleList[9] + 's</title>');
			parent.TextFrame.document.writeln('</head>');
			parent.TextFrame.document.writeln('<body BGCOLOR="White" TEXT="Black" LEFTMARGIN=0 TOPMARGIN=0>');
			parent.TextFrame.document.writeln('<FONT FACE="Arial"><B>' + LayerName[fID] +'</B></font><FONT FACE="Arial" size="-2">');
			parent.TextFrame.document.writeln('<br>' + msgList[67] + theLinkURL );
			parent.TextFrame.document.writeln('</FONT>');
			parent.TextFrame.document.writeln('</body></html>');
			parent.TextFrame.document.close();
		}
		var Win1=open(theLinkURL,"",linkString);
	} else if (fID<layerCount) {
			fID++;
			var j = -1;
			if ((mapScaleFactor>=LayerMinScale[fID]) && (mapScaleFactor<=LayerMaxScale[fID]) && (LayerVisible[fID]==1)) {
				fIindex = -1;
				for (var k = hyperLinkLayers.length-1;k>-1;k--) {
					if (hyperLinkLayers[k]==LayerName[fID]) {
						fIndex = k;
						j = fID;
					}
				}
			}
			if (j>-1) {
				var tempSwap = swapSelectFields;
				swapSelectFields=false;
				var tempSelect = selectFields;
				selectFields = LayerIDField[fID] + " " + LayerShapeField[fID] + " " + hyperLinkFields[fIndex];
				var theString = writeIdentifyXML(LayerID[fID],LayerType[fID],selectFields,idWest,idSouth,idEast,idNorth,maxFeaturesReturned,useLimitExtent);
	
				selectFields = tempSelect;
				swapSelectFields=tempSwap;
				showRetrieveData();
				//if (useTextFrame) parent.TextFrame.document.location = "text.htm";
				sendToServer(imsQueryURL,theString,16);
			} else {
				parseHyperLinkAny("");
			}
	

	} else {
	
		//alert(tempString);
		if (parent.TextFrame!=null) {
			parent.TextFrame.document.open();
			parent.TextFrame.document.writeln('<html><meta http-equiv="Content-Type" content="text/html; charset=' + charSet + '"><head>');
			parent.TextFrame.document.writeln('	<title>' + titleList[9] + '</title>');
			parent.TextFrame.document.writeln('</head>');
			parent.TextFrame.document.writeln('<body BGCOLOR="White" TEXT="Black" LEFTMARGIN=0 TOPMARGIN=0>');
			parent.TextFrame.document.writeln('<FONT FACE="Arial" size="-1">');
			parent.TextFrame.document.writeln('<br>' + msgList[116]);
			parent.TextFrame.document.writeln('</FONT>');
			parent.TextFrame.document.writeln('</body></html>');
			parent.TextFrame.document.close();
		} else {
			var msg = msgList[69];
			if (debugOn>0) {
				msg = msg + msgList[9] + theReply;
			}
			alert(msg);
		}
	}
	hideRetrieveData();
}

function writeOutDataPage(theReply,layerIndex,docObject,docName,pageObject) {
	//var theReply = docObject.lastXMLResponse;
	var theError = docObject.getXMLErrorMessage(theReply);
	var fList="";
	var lpos1 = 1;
	var lpos2 = 1;
	var epos = 1;
	var spos = 1;
	var morePoints=true;
	var moreFeatures=true;
	var featureCount = justGetFeatureCount(theReply);
	//alert(featureCount);
	var pos = 0;
	var startpos = 0;
	var endpos = xmlEndPos;
	var stillMore = false
	pos = theReply.indexOf('hasmore="true"',endpos);
	if (pos!=-1) stillMore = true;
	pos=0;
	var tempCount = 0;
	var selectedData="";
	var inData="";
	var xStr="";
	var yStr="";
	var tempString = "";
	var fCount = featureCount;
	//alert("displayAttributeData()[featurecount=" + featureCount + "]");
	selectCount = 0;
	var tempString="";
	var theFrame = docName;
	var dataString = "";
	var tdstyle = "";	
	var strResult = "";
	var theNext = "";
	var thePrevious = "";
	var theZoom = "";
	var iLyrFound = -1;
	var SQLString = "";
	var queryString  = "";
	extDocName = "";
	if (featureCount > 0) {
		newSelectCount += 1;						
			
			for (var k=0;k<selectLyrs.length;k++) {
				if (selectLyrs[k] == LayerName[layerIndex]) iLyrFound = k;
			}
			
			var fontSize = isIE ? "xx-small" : "x-small";
			dataString += '<center>\n';
			dataString += '<b>' + LayerName[layerIndex] + '</b>\n';
			dataString += '<table id="export_table" border="0" cellspacing="0" cellpadding="0" style="color: ' + textFrameTextColor + '; background-color: ' + tableBackColor + ';" nowrap="" style="border: 2px groove white"> \n';

		endpos = 1;
		
		for (var i=0;i<fCount;i++) {
			//alert(endpos);
			if ((toolMode!=4) && (toolMode!=25) && (toolMode!=5)) {
				var theXYs = getEnvelopeXYs(theReply, endpos)
				docObject.selectLeft[selectCount] = theXYs[0];
				docObject.selectBottom[selectCount] = theXYs[1];
				docObject.selectRight[selectCount] = theXYs[2];
				docObject.selectTop[selectCount] = theXYs[3];

			}
			//alert(endpos);
			inData = parseRecordString(theReply, endpos);
			endpos = xmlEndPos;
			selectedData = inData;			
			epos = theReply.indexOf("</FEATURE",endpos);
			//alert("2\n" + selectedData);
			var showHyper = false;
			if (hyperLinkLayers!=null) {
				var lyrIndex = layerIndex;

				for (var s1=0;s1<hyperLinkLayers.length;s1++) {
					if (hyperLinkLayers[s1] == LayerName[layerIndex]) showHyper=true;
				}
			}
			
		// NC
			var NCshowHyper = false;
			if (NChyperLinkLayers!=null) {
				for (var s1=0;s1<NChyperLinkLayers.length;s1++) {
					if (NChyperLinkLayers[s1] == LayerName[layerIndex]) NCshowHyper=true;
				}
			}

			var fName1 = getFieldNames(selectedData);
			var fValue1 = getFieldValues(selectedData);
			selectPoints[selectCount] = docObject.getIdValue(fName1, fValue1);
			//zoomfieldName = LayerIDField[layerIndex] + " = " +  docObject.getIdValue(fName1, fValue1);
			queryString = LayerIDField[layerIndex] + " = " +  selectPoints[selectCount]  ;
			
			if 	(iLyrFound >= 0 ) {
					if (fValue1[0] != "&nbsp;") {

								if (!SQLString )
									SQLString = fValue1[0];
								else
									SQLString = SQLString + "," + fValue1[0];
					}
			}
			else
			{			
			var idFieldNum = -1;
			var shapeFieldNum = -1;
			if (hideIDFieldData) {
				// hide ID column header
				for (var f=0;f<fName1.length;f++) {
					if (fName1[f]==LayerIDField[layerIndex]) idFieldNum = f;
				}
			}
			if (hideShapeFieldData) {
				// hide Shape column header
				for (var f=0;f<fName1.length;f++) {
					if (fName1[f]==LayerShapeField[layerIndex]) shapeFieldNum = f;
				}
			}
			
			if (selectCount==0) {
				//dataString += '<tr><td class="title" >' + msgList[86] + '</a></td>';
				dataString +='<tr><td class="title">&nbsp;</td>';
					
				for (var f=0;f<fName1.length;f++) {
					if ((f!=idFieldNum) && (f!=shapeFieldNum)) {
						var f2 = -1;
						if (useFieldAlias) {
							for (var f3=0;f3<AliasFieldName.length;f3++) {
								if (AliasFieldName[f3]==fName1[f]) f2 = f3;
							}
						}
						if (f2!=-1) {
							dataString += '<td class="title" >' + AliasFieldAlias[f2] + '</td>';
						} else {
							dataString += '<td class="title" >' + fName1[f] + '</td>';
						}
					}
				}
				dataString += '</tr>\n';
			}
			// Apply table style 
			 if (selectCount % 2 != 0)
				tdstyle = "class=firstdata";
			 else
				tdstyle = "class=seconddata";
			
			dataString += '<tr><td  width="70px" nowrap ' + tdstyle + '>';
			var recNum = selectCount+queryStartRecord;
			if ((toolMode!=4) && (toolMode!=5) && (toolMode!=25))
			 dataString +='<a class="menubttn" href="javascript:parent.MapFrame.showHighlight(' + selectCount + ')">Map </a>';
			else
			 dataString +='<a class="menubttn" href="javascript:parent.MapFrame.getDBQuery(\'' + queryString + '\')">Map </a>';
			
			//keep consistent with mapIt and info
			for (var f=0;f<fName1.length;f++) {
					if ((f!=idFieldNum) && (f!=shapeFieldNum) ) {
						if (NCshowHyper) {
							for (var s1=0;s1<NChyperLinkFields.length;s1++) {
								if (NChyperLinkFields[s1]==fName1[f]) {
									var NCtheLinkURL = NChyperLinkPrefix[layerIndex] + fValue1[f] + NChyperLinkSuffix[layerIndex];
									dataString +='&nbsp;<a class="menubttn" href="' + NCtheLinkURL + '" onMouseOver="MM_displayStatusMsg(\'More info\');return document.MM_returnValue" >Info </a>';
									break;
								}
							}
						}
					}
				}
			dataString +='</td>';
				
			for (var f=0;f<fName1.length;f++) {	
				if ((f!=idFieldNum) && (f!=shapeFieldNum)) {
					dataString += '<td ' + tdstyle + '>';
					var isHyper=false;
					if (showHyper) {
						for (var s1=0;s1<hyperLinkFields.length;s1++) {
                           	if(LayerName[layerIndex]==hyperLinkLayers[s1]){ 
								if (hyperLinkFields[s1]==fName1[f]) {
									var theLinkURL = hyperLinkPrefix[s1] + fValue1[f] + hyperLinkSuffix[s1];
									dataString += '<a href="' + theLinkURL + '" target="_blank">';
									isHyper=true;
                                    break;
							 	}
                           	}  
						}
					} 
				
					var s2 = -1;
					for (var s1=0;s1<LayerFields.length;s1++) {
						if (fName1[f]==LayerFields[s1]) s2=s1;
					}
					if (LayerFieldType[s2]=="91") {
						//alert(fName1[f]);
						if (isNaN(fValue1[f])) {
							var theDate = fValue1[f];
						} else {
							var theDateObj = new Date(parseFloat(fValue1[f]));
							var d = theDateObj.toUTCString();
							var theDate = d.replace(/GMT|UTC/,"");
							theDate = new Date(theDate)
							theDate = (theDate.getMonth()+1) + "/" + theDate.getDate() + "/" + theDate.getFullYear();

						}
						dataString += theDate;
						theDate=null;
					} else {
						// put html entity for spaces so display is correct - browsers trim extra spaces
						tempString = fValue1[f].replace(/ /g, "&nbsp;");
						// replace &apos; with \'
						tempString = tempString.replace(/&apos;/g, "\'");
						dataString += tempString;
					}
					if (isHyper) dataString += '</a>';
					dataString += '</td>\n';
				}
			}
			dataString += '</tr>\n';
			fName1 = null;
			fValue1 = null;
		  } // iLyrFound >=0
			selectCount += 1;
					
		}
		dataString += '</table>\n\n';
		var getMoreData = "getMoreData";
		if (toolMode==25) getMoreData = "getMoreBufferData";
		if (queryStartRecord>1) {
			var prevRecord = queryStartRecord - maxFeaturesReturned;
			if (prevRecord<1) prevRecord=1;
			//if ((toolMode==25) && (prevRecord==1)) prevRecord = 0;
			dataString += '<a href="javascript:' + docName + '.' + getMoreData + '(' + prevRecord + ')">' + msgList[61] + maxFeaturesReturned + msgList[62] + '</a>&nbsp;&nbsp;&nbsp;\n';
			if 	(iLyrFound >= 0 ) thePrevious =  'javascript:parent.MapFrame.getMoreData(' + prevRecord + ')';
		}
		if (stillMore) {
			var nextRecord=featureCount + queryStartRecord;
			dataString += '<a href="javascript:' + docName + '.' + getMoreData + '(' + nextRecord + ')">' + msgList[63] + '</a>\n';
			if 	(iLyrFound >= 0 )theNext =  'javascript:parent.MapFrame.getMoreData(' + nextRecord + ')' ;
		}
		if ((toolMode!=4) && (toolMode!=25) && (toolMode!=5) && (selectCount>1)) {
			dataString += '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<b><a href="javascript:' + docName + '.zoomToReturnedRecords()">Zoom to these records</A></b>\n';
			if 	(iLyrFound >= 0 )theZoom =  'javascript:parent.MapFrame.zoomToReturnedRecords()';
		}

		dataString += '</center>\n';
		
		if ((queryStartRecord==1) && (toolMode!=4) && (toolMode!=25) && (toolMode!=5) && (toolMode!=9)) {
			if ((selectCount==1) && (zoomToSingleSelect)) {
				var fWidth = selectRight[0] - selectLeft[0];
				var fHeight = selectTop[0] - selectBottom[0];
				var mWMargin = 0;
				var mHMargin = 0;
				if (selectType=="point") {			
					mWMargin = fullWidth * selectPointMargin;
					mHMargin = fullHeight * selectPointMargin;
					if (mWMargin > xDistance/2) {
						mWMargin = xDistance/2;
						mHMargin = yDistance/2;
					}
				} else {
					mWMargin = fWidth * selectMargin;
					mHMargin = fHeight * selectMargin; 
				}
				saveLastExtent();
				eLeft = selectLeft[0] - mWMargin;
				eRight = selectRight[0] + mWMargin;
				eTop = selectTop[0] + mHMargin;
				eBottom = selectBottom[0] - mHMargin;
			}
			sendMapXML();
		}
		
		
			
	} else {
		dataString += '<center><B>' + LayerName[ActiveLayerIndex] +'</B>\n';
		dataString += '<br>' + msgList[64] + '<br>\n';
		if (debugOn>0) {
			dataString += '<p>' + msgList[65] + '<br>\n';
			dataString += untag(theReply);
		} else {
			if (theError!="") {
				dataString += '<p>' + msgList[66] + '<br>\n';
				dataString += theError;
			}
		}
		dataString += '</center>\n';

	}
	if (toolMode==4) selectCount=0;
	
	if (SQLString !="" ) {
	 	SQLString = "theWhere" + "=" + SQLString + "&thePrevious=" + thePrevious + "&theNext=" + theNext + "&theZoom=" + theZoom;
		extDocName = appDir + replace(LayerName[layerIndex]," ", "_").toLowerCase() + ".jsp?" + SQLString;
	}	
	return dataString;

}
 function replace(string, text, by)
{
	// Replaces text with by in string

    	var strLength = string.length, txtLength = text.length;
    	if ((strLength == 0) || (txtLength == 0)) return string;

    	var i = string.indexOf(text);
    	if ((!i) && (text != string.substring(0,txtLength))) return string;
    	if (i == -1) return string;

    	var newstr = string.substring(0,i) + by;
    	if (i+txtLength < strLength)
        	newstr += replace(string.substring(i+txtLength,strLength),text,by);

    	return newstr;
}
