// 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 hyperlinkWindowWidth=500;
var hyperlinkWindowHeight=400;


// variable for search tolerance... dynamically set in app
var searchTolerance=0.01;
// starting record position for returned records
var queryStartRecord=0;

if (imsQueryURL=="") {
	imsQueryURL= imsURL + "&CustomService=Query";
	//alert(imsQueryURL);
}
var canQuery=true;
var newSelectCount=0;
var selectPoints = new Array();
var aimsSelectPresent=true;

//Copy from Oconto 
// can features be selected if invisible or not within layer scale threshholds?
var canSelectInvisible=true;
var setQueryString="";
var multiselect="";
var multiarray = new Array();
var multicount = 0;
var multilist=false;
var selbuffer="";
var sellIndex = "";
var sellField = "";
var sellString = "";
var multi = false;
var MultiID=false;
var MultiCount=0;
//For MultiSelection


var selectData = new Array();
var selectLeft = new Array();
var selectRight = new Array();
var selectTop = new Array();
var selectBottom = new Array();
var selectLayer="";
var selectType = "";
var selectCount = 0;
var selectBlurb = "";
var selectEnvelope="";
var highlightedOne = "";
	//mode - 0=selection; 1=query
var queryMode=1;
	//mode - 1=query; 2=box,point; 3=line,polygon
//var selectionMode=1;




/*
***************************************************************************************

Identify functions 

***************************************************************************************
*/

// identify feature
function identify(e) {
	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);
	showRetrieveData();
	sendToServer(imsQueryURL,theString,identifyXMLMode);
}

// hyperlink from feature
function hyperLink(e) {
	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("This layer does not have any HyperLinks.");
	}
}

// write out XML request to identify features
function writeGetFeatures(west1,south1,east1,north1) {
	if (swapSelectFields) {
		selectFields=selFieldList[ActiveLayerIndex];
	}
	var theString = writeIdentifyXML(ActiveLayer,ActiveLayerType,selectFields,maxFeaturesReturned,queryStartRecord,west1,south1,east1,north1,useLimitExtent);
	selectLayer=ActiveLayer;
	selectType=ActiveLayerType;
	selectCount=0;
	hightlightedOne="";
	selectPoints.length=1;
	selectLeft.length=1;
	selectRight.length=1;
	selectTop.length=1;
	selectBottom.length=1;
	return theString;
}

function writeIdentifyXML(theLayer,theLayerType,theFields,maxReturned,startRec,leftX,bottomY,rightX,topY,hasLimit) {
	var theString = '<ARCXML version="1.1">\n<REQUEST>\n<GET_FEATURES outputmode="xml" envelope="true" geometry="false"';
	theString += ' compact="true" featurelimit="' + maxReturned + '" beginrecord="' + startRec + '">\n';
	theString += '<LAYER id="' + theLayer + '" />';
	theString += '<SPATIALQUERY subfields="' + theFields + '">';
	theString += '<SPATIALFILTER relation="area_intersection" >';
	theString += '<ENVELOPE maxy="' + topY + '" maxx="' + rightX + '" miny="' + bottomY + '" minx="' + leftX + '" />';
	theString += '</SPATIALFILTER>';
	theString += '</SPATIALQUERY>';
	if (hasLimit) {
		// keep this within the limitExtent
		theString += '<SPATIALFILTER relation="area_intersection">\n';
		theString += '<ENVELOPE maxx="' + limitRight + '" maxy="' + limitTop + '" minx="' + limitLeft + '" miny="' + limitBottom + '" />\n';
		theString += '</SPATIALFILTER>\n';
	}
	theString += '</GET_FEATURES>';
	theString += '</REQUEST>';
	theString += '</ARCXML>';
	return theString;

}

