
function openLayersLoad()
{
	// avoid pink tiles
	OpenLayers.IMAGE_RELOAD_ATTEMPTS = 3;
	OpenLayers.Util.onImageLoadError = function() { this.style.display = "none"; }
	eventsLog = OpenLayers.Util.getElement("eventsLogID");
    
	//--------------- OpenLayers Map setup ------------------------	
	
		//alert (srs)
	if (srs == 'EPSG:900913')	//------------- sphericalMercator option
	{
		var options = {
			projection: srs, 
			units: "m", 
			controls:[], 
			maxResolution: 'auto', 
			numZoomLevels: 19, 
			minZoomLevel:3, 
			maxExtent: new OpenLayers.Bounds(ozBox[0], ozBox[1], ozBox[2], ozBox[3]),
			displayProjection: new OpenLayers.Projection("EPSG:4326")
		};
		map = new OpenLayers.Map('map',options);
		var startCoord = new OpenLayers.LonLat(xStart, yStart);
		var startZm = 1;
	}
	else						//------------ standard geographicals option
	{
		var options = {
			projection:srs, 
			controls:[], 
			units:'degrees', 
			maxResolution: 0.703125, 
			numZoomLevels:19,  
			minZoomLevel:3, 
			maxExtent: new OpenLayers.Bounds(ozBox[0], ozBox[1], ozBox[2], ozBox[3])};
		map = new OpenLayers.Map('map',options);
		var startCoord = new OpenLayers.LonLat(xStart, yStart);
		var startZm = 1;
	}
	// Base layers Options
	googleMap = new OpenLayers.Layer.Google( "GoogleMap" , {type: G_NORMAL_MAP, sphericalMercator:spMerc} );
	googleMap.addOptions({isBaseLayer: true, buffer: 0 });
	map.addLayer(googleMap);

	// Navigation controls
	map.addControl(new OpenLayers.Control.PanZoomBar({div:$('zoomControl')}));
	map.addControl(new OpenLayers.Control.NavToolbar({'div':OpenLayers.Util.getElement('mouseControl')}));
	//map.addControl(new OpenLayers.Control.LayerSwitcher({'ascending':true}));
	map.addControl(new OpenLayers.Control.MousePosition({div:$('mousePos')}));
	map.addControl(new OpenLayers.Control.Scale());
	map.events.remove('dblclick');
	map.setCenter(startCoord, startZm);

	// set up the zooming events
	map.events.register('zoomend', null, function(evt) 
	{
		var macroCheckBox = document.getElementById('macro'); 
		zmlevel= map.getZoom();

		// run thru all themes and set all check boxes where appropriate
		//for (var j=0; j<Theme.length ; j++)
		//{	themeVisibility("theme"+j)		}

		// enhancement: When you zoom in or out and the Theme checkeall control is 'checked' 
		// it should add any layers that fall in the scale rule. 
		// As it is the user will need to physically check any layers that should be group displayed
		
		// now run thru the layer controls array setting Checkbox to deactivate 
		for (j=0; j<numLayers; j++)
		{
			var layId= 'layer'+j;
			var layerCheckbox = document.getElementById(layId)
			
			// if the layer is viewable at this layer set the checkbox to reflect
			if (zmlevel < Minzm[j] || zmlevel > Maxzm[j])
			{	layerCheckbox.disabled = true;
				layerCheckbox.checked=false;
				layerVisibility(layId);
			}
			else
			{	layerCheckbox.disabled = false;
				if (macroCheckBox.checked)
				{
					layerCheckbox.checked= true;
					layerVisibility(layId);
				}
			}
		}
		Event.stop(evt);
    });
	// Initialise the user Layer Manager
	updateLayers();		// initialize the overlays

	// set the focus to the address data entry box
	var addressBox = document.getElementById ('search');
	addressBox.focus();

	// ---------------- Google Maps geocoder --------------------      
	geocoder = new GClientGeocoder();
}

// ------------------ function to check if object exists and if so remove it --------------------
function checkRemoveObject(oId)
{
	if (document.getElementById(oId))
	{	
		var obj = document.getElementById(oId);
		obj.parentNode.removeChild(obj);
		obj.value=null;
		//alert('object '+oId+' removed')
	}
}

// --------------- Functions called for each layer to display the 'Loading' icon/message -------------------------//

// ------------------- for multiple lasyers and one wheel ----------------------//
function registerEvents(layer) 
{
	layer.events.register("loadstart", layer, function() 
	{
		if (layersLoading == 0) 
		{	eventsLog.style.display='block';   }
			layersLoading++;
		});
		layer.events.register("loadend", layer, function() 
		{
			layersLoading--;
			if (layersLoading == 0) 
			{	 eventsLog.style.display='none';   }
		});
}

// -------------------- for each separate layer wheel --------------------------//
function registerLoadWheels(layer) 
{
	layer.events.register("loadend", layer, function() 
	{
		//alert ("loading done")
		var no = getIdNum(layer.name);
		var objId = "wheel"+no;
		document.getElementById(objId).style.display='none';  
	});
	
	layer.events.register("loadstart", layer, function() 
	{
		//alert("loading layer")
		var no = getIdNum(layer.name);
		var objId = "wheel"+no;
		document.getElementById(objId).style.display='block'; 
	});

	
}


