// 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 BusRoutesStart = new Array();
var BusRoutesEnd = new Array();
var BusRoutesCommon = new Array();
var NearestStart = new Array();
var NearestEnd = new Array();
var TransferArray = new Array();
var newBusRoutesStart = new Array();
var newBusRoutesEnd = new Array();

var MasterArray = new Array( new Array("BC Junction, Bing.","03","05","07","08","12","15","23","28","35","40","SS","CP","K","M"), new Array("Main & Willow, JC","07","17","23","25","35"),
new Array("Oakdale Mall, JC.","25","35","SS"), new Array("Town Square Mall, Vest.","47","SS"), new Array("Washington Ave, Endicott","35","47","SS","WS"), 
new Array("BU","05","15","17","25","47","SS"), new Array("Park & Ride, Chen. Bridge","08","40"),
new Array("Vestal & Main, Endicott","35","47"), new Array("Hooper & Countryclub, Endwell","35","47","ES"),
new Array("Vestal & Park, Bing.","03","05"), new Array("Robinson & Chenango, Bing.","28","40"),  
new Array("Clinton & Front, Bing.","07","08"), new Array("Glenwood & Prospect, Bing.","07","17") );

var distArray = new Array();
var XArray = new Array();
var YArray = new Array();
var RoutesArray = new Array();
var theStartDistance;
var theEndDistance;
var Routes = new Array();

/*
***************************************************************************************

Identify functions 

***************************************************************************************
*/


// identify feature --THIS HAS BEEN CUSTOMIZED
function identify(e) {

	

		//highlightedOne="";
		//theStartX = mouseX;
		//theStartY = mouseY;
	theStartX = mapX;
	theStartY = mapY;
	
	

	if(parent.TextFrame.theSearchForm.elements[6].checked){

		newbuffdist="660";
	}
	else if(parent.TextFrame.theSearchForm.elements[7].checked){
		newbuffdist="1320";
	}
	else if(parent.TextFrame.theSearchForm.elements[8].checked){
		newbuffdist="2640";
	}

	firstgeocodename="User Selected Point";
	labelgeocodes="yes";
	
	doEnd="no";
	onegeocode="yes";
	
	NearestStart = new Array();
	NearestEnd = new Array();
	BusRoutesStart = new Array();
	BusRoutesEnd = new Array();
	BusRoutesCommon = new Array();
	theEndX=0;
	theEndY=0;
	
	
		//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);
	//alert(theStartX);


	parent.MapFrame.selectBusStops();

}

// 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 displayAttributeData(theReply) {
	
//alert(theReply);


Routes = new Array();
var temparray = new Array();
distArray = new Array();
TransferArray = new Array();
BusRoutesCommon = new Array();


tempfeaCount=0;

	//alert("display data");
	setLayerFields(ActiveLayerIndex);
	var selectedData="";
	var inData="";
	var nString = new Array();

	
	var feaCount = theReply.substring(theReply.indexOf("FEATURECOUNT count=",0)+20, theReply.indexOf("hasmore",0)-2);

	
if(feaCount == 0){

//alert("FEATURE COUNT = 0");

				//hideRetrieveData();

//alert(doEnd);

	//if(doEnd=="yes") {

//	//alert("no stops, onegeocode=no");
//
		//doEnd="no";
	
		//selectBusStops();

	//} else {
		//alert("no stops, onegeocode=yes");
		
			
	//}

} else {



//FOUND A BUS STOP or more


	endpos = 1;


	var count = 1;
	var newcount = 1;
	var distcount = 0;

while (count <= feaCount) {

	
//if (toolMode!=4) {//SEEMS TO WORK FOR USER SELECT POINT

	var theXYs = getEnvelopeXYs(theReply, endpos)



	selectLeft[selectCount] = theXYs[0];
	selectLeft[selectCount] = theXYs[1];
	selectRight[selectCount] = theXYs[2];
	selectTop[selectCount] = theXYs[3];
	endpos = xmlEndPos;

//}//SEEMS TO WORK FOR USER SELECT POINT


	
	if(doEnd=="no") {

		theDistX=theStartX;
		theDistY=theStartY;
	} else {

		theDistX=theEndX;
		theDistY=theEndY;
	}



	var theNewDistX = Math.abs(theDistX - theXYs[0]);
	var theNewDistY = Math.abs(theDistY - theXYs[1]);


	var theDistance = Math.sqrt(Math.pow(theNewDistX,2) + Math.pow(theNewDistY,2));
 
distArray[distcount] = theDistance;
	

	inData = parseRecordString(theReply, endpos);
	endpos = xmlEndPos;
	//selectedData = clearLeadingSpace(inData);
	selectedData = inData;
	
	var fValue1 = getFieldValues(selectedData);
	var theRoute = fValue1[2];

	
		var loop = 0;
//var temparray = new Array();
		var temparray = theRoute.split(", ");
					
			if(temparray.length==1) {

				
				nString[newcount] = theRoute;
				newcount += 1;
				count += 1;
							
			} else {

				for (var loop=0; loop < ((temparray.length)); loop++){
					//alert("we are in for loop");
					nString[newcount] = temparray[loop];
					newcount += 1;	
				}
					count += 1;
			}  //END if

RoutesArray[distcount] = theRoute;
distcount+= 1;
	
}  // end of while feature count





	for (count = 1; count < nString.length; count++){
	//alert(nString[count]);
 		if ((nString[count] < 10) && ((nString[count].length) == 1)){
  		nString[count] = "0"+nString[count];
		}
  	}

	nString.sort()

		var unduped= new Object;

		for (var i=0; i < (nString.length); i++){
			unduped[nString[i]] = nString[i];
		}

//var Routes = new Array;
		for (var k in unduped){
			Routes.push(unduped[k]);
		}

///Routes = all routes within distance minus duplicates
////nString = all routes including duplicates

///////////WHAT STOP IS THE CLOSEST????

	

	theDistan = 5000;
	theDistIndex = 0;
	for (var i=0; i<distArray.length; i++){
		
		if(distArray[i] < theDistan){
			theDistan = distArray[i];
			theDistIndex = i;
		}
	}
	
theDistance = Math.round(theDistan);


//SET THE CLOSEST DISTANCE



fValue1 = null;

		if ((queryStartRecord==1) && (toolMode!=4) && (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();
				eLeft = selectLeft[0] - mWMargin;
				eRight = selectRight[0] + mWMargin;
				eTop = selectTop[0] + mHMargin;
				eBottom = selectBottom[0] - mHMargin;
			}
		}

}////TEMPORARY END FEATURE = 0

