		
// set global variables
		activeLayer = null;
		LayerObj	= new Array();
		LabelObj	= new Array();
		Theme =  new Array();
		Abstract = new Array();
		Security = new Array();
		User = new Array();
		Pass = new Array();
		Url = new Array();
		Name = new Array();
		Srs = new Array();
		Sld =  new Array();
		SldLabels =  new Array();
		Opac = new Array();
		Ogc = new Array();
		TitleText = new Array();
		Vis = new Array();
		Labels = new Array();
		Leg = new Array();
		Style = new Array();
		Zindex = new Array();
		selectedStyle = new Array();
		Gfi = new Array();
		Status = new Array();
		Plotted = new Array();
		layNames =  new Array();
		Format = new Array();
		MinzmLayers = new Array();
		MaxzmLayers =  new Array();
		MinzmLabels = new Array();
		MaxzmLabels =  new Array();
		LayerAbstract = new Array();
		sldLayerName = new Array();
		LayerBbox = new Array();
		LayerBounds = new Array();
		LayerType = new Array();
		LayerTiled =  new Array();
		Attribution = new Array();

function loadAllBasemaps()
{
	// baseMapsList = ['GoogleMaps', 'GoogleHills', 'GoogleHybrid', 'GoogleSat', 'OpenStreetMap', 'NearMap']; 
	for (var i=0; i<baseMapsList.length; i++)
	{
		// ------ Build the Google Hybrid map
		if(baseMapsList[i] == 'GoogleHybrid')
		{
			googleHyb = new OpenLayers.Layer.Google
			( 	"GoogleHyb" , 
				{
					type: G_HYBRID_MAP, 
					sphericalMercator: spMerc
				});
			googleHyb.addOptions(
			{	
				isBaseLayer: true, 
				wrapDateLine: true, 
				buffer: buff, 
				minZoomLevel:1, 
				numZoomLevels:19, 
				maxZoomLevels:19 
			});
			map.addLayer(googleHyb);
		}

		// ------ Build the Google SAT map
		else if(baseMapsList[i] == 'GoogleSat')
		{
			googleSat = new OpenLayers.Layer.Google
			( 	"GoogleSat" , 
				{
					type: G_SATELLITE_MAP, 
					sphericalMercator: spMerc
				});
			googleSat.addOptions(
			{	
				isBaseLayer: true, 
				wrapDateLine: true, 
				buffer: buff, 
				minZoomLevel:1, 
				numZoomLevels:19, 
				maxZoomLevels:19 
			});
			map.addLayer(googleSat);
		}
		
		// ------ Build the Google base map
		else if(baseMapsList[i] == 'GoogleMaps')
		{
			googleMap = new OpenLayers.Layer.Google
			( 	"GoogleMap" , 
				{
					type: G_NORMAL_MAP, 
					sphericalMercator: spMerc
				});
			googleMap.addOptions(
			{	
				isBaseLayer: true, 
				wrapDateLine: true, 
				buffer: buff, 
				minZoomLevel:1, 
				numZoomLevels:19, 
				maxZoomLevels:19  
			});
			map.addLayer(googleMap);
		}

		// ------ Build the Google DEM map
		else if(baseMapsList[i] == 'GoogleHills')
		{	googleDem = new OpenLayers.Layer.Google
			( "GoogleHills" , 
				{
					type: G_PHYSICAL_MAP, 
					sphericalMercator:spMerc
				});
			googleDem.addOptions(
			{	
				isBaseLayer: true, 
				wrapDateLine: true, 
				buffer: buff, 
				minZoomLevel:1, 
				numZoomLevels:19, 
				maxZoomLevels:19 
			});
			map.addLayer(googleDem);
		}

		// -------- OpenStreetMap ---------
		else if(baseMapsList[i] == 'OpenStreetMap')
		{
			//osmap = new OpenLayers.Layer.Tile("Open Street Map",  "http://tile.openstreetmap.org/");
			//osmap = new OpenLayers.Layer.OSM.Osmarender("OpenStreetMap");
			osmap = new OpenLayers.Layer.OSM( "OpenStreetMap");

			osmap.addOptions(
			{	
				//scales: [50000000,20000000,5000000,1000000,500000,250000,100000,50000,25000,10000,5000,2500,1000,500],
				isBaseLayer: true, 
				opacity: 1,
				buffer: buff,
				numZoomLevels:20, 
				maxZoomLevels:21 
			//	reproject: false
			});
			map.addLayer(osmap);
		}
		
		// --------- Nearmap ----------
		else if(baseMapsList[i] == 'NearMap')
		{
			nearmap = new OpenLayers.Layer.XYZ
			(	"NearMap",	"http://www.nearmap.com/maps/",
				{
					type: 'png' 
					,getURL: get_my_url			// this gets the urls
					,displayOutsideMaxExtent: true
					,sphericalMercator:spMerc	
				}
			);
			nearmap.addOptions(
			{	
				//scales: [50000000,20000000,5000000,1000000,500000,250000,100000,50000,25000,10000,5000,2500,1000,500],
				isBaseLayer: true,
				buffer: buff,
				opacity: 1,
				units: units, 
				projection: srs,
				displayProjection: new OpenLayers.Projection("EPSG:4326"),
				numZoomLevels:22, 
				maxZoomLevels:23, 
				reproject: true
			});
			map.addLayer(nearmap);
		}

		// --------- NuMaps ----------
		else if (baseMapsList[i] == 'NuMaps' )
		{	
			numapsBasemapUrl = applicationBase+'inc/sld/mb/basemap.xml?'+new Date().getTime();
			numaps = new OpenLayers.Layer.WMS( "NuMaps" , numapsService, { sld:numapsBasemapUrl, sphericalMercator: spMerc, format: drapeImage, quality:'BEST', transparent:true} );
			numaps.addOptions({isBaseLayer: true, wrapDateLine: true, buffer: buff, tileSize: new OpenLayers.Size(tileSize,tileSize)});
			map.addLayer(numaps);
		}
		// ---------- GTOPO30 ------------
		else if (baseMapsList[i] == 'GTOPO30' )
		{	
			gtopo30 = new OpenLayers.Layer.WMS( "US TEXAS" , "http://www.geoonestop.org/cubewerx/cubeserv.cgi?CONFIG=OIM_0.5_m TNRIS Images&SERVICE=WMS&VERSION=1.3.0", { sphericalMercator: spMerc, format: drapeImage, quality:'BEST', transparent:true, srs:'EPSG:4269'} );
			gtopo30.addOptions({isBaseLayer: true, wrapDateLine: true, buffer: buff});
			map.addLayer(gtopo30);
		}

		// --------- PSMA UnTiled Basemap using SLD ----------
		else if (baseMapsList[i] == 'PSMA_WMS' )
		{	
			//var psmaIP = "http://203.217.18.65:81/cubewerx/cubeserv.cgi";
			var psmaIP = meshBlocksBase;
			psmaBasemapFile = 'psma_tas_basemap.xml';
			psmaBasemapUrl = applicationBase+'inc/sld/psma_basemap/'+psmaBasemapFile+"?"+new Date().getTime();
			psmaBasemap = new OpenLayers.Layer.WMS.Untiled
			( "PSMA - WMS" ,
				psmaIP, 
				{ 
					sld:psmaBasemapUrl, 
					sphericalMercator: spMerc, 
					format: drapeImage, 
					quality:'BEST', 
					transparent:true
				} 
			);
			psmaBasemap.addOptions({isBaseLayer: true, wrapDateLine: true, buffer: buff, numZoomLevels:20, maxZoomLevels:20,  tileSize: new OpenLayers.Size(tileSize,tileSize)});
			map.addLayer(psmaBasemap);
		}

		// --------- PSMA tiled basemap from Tile Stor ---------- 
		else if (baseMapsList[i] == 'PSMA_Tiled_WMS' )
		{	
			psmaBasemapFile = 'psma_tas_basemap.xml';
			//var psmaIP = "http://203.217.18.65:81/cubewerx/cubeserv.cgi";
			var psmaIP = meshBlocksBase;
			psmaBasemapUrl = applicationBase+'inc/sld/psma_basemap/'+psmaBasemapFile+"?"+new Date().getTime();
			psmaBasemap3 = new OpenLayers.Layer.WMS
			(
				"PSMA - Tiled WMS" , 
				psmaIP, 
				{ 
					sld:psmaBasemapUrl, 
					sphericalMercator: spMerc, 
					format: drapeImage, 
					quality:'BEST', 
					transparent:true
				} 
			);
			psmaBasemap3.addOptions({isBaseLayer: true, wrapDateLine: true, buffer: buff, numZoomLevels:20, maxZoomLevels:20,   tileSize: new OpenLayers.Size(tileSize,tileSize)});
			map.addLayer(psmaBasemap3);
		}

		// --------- PSMA tiled basemap from Cubewerx Tile Store ---------- 
		else if (baseMapsList[i] == 'PSMA_Tiled' )
		{	
			// this is a WMTS instance
			psmaBasemap2 = new OpenLayers.Layer.CW_WMTS
			( 
				"PSMA - Tiles",
				"http://203.217.18.65/wmts/PSMA_TAS/PSMA_TAS/PSMA_TAS_style/smerc/",
				{
					layername: 'PSMA', 	
					type:'jop',
					sphericalMercator: spMerc
				} 
			);
			psmaBasemap2.addOptions({isBaseLayer:true, buffer: buff, numZoomLevels: 19, quality: quality});		
			map.addLayer(psmaBasemap2);
		}
	}
}
function swapBase(newBaseLayer)
{
	//alert('swapping to = '+newBaseLayer+ ' from = '+currentBasemap);
	//alert('swapbase : xstart = '+xStart+"  ystart = "+yStart+" startZoom = "+startZoom);
	var zlevel = startZoom;
	if(currentBasemap != null){zlevel = map.getZoom();}

	// swap to applicable basemap
	if (newBaseLayer == 'GoogleMaps' )
	{	
		map.setBaseLayer(googleMap); 
		//googleMap.redraw();
		if((currentBasemap == 'NearMap' || currentBasemap == 'OpenStreetMap' )  && zlevel>18) {zlevel=18;}
		else if(currentBasemap == 'NearMap' || currentBasemap == 'OpenStreetMap' || currentBasemap == 'GTOPO30' || currentBasemap == 'PSMA_WMS' || currentBasemap == 'PSMA_Tiled_WMS' || currentBasemap == 'PSMA_Tiled' ) {zlevel=zlevel-1;}
		if(document.getElementById('gm')){document.getElementById('gm').checked=true;}
		if(document.getElementById('openStreetmapAttrib')){document.getElementById('openStreetmapAttrib').style.display = 'none'}
	}
	else if (newBaseLayer == 'GoogleHybrid' )
	{	
		map.setBaseLayer(googleHyb); 
		//googleHyb.redraw(); 
		if((currentBasemap == 'NearMap' || currentBasemap == 'OpenStreetMap' )  && zlevel>18) {zlevel=18;}
		else if(currentBasemap == 'NearMap' || currentBasemap == 'OpenStreetMap' || currentBasemap == 'GTOPO30' || currentBasemap == 'PSMA_WMS' || currentBasemap == 'PSMA_Tiled_WMS' || currentBasemap == 'PSMA_Tiled' ) {zlevel=zlevel-1;}
		if(document.getElementById('gh')){document.getElementById('gh').checked=true;}
		if(document.getElementById('openStreetmapAttrib')){document.getElementById('openStreetmapAttrib').style.display = 'none'}
	}
	else if (newBaseLayer == 'GoogleHills' )
	{	
		map.setBaseLayer(googleDem); 
		//googleDem.redraw(); 
		if((currentBasemap == 'NearMap' || currentBasemap == 'OpenStreetMap' )  && zlevel>18) {zlevel=18;}
		else if(currentBasemap == 'NearMap' || currentBasemap == 'OpenStreetMap' || currentBasemap == 'GTOPO30' || currentBasemap == 'PSMA_WMS' || currentBasemap == 'PSMA_Tiled_WMS' || currentBasemap == 'PSMA_Tiled' ) {zlevel=zlevel-1;}
		if( document.getElementById('gd')){document.getElementById('gd').checked=true;}
		if(document.getElementById('openStreetmapAttrib')){document.getElementById('openStreetmapAttrib').style.display = 'none'}
	}
	else if (newBaseLayer == 'GoogleSat' )
	{	 
		map.setBaseLayer(googleSat); 
		//googleSat.redraw(); 
		if((currentBasemap == 'NearMap' || currentBasemap == 'OpenStreetMap' )  && zlevel>18) {zlevel=18;}
		else if(currentBasemap == 'NearMap' || currentBasemap == 'OpenStreetMap' || currentBasemap == 'GTOPO30' || currentBasemap == 'PSMA_WMS' || currentBasemap == 'PSMA_Tiled_WMS' || currentBasemap == 'PSMA_Tiled') {zlevel=zlevel-1;}
		if(document.getElementById('gs')){document.getElementById('gs').checked=true;}
		if(document.getElementById('openStreetmapAttrib')){document.getElementById('openStreetmapAttrib').style.display = 'none'}
	}
	else if (newBaseLayer == 'NearMap' )
	{	
		map.setBaseLayer(nearmap); 
		//nearmap.redraw();
		if(currentBasemap != 'OpenStreetMap' && currentBasemap != 'GTOPO30' && currentBasemap != 'PSMA_WMS' && currentBasemap != 'PSMA_Tiled_WMS' && currentBasemap != 'PSMA_Tiled'){zlevel = zlevel+1;}
		if(document.getElementById('near')){document.getElementById('near').checked=true;}
		if(document.getElementById('openStreetmapAttrib')){document.getElementById('openStreetmapAttrib').style.display = 'none'}
		
	}
	else if (newBaseLayer == 'OpenStreetMap' )
	{	
		map.setBaseLayer(osmap); 
		//osmap.redraw(); 
		if(currentBasemap == 'NearMap' && zlevel > 20) {zlevel=20;}
		else if(currentBasemap != 'OpenStreetMap' && currentBasemap != 'GTOPO30' && currentBasemap != 'PSMA_WMS' && currentBasemap != 'PSMA_Tiled_WMS' && currentBasemap != 'PSMA_Tiled' && currentBasemap != 'NearMap'){zlevel = zlevel+1;}
		if(document.getElementById('osm')){document.getElementById('osm').checked=true;}
		if(document.getElementById('openStreetmapAttrib')){document.getElementById('openStreetmapAttrib').style.display = 'block'}
	}
	else if (newBaseLayer == 'NuMaps' )
	{	
		map.setBaseLayer(numaps); 
		//osmap.redraw(); 
		if(currentBasemap == 'NuMaps' && zlevel > 20) {zlevel=20;}
		else if(currentBasemap != 'NuMaps'){zlevel = zlevel+1;}
		if(document.getElementById('numaps')){document.getElementById('numaps').checked=true;}
		if(document.getElementById('numapsAttrib')){document.getElementById('numapsAttrib').style.display = 'block'}
	}
	else if (newBaseLayer == 'GTOPO30' )
	{	
		map.setBaseLayer(gtopo30); 
		//osmap.redraw(); 	
		if(currentBasemap == 'GTOPO30' && zlevel > 20) {zlevel=20;}
		else if((currentBasemap == 'NearMap' || currentBasemap == 'OpenStreetMap' )) {zlevel=zlevel-1;}
		if(document.getElementById('gtopo30')){document.getElementById('gtopo30').checked=true;}
		if(document.getElementById('gtopo30Attrib')){document.getElementById('gtopo30Attrib').style.display = 'block'}
		zlevel = zlevel+1;
	}
	else if (newBaseLayer == 'PSMA_WMS'  )
	{	
		map.setBaseLayer(psmaBasemap); 
		if(currentBasemap == 'GoogleMaps' || currentBasemap == 'GoogleHybrid' || currentBasemap == 'GoogleHills' || currentBasemap == 'GoogleSat' ||  currentBasemap == 'GTOPO30' ) {zlevel=zlevel+1;}
		if(document.getElementById('psma')){document.getElementById('psma').checked=true;}
		if(document.getElementById('psmaAttrib')){document.getElementById('psmaAttrib').style.display = 'block'}		
	}
	else if (newBaseLayer == 'PSMA_Tiled_WMS'  )
	{	
		map.setBaseLayer(psmaBasemap3); 
		if(currentBasemap == 'GoogleMaps' || currentBasemap == 'GoogleHybrid' || currentBasemap == 'GoogleHills' || currentBasemap == 'GoogleSat' ||  currentBasemap == 'GTOPO30' ) {zlevel=zlevel+1;}
		if(document.getElementById('psma3')){document.getElementById('psma3').checked=true;}
		if(document.getElementById('psmaAttrib')){document.getElementById('psmaAttrib').style.display = 'block'}		
	}
	else if (newBaseLayer == 'PSMA_Tiled'  )
	{	
		map.setBaseLayer(psmaBasemap2); 
		if(currentBasemap == 'GoogleMaps' || currentBasemap == 'GoogleHybrid' || currentBasemap == 'GoogleHills' || currentBasemap == 'GoogleSat' ||  currentBasemap == 'GTOPO30' ) {zlevel=zlevel+1;}
		if(document.getElementById('psma2')){document.getElementById('psma2').checked=true;}
		if(document.getElementById('psmaAttrib')){document.getElementById('psmaAttrib').style.display = 'block'}		
	}
	//alert('zlevel = '+zlevel)
	//alert('center = '+map.getCenter());
	//alert('currentBasemap = '+currentBasemap)
	if(currentBasemap != null){	map.setCenter(map.getCenter(), zlevel);	}
	else{map.setCenter(new OpenLayers.LonLat(xStart,  yStart) , zlevel);}
	currentBasemap = newBaseLayer;	
}

