	// -----------------------------------------------------------------------------------------
	// // WIYBY RELEASE 13.1
	// -----------------------------------------------------------------------------------------

	var map;
	var ov;
	var topicName;
	var wiybyQueryControl;
	var popup; 
	var lonLat;
	var sn;
	var sp; 
	var wa;
	var maxClickQueryScale;
	var origLocation;
	var gazetteerOrigLocation;
	var mapOfText;
	var mapScaleAt;
	var queryWindowDiameter;
	var wiyby;


	function isFormFieldEmpty( inputField ) 
	{
		var strVal = inputField.value;	
		strVal = strVal.replace(/ /gi, "")
	
	  	if (strVal == "" || strVal == null) 
	  		return true;
	  	else
			return false;
	}

	// -----------------------------------------------------------------------------------------
	// if a special clause id is set the dbfield name and numeric attributes are blank
	// refactor this for 10.2 so there is a more OO way to capture the standard search parameter
	// compared to the special search parameter - DT 9/2/2005
	
	function SearchParameter( inDisplayName, inDbFieldName, inIsNumberic, inSpecialClauseId )
	{
		this.displayName = inDisplayName;
		this.dbFieldName = inDbFieldName;
		this.isNumeric = inIsNumberic;
		this.specialClauseId = inSpecialClauseId;
	}

	// -----------------------------------------------------------------------------------------	
	
	function LayerGroup( inId, inDisplayName, inLayerIds, inLearnMoreText, inQueryWindowDiameter, inPageSubtitleLevel3 ) 
	{
		this.id = inId;
		this.displayName = inDisplayName;
		this.layerIds = inLayerIds;
		this.learnMoreText = inLearnMoreText;
		this.queryWindowDiameter = inQueryWindowDiameter;
		this.pageSubtitleLevel3 = inPageSubtitleLevel3;
	}

	// -----------------------------------------------------------------------------------------

	function DataSearchLayerGroup( inId, inOtherLocationParameters, inSearchParameters,  inAdvancedSearchParameters, inLoopNumber ) 
	{
		this.id = inId;
		this.otherLocationParameters = inOtherLocationParameters;
		this.searchParameters =  inSearchParameters;
		this.advancedSearchParameters = inAdvancedSearchParameters;
		this.loopNumber = inLoopNumber;
	}
	
	// -----------------------------------------------------------------------------------------
		
	//the layerGroupNoFromTheLoop allows the code to know which layer we are talking about
	function SiteLocationDropDownList( layerGroupId, dropDownEntries, layerGroupNoFromTheLoop) 
	{
		this.layerGroupId = layerGroupId; //from the xml
		this.dropDownEntries = dropDownEntries; // this will be an array of drop down entry values
		this.layerGroupNoFromTheLoop = layerGroupNoFromTheLoop; //from the loop, used to show/hide the tags
	}
	
	// -----------------------------------------------------------------------------------------
	// remove blanks from the variable passed in

	function removeBlanks( textValue )
	{ 
	  return textValue(/ /gi, "")
	}

	// -----------------------------------------------------------------------------------------

		
	function isDefined( variableName )
	{
		if ( typeof( window[ variableName ] ) == "undefined" )
	  	{
	    	return false;
	  	}
	  	else
	  	{
	    	return true;
	    }	
	}
	
	// -----------------------------------------------------------------------------------------
	
	function getJLayerGroup( layerGroupId )
	{
		if ( jLayerGroups != null )
		{
			for ( var i=0; i<jLayerGroups.length; i++)
			{
				if ( jLayerGroups[i].id == layerGroupId )
				{
					return jLayerGroups[i];
				}	
			}	
		}
	}
	
	// -----------------------------------------------------------------------------------------

	function setActiveLayerGroupForQuery( activeLayerGroupId )
	{
		//alert("setActiveLayerGroupForQuery - activeLayerGroupId = " + activeLayerGroupId );
		
		var currentlyActiveLayerGroupId = document.getElementById("layerGroupToQuery").value; 
		
		document.getElementById("learnMoreRadioSection").className = 'Vis'; // DT 21/12/2004 - this should be getting set be setActiveLayerGroupLearnMoreText
			
		if ( currentlyActiveLayerGroupId != -2 )
		{
			setInactiveLayerGroupForQueryClasses( currentlyActiveLayerGroupId );
		}
		
		setActiveLayerGroupForQueryClasses( activeLayerGroupId );	
		setActiveLayerGroupLearnMoreText( activeLayerGroupId );
		
		var currentScaleStep = document.getElementById("currentScaleStep").value; 
		if ( currentScaleStep == 3 )
		{
			setPageSubtitle( getPageSubtitleText( activeLayerGroupId ) ); // use the layer group specific text - DT 18/2/2005
		}
		else
		{
			setPageSubtitle( jPageSubtitleLearnMoreVisible ); 
		}
			
		document.getElementById("layerGroupToQuery").value = activeLayerGroupId;
		
		var queryWindowDiameter = getJLayerGroup( activeLayerGroupId ).queryWindowDiameter;
		document.getElementById("queryWindowDiameter").value = queryWindowDiameter;
				
		document.getElementById("contmplrn").disabled = false;
		document.getElementById("contmplrn").checked = true;
		selectLearnMore();
		
		//alert("setActiveLayerGroupForQuery - end");
			
		return;
	}
	
	// -----------------------------------------------------------------------------------------

	
	function getPageSubtitleText( activeLayerGroupId )
	{	
		var pageSubtitleText = "";
		//alert("into page subtitile text 1 activeLayerGroupid = " + activeLayerGroupId  );
		
		if ( getJLayerGroup( activeLayerGroupId ) != null && activeLayerGroupId != "-2" )
		{
			pageSubtitleText = getJLayerGroup( activeLayerGroupId ).pageSubtitleLevel3;
			//alert("into page subtitile text 2 page text = " + pageSubtitleText );
		}
		else
		{
			//get default pageSubtitleText from first visible layer
			//added by WC 07/05/2005 so that text is displayed even when
			//no active layer is displayed
			var visibleLayerGroups = document.getElementById("layerGroups").value;
			var layerGroupToUse = visibleLayerGroups.substring(0,1);		
			var numRegExp = /\d/i;		
			if ( numRegExp.test( layerGroupToUse ) )
			{
				pageSubtitleText = getJLayerGroup( layerGroupToUse ).pageSubtitleLevel3;			
			}
			else
			{
				pageSubtitleText = getJLayerGroup( 1 ).pageSubtitleLevel3
			}
		}
		
		return pageSubtitleText;
	}


	// -----------------------------------------------------------------------------------------	

	function setPageSubtitle( pageSubtitleText )
	{
		var pageSubtitleSection = document.getElementById("page_subtitle");

		if ( pageSubtitleSection.innerHTML )
		{
			// IE6 on Windows doesnt like .firstChild.nextSibling - DT 19/11/2004
			
			pageSubtitleSection.innerHTML = "<b>"+ pageSubtitleText +"</b>";
			//alert("pageSubtitleSection.innerHTML = " + pageSubtitleSection.innerHTML );
		}
		else
		{
			// this is the W3C Dom 2 version, but IE6 doesnt like it - DT 19/11/2004

			var pageSubtitleBoldSection = pageSubtitleSection.firstChild;
			
			var oldTextNode = pageSubtitleBoldSection.firstChild;
			//alert("oldTextNode.nodeValue = " + oldTextNode.nodeValue );
			
			var newTextNode = document.createTextNode( pageSubtitleText );
			//alert("newTextNode.nodeValue = " + newTextNode.nodeValue );
			
			pageSubtitleBoldSection.replaceChild( newTextNode, oldTextNode );
		}
		
		return;	
	}


	// -----------------------------------------------------------------------------------------
	function switchAdvanced() 
	{
		
		var showText = document.getElementById( "showHide" );
		
		if ( showText.innerHTML )
		{
			if ( document.getElementById("advanced").className == 'Vis' )
			{
				//alert("showhideflag was " + document.getElementById("showHideFlag").value);
				showText.innerHTML = showAdvancedIntlText;
				document.getElementById("advanced").className = 'Invis';
				document.getElementById("showHideFlag").value = 'false';
				//alert("showhideflag is now " + document.getElementById("showHideFlag").value);
				clearAllAdvancedOptions();
				
			}
			else
			{
				//alert("showhideflag was " + document.getElementById("showHideFlag").value);
				showText.innerHTML = hideAdvancedIntlText;
				document.getElementById("advanced").className = 'Vis';
				document.getElementById("showHideFlag").value = 'true';	
				//alert("showhideflag is now " + document.getElementById("showHideFlag").value);
				clearAllAdvancedOptions();
			}
		}
		else
		{
			if ( document.getElementById("advanced").className == 'Vis' )
			{
				//alert("showhideflag was " + document.getElementById("showHideFlag").value);
				document.getElementById("advanced").className = 'Invis';
				// this is the W3C Dom 2 version, but IE6 doesnt like it - stuart m
				var linkText = showText.firstChild;
				var oldTextNode = linkText.firstChild.nodeValue;
				var newTextNode = document.createTextNode( showAdvancedIntlText );
				linkText.replaceChild( newTextNode, oldTextNode );
				document.getElementById("showHideFlag").value = 'false';
				//alert("showhideflag is now " + document.getElementById("showHideFlag").value);
				clearAllAdvancedOptions();
			}
			else
			{
				//alert("showhideflag was " + document.getElementById("showHideFlag").value);
				document.getElementById("advanced").className = 'Vis';
				// this is the W3C Dom 2 version, but IE6 doesnt like it - stuart m
				var linkText = showText.firstChild;
				var oldTextNode = linkText.firstChild.nodeValue;
				var newTextNode = document.createTextNode( hideAdvancedIntlText );
				linkText.replaceChild( newTextNode, oldTextNode );
				document.getElementById("showHideFlag").value = 'true';
				//alert("showhideflag is now " + document.getElementById("showHideFlag").value);
				clearAllAdvancedOptions();
			}
		}
		return;	
	}
	// -----------------------------------------------------------------------------------------

	function setActiveLayerGroupLearnMoreText( activeLayerGroupId )
	{
		//alert("setActiveLayerGroupLearnMoreText - activeLayerGroupId = " + activeLayerGroupId );
		
		if ( activeLayerGroupId != -2 )
		{
			// -2 will show the standard text
			setActiveLayerGroupLearnMoreText( activeLayerGroupId );
			document.getElementById("learnMoreRadioSection").className = 'Vis';
		}
		else
		{
			document.getElementById("learnMoreRadioSection").className = 'Invis';
			setLearnMoreText( "" );
		}
		return;
	}
	
	// -----------------------------------------------------------------------------------------	
			
	function setActiveLayerGroupLearnMoreText( activeLayerGroupId )
	{
		//alert("setActiveLayerGroupLearnMoreText");
				
		if ( getJLayerGroup( activeLayerGroupId ) != null )
		{
			var activeLearnMoreText = getJLayerGroup( activeLayerGroupId ).learnMoreText;
			//alert("activeLearnMoreText = " + activeLearnMoreText );
			setLearnMoreText( activeLearnMoreText );
		}
		return;
	}

	// -----------------------------------------------------------------------------------------
	
	function setLearnMoreText( learnMoreText )
	{
		var learnMoreSection = document.getElementById("contmpadd2");
		
		if ( learnMoreSection.innerHTML )
		{
			// IE6 on Windows doesnt like .firstChild.nextSibling - DT 19/11/2004
			learnMoreSection.innerHTML = "<p>"+ learnMoreText +"</p>";
			//alert("learnMoreSection.innerHTML = " + learnMoreSection.innerHTML );
		}
		else
		{
			// this is the W3C Dom 2 version, but IE6 doesnt like it - DT 19/11/2004
			
			var learnMoreSectionParagraph = learnMoreSection.firstChild.nextSibling;
			var oldTextNode = learnMoreSectionParagraph.firstChild;
			//alert("oldTextNode.nodeValue = " + oldTextNode.nodeValue );
			var newTextNode = document.createTextNode( learnMoreText );
			//alert("newTextNode.nodeValue = " + newTextNode.nodeValue );
			
			learnMoreSectionParagraph.replaceChild( newTextNode, oldTextNode );
			
		}
		return;
	}	
		
	// -----------------------------------------------------------------------------------------	
		
	function setActiveLayerGroupForQueryClasses( layerGroupId )
	{
		if ( document.getElementById( "layerGroupLearnMoreText-" + layerGroupId ) )
		{
			document.getElementById( "layerGroupLearnMoreText-" + layerGroupId ).className = 'Vis';
			document.getElementById( "layerGroupTitle-" + layerGroupId ).className = 'selectedQueryLayerGroup';
		}
	}

	// -----------------------------------------------------------------------------------------
	
	function setInactiveLayerGroupForQueryClasses( layerGroupId )
	{
		if ( document.getElementById( "layerGroupLearnMoreText-" + layerGroupId ) )
		{
			document.getElementById( "layerGroupLearnMoreText-" + layerGroupId ).className = 'Invis';
			document.getElementById( "layerGroupTitle-" + layerGroupId ).className = 'rghmpctrls';
		}	
	}

	// -----------------------------------------------------------------------------------------
	
	function redisplayPageInLanguage( languageCode )
	{
		//alert("redisplayPageInLanguage - languageCode = " + languageCode );
		
		//SetCookie ('lang', languageCode, 'Mon, 01-Jan-2050 00:00:00 GMT', '/');
		
		if ( document.getElementById("redrawMapForm") )
		{
			// if we are on the map page submit the hidden form with the requested language
			// this is important as the user can switch on and off layers between the
			// page being rendered and the user clicking to redisplay the page
			
			//WIYBY 12.1 CPH
			//Update the form elements with the X, Y and scale from the AJAX map before submit
			//Uses the map object created on the map page
    		var scale = map.getWiybyServerSideZoom();
    		var x = ((map.getExtent().right - map.getExtent().left )/2) + map.getExtent().left;
    		var y = ((map.getExtent().top - map.getExtent().bottom )/2) + map.getExtent().bottom;
			document.getElementById("redrawMapForm").scale.value = scale;
			document.getElementById("redrawMapForm").x.value = x;
			document.getElementById("redrawMapForm").y.value = y;
			
			
			document.getElementById("redrawMapForm").lang.value = languageCode;
			document.getElementById("redrawMapForm").submit();
		}
		else if ( ( languageCode == "_e" || languageCode == "_E" ) && isDefined("jEnglishPageURI") )
		{
			// used by the nafra pages and any other non map pages
			
			document.location.href = jEnglishPageURI;
		}
		else if ( ( languageCode == "_w" || languageCode == "_W" ) && isDefined("jWelshPageURI") )
		{
			// used by the nafra pages and any other non map pages
			
			document.location.href = jWelshPageURI;
		}
		else
		{
			alert("Page is not available in alternative language.");
		}
	}

	// -----------------------------------------------------------------------------------------

	function overviewMapClick( isViewingInWelsh )
	{
		//alert("overviewMapClick");
		
		var scaleStep = document.getElementById("currentScaleStep").value;
		if ( scaleStep > 1 )
		{
			var targetServletPath = ""; 
			targetServletPath = targetServletPath + "ep=map~";	
			targetServletPath = targetServletPath + "mapid=ovmapimage~";	
			targetServletPath = targetServletPath + "topic=" + document.getElementById("topic").value + "~";
			targetServletPath = targetServletPath + "layergroups=" + document.getElementById("layerGroups").value + "~";
			targetServletPath = targetServletPath + "layerGroupToQuery=" + document.getElementById("layerGroupToQuery").value + "~";
			targetServletPath = targetServletPath + "lang=" + document.getElementById("lang").value + "~";
			targetServletPath = targetServletPath + "mapOfOriginalLocation=false~";
			targetServletPath = targetServletPath + "scale=" + scaleStep + "~";
			targetServletPath = targetServletPath + "maxx=" + document.getElementById("overviewmap_maxx").value + "~";
			targetServletPath = targetServletPath + "maxy=" + document.getElementById("overviewmap_maxy").value + "~";			
			targetServletPath = targetServletPath + "minx=" + document.getElementById("overviewmap_minx").value + "~";	
			targetServletPath = targetServletPath + "miny=" + document.getElementById("overviewmap_miny").value + ".wiyby";	
			
			var mapForm = document.getElementById("lftovmpsch");
			mapForm.action = targetServletPath;	
			
			return true;			
		}
		else
		{
			if ( isViewingInWelsh )
			{
				alert("Mae'n ddrwg gennym, ond ni ellir panio tra'n edrych ar y DU gyfan.");
			}
			else
			{
				alert("sorry, you can't reposition the map when viewing the entire UK.");
			}

			return false;
		}
	}

	// -----------------------------------------------------------------------------------------

	function mainMapClick( isViewingInWelsh )
	{
		//alert("mainMapClick - scale = " + document.getElementById("scale").value );
		//alert("mainMapClick - currentScaleStep = " + document.getElementById("currentScaleStep").value );
		
		if ( document.getElementById("zoomSection").className == 'Vis' )
		{
			// if the map has been set to zoom mode
			// build the servlet path, this is becasue when we tried to use hidden form fields
			// within the map form, it messed up the way the map displays.
			
			// in one of the bug fix releases maybe experiment in how to stop the html getting distorted
			// by the hidden fields, as this would provide for a cleaner and more standard implementation
			// OverviewMapController.processMainMapClick() would then need to be reverted to read the 
			// information from request parameters, and not from a custom representation in the servlet path
			// DT 14/07/2004  
									

			var scaleStep = document.getElementById("currentScaleStep").value;
			if ( scaleStep <= 4 )
			{
				// only zoom in if not at the maximum zoom level
				scaleStep = parseInt( scaleStep ) + 1;
			}
			
			// after phase 1.2 changes where we now primarily pass round an x and y
			// it is still necessary to pass the extents for an image map click, as it saves
			// recalculating them when working out the real world location of the mouse click
			// DT 30/10/2004
			
			var targetServletPath = "";	
			targetServletPath = targetServletPath + "ep=map~";	
			targetServletPath = targetServletPath + "mapid=mainmap~";			
			targetServletPath = targetServletPath + "topic=" + document.getElementById("topic").value + "~";
			targetServletPath = targetServletPath + "layergroups=" + document.getElementById("layerGroups").value + "~";
			targetServletPath = targetServletPath + "layerGroupToQuery=" + document.getElementById("layerGroupToQuery").value + "~";
			targetServletPath = targetServletPath + "lang=" + document.getElementById("lang").value + "~";
			targetServletPath = targetServletPath + "mapOfOriginalLocation=false~";
			targetServletPath = targetServletPath + "scale=" + scaleStep + "~";
			targetServletPath = targetServletPath + "maxx=" + document.getElementById("maxx").value + "~";
			targetServletPath = targetServletPath + "maxy=" + document.getElementById("maxy").value + "~";			
			targetServletPath = targetServletPath + "minx=" + document.getElementById("minx").value + "~";	
			targetServletPath = targetServletPath + "miny=" + document.getElementById("miny").value + ".wiyby";	


			var mapForm = document.getElementById("mmpform");
			mapForm.action = targetServletPath;	

			return true;		
		}
		else
		{
			// if the map has been set to show info mode
			
			if ( isLearnMoreActive() )
			{
				// after phase 1.2 changes where we now primarily pass round an x and y
				// it is still necessary to pass the extents for an image map click, as it saves
				// recalculating them when working out the real world location of the mouse click
				// DT 30/10/2004

				var targetServletPath = "ep=query~";
				targetServletPath += "scale=" + document.getElementById("currentScaleStep").value + "~";
				targetServletPath += "topic=" + document.getElementById("topic").value + "~";
				targetServletPath += "queryWindowDiameter=" + document.getElementById("queryWindowDiameter").value + "~";
				targetServletPath += "lang=" + document.getElementById("lang").value + "~";
				targetServletPath += "layergroups=" + document.getElementById("layerGroupToQuery").value + "~"; // the NEW layer group to query
				targetServletPath += "maxx=" + document.getElementById("maxx").value + "~";
				targetServletPath += "maxy=" + document.getElementById("maxy").value + "~";			
				targetServletPath += "minx=" + document.getElementById("minx").value + "~";	
				targetServletPath += "miny=" + document.getElementById("miny").value + "~.wiyby";

				var mapForm = document.getElementById("mmpform");
				mapForm.action = targetServletPath;	

				if ( document.getElementById("layerGroupToQuery").value == "-1" )
				{
					if ( isViewingInWelsh )
					{
						alert("Learn more is not available on this layer (in welsh).");
					}
					else
					{
						alert("Learn more is not available on this layer.");
					}
					return false;
				}
				else
				{
					return true;
				}
	
			}
			else
			{
				if ( isViewingInWelsh )
				{
					alert("Mae'n rhaid i chi glosio i leoliad mwy penodol cyn defnyddio'r nodwedd hon.");
				}
				else
				{
					alert("You must zoom in to a more exact location, before using this feature.");
				}
				
				document.getElementById("contmpzm").checked = true;
				showZoom();
				
				return false;
			}
		}
	}

	// -----------------------------------------------------------------------------------------
	
	function isLearnMoreActive()
	{
		var scaleStep = document.getElementById("currentScaleStep").value;
		if ( scaleStep >= 4 )
		{
			return true;
		}
		else
		{
			return false;
		}
	}

	// -----------------------------------------------------------------------------------------
	
	function selectLearnMore()
	{
		document.getElementById("learnMoreSection").className = 'Vis';
		document.getElementById("zoomSection").className = 'Invis';
		
		document.getElementById("zoomorquery").value = "learnmore";
	}

	// -----------------------------------------------------------------------------------------

	function showZoom()
	{
		document.getElementById("learnMoreSection").className = 'Invis';
		document.getElementById("zoomSection").className = 'Vis';
		
		document.getElementById("zoomorquery").value = "zoom";
	}
	
	// -----------------------------------------------------------------------------------------
	
	function doPan( direction, isViewingInWelsh )
	{
		// dont allow panning when zoomed to minimum scale

		if ( document.getElementById("currentScaleStep").value > 1  )
		{
			// 1 - North
			// 2 - North East
			// 3 - East
			// 4 - South East
			// 5 - South
			// 6 - South West
			// 7 - West
			// 8 - North West
							
			document.getElementById("direction").value = direction;
			document.getElementById("redrawMapForm").submit();		
		}
		else
		{
			if ( isViewingInWelsh )
			{
				alert("Mae'n ddrwg gennym, ond ni ellir panio tra'n edrych ar y DU gyfan.");
			}
			else
			{
				alert("Sorry, you can't pan when viewing the entire UK.");
			}
		}		
	}

	// -----------------------------------------------------------------------------------------
	
	function zoomOut( isViewingInWelsh )
	{
		//alert("zoomOut");
		
		if ( document.getElementById("currentScaleStep").value > 1  )
		{
			var newScaleStep = parseInt( document.getElementById("currentScaleStep").value ) - 1;
			
			if ( document.getElementById("real_x").value != "" )
			{
				// if the real values are populated use these
				
				//alert("zoomIn - using real values");
				
				document.getElementById("redrawMapForm").x.value = document.getElementById("real_x").value;
				document.getElementById("redrawMapForm").y.value = document.getElementById("real_y").value;
			}			
						
			document.getElementById("redrawMapForm").scale.value = newScaleStep;
			document.getElementById("redrawMapForm").submit();				
		}
		else
		{
			if ( isViewingInWelsh )
			{
				alert("Yr ydych wedi closio at y lefel lleiaf yn barod.");	
			}
			else
			{	
				alert("You are already zoomed at the minimum level.");	
			}	
		}	
	}
	
	// -----------------------------------------------------------------------------------------
		
	function zoomIn( isViewingInWelsh )
	{
		//alert("zoomIn");
		
		if ( document.getElementById("currentScaleStep").value <= 4  )
		{
			var newScaleStep = parseInt( document.getElementById("currentScaleStep").value ) + 1;
			//alert("zooming to scale " + newScaleStep);
			
			if ( document.getElementById("real_x").value != "" )
			{
				// if the real values are populated use these
				
				//alert("zoomIn - using real values");
				
				document.getElementById("redrawMapForm").x.value = document.getElementById("real_x").value;
				document.getElementById("redrawMapForm").y.value = document.getElementById("real_y").value;
			}
			
			document.getElementById("redrawMapForm").scale.value = newScaleStep;
			document.getElementById("redrawMapForm").submit();		
		}
		else
		{
			if ( isViewingInWelsh )
			{
				alert("Rydych wedi cyrraedd y lefel mwyaf manwl yn barod");	
			}
			else
			{	
				alert("You are already zoomed at the maximum level");		
			}	

		}
	}	

	// -----------------------------------------------------------------------------------------
	
	function setScale( scale )
	{
		if ( document.getElementById("real_x").value != "" )
		{
			// if the real values are populated use these
			
			//alert("setScale - using real values");
			
			document.getElementById("redrawMapForm").x.value = document.getElementById("real_x").value;
			document.getElementById("redrawMapForm").y.value = document.getElementById("real_y").value;
		}	

		document.getElementById("redrawMapForm").scale.value = scale;
		document.getElementById("redrawMapForm").submit();
	}	

	// -----------------------------------------------------------------------------------------	
	
	function sizeOverviewMapRegion( scaleStep )
	{
		var newWidth = 129;
		var newHeight = 123;
		
		if ( scaleStep == "1" )
		{
			var newWidth = 60;
			var newHeight = 60;			
		}
		else if ( scaleStep == "2" )
		{
			var newWidth = 45;
			var newHeight = 45;
		}
		else if ( scaleStep == "3" )
		{
			var newWidth = 30;
			var newHeight = 30;			
		}
		else if ( scaleStep == "4" )
		{
			var newWidth = 15;
			var newHeight = 15;			
		}
		else if ( scaleStep == "5" )
		{
			var newWidth = 5;
			var newHeight = 5;			
		}
		
		resizeLayerTo( "overviewMapRegion", newWidth, newHeight ) 
	}
		
	// -----------------------------------------------------------------------------------------		
	
	function setLayersAndSubmitRedrawMapForm()
	{
		//alert("setLayersAndSubmitRedrawMapForm");	
		
		// the legend form is seperate to the redraw map form
		// therefore after the user has selected a set of layer groups
		// manually copy the id's of these into a hidden field
		// within the "redrawMapForm"

			//WIYBY 12.4 CPH - Reintroduce layer toggling
			//Update the form elements with the X, Y and scale from the AJAX map before submit
			//Uses the map object created on the map page
    		var scale = map.getWiybyServerSideZoom();
    		var x = ((map.getExtent().right - map.getExtent().left )/2) + map.getExtent().left;
    		var y = ((map.getExtent().top - map.getExtent().bottom )/2) + map.getExtent().bottom;
			document.getElementById("redrawMapForm").scale.value = scale;
			document.getElementById("redrawMapForm").x.value = x;
			document.getElementById("redrawMapForm").y.value = y;

		var selectedLayerGroupIds = "";

		for ( var j=0; j<jLayerGroups.length; j++ ) 
		{
			var layerGroup = document.getElementById("layerGroup-" + j ); 
		
		if( layerGroup != null ) //added the check as layer groups with no visible layers are turned off - WIYBY 12.6 GR
			{
				//alert("layerGroup =  "+ layerGroup.value );
			
				if ( layerGroup.checked == true ) 
				{
					var selectedLayerGroupId = layerGroup.value;
					//alert("selectedLayerGroupId = "+ selectedLayerGroupId );
				
					selectedLayerGroupIds = selectedLayerGroupIds + selectedLayerGroupId + ",";
	      		}
	      		else
	      		{
	      			// if this layer group is currently set as the queriable layer
	      			// unset this - DT 18/11/2004
	      		
	      			var currentlyActiveLayerGroupId = document.getElementById("layerGroupToQuery").value; 
	      		
	      			if ( jLayerGroups[j].id == currentlyActiveLayerGroupId )
	      			{
	      				setInactiveLayerGroupForQueryClasses( currentlyActiveLayerGroupId );
	      				document.getElementById("layerGroupToQuery").value = ""; 
	      			}
	      		}
			}
	   	}
	   	
	   	//alert("selectedLayerGroupIds = "+ selectedLayerGroupIds );

		document.redrawMapForm.layerGroups.value = selectedLayerGroupIds;
		selectedLayerGroupsString = selectedLayerGroupIds;
		
		url = wiyby.getURL(wiyby.getExtent);
		wiyby.redraw();
	
		//WIYBY 12.5 GR Bookmarking - START	
		//update the anchor in the url with the layer group information 
		wiyby.updateURL();
		
			//WIYBY 12.5 GR Bookmarking - END 
	}
	
	// -----------------------------------------------------------------------------------------		
	
	function showLayerGroup(id)
	{
		document.getElementById("layerGroupLayers-"+id).className = 'Vis';
	}

	// -----------------------------------------------------------------------------------------

	function hideLayerGroup(id)
	{
		document.getElementById("layerGroupLayers-"+id).className = 'Invis';
	}
	
	// -----------------------------------------------------------------------------------------
	
	function selectLayerGroup( id )
	{
		//alert("selectLayerGroup - id = " + id );
		
		var selectedLayerGroupIds = "";

		for ( var j=0; j<jLayerGroups.length; j++ ) 
		{
			var layerGroup = document.getElementById("layerGroup-" + j );
			
			if ( layerGroup!= null ) //added the check as layer groups with no visible layers are turned off - WIYBY 12.6 GR
			{ 
				var thisLayerGroupId = layerGroup.value;
				//alert("this layer group = " + thisLayerGroupId ); // 1 and 2
					
				if ( thisLayerGroupId == id ) 
				{
					layerGroup.checked = true;
					//alert("selecting layer group = " + thisLayerGroupId );
					showLayerGroup( thisLayerGroupId );
					selectedLayerGroupIds = selectedLayerGroupIds + j + ",";
	      		}
	      	
	     	/*
	     	      	else
	     	      	{
	     	      		//alert("unselecting layer group = " + thisLayerGroupId );
	     	      		
	     	      		layerGroup.checked = false;
	     	      		hideLayerGroup( thisLayerGroupId );
	     	      	}
	      	*/
			}	
	   	}
	}
	
	// -----------------------------------------------------------------------------------------
	//WIYBY 12.5 GR Bookmarking - START
	function selectLayerGroupCheckbox( indiviualLayerValues )
	{		
		clearLayerGroupCheckBoxes();
		
		var selectedLayerGroupIds = "";
		
		 for( var i = 0,id; id=indiviualLayerValues[i] ;i++ )
		{ 
		
			for ( var j=0; j<jLayerGroups.length; j++ ) 
				{
					var layerGroup = document.getElementById("layerGroup-" + j ); 
					
					if( layerGroup!= null ) //added the check as layer groups with no visible layers are turned off - WIYBY 12.6 GR
					{
						var thisLayerGroupId = layerGroup.value;
					
							
						if ( thisLayerGroupId == id ) 
						{
							layerGroup.checked = true;
											
							selectedLayerGroupIds = selectedLayerGroupIds + j + ",";
			      		}
					}
			      	
			     } 
	      	}
	}
	// ----------------------------------------------------------------------------------------- 
	
	function clearLayerGroupCheckBoxes()
	{
		for ( var j=0; j<jLayerGroups.length; j++ ) 
		{
			var layerGroup = document.getElementById("layerGroup-" + j );
			
			if( layerGroup != null) //added the check as layer groups with no visible layers are turned off - WIYBY 12.6 GR
			layerGroup.checked=false;
			
		}
	}
	
		//WIYBY 12.5 GR Bookmarking - END
	// ----------------------------------------------------------------------------------------- 
	
	function changePage( currentPageNumber, change ) 
	{
		if ( change == '+' )
		{
			var nextPageNumber = parseInt( currentPageNumber ) + 1;
			document.pageForm.page.value = nextPageNumber;			
		}
		else
		{
			var nextPageNumber = parseInt( currentPageNumber ) - 1;
			document.pageForm.page.value = nextPageNumber;
		}
		document.pageForm.submit();
	}

	// -----------------------------------------------------------------------------------------		
	
	
	
	function initMap( scale, center)
	{
		var size = new OpenLayers.Size(300, 300);
		
		//national extent of UK - needed?
		var bounds = new OpenLayers.Bounds(-349720, -346812.5, 1051712.5, 1057172.5);
		
	   	var options = {
						projection : "EPSG:27700",
						units : "m", 
						tileSize : size, 
						restrictedExtent : bounds,
						maxExtent : bounds,
						resolutions: [1322.916666666670000, 661.45833333333, 396.87499999999994, 198.43749999999997, 79.37499999999999, 33.072916666666664, 19.843749999999996, 10.583333333333332, 5.291666666666666, 3.968750000000010, 2.645833333333340],
						controls : [ 	new OpenLayers.Control.Navigation(),
										new OpenLayers.Control.PanZoomBar()
                                 	]};
	   		
	    map = new OpenLayers.Map('open_map', options);
	    wiyby = new WiybyMapLayer( "wiyby", "http://" + sn + ":" + sp + "/" + wa + "/wiybyController" );
	    map.addLayer(wiyby);
		map.setCenter(center, scale -1);		
		ov = new WiybyOverViewControl();
		ov.draw();
		wiybyQueryControl = new WiybyQueryControl();
		wiybyQueryControl.setMap(map);
		map.events.remove('dblclick'); 
		map.events.register('moveend', ov, ov.redraw); 
		map.events.register('moveend', map, wiyby.updateMapHeader); 
		map.events.register('moveend', map, wiyby.updateURL);  	//WIYBY 12.5 GR Bookmarking -
		map.events.register('moveend', map , wiyby.updateLegend);
		map.events.register('click', wiybyQueryControl, wiybyQueryControl.processMouseClick);
		
	}
	
	/* 
	 * formatNumberWithCommas
	 * Add commas into a number string for formatting.
	 * Sourced as addCommas from http://www.mredkj.com/javascript/numberFormat.html
	 */
	function formatNumberWithCommas(nStr)
	{

		nStr += '';
		x = nStr.split('.');
		x1 = x[0];
		x2 = x.length > 1 ? '.' + x[1] : '';
		var rgx = /(\d+)(\d{3})/;
		while (rgx.test(x1)) {
			x1 = x1.replace(rgx, '$1' + ',' + '$2');
		}
		return x1 + x2;
	}
	
	 /*
	  * This function rounds of the number to the nearest 100.
	  * 
	  * If 272 is your number it makes it 200. 
	  * 
	  * */
	function roundToNearestHundred(/*String*/ nStr)
	{
		var num1 = parseInt(nStr)%100;
		
		return (parseInt(nStr)-num1).toString();
	}
	
	function checkAnchor(url)
    {
    	currentUrl = url.toString();
    	
    	if(currentUrl.indexOf("#")!=-1)
    	{
    		return true;	
    	}
    	
    	return false;
	}
	
	/***
	 * Set the lang parameter in a URL string to that passed in.
	 * If there is none, append it to the end.
	 * Assumes using lang=_e and lang=_w.
	 * Only a simple check at this stage for a specific case.  Not robust for
	 * general implementation.  Should be expanded to work for any parameter as a generic function.
	 * WIYBY 12.5 CPH
	 */
	function setLangInURLString(url, lang)
	{
		var newurl = "";
		
		//alert(url + " : lang to be set to " + lang);
		
		if (url.indexOf("lang=") > -1)
		{
			//replace
			if (lang == "_e")
			{
				newurl = url.replace("lang=_w", "lang=_e");
			}
			else if (lang == "_w")
			{
				newurl = url.replace("lang=_e", "lang=_w");
			}
			else
			{
				alert("setLangInURLString - Did not recognise passed language parameter");
			}		
		}
		else
		{
			//append
			newurl = url + "&lang=" + lang;
		}
		
		return newurl;
	}
	
	// WIYBY 12.6 GR - Scale dependent layers -- START
	//  enables the checkboxes of
	// layer gropus which are visible at the scale
	function setLayerGroupCheckboxForScale( scaleStep )
	{   
		disableAllLayerGroupCheckBoxes();
		
		var visibleLayerGroupsString = jScaleVisibleStrings[ scaleStep ];
		var visibleLayerGroupsArray = new Array();
		
	//	alert( visibleLayerGroupsString );
		visibleLayerGroupsArray = visibleLayerGroupsString.split(',');

		for( var i = 0 ; i < visibleLayerGroupsArray.length ; i++ )
		{
			if( visibleLayerGroupsArray[i] != '')
			{
				var visibleLayerGroupId = visibleLayerGroupsArray[i];
				
				for( var j=0; j<jLayerGroups.length; j++  )
				{
					var layerGroup = document.getElementById("layerGroup-" + j ); 
					
						if( layerGroup != null ) //added the check as layer groups with no visible layers are turned off - WIYBY 12.6 GR
						{
							var thisLayerGroupId = layerGroup.value;
						
							if( thisLayerGroupId == visibleLayerGroupId )
							{
						  		layerGroup.disabled = false;
							}
						}
				}	

			}
		}		
	}
	
	function disableAllLayerGroupCheckBoxes()
	{
		for ( var j=0; j<jLayerGroups.length; j++ ) 
		{
			var layerGroup = document.getElementById("layerGroup-" + j );
			
				if( layerGroup != null)
				layerGroup.disabled=true;
			
		}
	}

	// WIYBY 12.6 GR - Scale dependent layers -- END	
    
    //WIYBY 12.7 GR - Show tool tips on Pan Zoom Control
    function updateTooltips()
    {
    	/*
    	document.getElementById("OpenLayers_Control_PanZoom_zoomout").title="Zoom Out";
    	document.getElementById("OpenLayers_Control_PanZoom_zoomin").title="Zoom In";
    	document.getElementById("OpenLayers_Control_PanZoom_pandown").title="Pan South";
    	document.getElementById("OpenLayers_Control_PanZoom_panright").title="Pan East";
    	document.getElementById("OpenLayers_Control_PanZoom_panleft").title="Pan West";
    	document.getElementById("OpenLayers_Control_PanZoom_panup").title="Pan North";
    	document.getElementById("OpenLayers_Control_PanZoomBar_SliderOpenLayers.Map_4").title="Change Zoom Scale";
    	
    	document.getElementById("OpenLayers_Control_PanZoom_zoomout").alt="Zoom Out";
    	document.getElementById("OpenLayers_Control_PanZoom_zoomin").alt="Zoom In";
    	document.getElementById("OpenLayers_Control_PanZoom_pandown").alt="Pan South";
    	document.getElementById("OpenLayers_Control_PanZoom_panright").alt="Pan East";
    	document.getElementById("OpenLayers_Control_PanZoom_panleft").alt="Pan West";
    	document.getElementById("OpenLayers_Control_PanZoom_panup").alt="Pan North";
    	document.getElementById("OpenLayers_Control_PanZoomBar_SliderOpenLayers.Map_4").alt="Change Zoom Scale";
    	*/
    	
    	document.getElementById("OpenLayers_Control_PanZoom_zoomout").title=jTooltipTextZoomOutControl;
    	document.getElementById("OpenLayers_Control_PanZoom_zoomin").title=jTooltipTextZoomInControl;
    	document.getElementById("OpenLayers_Control_PanZoom_pandown").title=jTooltipTextPanDownControl;
    	document.getElementById("OpenLayers_Control_PanZoom_panright").title=jTooltipTextPanRightControl;
    	document.getElementById("OpenLayers_Control_PanZoom_panleft").title=jTooltipTextPanLeftControl;
    	document.getElementById("OpenLayers_Control_PanZoom_panup").title=jTooltipTextPanUpControl;
    	document.getElementById("OpenLayers_Control_PanZoomBar_SliderOpenLayers.Map_4").title=jTooltipTextZoomSliderControl;
    	
    	document.getElementById("OpenLayers_Control_PanZoom_zoomout").alt=jTooltipTextZoomOutControl;
    	document.getElementById("OpenLayers_Control_PanZoom_zoomin").alt=jTooltipTextZoomInControl;
    	document.getElementById("OpenLayers_Control_PanZoom_pandown").alt=jTooltipTextPanDownControl;
    	document.getElementById("OpenLayers_Control_PanZoom_panright").alt=jTooltipTextPanRightControl;
    	document.getElementById("OpenLayers_Control_PanZoom_panleft").alt=jTooltipTextPanLeftControl;
    	document.getElementById("OpenLayers_Control_PanZoom_panup").alt=jTooltipTextPanUpControl;
    	document.getElementById("OpenLayers_Control_PanZoomBar_SliderOpenLayers.Map_4").alt=jTooltipTextZoomSliderControl;
    	    	
    }
	

			