//EVERYONE DOES PAST THIS SECTION/////////////////

if(doEnd == "yes") {


	if(feaCount == 0){
	
	NearestEnd=new Array();
	newBusRoutesEnd=new Array();
	BusRoutesEnd =new Array();
	theEndDistance = newbuffdist;

	} else {


	//theEndDistance=distArray[theDistIndex];
	theEndDistance=theDistance;
	NearestEnd=RoutesArray[theDistIndex].split(", ");

	for (count = 0; count < NearestEnd.length; count++){
	
 		if ((NearestEnd[count] < 10) && ((NearestEnd[count].length) == 1)){
  		NearestEnd[count] = "0"+NearestEnd[count];
		}
  	}



newBusRoutesEnd = new Array();
for (i=0; i<Routes.length; i++){
	newBusRoutesEnd[i] = Routes[i];
}

	
		for (s=0; s < Routes.length; s++) {
			if(Routes[s] == undefined) {
				delete Routes[s];
			}

			for (t=0; t < NearestEnd.length; t++) {
			
			
				if(Routes[s] == NearestEnd[t]) {
					delete Routes[s];
				
				} else {

				}
		
			}
		}

	startnum = 0;

	for (i=0; i < Routes.length; i++){
		if(Routes[i] == undefined) {
		} else {
		BusRoutesEnd[startnum] = Routes[i];
		startnum += 1;
		}
	}

	
	for (count = 0; count < BusRoutesEnd.length; count++){
	
 		if ((BusRoutesEnd[count] < 10) && ((BusRoutesEnd[count].length) == 1)){
  		BusRoutesEnd[count] = "0"+BusRoutesEnd[count];
		}
  	}

	}//end feacount =0

doEnd = "no";


	//NearestEnd = created above
	
	onegeocode="yes";

	

	selectBusStops();
		

	

} else {  ///DO END EQUAL TO NO

	if(feaCount == 0){
	
	NearestStart=new Array();
	newBusRoutesStart=new Array();
	BusRoutesStart =new Array();
	theStartDistance = newbuffdist;

	} else {



	//theEndDistance=distArray[theDistIndex];
	theStartDistance=theDistance;
	NearestStart=RoutesArray[theDistIndex].split(", ");

	for (count = 0; count < NearestStart.length; count++){
	
 		if ((NearestStart[count] < 10) && ((NearestStart[count].length) == 1)){
  		NearestStart[count] = "0"+NearestStart[count];
		}
  	}




newBusRoutesStart = new Array();
for (i=0; i<Routes.length; i++){
	newBusRoutesStart[i] = Routes[i];
}
	
		for (s=0; s < Routes.length; s++) {
			if(Routes[s] == undefined) {
				delete Routes[s];
			}

			for (t=0; t < NearestStart.length; t++) {
			
			
				if(Routes[s] == NearestStart[t]) {
					delete Routes[s];
				
				} else {

				}
		
			}
		}

	startnum = 0;

	for (i=0; i < Routes.length; i++){
		if(Routes[i] == undefined) {
		} else {
		BusRoutesStart[startnum] = Routes[i];
		startnum += 1;
		}
	}

	for (count = 0; count < BusRoutesStart.length; count++){
	
 		if ((BusRoutesStart[count] < 10) && ((BusRoutesStart[count].length) == 1)){
  		BusRoutesStart[count] = "0"+BusRoutesStart[count];
		}
  	}	


	}//end feacount=0

////////////////////////////////////////////////////////////////////
		

if(theEndX > 0){
	

		var buscount=0;
		for (s=0; s < (newBusRoutesStart.length); s++){

			if(newBusRoutesStart[s] == undefined){
			} else {

				for (e=0; e < (newBusRoutesEnd.length); e++){
					if(newBusRoutesEnd[e] == undefined){
					} else {

						if(newBusRoutesStart[s]==newBusRoutesEnd[e]) {
		

						BusRoutesCommon[buscount]=newBusRoutesStart[s];
						buscount=buscount+1;
						} else { }
					}
				}
			}
			
		}






//WHAT IF NO COMMON ROUTES???

///CHANGE TO BUSROUTES FROM NEWBUSROUTES????

	if(BusRoutesCommon.length == 0) {


	var theend="";
	var thestart="";
	var arraycount = 0;	
		for(s=0; s < newBusRoutesStart.length; s++){
			for(e=0; e < newBusRoutesEnd.length; e++){
				//theend="no";
				//thestart="no";
				for(m=0; m < MasterArray.length; m++){
				theend="no";
				thestart="no";
					for(t=1; t < (MasterArray[m]).length; t++){

						if((MasterArray[m])[t] == newBusRoutesEnd[e]){
							theend = "yes";
							theendnumb=e;
						} else {
						}
						if((MasterArray[m])[t] == newBusRoutesStart[s]){
							thestart="yes";
							thestartnumb=s;
						} else {
						}
						if((theend == "yes") && (thestart == "yes")){
							temparray=new Array((MasterArray[m])[0],newBusRoutesStart[thestartnumb],newBusRoutesEnd[theendnumb]);
				
							TransferArray[arraycount]=temparray;
							arraycount=arraycount+1;
							theend="no";
							thestart="no";
							break
						} else {
						}
					}
				}
			}
		}



	} else {

	

	}


} ///END X > 0




//write display window with route information




	var numbnoroutes=0;
	var feettomiles;
	if(newbuffdist == 1320) {
		feettomiles="1/4";
	} else if(newbuffdist == 660) {
		feettomiles="1/8";
	} else {
		feettomiles="1/2";
	}

	///Zoom to ADDRESSES ENVELOPE

	var starthighx;
	var startlowx;
	var starthighy;
	var startlowy;
	var endhighx;
	var endlowx;
	var endhighy;
	var endlowy;


	starthighx = Number(theStartX) + (newbuffdist * 2);
	startlowx = Number(theStartX) - (newbuffdist * 2);
	
	endhighx = Number(theEndX) + (newbuffdist * 2);
	endlowx = Number(theEndX) - (newbuffdist * 2);
	
	
	starthighy = Number(theStartY) + (newbuffdist * 2);
	startlowy = Number(theStartY) - (newbuffdist * 2);
	
	endhighy = Number(theEndY) + (newbuffdist * 2);
	endlowy = Number(theEndY) - (newbuffdist * 2);
	


	parent.ResultsFrame.document.open();



	parent.ResultsFrame.document.write("<html><head><style fprolloverstyle>A:hover {color: #0000ff; font-weight: bold; text-decoration:underline overline; text-transform: none;}</style></head><BODY link='white' vlink='white' alink='white' BGCOLOR='#117799' TEXT='white'>");
	parent.ResultsFrame.document.write("<table width=230><tr><td align=center colspan='3' height='40'><font size='4' face='times'><b>BUS ROUTES WITHIN<br>"+feettomiles+" MILE OF:</b></font></td></tr>");

	parent.ResultsFrame.document.write("<tr><td align=center valign=center colspan='3' height='19'><b>_________________________</b></td></tr>");

	parent.ResultsFrame.document.write("<tr><td align=center colspan='3' height='19'><font size='3' face='times'><a href='javascript:parent.MapFrame.zoomToEnvelope("+startlowx+","+startlowy+","+starthighx+","+starthighy+")'>"+firstgeocodename+"</a></font></td></tr>");
	

	parent.ResultsFrame.document.write("<tr><td></td></tr>");



if (newBusRoutesStart[0] == undefined){
	
	parent.ResultsFrame.document.write("<tr><td align=center valign=center colspan='3' height='19'><font size='2' face='times'>NO ROUTES</font></td></tr>");
		
} else {  //we do have routes


	parent.ResultsFrame.document.write("<tr><td align=center colspan='3' height='19'><font size='3' face='times'><b>Nearest Bus Route(s):</b></font></td></tr>");
	parent.ResultsFrame.document.write("<tr><td align=center colspan='3' height='19'><font size='3' face='times'>(Within "+theStartDistance+" feet)</font></td></tr>");
			


for (var thename=0; thename<(NearestStart.length); thename++){
		var transdate;
		var Routename;
		
		var Routeshp= parseInt((NearestStart[thename]),10);  //This is okay
			if(isNaN(Routeshp)){
			Routeshp=NearestStart[thename];
			}
		
		Routeshape = "'Route "+Routeshp+"'";

		
		if(NearestStart[thename] =="SS"){
		
		var Routename = "Shoppersspecialroute"}
		else if(NearestStart[thename] == "WS"){
		
		var Routename = "Wcendwellshuttle"}
		else if((NearestStart[thename] == "CP") || (NearestStart[thename] == "K") || (NearestStart[thename] == "M")){
		
		var Routename = "CommuterRoute"}
		else if(NearestStart[thename] == "ES"){
		
		var Routename = "Wcendwellshuttle"}
		else if((NearestStart[thename] == "17") || (NearestStart[thename] == "25")){
		
		var Routename = "Route1725"}
		else{
		
		var Routename = "Route"+NearestStart[thename]
		}

				
		parent.ResultsFrame.document.write("<tr><td align=center width='100' height='19'><font size='2' face='times'><b><a href='http://www.gobroomecounty.com/files/transit/pdfs/FallSchedule/"+Routename+".pdf' target='_blank'>Route #&nbsp;"+NearestStart[thename]+"</a></b></font></td>");
		
		parent.ResultsFrame.document.write('<td align=center width="40" height="19"><font size="2" face="times"><b><a href="javascript:parent.MapFrame.TurnOnLayer('+Routeshape+');">Map It</a></b></font></td>');
		parent.ResultsFrame.document.write('<td align=center width="40" height="19"><font size="2" face="times"><b><a href="javascript:parent.MapFrame.TurnOffLayer('+Routeshape+');">Hide It</a></b></font></td>');


}


////HERE IS THE PROBLEM
		
if(BusRoutesStart[0] == undefined) {



} else { // we have additional routes


	parent.ResultsFrame.document.write("<tr><td align=center colspan='3' height='19'><font size='3' face='times'><b>Other Bus Route(s):</b></font></td></tr>");
	
	for (var thename=0; thename<(BusRoutesStart.length); thename++){
		var transdate;
		var Routename;
		
		var Routeshp= parseInt((BusRoutesStart[thename]),10);  //This is okay
			if(isNaN(Routeshp)){
			Routeshp=BusRoutesStart[thename];
			}
		
		Routeshape = "'Route "+Routeshp+"'";

		
		if(BusRoutesStart[thename] =="SS"){
		
		var Routename = "Shoppersspecialroute"}
		else if(BusRoutesStart[thename] == "WS"){
		
		var Routename = "Wcendwellshuttle"}
		else if((BusRoutesStart[thename] == "CP") || (BusRoutesStart[thename] == "K") || (BusRoutesStart[thename] == "M")){
		
		var Routename = "CommuterRoute"}
		else if(BusRoutesStart[thename] == "ES"){
		
		var Routename = "Wcendwellshuttle"}
		else if((BusRoutesStart[thename] == "17") || (BusRoutesStart[thename] == "25")){
		
		var Routename = "Route1725"}
		else{
		
		var Routename = "Route"+BusRoutesStart[thename]
		}

				
		parent.ResultsFrame.document.write("<tr><td align=center width='100' height='19'><font size='2' face='times'><b><a href='http://www.gobroomecounty.com/files/transit/pdfs/FallSchedule/"+Routename+".pdf' target='_blank'>Route #&nbsp;"+BusRoutesStart[thename]+"</a></b></font></td>");
		
		parent.ResultsFrame.document.write('<td align=center width="40" height="19"><font size="2" face="times"><b><a href="javascript:parent.MapFrame.TurnOnLayer('+Routeshape+');">Map It</a></b></font></td>');
		parent.ResultsFrame.document.write('<td align=center width="40" height="19"><font size="2" face="times"><b><a href="javascript:parent.MapFrame.TurnOffLayer('+Routeshape+');">Hide It</a></b></font></td>');


}
} //END additional routes




} //????????????????????????????????????



if(theEndX > 0){

	
	parent.ResultsFrame.document.write("<tr><td height='5'></td></tr>");
	parent.ResultsFrame.document.write("<tr><td align=center colspan='3' height='19'><font size='4' face='times'><b>AND</b></font></td></tr>");

	//parent.ResultsFrame.document.write("<tr><td height='5'></td></tr>");
	parent.ResultsFrame.document.write("<tr><td align=center valign=center colspan='3' height='19'><b>_________________________</b></td></tr>");


	parent.ResultsFrame.document.write("<tr><td align=center colspan='3' height='19'><font size='3' face='times'><a href='javascript:parent.MapFrame.zoomToEnvelope("+endlowx+","+endlowy+","+endhighx+","+endhighy+")'>"+secondgeocodename+"</a></font></td></tr>");
	

	parent.ResultsFrame.document.write("<tr><td></td></tr>");


	if (newBusRoutesEnd[0] == undefined){
	
	parent.ResultsFrame.document.write("<tr><td align=center valign=center colspan='3' height='19'><font size='2' face='times'>NO ROUTES</font></td></tr>");
		
} else {  //we do have routes


	parent.ResultsFrame.document.write("<tr><td align=center colspan='3' height='19'><font size='3' face='times'><b>Nearest Bus Route(s):</b></font></td></tr>");
	parent.ResultsFrame.document.write("<tr><td align=center colspan='3' height='19'><font size='3' face='times'>(Within "+theEndDistance+" feet)</font></td></tr>");
			

	for (var thename=0; thename<(NearestEnd.length); thename++){
		var transdate;
		var Routename;
		
		var Routeshp= parseInt((NearestEnd[thename]),10);  //This is okay
			if(isNaN(Routeshp)){
			Routeshp=NearestEnd[thename];
			}
		
		Routeshape = "'Route "+Routeshp+"'";

		
		if(NearestEnd[thename] =="SS"){
		
		var Routename = "Shoppersspecialroute"}
		else if(NearestEnd[thename] == "WS"){
		
		var Routename = "Wcendwellshuttle"}
		else if((NearestEnd[thename] == "CP") || (NearestEnd[thename] == "K") || (NearestEnd[thename] == "M")){
		
		var Routename = "CommuterRoute"}
		else if(NearestEnd[thename] == "ES"){
		
		var Routename = "Wcendwellshuttle"}
		else if((NearestEnd[thename] == "17") || (NearestEnd[thename] == "25")){
		
		var Routename = "Route1725"}
		else{
		
		var Routename = "Route"+NearestEnd[thename]
		}
	
		parent.ResultsFrame.document.write("<tr><td align=center width='100' height='19'><font size='2' face='times'><b><a href='http://www.gobroomecounty.com/files/transit/pdfs/FallSchedule/"+Routename+".pdf' target='_blank'>Route #&nbsp;"+NearestEnd[thename]+"</a></b></font></td>");
		
		parent.ResultsFrame.document.write('<td align=center width="40" height="19"><font size="2" face="times"><b><a href="javascript:parent.MapFrame.TurnOnLayer('+Routeshape+');">Map It</a></b></font></td>');
		parent.ResultsFrame.document.write('<td align=center width="40" height="19"><font size="2" face="times"><b><a href="javascript:parent.MapFrame.TurnOffLayer('+Routeshape+');">Hide It</a></b></font></td>');


}
		
		if(BusRoutesEnd[0] == undefined) {


		} else { // we have additional routes


		parent.ResultsFrame.document.write("<tr><td align=center colspan='3' height='19'><font size='3' face='times'><b>Other Bus Route(s):</b></font></td></tr>");
	
		for (var thename=0; thename<(BusRoutesEnd.length); thename++){
		var transdate;
		var Routename;
		
		var Routeshp= parseInt((BusRoutesEnd[thename]),10);  //This is okay
			if(isNaN(Routeshp)){
			Routeshp=BusRoutesEnd[thename];
			}
		
		Routeshape = "'Route "+Routeshp+"'";

		
		if(BusRoutesEnd[thename] =="SS"){
		
		var Routename = "Shoppersspecialroute"}
		else if(BusRoutesEnd[thename] == "WS"){
		
		var Routename = "Wcendwellshuttle"}
		else if((BusRoutesEnd[thename] == "CP") || (BusRoutesEnd[thename] == "M") || (BusRoutesEnd[thename] == "K")){
		
		var Routename = "CommuterRoute"}
		else if(BusRoutesEnd[thename] == "ES"){
		
		var Routename = "Wcendwellshuttle"}
		else if((BusRoutesEnd[thename] == "17") || (BusRoutesEnd[thename] == "25")){
		
		var Routename = "Route1725"}
		else{
		
		var Routename = "Route"+BusRoutesEnd[thename]
		}

				
		parent.ResultsFrame.document.write("<tr><td align=center width='100' height='19'><font size='2' face='times'><b><a href='http://www.gobroomecounty.com/files/transit/pdfs/FallSchedule/"+Routename+".pdf' target='_blank'>Route #&nbsp;"+BusRoutesEnd[thename]+"</a></b></font></td>");
		
		parent.ResultsFrame.document.write('<td align=center width="40" height="19"><font size="2" face="times"><b><a href="javascript:parent.MapFrame.TurnOnLayer('+Routeshape+');">Map It</a></b></font></td>');
		parent.ResultsFrame.document.write('<td align=center width="40" height="19"><font size="2" face="times"><b><a href="javascript:parent.MapFrame.TurnOffLayer('+Routeshape+');">Hide It</a></b></font></td>');


}
	} //END additional routes



} //END ENDX >0

}



	
	parent.ResultsFrame.document.write("<tr><td></td></tr>");
	
	parent.ResultsFrame.document.write("<tr><td align=center valign=center colspan='3' height='19'><b>_________________________</b></td></tr>");

if (BusRoutesCommon[0] == undefined){
	if(theEndX == 0) {
	} else {
		parent.ResultsFrame.document.write("<tr><td align=center valign=center colspan='3' height='19'><font size='3' face='times'><b>NO DIRECT ROUTES</b></font></td></tr>");
	}
} else {	
	
	parent.ResultsFrame.document.write("<tr><td align=center colspan='3' height='19'><font size='3' face='times'><b>DIRECT ROUTES</b></font></td></tr>");
}		
	
	parent.ResultsFrame.document.write("<tr><td></td></tr>");
if (BusRoutesCommon[0] == undefined){
		if (TransferArray[0] == undefined){
		if(theEndX == 0) {
		} else {	
		parent.ResultsFrame.document.write("<tr><td align=center valign=center colspan='3' height='19'><font size='3' face='times'><b>NO DIRECT TRANSFERS</b></font></td></tr>");
		}
		} else {
		//alert("we will add routes later");
	/////////////////////////////////////////////////////////TRANSFER SECTION
	
	parent.ResultsFrame.document.write("<tr><td align=center valign=center colspan='3' height='19'><font size='4' face='times'><b>TRANSFER OPTIONS</b></font></td></tr>");
	parent.ResultsFrame.document.write("<tr><td align=center valign=center colspan='3' height='19'><b>_________________________</b></td></tr>");
	parent.ResultsFrame.document.write("<tr><td align=center width='100' height='19'><font size='3' face='times'><b>Transfer<br>Location</b></font></td>");
	parent.ResultsFrame.document.write("<td align=center width='40' height='19'><font size='3' face='times'><b>From<br>Route</b></font></td>");
	parent.ResultsFrame.document.write("<td align=center width='60' height='19'><font size='3' face='times'><b>To<br>Route</b></font></td></tr>");
	parent.ResultsFrame.document.write("<tr><td align=center valign=center colspan='3' height='10'><font size='1' face='times'>_________________________<br></font></td></tr>");
				

	for (var tr=0; tr<TransferArray.length; tr++){
	var transdate;
	var Routename;

		for(var r=0; r<(TransferArray[tr]).length; r++) {

			//var Routeshape= (TransferArray[tr])[r];
			var Routeshp= parseInt( ((TransferArray[tr])[r]),10);  //This is okay
				if(isNaN(Routeshp)){
				Routeshp=(TransferArray[tr])[r];
				}
			Routeshape = "'Route "+Routeshp+"'";

	
			if((TransferArray[tr])[r] == "03"){
		
			var Routename = "Route"+(TransferArray[tr])[r]}
			else if((TransferArray[tr])[r] =="SS"){
			//var Routeshape=99;
		
			var Routename = "Shoppersspecialroute"}
			else if((TransferArray[tr])[r] =="CP"){
			//var Routeshape=99;
		
			var Routename = "Route12"}
			else if((TransferArray[tr])[r] == "WS"){
			//var Routeshape=98;
		
			var Routename = "Wcendwellshuttle"}
			else if((TransferArray[tr])[r] == "ES"){
			//var Routeshape=97;
		
			var Routename = "Wcendwellshuttle"}
			else if( ( (TransferArray[tr])[r] == "17") || ((TransferArray[tr])[r] == "25") ){
		
			var Routename = "Route1725"}
			else{
		
			var Routename = "Route"+(TransferArray[tr])[r];
			}

		if(r==0){
			parent.ResultsFrame.document.write("<tr><td align=center width='100' height='19'><font size='2' face='times'><b>"+(TransferArray[tr])[r]+"</b></font></td>");
		} else if (r==1){

		parent.ResultsFrame.document.write('<td align=center width="40" height="19"><font size="2" face="times"><b><a href="javascript:parent.MapFrame.TurnOnLayer('+Routeshape+');"># '+(TransferArray[tr])[r]+'</a></b></font></td>');
		}else if(r==2){

		parent.ResultsFrame.document.write('<td align=center width="60" height="19"><font size="2" face="times"><b><a href="javascript:parent.MapFrame.TurnOnLayer('+Routeshape+');"># '+(TransferArray[tr])[r]+'</a></b></font></td></tr>');
		} else {
		}

		} //END FOR R
	} //END FOR TR



} ////TRANSFER ARRAY not undefined


} else { //Common Routes NOT undefined
	
	for (var thename=0; thename<(BusRoutesCommon.length); thename++){
		var transdate;
		var Routename;
		
		var Routeshp= parseInt((BusRoutesCommon[thename]),10);  //This is okay
			if(isNaN(Routeshp)){
			Routeshp=BusRoutesCommon[thename];
			}		

		Routeshape = "'Route "+Routeshp+"'";

		
		if(BusRoutesCommon[thename] =="SS"){
		
		var Routename = "Shoppersspecialroute"}
		else if(BusRoutesCommon[thename] == "WS"){
		
		var Routename = "Wcendwellshuttle"}
		else if((BusRoutesCommon[thename] == "CP") || (BusRoutesCommon[thename] == "K") || (BusRoutesCommon[thename] == "M")){
		
		var Routename = "CommuterRoute"}
		else if(BusRoutesCommon[thename] == "ES"){
		
		var Routename = "Wcendwellshuttle"}
		else if((BusRoutesCommon[thename] == "17") || (BusRoutesCommon[thename] == "25")){
		
		var Routename = "Route1725"}
		else{
		
		var Routename = "Route"+BusRoutesCommon[thename]
		}

				
		parent.ResultsFrame.document.write("<tr><td align=center width='100' height='19'><font size='2' face='times'><b><a href='http://www.gobroomecounty.com/files/transit/pdfs/FallSchedule/"+Routename+".pdf' target='_blank'>Route #&nbsp;"+BusRoutesCommon[thename]+"</a></b></font></td>");
		
		parent.ResultsFrame.document.write('<td align=center width="40" height="19"><font size="2" face="times"><b><a href="javascript:parent.MapFrame.TurnOnLayer('+Routeshape+');">Map It</a></b></font></td>');
		parent.ResultsFrame.document.write('<td align=center width="40" height="19"><font size="2" face="times"><b><a href="javascript:parent.MapFrame.TurnOffLayer('+Routeshape+');">Hide It</a></b></font></td>');


}
}//End COMMOn Routes

	

	parent.ResultsFrame.document.write("</table></body></html>");
	parent.ResultsFrame.document.close();




///Zoom to ADDRESSES

	var highx;
	var lowx;
	var highy;
	var lowy;

	if(theEndX == 0) {

		highx = Number(theStartX) + 5000;
		lowx = Number(theStartX) - 5000;
		highy = Number(theStartY) + 5000;
		lowy = Number(theStartY) - 5000;
	} else {

	if(Number(theStartX) > Number(theEndX)) {
		highx = Number(theStartX) + 5000;
		lowx = Number(theEndX) - 5000;
	} else {
		highx = Number(theEndX) + 5000;
		lowx = Number(theStartX) - 5000;
	}

	if(Number(theStartY) > Number(theEndY)) {
		highy = Number(theStartY) + 5000;
		lowy = Number(theEndY) - 5000;
	} else {
		highy = Number(theEndY) + 5000;
		lowy = Number(theStartY) - 5000;
	}

	}
	//sendMapXML();
	//selectCount=feaCount;

	zoomToEnvelope(lowx,lowy,highx,highy);
	
	hideRetrieveData();
}
return false;


