// Created for Monkeyspoon.com by Jeff R King - v2.6

OpenLayers.ImgPath = OpenSpace.getImagesLocation(); /* Bug fix for Safari 'blank.gif' 404. */

 var i;
 var string;
 var array = [];
 var query;
 var osMap;
 var ngr;
 var content;
 var marker;
 var mapPointArray;
 var points = new Array();
 var NewRouteCollectionLines = new Array();
 var popupsize = new OpenLayers.Size(350, 240);
 
 var postcodeService;
 var osGazetteer;
 var querynospaces;
 var gazArray = [];
 var gazResult = 0;
 var gazGet;
 var next = 0;
 var outofbounds;
 var trynospace = 0;
 
 var mapboundsLeft = 390000;
 var mapboundsBottom = 345000;
 var mapboundsRight = 440000;
 var mapboundsTop = 415000;

 var mousegrlonlat;
 var lonlat;
 var pt;

 var urlquery;
 var mapcenter;
 var mapcenterNE;
 var getamapurl;
 var googlemapurl;

 var vectorLayer;
 var markerLayer;
 var mappointstoadd;
 var mappoints;
 var name;
 var line;
 var length;
 var length_km;
 var length_mi;
 var tracklength;
 
 var NewLineFeature;
 var NewLineString;
 var NewRouteFeature;
 var NewRouteCollection;
 var newRouteLength;
 var newRouteLengthKm;
 var newRouteLengthMi;
 
 var routeURLhref;
 var routeURL;
 var centerGridRefURL;
 var trackURLhref;
 var CustomMarkerURLhref;
 
 var customusermarker;
 var importedcustomusermarker;
 var html;
 var zoom;
 var customMarkerTitle = "{Title}";
 var customMarkerText = "{Text}";
 var customMarkerImageURL = "{Image URL}";
 var customMarkerPosEN = new OpenSpace.MapPoint(0,0);
 
 var x;
 var y;
 
 var Route_BlkRbt_CvDl_HlnCrs_BktrBdg_loaded = 0;
 var route_monkeyspoon_traditional_epic_loaded = 0;
 var route_edale_mount_famine_loop_loaded = 0;
 var route_hope_valley_mtb_challenge_09_loaded = 0;

 var routedesription;

 var selectlinewidth = 10; // old = 4
 var routelinestyle1 = {strokeColor: "#00EE00", strokeOpacity: 0.4, strokeWidth: 5, strokeLinecap: "round"}; // Green - Pre-Defined Routes
 var routelinestyle2 = {strokeColor: "#EE0000", strokeOpacity: 0.5, strokeWidth: 4, strokeLinecap: "round"};  // Red - New Line of a Route
 var routelinestyle3 = {strokeColor: "#0000EE", strokeOpacity: 0.5, strokeWidth: 4, strokeLinecap: "round"};  // Blue - New Route                 strokeDashstyle: "dash"
 var tracklinestyle = {strokeColor: "#EE00EE", strokeOpacity: 0.4, strokeWidth: selectlinewidth, strokeLinecap: "round"};  // Purple - Pre-Defined Track 		hoverStrokeColor: "#FF00FF"
 var SelectaLineStyle = {strokeColor: "#000000", strokeOpacity: 0.35, strokeWidth: selectlinewidth, strokeLinecap: "round"};  // White - Pre-Defined Track 		hoverStrokeColor: "#FF00FF"


 function mapinit()
 {
 
 OpenLayers.Renderer.SVG.prototype.supported = function() {
        var svgFeature = "http://www.w3.org/TR/SVG11/feature#";
        return (document.implementation &&
           (document.implementation.hasFeature("org.w3c.svg", "1.0") ||
            document.implementation.hasFeature(svgFeature + "SVG", "1.1") ||
            document.implementation.hasFeature(svgFeature + "BasicStructure", "1.1") ));
};
    osMap = new OpenSpace.Map("osMap",{resolutions: [50, 25, 10, 5], restrictedExtent: new OpenSpace.MapBounds(mapboundsLeft,mapboundsBottom,mapboundsRight,mapboundsTop)});

	osMap.setCenter(new OpenSpace.MapPoint(415300,385375), 0);



	 osMap.events.register("mousemove", osMap, function(e) {
        pt = osMap.getLonLatFromViewPortPx(e.xy);
        lonlat = new OpenSpace.GridProjection().getLonLatFromMapPoint(pt);
		document.displayform.gridrefdisplay.value = NE2NGR(pt.lon,pt.lat);
		mousegrlonlat = pt.lon + "," + pt.lat;
         });
         

	vectorLayer = osMap.getVectorLayer();		// Get default vector layer
	markerLayer = osMap.getMarkerLayer();
//	osMap.addLayer(OLMarkers);
	postcodeService = new OpenSpace.Postcode(); // Start Postcode search service
	osGazetteer = new OpenSpace.Gazetteer;		// Start Gazetteer (place/grid ref) search service

	iconsignpostsize =  new OpenLayers.Size(36, 48);
	iconsignpostpos = new OpenLayers.Pixel(-16,-50);
	iconsignpostpoppos = new OpenLayers.Pixel(16,6);
	iconsignpost = new OpenLayers.Icon('Icon_SignPost.gif', iconsignpostsize, iconsignpostpos);
	
	// Create Blank Features
	NewLineFeature = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.LineString(new OpenLayers.Geometry.Point(390000,350000)), null, routelinestyle1);
	vectorLayer.addFeatures([NewLineFeature]);
	NewRouteFeature = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.LineString(new OpenLayers.Geometry.Point(390000,350000)), null, routelinestyle1);
	vectorLayer.addFeatures([NewRouteFeature]);

	//Set up blank Custom User Marker off the map
	customusermarker = new OpenLayers.Marker(customMarkerPosEN,new OpenLayers.Icon('http://openspace.ordnancesurvey.co.uk/osmapapi/img_versions/img_1.0.0/OS/images/markers/marker-target-med-blue.png', new OpenLayers.Size(33,45), new OpenLayers.Pixel(-17,-48)));
	customusermarker.icon.infoWindowAnchor = new OpenLayers.Pixel(16,16);	
		customusermarker.events.register("click",customusermarker,function(evt){
		osMap.closeInfoWindow();
		html = '<form name="infowindowform"><input name="title" value="'+customMarkerTitle+'" type="text" maxlength="100" style="border: 1px solid #C3FE5C; width: 250px; font-size:12px;"><br><textarea rows="6" cols="22" name="textarea" style="border: 1px solid #C3FE5C; width: 250px; font: 12px "Lucida Grande", "Lucida Sans Unicode", Sans-Serif;" maxlength="500">'+customMarkerText+'</textarea><br><input name="imageURL" value="'+customMarkerImageURL+'" type="text" maxlength="500" style="border: 1px solid #C3FE5C; width: 250px; font-size:12px;"><br><input type="button" value="Save & Close" onclick="CustomUserMarkerFormUpdate()" style="width:250px;  font-size:12px;"/>';
		osMap.openInfoWindow(this.icon, this.lonlat, html, new OpenLayers.Size(300, 300));
		OpenLayers.Event.stop(evt);
		});
	markerLayer.addMarker(customusermarker);

