
//location of services used to create map overlays (GIFDatalayer used for IE6 - can't handle pngs)
var mapBaseLayerURL='http://her.highland.gov.uk/mapcache/callcache.aspx?http://her.highland.gov.uk/highland-wms/scripts/mapserv.exe?map=d:/website/Highland-WMS/Map/HighlandWMSbase.map' ;
//var mapCroppedDataLayerURL='http://her.highland.gov.uk/mapcache/CallCrop.aspx?http://her.highland.gov.uk/highland-wms/scripts/mapserv.exe?map=d:/website/Highland-WMS/Map/HighlandWMSdata.map';

var mapDataLayerURL='http://her.highland.gov.uk/highland-wms/scripts/mapserv.exe?map=d:/website/Highland-WMS/Map/HighlandWMSdata.map';

//copyright information
//created in mapLoad & used in create layers
//can't actually set up here as the Google definitions may not be loaded - errors on new GCopyright etc.
var copyright
var copyrightCollection 

//global google map, so can change settings. Created in mapLoad() 
var map='';

//height and width of mapDiv

var div =document.getElementById("mapDiv");
var pageMapWidth=0;
var pageMapHeight=0;
if (div!=null)
{
	pageMapWidth=div.style.width;
	pageMapHeight=div.style.height;
	pageMapWidth=pageMapWidth.substring(0,pageMapWidth.indexOf("px"));
	pageMapHeight=pageMapHeight.substring(0,pageMapHeight.indexOf("px"));	
	pageMapWidth=parseInt(pageMapWidth);
	pageMapHeight=parseInt(pageMapHeight);
}
else
{
	pageMapWidth=0;
	pageMapHeight=0;
}

var gutterPixelSize = 500; //used for groundoverlay of data
var overlayBounds = '';
var groundOverlay = '';

//layers to display on map
//first time loading map, display all layers
var	currentLayers='EV,MON,EVSEL,SAMPolys,LBPoints,MONSEL,HighlandBoundary';
//layers to search on mouseclick / box dragselect
var	currentQueryLayers='EV,MON,SAMPolys,LBPoints';
// changed to avoid getting dupes from mon point/poly - now ONLY queries the line/poly layers (every records has one) CF 23/09/2009
//var	currentQueryLayers='EV,MonLines,MonPolys,SAMPolys,LBPoints';

//used to define style of map
//set on aspx pageLoad
var MapType='Map'; 

//used to define area to search (Scotland only)
var geocoder = null;
var geocoderRestrictSearchAreaTo=" scotland highland";
var addressMarker;
 
//used to highlight specific points
//set on aspx pageLoad (singleResult/MultiResults)
var strUIDFilter=''; //one (singleResult) or comma separated list (MultiResults)

//default center & zoom for mapload
var defaultCenterLat=57.5;
var defaultCenterLng=-4.5;
var defaultZoom = 7;

//center & zoom values passed from URL (code behind page addes these values on page load, if valid params passed on URL)
var centerLatFromURL='';
var centerLngFromURL=-'';
var zoomFromURL = '';

//used to create bounding box (singleresult or list from multiresults)
var minLng='';
var minLat='';
var maxLng='';
var maxLat='';

//used to set center of map & bounds (from single result)
var CentreLong = '';
var CentreLat = '';

//used to record zoom level of map
//used to determine what & whether to show data overlays
var currentMapZoom=1;

//what zoom level to show overlays
var zoomToShowBaseMap=11;
var zoomToShowDataMap=1;
var zoomMaxForSingleMap=4

//get IE version 
//allows choice of png or gif 
//IE6 or earlier has no png support 
var appName=navigator.appName;
var ieVer=''  
if (appName=="Microsoft Internet Explorer")
{ 
   var appVersion=navigator.appVersion;  
   var iePos = appVersion.indexOf('MSIE');
   ieVer=parseFloat(appVersion.substring(iePos+5,appVersion.indexOf(';',iePos)));  
}

