var accountArray = new Array();
var newminx = new Array();
var newminy = new Array();
var newmaxx = new Array();
var newmaxy = new Array();
var myCount = 0;
var myWin = parent.TextFrame;
var numAcct = 0;
var fID = 0;
var newCount = 0;
var accountCounter = 0;
var themeCounter = 0;
var myleft = 0;
var mybottom = 0;
var myright = 0;
var mytop = 0;
var fEast;
var fWest;
var fSouth;
var fNorth;
var newcount = 0;
var myAccount = new Array();
var myDataString = "";

/*create accountArray from selection box
  called when aimsSelect.js stopSelectBox function
  sendToServer with xmlMode = 1005
  This function handles the XML response.
*/

function getAccounts(theReply) {
	//alert("getAccounts");
	//alert("theReply /n" + theReply);
	var featureCount = justGetFeatureCount(theReply);
	var fCount = featureCount;                             //number of records selected
	fID = fCount;
	if (fCount > 0) {
		var endpos = 1;
		for (var i=0;i<fCount;i++) {
			var inData = parseRecordString(theReply, endpos);
			endpos = xmlEndPos;
			var selectedData = clearLeadingSpace(inData);
			var fValue1 = getFieldValues(selectedData);
			accountArray[i] = "'" + fValue1[0] + "'";
		}
		fValue1 = null;
	}   
	sendQueryStringSelect(accountArray);
 }

//Sends request using accountArray as query

function sendQueryStringSelect(newString) {
	//alert("sendQueryStringSelect");
	selectionMode=1;
	selectData.length=1;
	LayerFields.length=1;
	LayerFieldType.length=1;
	LayerFieldCount=0;
	showBuffer=false;
	showRetrieveData();
	var theString = writeQueryXMLSelect(newString);
	accountArray = null;
	accountArray = new Array();
	sendToServer(imsQueryURL,theString,1006);
}

// write out XML request to get envelopes for each account in accountArray

function writeQueryXMLSelect(queryString) {
	//alert("writeQueryXMLSelect");
	if (swapSelectFields) {
		selectFields=selFieldList[ActiveLayerIndex];
	}
	var theString = '<ARCXML VERSION="1.0.1">\n<REQUEST>\n<GET_FEATURES outputmode="xml" geometry="false" envelope="true"';
	theString += ' compact="true" featurelimit="' + maxFeaturesReturned + '" beginrecord="' + queryStartRecord + '">\n';
	theString += '<LAYER id="' + ActiveLayer + '" />';
	if (useLimitExtent) {
		// keep this within the limitExtent
		theString += '<SPATIALQUERY subfields="' + selectFields + '" where=ACCOUNT IN ("' + accountArray + '")>';
		theString += '<SPATIALFILTER relation="area_intersection">\n';
		theString += '<ENVELOPE maxx="' + limitRight + '" maxy="' + limitTop + '" minx="' + limitLeft + '" miny="' + limitBottom + '" />\n';
		theString += '</SPATIALFILTER>\n';
		theString += '</SPATIALQUERY>\n';
	} else {
		theString += '<SPATIALQUERY subfields="' + selectFields + '" where="ACCOUNT IN (' + queryString + ')"/>';
	}
	theString += '</GET_FEATURES>';
	theString += '</REQUEST>';
	theString += '</ARCXML>';
	selectLayer=ActiveLayer;
	selectType=ActiveLayerType;
	selectCount=0;
	hightlightedOne="";
	selectPoints.length=1;
	selectLeft.length=1;
	selectRight.length=1;
	selectTop.length=1;
	selectBottom.length=1;
	//alert("theString /n" + theString);
	return theString;
}

//  Process XML Response (XMLMode = 1006) to get envelopes for each account

