		
// ---------- initialise Openlayes mapping application
function loadAllBaseMaps()
{
	// avoid pink tiles
    OpenLayers.IMAGE_RELOAD_ATTEMPTS = 3;
    OpenLayers.Util.onImageLoadError = function() { this.style.display = "none"; }
	
	// OpenLayers Map setup 
	srs = 'EPSG:900913';
	spMerc=true; 
	res = 156543.0399; 
	xStart = 14881372.0; 
	yStart= -3003669.0; 
	startZoom=1;
	buff=2;
	ozBox = [11730943,  -6320424,  20037508,  -929500]; // all of Australia & NZ
	bounds = new OpenLayers.Bounds(ozBox[0],  ozBox[1],  ozBox[2],  ozBox[3]);
	var options = 
	{
		projection: srs,  
		units: "m",  
		controls:[],  
		maxResolution: res,  
		displayProjection: new OpenLayers.Projection("EPSG:4326"), 
		//numZoomLevels: 22,  
		maxExtent: new OpenLayers.Bounds(ozBox[0],  ozBox[1],  ozBox[2],  ozBox[3])
	};
	map = new OpenLayers.Map('mapGuiPanel', options);
	var startCoord = new OpenLayers.LonLat(xStart,  yStart);
	var startZm = startZoom;
	
	// set up the basemap options
	baseMap1 = new OpenLayers.Layer.Google( "GoogleMaps" , {type: G_NORMAL_MAP, sphericalMercator:spMerc});
	baseMap1.addOptions({isBaseLayer: true, wrapDateLine: true, buffer: buff, minZoomLevel:4, numZoomLevels:20, maxZoomLevels:20, maxResolution: res });
	map.addLayer(baseMap1);

	baseMap2 = new OpenLayers.Layer.Google( "GoogleHybrid" , {type: G_HYBRID_MAP, sphericalMercator:spMerc});
	baseMap2.addOptions({isBaseLayer: true, wrapDateLine: true, buffer: buff, minZoomLevel:4, numZoomLevels:20, maxZoomLevels:20, maxResolution: res });
	map.addLayer(baseMap2);

	baseMap3 = new OpenLayers.Layer.Google( "GoogleHills" , {type: G_PHYSICAL_MAP, sphericalMercator:spMerc});
	baseMap3.addOptions({isBaseLayer: true, wrapDateLine: true, buffer: buff, minZoomLevel:4, numZoomLevels:20, maxZoomLevels:20, maxResolution: res });
	map.addLayer(baseMap3);

	baseMap4 = new OpenLayers.Layer.Google( "GoogleSat" , {type: G_SATELLITE_MAP, sphericalMercator:spMerc});
	baseMap4.addOptions({isBaseLayer: true, wrapDateLine: true, buffer: buff, minZoomLevel:4, numZoomLevels:20, maxZoomLevels:20, maxResolution: res });
	map.addLayer(baseMap4);

	map.setCenter(startCoord,  startZm);

	// set up the map navigation controls of OpenLayers
	map.addControl(new OpenLayers.Control.PanZoomBar());
	map.addControl(new OpenLayers.Control.Navigation());
	//map.addControl(new OpenLayers.Control.NavToolbar());
	map.addControl(new OpenLayers.Control.MousePosition({div:$("mousePos")}));
	map.addControl(new OpenLayers.Control.Scale("scale"));

	//map.addControl(new OpenLayers.Control.LayerSwitcher()); 
	//OpenLayers.Control.NavToolbar({'div':OpenLayers.Util.getElement('mouseControl')}));
	//map.addControl(new OpenLayers.Control.KeyboardDefaults());	
	//map.addControl(new OpenLayers.Control.Permalink());
	//map.addControl(new OpenLayers.Control.MousePosition());
	//scaleBar = new OpenLayers.Control.Panel({div:$("winScale")});
	

	// initiate Google Maps geocoder   
	geocoder = new GClientGeocoder();
	
	
	
	
}	

