// CivXplorer Advanced Layer Grouping
// Suzanne Fliege
// Red Horse Geographics, LLC
// contains functions to supported grouped layers

//******************************************************************************
// master variables - don't change here
groupedlayersAvailable = true;
var groupedName = new Array();  // alias to display in layer menu
var groupedID = new Array();  // expects format to be "grouped-xxxxxxxx"
var groupedType = new Array();  // use "overlay" "orthoimg" "optional" (if using UserMgmt module, can also use "overlay-restricted", "orthoimg-restricted", "optional-restricted" and "subgroup-restricted")
var groupedIDs = new Array();  // list of layers by ID in AXL, or subgroup name(s)
var groupedVisible = new Array(); // whether group starts as visible (optional only!), if not specified, then false by default
var groupedExpand = new Array(); // whether group starts expanded in menu (optional only!), if not specified then false by default
//******************************************************************************
// SUBGROUPS are only allowed for OPTIONAL layers!!!  Not overlay or orthoimg!!!
//******************************************************************************


//******************************************************************************
// overlays and imagery
//******************************************************************************
groupIndexCount = 0;
groupedName[groupIndexCount] = "FEMA with Aerial";  // alias to display in layer menu
groupedID[groupIndexCount] = "grouped-fema";  // expects format to be "grouped-xxxxxxxx"
groupedType[groupIndexCount] = "orthoimg";  // use "overlay" "orthoimg" or "optional"
groupedIDs[groupIndexCount] = new Array("overlay-fema","orthoimg-2007sid");  // list of layers in the group, by ID value from AXL

if ((siteName == "ENVSERVICES") || (siteName == "ENVSERVICES-WELLS")  || (siteName == "PUBSERVICES-HYDRANTS")) {
	groupIndexCount += 1;
	groupedName[groupIndexCount] = "County DEM";  // alias to display in layer menu
	groupedID[groupIndexCount] = "grouped-countydem";  // expects format to be "grouped-xxxxxxxx"
	groupedType[groupIndexCount] = "orthoimg";  // use "overlay" "orthoimg" or "optional"
	groupedIDs[groupIndexCount] = new Array("restricted-county-dem1","restricted-county-dem2");  // list of layers in the group, by ID value from AXL
}

//******************************************************************************
// optionals
//******************************************************************************
groupIndexCount += 1;
groupedName[groupIndexCount] = "Parcel Information";
groupedID[groupIndexCount] = "grouped-parcel";
groupedType[groupIndexCount] = "optional";
groupedIDs[groupIndexCount] = new Array("grouped-parcels","grouped-txtaddresses","grouped-txtid","grouped-txtowners");
groupedVisible[groupIndexCount] = true;
groupedExpand[groupIndexCount] = false;

groupIndexCount += 1;
groupedName[groupIndexCount] = "Lots and Dimensions";    // alias to display in overlay dropdown
groupedID[groupIndexCount] = "grouped-dimensions";  // expects format to be "grouped-xxxxxxxx"
groupedType[groupIndexCount] = "optional";  // use "overlay" "orthoimg" or "optional"
groupedIDs[groupIndexCount] = new Array("grouped-dims-text","grouped-dims-lots");
groupedVisible[groupIndexCount] = false;
groupedExpand[groupIndexCount] = false;

groupIndexCount += 1;
groupedName[groupIndexCount] = "Water Features";    // alias to display in overlay dropdown
groupedID[groupIndexCount] = "grouped-water";  // expects format to be "grouped-xxxxxxxx"
groupedType[groupIndexCount] = "optional";  // use "overlay" "orthoimg" or "optional"
groupedIDs[groupIndexCount] = new Array("grouped-city-water","grouped-city-hydroname","grouped-wetlands");
groupedVisible[groupIndexCount] = true;
groupedExpand[groupIndexCount] = false;

groupIndexCount += 1;
groupedName[groupIndexCount] = "Transportation";
groupedID[groupIndexCount] = "grouped-transport";
groupedType[groupIndexCount] = "optional";
groupedIDs[groupIndexCount] = new Array("grouped-city-streets","grouped-city-streetnames","grouped-busroute","grouped-busstops","grouped-pubpark","grouped-privpark","grouped-pavement");
groupedVisible[groupIndexCount] = true;
groupedExpand[groupIndexCount] = false;