/*	### Other Markers ### */

/* Wharncliffe */
	marker = osMap.createMarker(new OpenSpace.MapPoint(430800,394980), new OpenLayers.Icon('Icon_Wharncliffe.gif', new OpenLayers.Size(40, 40), new OpenLayers.Pixel(-20,-42)), '<b>Wharncliffe Wood</b> - Sheffield<br />The now offical DH tracks in Wharncliffe Wood.<br /><a href="http://www.wharncliffe.info/maps.html" target="_BLANK"><i>Wharncliffe.info</i></a>',new OpenLayers.Size(260, 170));
	marker.icon.infoWindowAnchor = new OpenLayers.Pixel(20,0);

/* HikeBike&Ride */
	marker = osMap.createMarker(new OpenSpace.MapPoint(423335,381040), new OpenLayers.Icon('Icon_HikeBike&Ride.gif', new OpenLayers.Size(40, 40), new OpenLayers.Pixel(-20,-42)), '<a href="http://www.hikebikeandride.com/" target="_BLANK"><b>Hike Bike & Ride</b></a> - Hathersage<br />The Bike Station services & repairs bikes.<br />Post Code: S32 1DP',new OpenLayers.Size(280, 150));
	marker.icon.infoWindowAnchor = new OpenLayers.Pixel(20,0);
	
/* 18 Bikes */
	marker = osMap.createMarker(new OpenSpace.MapPoint(417120,383540), new OpenLayers.Icon('Icon_18Bikes.gif', new OpenLayers.Size(40, 24), new OpenLayers.Pixel(-20,-26)), '<a href="http://www.18bikes.co.uk/" target="_BLANK"><b>18 Bikes</b></a> - Hope<br />The bike shop in Hope.<br />Post Code: S33 6RD',new OpenLayers.Size(230, 130));
	marker.icon.infoWindowAnchor = new OpenLayers.Pixel(20,0);
	
/* Fairholmes Visitor Centre */
	marker = osMap.createMarker(new OpenSpace.MapPoint(417320,389330), new OpenLayers.Icon('Icon_GenFood&Drink.gif', new OpenLayers.Size(16, 36), new OpenLayers.Pixel(-8,-36)), '<a href="http://www.peakdistrict.org/index/visiting/ic/ic-derwent.htm" target="_BLANK"><b>Fairhomes Vistor Centre</b></a> - Derwent<br />Parking, Toilets, Hot & Cold Food & Drink, Basic Bike Hire<br />Post Code: S33 0AQ',new OpenLayers.Size(340, 140));
	marker.icon.infoWindowAnchor = new OpenLayers.Pixel(8,0);

/* Castleton Visitor Centre */
	marker = osMap.createMarker(new OpenSpace.MapPoint(414910,382965), new OpenLayers.Icon('Icon_GenFood&Drink.gif', new OpenLayers.Size(16, 36), new OpenLayers.Pixel(-8,-36)), '<a href="http://www.peakdistrict.org/index/visiting/ic/ic-castleton.htm" target="_BLANK"><b>Castleton Vistor Centre</b></a><br />Parking, Toilets, Hot & Cold Food & Drink<br />Post Code: S33 8WN',new OpenLayers.Size(300, 140));
	marker.icon.infoWindowAnchor = new OpenLayers.Pixel(8,0);

/* Heatherdene */
	marker = osMap.createMarker(new OpenSpace.MapPoint(420295,385785), new OpenLayers.Icon('Icon_GenFood&Drink.gif', new OpenLayers.Size(16, 36), new OpenLayers.Pixel(-8,-36)), '<b>Heatherdene Car Park</b><br />Parking, Toilets, often an Ice cream van in the summer. <br />Post Code: near S33 0AZ',new OpenLayers.Size(300, 140));
	marker.icon.infoWindowAnchor = new OpenLayers.Pixel(8,0);