// 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);
	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 = 1;
	//alert("displayAttributeData()[featurecount=" + featureCount + "]");
	selectCount = 0;
	var tempString="";
	//var Win1 = parent.TextFrame;
	var Win1 = parent.TOCFrame;
	//var Win1 = parent.DBFrame;
	var theFrame = "parent.MapFrame";
	var key="";
	if (featureCount > 0) {
		newSelectCount += 1;
		fCount = featureCount;

		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 {
				
			}
		}
		endpos = 1;
		
		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) {
				var showHyper = false;
				if (hyperLinkLayers!=null) {
					for (var s1=0;s1<hyperLinkLayers.length;s1++) {
						if (hyperLinkLayers[s1] == LayerName[ActiveLayerIndex]) showHyper=true;
					}
				}
				var temp1 = getFieldNames(selectedData);
				var fName1 = temp1.slice(0,(temp1.length-2));
				var fValue1 = getFieldValues(selectedData);
				selectPoints[selectCount] = getIdValue(fName1, fValue1);

				if (selectCount==0) {
					for (var f=0;f<fName1.length;f++) {
						var f2 = -1;
						if (useFieldAlias) {
							for (var f3=0;f3<AliasFieldName.length;f3++) {
								if (AliasFieldName[f3]==fName1[f]) f2 = f3;
							}
						}
						if (f2!=-1) {
						} else {
						}
					}
				}
				for (var f=0;f<fName1.length;f++) {	
					//Win1.document.write('<TD>');
					var isHyper=false;
					if (showHyper) {
						for (var s1=0;s1<hyperLinkFields.length;s1++) {
							if (hyperLinkFields[s1]==fName1[f]) {
								Win1.document.write('<a href="' + fValue1[f] + '" target="_blank">');
								isHyper=true;
							}
						}
					}
					var s2 = -1;
					for (var s1=0;s1<LayerFields.length;s1++) {
						if (fName1[f]==LayerFields[s1]) s2=s1;
					}
					if (LayerFieldType[s2]=="91") {
						if (isNaN(fValue1[f])) {
							var theDate = fValue1[f];
						} else {
							var theDateObj = new Date(parseFloat(fValue1[f]));
							var theDate = theDateObj.toGMTString();
						}
						theDate=null;
					} else {
					}
				}

				
				
				if ((XMLMode==2002) && (multi) || (XMLMode==6) && (multi))  {
					if (multiselect==""){
						multiselect += fValue1[1];
					} else {
						multiselect = multiselect + "','" + fValue1[1];
					}	
					multicount += 1;

					//key = fValue1[0];
					//alert(multiselect);
					key=multiselect; 
					//alert(key)
					
				
				}

				if (toolMode==40) {
					//ID Parcel
					key = fValue1[1]+'&Area='+fValue1[2];
					//alert(key)	
				}

				if (XMLMode==3001) {
					//Parcel Search
					key = fValue1[1];
					//alert(key)
					
				}

				fName1 = null;
				//fValue1 = null;
				
			}

			selectCount += 1;
					
		}
		if (showSelectedData) {

			if ((XMLMode==2002) || (XMLMode==6 && toolMode==16)) {
			//Win1.document.writeln('<center><INPUT type="button" value="Generate Mailing List" id=button1 name=button1 onmousedown="callupdate();">');
			Win1.document.writeln('<center><b><a href="/website/Oconto/mergebuild.asp" onclick="javascript:parent.MapFrame.merge=true">Compile Mailing List</a></b></center>');
			}
			
			if (toolMode!=25) {
				if (queryStartRecord>0) {
					var prevRecord = queryStartRecord - maxFeaturesReturned;
					if (prevRecord<0) prevRecord=0;
					Win1.document.write('<a href="javascript:' + theFrame + '.getMoreData(' + prevRecord + ')">Previous ' + maxFeaturesReturned + ' Records</a>&nbsp;&nbsp;&nbsp;');
				}
				if (stillMore) {
					var nextRecord=featureCount + queryStartRecord;
				}
			}
		}
		
		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 ((fWidth==0) && (fHeight==0)) {			
					mWMargin = fullWidth * selectPointMargin;
					mHMargin = fullHeight * selectPointMargin;
					if (mWMargin > xDistance/2) {
						mWMargin = xDistance/2;
						mHMargin = yDistance/2;
					}
				} else {
					mWMargin = fWidth * selectMargin;
					mHMargin = fHeight * selectMargin; 
				}
				
				
				saveLastExtent();
				if (parcelSearch==true || XMLMode==1) {

				left = selectLeft[0] - mWMargin;
				right = selectRight[0] + mWMargin;
				top = selectTop[0] + mHMargin;
				bottom = selectBottom[0] - mHMargin;
				
				}
			} else {
				calcSelectEnvelope();
				var fWidth = selMaxEnvelope[2] - selMaxEnvelope[0];
				var fHeight = selMaxEnvelope[3] - selMaxEnvelope[1];
				var mWMargin = 0;
				var mHMargin = 0;
				if ((fWidth==0) && (fHeight==0)) {			
					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 = selMaxEnvelope[0] - mWMargin;
				right = selMaxEnvelope[2] + mWMargin;
				top = selMaxEnvelope[3] + mHMargin;
				bottom = selMaxEnvelope[1] - mHMargin;
			
			}
			sendMapXML();
		}	
	} else {
		if (debugOn>0) {
		} else {
			if (theError!="") {
			}
		}
	}
	if ((toolMode==4) || (toolMode==9))  selectCount=0;
	hideRetrieveData();
	//alert(key);
	if (key=="[polygon]") {
	//alert("in");
	//do not execute parseCommonDatat(key the data
	//has already ben written to the screen
	}else{
	parseCommonData(key);
	}