function getAccountEnv(theReply) {
	//alert("getAccountEnv");
	myWin.document.open();
	myWin.document.writeln('<html><head><title>Selection Results</title></head>');
	myWin.document.writeln('<body bgcolor="' + textFrameBackColor + '" text="Black" link="Blue" vlink="Gray" LEFTMARGIN=0 onload="window.focus()"><center>');
	myWin.document.writeln('<b><FONT FACE="ARIAL" COLOR="NAVY">Selection Results</FONT></b><br><br>');
	myWin.document.writeln('<table border="1" size="95%" cellspacing="0" cellpadding="3" nowrap bgcolor="' + tableBackColor + '">');
	var featureCount = justGetFeatureCount(theReply);
	var fCount = featureCount;                                 //number of records selected
	//alert(theReply);
	//alert(fCount);
	if (fCount > 0) {
		for (myCount=0;myCount<fCount;myCount++) {
			endpos = 1;
			inData = parseRecordString(theReply, endpos);
			endpos = xmlEndPos;
			selectedData = clearLeadingSpace(inData);
			var newstring = getInsideString(theReply,"<FEATURE>","</FEATURE>",1,0,true);
			theReply = swapStuff2(theReply,"<FEATURE>","<F>");
			myAccount[myCount] = getInsideString(newstring,"ACCOUNT="," LAYERS.GIS.ACCOUNTS.SE_ROW_ID=",1,0,true);
			myAccount[myCount] = swapStuff(myAccount[myCount],"\"","");
			newminx[myCount] = getInsideString(newstring,"minx="," miny=",1,0,true);
			newminx[myCount] = swapStuff(newminx[myCount],"\"","");
			newminy[myCount] = getInsideString(newstring,"miny="," maxx=",1,0,true);
			newminy[myCount] = swapStuff(newminy[myCount],"\"","");
			newmaxx[myCount] = getInsideString(newstring,"maxx="," maxy=",1,0,true);
			newmaxx[myCount] = swapStuff(newmaxx[myCount],"\"","");
			newmaxy[myCount] = getInsideString(newstring,"maxy=","/>",1,0,true);
			newmaxy[myCount] = swapStuff(newmaxy[myCount],"\"","");
			var dist = newmaxx[myCount] - newminx[myCount];
			dist = dist / 2;
			var nminx = parseInt(newminx[myCount]);
			var nminy = parseInt(newminy[myCount]);
			newminx[myCount] = ((nminx + dist) - 1);
			newmaxx[myCount] = ((nminx + dist) + 1);
			dist = newmaxy[myCount] - newminy[myCount];
			dist = dist / 2;
			newminy[myCount] = ((nminy + dist) - 1);
			newmaxy[myCount] = ((nminy + dist) + 1);
		}
		themeCounter2 = LayerID.length -1;
		myDrill();
	}
}

function myDrill() {
	//alert("myDrill");
	if (accountCounter < fID) {
		if (themeCounter < LayerID.length) {
			var myDrillString = writeGetFeaturesDrillSelect(newminx[accountCounter],newminy[accountCounter],newmaxx[accountCounter],newmaxy[accountCounter],themeCounter);
			themeCounter++
			sendToServer(imsQueryURL,myDrillString,1007);
		} else {
				themeCounter = 0;
				themeCounter2 = LayerID.length -1;
		} 
	} else {
		//alert("You are here");
		accountCounter = 0;
		selectCount=fID;
		fID = 0;
		myWin.document.writeln('</table></center></body></html>');
		myAccount = null;
		myAccount = new Array();
		newminx = null;
		newminx = new Array();
		newminy = null;
		newminy = new Array();
		newmaxx = null;
		newmaxx = new Array();
		newmaxy = null;
		newmaxy = new Array();
		aimsSelectPresent=true;
		showSelectedFeatures=true;
		selectionMode=2;
	    //myWin.document.close();
	    //myWin=null;
	    //parent.ExportFrame.document.forms[0].MyText.value=myDataString;
	    //parent.ExportFrame.document.forms[0].submit();
		hideRetrieveData();
		//sendMapXML();
	} //end if account
} //end function

function myDrillResponse(resReply) {
	//alert("myDrillResponse");
	displayAttributeDataForDrillSelect(resReply);
	if (themeCounter == LayerID.length) {
		accountCounter++;
		themeCounter = 0;
		themeCounter2 = LayerID.length -1;
	}
	myDrill();
}