// this will get the Tile Urls based on AOI
function get_my_url (bounds) 
{
	var res = this.map.getResolution();
	//alert(res)
	//alert(bounds)
	var x = Math.round ((bounds.left - this.maxExtent.left) / (res * this.tileSize.w));
	var y = Math.round ((this.maxExtent.top - bounds.top) / (res * this.tileSize.h));
	var z = this.map.getZoom();

	// this is an eg of a nearmap url >> http://www.nearmap.com/?hl=en&x=53852&y=38914&z=16&nml=Vert&s=Galileo
	//var path = z + "/" + x + "/" + y + "." + this.type;
	//var path = "msps/x=" + x + "&y=" + y + "&z="+z + "&hl=en&nml=Vert&s=Galileo" ; 
	var path = "x=" + x + "&y=" + y + "&z="+z + "&hl=en&nml=Vert&s=Galileo" ; 
	var url = this.url;
	if (url instanceof Array) 
	{
		url = this.selectUrl(path, url);
	}
	//alert(url + path);
	return url + path;
}

function getBboxes(url)
{
	// do a get capabilitioes request on this URL
	query='&request=getcapabilities';
	//alert(url+query)
	ajaxRequest = loadXml(url, query, false);
	if(ajaxRequest.responseXML.getElementsByTagName('WMS_Capabilities').length > 0);
	{
		// first get the Capabilities tag
		var wmsCapabilities = ajaxRequest.responseXML.getElementsByTagName('WMS_Capabilities');
		var capability = wmsCapabilities[0].getElementsByTagName("Capability");
		var layers = capability[0].getElementsByTagName("Layer");

		// now step though all the layer tags looking for each layer 
		for (var i=0; i<layers.length ; i++ )
		{
			//alert("layer count = "+i)
			if(layers[i].getElementsByTagName("EX_GeographicBoundingBox") && layers[i].getElementsByTagName("Name"))
			{
				var bboxTag = layers[i].getElementsByTagName("EX_GeographicBoundingBox");
				var fullLayerName = layers[i].getElementsByTagName("Name")[0].firstChild.nodeValue;
				
				// now look for a Match on layername in layer arrays
				for (var j=0; j<numLayers ; j++)
				{
					if(fullLayerName == Name[j]) 
					{
						// get the BBox for tis layer
						var lleftx = bboxTag[0].getElementsByTagName("westBoundLongitude")[0].firstChild.nodeValue;
						var trightx = bboxTag[0].getElementsByTagName("eastBoundLongitude")[0].firstChild.nodeValue;
						var llefty = bboxTag[0].getElementsByTagName("southBoundLatitude")[0].firstChild.nodeValue;
						var trighty = bboxTag[0].getElementsByTagName("northBoundLatitude")[0].firstChild.nodeValue;
						
						// now make a new bounds object for this layer
						LayerBounds[j] = new OpenLayers.Bounds(lleftx, llefty, trightx, trighty);
						//alert(fullLayerName+" = "+LayerBounds[j]);
					}
				}
			}
		}
	}
	
}

