// CivXplorer Select Features in a layer, by specified feature in another layer

// Suzanne Fliege
// PlanSight, LLC

// contains functions for zooming to a nested set of areas, defined by a single master map layer.
selectByAreaAvailable = true;
var SelectAreaMenuText = new Array(); // text for menu
var SelectAreaInfoText = new Array(); // info string for user form
var SelectAreaLayerID = new Array(); // map layer to select with
var SelectTargetLayerID = new Array();  // map layer to select on (must have fieldNameList and fieldNameAliases arrays in CXLayerSettings.js!!!)
var SelectAreaField = new Array(); // field(s) to zoom query (one or many, include SDE prefixes!!) MAXIMUM 4 FIELDS!
var SelectAreaAlias = new Array(); // field aliases for user to see (must correspond to ZoomAreaFields array)
var SelectAreaIsString = new Array(); // whether the field is string or numeric (true if string)
var SelectAreaValues = new Array(); // values for user to choose from (if left empty, then samples retrieved from layer data)
var SelectAreaIndex = 0;

// Custom values for the select-by tool:
SelectAreaMenuText[0] = "Select Parcels By Plat";
SelectAreaInfoText[0] = "Select Parcels That Are In This Plat";
SelectAreaLayerID[0] = "grouped-plat-plats";
SelectTargetLayerID[0] = "grouped-parcels-norow";
SelectAreaField[0] = "PLAT_NAME";
SelectAreaAlias[0] = "Plat Name";
SelectAreaIsString[0] = true;
SelectAreaValues[0] = new Array();

// Custom values for the select-by tool:
SelectAreaMenuText[1] = "Select Parcels By Municipality";
SelectAreaInfoText[1] = "Select Parcels That Are In This Municipality";
SelectAreaLayerID[1] = "optional-municipality";
SelectTargetLayerID[1] = "grouped-parcels-norow";
SelectAreaField[1] = "NAME";
SelectAreaAlias[1] = "Municipality Name";
SelectAreaIsString[1] = true;
SelectAreaValues[1] = new Array();

// Custom values for the select-by tool:
SelectAreaMenuText[2] = "Select Parcels By Watershed";
SelectAreaInfoText[2] = "Select Parcels That Are In This Watershed";
SelectAreaLayerID[2] = "grouped-water-watershed";
SelectTargetLayerID[2] = "grouped-parcels-norow";
SelectAreaField[2] = "MINNAME";
SelectAreaAlias[2] = "Minor Watershed Name";
SelectAreaIsString[2] = true;
SelectAreaValues[2] = new Array();

//******************************************************************************
// do not edit below here
//******************************************************************************
function addSelectByAreaMenus() {
	for (var i=0;i<SelectAreaMenuText.length;i++) {
		document.writeln(createMenuItem("menuItem_SelectByArea"+i,"SelectByArea('"+i+"');",SelectAreaMenuText[i]));
	}
}

// check that current zoom-to layer has a value list, retrieve samples if not
function SelectByArea(selectByIndex) {
	var theString = '';
	SelectAreaIndex = parseInt(selectByIndex);
	// check if the current zoom layer has a value list
	if ((SelectAreaValues[SelectAreaIndex][0] == null) || (SelectAreaValues[SelectAreaIndex][0] == "")) {
		document.getElementById('LoadData').style.visibility = "visible";
		// ask for user to wait
		theString += '<table cellpadding="5" cellspacing="0" width="100%">';
		theString += '<tr><td class="header1" width="100%" align="right"><a href="#" onmousedown="hideAttributeDisplay();"><img src="images/CXclose.gif" align="top"></a></td></tr>';
		theString += '<tr><td class="header1" align="center">Select By Area/Landmark</td></tr>';
		theString += '<tr><td class="toolInfo1" align="center">Retrieving List...</td></tr>';
		theString += '</table>';
		setupInputFormSidebar();
		updateContent("cxAttributeBottom",theString);
		// write and send request for samples
		sampleField = SelectAreaField[SelectAreaIndex];
		var sampleString = writeFieldSample(SelectAreaLayerID[SelectAreaIndex],sampleField,5000);
		sendToServer(imsQueryURL,sampleString,45);
	} else {
		writeSelectByAreaForm();
	}
}

