
var aimsDBPresent = true;
//prevent map from zooming in too far
var fixedMarginIN = 200;
var dbLinkLayer ;
var dbLinkLayerID;
var dbLinkLayerIndex ;

var dbQueryString = "";
var dbIdString = "";
var dbIdValue = "";
var dbNumValue = "";
var dbStreetValue = "";
var dbOwnerValue = "";
var dbDisplayValue = "";
var dbShowQuery = false;
var mapComp = new Array();
var showmapComp =false;
var bookMark = new Array(0,0,0,0);
function matchDBLinkLayer(layerName) {

	var j = -1;
	for (var i=0;i<layerCount;i++) {
		if (LayerName[i]==layerName) j = i;
	}
	if (j>-1) {
		dbLinkLayerIndex = j
		dbLinkLayerID = LayerID[j];
		dbLinkLayer = LayerName[j];
			LayerVisible[j] = 1;
			ActiveLayerType = LayerType[j];
			setActiveLayer(j);	
	}	
}
function setDefaultVisible() {
	var layer1 = "Borough"
	var layer2 = "Major Roads";
	var layer3 = "Roadway";
	for (var i=0;i<layerCount;i++) {
		if (LayerName[i] ==layer1 || LayerName[i] ==layer2 || LayerName[i] ==layer3 ){
		 		 LayerVisible[i] = 1;
		}
		else
		{
		 LayerVisible[i] = 0;
		}
	}		
}

function getDBQuery(value) {
	
	var queryString = "";
	queryString = value;	
	hideRetrieveData();	
	dbLinkLayerIndex  = ActiveLayerIndex 
	dbLinkLayerID = ActiveLayer		
	var theString = getDBEnvelope(queryString);
	newString = makeXMLsafe(queryString);
	setQueryString=newString;
	selectionMode=1;
	selectData.length=0;
	LayerFields.length=0;
	LayerFieldType.length=0;
	LayerFieldCount=0;
	highlightedOne="";
	showBuffer=false;
   sendDBXMLRequest(theString, 3001)
}

function zoomToComp()
{
	Querylayer = unescape("Parcel Lines");
	var icount=0;
	var j = -1;
	var qString="";
	var numLayers=mapComp.length;
	for (var i=0;i<layerCount;i++) {
		if (LayerName[i]==Querylayer) j = i;
	}

	if (j>-1) {					
		ActiveLayerIndex = j;
		ActiveLayer = LayerID[j]		
		LayerVisible[j] = 1;
		ActiveLayerType = LayerType[j];				
					
			if (mapComp[icount] != "") {
				while (icount<=numLayers-1) {
				  qString +=   "PARCELKEY='"  + mapComp[icount] + "'"  
				  if (icount<numLayers-1) {
				  	qString +=  " OR "
				  }
				  icount=icount+1;
				}
			
				showmapComp = true;
				getDBComp(qString);
				
			}			
			
	}	
}
function getDBComp(value) {
	
	var queryString = "";
	queryString = value;	
	hideRetrieveData();	
	dbLinkLayerIndex  = ActiveLayerIndex 
	dbLinkLayerID = ActiveLayer		
	var theString = getDBEnvelope(queryString);
	newString = makeXMLsafe(queryString);
	setQueryString=newString;
	selectionMode=1;
	selectData.length=0;
	LayerFields.length=0;
	LayerFieldType.length=0;
	LayerFieldCount=0;
	highlightedOne="";
	showBuffer=false;
	
	sendDBXMLRequest(theString, 3002)
}

// show selection but not clear highlight
function getDBQuery2(value1,value2){
	
	var queryString = "";
	var highlightString = "";
	var newHighlightString = "";
	queryString = value1;
	highlightString = value2;
	hideRetrieveData();	
	dbLinkLayerIndex  = ActiveLayerIndex 
	dbLinkLayerID = ActiveLayer		
	var theString = getBothDBEnvelope(queryString);
	newString = makeXMLsafe(queryString);
	newHighlightString= makeXMLsafe(highlightString);
	setQueryString=newString;	
	highlightedOne = newHighlightString;
	selectionMode=1;
	selectData.length=0;
	LayerFields.length=0;
	LayerFieldType.length=0;
	LayerFieldCount=0;	
	showBuffer=false;
   	sendDBXMLRequest(theString, 3001);
}