/*	### Track Markers & Lines ###
~ Template: ~
	content = '<a href="http://monkeyspoon.com/tracks/track-" target="_BLANK"><b></b></a> - <br /><img src=""> <img src=""><br />Tech/Speed/Fun Rating: ';
	mappointstoadd=new Array();
TrackName = new track(content,mappointstoadd,"TrackName");

~ Track Variable Names: ~
Aston
BamfordClough
BlackleyHey
BrinksRoad
CaveDale

ChapelGate
DerwentEdge
Gores
HaggTor
HollinsCrossBackTorBridge

HollinsCrossCastleton
HollinsCrossGreenlands
HopeXDH
HurstClough
JacobsLadder

MamTorGreenlands
PinDale
StanagePlantation

*/
/* Aston */
	content = '<a href="http://monkeyspoon.com/tracks/track-aston" target="_BLANK"><b>Aston</b></a> - Hope<br /><img src="http://monkeyspoon.com/Pictures/Tracks/Aston/thumbs/Aston01.JPG">&#160;<img src="http://monkeyspoon.com/Pictures/Tracks/Aston/thumbs/Aston09.JPG"><br />Tech/Speed/Fun Rating: */****/**';
	mappointstoadd=new Array("417305,385770","417285,385615","417570,384945","417845,384755","417900,384620","417980,384555","417975,384440","418130,384315");
Aston = new track(content,mappointstoadd,"Aston");

/* Bamford Clough */
	content = '<a href="http://monkeyspoon.com/tracks/track-bamford-clough" target="_BLANK"><b>Bamford Clough</b></a><br /><img src="http://monkeyspoon.com/Pictures/Tracks/BamfordClough/thumbs/BamfordClough08.JPG">&#160;<img src="http://monkeyspoon.com/Pictures/Tracks/BamfordClough/thumbs/BamfordClough09.JPG"><br />Tech/Speed/Fun Rating: ***/****/***';
	mappointstoadd=new Array("421395,383940","421260,383895","421005,383735","420920,383650","420845,383625");
BamfordClough = new track(content,mappointstoadd,"BamfordClough");

/* Blackley Hey */
	content = '<a href="http://monkeyspoon.com/tracks/track-blackley-hey" target="_BLANK"><b></b></a>Blackley Hey - Alport, Snake Pass<br /><img src="http://monkeyspoon.com/Pictures/Tracks/BlackleyHey/thumbs/BlackleyHey07.JPG" width=140 height=105> <img src="http://monkeyspoon.com/Pictures/Tracks/BlackleyHey/thumbs/BlackleyHey17.JPG" width=140 height=105><br />Tech/Speed/Fun Rating: ****/**/**';
	mappointstoadd=new Array("415980,387630","415800,387955","415675,388100","415495,388170","415530,388305","415470,388465","415345,388610","415100,388760","415035,388825","414830,388905","414690,389005");
BlackleyHey = new track(content,mappointstoadd);

/* Brinks Road */
	content = '<a href="http://monkeyspoon.com/tracks/track-Brinks Road" target="_BLANK"><b>Brinks Road</b></a> - Hope<br /><img src="http://monkeyspoon.com/Pictures/Tracks/BrinksRoad/thumbs/BrinksRoad02.JPG">&#160;<img src="http://monkeyspoon.com/Pictures/Tracks/BrinksRoad/thumbs/BrinksRoad06.JPG"><br />Tech/Speed/Fun Rating: **/****/***';
	mappointstoadd=new Array("416475,386795","416585,386605","416735,386455","416890,386235","417020,386010","417005,385885","417045,385615","417050,385505","417085,385370");
BrinksRoad = new track(content,mappointstoadd,"BrinksRoad");

/* Cave Dale */
	content = '<a href="http://monkeyspoon.com/tracks/track-cave-dale" target="_BLANK"><b>Cave Dale</b></a> - Castleton<br /><img src="http://monkeyspoon.com/Pictures/Tracks/CaveDale/thumbs/CaveDale01.JPG">&#160;<img src="http://monkeyspoon.com/Pictures/Tracks/CaveDale/thumbs/CaveDale02.JPG"><br />Tech/Speed/Fun Rating: *****/**/***';
	mappointstoadd=new Array("413515,381295","413725,381500","413840,381580","414095,381630","414165,381790","414220,381940","414305,382025","414445,382090","414600,382110","414700,382110","414825,382185","414900,382395","414925,382505","414995,382550","415040,382720");
CaveDale = new track(content,mappointstoadd,"CaveDale");

/* Chapel Gate */
	content = '<a href="http://monkeyspoon.com/tracks/track-chapel-gate" target="_BLANK"><b>Chapel Gate</b></a> - Edale<br /><img src="http://monkeyspoon.com/Pictures/Tracks/ChapelGate/thumbs/ChapelGate01.JPG">&#160;<img src="http://monkeyspoon.com/Pictures/Tracks/ChapelGate/thumbs/ChapelGate05.JPG"><br />Tech/Speed/Fun Rating: *****/***/***';
	mappointstoadd=new Array("409920,382915","409845,383135","409915,383240","409960,383390","410180,383550","410295,383675","410440,383890","410700,384025","411055,384005","411265,384165","411300,384250");
ChapelGate = new track(content,mappointstoadd,"ChapelGate");

/* Derwent Edge */
	content = '<a href="http://monkeyspoon.com/tracks/track-derwent-edge" target="_BLANK"><b>Derwent Edge</b></a> - Ladybower<br /><img src="http://monkeyspoon.com/Pictures/Tracks/DerwentEdge/thumbs/DerwentEdge01.JPG" width="140" height="105">&#160;<img src="http://monkeyspoon.com/Pictures/Tracks/DerwentEdge/thumbs/DerwentEdge09.JPG" width="140" height="105"><br />Tech/Speed/Fun Rating: ***/***/***';
	mappointstoadd=new Array("419775,387405","419740,387460","419780,387655","419885,387740","419965,387930","419815,388395","419495,388410","419320,388345","419150,388350","419080,388380","419050,388470","418930,388455","418900,388385","418710,388375");