function showSelectedLayers()
{
    var layersToShow='';
    var layersToQuery='';
    //do individually as the order in which the layers must be loaded is different to order on page
    //due to client spec
    //order to load layers: Event, Mon, SAM, listed, HighlandBoundary*
    //* MUST be last
    
    cbx = document.getElementById("layerSelect_Events");
    if (cbx.checked)
    {
        layersToShow=layersToShow+'EV,';
         layersToQuery=layersToQuery+'EV,';
    }
    
    var cbx = document.getElementById("layerSelect_Mon");          
    if (cbx.checked)
    {
        layersToShow=layersToShow+'MON,';
        layersToQuery=layersToQuery+'MON,';
    } 
    
    layersToShow=layersToShow+'EVSEL,';

    layersToShow=layersToShow+'MONSEL,'; 
       
    cbx = document.getElementById("layerSelect_SAM");
    if (cbx.checked)
    {
        layersToShow=layersToShow+'SAMPolys,';
        layersToQuery=layersToQuery+'SAMPolys,';
   } 
    
        cbx = document.getElementById("layerSelect_LB");
    if (cbx.checked)
    {
        layersToShow=layersToShow+'LBPoints,';
        layersToQuery=layersToQuery+'LBPoints,';
    }
    
layersToShow+='HighlandBoundary';
    //remove last ',' and put values in global var
//currentLayers=layersToShow.substring(0, layersToShow.length-1);  //not needed now that highlandboundary is always the last layer
currentQueryLayers =layersToQuery.substring(0, layersToQuery.length-1);  
  currentLayers=layersToShow 
  
  
	var mapTypeToDisplay="Map"; //default
	
    var view=document.getElementById("mapView");
    if (view.checked==true)
    {
       mapTypeToDisplay="Map"; 
    }
    
    view=document.getElementById("terView");
    if (view.checked==true)
    {
       mapTypeToDisplay="Terrain"; 
    }
    
    view=document.getElementById("satView");
    if (view.checked==true)
    {
       mapTypeToDisplay="Satellite"; 
    }
    
    view=document.getElementById("mapTerView");
    if (view.checked==true)
    {
       mapTypeToDisplay="mapTer"; 
    }
    
createMapLayers(mapTypeToDisplay);
getWMS()
}