function getBothDBEnvelope(queryString) {	
	if (swapSelectFields) {
			selectFields=selFieldList[ActiveLayerIndex];			
	}	
	var theString = '<ARCXML VERSION="1.1">\n<REQUEST>\n<GET_FEATURES outputmode="xml" geometry="false" envelope="true"';
	theString += ' compact="true" featurelimit="' + maxFeaturesReturned + '" >\n';
	theString += '<LAYER id="' + LayerID[ActiveLayerIndex] + '" ftype="' + ActiveLayerType + '" />';
	if (useLimitExtent) {
		// keep this within the limitExtent
		theString += '<SPATIALQUERY subfields="' + theFields + '" where="' + queryString + '" />';
		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 += '<QUERY subfields="' + selectFields + '" where="' + 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;
	return theString;	
}
function getDBEnvelope(queryString) {	
	if (swapSelectFields) {
			selectFields=selFieldList[ActiveLayerIndex];			
	}	
	var theString = '<ARCXML VERSION="1.1">\n<REQUEST>\n<GET_FEATURES outputmode="xml" geometry="false" envelope="true"';
	theString += ' compact="true" featurelimit="' + maxFeaturesReturned + '" >\n';
	theString += '<LAYER id="' + LayerID[ActiveLayerIndex] + '" ftype="' + ActiveLayerType + '" />';
	if (useLimitExtent) {
		// keep this within the limitExtent
		theString += '<SPATIALQUERY subfields="' + theFields + '" where="' + queryString + '" />';
		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 += '<QUERY subfields="' + selectFields + '" where="' + 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;
	return theString;	
}
// after matching feature to external db record
// 	parse out envelope and send zoom to envelope request.
function parseDBEnvelope(theReply) {
	
	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 tempString = "";
	var fCount = featureCount;
	selectCount = 0;	
	if (featureCount == 0) {
		alert(msgList[131]);
		return;
	}	
	if (featureCount > 0) {
		newSelectCount += 1;
		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;
			//}
			selectCount += 1;					
		}			
	} 
	zoomToDBReturnedRecords();
	

}
function writeDBResponsePage(featureString) {
	//alert(dbSQLurl);
	var theFrame = "DBFrame";
	if ((useExternalWindow) || (!useTextFrame)) theFrame = "_blank";
	var Win1 = parent.DBFrame.document;
	var startpos = featureString.indexOf("IN (");
	startpos += 4;
	var endpos = featureString.indexOf(")",startpos);
	if (endpos==-1) endpos = featureString.length;
	var flist = featureString.substring(startpos, endpos);	
		theForm = Win1.forms[0];		
		theForm.IDValue.value = flist;
		theForm.DisplayValue.value = "**None**";
		theForm.submit();	
	featureString=null;
	Win1 = null;

}


// Custom function to send ArcXML requests
//	points response to processDBXML()
function sendDBXMLRequest(XMLRequest, theType) {
	var theFunction = "parent.MapFrame.processDBXML";
	sendCustomToServer(XMLRequest,theFunction, theType)
}

// Custom XML processor for db access
function processDBXML(theReplyIn) {	
	theReplyIn = replacePlus(theReplyIn);
	var theReply = unescape(theReplyIn);
	//alert(theReply);
	okToSend = true;
	if (debugOn>2) alert(msgList[13] + theReply);
	if (XMLMode == 3001) {

		if (dbShowQuery) {
			dbShowQuery = false;
			lastXMLResponse = theReply;		
			parseDBEnvelope(theReply);
			toolMode = 1;
			displayAttributeData(theReply);			
		}
		else
		{
			parseDBEnvelope(theReply);			
		}

	}
	if (XMLMode == 3002) {
		showSelectedFeatures=false;
		displayCompData();
		//displayRegularCompData();
		parseDBEnvelope(theReply);			
		bookMark = new Array(eLeft, eRight,eTop,eBottom);
				
	}
}

function gotoBookmark() {
	if (bookMark[0] !=0) {
    eLeft = bookMark[0];
    eRight = bookMark[1];
    eTop = bookMark[2];
    eBottom = bookMark[3];
    sendMapXML();
	}
 }

function zoomToDBReturnedRecords() {
	
	calcSelectEnvelope();
	var fWidth = selMaxEnvelope[2] - selMaxEnvelope[0];
	var fHeight = selMaxEnvelope[3] - selMaxEnvelope[1];
	var mWMargin = 0;
	var mHMargin = 0;
	if ((fWidth==0) && (fHeight==0)) {
		fWidth = fullWidth ;
		fHeight = fullHeight;
	}

	if (selectType=="point") {
		mWMargin = fullWidth * selectPointMargin;
		mHMargin = fullHeight * selectPointMargin;
		if (mWMargin > xDistance/2) {
			mWMargin = xDistance/2;
			mHMargin = yDistance/2;
		}
		if (mWMargin > fixedMarginIN ) {
			mWMargin = fixedMarginIN;
			mHMargin = fixedMarginIN;
		}
	}
	else if (selectType=="line") {
		mWMargin = fWidth * selectLineMargin;
		mHMargin = fHeight * selectLineMargin;
	}
	else {
		mWMargin = fWidth * selectMargin;
		mHMargin = fHeight * selectMargin; 
			
	}
	saveLastExtent();
	eLeft = selMaxEnvelope[0] - mWMargin 
	eRight = selMaxEnvelope[2] + mWMargin  
	eTop = selMaxEnvelope[3] + mHMargin  
	eBottom = selMaxEnvelope[1] - mHMargin 
	if (selectType=="polygon"){
		eLeft = eLeft - fixedpolygonMargin;
		eRight = eRight + fixedpolygonMargin;
		eTop = eTop + fixedpolygonMargin;
		eBottom =eBottom -fixedpolygonMargin;
	}	
	sendMapXML();

}
function displayCompData()
{
	
	var compDataURL="";	
	var icount=0;
	var numLayers =0;
	var urlParam="";
	numLayers = mapComp.length;	
	while (icount<=numLayers-1) {
	  if (mapComp[icount]!= "") {
		  urlParam += "S"  + icount + "=" + mapComp[icount] + "&"
	  }
	  icount=icount+1;
	}
	compDataURL= appDir + "comp_data.jsp?" + urlParam;	
	parent.TextFrame.document.location = compDataURL;
	
}

function displayRegularCompData()
{
	var compDataURL="";	
	var icount=0;
	var numLayers =0;
	var urlParam="";
	numLayers = mapComp.length;	
	while (icount<=numLayers-1) {
	  if (mapComp[icount]!= "") {
		  urlParam +=  mapComp[icount] + ","
	  }
	  icount=icount+1;
	}
		
	compDataURL= appDir + "parcel_lines.jsp?theWhere=" + urlParam;	
	parent.TextFrame.document.location = compDataURL;
	
}
function addmapComp(){
	var selString = "";
	var j = -1;
	for (var i=0;i<layerCount;i++) {
		if (LayerName[i]=="Parcels") j = i;
	}
	
	//var sFactor = (eRight-eLeft) / iWidth;
	//Adjust scale to 1/10
	//sFactor=sFactor/10
	
	//if (((sFactor>=LayerMinScale[j]) && (sFactor<=LayerMaxScale[j]) && (LayerVisible[j]==1)) || (canSelectInvisible))  {
		if (mapComp[5]!="") {
			selString +='<LAYER type="featureclass" name="Sale 5" visible="true">\n';
			selString +='<DATASET fromlayer="' + LayerID[j] + '" />\n';
			selString +='<QUERY where="PARCELKEY=&apos;' + mapComp[5] + '&apos;" />\n';
			selString +='<GROUPRENDERER><SIMPLERENDERER>\n';
			selString +='<SIMPLEPOLYGONSYMBOL fillcolor="' + highlightColor + '" filltype="solid" filltransparency="0.0" boundarycolor="255,255,0" boundarywidth="5" />\n';
			selString +='</SIMPLERENDERER>\n';
			selString +='<SIMPLERENDERER>\n';
			selString +='<TRUETYPEMARKERSYMBOL usecentroid="true" transparency="1.0" font="Arial" fontstyle="bold"  character="53" fontcolor="0,0,0"  glowing ="255,255,255" antialiasing="true"  fontsize="14" overlap="false"/>\n';
			selString +='</SIMPLERENDERER></GROUPRENDERER>\n';
			selString +='</LAYER>\n';
		}
		if (mapComp[4]!="") {
			selString +='<LAYER type="featureclass" name="Sale 4" visible="true">\n';
			selString +='<DATASET fromlayer="' + LayerID[j] + '" />\n';
			selString +='<QUERY where="PARCELKEY=&apos;' + mapComp[4] + '&apos;" />\n';
			selString +='<GROUPRENDERER><SIMPLERENDERER>\n';
			selString +='<SIMPLEPOLYGONSYMBOL fillcolor="' + highlightColor + '" filltype="solid" filltransparency="0.0" boundarycolor="255,255,0" boundarywidth="5" />\n';
			selString +='</SIMPLERENDERER>\n';
			selString +='<SIMPLERENDERER>\n';
			selString +='<TRUETYPEMARKERSYMBOL usecentroid="true" transparency="1.0" font="Arial" fontstyle="bold" character="52" fontcolor="0,0,0"  glowing ="255,255,255" antialiasing="true"  fontsize="14" overlap="false"/>\n';
			selString +='</SIMPLERENDERER></GROUPRENDERER>\n';
			selString +='</LAYER>\n';
		}
		if (mapComp[3]!="") {
			selString +='<LAYER type="featureclass" name="Sale 3" visible="true">\n';
			selString +='<DATASET fromlayer="' + LayerID[j] + '" />\n';
			selString +='<QUERY where="PARCELKEY=&apos;' + mapComp[3] + '&apos;" />\n';
			selString +='<GROUPRENDERER><SIMPLERENDERER>\n';
			selString +='<SIMPLEPOLYGONSYMBOL fillcolor="' + highlightColor + '" filltype="solid" filltransparency="0.0" boundarycolor="255,255,0" boundarywidth="5" />\n';
			selString +='</SIMPLERENDERER>\n';
			selString +='<SIMPLERENDERER>\n';
			selString +='<TRUETYPEMARKERSYMBOL usecentroid="true" transparency="1.0" font="Arial" fontstyle="bold" character="51" fontcolor="0,0,0"  glowing ="255,255,255" antialiasing="true"  fontsize="14" overlap="false"/>\n';
			selString +='</SIMPLERENDERER></GROUPRENDERER>\n';
			selString +='</LAYER>\n';
		}
		if (mapComp[2]!="") {
			selString +='<LAYER type="featureclass" name="Sale 2" visible="true">\n';
			selString +='<DATASET fromlayer="' + LayerID[j] + '" />\n';
			selString +='<QUERY where="PARCELKEY=&apos;' + mapComp[2] + '&apos;" />\n';
			selString +='<GROUPRENDERER><SIMPLERENDERER>\n';
			selString +='<SIMPLEPOLYGONSYMBOL fillcolor="' + highlightColor + '" filltype="solid" filltransparency="0.0" boundarycolor="255,255,0" boundarywidth="5" />\n';
			selString +='</SIMPLERENDERER>\n';
			selString +='<SIMPLERENDERER>\n';
			selString +='<TRUETYPEMARKERSYMBOL usecentroid="true" transparency="1.0" font="Arial" fontstyle="bold" character="50" fontcolor="0,0,0"  glowing ="255,255,255" antialiasing="true"  fontsize="14" overlap="false"/>\n';
			selString +='</SIMPLERENDERER></GROUPRENDERER>\n';
			selString +='</LAYER>\n';
		}
		if (mapComp[1]!="") {
			selString +='<LAYER type="featureclass" name="Sale 1" visible="true">\n';
			selString +='<DATASET fromlayer="' + LayerID[j] + '" />\n';
			selString +='<QUERY where="PARCELKEY=&apos;' + mapComp[1] + '&apos;" />\n';
			selString +='<GROUPRENDERER><SIMPLERENDERER>\n';
			selString +='<SIMPLEPOLYGONSYMBOL fillcolor="' + highlightColor + '" filltype="solid" filltransparency="0.0" boundarycolor="255,255,0" boundarywidth="5" />\n';
			selString +='</SIMPLERENDERER>\n';
			selString +='<SIMPLERENDERER>\n';
			selString +='<TRUETYPEMARKERSYMBOL usecentroid="true" transparency="1.0" font="Arial" fontstyle="bold" character="49" fontcolor="0,0,0"  glowing ="255,255,255" antialiasing="true"  fontsize="14" overlap="false"/>\n';
			selString +='</SIMPLERENDERER></GROUPRENDERER>\n';
			selString +='</LAYER>\n';
		}
		if (mapComp[0]!="") {
			selString +='<LAYER type="featureclass" name="Subject" visible="true">\n';
			selString +='<DATASET fromlayer="' + LayerID[j] + '" />\n';
			selString +='<QUERY where="PARCELKEY=&apos;' + mapComp[0] + '&apos;" />\n';
			selString +='<GROUPRENDERER><SIMPLERENDERER>\n';
			selString +='<SIMPLEPOLYGONSYMBOL fillcolor="' + highlightColor + '" filltype="solid" filltransparency="0.0" boundarycolor="255,0,0" boundarywidth="4" />\n';
			selString +='</SIMPLERENDERER>\n';
			selString +='<SIMPLERENDERER>\n';
			selString +='<TRUETYPEMARKERSYMBOL usecentroid="true" transparency="1.0" font="Arial" fontstyle="bold" character="83" fontcolor="255,0,0"  glowing ="255,255,255" antialiasing="true"  fontsize="14" overlap="false"/>\n';
			selString +='</SIMPLERENDERER></GROUPRENDERER>\n';
			selString +='</LAYER>\n';
		}
	//}
	
	return selString;
}	
	
