// aimsBuffer.js
/*
*  JavaScript template file for ArcIMS HTML Viewer
*		dependent on aimsXML.js, ArcIMSparam.js, aimsCommon.js, aimsMap.js,
*		aimsLayers.js, aimsDHTML.js
*		aimsClick.js, aimsNavigation.js,
*		aimsIdentify.js, aimsSelect.js, and aimsQuery.js
*/

aimsBufferPresent=true;

var drawTargetLayer = false;
var bufferTargetLayer = "";
var bufferTargetLayerIndex = 0;
var bufferDistance = 5.0;
var bufferSmoothEdges = 0.01;
var getBufferedData = false;

/*
***************************************************************************************

Buffer functions 

***************************************************************************************
*/


function writeBufferForm() {
	if (useTextFrame) {
		var Win1 = parent.TextFrame;
		Win1.document.open();
		var t = "parent.MapFrame";
		
	} else {
		var Win1 = open("","QueryWindow","width=575,height=150,scrollbars=yes,resizable=yes");
			var t = "opener";
			if (parent.MapFrame!=null) t = "opener.parent.MapFrame";
	}
	
	Win1.document.writeln('<html><HEAD>');
	Win1.document.writeln('			<script language="javascript">');
	Win1.document.writeln('var t = ' + t);
	Win1.document.writeln('function doBuffer() {');
	Win1.document.writeln('	var f = document.forms[0];');		
	Win1.document.writeln('	t.bufferDistance = f.theDistance.value;');
	//Win1.document.writeln('	theIndex = f.theTarget.selectedIndex;');
	//Win1.document.writeln('	t.bufferTargetLayer = f.theTarget.options[theIndex].text;');
	//Win1.document.writeln('	t.bufferTargetLayerIndex = parseInt(f.theTarget.options[theIndex].value);');
	Win1.document.writeln('	if (f.theDistance.value>0) {');
	Win1.document.writeln('		t.bufferIt();');
	Win1.document.writeln('	} else {');
	Win1.document.writeln('		alert("Distance must be greater than zero.");');
	Win1.document.writeln('	}');
	Win1.document.writeln('}');
	Win1.document.writeln('</script>');
	Win1.document.writeln('</head>');
	Win1.document.writeln('<body bgcolor="' + textFrameBackColor + '" text="white" leftmargin=0 topmargin=0 onload="window.focus()">');
	Win1.document.writeln('<div align="center"><form onsubmit="doBuffer(); return false;">');
	Win1.document.writeln('<table cellspacing="2" cellpadding="0" bgcolor="' + textFrameFormColor + '" width=100%>');
	Win1.document.writeln('<tr><td align="CENTER"><FONT face=Arial><STRONG>Buffer</STRONG></FONT></td></tr>');
	//Win1.document.writeln('<tr><td align="CENTER"><font face="Arial" size="-2">Highlight features from&nbsp; ');
	//Win1.document.writeln('<SELECT  name=theTarget>');
	//for (var i=0;i<layerCount;i++) {
	//	Win1.document.writeln('<option value=' + i + '>' + LayerName[i]);
	//}
	//Win1.document.writeln('</SELECT>');
	//Win1.document.writeln('&nbsp; within a distance of&nbsp;<input type="Text" name="theDistance" value="0" size="5">&nbsp;');
	//Win1.document.writeln(ScaleBarUnits);
	//Win1.document.writeln(MapUnits);
	//Win1.document.writeln('&nbsp;of the selected features of&nbsp;');
	Win1.document.writeln('<tr><td align="CENTER"><font face="Arial" size="-2">Display a buffer of&nbsp; ');
	Win1.document.writeln('<input type="Text" name="theDistance" value="0" size="5">&nbsp;');
	Win1.document.writeln(ScaleBarUnits);
	Win1.document.writeln('&nbsp;around the selected features of&nbsp;');
	Win1.document.writeln(LayerName[ActiveLayerIndex]);
	Win1.document.writeln('</font></td></tr>');
	Win1.document.writeln('<tr><td align="CENTER"><input type="Button" name="theButton" value="Create Buffer" onclick="doBuffer()"></td></tr>');
	Win1.document.writeln('</table></form></div></body></html>');
	Win1.document.close();
}

// buffer around selected features
function bufferIt() {
	hideLayer("measureBox");
	//alert("Function not yet enabled.");
	showBuffer=true;
	sendMapXML();
}