DerwentEdge = new track(content,mappointstoadd,"DerwentEdge");

/* Gores */
	content = '<a href="http://monkeyspoon.com/tracks/track-gores-dh" target="_BLANK"><b>Gores DH</b></a> - Derwent<br /><img src="http://monkeyspoon.com/Pictures/Tracks/GoresDH/thumbs/GoresDH07.JPG">&#160;<img src="http://monkeyspoon.com/Pictures/Tracks/GoresDH/thumbs/GoresDH09.JPG"><br />Tech/Speed/Fun Rating: ***/****/*****';
	mappointstoadd=new Array("416700,390115","416715,390170","416640,390380","416705,390630","416815,390745","416820,390910","416680,390970","416735,391010");
Gores = new track(content,mappointstoadd,"Gores");

/* HaggTor */
	content = '<a href="http://monkeyspoon.com/tracks/track-haggtor" target="_BLANK"><b>HaggTor</b></a> - aka Hagg Farm<br /><img src="http://monkeyspoon.com/Pictures/Tracks/HaggTor/thumbs/HaggTor03.JPG">&#160;<img src="http://monkeyspoon.com/Pictures/Tracks/HaggTor/thumbs/HaggTor06.JPG"><br />Tech/Speed/Fun Rating: **/****/*****';
	mappointstoadd=new Array("416365,389035","416380,388940","416345,388950","416320,388925","416220,388975","416225,388890","416195,388820","416190,388810","416185,388750","416210,388660");
HaggTor = new track(content,mappointstoadd,"HaggTor");

/* Hollins Cross - BackTor Bridge */
	content = '<a href="http://monkeyspoon.com/tracks/track-hollins-cross-backtor-bridge" target="_BLANK"><b>Hollins Cross - BackTor Bridge</b></a> - Edale, Castleton<br /><img src="http://monkeyspoon.com/Pictures/Tracks/HollinsCross-BackTorBridge/thumbs/HollinsCross-BackTorBridge01.JPG" width=140 height=105> <img src="http://monkeyspoon.com/Pictures/Tracks/HollinsCross-BackTorBridge/thumbs/HollinsCross-BackTorBridge04.JPG" width=140 height=105><br />Tech/Speed/Fun Rating: *** / *** / ***';
	mappointstoadd=new Array("413580,384520","413590,384645","413640,384720","413850,384865","413880,384920","413830,384920","413845,385010","413935,385060","413870,385120","413870,385220","413805,385345","413785,385550","413705,385560");
HollinsCrossBackTorBridge = new track(content,mappointstoadd,"HollinsCrossBackTorBridge");

/* Hollins Cross - Castleton */
	content = '<a href="http://monkeyspoon.com/tracks/track-hollins-cross-castleton" target="_BLANK"><b>Hollins Cross - Castleton</b></a> - Edale, Castleton<br /><img src="http://monkeyspoon.com/Pictures/Tracks/HollinsCross-Castleton/thumbs/Hollins-Castleton03.JPG" width=140 height=105> <img src="http://monkeyspoon.com/Pictures/Tracks/HollinsCross-Castleton/thumbs/Hollins-Castleton06.JPG" width=140 height=105><br />Tech/Speed/Fun Rating: *** / *** / ***';
	mappointstoadd=new Array("413580,384500","413840,384500","413965,384425","414065,384375","414160,384405","414280,384460","414220,384265","414090,384145","414195,384030");
HollinsCrossGreenlands = new track(content,mappointstoadd,"HollinsCrossCastleton");

/* Hollins Cross - Greenlands */
	content = '<a href="http://monkeyspoon.com/tracks/track-hollins-cross-greenlands" target="_BLANK"><b>Hollins Cross - Greenlands</b></a> - Edale, Castleton<br /><img src="http://monkeyspoon.com/Pictures/Tracks/HollinsCross-Greenlands/thumbs/HollinsCross-Greenlands01.JPG" width=140 height=105> <img src="http://monkeyspoon.com/Pictures/Tracks/HollinsCross-Greenlands/thumbs/HollinsCross-Greenlands03.JPG" width=140 height=105><br />Tech/Speed/Fun Rating: ** / **** / **';
	mappointstoadd=new Array("413570,384505","413500,384545","413225,384565","413065,384525","412875,384525","412685,384510","412545,384460");
HollinsCrossGreenlands = new track(content,mappointstoadd,"HollinsCrossGreenlands");

/* Hope-X DH */
	content = '<a href="http://monkeyspoon.com/tracks/track-hopex-dh" target="_BLANK"><b>Hope Cross DH</b></a> - aka The Beast of Hope Cross<br /><img src="http://monkeyspoon.com/Pictures/Tracks/HopeX/thumbs/HopeX01.JPG">&#160;<img src="http://monkeyspoon.com/Pictures/Tracks/HopeX/thumbs/HopeX08.JPG"><br />Tech/Speed/Fun Rating: *****/*/****';
	mappointstoadd=new Array("415995,387625","416075,388005","416150,388145","416160,388205","416220,388175","416285,388195","416325,388115");
HopeXDH = new track(content,mappointstoadd,"HopeXDH");

/* Hurst Clough */
	content = '<a href="http://monkeyspoon.com/tracks/track-hurst-clough" target="_BLANK"><b>Hurst Clough</b></a> - Bamford<br /><img src="http://monkeyspoon.com/Pictures/Tracks/HurstClough/thumbs/HurstClough01.JPG">&#160;<img src="http://monkeyspoon.com/Pictures/Tracks/HurstClough/thumbs/HurstClough04.JPG"><br />Tech/Speed/Fun Rating: **/****/***';
	mappointstoadd=new Array("422165,383175","422100,383155","421980,382975","421875,382920","421770,382945","421675,382920","421630,382960","421580,382900");