// --------- main function to load all the Layer definitions in holdingDiv and as defined in inputFile
function buildLayers(inputFile, holdingDiv)
{
	// check if holding div exists
	if(!document.getElementById(holdingDiv)){alert ('Layers holding Div not available'); return;}
	var holdDiv = document.getElementById(holdingDiv);

//**** NB we should change this to get all admin layers off the numaps Database ****
	
	// check to see if the file is present 
	ajaxRequest = loadXml(applicationBase + inputFile, '' );
	if(!ajaxRequest) {alert('could not get the inputFile off server'); return;}
	var k=0;
	var layers= ajaxRequest.responseXML.getElementsByTagName("Layers");

	// get layers data from DOM into arrays for easier use
	var themes = layers[0].getElementsByTagName("Theme");
	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");
		var xml = themes[l].getElementsByTagName("Layer");
		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++)
		{
			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");
				getSldInfo(Sld[k]);
				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(' ');
				var leftparts = points[0].split(',');
				var rightparts = points[1].split(',');
				
				// transform geogs to spherical coords if required
				if (srs == 'EPSG:900913') 
				{
					// first LL point
					var point = geogs2google(leftparts);
					p1 = decodePoint(point);

					// second TR point
					var point = geogs2google(rightparts);
					p2 = decodePoint(point);
					
					// 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]);		}
			}
			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;
	
	// do a getcapabilities for the NuMaps site and get the BBox for each layer in the list
	var urlLast = '';

	// build the holder Form for Other Layers
	var layerForm = document.createElement('div');
	layerForm.style.width='100%';
	layerForm.style.height='100%'; 

		// build the Table within the Form
		var layerTable = document.createElement('table');
		layerTable.style.width='100%';

			// now the table body
			var layerTableBody = document.createElement('tbody');
			layerTableBody.style.color='#000000'; 
			layerTableBody.style.width='100%';
			layerTableBody.style.fontFamily='verdana';
			layerTableBody.style.fontSize='10px'; 
			layerTableBody.style.backgroundColor='#FFFFFF';

			// for each layer in the array setup the table row
			for(var i=0; i < numLayers ; i++)
			{
				// get the SLD for labels if available
				if(SldLabels[i] != 'none' && SldLabels[i] != '' && SldLabels[i] != null)
				{
					// get the label rules for the checkboxes 
					SldLabels[i] = applicationRoot+SldLabels[i];
					ajaxRequest = loadXml(SldLabels[i], '' );
					var sldRules = ajaxRequest.responseXML.getElementsByTagName("Rule");
					
					// Pick off the first rule for the legend element in the layers list
					getSldRenderRules(sldRules[0]);				
					MinzmLabels[i]=minScale;
					MaxzmLabels[i]=maxScale;
					//alert(MinzmLabels[i])
					//alert(MaxzmLabels[i])
				}
				// get the SLD for the layer if available
				if(Sld[i] != 'none' && Sld[i] != '' && Sld[i] != null)
				{
					// get the render rules for the checkboxes 
					Sld[i] = applicationRoot+Sld[i];
					ajaxRequest = loadXml(Sld[i], '' );
					var sldRules = ajaxRequest.responseXML.getElementsByTagName("Rule");
					
					// Pick off the first rule for the legend element in the layers list
					getSldRenderRules(sldRules[0]);			
					MinzmLayers[i]=minScale;
					MaxzmLayers[i]=maxScale;
					//	alert(MinzmLayers[i])
					//	alert(MaxzmLayers[i])
				}
				
				// what is the current scaleDenominator of the current map
				if(map)
				{	
					scaleDenom = map.getScale();
					zoomLevel = map.getZoom();
				}
				else // just use the init values
				{
					zoomLevel = startZoom;
					scaleDenom = startScale;
				}
				
				// set up a new row in table
				var row = document.createElement('tr');
				row.style.height='15px';
				row.style.border='1px solid #e1e1e1';
				row.setAttribute('id','arow:'+i);
				row.id='arow:'+i;
				row.style.backgroundColor='transparent';
				row.className='unselectedItem';
				//row.style.zInex='10';

				// setup rollover on each row
				bindEvent(row, 'mouseover' , rollover, 'false');
				bindEvent(row, 'mouseout' , rollout, 'false');

					// the first cell contains the layer visibility check box
					var cell = document.createElement('td');
					cell.style.width='20px';
					cell.className='unselectedItem';
					cell.id='layers:'+i;
					cell.setAttribute('id','layers:'+i);
					//cell.style.zInex='5';
					//bindEvent(cell, 'mouseover' , rollover,'false');
					//bindEvent(cell, 'mouseout' , rollout,'false');

						// create the Input checkbox for Layer selection
						var center = document.createElement('center');
							var box = document.createElement('input');
							box.setAttribute('type','checkbox');
							box.style.backgroundColor='transparent';
							box.id='layersChk:'+i
							box.style.position = 'relative';
							box.style.top="3px";
							box.style.left="0px";
							box.setAttribute('id','layersChk:'+i);
							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');
							//bindEvent(box, 'mouseover' , rollover,'false');
							//bindEvent(box, 'mouseout' , rollout,'false');
						center.appendChild(box);
					cell.appendChild(center);
				row.appendChild(cell);

					// the second cell contains the labels check box
					var cell = document.createElement('td');
					cell.className='unselectedItem';
					cell.style.width='20px';
					cell.id='label:'+i;
					cell.setAttribute('id','label:'+i);
					//cell.style.zInex='5';
					//bindEvent(cell, 'mouseover' , rollover,'false');
					//bindEvent(cell, 'mouseout' , rollout,'false');

						// create the Input checkbox
						var center = document.createElement('center');
							var box = document.createElement('input');
							box.setAttribute('type','checkbox');
							box.style.backgroundColor='transparent';
							box.style.position = 'relative';
							box.style.top="3px";
							box.style.left="0px";
							box.id='labelChk:'+i;
							box.setAttribute('id','labelChk:'+i);
							if (scaleDenom < MinzmLabels[i] || scaleDenom > MaxzmLabels[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]+' Labels';
							bindEvent(box, 'click', showHideLabels, 'false');
							//bindEvent(box, 'mouseover' , rollover,'false');
							//bindEvent(box, 'mouseout' , rollout,'false');
						center.appendChild(box);
					cell.appendChild(center);
				row.appendChild(cell);

					// the third cell contains the legend cell
					var cell = document.createElement('td');
					cell.style.width='20px'
					cell.className='unselectedItem';
					cell.setAttribute('id','legend:'+i);
					cell.id='legend:'+i;
					//bindEvent(cell, 'mouseover' , rollover,'false');
					//bindEvent(cell, 'mouseout' , rollout,'false');

						// create the legend div
						var box = document.createElement('div');
						box.style.height='12px';
						box.style.width='12px';
						box.style.marginLeft='auto';
						box.style.marginRight='auto';
						box.style.backgroundColor='transparent';
						box.setAttribute('id','legendChk:'+i);
						box.id='legendChk:'+i;


						// 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')
							{
								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.setAttribute('id','legendInner:'+i);
								box.id='legendInner:'+i;
								
								// 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','legendImg:'+i);
									img.id='legendImg:'+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='auto';
					cell.className='unselectedItem';
					cell.style.height='15px';
					cell.id='title:'+i;
					cell.style.cursor='pointer';
					cell.setAttribute('id','title:'+i);
					//bindEvent(cell, 'mouseover' , rollover,'false');
					//bindEvent(cell, 'mouseout' , rollout,'false');
					//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);

			layerTableBody.appendChild(row);

		}	
		layerTable.appendChild(layerTableBody);
	layerForm.appendChild(layerTable);
holdDiv.appendChild(layerForm);
//alert('Other layers now loaded');

}

function rollover(evt)
{
	var rowNum = getThisId(evt).split(":")[1];
	//alert(rowNum)
	if(document.getElementById('label:'+rowNum)){document.getElementById('label:'+rowNum).className='selectedItem';}
	if(document.getElementById('layers:'+rowNum)){document.getElementById('layers:'+rowNum).className='selectedItem';}
	if(document.getElementById('legend:'+rowNum)){document.getElementById('legend:'+rowNum).className='selectedItem';}
	if(document.getElementById('title:'+rowNum)){document.getElementById('title:'+rowNum).className='selectedItem';}
	//new Event.stop(evt);
}
function rollout(evt)
{
	var rowNum = getThisId(evt).split(":")[1];
	if(document.getElementById('layers:'+rowNum)){document.getElementById('layers:'+rowNum).className='unselectedItem';}
	if(document.getElementById('label:'+rowNum)){document.getElementById('label:'+rowNum).className='unselectedItem';}
	if(document.getElementById('legend:'+rowNum)){document.getElementById('legend:'+rowNum).className='unselectedItem';}
	if(document.getElementById('title:'+rowNum)){document.getElementById('title:'+rowNum).className='unselectedItem';}
	//new Event.stop(evt);
}

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();
	return bounds.intersectsBounds(LayerBounds[layerNumber]);
}

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());
}