function addBufferToMap() 
{
  var buffString = "";
  bufferSmoothEdges = bufferDistance /100;
  //bufferSmoothEdges = mapScaleFactor;
  //if (bufferSmoothEdges>2) bufferSmoothEdges = 2;
  
  if (drawTargetLayer) 
  {
      buffString += '<LAYER type="featureclass" name="theBufferTarget" visible="true">\n';
      buffString += '<DATASET fromlayer="' + LayerID[ActiveLayerIndex] + '" />\n';
      buffString += '<SPATIALQUERY where="fid=' + aFid  + '" >\n';
      buffString += '<BUFFER distance="' + bufferDistance + '" ';
      buffString += 'smoothedges="' + bufferSmoothEdges + '"';
      buffString += ' bufferunits="' + ScaleBarUnits.toLowerCase() + '"';
      buffString += '>\n';
      if (useLimitExtent) 
      {
	 // keep this within the limitExtent
	buffString += '<SPATIALQUERY>\n';
	buffString += '<SPATIALFILTER relation="area_intersection">\n';
	buffString += '<ENVELOPE maxx="' + limitRight + '" maxy="' + limitTop + '" minx="' + limitLeft + '" miny="' + limitBottom + '" />\n';
	buffString += '</SPATIALFILTER>\n';
	buffString += '</SPATIALQUERY>\n';
      }
      buffString += '<TARGETLAYER name="' + bufferTargetLayer + '" />\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="0.5" boundarycolor="255,255,255" />\n';
      }
      buffString += '</SIMPLERENDERER>\n';
      buffString += '</LAYER>\n';
    }
    buffString += '<LAYER type="featureclass" name="theBufferPolygons" visible="true">\n';
    buffString += '<DATASET fromlayer="' + LayerID[ActiveLayerIndex] + '" />\n';
    //buffString += '<SPATIALQUERY where="' + setQueryString + '" >\n';
    buffString += '<SPATIALQUERY where="fid=' + aFid + '" >\n';
    buffString += '<BUFFER distance="' + bufferDistance + '" smoothedges="' + bufferSmoothEdges + '" bufferunits="' + ScaleBarUnits.toLowerCase() + '" />\n';
    buffString += '</SPATIALQUERY>\n';
    buffString += '<SIMPLERENDERER>\n';
    buffString += '<SIMPLEPOLYGONSYMBOL fillcolor="100,100,100" filltype="solid" transparency="0.35" boundarycolor="255,255,255" />\n';
    buffString += '</SIMPLERENDERER>\n';
    buffString += '</LAYER>\n';
    //alert(buffString);
    return buffString;
}


function writeQueryBufferXML() {
	if (swapSelectFields) {
		selectFields=selFieldList[bufferTargetLayerIndex];
	}
	var targetLayerType = LayerType[bufferTargetLayerIndex];
	//var lidx = (layerCount-1-ActiveLayerIndex);
	var theString = '<ARCXML version="1.1">\n<REQUEST>\n<GET_FEATURES outputmode="xml" geometry="false" envelope="true" compact="true"';		
	theString += ' featurelimit="' + '9999' + '" beginrecord="' + queryStartRecord + '"';
	theString += '>\n';
        //theString += '<LAYER id="' + ActiveLayer + '" ftype="' + ActiveLayerType + '" />\n';
	theString += '<LAYER id="' + LayerID[ActiveLayerIndex] + '" ftype="' + ActiveLayerType + '" />\n';
	//theString += '<SPATIALQUERY where="' + setQueryString + '">\n';
	theString += '<SPATIALQUERY where="fid=' + aFid + '">\n';
	theString += '<BUFFER distance="' + bufferDistance + '" smoothedges="' + bufferSmoothEdges + '" bufferunits="' + ScaleBarUnits.toLowerCase() + '" >\n'; 
	
	theString += '<TARGETLAYER id="' + LayerID[bufferTargetLayerIndex] + '"/>\n';
	theString += '<SPATIALQUERY subfields="' + selectFields + " " + aField.toUpperCase() + " FCLASS " + '" />\n';
	//theString += '</TARGETLAYER>\n';
	theString += '</BUFFER>\n';
	if (useLimitExtent) {
		// keep this within the limitExtent
		
		theString += '<SPATIALFILTER relation="area_intersection">\n';
		theString += '<ENVELOPE maxx="' + limitRight + '" maxy="' + limitTop + '" minx="' + limitLeft + '" miny="' + limitBottom + '" />\n';
		theString += '</SPATIALFILTER>\n';
		
	}
	theString += '</SPATIALQUERY>\n';
	theString += '</GET_FEATURES>';
	theString += '</REQUEST>';
	theString += '</ARCXML>';
	//alert("writeQueryXML()\nQuery XML Request:\n" + theString);
	return theString;

}


