
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);
var fixedpolygonMargin = 200;
var enforceFacilityExtent=false;
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 matchLayerId(layerId) {

	var j = -1;
	for (var i=0;i<layerCount;i++) {
		if (LayerID[i]==layerId) 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 getFacilityQuery(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;
	enforceFacilityExtent=true;
    sendDBXMLRequest(theString, 3001)
    //suppress rendering!
    setQueryString="";
}


// 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 mapFeature(layerId,sQuery){
matchLayerId(layerId);
getFacilityQuery(sQuery);
}


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; 
			
	}
	if (enforceFacilityExtent){		
	    if (mWMargin > xDistance/2) {
			    mWMargin = xDistance/2;
			    mHMargin = yDistance/2;
	    }      
	}
	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;
	}	
	enforceFacilityExtent=false;
	sendMapXML();

}


function toggleElected(value)
{ 
 var electedLayer = "County Legislative Districts,NYS Assembly Districts,NYS Senate Districts,US Congressional Districts";
  toggleLayerList(electedLayer,value);
}


function toggleErpa(value)
{ 
 var electedLayer = "Indian Point 10-Mile Radius,Indian Point,EPZ Municipality,Evacuation Routes,ERCenters";
  toggleLayerList(electedLayer,value);
}

function toggleHurricane(value)
{ 
 var electedLayer = "Hurricane Evacuation Zone";
  toggleLayerList(electedLayer,value);
}
function toggleSewer(value)
{ 
 var electedLayer = "County Sewer Districts";
  toggleLayerList(electedLayer,value);
}
function toggleLayerList(electedLayer,value)
{

    var electedArray = electedLayer.split(",") ;
    for (var i=0;i<layerCount;i++) {
	        for (var j = 0; j < electedArray.length; j ++ ){
	        	if  (electedArray[j] == LayerID[i]){	        	
	        		LayerVisible[i] = value;
	        		break;
	        	}
	        	
	        }
	}
}
function disableFacility()
{
queryCommunity=false;
customAddressValue = "";
customDistanceValue = 0;
customtheX = 0;
customtheY = 0;	
}

var queryCommunityClause;
var queryClosest=false;
function enableFacility(selDistance,selX,selY,selAddress,selQuery,selLayer,selClosest)
{
queryCommunity=true;
customAddressValue =  selAddress;
custombuffDist = selDistance;
customtheX = selX;
customtheY = selY;	
queryCommunityClause =selQuery;
queryClosest=selClosest;
customSelectionValue = selLayer;
SetVisiblebyId(customSelectionValue,1) 
zoomToFacility(customtheX,customtheY,true,customAddressValue);
			 
}

var queryClosest=false;
function enableGreen(selDistance,selX,selY,selAddress,selQuery,selLayer,selClosest)
{
queryCommunity=true;
customAddressValue =  selAddress;
custombuffDist = selDistance;
customtheX = selX;
customtheY = selY;	
queryCommunityClause =selQuery;
queryClosest=selClosest;
customSelectionValue = selLayer;
SetVisiblebyId(customSelectionValue,1) 
zoomToFacility(customtheX,customtheY,true,customAddressValue);
			 
}



function zoomToFacility(xIn, yIn, drawIt,theLabel) {
            
          //  if (distance < 300 ) distance=300;
            extY = custombuffDist * 1.25;
			extX = extY * 1.6;
			eLeft= customtheX - extX;
			eTop = customtheY - extY;
			eRight = parseFloat(customtheX) + parseFloat(extX);
			eBottom = parseFloat(customtheY) + parseFloat(extY);
			startLeft = eLeft;
			startTop = eTop;
			startRight = eRight;
			startBottom = eBottom;
//	if (drawIt) {
//		showGeocode=true;
//		geocodeX=customtheX;
//		geocodeY=customtheY;
//		geocodeLabel=theLabel;
//	}
	sendMapXML();
}

function toggleAerial(value)
{
 //turn on
 var electedLayer = "Aerial Photos";
 toggleLayerList(electedLayer,value);
 
// turn off
 var electedLayer = "";
 toggleLayerList(electedLayer,0);

    sendMapXML();
}
var setDefaultMap="";
function setDefaultView()
{
if (setDefaultMap!=""){
    if (setDefaultMap=="ipzone")
    {
     toggleErpa(1);
    }
    else if (setDefaultMap=="hurricane")
    {
     toggleHurricane(1);
    }
    else if (setDefaultMap=="elected")
    {
    toggleElected(1);
    }
     else if (setDefaultMap=="solar")
    {
    var electedLayer = "Southern Exposure,Tax Parcels";
   // toggleLayerList(electedLayer,1);
    }
  
    
}
}
var addCustomsolarPower="";
var solarPower=false;
function zoomToSolarPoint(xIn, yIn, drawIt,theLabel) {

    solarPower=false;
    addCustomsolarPower="";
	var mWMargin = 0;
	var mHMargin = 0;
	mWMargin = Math.abs(limitRight-limitLeft) * selectPointMargin/3;
	mHMargin = Math.abs(limitTop-limitBottom) * selectPointMargin/3;
	var xNum = parseFloat(xIn);
	var yNum = parseFloat(yIn);
	saveLastExtent();
	eLeft = xNum - mWMargin;
	eRight = xNum + mWMargin;
	eTop = yNum + mHMargin;
	eBottom = yNum - mHMargin;
	if (drawIt) {
		showGeocode=true;
		geocodeX=xNum;
		geocodeY=yNum;
		geocodeLabel=theLabel;
	}
	
	var electedLayer = "Southern Exposure,Tax Parcels";
    toggleLayerList(electedLayer,1);
 
	sendMapXML();
}

 
 function zoomToSolarArea(Value1){						
    var theURL;
    var layerId="Tax Parcels";
    var fieldName="OBJECTID";
    
   
    matchLayerId(layerId);
    theURL = fieldName + " = " + Value1  ;	
    
    addCustomsolarPower="";
    addCustomsolarPower += '<LAYER type="featureclass" name="Found Parcel" id ="Tax Parcels 100">';
    addCustomsolarPower += '<DATASET fromlayer="' + layerId + '" />';
    addCustomsolarPower += '<SPATIALQUERY subfields="#ALL#" where="' + theURL + '">';
    addCustomsolarPower += '</SPATIALQUERY>';
 //   addCustomsolarPower += '<SIMPLERENDERER>';
    addCustomsolarPower += '<SIMPLELABELRENDERER field="prop_loc mun_name" labelpriorities="1,2,2,4,5,3,2,4">';
    addCustomsolarPower += '<TEXTSYMBOL antialiasing="true" font="Arial" fontstyle="regular" fontsize="10" fontcolor="243,0,194" interval="16"/>';
    addCustomsolarPower += '</SIMPLELABELRENDERER>';
  //  addCustomsolarPower += '</SIMPLERENDERER>';
    addCustomsolarPower += '</LAYER>';
    solarPower=true;
    
    var electedLayer = "Southern Exposure,Tax Parcels";
    toggleLayerList(electedLayer,1);
    getDBQuery(theURL);	
		 
}
    
 