// main function to load all the Layer definitions in holdingDiv and as defined in inputFile
function buildLayers(inputFile, holdingDiv)
{
	// check if holding div exists
	//alert(inputFile)
	if(!document.getElementById(holdingDiv)){alert ('Layers holding Div not available'); return;}
	var holdDiv = document.getElementById(holdingDiv);

	// check to see if the file is present
	var request = applicationBase + inputFile;
	ajaxRequest = loadXml(request, '' );
	if(!ajaxRequest) {alert('Could not get the inputFile off server'); return;}
	var k=0;
	
	var layers= ajaxRequest.responseXML.getElementsByTagName("Layers");
	//alert ('number of Layers tags = '+layers.length);
	// get layers data from DOM into arrays for easier use
	var themes = layers[0].getElementsByTagName("Theme");
	//alert ('number of Themes tags = '+themes.length);
	
	for (l=0; l<themes.length; l++)
	{
		var themeName=themes[l].getAttribute ("theme");
		var themeAbstract = themes[l].getAttribute("abstract");
		var themeSecurity = themes[l].getAttribute("security");
		var themeUser = themes[l].getAttribute("user");
		var themePass = themes[l].getAttribute("pass");
		//alert (themeAbstract)
		var xml = themes[l].getElementsByTagName("Layer");
		//alert (xml.length);
		if (xml.length == 0){alert ("Sorry no layer tags in "+url); return false;}
		// step through each Layer tag getting all the attribute elements
		for (i=0; i<xml.length; i++)
		{
			//alert('Theme No = '+l+" Layer No in this theme = "+i)
			//alert(xml[i].getAttribute("url"));
			LayerObj[k]		= null;
			LabelObj[k]		= null;
			Theme[k]		= themeName;
			Abstract[k]		= themeAbstract; 
			Security[k]		= themeSecurity;
			User[k]			= themeUser;
			Pass[k]			= themePass;
			
			TitleText[k]	= xml[i].getAttribute("title");		// this is what gets displayed as Layer Name in panel
			Leg[k]			= xml[i].getAttribute("ledg");		// flag set to 'sld' or 'glg'
			Name[k]			= xml[i].getAttribute("name");		// this is the layername
			SldLabels[k]	= xml[i].getAttribute("sldLabels");
			Opac[k]			= xml[i].getAttribute("opac");
			
			MinzmLayers[k]	= xml[i].getAttribute("minzm");
			MaxzmLayers[k]	= xml[i].getAttribute("maxzm");
			Zindex[k]		= xml[i].getAttribute("zindex");
			
			
			MinzmLabels[k]	= '';
			MaxzmLabels[k]	= '';
			sldLayerName[k] = '';
			LayerAbstract[k]= '';
			Status[k] = 'off';
			Plotted[k]='no';
			
			// get optional parameters
			Gfi[k] = 'text/xml; subtype="bxfs/0.0.2"';
			if(xml[i].getAttribute("gfi")) {Gfi[k]	= xml[i].getAttribute("gfi");}		// schema for getfeatureinfo requets

			// get Attribution if available
			Attribution[k] = 'NuMaps';
			if(xml[i].getAttribute('attribution')) {Attribution[k] = xml[i].getAttribute('attribution');}

			Vis[k] = 'false'
			if(xml[i].getAttribute("vis")) {Vis[k]	= xml[i].getAttribute("vis");}
			if (Vis[k] =='true'){Status[k] = "on";}
			
			Url[k] = meshBlocksBase;
			if (xml[i].getAttribute("url")) {Url[k]	= xml[i].getAttribute("url");}
			
			Ogc[k] = "1.1.3";
			if(xml[i].getAttribute("ogc")) {Ogc[k]	= xml[i].getAttribute("ogc"); }
			
			Format[k] = 'image/gif';
			if(xml[i].getAttribute("form")) {Format[k]	= xml[i].getAttribute("form"); }
						
			Style[k] = '';
			if(xml[i].getAttribute("style")) {Style[k]	= xml[i].getAttribute("style"); }
			if (Style[k] != '')
			{ 
				var styles=Style[k].split(",");
				selectedStyle[k]=styles[0];
			}
			Sld[k] = 'none';
			if(xml[i].getAttribute("sld") !='none' && xml[i].getAttribute("sld") !='' && xml[i].getAttribute("sld") != null)
			{
				Sld[k]	= xml[i].getAttribute("sld");
				//alert('sld = '+Sld[k])	
				getSldInfo(Sld[k]);
				//alert('SLD Abstract = '+sldAbstract);
				//alert('SLD Layer Name = '+layerName);
				LayerAbstract[k] = sldAbstract;
				sldLayerName[k] = layerName;
			}
			if(xml[i].getAttribute("bbox") !='none' && xml[i].getAttribute("bbox") !='' && xml[i].getAttribute("bbox") != null)
			{
				LayerBbox[k] = xml[i].getAttribute("bbox");
				var points = LayerBbox[k].split(' ');
				//alert("X = "+points[0]+" Y = "+points[1]);
				var leftparts = points[0].split(',');
				var rightparts = points[1].split(',');
				
				// convert to Sperical mercator if needed
				// transform geogs to spherical coords if required
				if (srs == 'EPSG:900913') 
				{
					// first LL point
					//var p1 = new OpenLayers.LonLat(leftparts[0],leftparts[1]);
					//alert(p1)
					var point = geogs2google(leftparts);
					p1 = decodePoint(point);
					//alert(p1)

					// second TR point
					//var p2 = new OpenLayers.LonLat(rightparts[0],rightparts[1]);
					var point = geogs2google(rightparts);
					p2 = decodePoint(point);
					//alert (p2)
					
					// create the new layer Bounds object
					LayerBounds[k] = new OpenLayers.Bounds(p1[0],p1[1],p2[0],p2[1]);
				}
				else
				{
					LayerBounds[k] = new OpenLayers.Bounds(leftparts[0],leftparts[1],rightparts[0],rightparts[1]);
				}
				//alert(LayerBounds[k]);
			}
			else
			{	
				LayerBounds[k] = null;
			}

			// get the layer type if present
			if(xml[i].getAttribute("type") != '')
			{
				LayerType[k]=xml[i].getAttribute("type");
			}
			// get the layer type if present
			if(xml[i].getAttribute("tiled") != '')
			{
				LayerTiled[k]=xml[i].getAttribute("tiled");
			}
			
			k = k +1;
			//alert ('k = '+k)
			
		}
	}
	numLayers=k;
	genLoadStatus('Building Layer Control ....', true, '')
	//alert('number of layers  = '+numLayers);

	// do a getcapabilities for the NuMaps site and get the BBox for each layer in the list
	var urlLast = '';
	//getBboxes(meshBlocksBase);
	//alert('now list all BBoxes');
	//for(var i=0; i<numLayers; i++)
	//{		
	//	alert('check on layer bounds array = '+ Name[i]+" == "+LayerBounds[i]);	
	//}

	// build the holder Form for Other Layers
	var layerForm = document.createElement('form');
	layerForm.style.width='100%';
	layerForm.style.height='160px'; 
	layerForm.style.overflowX='hidden'; 
	layerForm.style.overflowY='auto';  
	layerForm.style.position='absolute';
	layerForm.style.top='0px'; 
	layerForm.style.left='0px';  
	layerForm.style.borderTop='1px solid gray';
	layerForm.style.borderLeft='1px solid gray';
	layerForm.style.borderRight='1px solid white';
	layerForm.style.borderBottom='1px solid white';

		// build the Table within the Form
		var layerTable = document.createElement('table');
			var layerTableBody = document.createElement('tbody');
			layerTableBody.style.color='#000000'; 
			layerTableBody.style.position='absolute'; 
			layerTableBody.style.top='0px'; 
			layerTableBody.style.left='0px'; 
			layerTableBody.style.paddingTop='0px'; 
			layerTableBody.style.paddingBottom='2px'; 
			layerTableBody.style.height='60px'; 
			layerTableBody.style.borderCollapse='collapse'; 
			layerTableBody.style.fontWeight='bold'; 
			layerTableBody.style.fontSize='9px'; 
			layerTableBody.style.backgroundColor='#FFFFFF';

			// for each layer in the array setup the table row
			for(var i=0; i < numLayers ; i++)
			{
				//alert('layer = '+Sld[i])
				if(SldLabels[i] != 'none' && SldLabels[i] != '' && SldLabels[i] != null)
				{
					// get the label rules for the checkboxes 
					ajaxRequest = loadXml(SldLabels[i], '' );
					if(ajaxRequest.status == 200)
					{
						var sldRules = ajaxRequest.responseXML.getElementsByTagName("Rule");
						getSldRenderRules(sldRules[0]);				// this only picks off the first rule
						MinzmLabels[i]=minScale;
						MaxzmLabels[i]=maxScale;
					}
				}

				if(Sld[i] != 'none' && Sld[i] != '')
				{
					// get the render rules for the checkboxes 
					ajaxRequest = loadXml(Sld[i], '' );
					if(ajaxRequest.status == 200)
					{
						var sldRules = ajaxRequest.responseXML.getElementsByTagName("Rule");
						getSldRenderRules(sldRules[0]);			// this only picks off the first rule
						MinzmLayers[i]=minScale;
						MaxzmLayers[i]=maxScale;
						//alert(maxScale)
					}
				}
				
				// what is the current scaleDenominator
				if(map)
				{	
					scaleDenom = map.getScale();
					zoomLevel = map.getZoom();
				}
				else
				{
					zoomLevel = startZoom;
					scaleDenom = startScale;
				}
				//alert(MinzmLayers[i]+"  -  "+scaleDenom+"  -  "+MaxzmLayers[i]);
				//
				// set up a new row in table
				var row = document.createElement('tr');
				row.style.height='15px';
				//row.style.backgroundColor=backColor;
				row.className='unselectedItem';
				row.title='Click here to make this layer the Active layer';
				row.setAttribute('id','arow:'+i);
				row.id='arow:'+i;

					// the first cell contains the layer visibility check box
					var cell = document.createElement('td');
					cell.style.width='15px';

						// create the Input checkbox for Layer selection
						var box = document.createElement('input');
						box.setAttribute('type','checkbox');
						//box.setAttribute('value',TitleText[i]);
						box.setAttribute('id','layers:'+i);
						box.id='layers:'+i;
						//box.style.backgroundColor='transparent';
	
						if (scaleDenom < MinzmLayers[i] || scaleDenom > MaxzmLayers[i] || !loadMe(i))
						{	box.disabled = true; box.checked=false;		}
						else
						{	box.disabled = false; box.checked=false;	}
						box.title='Check this box to overlay '+TitleText[i]+ ' Boundaries';
						
						bindEvent(box, 'click', showHideLayer, 'false');
						//if(browser == 'msie'){bindEvent(box, 'click', blurAfter, 'false');}
						//if(browser == 'firefox'){bindEvent(box, 'change', showHideLayer, 'false')}
						//else {bindEvent(box, 'click', blurAfter, 'false');}
						
					cell.appendChild(box);
				row.appendChild(cell);

					// the second cell contains the labels check box
					var cell = document.createElement('td');
					cell.style.width='15px';

						// create the Input checkbox
						var box = document.createElement('input');
						box.setAttribute('type','checkbox');
						//box.setAttribute('value',TitleText[i]);
						box.setAttribute('id','label:'+i);
						box.id='label:'+i;
						if (scaleDenom < MinzmLabels[i] || scaleDenom > MaxzmLabels[i] || !loadMe(i))
						{	box.disabled = true; box.checked=false;		}
						else
						{	box.disabled = false; box.checked=false;		}
						box.style.backgroundColor='transparent';
						box.title='Check this box to overlay '+TitleText[i]+' Labels';
						bindEvent(box, 'click', showHideLabels, 'false');
						//if(browser == 'msie'){bindEvent(box, 'click', blurAfter, 'false');}
						
					cell.appendChild(box);				
				row.appendChild(cell);

					// the third cell contains the legend cell
					var cell = document.createElement('td');
					cell.style.width='15px';

						// create the Input checkbox
						var box = document.createElement('div');
						box.setAttribute('id','lagend:'+i);
						box.id='legend:'+i;
						box.style.height='12px';
						box.style.width='12px';
						box.style.marginLeft='auto';
						box.style.marginRight='auto';
						box.style.backgroundColor='transparent';
						//box.style.border='1px solid blue';
						//box.style.verticalAlign='middle';

						// set up symbology as per SLD file
						if(Sld[i] != 'none')
						{
							// handle the line type layer first
							if(LayerType[i] == 'line' && strokeWidth != '' && strokeColr != '')
							{
								//alert('stroke = '+strokeWidth)
								// create a line across middle of box
								var line = document.createElement('div');
								box.appendChild(line);
								//line.style.position ='absolute';
								var top = 6 - Math.ceil(strokeWidth/2); 
								//var wdth = 12 - Math.ceil(strokeWidth/2)
								//alert('top = '+top)
								line.style.position = 'relative';								
								line.style.top = top+'px';
								line.style.left = '0px';
								line.style.width = '100%';
								line.style.height = '1px';
								//box.style.border='1px solid red';
								line.style.borderTop = strokeWidth+'px solid '+strokeColr;
							}
							// handle the polygon type layer
							else if(LayerType[i] == 'polygon')
							{
								//alert(strokeWidth+" >> "+strokeColr)
								if(strokeWidth != '' && strokeColr != '')	
								{	box.style.border = strokeWidth+'px solid '+strokeColr;}
								if(fillColr != '') 
								{	box.style.backgroundColor=fillColr;	}			
								if(fillOpac != '')
								{
									var opacity = parseFloat(fillOpac)
									var fillNumber = Math.abs(Number(opacity)*100);
									setOpacity(box, fillNumber);
								}
								if(fillPat != '') 
								{	box.style.backgroundImage='url('+fillPat+')';}

								
							}
							// handle a polygon type with legend
							else if(LayerType[i] == 'legend')
							{
								box.style.borderRight='1px solid gray';
								box.style.borderBottom='1px solid gray';
								box.style.borderTop = '1px solid #c3c3c3';
								box.style.borderRight = '1px solid #c3c3c3';
								box.style.backgroundColor='transparent';
								box.style.zIndex='5000';
								box.style.height='18px';
								box.style.width='20px';
								box.style.cursor='pointer';
								box.title = 'legend';
								box.style.borderStyle='none';
								box.style.backgroundColor='transparent';
								
								// add in the button image
								var img = document.createElement('img');
									img.src='images/legend.jpg';
									img.style.position='relative';
									img.style.top='2px';
									img.style.left='2px';
									img.style.zIndex='5001';
									img.setAttribute('id','legendInner:'+i);
									img.id='legendInner:'+i;
								box.appendChild(img);
								bindEvent(box, 'click', showHideLayerLegend, 'false');
								//bindEvent(box1, 'mousedown', mousedownEvt, 'false');
								//bindEvent(box1, 'mouseup', mouseupEvt, 'false');
							}
							// handle the point type layer
							else if(LayerType[i] == 'point' && pointPat != '')	
							{	
								//alert(pointPat)
								var symbol = document.createElement('img');
								symbol.src = pointPat;
								symbol.style.height = '12px';
								box.appendChild(symbol);
								//box.style.backgroundPosition='center';  
								//box.style.backgroundRepeat='no-repeat';
								box.style.position.verticalAlign='middle';
							}
						}
					cell.appendChild(box);				
				row.appendChild(cell);

					// the fourth cell contains the layerName
					var cell = document.createElement('td');
					cell.style.width='110px';
					cell.style.height='15px';
					cell.id='title:'+i;
					cell.style.cursor='pointer';
					cell.setAttribute('id','title:'+i);
					//if(LayerAbstract[i] != ''){cell.title = LayerAbstract[i];}
					cell.title = 'Click here to make this layer the Active layer';
					var textNode = document.createTextNode(TitleText[i]);
					bindEvent(cell, 'click', setCurrentLayer, 'false');
					cell.appendChild(textNode);
				
				row.appendChild(cell);

					// the fourth cell contains the loader wheel
					var cell = document.createElement('td');
					cell.style.width='15px';
					cell.style.height='15px';

						// holder Div for image
						var cellDiv = document.createElement('div');
						cellDiv.id='loadWheel:'+i;
						cellDiv.setAttribute('id','loadWheel:'+i);
						cellDiv.style.display='none';
												
							// create a center tag
							var center = document.createElement('center');

								// create the image element
								var image = document.createElement('img');
								image.src = 'images/loader.gif';

							center.appendChild(image);
						cellDiv.appendChild(center);
					cell.appendChild(cellDiv);
				row.appendChild(cell);
			layerTableBody.appendChild(row);
			//layerTable.appendChild(layerTableBody);
			//layerForm.appendChild(layerTable);

		//holdDiv.appendChild(layerForm);

		}	
		layerTable.appendChild(layerTableBody);
	layerForm.appendChild(layerTable);
holdDiv.appendChild(layerForm);
//alert('Other layers now loaded');

}
function blurAfter(evt)	// for firefox to handle onchange of a checkbox
{
	//alert('clicked registered')
	var thisEvent = getThisId(evt);
	var type = thisEvent.split(':');
	//alert('type = '+type[0])
	document.getElementById(thisEvent).blur();
	if (type[0] == 'layer')
	{	showHideLayer(evt); }
	else if(type[0] == 'label')
	{	showHideLabels(evt); }
	else if(type[0] == 'summit')
	{	saveSummit(evt); }
	//else if(type[0] == 'info')
	//{	showHideAttributes(evt); }
	Event.stop(evt);
}
function setCurrentLayer(evt)
{
	// decode the layer id info
	var eleId = getThisId(evt);
	var layNo = eleId.split(':')
	layerNumber = layNo[1];
	setCurrentLayerByNumber(layerNumber);
	Event.stop(evt);
}