function getIdNum(lay)
{
	for (var i=0; i<numLayers; i++)
	{
		if (lay == Title[i])
		{ layn = i; return layn;}
	}
}
// ------------------ function to check or uncheck all boxed ----------------------
function checkall(start, end, id)
{
	// This will turn the layers on or off for the whole lot or just for the theme
	// However 
	
	//alert(start+" : "+end+" : "+id)
	if (start == 0 && end == 0)
	{	end=numLayers;	}
	
	if (id =='macro')
	{
		var macroCheckBox = document.getElementById(id)
	}
	else 
	{
		var themeCheckBox = document.getElementById(id); 
	}
	// check to see if macro checkbox set to checked
	for (var i=start; i<end; i++)
	{	// check to see if it should be checked at this scale
		if (onoffTest(i)) 
		{
			// OK go ahead and activate checkbox for visible layer
			var layerString = "layer"+i;
			var checkbox = document.getElementById(layerString);
			if (id == 'macro')
			{	checkbox.checked = macroCheckBox.checked;
				// now check all the theme checkboxes
				for (var j=0; j<Theme.length ; j++)
				{
					var themeCheckBox = document.getElementById("theme"+j);
					themeCheckBox.checked = macroCheckBox.checked;
				}
			}
			else
			{	checkbox.checked = themeCheckBox.checked;}
			// now make this layer visible
			layerVisibility(layerString)
		}
	}
}

// ------------------------ function to get layer data from XML file into arrays -----------------
function getLayerData()
{
	var url = "data/layers_fix.xml";
	var query = "?bruid="+new Date().getTime();
	//ajaxFunction(url,query);
	//alert(url+query)
	ajaxRequest = loadXml(url, query, false);
	var k=0;
	// OK all is well now get data from DOM into arrays for easier use
	var themes = ajaxRequest.responseXML.getElementsByTagName("Theme");
	//alert (themes.length);
	var layers= ajaxRequest.responseXML.getElementsByTagName("Layer");
	//alert (layers.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");
		var themeLink = themes[l].getAttribute("link");
		//alert (themeAbstract)
		var xml = themes[l].getElementsByTagName("Layer");
		//alert (xml.length);
		Theme[l] = themeName;
		ThemeLayers[l] = xml.length;
		Abstract[l] = themeAbstract;
		Security[l] = themeSecurity;
		User[l] = themeUser;
		Pass[l] = themePass;
		tLink[l]= themeLink;
		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++)
		{
			Url[k] = meshBlocksBase;
			if (xml[i].getAttribute("url")) {Url[k]	= xml[i].getAttribute("url");}
			//Url[k] = xml[i].getAttribute("url");
			Ogc[k] = xml[i].getAttribute("ogc");
			Title[k] = xml[i].getAttribute("title");
			Vis[k] = xml[i].getAttribute("vis");
			Leg[k] = xml[i].getAttribute("ledg"); 	//alert(Leg[k]);
			Gfi[k] = xml[i].getAttribute("gfi");
			Name[k] = xml[i].getAttribute("name");
			Srs[k] = xml[i].getAttribute("srs");
			Sld[k] = xml[i].getAttribute("sld");
			
			Style[k] = xml[i].getAttribute("style");
			Opac[k] = xml[i].getAttribute("opac");
			Format[k] = xml[i].getAttribute("form");
			Minzm[k] =xml[i].getAttribute("minzm");
			Maxzm[k] =xml[i].getAttribute("maxzm");
			Status[k] = 'off';
			Plotted[k]='no';
			if (Vis[k] =='true'){Status[k] = "on";}
			
			Labels[k] = xml[i].getAttribute("labels");
			if (Labels[k] == 'false' || Labels[k] == null){Labels[k] = false;}
			else if (Labels[k] == 'true'){Labels[k] = true;}
						
			if (Style[k] != "")
			{ 
				var styles=Style[k].split(",");
				selectedStyle[k]=styles[0];
			}
			k = k +1;
		}
	}
	numLayers=k;
	//alert (numLayers)
}

 //---------------- function to check all the layers for a theme -------------------------------
 function themeVisibility(id)
 {
	//alert ("Theme Id = "+id);
	var themeNo = id.split('theme');
	//alert (themeNo[1])
	var tno = parseInt(themeNo[1]);
	var nols = parseInt(Theme.length)
	var	start=0; var end = 0;
	for (var ii=0; ii<nols; ii++)
	{
		if (ii <= tno)
		{
			start=end
			end=start+ThemeLayers[ii]
			//alert(ii+" : "+start+" to "+end)
		}
	}
	//alert (nols+"  range = "+start+" to "+end)
	checkall(start, end, id)
 }


 // -----------------------  function to set up a select box of layers ------------------ 