groupIndexCount += 1;
groupedName[groupIndexCount] = "Topographic Contours";    // alias to display in overlay dropdown
groupedID[groupIndexCount] = "grouped-contours";  // expects format to be "grouped-xxxxxxxx"
groupedType[groupIndexCount] = "optional";  // use "overlay" "orthoimg" or "optional"
groupedIDs[groupIndexCount] = new Array("grouped-contours10","grouped-contours2");
groupedVisible[groupIndexCount] = false;
groupedExpand[groupIndexCount] = false;

groupIndexCount += 1;
groupedName[groupIndexCount] = "County-wide Data";    // alias to display in overlay dropdown
groupedID[groupIndexCount] = "grouped-county";  // expects format to be "grouped-xxxxxxxx"
groupedType[groupIndexCount] = "optional";  // use "overlay" "orthoimg" or "optional"
groupedIDs[groupIndexCount] = new Array("grouped-county-municipalbounds","grouped-county-streets","grouped-county-streetnames","grouped-county-water","grouped-county-hydroname");
groupedVisible[groupIndexCount] = true;
groupedExpand[groupIndexCount] = false;

groupIndexCount += 1;
groupedName[groupIndexCount] = "Storm Water Utilities";    // alias to display in overlay dropdown
groupedID[groupIndexCount] = "grouped-stormwater";  // expects format to be "grouped-xxxxxxxx"
groupedType[groupIndexCount] = "optional";  // use "overlay" "orthoimg" or "optional"
groupedIDs[groupIndexCount] = new Array("grouped-storm","grouped-stormpipe");
groupedVisible[groupIndexCount] = false;
groupedExpand[groupIndexCount] = false;

if ((siteName == "ENVSERVICES") || (siteName == "ENVSERVICES-WELLS")  || (siteName == "PUBSERVICES-HYDRANTS")) {
	groupIndexCount += 1;
	groupedName[groupIndexCount] = "Sanitary Utilities";    // alias to display in overlay dropdown
	groupedID[groupIndexCount] = "grouped-sanitary";  // expects format to be "grouped-xxxxxxxx"
	groupedType[groupIndexCount] = "optional";  // use "overlay" "orthoimg" or "optional"
	groupedIDs[groupIndexCount] = new Array("restricted-sanman","restricted-sanman2","restricted-sanpipes");
	groupedVisible[groupIndexCount] = false;
	groupedExpand[groupIndexCount] = false;
	
	groupIndexCount += 1;
	groupedName[groupIndexCount] = "Water Utilities";    // alias to display in overlay dropdown
	groupedID[groupIndexCount] = "grouped-watutil";  // expects format to be "grouped-xxxxxxxx"
	groupedType[groupIndexCount] = "optional";  // use "overlay" "orthoimg" or "optional"
	groupedIDs[groupIndexCount] = new Array("restricted-watpipes","restricted-watanno");
	groupedVisible[groupIndexCount] = false;
	groupedExpand[groupIndexCount] = false;

	groupIndexCount += 1;
	groupedName[groupIndexCount] = "Rare Species";    // alias to display in overlay dropdown
	groupedID[groupIndexCount] = "grouped-rarespecies";  // expects format to be "grouped-xxxxxxxx"
	groupedType[groupIndexCount] = "optional";  // use "overlay" "orthoimg" or "optional"
	groupedIDs[groupIndexCount] = new Array("restricted-raresppt","restricted-raresppl");
	groupedVisible[groupIndexCount] = false;
	groupedExpand[groupIndexCount] = false;
}
if (siteName == "ENVSERVICES-WELLS") {
	groupIndexCount += 1;
	groupedName[groupIndexCount] = "Wells";    // alias to display in overlay dropdown
	groupedID[groupIndexCount] = "grouped-wells";  // expects format to be "grouped-xxxxxxxx"
	groupedType[groupIndexCount] = "optional";  // use "overlay" "orthoimg" or "optional"
	groupedIDs[groupIndexCount] = new Array("restricted-pwells","restricted-mwells","restricted-wellpermit","restricted-twells");
	groupedVisible[groupIndexCount] = false;
	groupedExpand[groupIndexCount] = false;
	
	groupIndexCount += 1;
	groupedName[groupIndexCount] = "Capture Zones";    // alias to display in overlay dropdown
	groupedID[groupIndexCount] = "grouped-capzones";  // expects format to be "grouped-xxxxxxxx"
	groupedType[groupIndexCount] = "optional";  // use "overlay" "orthoimg" or "optional"
	groupedIDs[groupIndexCount] = new Array("restricted-1yrcap","restricted-5yrcap","restricted-10yrcap");
	groupedVisible[groupIndexCount] = false;
	groupedExpand[groupIndexCount] = false;
}