function setCurrentLayerByNumber(layerNumber)
{
	if(layerNumber < 0){return;}
	
	// remove any previous report
	checkRemoveObject('simpleReport');

	// if the selected layer is already the active layer turn it off 
	if(activeLayer == layerNumber)	
	{	
		document.getElementById('arow:'+layerNumber).className = 'unselectedItem';
		document.getElementById('title:'+layerNumber).title = 'Click here to make this layer the Active layer';
		layLineSld = '';
		layWmslayer='';
		activeLayerName = '';
		activeLayer = null
		pickMode=false;
		//exitPolypika();
		// remove the active layer
		turnOffActiveLayer();
	}
	else
	{
		// first get rid of current active layer
		turnOffActiveLayer();

		// Set up for the new active layer	
		layLineSld = applicationBase+Sld[layerNumber];
		activeLayerName = Name[layerNumber].split(":")[0];
		dataStore = Name[layerNumber].split(":")[1];
		getSldInfo(layLineSld);
		layWmslayer = layerName;
		activeLayer = layerNumber;
		
		rad = 5; 
		count = 20;
		infoForm = Gfi[layerNumber];
		pickMode = true;

		// now display the layer
		document.getElementById('layers:'+layerNumber).checked = 'checked';
		manipulateLayer(layerNumber);
		activateGfiClickControl();
		var numb='';
		//showHideLayer(evt);
/*
		// now do a getFeature request against this layer to get a total number of features
		genLoadStatus('GetFeature Request ...', true, '');
		request='getFeature';
		type = 'WFS';
		gfiFilter = ''
		outFormat = 'BXFS';
		uri = numapsService;

		// calculate bounding box of display window
		zoom = false;
		ozBoxGeog = getBboxOfView(zoom, srs)
		//alert(ozBoxGeog)
		
		// set up the BBox filter
		loXX = ozBoxGeog[0];
		loYY = ozBoxGeog[1];
		hiXX = ozBoxGeog[2];
		hiYY = ozBoxGeog[3];
		
		// calculate centre of box
		//centX = (parseFloat(loXX) + parseFloat(hiXX)) / 2.0;
		//centY = (parseFloat(loYY) + parseFloat(hiYY)) / 2.0;
		
		// get the vertices of polygon into real world arrays
		allX = new Array();
		allY = new Array();
		allX[0] = loXX;	allY[0] = loYY;
		allX[1] = loXX;	allY[1] = hiYY;
		allX[2] = hiXX;	allY[2] = hiYY;
		allX[3] = hiXX;	allY[3] = loYY;
		allX[4] = loXX;	allY[4] = loYY;

		// build up the filter linestring
		for (var i=0; i < allX.length ; i++ )
		{
			//alert(allX[i]+", "+allY[i])
			if(i==0){lineString = allX[i]+","+allY[i];}
			else{lineString = lineString+" "+allX[i]+","+allY[i];}
		}

		//other options = Equals, Touches, Within, Overlaps, Crosses, Intersects, Contains
		var gfiFilter = "<Filter><Intersects><PropertyName>GEOMETRY</PropertyName><Polygon xmlns:gml='http://www.opengis.net/gml'><outerBoundaryIs><LinearRing><coordinates decimal='.' cs=',' ts=' '>" +lineString+ "</coordinates></LinearRing></outerBoundaryIs></Polygon></Intersects></Filter>";
		//alert(gfiFilter);

		// build up the request
		gfiParams = '';
		gfiParams += "request="+request;
		gfiParams += "&service="+type;
		gfiParams += "&srs="+srs;
		gfiParams += "&dataStore="+dataStore;
		gfiParams += "&typeName="+activeLayerName;
		gfiParams += "&outFormat="+outFormat;
		gfiParams += "&Filter="+gfiFilter;
	
		// launch the getFeature request
		ajaxRequest = proxyRequest(uri, gfiParams, '', 'POST');

		if(ajaxRequest.status != 200){	alert('unable to fetch this many objects'); }
		else
		{	// Find out how many features in XML
			var features = ajaxRequest.responseXML.getElementsByTagName("gml:featureMember");
			//alert('number of features = '+features.length);
			numb = '('+features.length+')';
		}
*/
		// make sure all layer rows are set to unselected and highligh the new active layer
		for(var j=0; j<numLayers ;j++)
		{		
			if(layerNumber != j)
			{	document.getElementById('arow:'+j).className= 'unselectedItem';		}
			else
			{
				document.getElementById('arow:'+j).className='selectedItem';
				document.getElementById('title:'+j).title='Click here to make this layer'+numb+' NOT the Active layer';
			}
		}
	
	}
	
	// if in polypika mode then update polypika Panel name
	if(activeLayerName != '' && polypikaMode)
	{	enablePolypika();	}
	genLoadStatus('', false, '');
}