// add buffer stuff to Map XML request
/*function addBufferToMap() {
	var buffString = "";
	bufferSmoothEdges = bufferDistance /100;
	//bufferSmoothEdges = mapScaleFactor;
	//if (bufferSmoothEdges>2) bufferSmoothEdges = 2;
	if (selectionMode==1) {
		if (drawTargetLayer) {
			buffString += '<LAYER type="featureclass" name="theBufferTarget" visible="true">\n';
			buffString += '<DATASET fromlayer="' + LayerID[ActiveLayerIndex] + '" />\n';
			buffString += '<SPATIALQUERY where="' + setQueryString + '" >\n';
			buffString += '<BUFFER distance="' + bufferDistance + '" ';
			buffString += 'smoothedges="' + bufferSmoothEdges + '"';
			buffString += ' bufferunits="' + ScaleBarUnits.toLowerCase() + '"';
			buffString += '>\n';
			if (useLimitExtent) {
				// keep this within the limitExtent
				buffString += '<SPATIALQUERY>\n';
				buffString += '<SPATIALFILTER relation="area_intersection">\n';
				buffString += '<ENVELOPE maxx="' + limitRight + '" maxy="' + limitTop + '" minx="' + limitLeft + '" miny="' + limitBottom + '" />\n';
				buffString += '</SPATIALFILTER>\n';
				buffString += '</SPATIALQUERY>\n';
			}
			buffString += '<TARGETLAYER name="' + bufferTargetLayer + '" />\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="0.5" boundarycolor="255,255,255" />\n';
			}
		    buffString += '</SIMPLERENDERER>\n';
			buffString += '</LAYER>\n';
		}
		buffString += '<LAYER type="featureclass" name="theBufferPolygons" visible="true">\n';
		buffString += '<DATASET fromlayer="' + LayerID[ActiveLayerIndex] + '" />\n';
		buffString += '<SPATIALQUERY where="' + setQueryString + '" >\n';
		buffString += '<BUFFER distance="' + bufferDistance + '" smoothedges="' + bufferSmoothEdges + '" bufferunits="' + ScaleBarUnits.toLowerCase() + '" />\n';
		buffString += '</SPATIALQUERY>\n';
		buffString += '<SIMPLERENDERER>\n';
		buffString += '<SIMPLEPOLYGONSYMBOL fillcolor="100,100,100" filltype="solid" transparency="0.35" boundarycolor="255,255,255" />\n';
	    buffString += '</SIMPLERENDERER>\n';
		buffString += '</LAYER>\n';
	} else if ((selectionMode==2) ||(selectionMode==3)){
		if (drawTargetLayer) {
			buffString += '<LAYER type="featureclass" name="theBufferTarget" visible="true">\n';
			buffString += '<DATASET fromlayer="' + LayerID[ActiveLayerIndex] + '" />\n';
			buffString += '<SPATIALQUERY>\n';
			buffString += '<BUFFER distance="' + bufferDistance + '" smoothedges="' + bufferSmoothEdges + '" bufferunits="' + ScaleBarUnits.toLowerCase() + '">\n';
			buffString += '<TARGETLAYER name="' + bufferTargetLayer + '" />\n';
			if (useLimitExtent) {
				// keep this within the limitExtent
				buffString += '<SPATIALQUERY>\n';
				buffString += '<SPATIALFILTER relation="area_intersection">\n';
				buffString += '<ENVELOPE maxx="' + limitRight + '" maxy="' + limitTop + '" minx="' + limitLeft + '" miny="' + 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="0.35" boundarycolor="255,255,255" />\n';
			}
		    buffString += '</SIMPLERENDERER>\n';
			buffString += '</LAYER>\n';
		}
  			buffString += '<LAYER type="featureclass" name="theBuffer" visible="true">\n';
    		buffString += '<DATASET fromlayer="' + LayerID[ActiveLayerIndex] + '" />\n';
    		buffString += '<SPATIALQUERY>\n';
      		buffString += '<BUFFER distance="' + bufferDistance + '" smoothedges="' + bufferSmoothEdges + '" 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="' + limitRight + '" maxy="' + limitTop + '" minx="' + limitLeft + '" miny="' + limitBottom + '" />\n';
			buffString += '</SPATIALFILTER>\n';
			
		}
    		buffString += '</SPATIALQUERY>\n';
    		buffString += '<SIMPLERENDERER>\n';
      		buffString += '<SIMPLEPOLYGONSYMBOL fillcolor="100,100,100" filltype="solid" transparency="0.5" boundarycolor="255,255,255" />\n';
    		buffString += '</SIMPLERENDERER>\n';
  			buffString += '</LAYER>\n';
	} else {
	  // buffer a user shape
		// not implemented
	}
	
	return buffString;

}*/
