// Following structures support the grouping of Layers.  This should be located
// in the ArcIMSparams.js, but becuase the header loads earlier, it is all located 
// in the script that supports only the group layering.

//group layers (for one set only) list the layers to group together, each being
//a list in the array. groupName is the name to give the group the TOC.

// A reworking of the standard grouplayers implementation to support multiple
// groups of layers (as opposed to a single group).  Simple an array of arrays.
// A little more difficult to work with, but gives greater flexibility.  CAT.
// Structure - there is a top level array, groupManager that has as many entries
//    as there are groups.
//    Then there is a groupLayerInfo array for each of the Groups, including the name, whether it is visible, and what its layers are
//    Finally there is a groupLayers array for each of the layers in a Group.

  // The first 'group' in the array is simply 'default' which lists all the standard layers
  // as outlined in the site AXL file.
  
  var groupManager = new Array(6);    // let's give the system a clue and dimension an array with an exact number of layers.
  var activeGroup = "";

  // The default group - has no real information in it.
  var groupVisible = true;
  var groupName = "Select a QuickMap...";
  var groupLayers = new Array();
  var groupLayerInfo = new Array();
  groupLayers[0] = "Points of Interest";
  groupLayers[1] = "Parcel Road Names";
  groupLayers[2] = "Parcels Clear";    
  groupLayers[3] = "Parcels Buffer";  
  groupLayers[4] = "Parcels";
  groupLayers[5] = "Addresses";
  groupLayers[6] = "Road Names";
  groupLayers[7] = "Buildings";
  groupLayers[8] = "Roads";
  groupLayers[9] = "Enfield Roads";
  groupLayers[10] = "Area Roads";
  groupLayers[11] = "Area Towns";
  groupLayers[12] = "Water Bodies";
  groupLayers[13] = "Area Water";
  groupLayers[14] = "Streams";
  groupLayers[15] = "BoundaryPolygon";
  groupLayers[16] = "Enfield Town";
  groupLayers[17] = "Parcel Road Names Anno";
  groupLayers[18] = "Addresses Anno";
  groupLayers[19] = "Road Names";
  groupLayers[20] = "Road Names Anno";
  groupLayers[21] = "Major Water Bodies";
  groupLayerInfo[0] = groupVisible;
  groupLayerInfo[1] = groupName;
  groupLayerInfo[2] = groupLayers;
  groupManager[0] = groupLayerInfo;

  // Now set up each of the group arrays
  //   Group 2 - Parcel Mapping 
  groupVisible = false;
  groupName = "Parcel Mapping";
  groupLayers = new Array();
  groupLayerInfo = new Array();
  groupLayers[0] = "Points of Interest";
  groupLayers[1] = "Parcel Road Names";
  groupLayers[2] = "Parcels Clear";    
  groupLayers[3] = "Parcels Buffer";  
  groupLayers[4] = "Parcels";
  groupLayers[5] = "Major Water Bodies";
  groupLayers[6] = "Road Names";
  groupLayers[7] = "Buildings";
  groupLayers[8] = "Roads";
  groupLayers[9] = "Enfield Roads";
  groupLayers[10] = "Area Roads";
  groupLayers[11] = "Area Towns";
  groupLayers[12] = "Water Bodies";
  groupLayers[13] = "Area Water";
  groupLayers[14] = "Streams";
  groupLayers[15] = "BoundaryPolygon";
  groupLayers[16] = "Enfield Town";
  groupLayers[17] = "Parcel Road Names Anno";
  groupLayers[18] = "Easements";
  groupLayers[19] = "Road Names";
  groupLayers[20] = "Road Names Anno";
  groupLayers[21] = "Parcel Dimension";
  groupLayers[22] = "Parcel Dimension Anno";
  groupLayers[23] = "Parcel Easement Text";
  groupLayers[24] = "Parcel Easement Text Anno";
  groupLayers[25] = "Parcel Frontage";
  groupLayers[26] = "Parcel Frontage Anno";
  groupLayers[27] = "Map - Lot Number";
  groupLayers[28] = "Map - Lot Number Anno";
  groupLayers[29] = "Parcel IDs";
  groupLayers[30] = "";
  groupLayers[31] = "";
  groupLayers[32] = "";
  groupLayerInfo[0] = groupVisible;
  groupLayerInfo[1] = groupName;
  groupLayerInfo[2] = groupLayers;
  groupManager[1] = groupLayerInfo;
  
  //   Group 3 - Planimetric Base Map
  groupVisible = false;
  groupName = "Planimetric Base Map";
  groupLayers = new Array();
  groupLayerInfo = new Array();
  groupLayers[0] = "Area Towns";
  groupLayers[0] = "Points of Interest";
  groupLayers[1] = "Parcel Road Names";
  groupLayers[2] = "Parcels Clear";    
  groupLayers[3] = "Parcels Buffer";  
  groupLayers[4] = "Parcels";
  groupLayers[5] = "Addresses";
  groupLayers[6] = "Road Names";
  groupLayers[7] = "Buildings";
  groupLayers[8] = "Roads";
  groupLayers[9] = "Enfield Roads";
  groupLayers[10] = "Area Roads";
  groupLayers[11] = "Area Towns";
  groupLayers[12] = "Water Bodies";
  groupLayers[13] = "Area Water";
  groupLayers[14] = "Streams";
  groupLayers[15] = "BoundaryPolygon";
  groupLayers[16] = "Driveways";
  groupLayers[17] = "Trails";
  groupLayers[18] = "Trees";
  groupLayers[19] = "Guide Rails";
  groupLayers[20] = "Hedges";
  groupLayers[21] = "Parking";
  groupLayers[22] = "Walls";
  groupLayers[21] = "Railroads";
  groupLayers[21] = "Fences";
  groupLayers[22] = "Utility Points";
  groupLayers[23] = "Fire Hydrants";
  groupLayers[24] = "Enfield Town";
  groupLayers[25] = "Major Water Bodies";
  groupLayerInfo[0] = groupVisible;
  groupLayerInfo[1] = groupName;
  groupLayerInfo[2] = groupLayers;
  groupManager[2] = groupLayerInfo;
  

    // Group 4 - Parcels With Orthos 
  var groupVisible = true;
  var groupName = "Aerial Photography - 2006";
  var groupLayers = new Array();
  var groupLayerInfo = new Array();
  groupLayers[0] = "Points of Interest";
  groupLayers[1] = "Parcel Road Names";
  groupLayers[2] = "Parcels Clear";    
  groupLayers[3] = "Parcels Buffer";  
  groupLayers[4] = "Parcels";
  groupLayers[5] = "Aerial Photography 2006";
  groupLayers[6] = "Road Names";
  groupLayers[7] = "Parcels-Aerials";
  groupLayers[8] = "Map - Lot Number-Aerials";
  groupLayers[9] = "Enfield Roads";
  groupLayers[10] = "Area Roads";
  groupLayers[11] = "Area Towns";
  groupLayers[12] = "Water Bodies";
  groupLayers[13] = "Area Water";
  groupLayers[14] = "Streams";
  groupLayers[15] = "BoundaryPolygon";
  groupLayers[16] = "Enfield Town";
  groupLayers[17] = "";
  groupLayers[18] = "";
  groupLayers[19] = "";
  groupLayerInfo[0] = groupVisible;
  groupLayerInfo[1] = groupName;
  groupLayerInfo[2] = groupLayers;
  groupManager[3] = groupLayerInfo;
  
  
  
    

    // Group 5 - Zoning Map 
  var groupVisible = true;
  var groupName = "Topography";
  var groupLayers = new Array();
  var groupLayerInfo = new Array();
  groupLayers[0] = "Points of Interest";
  groupLayers[1] = "Parcel Road Names";
  groupLayers[2] = "Parcels Clear";    
  groupLayers[3] = "Parcels Buffer";  
  groupLayers[4] = "Parcels";
  groupLayers[5] = "Major Water Bodies";
  groupLayers[6] = "Road Names";
  groupLayers[7] = "Buildings";
  groupLayers[8] = "Roads";
  groupLayers[9] = "Enfield Roads";
  groupLayers[10] = "Area Roads";
  groupLayers[11] = "Area Towns";
  groupLayers[12] = "Water Bodies";
  groupLayers[13] = "Area Water";
  groupLayers[14] = "Streams";
  groupLayers[15] = "BoundaryPolygon";
  groupLayers[16] = "Roads";
  groupLayers[17] = "Contours 2ft";
  groupLayers[18] = "Contours 10ft";
  groupLayers[19] = "Spot Elevation";
  groupLayers[19] = "Spot Elevation Label";
  groupLayers[20] = "Enfield Town";
  groupLayerInfo[0] = groupVisible;
  groupLayerInfo[1] = groupName;
  groupLayerInfo[2] = groupLayers;
  groupManager[4] = groupLayerInfo;
  
      // Group 6 - Elections Map 
  var groupVisible = true;
  var groupName = "Sewer and Drainage System";
  var groupLayers = new Array();
  var groupLayerInfo = new Array();
  groupLayers[0] = "Points of Interest";
  groupLayers[1] = "Parcel Road Names";
  groupLayers[2] = "Parcels Clear";    
  groupLayers[3] = "Parcels Buffer";  
  groupLayers[4] = "Parcels";
  groupLayers[5] = "";
  groupLayers[6] = "Road Names";
  groupLayers[7] = "Buildings";
  groupLayers[8] = "Roads";
  groupLayers[9] = "Enfield Roads";
  groupLayers[10] = "Area Roads";
  groupLayers[11] = "Area Towns";
  groupLayers[12] = "Water Bodies";
  groupLayers[13] = "Area Water";
  groupLayers[14] = "Streams";
  groupLayers[15] = "BoundaryPolygon";
  groupLayers[16] = "Roads";
  groupLayers[17] = "Sewer Manholes";
  groupLayers[18] = "Underground Pipes";
  groupLayers[19] = "Catch Basins";
  groupLayers[20] = "Drain Manholes";
  groupLayers[21] = "Enfield Town";
  groupLayers[21] = "Major Water Bodies";
  groupLayerInfo[0] = groupVisible;
  groupLayerInfo[1] = groupName;
  groupLayerInfo[2] = groupLayers;
  groupManager[5] = groupLayerInfo;
 

    var groupVisible = true;
  var groupName = "Zoning";
  var groupLayers = new Array();
  var groupLayerInfo = new Array();
  groupLayers[0] = "Points of Interest";
  groupLayers[1] = "Parcel Road Names";
  groupLayers[2] = "Parcels Clear";    
  groupLayers[3] = "Parcels Buffer";  
  groupLayers[4] = "Parcels";
  groupLayers[5] = "Addresses";
  groupLayers[6] = "Road Names";
  groupLayers[7] = "Buildings";
  groupLayers[8] = "Roads";
  groupLayers[9] = "Enfield Roads";
  groupLayers[10] = "Area Roads";
  groupLayers[11] = "Area Towns";
  groupLayers[12] = "Water Bodies";
  groupLayers[13] = "Area Water";
  groupLayers[14] = "Streams";
  groupLayers[15] = "BoundaryPolygon";
  groupLayers[16] = "Enfield Town";
  groupLayers[17] = "Parcel Road Names Anno";
  groupLayers[18] = "Addresses Anno";
  groupLayers[19] = "Road Names";
  groupLayers[20] = "Road Names Anno";
  groupLayers[21] = "Major Water Bodies";
  groupLayers[22] = "Zoning";
  groupLayers[23] = "Zoning_Outlines";
  groupLayerInfo[0] = groupVisible;
  groupLayerInfo[1] = groupName;
  groupLayerInfo[2] = groupLayers;
  groupManager[6] = groupLayerInfo;  
  
  var groupVisible = true;
  var groupName = "Wet Soils/Escarpments";
  var groupLayers = new Array();
  var groupLayerInfo = new Array();
  groupLayers[0] = "Points of Interest";
  groupLayers[1] = "Parcel Road Names";
  groupLayers[2] = "Parcels Clear";    
  groupLayers[3] = "Parcels Buffer";  
  groupLayers[4] = "Parcels";
  groupLayers[5] = "Addresses";
  groupLayers[6] = "Road Names";
  groupLayers[7] = "Buildings";
  groupLayers[8] = "Roads";
  groupLayers[9] = "Enfield Roads";
  groupLayers[10] = "Area Roads";
  groupLayers[11] = "Area Towns";
  groupLayers[12] = "Water Bodies";
  groupLayers[13] = "Area Water";
  groupLayers[14] = "Streams";
  groupLayers[15] = "BoundaryPolygon";
  groupLayers[16] = "Enfield Town";
  groupLayers[17] = "Parcel Road Names Anno";
  groupLayers[18] = "Addresses Anno";
  groupLayers[19] = "Road Names";
  groupLayers[20] = "Road Names Anno";
  groupLayers[21] = "Major Water Bodies";
  groupLayers[22] = "Wet Soils";
  groupLayers[23] = "Escarpments";
  groupLayerInfo[0] = groupVisible;
  groupLayerInfo[1] = groupName;
  groupLayerInfo[2] = groupLayers;
  groupManager[7] = groupLayerInfo; 

  var groupVisible = true;
  var groupName = "Refuse Schedule";
  var groupLayers = new Array();
  var groupLayerInfo = new Array();
  groupLayers[0] = "Points of Interest";
  groupLayers[1] = "Parcel Road Names";
  groupLayers[2] = "Parcels Clear";    
  groupLayers[3] = "Parcels Buffer";  
  groupLayers[4] = "Parcels";
  groupLayers[5] = "Addresses";
  groupLayers[6] = "Road Names";
  groupLayers[7] = "Buildings";
  groupLayers[8] = "Roads";
  groupLayers[9] = "Enfield Roads";
  groupLayers[10] = "Area Roads";
  groupLayers[11] = "Area Towns";
  groupLayers[12] = "Water Bodies";
  groupLayers[13] = "Area Water";
  groupLayers[14] = "Streams";
  groupLayers[15] = "BoundaryPolygon";
  groupLayers[16] = "Enfield Town";
  groupLayers[17] = "Parcel Road Names Anno";
  groupLayers[18] = "Addresses Anno";
  groupLayers[19] = "Road Names";
  groupLayers[20] = "Road Names Anno";
  groupLayers[21] = "Major Water Bodies";
  groupLayers[22] = "Refuse Schedule";
  groupLayers[23] = "";
  groupLayerInfo[0] = groupVisible;
  groupLayerInfo[1] = groupName;
  groupLayerInfo[2] = groupLayers;
  groupManager[8] = groupLayerInfo; 

  var groupVisible = true;
  var groupName = "Voting Information Map";
  var groupLayers = new Array();
  var groupLayerInfo = new Array();
  groupLayers[0] = "Points of Interest";
  groupLayers[1] = "Parcel Road Names";
  groupLayers[2] = "Parcels Clear";    
  groupLayers[3] = "Parcels Buffer";  
  groupLayers[4] = "Parcels";
  groupLayers[5] = "Addresses";
  groupLayers[6] = "Road Names";
  groupLayers[7] = "Buildings";
  groupLayers[8] = "Roads";
  groupLayers[9] = "Enfield Roads";
  groupLayers[10] = "Area Roads";
  groupLayers[11] = "Area Towns";
  groupLayers[12] = "Water Bodies";
  groupLayers[13] = "Area Water";
  groupLayers[14] = "Streams";
  groupLayers[15] = "BoundaryPolygon";
  groupLayers[16] = "Enfield Town";
  groupLayers[17] = "Parcel Road Names Anno";
  groupLayers[18] = "Addresses Anno";
  groupLayers[19] = "Road Names";
  groupLayers[20] = "Road Names Anno";
  groupLayers[21] = "Major Water Bodies";
  groupLayers[22] = "Polling Places";
  groupLayers[23] = "Voting Districts";
  groupLayerInfo[0] = groupVisible;
  groupLayerInfo[1] = groupName;
  groupLayerInfo[2] = groupLayers;
  groupManager[9] = groupLayerInfo; 
  
  
 function checkLayer(glayerName) {
   var gName=getGroup(glayerName);
   //alert("aimsgrouplayers.js CheckLayer(): " + glayerName);
   if (gName.length==0)
      return false;
   else
      return true;
}