// write out XML request to select features
function writeGetFeaturesDrillSelect(west1,south1,east1,north1,myID) {
	//alert("writeGetFeaturesDrillSelect");
	if (swapSelectFields) {
		selectFields=selFieldList[myID];
	}
	var theEnvelope = 'maxy="' + north1 + '" maxx="' + east1 + '" miny="' + south1 + '" minx="' + west1 + '"';
	var reqDrillString = writeEnvelopeXMLSelect(myID,LayerType[myID],selectFields,maxFeaturesReturned,queryStartRecord,theEnvelope,useLimitExtent);
	selectLayer=ActiveLayer;
	selectType=ActiveLayerType;
	selectCount=0;
	hightlightedOne="";
	selectPoints.length=1;
	selectLeft.length=1;
	selectRight.length=1;
	selectTop.length=1;
	selectBottom.length=1;
	return reqDrillString;
}

// generic envelope select xml write routine
function writeEnvelopeXMLSelect(theLayer,theLayerType,theFields,maxReturned,startRec,theEnvelope,hasLimit) {
	//alert("writeEnvelopeXMLSelect");
    var selString = '<ARCXML VERSION="1.0.1">\n<REQUEST>\n<GET_FEATURES outputmode="xml" envelope="true" geometry="false"';
	selString += ' compact="true" featurelimit="' + maxReturned + '" beginrecord="' + startRec + '">\n';
	selString += '<LAYER id="' + theLayer + '" />';
	selString += '<SPATIALQUERY subfields="' + theFields + '">';
	selString += '<SPATIALFILTER relation="area_intersection" >';
	selString += '<ENVELOPE ' + theEnvelope + ' />';
	selString += '</SPATIALFILTER>';
	if (hasLimit) {
		// keep this within the limitExtent
		selString += '<SPATIALFILTER relation="area_intersection">\n';
		selString += '<ENVELOPE maxx="' + limitRight + '" maxy="' + limitTop + '" minx="' + limitLeft + '" miny="' + limitBottom + '" />\n';
		selString += '</SPATIALFILTER>\n';
	}
	selString += '</SPATIALQUERY>';
	selString += '</GET_FEATURES>';
	selString += '</REQUEST>';
	selString += '</ARCXML>';
	return selString;
}

