// aimsBuffer.js
/*
*  JavaScript template file for ArcIMS HTML Viewer
*		dependent on aimsXML.js, ArcIMSparam.js, aimsCommon.js, aimsMap.js, aimsIdentify.js,
*			aimsSelect.js, aimsQuery.js, and aimsLayers.js
*		To be interactive, dependent also on aimsDHTML.js, aimsClick.js, and aimsNavigation.js
*/
aimsBufferPresent=true;
var drawTargetLayer = true;
var bufferTargetLayer = "";
var bufferTargetLayerIndex = 0;
var bufferDistance = 5;
var bufferSmoothEdges = 1/100;

var getBufferedData = false;
function writeBufferForm() {
var url = appDir + "buffer.htm";
if (useTextFrame) {
parent.TextFrame.document.location = url;
} else {
Win1 = open(url,"BufferWindow","width=555,height=120,scrollbars=no,resizable=no");
}
}
// buffer around selected features
function bufferIt() {
hideLayer("measureBox");
//alert("Function not yet enabled.");
showBuffer=true;
if(bufferTargetLayerIndex==parent.ParametersFrame.HCenterLayerIndex)
{
LayerVisible[parent.ParametersFrame.HCenterLayerIndex] = 1;
parent.ParametersFrame.HealthCentersVisible[1] = 1;
parent.ParametersFrame.HealthCentersVisible[2] = 1;
parent.ParametersFrame.HealthCentersVisible[3] = 1;
parent.SearchFrame.document.location.reload();
}
else
{
LayerVisible[bufferTargetLayerIndex]=1;
parent.SearchFrame.document.location.reload();
}
sendMapXML();
}
// add buffer stuff to Map XML request
function addBufferToMap() {
var buffString = "";
if (selectionMode==1) {
if (drawTargetLayer) {
buffString += '<LAYER type="featureclass" name="' + titleList[24] + '" visible="true">\n';
buffString += '<DATASET fromlayer="' + LayerID[ActiveLayerIndex] + '" />\n';
buffString += '<SPATIALQUERY where="' + setQueryString + '" >\n';
buffString += '<BUFFER distance="' + forceComma(bufferDistance) + '" ';

buffString += ' bufferunits="' + ScaleBarUnits.toLowerCase() + '"';
buffString += '>\n';
if (useLimitExtent) {
buffString += '<SPATIALQUERY>\n';
buffString += '<SPATIALFILTER relation="area_intersection">\n';
buffString += '<ENVELOPE maxx="' + forceComma(limitRight) + '" maxy="' + forceComma(limitTop) + '" minx="' + forceComma(limitLeft) + '" miny="' + forceComma(limitBottom) + '" />\n';
buffString += '</SPATIALFILTER>\n';
buffString += '</SPATIALQUERY>\n';
}
buffString += '<TARGETLAYER id="' + LayerID[bufferTargetLayerIndex] + '" />\n';
buffString += '</BUFFER>\n';
buffString += '</SPATIALQUERY>\n';
buffString += '<SIMPLERENDERER>\n';
var tlType = LayerType[bufferTargetLayerIndex];
if (tlType=="point") {
buffString += '<SIMPLEMARKERSYMBOL color="' + highlightColor + '" type="Circle" width="10" />\n';
} else if (tlType=="line") {
buffString += '<SIMPLELINESYMBOL color="' + highlightColor + '" width="2" />\n';
} else {
buffString += '<SIMPLEPOLYGONSYMBOL fillcolor="' + highlightColor + '" filltype="solid" transparency="' + forceComma(5/10) + '" boundarycolor="255,255,255" />\n';
}
buffString += '</SIMPLERENDERER>\n';
buffString += '</LAYER>\n';
}
buffString += '<LAYER type="featureclass" name="' + titleList[25] + '" visible="true">\n';
buffString += '<DATASET fromlayer="' + LayerID[ActiveLayerIndex] + '" />\n';
buffString += '<SPATIALQUERY where="' + setQueryString + '" >\n';
buffString += '<BUFFER distance="' + forceComma(bufferDistance) + '" bufferunits="' + ScaleBarUnits.toLowerCase() + '" />\n';
buffString += '</SPATIALQUERY>\n';
buffString += '<SIMPLERENDERER>\n';
buffString += '<SIMPLEPOLYGONSYMBOL fillcolor="100,100,100" filltype="solid" transparency="' + forceComma(35/100) + '" boundarycolor="255,255,255" />\n';
buffString += '</SIMPLERENDERER>\n';
buffString += '</LAYER>\n';
} else if ((selectionMode==2) ||(selectionMode==3)){
if (drawTargetLayer) {
buffString += '<LAYER type="featureclass" name="' + titleList[26] + '" visible="true">\n';
buffString += '<DATASET fromlayer="' + LayerID[ActiveLayerIndex] + '" />\n';

if(ActiveLayerIndex==parent.ParametersFrame.HCenterLayerIndex)
{
Str = "";
for (i=1; i<4; i++)
{
if (parent.ParametersFrame.HealthCentersVisible[i] == 1)
Str += " type = "+i+" or ";
}
Str += " type = -1 ";
str1 = '<SPATIALQUERY  where=" ('+Str+')';
str1 += addJoinExp(ActiveLayerIndex);
str1 += " >";
buffString += str1;
}
else
{
buffString += '<SPATIALQUERY>\n';
}
buffString += '<BUFFER distance="' + forceComma(bufferDistance) + '" bufferunits="' + ScaleBarUnits.toLowerCase() + '">\n';
buffString += '<TARGETLAYER id="' + LayerID[bufferTargetLayerIndex] + '" />\n';
if (useLimitExtent) {
buffString += '<SPATIALQUERY>\n';
buffString += '<SPATIALFILTER relation="area_intersection">\n';
buffString += '<ENVELOPE maxx="' + forceComma(limitRight) + '" maxy="' + forceComma(limitTop) + '" minx="' + forceComma(limitLeft) + '" miny="' + forceComma(limitBottom) + '" />\n';
buffString += '</SPATIALFILTER>\n';
buffString += '</SPATIALQUERY>\n';
}
buffString += '</BUFFER>\n';
// select rectangle or shape
buffString += '<SPATIALFILTER relation="area_intersection">\n';
if (selectionMode==2) {
buffString += '<ENVELOPE ' + selectEnvelope + ' />\n';
} else {
if (clickType==2) {
buffString += '<POLYLINE>\n<PATH>\n';
} else if (clickType==3) {
buffString += '<POLYGON>\n<RING>\n';
} else {
buffString += '<MULTIPOINT>\n';
}
for (var i=0;i<clickCount;i++) {
buffString += '<POINT x="' + clickPointX[i] + '" y="' + clickPointY[i] + '" />\n';
}
if (clickType==3) {
//buffString += '<POINT x="' + clickPointX[0] + '" y="' + clickPointY[0] + '" />\n';
buffString += '</RING>\n</POLYGON>\n';
} else if (clickType==2) {
buffString += '</PATH>\n</POLYLINE>\n';
} else {
buffString += '</MULTIPOINT>\n';
}
}
buffString += '</SPATIALFILTER>\n';
buffString += '</SPATIALQUERY>\n';
buffString += '<SIMPLERENDERER>\n';
var tlType = LayerType[bufferTargetLayerIndex];
if (tlType=="point") {
buffString += '<SIMPLEMARKERSYMBOL color="' + highlightColor + '" type="Circle" width="10" />\n';
} else if (tlType=="line") {
buffString += '<SIMPLELINESYMBOL color="' + highlightColor + '" width="2" />\n';
} else {
buffString += '<SIMPLEPOLYGONSYMBOL fillcolor="' + highlightColor + '" filltype="solid" transparency="' + forceComma(35/100) + '" boundarycolor="255,255,255" />\n';
}
buffString += '</SIMPLERENDERER>\n';
buffString += '</LAYER>\n';
}
buffString += '<LAYER type="featureclass" name="' + titleList[27] + '" visible="true">\n';
buffString += '<DATASET fromlayer="' + LayerID[ActiveLayerIndex] + '" />\n';

if(ActiveLayerIndex==parent.ParametersFrame.HCenterLayerIndex)
{

Str = "";
for (i=1; i<4; i++)
{
if (parent.ParametersFrame.HealthCentersVisible[i] == 1)
Str += " type = "+i+" or ";
}
Str += " type = -1 ";
str1 = '<SPATIALQUERY  where=" ('+Str+')';
str1 += addJoinExp(ActiveLayerIndex);
str1 += " >";
buffString += str1;
}
else
{
buffString += '<SPATIALQUERY>\n';
}

buffString += '<BUFFER distance="' + forceComma(bufferDistance) + '" bufferunits="' + ScaleBarUnits.toLowerCase() + '" />\n';
buffString += '<SPATIALFILTER relation="area_intersection">\n';
if (selectionMode==2) {
buffString += '<ENVELOPE ' + selectEnvelope + ' />\n';
} else {
if (clickType==2) {
buffString += '<POLYLINE>\n<PATH>\n';
} else if (clickType==3) {
buffString += '<POLYGON>\n<RING>\n';
} else {
buffString += '<MULTIPOINT>\n';
}
for (var i=0;i<clickCount;i++) {
buffString += '<POINT x="' + clickPointX[i] + '" y="' + clickPointY[i] + '" />\n';
}
if (clickType==3) {
//buffString += '<POINT x="' + clickPointX[0] + '" y="' + clickPointY[0] + '" />\n';
buffString += '</RING>\n</POLYGON>\n';
} else if (clickType==2) {
buffString += '</PATH>\n</POLYLINE>\n';
} else {
buffString += '</MULTIPOINT>\n';
}
}
buffString += '</SPATIALFILTER>\n';
if (useLimitExtent) {
// keep this within the limitExtent

buffString += '<SPATIALFILTER relation="area_intersection">\n';
buffString += '<ENVELOPE maxx="' + forceComma(limitRight) + '" maxy="' + forceComma(limitTop) + '" minx="' + forceComma(limitLeft) + '" miny="' + forceComma(limitBottom) + '" />\n';
buffString += '</SPATIALFILTER>\n';

}
buffString += '</SPATIALQUERY>\n';
buffString += '<SIMPLERENDERER>\n';
buffString += '<SIMPLEPOLYGONSYMBOL fillcolor="100,100,100" filltype="solid" transparency="' + forceComma(5/10) + '" boundarycolor="255,255,255" />\n';
buffString += '</SIMPLERENDERER>\n';
buffString += '</LAYER>\n';
} else {
// buffer a user shape
// not implemented
}
//	alert("buffString addBufferToMap:"+buffString);
return buffString;

}