//******************************************************************************
// do not edit below here
//******************************************************************************
// get indexes for group layers, set visibility and expansion if not already
var groupedIndexes = new Array();
var groupedLayerVisible = new Array();
var groupedHasAvailableLayers = new Array();
var groupedVisibleAtStart = new Array();
function getGroupedIndexes() {
	for (var j=0;j<groupedIDs.length;j++) {
		var tempIdxAry = new Array();
		var tempVisAry = new Array();
		for (var k=0;k<groupedIDs[j].length;k++) {
			for (var i=0;i<LayerID.length;i++) {
				if (groupedIDs[j][k] == LayerID[i]) {
					tempIdxAry[k] = i;
					tempVisAry[k] = LayerVisibleAtStart[i];
				}
			}
		}
		groupedIndexes[j] = tempIdxAry;
		groupedLayerVisible[j] = tempVisAry;
		if (groupedVisible[j] == null) groupedVisible[j] = false;
		if (groupedExpand[j] == null) groupedExpand[j] = false;
		groupedVisibleAtStart[j] = groupedVisible[j];
	}
	updateGroupedLayerVisibility();
	return false;
}

// reset group visibility from "home" button
function resetGroupedOptionalVisibility() {
	for (var j=0;j<groupedIDs.length;j++) {
		groupedVisible[j] = groupedVisibleAtStart[j];
		groupedExpand[j] = false;
		var tempVisAry = new Array();
		for (var k=0;k<groupedIDs[j].length;k++) {
			tempVisAry[k] = LayerVisibleAtStart[groupedIndexes[j][k]];
		}
		groupedLayerVisible[j] = tempVisAry;
	}
	updateGroupedLayerVisibility();
	return false;
}

// add grouped layers to TOC lists
function AddGroupedLayers() {
	for (i=0;i<groupedID.length;i++) {
		if ((groupedType[i] == "overlay") || (groupedType[i] == "orthoimg")) {
			tocOverlayList[tocOverlayList.length] = new Array(groupedName[i],groupedID[i],groupedType[i],groupedID[i]);
			groupedVisible[i] = false;
		} else { // optional
			if (groupedType[i] == "optional") tocOptionalList[tocOptionalList.length] = new Array(groupedName[i],groupedID[i],groupedID[i],"true");
		} // don't load restricted groups
	}
	return false;
}

// turn off all grouped overlay layers
function TurnGroupOverlaysOff() {
	for (var j=0;j<groupedID.length;j++) {
		if ((groupedType[j] == "overlay") || (groupedType[j] == "orthoimg")) {
			for (var k=0;k<groupedIndexes[j].length;k++) {
				LayerVisible[groupedIndexes[j][k]] = "false";
			}
		}
	}
	return false;
}

// turn on specified group overlay layer
function TurnGroupOverlayOn(theGroup) {
	for (var i=0;i<groupedID.length;i++) {
		if (groupedID[i] == theGroup) {
			tocOverlayCurrent = theGroup;
			tocOverlayCurrentType = groupedType[i];
			for (var k=0;k<groupedIndexes[i].length;k++) {
				LayerVisible[groupedIndexes[i][k]] = "true";
			}
		}
	}
	return false;
}

// turn on specified group optional layer
function TurnGroupOptionalOn(theGroup) {
	for (var i=0;i<groupedID.length;i++) {
		if (groupedID[i] == theGroup) {
			groupedVisible[i] = true;
			updateGroupedLayerVisibility();
		}
	}
	return false;
}