function displayAttributeDataForDrillSelect(theReply) {
	alert(theReply);
	showRetrieveData();
	var theError = getXMLErrorMessage(theReply);
	var fCount = justGetFeatureCount(theReply);
	var pos = 0;
	var startpos = 0;
	var endpos = xmlEndPos;
	var stillMore = false
	pos = theReply.indexOf('hasmore="true"',endpos);
	selectCount = 0;
	var tempString="";
	var theFrame = "parent.MapFrame";
	setLayerFields(themeCounter2);
	themeCounter2--;
	if (fCount > 0) {
		newSelectCount += 1;
		endpos = 1;
		for (var i=0;i<fCount;i++) {
			inData = parseRecordString(theReply, endpos);
			endpos = xmlEndPos;
			selectedData = clearLeadingSpace(inData);
			epos = theReply.indexOf("</FEATURE",endpos);
			if (showSelectedData) {
				var fName1 = getFieldNames(selectedData);
				var fValue1 = getFieldValues(selectedData);
				selectPoints[selectCount] = getIdValue(fName1, fValue1);
				for (var f=0;f<fName1.length;f++) {
					var f2 = -1;
					var s2 = -1;
					var my1 = 0;
					var my2 = 0;
					var mystring = fName1[f];
					var len = mystring.length;
					for (var s1=0;s1<LayerFields.length;s1++) {
						if (fName1[f]==LayerFields[s1]) s2=s1;
					}
					if (useFieldAlias) {
						for (var f3=0;f3<AliasFieldName.length;f3++) {
							if (AliasFieldName[f3]==fName1[f]) f2 = f3;
						}
					}
					if (f2!=-1) {
						if ((fName1[f].substring(len-9,len) == "SE_ROW_ID") || (fName1[f].substring(len-5,len) == "SHAPE") || (fName1[f].substring(len-4,len) == "AREA") || (fName1[f].substring(len-9,len) == "PERIMETER") || (fName1[f].substring(len-5,len) == "LOTS_") || (fName1[f].substring(len-7,len) == "LOTS_ID") || (fName1[f].substring(len-6,len) == "RECTYP") || (fName1[f].substring(len-5,len) == "SDSUF") || (fName1[f].substring(len-5,len) == "SSSUF") || (fName1[f].substring(len-5,len) == "BNSUF") || (fName1[f].substring(len-5,len) == "LNPRE") || (fName1[f].substring(len-5,len) == "LOCID") || (fName1[f].substring(len-3,len) == "LOT") || (fName1[f] == "AREA") || (fName1[f] == "PERIMETER") || (fName1[f] == "COASTALL_") || (fName1[f] == "COASTALL_I") || (fName1[f] == "#SHAPE#") || (fName1[f] == "#ID#")) {
							my1 = my2;
							alert(fName1[f]);
							myWin.document.write('<tr><td><FONT FACE="Arial" SIZE="-2">' + fName1[f] + " | " + AliasFieldAlias[f2] + '</FONT></td>');
						} else {
							alert(fName1[f]);
							myWin.document.write('<tr><td><FONT FACE="Arial" SIZE="-2">' + AliasFieldAlias[f2] + '</FONT></td>');
						}
					} else {
						if ((fName1[f].substring(len-9,len) == "SE_ROW_ID") || (fName1[f].substring(len-5,len) == "SHAPE") || (fName1[f].substring(len-4,len) == "AREA") || (fName1[f].substring(len-9,len) == "PERIMETER") || (fName1[f].substring(len-5,len) == "LOTS_") || (fName1[f].substring(len-7,len) == "LOTS_ID") || (fName1[f].substring(len-6,len) == "RECTYP") || (fName1[f].substring(len-5,len) == "SDSUF") || (fName1[f].substring(len-5,len) == "SSSUF") || (fName1[f].substring(len-5,len) == "BNSUF") || (fName1[f].substring(len-5,len) == "LNPRE") || (fName1[f].substring(len-5,len) == "LOCID") || (fName1[f].substring(len-3,len) == "LOT") || (fName1[f] == "AREA") || (fName1[f] == "PERIMETER") || (fName1[f] == "COASTALL_") || (fName1[f] == "COASTALL_I") || (fName1[f] == "#SHAPE#") || (fName1[f] == "#ID#")) {
							alert(fName1[f]);
							my1 = my2;
							//myWin.document.write('<tr><td><FONT FACE="Arial" SIZE="-2">' + fName1[f] + " | " + fName1[f] + '</FONT></td>');
						} else {
							alert(fName1[f]);
							myWin.document.write('<tr><td><FONT FACE="Arial" SIZE="-2">' + fName1[f] + '</FONT></td>');
						}
					}
					if (fName1[f] == "LAYERS.GIS.ACCOUNTS.ACCOUNT") {
							alert(fName1[f]);
						myWin.document.write('<td><FONT FACE="Arial" SIZE="-2"><a href="http://www.ccappraiser.com/Show_parcel.asp?acct=' + fValue1[f] + '&gen=T&tax=T&bld=T&oth=T&sal=T&lnd=T&leg=T" target="_blank">' + fValue1[f] + '</a></FONT></td></tr>');
						myDataString = myDataString + fValue1[f] + ",";
					} else 	if ((fName1[f].substring(len-9,len) == "SE_ROW_ID") || (fName1[f].substring(len-5,len) == "SHAPE") || (fName1[f].substring(len-4,len) == "AREA") || (fName1[f].substring(len-9,len) == "PERIMETER") || (fName1[f].substring(len-5,len) == "LOTS_") || (fName1[f].substring(len-7,len) == "LOTS_ID") || (fName1[f].substring(len-6,len) == "RECTYP") || (fName1[f].substring(len-5,len) == "SDSUF") || (fName1[f].substring(len-5,len) == "SSSUF") || (fName1[f].substring(len-5,len) == "BNSUF") || (fName1[f].substring(len-5,len) == "LNPRE") || (fName1[f].substring(len-5,len) == "LOCID") || (fName1[f].substring(len-3,len) == "LOT") || (fName1[f] == "AREA") || (fName1[f] == "PERIMETER") || (fName1[f] == "COASTALL_") || (fName1[f] == "COASTALL_I") || (fName1[f] == "#SHAPE#") || (fName1[f] == "#ID#")) {
							alert(fName1[f]);
						my1 = my2;
					} else {
							alert(fName1[f]);
						myWin.document.write('<td><FONT FACE="Arial" SIZE="-2">' + fValue1[f] + '</FONT></td></tr>');
						myDataString = myDataString + fValue1[f] + ",";
					}
				} // end for
				fName1 = null;
				fValue1 = null;
			}                     //end if
		}                         //end for
	}                             //end if
}                                //end function