/*
  Function returns the group a specified layer belongs to.
  
  @param glayerName The name of a layer in question.
  @return The name of the group the layer belongs to.
  @author Cord Thomas
  */
function getGroup(glayerName) {
	  var glInfo=null;
	  var gLayers=null;
	  var gName="";
	  for (var gm=0;gm<groupManager.length;gm++) {
		 glInfo = groupManager[gm];
		 gLayers = glInfo[2];
		 gName = glInfo[1];
		 for (var gl=0;gl<gLayers.length;gl++) {
			if (glayerName == gLayers[gl]) {
			   return gName;
			   break
		}
		 }
	   }

   return "";   // This should be blank.
}

/* Returns whether a named layer is in a group. 
   @param layerName The name of hte layer in question.
   @param groupName The name of the group to search in.
*/ 
function layerInGroup(layerName, groupName) {
   var glInfo=null;
   var gLayers=null;
   var gName="";
   for (var gm=0;gm<groupManager.length;gm++) {
      glInfo = groupManager[gm];
      gName = glInfo[1];
      // If the group name is the same as the groupName then we are in the right group.
      if (gName == groupName) {
         gLayers = glInfo[2];
         for (var gl=0;gl<gLayers.length;gl++) {
            if (layerName == gLayers[gl]) {
               return true;
               break
            }
         }
      }
   }
  return false;   // This should be blank.
}

