// 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;


/*
***************************************************************************************

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;
		var theString = writeGetFeatures(tempWest,tempSouth,tempEast,tempNorth);
		//if (useTextFrame) parent.TextFrame.document.location = "text.htm";
		//alert(theString);
		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();
			//if (useTextFrame) parent.TextFrame.document.location = "text.htm";
			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" 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;

}
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);
		//if (useTextFrame) parent.TextFrame.document.location = "text.htm";
		//alert(theString);
		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)) {
	//createDrillPage = false;
	//replyArray.reverse();
	displayAttributeDataforDrill(replyArray);
	fID = 0;
	//var ActiveLayerIndex = 4;
   }
 }  //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 displayAttributeData(theReply) {
	//alert(theReply);
	setLayerFields(ActiveLayerIndex);
	var theError = 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 eNorth="";
	var eSouth="";
	var eWest="";
	var eEast="";
	var fCount = featureCount;
	//alert("displayAttributeData()[featurecount=" + featureCount + "]");
	selectCount = 0;
	var tempString="";
	var Win1 = parent.TextFrame;
	var theFrame = "parent.MapFrame";
	var isSecondRow= true;
	var theImage;
	
	var indx;
	var fieldName;
	
	//var isOutfall=false;
	//var Outfallid="";
	
	//If multiple entries were found
	if (featureCount > 1) {
		newSelectCount += 1;
		//--------------------------------------------
		endpos = 1;		
		inData = parseRecordString(theReply, endpos);
		endpos = xmlEndPos;
		selectedData = clearLeadingSpace(inData);
		var fName1 = getFieldNames(selectedData);
		var fValue1 = getFieldValues(selectedData);	
		
		
		if (showSelectedData) {
			//alert("displayAttributeData()[opening html page]");
			//if ((useExternalWindow) || (!useTextFrame)) {
				Win1 = window.open("","QueryWindow","width=600,height=500,scrollbars=yes,resizable=yes");
				theFrame = "opener";
				if (parent.MapFrame!=null) theFrame = "opener.parent.MapFrame";
			//} else {
				//Win2 = parent.TextFrame;
				//Win2.document.open();
			//}
			Win1.document.open();
			
			Win1.document.writeln('<html><head><title>Query/Selection Results</title></head>');
			Win1.document.writeln('<body text="#000033" link="#660000" vlink="#660000" LEFTMARGIN=0 onload="window.focus()">');

			Win1.document.writeln('<font face=Arial size=2 color=#000033><b>Query/Selection Results</b></font><p><table width="100%" bgcolor="#FFFFFF" border="0" cellspacing="1" cellpadding="2" nowrap>');
			Win1.document.writeln('<center><tr><td bgcolor="#00309c" colspan="' + fName1.length + '"><FONT FACE="Arial" SIZE="2" color="#FFFFFF"><b>' + LayerName[ActiveLayerIndex] + '</b></td></tr>');
		//}
		endpos = 1;
		
		//Win1.close();
		for (var i=0;i<fCount;i++) {					  
			//alert(endpos);
			//if (toolMode!=4) {
				var theXYs = getEnvelopeXYs(theReply, endpos)
				selectLeft[selectCount] = theXYs[0];
				selectBottom[selectCount] = theXYs[1];
				selectRight[selectCount] = theXYs[2];
				selectTop[selectCount] = theXYs[3];
				endpos = xmlEndPos;
			//}
			//alert(endpos);
			inData = parseRecordString(theReply, endpos);
			endpos = xmlEndPos;
			selectedData = clearLeadingSpace(inData);
			
			epos = theReply.indexOf("</FEATURE",endpos);
			if (showSelectedData) {
				//alert("2\n" + selectedData);
				var showHyper = false;
				if (hyperLinkLayers!=null) {
					for (var s1=0;s1<hyperLinkLayers.length;s1++) {
						if (hyperLinkLayers[s1] == LayerName[ActiveLayerIndex]) showHyper=true;
					}
				}
					
				var fName1 = getFieldNames(selectedData);
				var fValue1 = getFieldValues(selectedData);
				selectPoints[selectCount] = getIdValue(fName1, fValue1);
				
				
				if (selectCount==0) {				
					Win1.document.write('<tr><td bgcolor="#b0c4de"><FONT FACE="Arial" SIZE="-2" color=#FFFFFF>Rec</FONT></a></td>');
					for (var f=0;f<fName1.length;f++) {
					
						if (fName1[f] == "#SHAPE#")  continue;
						else if (fName1[f] == "#ID#")  continue;
						else if (fName1[f] == "ENTITY")  continue;					
												
						var f2 = -1;
						if (useFieldAlias) {
							for (var f3=0;f3<AliasFieldName.length;f3++) {
								if (AliasFieldName[f3]==fName1[f]) f2 = f3;
							}
						}
						if (f2!=-1) {
							Win1.document.write('<th bgcolor="#b0c4de"><FONT FACE="Arial" SIZE="-2" color="#FFFFFF">' + AliasFieldAlias[f2] + '</FONT></a></th>');
						} else {
							
							//----------------------------------------												
							//If the layer is an SDE layer, trim field just for display purposes
							indx = fName1[f].lastIndexOf(".");
							
							if (indx != -1)
							{
								fieldName = fName1[f].substring(indx+1);
							} else {
								fieldName = fName1[f];		
							}
							//----------------------------------------						
							//Win1.document.write('<th bgcolor="#6495ed"><FONT FACE="Arial" SIZE="-2" color="#FFFFFF">' + fName1[f] + '</FONT></a></th>');
							Win1.document.write('<th bgcolor="#b0c4de"><FONT FACE="Arial" SIZE="-2" color="#ffffff">' + fieldName.replace(/_/g, " ") + '</FONT></a></th>');
						}
					}
					//Add ID if building
					//if (isOutfall){
					//	Win1.document.write('<th bgcolor="#6495ed">ID</th>');
					//}			
							
					Win1.document.writeln('</tr>');
				}
				Win1.document.write('<tr>');
				if (isSecondRow){
					Win1.document.write('<td bgcolor="#FFFFFF">'); 
				}else{
					Win1.document.write('<td valign="top" bgcolor="#ffffff">'); 				
				}
				//if (toolMode!=4)
				
				//var selectOne = selectPoints[selectCount];
				
				
				//Win1.document.write('<a href="javascript:' + theFrame + '.showHighlight(' + selectCount + ')">');
				Win1.document.write('<a href="javascript:' + theFrame + '.parcDisp(' + selectCount + ')">');
				//Win1.document.write('<a href="javascript:'Win1.close()">');
				//parent.MapFrame.clickFunction(\'selectpoint\');
				Win1.document.write('<FONT FACE="Arial" SIZE="-2">' + (selectCount+queryStartRecord) + '</FONT>');
				//if (toolMode!=4) 
				Win1.document.write('</a>');
				Win1.document.writeln('</td>');
				for (var f=0;f<fName1.length;f++) {	
				
				if (fName1[f] == "#SHAPE#")  continue;
				else if (fName1[f] == "#ID#")  continue;
				else if (fName1[f] == "ENTITY")  continue;

				if (isSecondRow){
					Win1.document.write('<td bgcolor=""#FFFFFF" valign=top>'); 
				}else{
					Win1.document.write('<td bgcolor="#FFFFFF" valign=top>'); 				
				}
					
					
				
					
					var isHyper=false;
					if (showHyper) {
						for (var s1=0;s1<hyperLinkFields.length;s1++) {
							if (hyperLinkFields[s1]==fName1[f]) {
								Win1.document.write('<a href="' + hyperLinkPaths[s1] + fValue1[f] + '" target="_blank">');
								isHyper=true;
							}
						}
					}
					
					
					///Win1.document.write('<a href="javascript:' + theFrame + '.select(' + fName1[f] + ')">');
					
					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 theDate = new Date(parseInt(fValue1[f]));
							var theDateObj = new Date(parseFloat(fValue1[f]));
							var theDate = theDateObj.toGMTString();
						}
						//alert("Zoom");						
						Win1.document.write('<FONT FACE="Arial" SIZE="-2">' + theDate + '</FONT>');
						theDate=null;
					} else {
						if (fValue1[f].indexOf("s:") != -1){
							
							//theImage = scanImagePath + fValue1[f].substring(12);	
							theImage = baseFolder + fValue1[f].substring(12);														
							theImage = baseURL + "filecheck.asp?thefile=" + theImage;
																						
							//theImage = theImage.replace(/char()/g, "/");
							 
							Win1.document.write('<FONT FACE="Arial" SIZE="-2"><a href="' + theImage + '" target=_blank>' + fValue1[f] + '</a></FONT><br>');
							
						} else {
						Win1.document.write('<FONT FACE="Arial" SIZE="-2">' + fValue1[f] + '</FONT>');
						}
					}
					if (isHyper) Win1.document.write('</a>');
					Win1.document.writeln('</td>');
				}
				//Add ID if building
				/*	if (isOutfall){
						if (isSecondRow){
							Win1.document.write('<td bgcolor="#FFFFFF">'); 
						}else{
							Win1.document.write('<td bgcolor="#FFFFFF">'); 				
						}

					}	
				*/	
				Win1.document.writeln('</tr>');
				isSecondRow = !isSecondRow;
				fName1 = null;
				fValue1 = null;
				
			}
			selectCount += 1;
					
		}
		
		
		
		if (showSelectedData) {
		
			
			Win1.document.writeln('</table><table align=left border=0 width="100%"><tr><td><font face=Arial size=1 color=#FFFFFF><b>');
			if (toolMode!=25) {

					//alert(queryStartRecord);
				if (queryStartRecord>1) {
					var prevRecord = queryStartRecord - maxFeaturesReturned;
					if (prevRecord<1) 
					{
						prevRecord=1;
						//Win1.document.write('<a href="javascript:' + theFrame + '.getMoreData(' + prevRecord + ')">Previous ' + maxFeaturesReturned + ' Records</a>&nbsp;&nbsp;&nbsp;');
						//Win1.document.write('<a href="javascript:' + theFrame + '.getMoreData(' + nextRecord + ')"><img src="' + baseURL + '/images/more.gif" border=0></a>');
					}	
					//Win1.document.write('<a href="javascript:' + theFrame + '.getMoreData(' + nextRecord + ')"><img src="' + baseURL + '/images/more.gif" border=0></a>');
				}
				if (queryStartRecord>24) {
				Win1.document.write('<a href="javascript:' + theFrame + '.getMoreData(' + prevRecord + ')"><img src="' + baseURL + '/images/prev.gif" border=0></a>');
				}
				if (stillMore)  {
					var nextRecord=featureCount + queryStartRecord;
					//Win1.document.writeln('<a href="javascript:' + theFrame + '.getMoreData(' + nextRecord + ')">More Records</a>');
					Win1.document.writeln('<a href="javascript:' + theFrame + '.getMoreData(' + nextRecord + ')"><img src="' + baseURL + '/images/more.gif" border=0></a>');
					//Win1.document.write('<a href="javascript:' + theFrame + '.getMoreData(' + prevRecord + ')"><img src="' + baseURL + '/images/prev.gif" border=0></a>');
				}
			}
			if ((toolMode!=4) && (toolMode!=25) && (selectCount>1)) {
				//Win1.document.writeln('<br><font face=Arial size=2 color="#ffffff"><b><a href="javascript:' + theFrame + '.zoomToReturnedRecords()">Zoom to these records</A></b></font>');
			}
						
			queryStartRecord = 0;
			Win1.document.writeln('</b></font></td></tr></table></center></body></html>');
			
			
		}
		//alert("toolMode:" + toolMode);
		
		if ((queryStartRecord==0) && (toolMode!=4) && (toolMode!=9) && (toolMode!=25)) {
		
			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();
				left = selectLeft[0] - mWMargin;
				right = selectRight[0] + mWMargin;
				top = selectTop[0] + mHMargin;
				bottom = selectBottom[0] - mHMargin;
				
			}
			sendMapXML();
		}
	}
	//isOutfall = false;
	//alert("Hello");
	
	
	}
	//-----------------------------------------------------------------------			
	//For single feature found				
	//-----------------------------------------------------------------------			
	//isOutfall=false

	if (featureCount == 1) {
		newSelectCount += 1;
		if (showSelectedData) {
			//alert("displayAttributeData()[opening html page]");
			/*if ((useExternalWindow) || (!useTextFrame)) {
				//Win1 = window.open("","QueryWindow","width=575,height=120,scrollbars=yes,resizable=yes");
				theFrame = "opener";
				if (parent.MapFrame!=null) theFrame = "opener.parent.MapFrame";
			//} else {
			*/
				Win1 = parent.TextFrame;
				//Win1.document.open();
			//}
			Win1.document.open();
			Win1.document.writeln('<html><head><title>Query/Selection Results</title></head>');
			Win1.document.writeln('<body text="#000033" link="#660000" vlink="#660000" LEFTMARGIN=0 onload="window.focus()">');

			Win1.document.writeln('<table width="80%" border="0" cellspacing="1" cellpadding="2" nowrap>');
			Win1.document.writeln('<center><tr><td bgcolor="#00309c" colspan=2><FONT FACE="Arial" SIZE="2" color=#FFFFFF><b>' + LayerName[ActiveLayerIndex] + '</b></td></tr>');
			
		}
			
		endpos = 1;
		//alert(endpos);
		for (var i=0;i<fCount;i++) {
			//alert(endpos);
			if (toolMode!=4) {
				var theXYs = getEnvelopeXYs(theReply, endpos)
				selectLeft[selectCount] = theXYs[0];
				selectBottom[selectCount] = theXYs[1];
				selectRight[selectCount] = theXYs[2];
				selectTop[selectCount] = theXYs[3];
				endpos = xmlEndPos;
			}
			//alert(endpos);
			inData = parseRecordString(theReply, endpos);
			endpos = xmlEndPos;
			selectedData = clearLeadingSpace(inData);
			
			epos = theReply.indexOf("</FEATURE",endpos);
			if (showSelectedData) {
				//alert("2\n" + selectedData);
				var showHyper = false;
				if (hyperLinkLayers!=null) {
					for (var s1=0;s1<hyperLinkLayers.length;s1++) {
						if (hyperLinkLayers[s1] == LayerName[ActiveLayerIndex]) showHyper=true;
					}
				}
					
				var fName1 = getFieldNames(selectedData);
				var fValue1 = getFieldValues(selectedData);
				selectPoints[selectCount] = getIdValue(fName1, fValue1);
				
				
//-------------------------------
// If layer is an outfall layer
/*
for (var s1=0;s1<hyperLinkLayers.length;s1++) {
	if (hyperLinkLayers[s1] == LayerName[ActiveLayerIndex])
	{
		for (var f=0;f<fName1.length;f++) {
			if (fName1[f] == "PICTURES"){	

			var thePictures = fValue1[f].split(",")
			Win1.document.writeln('<center><tr><td colspan=2>');
			for (var i=0;i<thePictures.length;i++){
				var theImg = hyperLinkPaths[s1] + thePictures[i];																			
				if (thePictures[i].length > 3){
					Win1.document.writeln('<a href="' + theImg +  '" target=_blank><img src="' + theImg + '" width=200 height=175></a><br>');
				}	
			 }		
					Win1.document.writeln('</td></tr>');			
					
			break;					
		    }
		}
	}
}
*/
//-------------------------------				
				
				
			//Start writing table	
			if (selectCount==0) {
				if (isSecondRow){
					Win1.document.write('<tr><td bgcolor="#b0c4de">'); 
				}else{
					Win1.document.write('<tr><td bgcolor="#FFFFFF">'); 				
				}
				Win1.document.write('<FONT FACE="Verdana" SIZE="1" color="#000066"><b>REC</b></FONT></a></td>');
				if (isSecondRow){
					Win1.document.write('<td bgcolor="#b0c4de">'); 
				}else{
					Win1.document.write('<td bgcolor="#FFFFFF">'); 				
				}
				isSecondRow = !isSecondRow;
				
				if (toolMode!=4) Win1.document.write('<a href="javascript:' + theFrame + '.parcDisp(' + selectCount + ')">');
				//Win1.document.write('<FONT FACE="Arial" SIZE="-2">' + (selectCount+queryStartRecord+1) + '</FONT>');
				if (toolMode!=4) Win1.document.write('</a>');
				Win1.document.writeln('</td><tr>');

				
										
					for (var f=0;f<fName1.length;f++) {
					
					
					  if (fName1[f] == "#SHAPE#")  continue;
					  else if (fName1[f] == "#ID#")  continue;
					  else if (fName1[f] == "ENTITY")  continue;
					  
						var f2 = -1;
						if (useFieldAlias) {
							for (var f3=0;f3<AliasFieldName.length;f3++) {
								if (AliasFieldName[f3]==fName1[f]) f2 = f3;
							}
						}
				if (isSecondRow){
					Win1.document.write('<td bgcolor="#b0c4de">'); 
				}else{
					Win1.document.write('<td bgcolor="#FFFFFF">'); 				
				}						
						if (f2!=-1) {
							Win1.document.write('<FONT FACE="Arial" SIZE="-2">' + AliasFieldAlias[f2] + '</FONT></a></td>');
						} else {
						
							//----------------------------------------												
							//If the layer is an SDE layer, trim field just for display purposes
							indx = fName1[f].lastIndexOf(".");
							
							if (indx != -1)
							{
								fieldName = fName1[f].substring(indx+1);
							} else {
								fieldName = fName1[f];		
							}
							//----------------------------------------						
							//Win1.document.write('<FONT FACE="Arial" SIZE="-2">' + fName1[f] + '</FONT></a></td>');
							Win1.document.write('<FONT FACE="Verdana" SIZE="1" color="#000066"><b>' + fieldName.replace(/_/g, " ") + '</b></FONT></a></td>');
							
							
						}
							/*if (fName1[f] == "PICTURES"){
								 isOutfall=true;
								 Outfallid=fValue1[f];
																 
								 
							}	*/ 						
				
			var s2 = -1;
			for (var s1=0;s1<LayerFields.length;s1++) {
			
			
					  if (fName1[f] == "#SHAPE#")  continue;
					  else if (fName1[f] == "#ID#")  continue;
					  else if (fName1[f] == "ENTITY")  continue;
					  		
					
						if (fName1[f]==LayerFields[s1]) s2=s1;
					}
				if (isSecondRow){
					Win1.document.write('<td bgcolor="#b0c4de">'); 
				}else{
					Win1.document.write('<td bgcolor="#FFFFFF">'); 				
				}
					var isHyper=false;
					if (showHyper) {
						for (var s1=0;s1<hyperLinkFields.length;s1++) {
						
							if (hyperLinkFields[s1] == fName1[f]) {														
								Win1.document.write('<a href="' + hyperLinkPaths[s1] + fValue1[f] + '" target="_blank">');
								isHyper=true;
							}
						}
					}

					if (LayerFieldType[s2]=="91") {
						//alert(fName1[f]);
						if (isNaN(fValue1[f])) {
							var theDate = fValue1[f];
						} else {
							//var theDate = new Date(parseInt(fValue1[f]));
							var theDateObj = new Date(parseFloat(fValue1[f]));
							var theDate = theDateObj.toGMTString();
						}
						Win1.document.write('<FONT FACE="Arial" SIZE="1">' + theDate + '</FONT>');
						theDate=null;
					} else {
					
						if (fValue1[f].indexOf("s:") != -1){
							
							//theImage = scanImagePath + fValue1[f].substring(12);	
							theImage = baseFolder + fValue1[f].substring(12);														
							theImage = baseURL + "filecheck.asp?thefile=" + theImage;		
																	
							//theImage = theImage.replace(/\/g, "/");
							 
							Win1.document.write('<FONT FACE="Arial" SIZE="-2"><a href="' + theImage + '" target=_blank>' + fValue1[f] + '</a></FONT><br>');
							
						} else {
						Win1.document.write('<FONT FACE="Arial" SIZE="-2">' + fValue1[f] + '</FONT>');
						}
						
					}
					if (isHyper) Win1.document.write('</a>');
					Win1.document.writeln('</td>');
					Win1.document.writeln('</tr>');						

					isSecondRow = !isSecondRow 								
					}

				}
				fName1 = null;
				fValue1 = null;
					
			}
			selectCount += 1;
					
		}
		
		
		if (showSelectedData) {
			
			Win1.document.writeln('<tr><td colspan=2 bgcolor="#00309c">&nbsp;</td></tr></table>');
		
			//isOutfall = false;
			/*
			if (toolMode!=25) {
				if (queryStartRecord>0) {
					var prevRecord = queryStartRecord - maxFeaturesReturned;
					if (prevRecord<0) prevRecord=0;
					//Win1.document.write('<table border=0 bgcolor="#6495ed"><tr><td><font face=Arial size=1 color=#FFFFFF><b><a href="javascript:' + theFrame + '.getMoreData(' + prevRecord + ')">Previous ' + maxFeaturesReturned + ' Records</a>&nbsp;&nbsp;&nbsp;</b></font></td></tr></table>');
					Win1.document.write('<table border=0 bgcolor="#6495ed"><tr><td><font face=Arial size=1 color=#FFFFFF><b><a href="javascript:' + theFrame + '.getMoreData(' + prevRecord + ')"><img src="' + baseURL + 'images/prev.gif" border=0></a></b></font></td></tr></table>');
					
				}
				if (stillMore) {
					var nextRecord=featureCount + queryStartRecord;
					//Win1.document.writeln('<table border=0 bgcolor="#6495ed"><tr><td><font face=Arial size=1 color=#FFFFFF><b><a href="javascript:' + theFrame + '.getMoreData(' + nextRecord + ')">More Records</a></b></font></td></tr></table>');
					Win1.document.writeln('<table border=0 bgcolor="#6495ed"><tr><td><font face=Arial size=1 color=#FFFFFF><b><a href="javascript:' + theFrame + '.getMoreData(' + nextRecord + ')"><img src="' + baseURL + 'images/more.gif" border=0></a></b></font></td></tr></table>');
				}
			}
			*/
			queryStartRecord = 0;
			
			Win1.document.writeln('</font></center></body></html>');
			//alert(Win1.top);
			//Win1.close();
			//alert("Hello");
			
		}
	

				isOutfall = false;		
		//alert("toolMode:" + toolMode);
		
		if ((queryStartRecord==0) && (toolMode!=4) && (toolMode!=9) && (toolMode!=25)) {
		
		
			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();
				left = selectLeft[0] - mWMargin;
				right = selectRight[0] + mWMargin;
				top = selectTop[0] + mHMargin;
				bottom = selectBottom[0] - mHMargin;
			}
			
			//alert("hello");
			//sendMapXML();
			showHighlight(0);
			
		}
		
		isOutfall = false;		
	} 
	//------------------------------------
	// If not features are found
	if (featureCount <= 0) {
		//alert(tempString);
		//if ((useExternalWindow) || (!useTextFrame)) {
		//	Win1 = window.open("","QueryWindow","width=575,height=120,scrollbars=yes,resizable=yes");
		//} else {
			Win1 = parent.TextFrame;
			Win1.document.open();
		//}
		Win1.document.writeln('<html><head>');
		Win1.document.writeln('	<title>Select Results</title>');
		Win1.document.writeln('</head>');
		Win1.document.writeln('<body text="#000000" LEFTMARGIN=0 TOPMARGIN=0>');
		Win1.document.writeln('<center><FONT FACE="Verdana" size=1><B>' + LayerName[ActiveLayerIndex] +'</B>');
		Win1.document.writeln('<P><b><font color="#990000">No Features Found.</font></b>');
		if (debugOn>0) {
			Win1.document.writeln('<p>Returned ArcXML Response:<br>');
			Win1.document.writeln(untag(theReply));
		} else {
			if (theError!="") {
				Win1.document.writeln('<p>Server returned:<br>');
				Win1.document.writeln(theError);
			}
		}
		Win1.document.writeln('</FONT>');
		Win1.document.writeln('</center></body></html>');
		Win1.document.close();
	}	
	if ((toolMode==4) || (toolMode==9))  selectCount=0;
	//Win1.close();
	Win1=null;
	hideRetrieveData();
	isOutfall = false;
}
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('<B>' + LayerName[ActiveLayerIndex] +'</B></font><FONT FACE="Arial" size="-2">');
			parent.TextFrame.document.writeln('<br>' + msgList[116]);
			/*
			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();
}