function turnOffActiveLayer()
{
	// remove the active layer
	if(LayerObj[activeLayer])
	{
		map.removeLayer(LayerObj[activeLayer]);
		LayerObj[activeLayer] = null;

		// do same if labels are active
		if(LabelObj[activeLayer])
		{	map.removeLayer(LabelObj[activeLayer]);
			LabelObj[activeLayer] = null;
		}

		// now clean up the active layer row
		document.getElementById('layers:'+activeLayer).checked=false;
		document.getElementById('label:'+activeLayer).checked=false;
		document.getElementById('arow:'+activeLayer).className = 'unselectedItem';
	}
	resetZlevels();
}	
function swapActiveLayer()
{
	// get the selected Active Layer from select control
	var selectObject = document.getElementById('actLayOptions');
	activeLayerName = selectObject.options[selectObject.selectedIndex].value;
	//alert('activeLayer = '+activeLayerName);
	
	// set the active layer to Cyan in Layer Panel
	var layerNumber = parseInt(selectObject.selectedIndex) -1 ;
	//alert('layer number = '+layerNumber)
	if(parseInt(layerNumber) >= 0 )
	{
		setCurrentLayerByNumber(layerNumber);
		
		// push the name into the polypika panel and turn on the polypika editing buttons
		//activateTerritoryControls();
		//alert('territory controls on?')
		//textDisplay('activeLayerTerr', activeLayerName);
	}
	else
	{
		//alert('deactivating')
		turnOffActiveLayer();
		deactivateTerritoryControls();
		
	}
	
	//alert('territoryActive = '+territoryActive);
}