function makeLayerControl ()
{
	// This function must be executed insitue....
	var start = 0;
	//alert ("there "+Theme.length+ " Themes")
	for (var h=0; h<Theme.length ; h++)
	{
		// Write out the Theme header row
		var themeId = "theme"+h;
		var boxover="TITLE='header=[Service Abstract] cssbody=[dvbdy1] cssheader=[dvhdr1] body=["+Abstract[h]+"]'";
				
		//alert('security = '+Security[j])
		document.write ("<tr class='headerRow'; id='themeId'  >");
		var tlt = "Security Access";
		if(User[h] == '') {tlt = "Unconstrained Access"}
		var securityBoxover="TITLE='header=["+tlt+"] cssbody=[dvbdy1] cssheader=[dvhdr1] body=[<b>User : </b>"+User[h]+"<br><b>Pass : </b>"+Pass[h]+"]'";
		var onOff = '';
		document.write("<td><input type='checkbox' "+onOff+" value="+Theme[h]+" id="+themeId+"  title='Check this box to display all displayable layers for this Sevice' onclick='javascript:themeVisibility(this.id)' /></td>");
		document.write ("<td "+securityBoxover+"><center><img src='../images/"+Security[h]+"'  /></center></td>");
		if (tLink[h] != '')
		{		document.write ("<td "+boxover+" colspan='2'><a href='"+tLink[h]+"' target='_blank'>"+Theme[h]+"</a></td></tr>");}
		else
		{		document.write ("<td "+boxover+" colspan='2'>"+Theme[h]+"</td></tr>");}
		
		//alert ("there "+ThemeLayers[h]+ " Layers in this Theme")
		var end = start+ThemeLayers[h]
		//alert (themeId+" : "+start+" to "+end)
		for (var j=start; j<end; j++)
		{
			//alert (Theme[j]+ " : "+lastTheme)
			// Setup the table row for the layer controls
			document.write("<tr style='height:15px;'>");

			// Setup the cell for the layer checkbox and generate the control
			var layerId = 'layer'+j;
			var layerBox = 'layerBox'+j;
			var wheelId = 'wheel'+j;
				
			// get current zoom level and check against rules
			zmlevel = 3
			//alert (Minzm[j]+" : "+zmlevel+" : "+Maxzm[j])
			if (zmlevel < Minzm[j] || zmlevel > Maxzm[j])
			{	var onOff ="disabled";}
			else
			{	var onOff = ''}
			document.write("<td style='border: 1px solid #ffffff'>");
			/*
			document.write("<center><table style='font-size:7px; text-align:center;border-collapse:collapse;'><tr style='width:15px; height:8px;'><td title='click here to move layer up'>Up</td></tr><tr style='width:15px; height:8px;'><td title='click here to move layer down' >Dn</td></tr></table></center>");
			*/
			document.write("<div id='"+wheelId+"' style=' display:none;'>");
			document.write("<center><img src='../images/loader.gif' /></center>");
			document.write("</div>");
			
			document.write("</td>");
			document.write("<td id="+layerBox+" class='smallControl' >");
			document.write("<input type='checkbox' "+onOff+" value="+layerId+" id="+layerId+"  title='Check this box to display a layer' onclick='javascript:layerVisibility(this.value)' />");
			document.write("</td>");

			// Setup the cell for the active layer control and generate the control
			var activeId = 'active'+j;
			document.write("<td class='smallControl' onclick='javascript:layerActivation(this.id); return false;' id="+activeId+" onmouseover=overCell(this.id); onmouseout=outofCell(this.id); >");
					
			var text=" ";
			if (Gfi[j]!='false' && !Labels[j]){ var text="i";}
			document.write("<div class='empty' title='click to make this layer the active layer'>"+text+"</div>");
			document.write("</td>");

			// write out the layer name cell
			var ledgId='ledg'+j;
			var titleData = Title[j];
			var ledgBox='ledgBox'+j;
			opacityValue = Opac[j];
			document.write("<td id="+ledgBox+" class='bigControl' >");
			
			// make bold if there is a legend 
			if (Leg[j] !='none' ) 
			{	var internal = "style='font-weight:bold;' title='Legend is available for this layer' value='"+titleData+"'";}
			else
			{	var internal = "title='Legend not available for this layer'";}
			document.write("<div "+internal+">"+titleData+"</div>");
				
			// now if styles available and there are more than one make a Select Box of options
			if (Style[j] != "")
			{
				var styleId = "layerStyles"+j;
				// split off into an array and see how many styles are in the array
				var styles = Style[j].split(',');
				if (styles.length > 1) 
				{
					document.write("<SELECT id='"+styleId+"' size='1' class='stylesBox' onchange='applyStyle(this.id); return false;' >");
					// now build up the style options
					for (var n=0; n<styles.length ; n++)
					{
						var text = styles[n];
						if (styles[n] == 'default')
						{
							document.write("<OPTION class='optionsBox' selected='selected' value='"+styles[n]+"' >"+text+"</OPTION>");
						}
						else
						{
							document.write("<OPTION class='optionsBox' name='style' value='"+styles[n]+"' >"+text+"</OPTION>");
						}
					}
					document.write("</SELECT>");
					}
			}
		}	
		// close off table cell and row
		document.write("</td>");
		document.write("</tr>");
		start=end;
	}
}
// ----------------- fuction to apply the selected style to a layer ---------------
function applyStyle(layerStyleId)
{
	var temp = layerStyleId.split("layerStyles")
	var layerNumb = temp[1];
	//alert (layerNumb)
	var selection=document.getElementById(layerStyleId);
	var option = selection.options[selection.selectedIndex].value;
	selectedStyle[layerNumb]=option;
	
	// Set the layer to be active after all others have been set
	var layId= 'layer'+layerNumb;
	var layerCheckbox = document.getElementById(layId)
	
	// If viewable at this scale set layer to visible and adjust all layers
	//alert (onoffTest(layerNumb))
	if (onoffTest(layerNumb))
	{
		if (Plotted[layerNumb] == 'yes') // if already previously plotted
		{	
			layNames[layerNumb].addOptions({'displayInLayerSwitcher': false}); // decativate from layerSwitcher
			layNames[layerNumb].setVisibility(false); // make layer invisivble
			Plotted[layerNumb]='no';
		}
		layerCheckbox.checked=true;
		layerVisibility(layId); // this sets the layer picked to be visible 
	}
	
}
// ----------- two functions to handle mouseovers of table rows --------------------
function overCell (decell)
{
	var activearray = decell.split('active');
	var layNumb = activearray[1];
	var lb = "ledgBox"+layNumb;
	var lcb= "layerBox"+layNumb;
	var cellcolor = document.getElementById(decell);
	cellcolor.style.backgroundColor="#D4FFFF";
	var cellcolor = document.getElementById(lb);
	cellcolor.style.backgroundColor="#D4FFFF";
	var cellcolor = document.getElementById(lcb);
	cellcolor.style.backgroundColor="#D4FFFF";
}
function outofCell (decell)
{
	var activearray = decell.split('active');
	var layNumb = activearray[1];
	var lb = "ledgBox"+layNumb;
	var lcb= "layerBox"+layNumb;
	var backColor = "#FFFFD4";
	if (activeLayer == layNumb)	{backColor = "#E1E1E1";}
	var cellcolor = document.getElementById(decell);
	cellcolor.style.backgroundColor=backColor;
	var cellcolor = document.getElementById(lb);
	cellcolor.style.backgroundColor=backColor;
	var cellcolor = document.getElementById(lcb);
	cellcolor.style.backgroundColor=backColor;
}
function enterTab (tabId)
{
	var tab = document.getElementById(tabId)
	tab.style.color='black';
}
function exitTab (tabId)
{
	var tab = document.getElementById(tabId)
	tab.style.color='gray';
}