//} //feaCount == 0



} //FUNCTION
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

// parse XML response for selected features
function displayAttributeData111(theReply) {

alert("opening data");

	//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 tempString = "";
	var fCount = featureCount;
	//alert("displayAttributeData()[featurecount=" + featureCount + "]");
	selectCount = 0;
	var tempString="";
	var Win1 = parent.TextFrame;
	var theFrame = "parent.MapFrame";
	if (featureCount > 0) {
		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><meta http-equiv="Content-Type" content="text/html; charset=' + charSet + '"><head><title>' + titleList[7] + '</title></head>');
			Win1.document.writeln('<body bgcolor="' + textFrameBackColor + '" text="Black" link="Blue" vlink="Gray" LEFTMARGIN=0 onload="window.focus()">');
			Win1.document.writeln('<center>');
			Win1.document.writeln('<FONT FACE="Arial" SIZE="-1"><b>' + LayerName[ActiveLayerIndex] + '</b></FONT>');
			Win1.document.writeln('<table border="1" cellspacing="0" cellpadding="2" nowrap bgcolor="' + tableBackColor + '">');
		}
		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);
			selectedData = 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);
				
				var idFieldNum = -1;
				var shapeFieldNum = -1;
				if (hideIDFieldData) {
					// hide ID column header
					for (var f=0;f<fName1.length;f++) {
						if (fName1[f]==LayerIDField[ActiveLayerIndex]) idFieldNum = f;
					}
				}
				if (hideShapeFieldData) {
					// hide Shape column header
					for (var f=0;f<fName1.length;f++) {
						if (fName1[f]==LayerShapeField[ActiveLayerIndex]) shapeFieldNum = f;
					}
				}
				
				if (selectCount==0) {
					Win1.document.write('<tr><th><FONT FACE="Arial" SIZE="-2">' + msgList[86] + '</FONT></a></th>');
					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) {
								Win1.document.write('<th><FONT FACE="Arial" SIZE="-2">' + AliasFieldAlias[f2] + '</FONT></a></th>');
							} else {
								Win1.document.write('<th><FONT FACE="Arial" SIZE="-2">' + fName1[f] + '</FONT></a></th>');
							}
						}
					}
					Win1.document.writeln('</tr>');
				}
				Win1.document.write('<tr><td>');
				if (toolMode!=4) Win1.document.write('<a href="javascript:' + theFrame + '.showHighlight(' + selectCount + ')">');
				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 ((f!=idFieldNum) && (f!=shapeFieldNum)) {
						Win1.document.write('<TD>');
						var isHyper=false;
						if (showHyper) {
							for (var s1=0;s1<hyperLinkFields.length;s1++) {
								if (hyperLinkFields[s1]==fName1[f]) {
									var theLinkURL = currentHyperLinkPrefix + fValue1[f] + currentHyperLinkSuffix;
									Win1.document.write('<a href="' + theLinkURL + '" 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") {
							//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 d = theDateObj.toUTCString();
								var theDate = d.replace(/GMT|UTC/,"");
							}
							Win1.document.write('<FONT FACE="Arial" SIZE="-2">' + theDate + '</FONT>');
							theDate=null;
						} else {
							// put html entity for spaces so display is correct - browsers trim extra spaces
							tempString = fValue1[f].replace(/ /g, "&nbsp;");
							Win1.document.write('<FONT FACE="Arial" SIZE="-2">' + tempString + '</FONT>');
							//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>');
				fName1 = null;
				fValue1 = null;
				
			}
			selectCount += 1;
					
		}

		if (showSelectedData) {
			

			Win1.document.writeln('</table><FONT FACE="Arial" SIZE="-2">');
			if (toolMode!=25) {
				if (queryStartRecord>1) {
					var prevRecord = queryStartRecord - maxFeaturesReturned;
					if (prevRecord<1) prevRecord=1;
					Win1.document.write('<a href="javascript:' + theFrame + '.getMoreData(' + prevRecord + ')">' + msgList[61] + maxFeaturesReturned + msgList[62] + '</a>&nbsp;&nbsp;&nbsp;');
				}
				if (stillMore) {
					var nextRecord=featureCount + queryStartRecord;
					Win1.document.writeln('<a href="javascript:' + theFrame + '.getMoreData(' + nextRecord + ')">' + msgList[63] + '</a>');
				}
			}
			if ((toolMode!=4) && (toolMode!=25) && (selectCount>1)) {
				Win1.document.writeln('&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<b><a href="javascript:' + theFrame + '.zoomToReturnedRecords()">Zoom to these records</A></b>');
			}

			Win1.document.writeln('</font></center></body></html>');
			Win1.document.close();
		}
		//alert("toolMode:" + toolMode);
		
		if ((queryStartRecord==1) && (toolMode!=4) && (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();
				eLeft = selectLeft[0] - mWMargin;
				eRight = selectRight[0] + mWMargin;
				eTop = selectTop[0] + mHMargin;
				eBottom = selectBottom[0] - mHMargin;
			}

alert("sending map xml");
			sendMapXML();
		}
		
		
			
	} else {
		//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><meta http-equiv="Content-Type" content="text/html; charset=' + charSet + '"><head>');
		Win1.document.writeln('	<title>' + titleList[8] + '</title>');
		Win1.document.writeln('</head>');
		Win1.document.writeln('<body BGCOLOR="White" TEXT="Black" LEFTMARGIN=0 TOPMARGIN=0>');
		Win1.document.writeln('<FONT FACE="Arial"><B>' + LayerName[ActiveLayerIndex] +'</B></font><FONT FACE="Arial" size="-2">');
		Win1.document.writeln('<br>' + msgList[64]);
		if (debugOn>0) {
			Win1.document.writeln('<p>' + msgList[65] + '<br>');
			Win1.document.writeln(untag(theReply));
		} else {
			if (theError!="") {
				Win1.document.writeln('<p>' + msgList[66] + '<br>');
				Win1.document.writeln(theError);
			}
		}
		Win1.document.writeln('</FONT>');
		Win1.document.writeln('</body></html>');
		Win1.document.close();
	}
	if (toolMode==4) selectCount=0;
	Win1=null;
	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);
		//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 drill functions