HurstClough = new track(content,mappointstoadd,"HurstClough");

/* Jacobs Ladder */
	content = '<a href="http://monkeyspoon.com/tracks/track-jacobs-ladder" target="_BLANK"><b>Jacob\'s Ladder</b></a> - Edale<br /><img src="http://monkeyspoon.com/Pictures/Tracks/JacobsLadder/thumbs/JacobsLadder11.JPG">&#160;<img src="http://monkeyspoon.com/Pictures/Tracks/JacobsLadder/thumbs/JacobsLadder16.JPG"><br />Tech/Speed/Fun Rating: ***** / *** / ****';
	mappointstoadd = new Array("408075,386100","408190,386200","408535,386195","408645,386215","408670,385985","408700,385970","408805,386130","408840,386115");
JacobsLadder = new track(content,mappointstoadd,"JacobsLadder");

/* MamTor-Greenlands */
	content = '<a href="http://monkeyspoon.com/tracks/track-mam-tor-greenlands" target="_BLANK"><b>MamTor-Greenlands</b></a> - Edale, Castleton<br /><img src="http://monkeyspoon.com/Pictures/Tracks/MamTor-Greenlands/thumbs/MamTor-Greenlands01.JPG"  width=140 height=105>&#160;<img src="http://monkeyspoon.com/Pictures/Tracks/MamTor-Greenlands/thumbs/MamTor-Greenlands04.JPG"  width=140 height=105><br />Tech/Speed/Fun Rating: **/***/***';
	mappointstoadd = new Array("412555,383565","412555,383820","412485,383970","412525,384100","412505,384195","412570,384260","412590,384335","412530,384370","412520,384405","412540,384465");
MamTorGreenlands = new track(content,mappointstoadd,"MamTorGreenlands");

/* PinDale */
	content = '<a href="http://monkeyspoon.com/tracks/track-pin-dale" target="_BLANK"><b>Pin Dale</b></a> - Hope, Castleton<br /><img src="http://monkeyspoon.com/Pictures/Tracks/PinDale/thumbs/PinDale04.JPG"  width=140 height=105>&#160;<img src="http://monkeyspoon.com/Pictures/Tracks/PinDale/thumbs/PinDale06.JPG"  width=140 height=105><br />Tech/Speed/Fun Rating: **/***/**';
	mappointstoadd = new Array("415530,382080","415545,381960","415575,381955","415645,382040","415675,382160","415865,382270","415920,382350","416070,382415");
PinDale = new track(content,mappointstoadd,"PinDale");

/* Stanage Plantation */
	content = '<a href="http://monkeyspoon.com/tracks/track-stanage-plantation" target="_BLANK"><b>Stanage Plantation</b></a> - Hathersage<br /><img src="http://monkeyspoon.com/Pictures/Tracks/StanagePlantation/thumbs/StanagePlantation01.JPG" width=140 height=105>&#160;<img src="http://monkeyspoon.com/Pictures/Tracks/StanagePlantation/thumbs/StanagePlantation05.JPG" width=140 height=105><br />Tech/Speed/Fun Rating: *** / *** / ***';
	mappointstoadd = new Array("424055,384320","423965,384360","423985,384285","423975,384210","423990,384025","423955,383885","423895,383805","423900,383660");
StanagePlantation = new track(content,mappointstoadd,"StanagePlantation");

/*	~~~END~~~ [Track Markers & Lines] */

routeURLhref = document.getElementById('routeURL');
centerGridRefURL = document.getElementById('centerGridRefURL');
trackURLhref = document.getElementById('trackURL');
CustomMarkerURLhref = document.getElementById('CustomMarkerURL');

urlquery = window.location.search;
  if (urlquery.substring(0, 1) == '?') {
    urlquery = urlquery.substring(1);
  maplocate(urlquery)
  }

} /* <--- END OF init() */


function track(content,mappointstoadd,name,line,marker,length,length_km,length_mi) //  Track Object Creation Function/Method
{
mappoints = new Array();
for (i = 0; i < mappointstoadd.length; i++){
mappoints.push(new OpenLayers.Geometry.Point(Number(String(mappointstoadd[i]).slice(0,6)), Number(String(mappointstoadd[i]).slice(7))));}
this.line = new OpenLayers.Geometry.LineString(mappoints);
vectorLayer.addFeatures([new OpenLayers.Feature.Vector(this.line, {NAME:[name]}, tracklinestyle)]);
this.length = Math.round(this.line.getLength());
this.length_km = (Math.round(this.length/10))/100;
this.length_mi = (Math.round((this.length*0.6214)/10))/100;
content = content + "<br />Calculated Distance: " + this.length_km + "km / " + this.length_mi + "mi";
mapPointArray = mappointstoadd[1].toString().split(",");
	this.marker = osMap.createMarker(new OpenSpace.MapPoint(mapPointArray[0],mapPointArray[1]), iconsignpost.clone(), content,popupsize);
	this.marker.icon.infoWindowAnchor = iconsignpostpoppos;
}

function newline(mappointstoadd,linestyle) //Line Creation Function
{
mappoints = new Array();
for (i = 0; i < mappointstoadd.length; i++){
mappoints.push(new OpenLayers.Geometry.Point(Number(String(mappointstoadd[i]).slice(0,6)), Number(String(mappointstoadd[i]).slice(7))));}
line = new OpenLayers.Geometry.LineString(mappoints);
vectorLayer.addFeatures([new OpenLayers.Feature.Vector(line, null, linestyle)]);
length += line.getLength();
}