function writeGetBufferedData() {
var buffString = "";
//bufferSmoothEdges = bufferDistance /1001;
//	alert("selectionMode"+selectionMode);
queryStartRecord=0;
showRetrieveData();
switch(selectionMode) {
case 1:
buffString = writeQueryBufferXML();
break;
case 2:
buffString = writeEnvelopeBufferXML();
break;
case 3:
buffString = writeShapeBufferXML(clickType-1);
break;
//case 4:
// buffer a user shape - not implemented
//	bufferTargetLayerIndex=ActiveLayerIndex;
//	buffString = writeUserShapeBufferXML(clickType);
//	break;
}

return buffString;
}

function writeQueryBufferXML() {
//	alert("writeQueryBufferXML");
if (swapSelectFields) {
selectFields=selFieldList[bufferTargetLayerIndex];
}
var targetLayerType = LayerType[bufferTargetLayerIndex];
var theString = '<ARCXML version="1.1">\n<REQUEST>\n<GET_FEATURES outputmode="xml" geometry="false" envelope="false" checkesc ="true" ';
//theString += 'compact="true"';
//theString += ' featurelimit="' + maxFeaturesReturned + '" beginrecord="' + queryStartRecord + '"';

theString += '>\n';
theString += '<LAYER id="' + ActiveLayer + '" ftype="' + ActiveLayerType + '" />\n';
theString += '<SPATIALQUERY where="' + setQueryString + '">\n';
theString += '<BUFFER distance="' + forceComma(bufferDistance) + '" bufferunits="' + ScaleBarUnits.toLowerCase() + '" >\n';
theString += '<TARGETLAYER id="' + LayerID[bufferTargetLayerIndex] + '"/>\n';

if(bufferTargetLayerIndex==parent.ParametersFrame.HCenterLayerIndex)
{

Str = "";
for (i=1; i<4; i++)
{
if (parent.ParametersFrame.HealthCentersVisible[i] == 1)
Str += " type = "+i+" or ";
}
Str += " type = -1 ";
str1 = '<SPATIALQUERY subfields="' + selectFields + '"  where=" ('+Str+')';
str1 += addJoinExp(bufferTargetLayerIndex);
str1 += " >\n";
theString += str1;
}
else
{

theString += '<SPATIALQUERY subfields="' + selectFields + '" />\n';
}


//theString += '</TARGETLAYER>\n';
theString += '</BUFFER>\n';
if (useLimitExtent) {
// 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 += '</SPATIALQUERY>\n';
theString += '</GET_FEATURES>';
theString += '</REQUEST>';
theString += '</ARCXML>';
return theString;
}
// write out xml request for selection by shape
function writeShapeBufferXML(theType) {
if (swapSelectFields) {
selectFields=selFieldList[bufferTargetLayerIndex];
}
var theString = '<ARCXML version="1.1">\n<REQUEST>\n<GET_FEATURES outputmode="xml" envelope="false" geometry="false" checkesc ="true" ';
theString += '>\n';
theString += '<LAYER id="' + ActiveLayer + '" ftype="' + ActiveLayerType + '" />';

if(bufferTargetLayerIndex==parent.ParametersFrame.HCenterLayerIndex)
{

Str = "";
for (i=1; i<4; i++)
{
if (parent.ParametersFrame.HealthCentersVisible[i] == 1)
Str += " type = "+i+" or ";
}
Str += " type = -1 ";
str1 = '<SPATIALQUERY  where=" ('+Str+')';
str1 += addJoinExp(bufferTargetLayerIndex);
str1 += " >";
theString += str1;
}
else
{
theString += '<SPATIALQUERY>\n';
}
if (useLimitExtent) {
// 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 += '<SPATIALFILTER relation="area_intersection" >';
if (theType==1) {
theString += '<POLYLINE>\n<PATH>\n';
} else {
theString += '<POLYGON>\n<RING>\n';
}
for (var i=0;i<clickCount;i++) {
theString += '<POINT x="' + clickPointX[i] + '" y="' + clickPointY[i] + '" />\n';
}
if (theType==2) {
theString += '</RING>\n</POLYGON>\n';
} else {
theString += '</PATH>\n</POLYLINE>\n';
}
theString += '</SPATIALFILTER>';
if (useLimitExtent) {
// 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 += '<BUFFER distance="' + forceComma(bufferDistance) + '" bufferunits="' + ScaleBarUnits.toLowerCase() + '" >\n';
theString += '<TARGETLAYER id="' + LayerID[bufferTargetLayerIndex] + '">\n';

if(bufferTargetLayerIndex==parent.ParametersFrame.HCenterLayerIndex)
{
Str = "";
for (i=1; i<4; i++)
{
if (parent.ParametersFrame.HealthCentersVisible[i] == 1)
Str += " type = "+i+" or ";
}
Str += " type = -1 ";
str1 = '<SPATIALQUERY subfields="' + selectFields + '" where=" ('+Str+')';
str1 += addJoinExp(bufferTargetLayerIndex);
str1 += " >\n";
theString += str1;
}
else
{
theString += '<SPATIALQUERY subfields="' + selectFields + '">\n';
}
theString += '</TARGETLAYER>\n';
theString += '</BUFFER>\n';
theString += '</SPATIALQUERY>';
theString += '</GET_FEATURES>';
theString += '</REQUEST>';
theString += '</ARCXML>';
return theString;
}
function writeEnvelopeBufferXML() {
if (swapSelectFields) {
selectFields=selFieldList[bufferTargetLayerIndex];
}
var theString = '<ARCXML version="1.1">\n<REQUEST>\n<GET_FEATURES outputmode="xml" envelope="false" geometry="false" checkesc ="true"';
//theString += ' compact="true"';
//theString += ' featurelimit="' + maxReturned + '" beginrecord="' + startRec + '"';
theString += '>\n';
theString += '<LAYER id="' + ActiveLayer + '" ftype="' + ActiveLayerType + '" />\n';

if(ActiveLayerIndex==parent.ParametersFrame.HCenterLayerIndex)
{
Str = "";
for (i=1; i<4; i++)
{
if (parent.ParametersFrame.HealthCentersVisible[i] == 1)
Str += " type = "+i+" or ";
}
Str += " type = -1 ";
str1 = '<SPATIALQUERY  where=" ('+Str+')';
str1 += addJoinExp(ActiveLayerIndex);
str1 += " >\n";
theString += str1;
//alert(str1);
}
else
{
theString += '<SPATIALQUERY>';
}
theString += '<SPATIALFILTER relation="area_intersection" >\n';
theString += '<ENVELOPE ' + selectEnvelope + ' />';
theString += '</SPATIALFILTER>\n';
if (useLimitExtent) {
// 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 += '<BUFFER distance="' + forceComma(bufferDistance) + '" bufferunits="' + ScaleBarUnits.toLowerCase() + '" >\n';
theString += '<TARGETLAYER id="' + LayerID[bufferTargetLayerIndex] + '"/>\n';

if(bufferTargetLayerIndex==parent.ParametersFrame.HCenterLayerIndex)
{
Str = "";
for (i=1; i<4; i++)
{
if (parent.ParametersFrame.HealthCentersVisible[i] == 1)
Str += " type = "+i+" or ";
}
Str += " type = -1 ";
str1 = '<SPATIALQUERY subfields="' + selectFields + '" where=" ('+Str+')';
str1 += addJoinExp(bufferTargetLayerIndex);
str1 += " >\n";
theString += str1;
//alert(str1);
theString += '</SPATIALQUERY>';
}
else
{
theString += '<SPATIALQUERY subfields="' + selectFields + '" />\n';
}
theString += '</BUFFER>\n';
theString += '</SPATIALQUERY>';
theString += '</GET_FEATURES>';
theString += '</REQUEST>';
theString += '</ARCXML>';
return theString;
}
function getBufferAttributeData(theReply) {
setLayerFields(bufferTargetLayerIndex);
var url = appDir + "displayBufferAttributeData.htm";
if (useTextFrame) {
parent.TextFrame.document.location = url;
} else {
var Win1 = open(url,"DataWindow","width=575,height=250,scrollbars=yes,resizable=yes");
extWin = Win1;
focusOnData = true;
}

}