function displayAttributeDataforDrill(theReplyArray) {
   showRetrieveData();
	var theFrame = "parent.MapFrame";
	if ((useExternalWindow) || (!useTextFrame)) {
			var Win1 = window.open("","QueryWindow","width=575,height=120,scrollbars=yes,resizable=yes");
			theFrame = "opener";
			if (parent.MapFrame!=null) theFrame = "opener.parent.MapFrame";
	} else {
			var Win1 = parent.TextFrame;
			Win1.document.open();
	}
	Win1.document.open();
	Win1.document.writeln('<html><head><title>Query/Selection Results</title></head>');
	Win1.document.writeln('<body bgcolor="' + textFrameBackColor + '" text="Black" link="Blue" vlink="Gray" LEFTMARGIN=0 onload="window.focus()"><center>');
	var lyrCount = 0;
	 for (b=0;b<theReplyArray.length;b++) {
	 	if (theReplyArray[b]!="") {
		    //alert(theReply);
			theReply = theReplyArray[b];
			setLayerFields(b);
			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 fCount = featureCount;
			//alert("displayAttributeData()[featurecount=" + featureCount + "]");
			selectCount = 0;
			var tempString="";
			if (featureCount > 0) {
				//alert(featureCount);
				newSelectCount += 1;
				endpos = 1;
				Win1.document.writeln('<center><br><FONT FACE="Arial" SIZE="-1"><b>' + LayerName[b] + '</b><br>');
				Win1.document.writeln('<table border="1" size="95%" cellspacing="0" cellpadding="2" nowrap bgcolor="' + tableBackColor + '">');						
				for (var i=0;i<fCount;i++) {
		
					inData = parseRecordString(theReply, endpos);
					endpos = xmlEndPos;
					//selectedData = clearLeadingSpace(inData);
					selectedData = 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[b]) showHyper=true;
							}
						}
							
						var fName1 = getFieldNames(selectedData);
						var fValue1 = getFieldValues(selectedData);
						//selectPoints[selectCount] = getIdValue(fName1, fValue1);
						var idFieldNum = -1;
						var shapeFieldNum = -1;
						if (hideIDFieldData) {
							// hide ID column header
							for (var f=0;f<fName1.length;f++) {
								if (fName1[f]==LayerIDField[ActiveLayerIndex]) idFieldNum = f;
							}
						}
						if (hideShapeFieldData) {
							// hide Shape column header
							for (var f=0;f<fName1.length;f++) {
								if (fName1[f]==LayerShapeField[ActiveLayerIndex]) shapeFieldNum = f;
							}
						}
						if (selectCount==0) {
							Win1.document.write('<tr><th><FONT FACE="Arial" SIZE="-2">Rec</FONT></a></th>');
							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) {
										Win1.document.write('<th><FONT FACE="Arial" SIZE="-2">' + AliasFieldAlias[f2] + '</FONT></a></th>');
									} else {
										Win1.document.write('<th><FONT FACE="Arial" SIZE="-2">' + fName1[f] + '</FONT></a></th>');
									}
								}
							}
							Win1.document.writeln('</tr>');
						}
						Win1.document.write('<tr><td>');
						Win1.document.write('<FONT FACE="Arial" SIZE="-2">' + (selectCount+queryStartRecord) + '</FONT>');
						Win1.document.writeln('</td>');
						for (var f=0;f<fName1.length;f++) {	
							if ((f!=idFieldNum) && (f!=shapeFieldNum)) {
								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") {
									//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 d = theDateObj.toUTCString();
										var theDate = d.replace(/GMT|UTC/,"");
									}
									Win1.document.write('<FONT FACE="Arial" SIZE="-2">' + theDate + '</FONT>');
									theDate=null;
								} 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>');
						fName1 = null;
						fValue1 = null;
					}
					selectCount += 1;
					//					
				}
				Win1.document.writeln('</table></center>');
				lyrCount++

			} else {
				if (listAllLayersInIDAll) {
		        	Win1.document.writeln('<center><FONT FACE="Arial" SIZE="-1"><b>' + LayerName[b] + '</b>');
					Win1.document.writeln('<br>' + msgList[64] + '<br><br></font></center>');
		     	}

			}
	  	}
	  }//end for 
	  
	  if (lyrCount==0) {
        	Win1.document.writeln('<center><FONT FACE="Arial" SIZE="-1"><b>' + msgList[112] + '</b></font></center>');
	  }
 
    Win1.document.writeln('</body></html>');
    Win1.document.close();
    Win1=null;
    hideRetrieveData();
} //end function


// 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('<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();
}