function setGroup(theVal) {
 var theName;
  if (theVal == 1) { 
    groupVisible = true
  } else { 
    groupVisible = false 
  }
  for(var ii=0;ii<layerCount;ii++) {
    theName = LayerName[ii];
    if (checkLayer(theName) == true) {
      LayerVisible[ii] = theVal;     
    }
  }
}

/* Loop through all the layers in the map, if the layer is in the
   currently active group, then it is set to visible, otherwise it is not. */
function checkGroupName(newGName) {
	//alert("New GName: " + newGName);
	//alert("First showWater: " + t.b_showWater);
	
	var blnResult = false;
  	if (((newGName == "Fire Map") || (newGName == "Police Map") || (newGName == "Highway-Engineering Map") || (newGName == "Water Department Map")) && (!t.b_showWater)){
		//alert ("Open the Password Dialog Box " );
		var UIArgs =  "dialogHeight: 150px; dialogWidth: 250px; edge: Raised; center: Yes; help: Yes; resizable: Yes; status: No;";
    		if (window.showModalDialog) {
			blnResult = window.showModalDialog("SecureLogin.htm","", UIArgs);
			}
			
	t.b_showWater = blnResult;
	//alert("b_showWater: " + t.b_showWater);
    } // if newGname
	
	else {  
	//alert ("It's not a password protected layer.. continue");
	blnResult = true;
	
	}
  
  return blnResult;
}