// ------------------ function process all the layers as defined in layer control file -----------
function updateLayers()
{
	//alert("updating layers")
	var selForm = document.getElementById('lays');
	var layerList = selForm.getElementsByTagName("input");
	var k=0;
	var l=0;
			
	// set up the drapelist server request
	//var auth = '&numakey='+numapsKey;
	var domainUrl = applicationBase.split('.au/')[0]+'.au';		// strip off the trailing slash
	domainUrl = domainUrl.split('//')[1];						// strip off the leading http://
	
	// Step through all layers
	for (var j=0; j<layerList.length; j++)
	{	
		if (layerList[j].type =='checkbox')
		{
			
			var requested = layerList[j].checked;
			//alert (requested+ " : "+Plotted[k]);
			//alert ("Name = "+Name[k]+ " and srs = "+Srs[k])

			// if layer not already visible and not previously plotted - create the new layer
			if (requested && Plotted[k] == 'no') // requested but not created - CREATE Layer
			{		
				//alert("first time")
				Plotted[k]='yes';  // this is a flag indicating that the layer is already visible
				
				if (Name[k] !="" && Sld[j] =="") 
				{	
					// separate all layers into an array of layers
					var layerNames = [];
					layerNames = Name[k].split(',');
					var no = layerNames.length;
					//alert("layer array = "+layerNames)
			
					// if styles, then assign the selected style for the layer to an array of styleNames
					var styleNames = [];
					if (Style[k] != "")
					{	for (var m=0; m<no ;m++){styleNames[m] = selectedStyle[k]; }}// set the same for all in layers specified 
					else
					{	for (var m=0; m<no ;m++){styleNames[m] = 'default'; }}// set to 'default' for all in layers specified 
					
					// create the map layer
					
					layNames[k]= new OpenLayers.Layer.WMS(Title[k], Url[k], {layers: layerNames, styles: styleNames, format: Format[k], version:Ogc[k], srs: Srs[k], transparent:'true', quality: 'BEST', reaspect: 'false', numakey: numapsKey, domain: domainUrl }, { tileSize: new OpenLayers.Size(512,512) });
					layNames[k].addOptions({isBaseLayer: false,  buffer: 1, visibility: true, opacity:Opac[k], reproject: true });
					//registerLoadWheels(layNames[k]);
					map.addLayer(layNames[k]);					
					//registerStopWheel(layNames[k]);
				}
				if (Sld[j] !="" )
				{	
					//alert("label flag = "+Labels[j]);
					if (Labels[j])
					{
						
						var sldurl=baseUrl+Sld[k];
						var unzippedSldUrl=baseUrl+Sld[k];
						layNames[k] = new OpenLayers.Layer.WMS.Untiled(Title[k], Url[k], {sld:sldurl, format: Format[k], version:Ogc[k], srs: Srs[k],	transparent:'true', quality: 'BEST', reaspect: false, numakey: numapsKey, domain: domainUrl}, { tileSize: new OpenLayers.Size(512,512) });
						
						layNames[k].addOptions({isBaseLayer: false,  buffer: 1, visibility: true, opacity:Opac[k],reproject: true });
						//registerLoadWheels(layNames[k]);
						map.addLayer(layNames[k]);
					}
					else
					{
						//alert(Sld[k]);
						var sldurl=baseUrl+Sld[k];
						//alert("layer setup sld = "+sldurl)
						layNames[k] = new OpenLayers.Layer.WMS(Title[k], Url[k], {sld:sldurl, format: Format[k], version:Ogc[k], srs: Srs[k],	transparent:'true', quality: 'BEST', reaspect: false, numakey: numapsKey, domain: domainUrl}, { tileSize: new OpenLayers.Size(512,512) });
						
						layNames[k].addOptions({isBaseLayer: false,  buffer: 1, visibility: true, opacity:Opac[k],reproject: true });
						//registerLoadWheels(layNames[k]);
						map.addLayer(layNames[k]);
					}
					//registerStopWheel(layNames[k]);
				}
			}
			// If layer is visible but not wanted - just turn it off
			if (!requested && Plotted[k] == 'yes') // not requested but already created - make sure layer is INVISIBLE
			{
				alert ("make existing layer visible")
				layNames[k].addOptions({'displayInLayerSwitcher': false});  
				layNames[k].setVisibility(false);
				Plotted[k] = 'no';
			}
			k=k+1;
		}
	}
}
// Function that tests if a layer is selectable at the current scale
function onoffTest(layNum)
{
	var lName = 'layer'+layNum;
	zmlevel= map.getZoom();
	var layerCheckbox = document.getElementById(lName)
	if (zmlevel < Minzm[layNum] || zmlevel > Maxzm[layNum]){ return false; }
	else { return true; }
}