key="";
}

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);
		if (parent.TextFrame!=null) {
			parent.TextFrame.document.open();
			parent.TextFrame.document.writeln('<html><head>');
			parent.TextFrame.document.writeln('	<title>Select Results</title>');
			parent.TextFrame.document.writeln('</head>');
			parent.TextFrame.document.writeln('<body BACKGROUND="/GISWeb/elmgrove/images/cloud.jpg" 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>HyperLink to ' + inData );
			parent.TextFrame.document.writeln('</FONT>');
			parent.TextFrame.document.writeln('</body></html>');
			parent.TextFrame.document.close();
		}
		var Win1=open(inData,"",linkString);
	} else {
	
		//alert(tempString);
		if (parent.TextFrame!=null) {
			parent.TextFrame.document.open();
			parent.TextFrame.document.writeln('<html><head>');
			parent.TextFrame.document.writeln('	<title>Select Results</title>');
			parent.TextFrame.document.writeln('</head>');
			parent.TextFrame.document.writeln('<body BACKGROUND="/GISWeb/elmgrove/images/cloud.jpg" 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>Unable to hyperlink with submitted request.');
			if (debugOn>0) {
				parent.TextFrame.document.writeln('<p>Returned ArcXML Response:<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 = "Unable to hyperlink.";
			if (debugOn>0) {
				msg = msg + "\nServer ArcXML response:\n" + 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];
			}
	}
	return canLink;

}




// parse XML response for selected features
function displayIDData(theReply) {
	buffer=true;
	useExternalWindow=true;
	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 gomuni=false;
	var fCount = featureCount;
	//alert("displayAttributeData()[featurecount=" + featureCount + "]");
	selectCount = 0;
	var tempString="";
	var Win1 = parent.TextFrame;
	var theFrame = "parent.MapFrame";
	var bgcol = "#950202";
	if (featureCount > 0) {
		newSelectCount += 1;
		if((showSelectedData) && (gomuni==false)) {
			//alert("displayAttributeData()[opening html page]");
				Win1 = parent.TOCFrame;
				//Win1.document.open();
			Win1.document.open();
			Win1.document.writeln('<html><head><title>Query/Selection Results</title></head>');
			Win1.document.writeln('<body bgcolor="#C6D1FF" link="Blue" vlink="Blue" LEFTMARGIN=0">');
			Win1.document.writeln('<br><TABLE WIDTH="95%" BORDER="0" CELLSPACING="0" CELLPADDING="0" ALIGN="CENTER">');
			Win1.document.writeln('<TR><TD WIDTH="100%" BGCOLOR="#001A82" VALIGN="TOP">');
			Win1.document.writeln('<table border="0" cellspacing="1" cellpadding="1" align=left width="100%">');
			Win1.document.writeln('<tr bgcolor="#FFCC00"><td colspan="2" align="center"><FONT FACE="Arial" SIZE="3" color="#001A82"><b>' + LayerName[ActiveLayerIndex] + '</b></font></td></tr>');
		}
		endpos = 1;
		
		if ((XMLMode==2002) & (multicount>0)) {
			for (var f=0;f<multicount;f++) {	
				Win1.document.write('<tr><td colspan=2><FONT FACE="Arial" SIZE="-2" color="white" >Rec:  ' + (f+1) + '</FONT></td></tr>');
				if(bgcol == "#C6D1FF"){
					bgcol = "#C6D1FF"
				}else{
					bgcol = "#C6D1FF"
				}
				Win1.document.write('<tr bgcolor='+bgcol+'><td><FONT FACE="Arial" SIZE="1">Parcel Number:</td><td>' + multiarray[f] + '</td></tr></FONT>');
				}			
		}
		
		for (var i=0;i<fCount;i++) {
			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;
			}
			inData = parseRecordString(theReply, endpos);
			endpos = xmlEndPos;
			selectedData = clearLeadingSpace(inData);
			
			epos = theReply.indexOf("</FEATURE",endpos);
			if((showSelectedData) && (gomuni==false)) {
				//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 temp1 = getFieldNames(selectedData);
				var fName1 = temp1.slice(1,(temp1.length));
				var fValue1 = getFieldValues(selectedData).slice(1,(getFieldValues(selectedData).length));
				//alert(fValue1);
				selectPoints[selectCount] = getIdValue(fName1, fValue1);
				//if (selectCount==0) {
				//if (multicount==0) {
					if ((XMLMode==2002) & (multicount>0)) {
						multilist=true;
						Win1.document.write('<tr><td colspan=2><FONT FACE="Arial" SIZE="-2" color="white" >Rec:  ' + (multicount+1) + '</FONT></td></tr>');
					}else{
						Win1.document.write('<tr><td colspan=2><FONT FACE="Arial" SIZE="-2" color="white" >Rec:  ' + (selectCount+queryStartRecord+1) + '</FONT></td></tr>');
					}
					for (var f=0;f<fName1.length;f++) {
						var f2 = -1;
						if (useFieldAlias) {
							for (var f3=0;f3<AliasFieldName.length;f3++) {
								if (AliasFieldName[f3]==fName1[f]) f2 = f3;
							}
						}
						if(bgcol == "#C6D1FF"){
							bgcol = "#C6D1FF"
						}else{
							bgcol = "#C6D1FF"
						}

						if (f2!=-1) {
							if(AliasFieldAlias[f2] == "PATH"){
								Win1.document.write('<center>**Click PATH to Open Photo**</center>');
								Win1.document.write('<tr><td bgcolor='+bgcol+'><FONT FACE="Arial" SIZE="1">' + AliasFieldAlias[f2] + ':</td><td><a href='+appDir+'photos.asp?photo=' + fValue1[f] + '>' + fValue1[f] + '</a></td></tr></FONT>');
							}else{
								Win1.document.write('<tr><td bgcolor='+bgcol+'><FONT FACE="Arial" SIZE="1">' + AliasFieldAlias[f2] + ':</td><td>' + fValue1[f] + '</td></tr></FONT>');
							}
						}else{
							if(fName1[f] == "PATH"){
								Win1.document.write('<caption>**Click PATH to Open Photo**</caption>');
								Win1.document.write('<tr><td bgcolor='+bgcol+'><FONT FACE="Arial" SIZE="1">' + fName1[f] + ':</td><td bgcolor='+bgcol+'><a href=/ArcIMS/Antigo/photos.asp?photo=' + fValue1[f] + ' target="_blank">' + fValue1[f] + '</a></td></tr></FONT>');
							}else{
								Win1.document.write('<tr><td bgcolor='+bgcol+'><FONT FACE="Arial" SIZE="1">' + fName1[f] + ':</font></td><td bgcolor="white"><FONT FACE="Arial" SIZE="1">' + fValue1[f] + '</td></tr></FONT>');
							}
						}
					}
				//}
				//}
				for (var f=0;f<fName1.length;f++) {
					if (XMLMode==2002) {
						if (multiselect==""){
							multiselect += fValue1[f];
						} else {
							multiselect = multiselect + "','" + fValue1[f];
						}
						multiarray[multicount]= fValue1[f];
						multicount += 1;
						sellIndex = dblayer;
						sellField = "PIN";
						sellString = multiselect;
					}
				}
				fName1 = null;
				fValue1 = null;
			}
			selectCount += 1;
		}
		if ((showSelectedData) && (gomuni==false)) {	
			Win1.document.writeln('</table></td></tr></table><br><br>');
			if (XMLMode==2002) {
			Win1.document.writeln('<center><INPUT type="button" value="Generate Mailing List" id=button1 name=button1 onmousedown="callupdate();">');
			}
			if (toolMode!=25) {
				if (queryStartRecord>0) {
					var prevRecord = queryStartRecord - maxFeaturesReturned;
					if (prevRecord<0) prevRecord=0;
					Win1.document.write('<a href="javascript:' + theFrame + '.getMoreData(' + prevRecord + ')"><br>Previous ' + maxFeaturesReturned + ' Records</a>&nbsp;&nbsp;&nbsp;');
				}
				if (stillMore) {
					var nextRecord=featureCount + queryStartRecord;
					Win1.document.writeln('<a href="javascript:' + theFrame + '.getMoreData(' + nextRecord + ')"><br>More Records</a>');
				}
			}
			Win1.document.writeln('</font></center></body>');
			Win1.document.writeln('<SCRIPT TYPE="text/javascript" LANGUAGE="JavaScript">');
			Win1.document.writeln('function callupdate(){');
			Win1.document.writeln('var selbuffer = "'+multiselect+'";');
			Win1.document.writeln('parent.MapFrame.writeDBResponsePage(selbuffer);');
			//alert (multiselect);
			Win1.document.writeln('}');
			Win1.document.writeln('</script>');
			Win1.document.writeln('<br><center><input type="Button" name="List" value="Return to Layer List" onmousedown="goList();"></center>');
			Win1.document.writeln('<SCRIPT TYPE="text/javascript" LANGUAGE="JavaScript">');
			Win1.document.writeln('function goList(){');
			Win1.document.writeln('parent.TOCFrame.location="'+appDir+'toc.htm";');
			Win1.document.writeln('}');
			Win1.document.writeln('</script></html>');
			Win1.document.close();
		}
		//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; 
				}
				//if(toolMode == 1){
				saveLastExtent();
				eLeft = selectLeft[0] - 500;
				eRight = selectRight[0] + 500;
				eTop = selectTop[0] + 500;
				eBottom = selectBottom[0] - 500;
				//}
			}else{
				calcSelectEnvelope();
				var fWidth = selMaxEnvelope[2] - selMaxEnvelope[0];
				var fHeight = selMaxEnvelope[3] - selMaxEnvelope[1];
				var mWMargin = 0;
				var mHMargin = 0;
				if ((fWidth==0) && (fHeight==0)) {			
					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 = selMaxEnvelope[0] - mWMargin;
				eRight = selMaxEnvelope[2] + mWMargin;
				eTop = selMaxEnvelope[3] + mHMargin;
				eBottom = selMaxEnvelope[1] - mHMargin;
			}
			sendMapXML();
		}
		
		
			
	} else {
		Win1 = parent.TOCFrame;
		Win1.document.open();
		Win1.document.writeln('<html><head>');
		Win1.document.writeln('	<title>Select Results</title>');
		Win1.document.writeln('</head>');
		Win1.document.writeln('<body BACKGROUND="'+appDir+'Images/back.gif" text="black" LEFTMARGIN=0 TOPMARGIN=0>');
		Win1.document.writeln('<FONT FACE="Arial"><center><B>There are no available ' + LayerName[ActiveLayerIndex] +' features for the selected area.</B></font></center>');
		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('<br><br><center><input type="Button" name="List" value="Return to Layer List" onmousedown="goList();"></center>');
		Win1.document.writeln('<SCRIPT TYPE="text/javascript" LANGUAGE="JavaScript">');
		Win1.document.writeln('function goList(){');
		Win1.document.writeln('parent.TOCFrame.location="'+appDir+'toc.htm";');
		Win1.document.writeln('}');
		Win1.document.writeln('</script>');
		Win1.document.writeln('</body></html>');
		Win1.document.close();
	}
	if ((toolMode==4) || (toolMode==9))  selectCount=0;
	Win1=null;
	hideRetrieveData();
	useExternalWindow=true;
	useTextFrame=false;
	hover=true;
}

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;
		}
	}
}