//creates Google map in a div called mapDiv
function mapLoad()
{ 
	//set up Google elements, var declared above
    geocoder = new GClientGeocoder();
    map = new GMap2(document.getElementById('mapDiv') );
	copyright = new GCopyright(1, new GLatLngBounds(new GLatLng(-90, -180), new GLatLng(90, 180)), 0, "Crown Copyright. All rights reserved.<br/>Highland Council Licence No.100023369");
	copyrightCollection = new GCopyrightCollection();
	copyrightCollection.addCopyright(copyright);
	
    switch (MapType)
    { 
        case 'SingleMap':
        {
			map.addControl(new GLargeMapControl());	
			map.addControl(new GScaleControl());
			//map.enableScrollWheelZoom();
			
			var zoom=14;
			var center=new GLatLng(defaultCenterLat,defaultCenterLng);
			
			if ((minLat)&&(minLng)&&(maxLat)&&(maxLng))
			{
				if ((minLat!='')&&(minLng!='')&&(maxLat!='')&&(maxLng!=''))
				{
					var bounds = new GLatLngBounds(new GLatLng(minLat,minLng),new GLatLng(maxLat,maxLng));
					zoom=map.getBoundsZoomLevel(bounds);
					
					if (zoom<zoomToShowDataMap)
					{
						zoom=zoomToShowDataMap;
					}
					
				}
				
				//quickfix for problem of these variables being '0' - shouldn't be the case
				//note if a lat/lng is geniunely 0 value is 0.0000000000
				//no values for scottish  highlands should be 0 anyway
				if  ((minLat=='0')||(minLng=='0')||(maxLat=='0')||(maxLng=='0'))
				{
					zoom=14;
				}
			}
			
			if ((CentreLat!='')&&(CentreLong!=''))
			{
				center=new GLatLng(CentreLat,CentreLong);
			}
			
			 map.setCenter(center,zoom);
			 currentMapZoom=zoom;		 
			
			GEvent.addListener(map,"click", function (overlay, point)
			{
				if(overlay)
				{ return; }
    		
				var pt = new GLatLng(point.y,point.x);
				addInfoTipMarker(pt);
			});
						
			 break;
			
	    }
    	
	    case 'advSearchMap':
	    {
			 map.addControl(new GSmallMapControl());
			 map.addControl(new GScaleControl());
			 //map.enableScrollWheelZoom();	
			 			 
	         map.setCenter(new GLatLng(57.5,-4.5), 6);
		     currentMapZoom=6;
		     
		    //if map is on advnaced serach page
			//need click listener to calculate easting & northing
			//otherwise click is to get info on records at click point
			//NOTE can't use same function as rightclick on Map Search
			//Google Map left click gives point as GLatLong
			//Google Map single right click gives point as GPoint
		     GEvent.addListener(map, "click", function(marker, point) {
		     map.clearOverlays();

		     if (marker) {
				map.removeOverlay(marker);
				document.forms[0].ctl00_ContentPlaceHolder1_txtOSRef.value = "";
		     }
		     else {
				map.addOverlay(new GMarker(point));
			
				wgs84=new GT_WGS84();

				wgs84.setDegrees(point.lat(), point.lng());
				osgb=wgs84.getOSGB();
				gridref = osgb.getGridRef(3);
				
				document.forms[0].ctl00_ContentPlaceHolder1_txtEasting.value = osgb.getEasting();
				document.forms[0].ctl00_ContentPlaceHolder1_txtNorthing.value = osgb.getNorthing();
				document.forms[0].ctl00_ContentPlaceHolder1_txtOSRef.value = gridref;

		    }
			});
		     
		     break;
	    }
    	
	    case 'SearchMap':
	    {
	        map.addControl(new GLargeMapControl());	
			map.addControl(new DragZoomControl());
			map.addControl(new DragSelectControl());
			//map.addControl(new GOverviewMapControl()); //removed becuase too slow
			map.addControl(new GScaleControl());
			map.enableScrollWheelZoom();	
			map.disableDoubleClickZoom();
			
			
			//add map event listeners
			GEvent.addListener(map,"click", function (overlay, point)
	    	{
				if(overlay)
				{ return; }
    		
				var pt = new GLatLng(point.y,point.x);
				addInfoTipMarker(pt);
				
			});
			
			GEvent.addListener(map,"singlerightclick", function (point,src,overlay)
	    	{
	    		getGridRefFromClick(point.x,point.y);				
			});
		      			
			//set map center & zoom
			
			//coming from multiresults & map.aspx had query to create latlng values from 
			if ((minLat)&&(minLng)&&(maxLat)&&(maxLng))
			{
				if ((minLat!='')&&(minLng!='')&&(maxLat!='')&&(maxLng!=''))
				{
					//coming from multiresults page, so list of points & max/min lat long to display
					var zoom=7;
					var bounds = new GLatLngBounds(new GLatLng(minLat,minLng),new GLatLng(maxLat,maxLng));
					zoom=map.getBoundsZoomLevel(bounds);
			        
					if (zoom<zoomToShowDataMap)
					{
						zoom=zoomToShowDataMap;
					}
					map.setCenter(bounds.getCenter(),zoom);
					currentMapZoom=zoom;
					break;
				}
			 }	         
	        
	        else //set map to show all highlands
	        {
	        
	        //Priority
	        //X,Y,scale (from url params) 
			//cookie
			//default

				//check if X Y Scale values exist
				if((centerLatFromURL)&&(centerLngFromURL)&&(zoomFromURL))
				{
					if ((centerLatFromURL!='')&&(centerLngFromURL!='')&&(zoomFromURL!=''))
					{
						//check for sensible values (code behind that added these values should also do this)				
						//Lat & Long between 0 and (-)180
						if ((Math.abs(centerLatFromURL)<=180)&&(Math.abs(centerLngFromURL)<=180))
						{
							//zoom between 1 and 17 - standard Google Map max zoom level
							if ((zoomFromURL>0)&&(zoomFromURL<=17))
							{
								map.setCenter(new GLatLng(centerLatFromURL,centerLngFromURL),zoomFromURL);
								currentMapZoom=zoomFromURL;
								break;
							}
						}
					}
				}
		        
				
				if ( get_cookie ( "minLat" ) )
				{
					var cookie_minLat = get_cookie ( "minLat" );
					var cookie_maxLat = get_cookie ( "maxLat" );
					var cookie_minLng = get_cookie ( "minLng" );
					var cookie_maxLng = get_cookie ( "maxLng" );
					var cookie_bounds = new GLatLngBounds(new GLatLng(cookie_minLat,cookie_minLng),new GLatLng(cookie_maxLat,cookie_maxLng));

					map.setCenter(cookie_bounds.getCenter(), map.getBoundsZoomLevel(cookie_bounds)); 
					currentMapZoom=map.getBoundsZoomLevel(cookie_bounds);
					break;
				}
				
				//used if neither center & zoom on url nor cookie set 		        
				map.setCenter(new GLatLng(defaultCenterLat,defaultCenterLng), defaultZoom);
		        currentMapZoom=defaultZoom;
				break;
			
			}			
			break; 
	    }
    	
	    default: //no maptype set on page
	    {  
			map.setCenter(new GLatLng(defaultCenterLat,defaultCenterLng), defaultZoom);
		    currentMapZoom=defaultZoom;
		    map.addControl(new GLargeMapControl());	
		    
		    GEvent.addListener(map,"click", function (overlay, point)
			{
				if(overlay)
				{ return; }
    		
				var pt = new GLatLng(point.y,point.x);
				addInfoTipMarker(pt);
			});	    
	    }
	}

	 
	 
/* *******************************************************
		COMMON TO ALL MAPS
***************************************************** */
	 
	 
	//add map layers  
    createMapLayers("Map");
    
    getWMS();
	currentMapZoom=map.getZoom();

    GEvent.addListener(map,"moveend", function () 
    {
               
                getWMS();
                //createMapLayers(map.getCurrentMapType().getName())
                
                if (MapType="SearchMap")
                {
					set_cookie ( "minLat",map.getBounds().getSouthWest().lat(),1 );
					set_cookie ( "maxLat",map.getBounds().getNorthEast().lat(),1 );
					set_cookie ( "minLng",map.getBounds().getSouthWest().lng(),1 );
					set_cookie ( "maxLng",map.getBounds().getNorthEast().lng(),1 );	
				}
				}
            );          


    GEvent.addListener(map,"zoomend", function (oldLevel, newLevel)
    {	    
	     currentMapZoom=newLevel;      
	          
	     createMapLayers(map.getCurrentMapType().getName());
	});



}//end mapLoad