function updateGroupLayers() {

	  var j = 0;
	  var groupFromLayer="";
	  
	  for (var i=0;i<t.layerCount;i++) {
		if (layerInGroup(t.LayerName[i], activeGroup)) {
		  // alert (t.LayerName[i] + '  is visible');
		  
		  if (((t.LayerName[i] == "") || (t.LayerName[i] == "")) && (!t.b_showWater)){
		 
			}else{
		  		t.LayerVisible[i] = 1;
			}
		} else {
		  t.LayerVisible[i] = 0;
		}
	  }
	  t.sendMapXML();
}


//*  MB:  This function is used if the setLayers was called from an autogenerated 
//        combobox
 function setLayers (formListName) {
	 var newGName = eval("document." + formListName + ".value");
	 var isOk = checkGroupName(newGName);
	 
	 if (isOk){
		 activeGroup = newGName
		 if (activeGroup!="Default") {
			updateGroupLayers();
		 }
	 }
 }

//*  MB:  This function is used if the setLayers was called from an image link button
// function setLayers (layerName) {
//     
//     // alert (layerName)
//	 activeGroup = (layerName);
//	 
//	 // alert (activeGroup)
//	 	 
//     if (activeGroup!="Default") {
//        updateGroupLayers();
//     }
// }
function checkPassword(guess)
//We are hard-coding the password in this javascript because it's 
//an easy way to hide it from all users (unless they are very sophisticated)
//The script will be loaded with a SRC attribute, and will be in modal page,
//so "view source" is not available.
{
 var delPassword = "enfieldadmin";
 if (guess == delPassword)
 	return true;
 else
 	return false;
}