//---------------- This function will set a layer as active and make it visible as well ------------------------
function layerActivation(rName)
{
	// get the layer number for other layer elements
	var activearray = rName.split('active');
	var layNumb = activearray[1];

	// Check to see if the selected layer can selected at this scale
	if (!onoffTest(layNumb)) {return false}
			
	// Set the layer to be active after all others have been set
	var layId= 'layer'+layNumb;
	var layerCheckbox = document.getElementById(layId)
	
	// kill off any previously registered event and reactivate defaults
	map.events.remove('dblclick');
	
	// set layer to visible and adjust all layers
	layerCheckbox.checked=true;
	layerVisibility(layId); // this sets the layer picked to be visible 
	
	// check to see if there is a legend available for this layer
	var pntr=layNumb;
	if (Leg[layNumb] == 'none' || Leg[layNumb] == ''){killLegend()}
	else if (Leg[layNumb] == 'sld'){sldLegend(pntr)}
	else if (Leg[layNumb] == 'glg' || Leg[layNumb] != ''){otherLegend(pntr)}

	// Now go and set all the layer cells to either active of not
	for (var i=0; i<numLayers; i++)
	{
		var layId= 'layer'+i;
		var layerCheckbox = document.getElementById(layId)
		var layIdBox= 'layerBox'+i;
		var layerCheckboxBox = document.getElementById(layIdBox)
		var boxId = "active"+i;
		var layerActive = document.getElementById(boxId);
		var ledgId = "ledgBox"+i;
		var layerTitle = document.getElementById(ledgId);
		
		// for all other layers set boxes to non-active
		if ( i != layNumb)
		{	
			layerActive.style.backgroundColor='#FFFFD4';
			layerCheckboxBox.style.backgroundColor='#FFFFD4';
			layerTitle.style.backgroundColor='#FFFFD4';
		}
		else
		{
			layerActive.style.backgroundColor='#E1E1E1';
			layerCheckboxBox.style.backgroundColor='#E1E1E1';
			layerTitle.style.backgroundColor='#E1E1E1';
		}
	}
	// if this layer is queryable create the event to do a getFeatureInfo
	if (Gfi[layNumb] != 'false')
	{
		// now make the new event for this data layer
		var wms = layNames[layNumb];
		map.events.register('dblclick', map, function (e) 
		{
             var url =  wms.getFullRequestString(
			{
                 REQUEST: "GetFeatureInfo",
                 //EXCEPTIONS: "bxfs",
                 BBOX: wms.map.getExtent().toBBOX(),
                 X: e.xy.x,
                 Y: e.xy.y,
                 INFO_FORMAT: Gfi[layNumb],
                 //QUERY_LAYERS: wms.params.LAYERS,
				 QUERY_LAYERS: Name[layNumb],
				 QUALITY: 'BEST',
                 WIDTH: wms.map.size.w,
				 SERVICE: 'WMS',
                 HEIGHT: wms.map.size.h,
				 RADIUS: '3',
				 FEATURE_COUNT: "1"
			});
				//alert (url)
			if (Gfi[layNumb] == 'text/html' || Gfi[layNumb] == 'text/plain')
			{
				popUp(url, '', '800', '450');
			}
			else
			{
				//ajaxGet('server_scripts/getgfi.php?', 'url='+url, '&xml=gfiData.xml', 'gfiData.xml')
				//alert ("OK")
				//OpenLayers.loadURL(url, '', this, getXML);
				}
            Event.stop(e);
      });
	}
	/*
    function getXML(response) { 
		alert("OK2")
        var xmlResponse= response.responseXML;
		alert(xmlResponse);
		var xml = xmlResponse.getElementsByTagName("Feature");
		alert (xml.length)

    }*/

	// now go and make sure that the old active layer is not active anymore
	var oldActivelayer='layer'+activeLayer;
	layerVisibility(oldActivelayer);
	activeLayer=layNumb;
	
	// set the focus to the address data entry box
	var addressBox = document.getElementById ('search');
	addressBox.focus();
}