function extendBounds(pageMapWidth,pageMapHeight,gutterPixels) {

            //pixels is the number of extra pixels you want in gutter
            //remember mapserver can't return more than 2048x2048            
//alert ("pageMapWidth=" +pageMapWidth+ " pageMapHeight="+pageMapHeight);
            if (((pageMapWidth + (2 * gutterPixels)) > 2048) || ((pageMapHeight + (2 * gutterPixels)) > 2048)) {
               alert('Your map is too big -please reduce the size')
            }            

            var x1 = map.getBounds().getSouthWest().lng()
            var x2 = map.getBounds().getNorthEast().lng()
            var y1 = map.getBounds().getSouthWest().lat()
            var y2 = map.getBounds().getNorthEast().lat()            

            var newBnds;

			var newSW;
			var newNE;            

            xdiff = Math.abs(x2-x1)
            ydiff = Math.abs(y2-y1)

            x1 = x1 - (xdiff * (gutterPixels/pageMapWidth))
            x2 = x2 + (xdiff * (gutterPixels/pageMapWidth) )           

            y1 = y1 - (ydiff * (gutterPixels/pageMapHeight))
            y2 = y2 + (ydiff * (gutterPixels/pageMapHeight) )       

            newSW = new GLatLng(y1,x1)
            newNE = new GLatLng(y2,x2)

            newBnds = new GLatLngBounds(newSW,newNE) 

            return newBnds

      }