// parse XML response for selected features
function displayFeatureDataR(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);
	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 = 1;
	//alert("displayAttributeData()[featurecount=" + featureCount + "]");
	selectCount = 0;
	var tempString="";
	//var Win1 = parent.TextFrame;
	var Win1 = parent.TOCFrame;
	//var Win1 = parent.DBFrame;
	var theFrame = "parent.MapFrame";
	var key="";
	if (featureCount > 0) {
		newSelectCount += 1;
		fCount = featureCount;

		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 {
				
			}
		}
		endpos = 1;
		
		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) {
				var showHyper = false;
				if (hyperLinkLayers!=null) {
					for (var s1=0;s1<hyperLinkLayers.length;s1++) {
						if (hyperLinkLayers[s1] == LayerName[ActiveLayerIndex]) showHyper=true;
					}
				}
				var temp1 = getFieldNames(selectedData);
				var fName1 = temp1.slice(0,(temp1.length-2));
				var fValue1 = getFieldValues(selectedData);
				selectPoints[selectCount] = getIdValue(fName1, fValue1);

				if (selectCount==0) {
					for (var f=0;f<fName1.length;f++) {
						var f2 = -1;
						if (useFieldAlias) {
							for (var f3=0;f3<AliasFieldName.length;f3++) {
								if (AliasFieldName[f3]==fName1[f]) f2 = f3;
							}
						}
						if (f2!=-1) {
						} else {
						}
					}
				}
				for (var f=0;f<fName1.length;f++) {	
					//Win1.document.write('<TD>');
					var isHyper=false;
					if (showHyper) {
						for (var s1=0;s1<hyperLinkFields.length;s1++) {
							if (hyperLinkFields[s1]==fName1[f]) {
								Win1.document.write('<a href="' + fValue1[f] + '" target="_blank">');
								isHyper=true;
							}
						}
					}
					var s2 = -1;
					for (var s1=0;s1<LayerFields.length;s1++) {
						if (fName1[f]==LayerFields[s1]) s2=s1;
					}
					if (LayerFieldType[s2]=="91") {
						if (isNaN(fValue1[f])) {
							var theDate = fValue1[f];
						} else {
							var theDateObj = new Date(parseFloat(fValue1[f]));
							var theDate = theDateObj.toGMTString();
						}
						theDate=null;
					} else {
					}
				}

				
				
				if ((XMLMode==2002) && (multi) || (XMLMode==6) && (multi))  {
					if (multiselect==""){
						multiselect += fValue1[1];
					} else {
						multiselect = multiselect + "','" + fValue1[1];
					}	
					multicount += 1;

					//key = fValue1[0];
					//alert(multiselect);
					key=multiselect; 
					//alert(key)
					
				
				}

				if (toolMode==40) {
					//ID Parcel
					key = fValue1[1]+'&Area='+fValue1[2];
					//alert(key)	
				}

				if (XMLMode==3001) {
					//Parcel Search
					key = fValue1[1];
					//alert(key)
					
				}

				fName1 = null;
				//fValue1 = null;
				
			}

			selectCount += 1;
					
		}
		if (showSelectedData) {

			if ((XMLMode==2002) || (XMLMode==6 && toolMode==16)) {
			//Win1.document.writeln('<center><INPUT type="button" value="Generate Mailing List" id=button1 name=button1 onmousedown="callupdate();">');
			Win1.document.writeln('<center><b><a href="/website/Oconto/mergebuild.asp" onclick="javascript:parent.MapFrame.merge=true">Compile Mailing List</a></b></center>');
			}
			
			if (toolMode!=25) {
				if (queryStartRecord>0) {
					var prevRecord = queryStartRecord - maxFeaturesReturned;
					if (prevRecord<0) prevRecord=0;
					Win1.document.write('<a href="javascript:' + theFrame + '.getMoreData(' + prevRecord + ')">Previous ' + maxFeaturesReturned + ' Records</a>&nbsp;&nbsp;&nbsp;');
				}
				if (stillMore) {
					var nextRecord=featureCount + queryStartRecord;
				}
			}
		}
		
		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 ((fWidth==0) && (fHeight==0)) {			
					mWMargin = fullWidth * selectPointMargin;
					mHMargin = fullHeight * selectPointMargin;
					if (mWMargin > xDistance/2) {
						mWMargin = xDistance/2;
						mHMargin = yDistance/2;
					}
				} else {
					mWMargin = fWidth * selectMargin;
					mHMargin = fHeight * selectMargin; 
				}
				
				
				saveLastExtent();
				if (parcelSearch==true || XMLMode==1) {

				left = selectLeft[0] - mWMargin;
				right = selectRight[0] + mWMargin;
				top = selectTop[0] + mHMargin;
				bottom = selectBottom[0] - mHMargin;
				
				}
			} else {
				calcSelectEnvelope();
				var fWidth = selMaxEnvelope[2] - selMaxEnvelope[0];
				var fHeight = selMaxEnvelope[3] - selMaxEnvelope[1];
				var mWMargin = 0;
				var mHMargin = 0;
				if ((fWidth==0) && (fHeight==0)) {			
					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 = selMaxEnvelope[0] - mWMargin;
				right = selMaxEnvelope[2] + mWMargin;
				top = selMaxEnvelope[3] + mHMargin;
				bottom = selMaxEnvelope[1] - mHMargin;
			
			}
			sendMapXML();
		}	
	} else {
		if (debugOn>0) {
		} else {
			if (theError!="") {
			}
		}
	}
	if ((toolMode==4) || (toolMode==9))  selectCount=0;
	hideRetrieveData();
}

// parse XML response for selected features
function displayFeatureData(theReply) {
	//alert(theReply)
	//buffer=true;
	useExternalWindow=true;
	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 theFrame = "parent.MapFrame";
	var bgcol = "#950202";
	if (featureCount > 0) {
		newSelectCount += 1;
		endpos = 1;
		for (var i=0;i<fCount;i++) {
			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;
			}
			
			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;
					}
				}
				
			}
			selectCount += 1;
		}
		
		//alert("toolMode:" + toolMode);
		zoomToSingleSelect =true;
		
		//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] - 500;
				right = selectRight[0] + 500;
				top = selectTop[0] + 500;
				bottom = selectBottom[0] - 500;
								
			}else{
			
				zoomToSelectedRecords();
				
			}
			sendMapXML();
		}
	
}