function loadMe(layerNumber)
{	
	if(LayerBounds[layerNumber] == null) 
	{	//alert('No Load '+Name[layerNumber]); 
		return true;
	}
	// check if there is an intersection in bounds
	bounds = map.getExtent();
	//alert(bounds)
	return bounds.intersectsBounds(LayerBounds[layerNumber]);
}
function attributionOn(attribution)
{
	if(attribution == ''){return;}
	if(attribution != 'NuMaps' && document.getElementById(attribution).style.display == 'none') 
	{	document.getElementById(attribution).style.display='block';}
}
function attributionOff(attribution)
{
	if(attribution == '' || !document.getElementById(attribution)){return;}
	if(attribution != 'NuMaps' && document.getElementById(attribution).style.display == 'block') 
	{	document.getElementById(attribution).style.display='none';}
}

function showHideLayer(evt)
{
	// get element's id and then layer number
	var eleId = getThisId(evt);
	var layNo = eleId.split(':')
	layerNumber = layNo[1];
	//alert('layer number = '+layerNumber +" & ActiveLayer = "+activeLayer)
	manipulateLayer(layerNumber);
	activateGfiClickControl();
	//alert("zIndex is : "+LayerObj[layerNumber].getZIndex());
	//Event.stop(evt);
}

function manipulateLayer(layNum)
{
	// if this layer is out of viewport bounds just return
	//alert(loadMe(layNum));
	//alert(Opac[layNum])
	if(loadMe(layNum) || loadMe(layNum) == 'true') 
	{
		// Check to see what the status of this checkbox is
		if(document.getElementById('layers:'+layNum).checked)
		{	
			// Create the layer inside Openlayers if not already present
			//attributionOn(Attribution[layerNumber]);
			if (!LayerObj[layNum])	
			{		
				if(Sld[layNum] != 'none')		// with an SLD
				{	var Bdys = applicationBase+Sld[layNum];
					
					// for UnTiled requests
					if(LayerType[layNum] == 'point' || LayerTiled[layNum] == 'false')
					{
						LayerObj[layNum] = new OpenLayers.Layer.WMS.Untiled
						( 
							TitleText[layNum], 
							meshBlocksBase, 
							{	sld: Bdys,  
								format: drapeImage, 
								version: Ogc[layNum],  
								quality: quality, 
								reaspect: false, 
								transparent: true ,
								opacity: Opac[layNum]
							}, 
							{ tileSize: new OpenLayers.Size(512,512), reproject: true, buffer: 1}
						);
					}
					else
					{
						// normal Tiled request
						LayerObj[layNum] = new OpenLayers.Layer.WMS
						( 
							TitleText[layNum], 
							meshBlocksBase, 
							{	sld: Bdys,  
								format: drapeImage, 
								version: Ogc[layNum],  
								quality: quality, 
								reaspect: false, 
								transparent: true,
								opacity: Opac[layNum]
							}, 
							{ tileSize: new OpenLayers.Size(512,512), reproject: true, buffer: 1}
						);
					}
				}
				else	// without an SLD
				{	
					if(Style[layNum] != 'default' && Style[layNum] != 'none' && Style[layNum] != '')
					{
						if(LayerType[layNum] == 'point' || LayerTiled[layNum] == 'false')
						{
							// for UnTiled requests
							LayerObj[layNum] = new OpenLayers.Layer.WMS.Untiled
							( 
								TitleText[layNum], 
								meshBlocksBase, 
								{	layers: Name[layNum],
									styles: Style[layNum],
									format: drapeImage, 
									version: Ogc[layNum],  
									quality: quality, 
									reaspect: false, 
									transparent: true,
									opacity: Opac[layNum]
								}, 
								{ tileSize: new OpenLayers.Size(512,512), reproject: true}
							);
						}
						else
						{
							// normal Tiled request
							LayerObj[layNum] = new OpenLayers.Layer.WMS
							( 
								TitleText[layNum], 
								meshBlocksBase, 
								{	layers: Name[layNum],
									styles: Style[layNum],
									format: drapeImage, 
									version: Ogc[layNum],  
									quality: quality, 
									reaspect: false, 
									transparent: true,
									opacity: Opac[layNum]
								}, 
								{ tileSize: new OpenLayers.Size(512,512), reproject: true}
							);
						}
					}
					else
					{
						 // for UnTiled requests
						if(LayerType[layNum] == 'point' || LayerTiled[layNum] == 'false')
						{
							LayerObj[layNum] = new OpenLayers.Layer.WMS.Untiled
							( 
								TitleText[layNum], 
								meshBlocksBase, 
								{	layers: Name[layNum],
									format: drapeImage, 
									version: Ogc[layNum],  
									quality: quality, 
									reaspect: false, 
									transparent: true,
									opacity: Opac[layNum]
								}, 
								{ tileSize: new OpenLayers.Size(512,512), reproject: true}
							);
						}
						else
						{
							// normal Tiled requests
							LayerObj[layNum] = new OpenLayers.Layer.WMS
							( 
								TitleText[layNum], 
								meshBlocksBase, 
								{	layers: Name[layNum],
									format: drapeImage, 
									version: Ogc[layNum],  
									quality: quality, 
									reaspect: false, 
									transparent: true,
									opacity: Opac[layNum]
								}, 
								{ tileSize: new OpenLayers.Size(512,512), reproject: true}
							);
						}
					}
				}
				
				LayerObj[layNum].addOptions({isBaseLayer: false,  buffer:1, visibility: false});
				map.addLayer(LayerObj[layNum]);

				var zindex = 6000 +  parseInt(layNum);
				LayerObj[layNum].setZIndex(map.Z_INDEX_BASE['Popup'] -zindex);
				//map.setLayerZIndex(LayerObj[layNum], zindex);
			}

			// Now just make the loaded layer visible 
			var wheelId = 'loadWheel:'+layNum;
			registerLoadWheel(LayerObj[layNum] , wheelId);	
			LayerObj[layNum].setVisibility(true);
		}
		else // turn loaded layer off but if it is the active layer de-actiate it
		{	
			if (LayerObj[layNum]) 
			{		
				//attributionOff(Attribution[layNum])
				LayerObj[layNum].setVisibility(false);
				map.removeLayer(LayerObj[layNum]);
				LayerObj[layNum] = null;
				if(activeLayer == layNum)
				{
					//var backColor = '#FFFFFF';
					//if(evenCheck (layNum)) {backColor = '#FFFFD4';}
					document.getElementById('arow:'+layNum).className='unselectedItem';
					lineSld = null;
					infoForm = null;
				}
			}
		}
		// make this layer the top layer for selection puposes
		//bringToTop(LayerObj[layNum]);
		//resetZlevels();
	}
	// check if myElectorate is set and make sure the booths layer is in sync
	if(myElectFlag)
	{	
		// look for the booth layer number
		layNum = -1;
		for (var i=0; i<Name.length; i++)
		{	if(Name[i] == 'CED_BOOTHS:ABS')	{	layNum = i; break;	}	}
		
		if(i >= 0)
		{
			//alert(document.getElementById('layers:'+layNum).checked);
			document.getElementById('boothsControl').checked = document.getElementById('layers:'+i).checked;		
		}
	}

	
}