function getWMS() {   
			  
			var loadImg = document.getElementById("loadingImg");
			if (loadImg!=null)
			{
				loadImg.style.visibility="visible";
			}
			
			if (gutterPixelSize>0)
			{
				overlayBounds = extendBounds(pageMapWidth,pageMapHeight,gutterPixelSize);
			}
			else
			{
				overlayBounds=map.getBounds();
			}
			
            wmsImg = new Image(pageMapWidth,pageMapHeight);
            wmsImg.src = CustomGetGroundOverlay(overlayBounds,gutterPixelSize);
            wmsImg.onload = wmsLoaded;

      }

function wmsLoaded() {      
          	if (groundOverlay!='')
			{
				map.removeOverlay(groundOverlay);
			}
                  
		  groundOverlay = new GGroundOverlay(wmsImg.src, overlayBounds) ;            
          map.addOverlay(groundOverlay);
          
          var loadImg = document.getElementById("loadingImg"); 
          if (loadImg!=null)
		  {
				loadImg.style.visibility="hidden";
		  }
        
      }


function getGridRefFromClick(x,y)
{
	var pt = new GPoint(x,y)
	var latLngFromPoint = map.fromContainerPixelToLatLng(pt);
	
	wgs84=new GT_WGS84();

    wgs84.setDegrees(latLngFromPoint.lat(), latLngFromPoint.lng());
	osgb=wgs84.getOSGB();
	gridref = osgb.getGridRef(4);
	
	//Q_dll should already be declared - done on page load to load in options from web.config
//	var Q_dll=document.getElementById("grQuadrant_ddl");
	var E_tbx=document.getElementById("grEasting_tbx");
	var N_tbx=document.getElementById("grNorthing_tbx");
	
	if (Q_dll && E_tbx && N_tbx)
	{
		var grArray = gridref.split(' ');
		var inBounds=false;
		//quadrantArr created in .net code on pageload
		for (var x in quadrantArr)
		{
			if (quadrantArr[x][0]==grArray[0])
			{
				Q_dll.selectedIndex=x;
				E_tbx.value=grArray[1];
				N_tbx.value=grArray[2];
				inBounds=true;
			}
		}		
		
		//if not in a quadrant covered by highland, blank values
		//not exact, as some quadrants are only just in the Highland Boundary
		if (inBounds==false)
		{
				Q_dll.selectedIndex=0;
				E_tbx.value='';
				N_tbx.value='';		
		}
	}	
}