// add layers to optional list
function getOptionalGroupList(theOptionalIndex) {
	var tempString = ""
	for (var j=0;j<groupedID.length;j++) {
		if (groupedID[j] == tocOptionalList[theOptionalIndex][1]) { var tempGroupIdx = j; }
	}
	var tempGroupIndexes = groupedIndexes[tempGroupIdx];
	if (groupedHasAvailableLayers[tempGroupIdx]) {
		// main layer heading
		tempString += '<tr><td class="textBold2" align="center" width="8"><input type="checkbox" onclick="JavaScript:setGroupVisibility('+tempGroupIdx+',this.checked);" class="inputNormal2" id="OptionalLayerList" value="group:' + tempGroupIdx + '" ';
		if (groupedVisible[tempGroupIdx] == true) tempString += 'checked';
		tempString += '>';
		// expanded group
		if (groupedExpand[tempGroupIdx]) {
			tempString += '<td width="24"><img src="images/folderopened.jpg" align="top" onClick="JavaScript:groupedExpand[\'' + tempGroupIdx + '\']=false;createTOC();" class="toolButton"></td>';
			tempString += '<td class="textBold2" align="left" colspan="2">' + groupedName[tempGroupIdx] + '</td></tr>';
			// group layers
			for (var l=0;l<tempGroupIndexes.length;l++) {
				if (LayerAvailable[tempGroupIndexes[l]] == "true") {
					tempString += '<tr><td></td><td width="24" align="right"><img src="images/foldercontent.gif" align="middle"></td>';
					tempString += '<td class="textNormal2" width="8"><input type="checkbox" onclick="JavaScript:setGroupLayerVisibility('+tempGroupIdx+','+l+',this.checked);" class="inputNormal2" id="OptionalLayerList" value="grouplayer:' + tempGroupIndexes[l] + '" ';
					if (groupedLayerVisible[tempGroupIdx][l] == "true") tempString += 'checked';
					tempString += '></td>';
					tempString += '<td class="textNormal2" align="left" width="' + (sidebarWidth-8-24-8-20) + '">' + LayerName[tempGroupIndexes[l]] + '</td>';	
					tempString += '</tr>';
				}
			}
		} else {// not expanded group
			tempString += '<td width="24"><img src="images/folderclosed.jpg" align="top" onClick="JavaScript:groupedExpand[\'' + tempGroupIdx + '\']=true;createTOC();" class="toolButton"></td>';
			tempString += '<td class="textBold2" align="left" colspan="2" width="' + (sidebarWidth-8-24-20) + '">' + groupedName[tempGroupIdx] + '</td></tr>';
		}
	}
	return tempString;
}

// set visibility variables for group
function setGroupVisibility(idxGroup,isOn) {
	groupedVisible[idxGroup] = isOn;
	updateGroupedLayerVisibility();
	if (mapAutoUpdate) {
		UpdateLayers();
	}
	return false;
}

// set visibility variables for group layer
function setGroupLayerVisibility(idxGroup,idxGroupLayer,isOn) {
	if (isOn) {
		groupedLayerVisible[idxGroup][idxGroupLayer] = "true";
	} else {
		groupedLayerVisible[idxGroup][idxGroupLayer] = "false";
	}
	updateGroupedLayerVisibility();
	if (mapAutoUpdate) {
		UpdateLayers();
	}
	return false;
}

// update all (sub)group layer visibilities after (sub)group visibility change
function updateGroupedLayerVisibility() {
	for (var i=0;i<groupedID.length;i++) {
		if (groupedType[i] == "optional") {
			var tempGroupHasData = false;
			var tempGroupIndexes = groupedIndexes[i];
			var tempGroupIDs = groupedIDs[i];
			for (var j=0;j<tempGroupIndexes.length;j++) {
				if (LayerAvailable[tempGroupIndexes[j]] == "true") tempGroupHasData = true;
				if ((groupedVisible[i]) && (groupedLayerVisible[i][j]) == "true") { // group and layer are on, turn on layer on map
					LayerVisible[tempGroupIndexes[j]] = "true";
				} else {
					LayerVisible[tempGroupIndexes[j]] = "false";
				}
			}
			groupedHasAvailableLayers[i] = tempGroupHasData;
		}
	}
	return false;
}