// ------------------ function to control visibility of layers as per layer selection -----------
function layerVisibility(lName)
{
	var layarray = lName.split('layer');
	var k=layarray[1];
	//alert(lName+ " : " +k)
	//var selForm = document.getElementById('lays');
	var layerList = document.getElementById(lName);
	var requested = layerList.checked;
	//alert (requested)
	//alert (lName+" = "+requested+ " : "+Plotted[k]);
	
	// set up the drapelist server request
	//var auth = '&numakey='+numapsKey;
	domainUrl = applicationBase.split('.au/')[0]+'.au';		// strip off the trailing slash
	domainUrl = domainUrl.split('//')[1];						// strip off the leading http://
	
	// if layer is requested just create it 
	if (requested ) 
	{		
		if (Plotted[k] == 'yes') // if already previously plotted
		{	
			layNames[k].addOptions({'displayInLayerSwitcher': false}); // decativate from layerSwitcher
			layNames[k].setVisibility(false); // make layer invisivble
		}
		
		// plot the layer from cache or from a new web request
		if (Name[k] !="" && Sld[k] == "") // for a layer without SLD rendering
		{	
			// separate all layers into an artray of layers
			var layerNames = [];
			layerNames = Name[k].split(',');
			var no = layerNames.length;

			// if styles, then assign the selected style for the layer to an array of styleNames
			var styleNames = [];
			if (Style[k] != "" )
			{	for (var m=0; m<no ;m++){styleNames[m] = selectedStyle[k]; }}	// set the same for all in layers specified 
			else
			{	for (var m=0; m<no ;m++){styleNames[m] = 'default'; }}			// set to 'default' for all in layers specified 
			//alert(Url[k])
			// now build the layer with appropriate styling
			layNames[k]= new OpenLayers.Layer.WMS(Title[k], Url[k], {layers: layerNames, styles: styleNames, format: Format[k], version:Ogc[k], transparent:'true', quality: 'BEST', reaspect: 'false', numakey: numapsKey, domain: domainUrl}, { tileSize: new OpenLayers.Size(512,512) });
			layNames[k].addOptions({isBaseLayer: false,  buffer: 1, visibility: true, opacity:Opac[k], reproject: true});
			registerLoadWheels(layNames[k]);
			map.addLayer(layNames[k]);
			
	
			//registerStopWheel(layNames[k]);
			Plotted[k]='yes';  // this is a flag indicating that the layer is already visible
			return;
		}
		if (Sld[k] !="" ) // for a layer with SLD rendering
		{	
			//alert("label flag = "+Labels[k]);
			if (Labels[k])
			{
				var sldurl = baseUrl+Sld[k];
				layNames[k] = new OpenLayers.Layer.WMS.Untiled(Title[k], Url[k], {sld:sldurl, format: Format[k], version:Ogc[k], srs: Srs[k],	transparent:'true', quality: 'BEST', reaspect: false, numakey: numapsKey, domain: domainUrl}, { tileSize: new OpenLayers.Size(512,512) });
				layNames[k].addOptions({isBaseLayer: false,  buffer: 1, visibility: true, opacity:Opac[k],reproject: true });
				registerLoadWheels(layNames[k]);
				map.addLayer(layNames[k]);

			}
			else
			{
				//alert(Sld[k]);
				var sldurl=baseUrl+Sld[k];
				//alert("layer vis sld = "+sldurl)
				layNames[k] = new OpenLayers.Layer.WMS(Title[k], Url[k], {sld:sldurl, format: Format[k], version:Ogc[k], srs: Srs[k],	transparent:'true', quality: 'BEST', reaspect: false, numakey: numapsKey, domain: domainUrl}, { tileSize: new OpenLayers.Size(512,512) });
				layNames[k].addOptions({isBaseLayer: false,  buffer: 1, visibility: true, opacity:Opac[k],reproject: true });
				registerLoadWheels(layNames[k]);
				map.addLayer(layNames[k]);
			}
			/*
			//alert(Sld[k]);
			var sldurl=baseUrl+Sld[k]+"?"+new Date().getTime();
			layNames[k] = new OpenLayers.Layer.WMS(Title[k], Url[k], {sld:sldurl, format: Format[k], version:Ogc[k],	transparent:'true', quality: 'BEST', reaspect: false}, { tileSize: new OpenLayers.Size(512,512) });
			registerLoadWheels(layNames[k]);
			layNames[k].addOptions({isBaseLayer: false,  buffer: 1, visibility: true, opacity:Opac[k], reproject: true });
			//registerEvents(layNames[k]);
			map.addLayer(layNames[k]);*/
			//registerStopWheel(layNames[k]);
			Plotted[k]='yes';  // this is a flag indicating that the layer is already visible
			return;
		}
	}
	// If layer is visible but not wanted - just turn it off
	if (!requested && Plotted[k] == 'yes') // not requested but already created - make sure layer is INVISIBLE
	{
		layNames[k].addOptions({'displayInLayerSwitcher': false});  
		layNames[k].setVisibility(false);
		Plotted[k] = 'no';
		return;
	}
	// set the focus to the address data entry box
	var addressBox = document.getElementById ('search');
	addressBox.focus();
}
//----------------------------------------------------------------------------------------------
function changeStyles(id)
{
	document.getElementById(id).value='';
	document.getElementById(id).style.color='#000000';
}
//-----------------------------------------------------------------------------------------------
function otherLegend(m)
{
	var head = Title[m];
	
	// get the DOM elements
	var legend=document.getElementById("legend2");
	var imageHolder=document.getElementById("legend2Image");
	var heading=document.getElementById("legend2Title");
	var sidebar=document.getElementById("lays");
	killLegend();

	// to be certain turn off the SLD legend
	//if(document.getElementById("legend")){document.getElementById("legend").className='legendOff';}
	
	// write out the heading
	heading.innerHTML="<span>"+head+"</span>";
	
	// if there is already an image node - kill it off
	checkRemoveObject("legImage")
	
	// create new image node
	var legImage = document.createElement('img');
	legImage.setAttribute('id','legImage');
	legImage.id='legImage';
	
	// create the GetLegendGraphic request
	var glgRequest = Url[m];
	var parts = glgRequest.split("?");
	if (parts.length >1 )
	{ 	glgRequest += "&";	}
	else
	{	glgRequest += "?";	}
	glgRequest += "service=WMS&version="+Ogc[m];
	glgRequest += "&request=GetLegendGraphic&format="+Format[m];
	glgRequest += "&layer="+Name[m];
	glgRequest += "&numakey="+numapsKey;
	glgRequest += "&domain="+domainUrl;
	//alert(glgRequest)
		
	// assign the getlegendgraphic to the image node
	legImage.src=glgRequest;
	imageHolder.appendChild(legImage);
	
	// now toggle Off big sidebar and activate legend
	sidebar.className = 'controlTableSmall';
	legend.className='legendOn';
	
	// set the focus to the address data entry box
	document.getElementById ('search').focus();
}