function goToGridRef()
{
	
	
	
	
	//Q_dll should already be declared - done on page load to load in options from web.config
//	var Q_dll=document.getElementById("grQuadrant_ddl");
	var E_tbx=document.getElementById("grEasting_tbx");
	var N_tbx=document.getElementById("grNorthing_tbx");
	
	if (Q_dll && E_tbx && N_tbx)
	{
		//get entered E & N values
		var E = E_tbx.value;
		var N = N_tbx.value;
		
		//E & N must have same no. of chars
		var ELen = E.length;
		var NLen = N.length;
		
		if (ELen!=NLen)
		{
			//error	
			
			
			
		}
		else
		{	
			//E & N must be numeric	
			if (isNaN(E) || isNaN(N))
			{
				//error
			}		
			else
			{
				//pad to five char with zeros on right
				for (var i=0;i<(5-ELen);i++ )
				{
					E=E+'0';
					N=N+'0';
				}
				
				//add correct prefix number for quadrant
				for (var x in quadrantArr)
				{
					if (Q_dll.options[Q_dll.selectedIndex].text==quadrantArr[x][0])
					{
						var osgb = new GT_OSGB();				
				
						osgb.setGridCoordinates(quadrantArr[x][1]+E,quadrantArr[x][2]+N);
						
						var wgs84 = osgb.getWGS84();	
					
						var newCenter = new GLatLng(wgs84.getLatitude(),wgs84.getLongitude());
						map.setCenter(newCenter);
					}
				}		
			}
		}		
	}	
}



	function getURLParameters(paramName) 
	{
		var sURL = window.document.URL.toString();
		var ans='';
		if (sURL.indexOf("?") > 0) 
		{
		    var arrURLParams = window.location.search.substring(1).split("&");
		    var arrParamNames = new Array(arrURLParams.length);
		    var arrParamValues = new Array(arrURLParams.length);
		    var i = 0;
		
		    for (i=0;i<arrURLParams.length;i++) 
		    {
				var sParam =  arrURLParams[i].split("=");
				arrParamNames[i] = sParam[0];
				
				if (sParam[1] != "")
					arrParamValues[i] = unescape(sParam[1]);
				else
					arrParamValues[i] = "";
				
				if (arrParamNames[i]==paramName)
					ans = arrParamValues[i];
			}
		}
		return ans
	}


    function addInfoTipMarker(pt)
    {
   		var p = new GPoint(pt);
		// code from Lance on the Google Maps Group

        if (map.getZoom()>=zoomToShowDataMap)
        {   
		var b = map.getBounds();
		var sw = b.getSouthWest();
		var ne = b.getNorthEast();
		var w = sw.lng();
		var e = ne.lng();
		var n = ne.lat();
		var s = sw.lat();
		var ts = s;
		var tw = w;
		if(n<s) { s=n; n = ts; }
		if(e<w){ w=e; e = tw; }
		if(s<-90)s=-90;
		if(n>90)n=90;
		if(e>180)e=180;
		if(w<-180)w=-180;

		var span_ew = Math.abs(e - w);
		var span_ns = Math.abs(n - s);
		var width  = 768*span_ew/span_ns;
		var height = 768;

		var x = (pt.x - w) * width/span_ew;
		var y = (n - pt.y) * height/span_ns;

		var URL = GetURL(x, y, w, s, e, n, width, height);

        //if site is running on separate server than the one URL accesses
        //IE warning alert "this page is accessing data that is not under its control.This poses a security risk. Do you want to continue?"
        //Firefox quietly exits - no warning, but doesn't execute
        //inbuilt browser security functionality - can't turn off
        //http://code.google.com/apis/maps/documentation/reference.html#GDownloadUrl
		GDownloadUrl(URL, function(data, responseCode) 
		{
          gResult = data;          
        
          gResult=gResult.replace(/&lt;/g,"<");
          gResult=gResult.replace(/&gt;/g,">");           
              if(gResult.length>0)
              {
              //shouldn't need to do this
              //hack until getURL fixed to respect the FEATURE_COUNT asked for
              //known problem with getFeatureInfo - WMS bug list (#2423, #1686)
                if (gResult.length>8000)
                {
                    gResult=gResult.substr(0,7999);
                    var lastI = gResult.lastIndexOf("<p");
                    gResult=gResult.substr(0,lastI);gResult="<div style='height:200px;overflow:auto;'>"+gResult+"<h3>Zoom in for more...</h3></div>";
                }
                else
                {
                    gResult="<div style='height:100px;overflow:auto;'>"+gResult+"</div>";
                }
              
                map.openInfoWindowHtml(pt, gResult, {maxWidth:200});   
              }
         });
         }
         else
         {
            map.openInfoWindowHtml(pt,"Please zoom in closer to see points of interest.");
         }

   
}