function maplocate(gotolocation) {
if (gotolocation.substr(0,2) == "t-") {

trackURLhref.href = "http://monkeyspoon.com/Tracks/MonkeyspoonOSopenspaceMap.htm?" +  gotolocation;
gotolocation = gotolocation.substr(2)
	if (gotolocation == "aston") {osMap.setCenter(new OpenSpace.MapPoint(417305,385770),3);}
	if (gotolocation == "bamford-clough") {osMap.setCenter(new OpenSpace.MapPoint(421395,383940),3);}
	if (gotolocation == "blackley-hey") {osMap.setCenter(new OpenSpace.MapPoint(415520,388370),3);}
	if (gotolocation == "brinks-road") {osMap.setCenter(new OpenSpace.MapPoint(416475,386795),3);}
	if (gotolocation == "cave-dale") {osMap.setCenter(new OpenSpace.MapPoint(414700,382110),3);}
	
	if (gotolocation == "chapel-gate") {osMap.setCenter(new OpenSpace.MapPoint(409845,383135),3);}
	if (gotolocation == "derwent-edge") {osMap.setCenter(new OpenSpace.MapPoint(419775,387405),3);}
	if (gotolocation == "gores-dh") {osMap.setCenter(new OpenSpace.MapPoint(416700,390115),3);}
	if (gotolocation == "hagg-tor") {osMap.setCenter(new OpenSpace.MapPoint(416365,389035),3);}
	if (gotolocation == "hollinscross-backtorbridge") {osMap.setCenter(new OpenSpace.MapPoint(413590,384645),3);}
	
	if (gotolocation == "hollinscross-castleton") {osMap.setCenter(new OpenSpace.MapPoint(413840,384500),3);}
	if (gotolocation == "hollinscross-greenlands") {osMap.setCenter(new OpenSpace.MapPoint(413500,384545),3);}
	if (gotolocation == "hope-x-dh") {osMap.setCenter(new OpenSpace.MapPoint(415995,387625),3);}
	if (gotolocation == "hurst-clough") {osMap.setCenter(new OpenSpace.MapPoint(422165,383175),3);}
	if (gotolocation == "jacobs-ladder") {osMap.setCenter(new OpenSpace.MapPoint(408075,386100),3);}
	
	if (gotolocation == "mamtor-greenlands") {osMap.setCenter(new OpenSpace.MapPoint(412555,383820),3);}
	if (gotolocation == "pin-dale") {osMap.setCenter(new OpenSpace.MapPoint(415545,381960),3);}
	if (gotolocation == "stanage-plantation") {osMap.setCenter(new OpenSpace.MapPoint(424055,384320),3);}
	
} else if (gotolocation.substr(0,2) == "r-") {
routeURLhref.href = "http://monkeyspoon.com/Tracks/MonkeyspoonOSopenspaceMap.htm?" +  gotolocation;
gotolocation = gotolocation.substr(2)
	if (gotolocation == "route_monkeyspoon_traditional_epic") {route_monkeyspoon_traditional_epic()}
	if (gotolocation == "blkrbt-cvdl-hlncrs-bktrbdg") {Route_BlkRbt_CvDl_HlnCrs_BktrBdg()}
	if (gotolocation == "route_edale_mount_famine_loop") {route_edale_mount_famine_loop()}
	if (gotolocation == "route_hope_valley_mtb_challenge_09") {route_hope_valley_mtb_challenge_09()}

} else if (gotolocation.substr(0,2) == "g-") {
gotolocation = gotolocation.substr(2);
gotolocation = gotolocation.replace(/%20/g, "");
searchNGR(gotolocation);
} else if (gotolocation.substr(0,14) == "gridrefdisplay") {
gotolocation = gotolocation.substr(15);
gotolocation = gotolocation.replace(/%20/g, "");
gotolocation = gotolocation.replace(/\+/g, "");
searchNGR(gotolocation);
} else if (gotolocation.substr(0,3) == "rt=") {
ImportURLroute(gotolocation.substr(3));
} else if (gotolocation.substr(0,2) == "s=") {
search(gotolocation.substr(2));
} else if (gotolocation.substr(0,3) == "cm=") {
ImportCustomUserMarker(gotolocation.substr(3),2);
}

}


// Import Route from URL string

function ImportURLroute(gotolocation){ //***** In Public Version 2.5
array = [];
points = [];

array = gotolocation.split("&");
gotolocation = array[0];
	if (array.length > 1) {
		if (array[1].substr(0,3) == "cm=") {ImportCustomUserMarker(array[1].substr(3),1);} // Draw Custom Mark if on the end of input string. eg: ?rt=routePoints&cm=customerMarker
	}
gotolocation = gotolocation.replace(/\+/g, "-+-");
gotolocation = gotolocation.substring(0,gotolocation.length-1)
array = gotolocation.split("-");

	for (i = 0; i < array.length; i++){
		if (array[i] !="+"){
		array[i] = parseInt(array[i],36);
		}
	}

	for (i = 0; i < array.length; i++){
		if (array[i] == "+"){
		vectorLayer.removeFeatures([NewLineFeature]);
		NewLineString = new OpenLayers.Geometry.LineString(points);
		NewLineFeature = new OpenLayers.Feature.Vector(NewLineString, null, routelinestyle3);
		vectorLayer.addFeatures([NewLineFeature]);
		DrawRouteLockLine();
		} else {
		x = array[i].toString();
		y = x.substr(6);
		x = x.substr(0,6);
		points.push(new OpenLayers.Geometry.Point(x,y));
		}
	}
}

function DrawRouteLineClear() { //***** In Public Version 2.5
points = [];
vectorLayer.removeFeatures([NewLineFeature]);
}

function DrawRouteLockLine() { //***** In Public Version 2.5
NewRouteCollectionLines.push(NewLineString.clone());
UpdateNewRoute();
}