//--------------------- function to build and display a SLD generated legend ---------------------
function sldLegend(m)
{
	// if there is already an image node - kill it off
	checkRemoveObject("legImage")
	
	// get the DOM elements	
	var legHolder = document.getElementById("legendBackground");
	var sidebar=document.getElementById("lays");
	killLegend();

	// to be certain turn off the other legend
	//if(document.getElementById("legend2")){document.getElementById("legend2").className='legendOff';}

	// Buld the SLD Legend
	var Url= applicationBase+Sld[m];
	opacityValue = Opac[m];
	if(!buildLegend (Url, legendBackground, "legend", legendTitle, legendTable, legendBox, legendText, tdCell, null, null, null)) 
		{alert ("legend could not be created")}

	// now toggle Off big sidebar and activate legend
	sidebar.className = 'controlTableSmall';
	legHolder.className='legendOn';
	
	// set the focus to the address data entry box
	document.getElementById ('search').focus();
}
// ---------------- function to turn off the legend and reclaim space in the Layer Control 
function killLegend()
{
	var legend = document.getElementById('legendBackground')
	var legend2 = document.getElementById('legend2')
	var sidebar = document.getElementById('lays')
	legend.className='legendOff';
	legend2.className='legendOff';
	sidebar.className='controlTableBig';
	
	// set the focus to the address data entry box
	document.getElementById ('search').focus();

}