function createMapLayers(mapTypeToDisplay)
{
    //set up layer array
    //tiles to show on map NOTE Data Overlay now done as  groundOvrlay, not tileLayer
    //must have one of googles - default is standard road map
    //plus Highland (client) overlay if zoom>= zoomToShowBaseMap;
    //plus record overlay if zoom>= zoomToShowDataMap
  

    //clear previous mapTypes, if any 
    var mapTypes=map.getMapTypes();

    if (mapTypes.length>0)
    {
        for (i=0;i<=mapTypes.length;i++)
        {
            var type=mapTypes.pop();
            map.removeMapType(type);
        } 
    }
    
    //array of layers to show on map    
    var layers=[];

    
   switch(mapTypeToDisplay)
    {
        case "Satellite":
        {      
           layers.push(G_SATELLITE_MAP.getTileLayers()[0]);            
           var customMap = new GMapType(layers, G_SATELLITE_MAP.getProjection(), "Satellite");
	       break;
        }
        
        case "Terrain":
        {
			layers.push(G_PHYSICAL_MAP.getTileLayers()[0]);
			var customMap = new GMapType(layers, G_PHYSICAL_MAP.getProjection(), "Terrain");
			break;
        }
        
        case "mapTer":
        {
			layers.push(G_PHYSICAL_MAP.getTileLayers()[0]);
			if (currentMapZoom>=zoomToShowBaseMap)
			{
				//get the Base map (client overlay)
				layers.push(getBaseOverlay(0.5));
			}
			var customMap = new GMapType(layers, G_PHYSICAL_MAP.getProjection(), "mapTer");
			break;
        }
        
        default: //normal Map case "Map":
        {
			if (currentMapZoom<zoomToShowBaseMap)
			{
				layers.push(G_NORMAL_MAP.getTileLayers()[0]);
			}
			else
			{
				//get the Base map (client overlay)
				layers.push(getBaseOverlay(1)); 
			}
           var customMap = new GMapType(layers, G_NORMAL_MAP.getProjection(), "Map");
           break;
        }
    }  
   
    map.addMapType(customMap);
    map.setMapType(customMap); 
}

function getBaseOverlay(opacity)
{

	//get the Base map (client overlay)
        var myTileLayerBaseMap = new GTileLayer(copyrightCollection,1,17);
        myTileLayerBaseMap.myBaseURL=mapBaseLayerURL;

        myTileLayerBaseMap.myLayers='HighlandWMS';
    	
    	if ((ieVer=='')||(ieVer>=7))
    	{
	        myTileLayerBaseMap.myFormat='image/png';
	    }
	    else
	    {
	        myTileLayerBaseMap.myFormat='image/gif';
	    }
	    
        myTileLayerBaseMap.getTileUrl=CustomGetTileUrl;
	    myTileLayerBaseMap.myOpacity=opacity;
	    myTileLayerBaseMap.getOpacity=customOpacity;  
	    
	    return myTileLayerBaseMap; 
}


//now not used - data is added as groundoverlay ,not tilelayer
//function getDataOverlay(opacity)
//{
//  
//     var myTileLayerData = new GTileLayer(new GCopyrightCollection(""),1,17);         
//                  
//        //tile format = png for transparency unless old IE, then gif
//     if ((ieVer=='')||(ieVer>=7))
//     {
//        // myTileLayerData.myBaseURL=mapCroppedDataLayerURL;
//        myTileLayerData.myBaseURL=mapDataLayerURL;
//         myTileLayerData.myFormat='image/png';
//     }
//     else
//     {
//         myTileLayerData.myBaseURL=mapCroppedGIFDataLayerURL;
//         myTileLayerData.myFormat='image/gif';
//     }
//   
//   
//     //Add filter to the WMS URL
//     //if record ID specified, pass ID so record is highlighted (in yellow) on map
//     //used on singleResult page
//     if (strUIDFilter !='') 
//     {
//         myTileLayerData.myBaseURL+='&ID='+strUIDFilter; 
//     }  
//     
//    
//     
//     myTileLayerData.myLayers=currentLayers;
//	 myTileLayerData.getTileUrl=CustomGetTileUrl;
//     myTileLayerData.myOpacity=opacity;
//     myTileLayerData.getOpacity=customOpacity;
//     
//     return myTileLayerData;
//}  