function showHideLayerLegend(evt)
{
	var eleId = getThisId(evt);
	var layNo = eleId.split(':')
	layerNumber = layNo[1];
	//alert(layerNumber)

	// activate the legend
	if (Sld[layerNumber] != 'none' && Sld[layerNumber] != '')
	{
		legendBuilder("mapSurround", Sld[layerNumber], null, dvbdy1, dvhdr1, false);
		document.getElementById('legHolder').style.display='block'; // turn on this legend
	}

	Event.stop(evt)
}

function showHideLabels(evt)
{
	var eleId = getThisId(evt);
	var layNo = eleId.split(':')
	layerNumber = layNo[1];
	manipulateLabels(layerNumber);
}

function manipulateLabels(layerNumber)
{
	// process each checked labels layer
	var load = loadMe(layerNumber);
	if(document.getElementById('label:'+layerNumber).checked && load)
	{	
		if (!LabelObj[layerNumber])
		{
			// also create the labels layer at the same time
			//var Labels = applicationBase+SldLabels[layerNumber]+'?'+new Date().getTime();
			var Labels = applicationBase+SldLabels[layerNumber];
			LabelObj[layerNumber] = new OpenLayers.Layer.WMS.Untiled
			( 
				TitleText[layerNumber]+' (labels)', 
				meshBlocksBase, 
				{
					sld: Labels,  
					format: drapeImage, 
					quality: 'BEST', 
					reaspect: false, 
					transparent: true
				}, 
				{ tileSize: new OpenLayers.Size(512,512)}
			);
			
			LabelObj[layerNumber].addOptions({isBaseLayer: false,  buffer:0, visibility: false, reproject:true});		
			map.addLayer(LabelObj[layerNumber]);
			var zindex = 5000 + parseInt(layerNumber);
			//LayerObj[layerNumber].setZIndex(zindex);
			LabelObj[layerNumber].setZIndex(map.Z_INDEX_BASE['Popup'] -zindex);
			//map.setLayerZIndex(LabelObj[layerNumber], zindex);
		}
		var wheelId = 'loadWheel:'+layerNumber;
		registerLoadWheel(LabelObj[layerNumber] , wheelId);	
		LabelObj[layerNumber].setVisibility(true);
		
	}
	else	// simply turn loaded layer off
	{		
		if (LabelObj[layerNumber] )
		{	LabelObj[layerNumber].setVisibility(false);		}
	}
	// make this layer the top layer for selection puposes
	//bringToTop(LabelObj[layNum]);
}