function UpdateNewRoute(){ //***** In Public Version 2.5
vectorLayer.removeFeatures([NewRouteFeature]);
NewRouteCollection = new OpenLayers.Geometry.Collection(NewRouteCollectionLines);
NewRouteFeature = new OpenLayers.Feature.Vector(NewRouteCollection, null, routelinestyle2);
vectorLayer.addFeatures([NewRouteFeature]);
DrawRouteLineClear();
newRouteLength = NewRouteCollection.getLength();
newRouteLengthKm = ((Math.round(newRouteLength/10))/100);
newRouteLengthMi = (Math.round((newRouteLength*0.6214)/10))/100;
document.buttonform.NewRouteLengthBox.value = newRouteLengthKm + "km, " + newRouteLengthMi + "mi";
}




	function search(query){
	querynospaces = removeSpaces(query);
		if (querynospaces.substr(2,1) != parseInt(querynospaces.substr(2,1))){
		searchGazetteer(query);
		} else if (querynospaces.substr(5,1)== parseInt(querynospaces.substr(5,1))){
		searchNGR(querynospaces);
		} else {
		searchPostcode(querynospaces);
		}
	}

	function searchNGR(value){
	document.buttonform.GazArrayBox.value = "Grid Reference not found.";
	getoutofbounds(NGR2NE(value).getEasting(),NGR2NE(value).getNorthing());
		if (outofbounds == 0) {
		osMap.setCenter(NGR2NE(value),3);
		document.buttonform.GazArrayBox.value = "Grid Reference found.";
		} else {
		document.buttonform.GazArrayBox.value = "Grid Reference out of bounds.";
		}
	}
	

  function searchPostcode(value){
  document.buttonform.GazArrayBox.value = "Postcode not found.";
  postcodeService.getLonLat(value, onResult);
  return false;
  }
  function onResult(mapPoint)
  {
  e = mapPoint.getEasting();
  n = mapPoint.getNorthing();
  getoutofbounds(e,n);
	if (outofbounds == 0) {
	osMap.setCenter(mapPoint, 3);
	document.buttonform.GazArrayBox.value = "Postcode found.";
	} else {
	document.buttonform.GazArrayBox.value = "Postcode out of bounds.";
	}
  }
  
  function searchGazetteer(value){
  gazResult = 0;
  gazArray = [];
  document.buttonform.GazArrayBox.value = "Place not found.";
  gazGet = osGazetteer.getLocations(value,gazOptions);
  }
  
  function gazOptions(value){
  gazArray = value;
 
  if  (gazArray.length == 0) {
  	if (trynospace == 0){
  	trynospace = 1;
  	searchGazetteer(querynospaces)
  	}
  document.buttonform.GazArrayBox.value = "Place not found.";
  } else {
  	// Remove results from outside of map area
  	for (i = 0; i < gazArray.length; i++){
	getoutofbounds(gazArray[i].location.getEasting(),gazArray[i].location.getNorthing())
	  	if (outofbounds == 1) {
	  	gazArray.splice(i,1)
	  	i = i-2;
	  	if (i<0) {i=0;}	  	
	  	}
    }
  	
  	if  (gazArray.length == 0) {
  	document.buttonform.GazArrayBox.value = "Place not found in map area.";
  	} else {
  	osMap.setCenter(gazArray[gazResult].location, 3);   //in this case there is only one match so we zoom to it, if there are more we can offer them to the user to select
  	document.buttonform.GazArrayBox.value = gazResult + 1 +"/"+ gazArray.length +" : "+ gazArray[gazResult].name;
  	}
  }
  trynospace = 0;
  }

  function gazSearchNext(){
  gazResult = gazResult + 1;
  if (gazResult == gazArray.length) gazResult = 0;
  osMap.setCenter(gazArray[gazResult].location, 3);   //in this case there is only one match so we zoom to it, if there are more we can offer them to the user to select
  document.buttonform.GazArrayBox.value = gazResult + 1 +"/"+ gazArray.length +" : "+ gazArray[gazResult].name;
  }






	function GetCenterGRURL(){
	mapcenterNE = osMap.getCenter();
	mapcenterNE = removeSpaces(NE2NGR(mapcenterNE.getEasting(),mapcenterNE.getNorthing()))
	centerGridRefURL.href = "http://monkeyspoon.com/Tracks/MonkeyspoonOSopenspaceMap.htm?g-" + mapcenterNE;
	document.buttonform.CenterGridRefBox.value = mapcenterNE;
	}

function positionCustomUserMarker(){
osMap.events.register("click",osMap,markerfunc);
}
function markerfunc(evt){customMarkerPosEN = osMap.getMapPointFromViewPortPx(evt.xy);CustomUserMarker()}	//mapcenterNE = new OpenSpace.GridProjection().getLonLatFromMapPoint(pt);
	
function CustomUserMarker(){
osMap.events.unregister("click",osMap,markerfunc);
customusermarker.lonlat = customMarkerPosEN;
markerLayer.redraw();
}

function CustomUserMarkerFormUpdate(){
customMarkerTitle = document.infowindowform.title.value;
customMarkerText = document.infowindowform.textarea.value;
customMarkerImageURL = document.infowindowform.imageURL.value;

osMap.closeInfoWindow();
CustomMarkerURLhref.href = "http://monkeyspoon.com/Tracks/MonkeyspoonOSopenspaceMap.htm?cm=" + customMarkerPosEN.lon + "+" + customMarkerPosEN.lat + "+" + encodeURIComponent(customMarkerTitle) + "+" + encodeURIComponent((customMarkerText.replace(new RegExp( "\\n", "g" ), "<br>")));
	if (customMarkerImageURL != "{Image URL}") {CustomMarkerURLhref.href += "+" + encodeURIComponent(customMarkerImageURL);}
}