// writes specific form for zoom to landmark
function writeSelectByAreaForm() {
	var theString = "";
	theString += '<form name="SelectAreaStuff" onsubmit="doSelectByArea();return false;">';
	theString += '<table cellpadding="5" cellspacing="0" width="' + (sidebarWidth-10) + '">';
	theString += '<tr><td class="header1" width="100%" align="right"><a href="#" onmousedown="hideAttributeDisplay();"><img src="images/CXclose.gif" align="top"></a></td></tr>';
	theString += '<tr><td class="header1" align="center">' + SelectAreaMenuText[SelectAreaIndex] + '</td></tr>';
	theString += '<tr><td class="toolInfo2" align="center">' + SelectAreaInfoText[SelectAreaIndex] + ':</td></tr>';
	theString += '</table>';
	// add in dropdown(s) for values
	theString += '<table cellpadding="5" cellspacing="0" width="100%">';
	var tempAreaValues = SelectAreaValues[SelectAreaIndex];
	theString += '<tr><td class="toolInfo1" align="left">';
	theString += '<select name="AreaName" class="tocLayers">';
	theString += '<option selected value="">' + SelectAreaAlias[SelectAreaIndex];
	for (var i=0;i<tempAreaValues.length;i++) {
		theString += '<option value="' + tempAreaValues[i] + '">' + tempAreaValues[i];
	}
	theString += ' </select>';
	theString += '</td></tr>';
	theString += '<tr><td align="left"><input class="toolInfo1" type="submit" value="Find It!" name="submit"></td></tr>'; 
	theString += '</table>';
	theString += '</form>';
	setupInputFormSidebar();
	updateContent("cxAttributeBottom",theString);
	return false;
}

// process query specifically for twp search/zoom
function sendSelectAreaQueryString(tempString) {
	var newString = tempString;
	newString = fixSingleQuotes(newString);
	newString = swapQuotes(newString);
	newString = makeXMLsafe(newString);
	document.getElementById('LoadData').style.visibility = "visible";
	// set buffer variables
	if (bufferAllowNegatives) {
		bufferDistance = 1.0;
		bufferDistanceIsNegative = true;
	} else {
		bufferDistance = 0.001;
		bufferDistanceIsNegative = false;
	}
	bufferedSelection = newString;
	setActiveLayer(SelectAreaLayerID[SelectAreaIndex],false,false);
	bufferedLayer = LayerID[ActiveLayerIndex];
	bufferedLayerIndex = ActiveLayerIndex;
	bufferedLayerType = LayerTypeData[ActiveLayerIndex];
	setActiveLayer(SelectTargetLayerID[SelectAreaIndex],false,false);
	bufferTargetLayer = LayerID[ActiveLayerIndex];
	bufferTargetLayerIndex = ActiveLayerIndex;
	clickFunction("nothing");	  
	sendToServer(imsQueryURL,writeEnvelopeBufferXML(),11);
}

// send user zoom-to request
function doSelectByArea() {
	var theString = '';
	if (document.SelectAreaStuff.AreaName.value != "") {
		if (SelectAreaIsString[SelectAreaIndex]) {
			theString += SelectAreaField[SelectAreaIndex] + ' LIKE ' + dQuote + document.SelectAreaStuff.AreaName.value + dQuote;
		} else {
			theString += SelectAreaField[SelectAreaIndex] + ' = ' + document.SelectAreaStuff.AreaName.value;
		}
	}
	if (theString == '') {	
		alert("You must specify an Area to Zoom To!");
		return false;
	} else {
		clickFunction("nothing");
		hideAllSidebars();
		sendSelectAreaQueryString(theString);
	}
}