function controlLayerVisibility()
{
	var scaleDenom = map.getScale();
	//var res = map.getResolutionForZoom(map.getZoom());
	//var res = map.getResolution();
	//var tileSizeInMapUnits = res * 256.0;
	//alert('256 Pixels 1 =  = '+tileSizeInMapUnits);
	//var byPixels = map.getGeodesicPixelSize().h* 1000*256;
	//alert('256 Pixels 2 = '+byPixels)

	
	var numLayers=LayerObj.length;
	for (var j=0; j<numLayers; j++)
	{	
		// get the chechbox objects for each layer
		var layerCheckbox = document.getElementById('layers:'+j);
		var labelCheckbox = document.getElementById('label:'+j);
		layerCheckbox.disabled = false;
		labelCheckbox.disabled = false;

		var load = true; 
		var loadLabels = true;
		if(scaleDenom < MinzmLayers[j] || scaleDenom > MaxzmLayers[j] || !loadMe(j)) {  load=false;	}
		if(scaleDenom < MinzmLabels[j] || scaleDenom > MaxzmLabels[j] || !loadMe(j)) {  loadLabels = false;}
		
		// if previously loaded and able to be seen, just turn on layer
		if(load && LayerObj[j])
		{
			LayerObj[j].setVisibility(layerCheckbox.checked);
			registerLoadWheel(LayerObj[j] , 'loadWheel:'+j);
			registerLoadWheel(LayerObj[j], 'loadWheelDrape');
		}
		else 
		{
			if(load){ layerCheckbox.disabled = false;	}
			else {	layerCheckbox.disabled = true;	}
		}
		
		// now do the labels for this layer
		if(loadLabels && LabelObj[j])
		{
			//alert(Name[j]+' = '+layerCheckbox.checked)
			LabelObj[j].setVisibility(labelCheckbox.checked);
			registerLoadWheel(LabelObj[j] , 'loadWheel:'+j);
			registerLoadWheel(LabelObj[j], 'loadWheelDrape');
		}
		else 
		{
			if(loadLabels){	labelCheckbox.disabled = false;	}
			else {	labelCheckbox.disabled = true;	}
		}
	}
	if(boundary){registerLoadWheel(boundary, 'loadWheelDrape');}
	//resetZlevels();
}
function moveEvent()
{
	map.events.register('moveend', null, function(evt) 
	{
		controlLayerVisibility();
		//activateControls('moveEvent');
		Event.stop(evt);
    });
}

function zoomEvent()
{
	map.events.register('zoomend', null, function(evt) 
	{
		controlLayerVisibility();
		//activateControls('zoomEvent');
		Event.stop(evt);
    });
}