function ImportCustomUserMarker(gotolocation, zoom){
array = gotolocation.split("+");
html = '<b>' + decodeURIComponent(array[2]) + '</b><br>' + decodeURIComponent(array[3])
	if (array[4] != null) {
	array[4] = decodeURIComponent(array[4]);
	html += '<br><a href="' + array[4] + '" target="_BLANK" title="Click to view image in new Tab/Window"><img src="' + array[4] + '"></a>';}
importedcustomusermarker = osMap.createMarker(new OpenSpace.MapPoint(array[0],array[1]), new OpenLayers.Icon('http://openspace.ordnancesurvey.co.uk/osmapapi/img_versions/img_1.0.0/OS/images/markers/marker_green.png', new OpenLayers.Size(33,45), new OpenLayers.Pixel(-16,-45)),html,new OpenLayers.Size(350, 300));
importedcustomusermarker.icon.infoWindowAnchor = new OpenLayers.Pixel(16,16);
osMap.setCenter(new OpenSpace.MapPoint(array[0],array[1]),zoom);
osMap.openInfoWindow(importedcustomusermarker.icon,new OpenSpace.MapPoint(array[0],array[1]),html,new OpenLayers.Size(350, 300)) 
}




  
	function getoutofbounds(e,n){	// Checks a position by eastings and northings to see if it is with the map area. 1 = outside area
	outofbounds = 0;
  	if (e < mapboundsLeft) outofbounds = 1;
  	if (n < mapboundsBottom) outofbounds = 1;
  	if (e > mapboundsRight) outofbounds = 1;
  	if (n > mapboundsTop) outofbounds = 1;
	}






function removeSpaces(string) {
 return string.split(' ').join('');
}

function NE2NGR( east,  north)
{
var eX = east / 500000;
var nX = north / 500000;
var tmp = Math.floor(eX) - 5.0 * Math.floor(nX) + 17.0; 
nX = 5 * (nX - Math.floor(nX));
eX = 20 - 5.0 * Math.floor(nX) + Math.floor(5.0 * (eX - Math.floor(eX)));
if (eX > 7.5) eX = eX + 1; // I is not used
if (tmp > 7.5) tmp = tmp + 1; // I is not used

var eing = east - (Math.floor(east / 100000)*100000);
var ning = north - (Math.floor(north / 100000)*100000);
eing = Math.round (eing / 100)
ning = Math.round (ning / 100)
var estr = eing.toFixed(0);
var nstr = ning.toFixed(0);
while(estr.length < 3)
	estr = "0" + estr;
while(nstr.length < 3)
	nstr = "0" + nstr;

var ngr = String.fromCharCode(tmp + 65) + 
          String.fromCharCode(eX + 65) + 
          " " + estr + " " + nstr;
return ngr;
}

function NGR2NE(ngr){
var e;
var n;

ngr = ngr.toUpperCase(ngr);

var bits = ngr.split(' ');
ngr = "";
for(var i=0;i<bits.length;i++)
    ngr+=bits[i];
var c = ngr.charAt(0);
if (c =='S'){ 
    e = 0;
    n = 0;
    }
else if (c == 'T'){
    e = 500000;
    n = 0;
    }
else if (c == 'N'){ 
    n = 500000;
    e = 0;
    }
else if (c == 'O'){
    n = 500000;
    e = 500000;
    }
else if(c == 'H'){
    n = 1000000;
    e = 0;
    }
else 
    return null;
    
c = ngr.charAt(1);
if(c == 'I')
    return null;
    
c = ngr.charCodeAt(1) - 65;
if(c > 8)
    c -= 1;
e += (c % 5) * 100000;
n += (4 - Math.floor(c/5)) * 100000;

c = ngr.substr(2);
if ((c.length%2) == 1) 
    return null;
if (c.length > 10) 
    return null;

try{
    var s = c.substr(0,c.length/2);
    while(s.length < 5)
        s += '0';
    e += parseInt(s,10); 
    if(isNaN(e))
        return null; 
    
    s = c.substr(c.length/2);
    while(s.length < 5)
        s += '0';
    n += parseInt(s,10); 
    if(isNaN(n))
        return null;
     return new OpenSpace.MapPoint(e,n); 
}
catch (ex)
{
    return null;
}
}

function centergetamap(){
mapcenterNE = osMap.getCenter();
getamapurl = "http://getamap.ordnancesurvey.co.uk/getamap/frames.htm?mapAction=gaz&gazName=g&gazString=" + removeSpaces(NE2NGR(mapcenterNE.getEasting(),mapcenterNE.getNorthing())); /* "http://getamap.ordnancesurvey.co.uk/getamap/frames.htm?mapAction=gaz&gazName=g&gazString=" +  */
window.open(getamapurl);
}

function centergoogle(){
googlemapurl = osMap.getCenter();
googlemapurl = String(new OpenSpace.GridProjection().getLonLatFromMapPoint(googlemapurl));
var googlearray = new Array();
googlearray = googlemapurl.split(",");
var googlelon = googlearray[0];
googlelon = googlelon.substring(4);
var googlelat = googlearray[1];
googlelat = googlelat.substring(4);
var googlezoom = 11 + (osMap.getZoom());
googlemapurl = "http://maps.google.co.uk/?ie=UTF8&ll=" + googlelat + "," + googlelon + "&t=h&z=" + googlezoom; /* removeSpaces()"http://getamap.ordnancesurvey.co.uk/getamap/frames.htm?mapAction=gaz&gazName=g&gazString=" +  */
window.open(googlemapurl);
}