function GetURL(x, y, w, s, e, n, width, height)
{		
		r= mapDataLayerURL;   
		r+="&SERVICE=WMS";
		r+="&SRS=EPSG:4326";
		r+="&VERSION=1.1.1";
		r+="&REQUEST=GetFeatureInfo";
		r+="&X=" + parseInt(x);
		r+="&Y=" + parseInt(y);
		r+="&QUERY_LAYERS="+currentQueryLayers;
		r+="&LAYERS="+currentQueryLayers;
		r+="&INFO_FORMAT=text/html";
		r+="&BBOX="+w+","+s+","+e+","+n;
		r+="&WIDTH="+parseInt(width)+"&HEIGHT="+ parseInt(height);
		r+="&FEATURE_COUNT=10";
		
		return r;
}

function isTicked(cbxClicked)
{
        var numCbxTicked=0;
        var checkboxes = document.getElementsByTagName("input");
 
        for (var i = 0; i < checkboxes.length; i++)
        {
            var node = checkboxes[i];
            if (node.getAttribute("type") == "checkbox")
            {
            
                if (node.checked==true) {numCbxTicked=numCbxTicked+1}
            }
           
        }
       
        if (numCbxTicked==0)
        {    
            
            var cbxTrue=document.getElementById(cbxClicked);          
            cbxTrue.checked=true;
        }
}





function get_cookie ( cookie_name )
{
  var results = document.cookie.match ( cookie_name + '=(.*?)(;|$)' );

  if ( results )
  {
    return ( unescape ( results[1] ) );
    }
  else
    return null;
}
//Included on Master Page, to allow inline links (e.g. left menu) to delete cookie
//this allows map to be reset
//function delete_cookie ( cookie_name )
//{
// 
//  var cookie_date = new Date ( );  // current date & time
//  cookie_date.setTime ( cookie_date.getTime() - 1 );
//  document.cookie = cookie_name += "=; expires=" + cookie_date.toGMTString();

//}

function set_cookie ( name, value, numDaysToExpiry, path, domain, secure )
{
  var cookie_string = name + "=" + escape ( value );

  if ( numDaysToExpiry )
  {
    var expires = new Date
    expires.setDate(expires.getDate()+numDaysToExpiry);
    cookie_string += "; expires=" + expires.toGMTString();
  }

  if ( path )
        cookie_string += "; path=" + escape ( path );

  if ( domain )
        cookie_string += "; domain=" + escape ( domain );
  
  if ( secure )
        cookie_string += "; secure";
  
  document.cookie = cookie_string;
}

function searchMap()
{
     
      if (geocoder) 
      {
		  geocoder=new GClientGeocoder();
		  var tbx = document.getElementById("search_tbx");
		  var searchText =tbx.value + geocoderRestrictSearchAreaTo ;
		  geocoder.setBaseCountryCode("GB");
		  geocoder.getLocations(searchText, addAddressToMap);
//		  geocoder.getLatLng(searchText, function(point) 
//			{
//				if (!point) 
//				{
//				  alert(searchText + " not found");
//				} 
//				else 
//				{
//				  if (addressMarker) 
//				  {
//					map.removeOverlay(addressMarker);
//				  }
//				  addressMarker = new GMarker(point);
//				  map.setCenter(point);
//				  map.addOverlay(addressMarker);
//				}
//			 });
      }
    
}

function addAddressToMap(response,markerText) 
{
      
      if (!response || response.Status.code != 200) 
      {
        alert("Sorry, we were unable to geocode that address");
      } 
      else 
      {
		  map.clearOverlays(); 
		  
		  var i;
		  var tbx = document.getElementById("search_tbx");
		  bounds=new GLatLngBounds();
		  
		  for (i in  response.Placemark)
		  {
			place = response.Placemark[i];       
			point = new GLatLng(place.Point.coordinates[1],place.Point.coordinates[0]);
			marker = new GMarker(point,{title: place.address});			
			map.addOverlay(marker);
			if (!bounds.containsLatLng(point))
			{
				bounds.extend(point);
			}
          }
          
          var center = bounds.getCenter();
          map.setCenter(center);
	if (map.getBoundsZoomLevel(bounds)>14)
	{
		map.setZoom(14);
	}
	else
	{
        	map.setZoom(map.getBoundsZoomLevel(bounds));
	}
          currentMapZoom= map.getZoom();
         
          getWMS();
      }
       
}