function manipulateLayer(layNum)
{
	// if this layer is out of viewport bounds just return
	if(loadMe(layNum) || loadMe(layNum) == 'true') 
	{
		// Check to see what the status of this checkbox is
		if(document.getElementById('layersChk:'+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 = 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: buff}
						);
					}
					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: buff}
						);
					}
				}
				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:buff, 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);

			// make this layer the top layer for selection puposes
			bringToTop(LayerObj[layNum]);
		}
		else // turn loaded layer off but if it is the active layer de-actiate it
		{	
			if (LayerObj[layNum]) 
			{	LayerObj[layNum].setVisibility(false);		}
		}
	}
}

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);
		document.getElementById('legHolder').style.display='block'; // turn on this legend
	}
	new 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('labelChk:'+layerNumber).checked && load)
	{	
		// create the labels layer if not there
		if (!LabelObj[layerNumber])
		{
			var Labels = 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, 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);
		}	
		// now make the layer visible
		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);		}
	}
	resetZlevels();
}

function controlLayerVisibility()
{
	var scaleDenom = map.getScale();
	
	var numLayers=LayerObj.length;
	for (var j=0; j<numLayers; j++)
	{	
		// get the chechbox objects for each layer
		var layerCheckbox = document.getElementById('layersChk:'+j);
		var labelCheckbox = document.getElementById('labelChk:'+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');}
}