// ---------------- function to manage the tabbed information area ----------------
function getContent (tabId)
{
	//alert (tabId);
	var number = tabId.split('tab');
	var contentId = 'cont'+number[1];
	//var tabtopId = 'tabtop'+number[1];
	//alert (contentId)
	if (contentId == currentId){ return; }
	var newContent = document.getElementById(contentId);
	var oldContent = document.getElementById(currentId);
	oldContent.style.zIndex='0';
	newContent.style.zIndex='20';
	var oldTab =  document.getElementById(currentTab);
	var newTab =  document.getElementById(tabId);
	//var oldTabTop = document.getElementById(currentTabTop);
	//var newTabTop = document.getElementById(tabtopId);
	oldTab.style.zIndex='12';
	newTab.style.zIndex='22';
	//newTabTop.style.zIndex='22';
	//oldTabTop.style.zIndex='12';
	oldTab.style.backgroundColor='#E1E1E1';
	newTab.style.backgroundColor='#FFFFD4';
	//oldTabTop.style.backgroundColor='#E1E1E1';
	//newTabTop.style.backgroundColor='#FFFFD4';
	currentTab = tabId;
	//currentTabTop = tabtopId;
	currentId = contentId;
	
}
function swapBase(newBaseLayer)
{
	//alert(newBaseLayer)
/*if (newBaseLayer == 'TerraPagesCache' && TerraPagesCache == null)
	{	
		TerraPagesCache = new OpenLayers.Layer.WMS( "TerraPages Cache", wmscdev, {layers: 'UnprojectedStreet', format: 'image/gif'}, {isBaseLayer: true, buffer: 1, numZoomLevels:15, maxZoomLevels:15} ); 
		map.addLayer(TerraPagesCache);
		//registerEvents(ve);
	}
*/
	if (newBaseLayer == 'googleMap' && googleMap == null)
	{	googleMap = new OpenLayers.Layer.Google( "GoogleMap" , {type: G_NORMAL_MAP, sphericalMercator:spMerc} );
		googleMap.addOptions({isBaseLayer: true, buffer: 1, numZoomLevels:20, maxZoomLevels:20 });
		map.addLayer(googleMap);
		//registerEvents(googleMap);
	}
	if (newBaseLayer == 'googleSat' && googleSat == null)
	{	googleSat = new OpenLayers.Layer.Google( "GoogleSat" , {type: G_SATELLITE_MAP, sphericalMercator:spMerc} );
		googleSat.addOptions({isBaseLayer: true, buffer: 1, numZoomLevels:20, maxZoomLevels:20 });
		map.addLayer(googleSat);
		//registerEvents(googleMap);
	}
	if (newBaseLayer == 'googleDem' && googleDem == null) 
	{	googleDem = new OpenLayers.Layer.Google( "GoogleDEM" , {type: G_PHYSICAL_MAP, sphericalMercator:spMerc} );
		googleDem.addOptions({isBaseLayer: true, buffer: 1, numZoomLevels:18, maxZoomLevel: 18 });
		map.addLayer(googleDem);
		//registerEvents(googleDem);
	}	
		
	if (newBaseLayer == 'googleHyb' && googleHyb == null)
	{	googleHyb = new OpenLayers.Layer.Google( "GoogleHyb" , {type: G_HYBRID_MAP, sphericalMercator:spMerc} );
		googleHyb.addOptions({isBaseLayer: true, buffer: 1, numZoomLevels:20, maxZoomLevels:20 });
		map.addLayer(googleHyb);
		//registerEvents(googleHyb);
	}
/*
	if (newBaseLayer == 'ol_wms' && ol_wms == null)
	{	ol_wms = new OpenLayers.Layer.WMS( "OpenLayers Map" ,  "http://labs.metacarta.com/wms/vmap0?", {layers: 'basic'} );
		ol_wms.addOptions({isBaseLayer: true, buffer: 1, numZoomLevels:18, maxZoomLevels:18 });
		map.addLayer(ol_wms);
		//registerEvents(ol_wms);
	}

	if (newBaseLayer == 'jpl_wms' && jpl_wms == null)
	{	jpl_wms = new OpenLayers.Layer.KaMap( "Satellite", "http://www.openlayers.org/world/index.php", {g: "satellite", map: "world"} );
		jpl_wms.addOptions({isBaseLayer: true, buffer: 0 });
		map.addLayer(jpl_wms);
		//registerEvents(jpl_wms);
	}

	if (newBaseLayer == 'yahoo' && yahoo == null)
	{	yahoo = new OpenLayers.Layer.Yahoo( "Yahoo");
		yahoo.addOptions({isBaseLayer: true, buffer: 0 });
		map.addLayer(yahoo);
		//registerEvents(yahoo);
	}
	if (newBaseLayer == 've' && ve == null)
	{	ve = new OpenLayers.Layer.VirtualEarth( "VirtualEarth");
		ve.addOptions({isBaseLayer: true, buffer: 0 });
		map.addLayer(ve);
		//registerEvents(ve);
	}
	if (newBaseLayer == 'veAerial' && veAerial == null)
	{	veAerial = new OpenLayers.Layer.VirtualEarth( "VirtualEarth", { 'type': VEMapStyle.Aerial});
		veAerial.addOptions({isBaseLayer: true, buffer: 0 });
		map.addLayer(veAerial);
		//registerEvents(veAerial);
	}
   */
    // Now just reset the base layer
	map.setBaseLayer(window[newBaseLayer]);
}
