/* (C) 2008-2012 The Hug http://www.the-hug.co.uk */
var user=new Object();var osMap;var vectorLayer;var markerLayer;var mapDiv;var ctrlDiv;var routeDiv;var maplogDiv;var searchResultsDiv;var mousePosSpan;var mousePos=new Object();var gridProjection=new OpenSpace.GridProjection();var widget_container;var elWaypointList,elWaypointCtrl,elTracksCtrl;var waypoint=new Array();var nWaypoints=0;var waypointGhost=new Array();var apiUrlWaypoints;var pointVal;var routeFeature;var profileType;var profileRedo;var tracks=new Array();var nTracks=0;var followerMarker=new Array();var nFollowers=0;if(mapServer=="openspace"){var poweredByOpenSpace=true}else{var poweredByOpenSpace=false}var osGrid={SVe:"0",SVn:"0",SWe:"1",SWn:"0",SXe:"2",SXn:"0",SYe:"3",SYn:"0",SZe:"4",SZn:"0",TVe:"5",TVn:"0",TWe:"6",TWn:"0",SQe:"0",SQn:"1",SRe:"1",SRn:"1",SSe:"2",SSn:"1",STe:"3",STn:"1",SUe:"4",SUn:"1",TQe:"5",TQn:"1",TRe:"6",TRn:"1",SLe:"0",SLn:"2",SMe:"1",SMn:"2",SNe:"2",SNn:"2",SOe:"3",SOn:"2",SPe:"4",SPn:"2",TLe:"5",TLn:"2",TMe:"6",TMn:"2",SFe:"0",SFn:"3",SGe:"1",SGn:"3",SHe:"2",SHn:"3",SJe:"3",SJn:"3",SKe:"4",SKn:"3",TFe:"5",TFn:"3",TGe:"6",TGn:"3",SAe:"0",SAn:"4",SBe:"1",SBn:"4",SCe:"2",SCn:"4",SDe:"3",SDn:"4",SEe:"4",SEn:"4",TAe:"5",TAn:"4",TBe:"6",TBn:"4",NVe:"0",NVn:"5",NWe:"1",NWn:"5",NXe:"2",NXn:"5",NYe:"3",NYn:"5",NZe:"4",NZn:"5",OVe:"5",OVn:"5",OWe:"6",OWn:"5",NQe:"0",NQn:"6",NRe:"1",NRn:"6",NSe:"2",NSn:"6",NTe:"3",NTn:"6",NUe:"4",NUn:"6",OQe:"5",OQn:"6",ORe:"6",ORn:"6",NLe:"0",NLn:"7",NMe:"1",NMn:"7",NNe:"2",NNn:"7",NOe:"3",NOn:"7",NPe:"4",NPn:"7",OLe:"5",OLn:"7",OMe:"6",OMn:"7",NFe:"0",NFn:"8",NGe:"1",NGn:"8",NHe:"2",NHn:"8",NJe:"3",NJn:"8",NKe:"4",NKn:"8",OFe:"5",OFn:"8",OGe:"6",OGn:"8",NAe:"0",NAn:"9",NBe:"1",NBn:"9",NCe:"2",NCn:"9",NDe:"3",NDn:"9",NEe:"4",NEn:"9",OAe:"5",OAn:"9",OBe:"6",OBn:"9",HVe:"0",HVn:"10",HWe:"1",HWn:"10",HXe:"2",HXn:"10",HYe:"3",HYn:"10",HZe:"4",HZn:"10",JVe:"5",JVn:"10",JWe:"6",JWn:"10",HQe:"0",HQn:"11",HRe:"1",HRn:"11",HSe:"2",HSn:"11",HTe:"3",HTn:"11",HUe:"4",HUn:"11",JQe:"5",JQn:"11",JRe:"6",JRn:"11",HLe:"0",HLn:"12",HMe:"1",HMn:"12",HNe:"2",HNn:"12",HOe:"3",HOn:"12",HPe:"4",HPn:"12",JLe:"5",JLn:"12",JMe:"6",JMn:"12"};var osGridLetter=[["SV","SQ","SL","SF","SA","NV","NQ","NL","NF","NA","HV","HQ","HL"],["SW","SR","SM","SG","SB","NW","NR","NM","NG","NB","HW","HR","HM"],["SX","SS","SN","SH","SC","NX","NS","NN","NH","NC","HX","HS","HN"],["SY","ST","SO","SJ","SD","NY","NT","NO","NJ","ND","HY","HT","HO"],["SZ","SU","SP","SK","SE","NZ","NU","NP","NK","NE","HZ","HU","HP"],["TV","TQ","TL","TF","TA","OV","OQ","OL","OF","OA","JV","JQ","JL"],["TW","TR","TM","TG","TB","OW","OR","OM","OG","OB","JW","JR","JM"]];var osGazetteerFeatureCode={A:"(antiquity)",F:"(wood)",FM:"(farm)",H:"(hill)",R:"(roman antiquity)",C:"(city)",T:"(town)",V:"(village)",O:"(settlement)",W:"(water feature)",X:""};var icons=new Object;icons.GoRed=new OpenSpace.Icon();icons.GoRed.url="red-waypoint.png";icons.GoRed.size=new OpenLayers.Size(32,32);icons.GoRed.offset=new OpenLayers.Pixel(-15,-31);icons.GoYellow=icons.GoRed.clone();icons.GoYellow.url="yellow-waypoint.png";icons.GoPurple=icons.GoRed.clone();icons.GoPurple.url="purple-waypoint.png";icons.blueC=new OpenSpace.Icon();icons.blueC.url="bluecircle-waypoint.png";icons.blueC.size=new OpenLayers.Size(10,10);icons.blueC.offset=new OpenLayers.Pixel(-5,-5);icons.brC=icons.blueC.clone();icons.brC.url="redbluecircle-waypoint.png";icons.ghost=new OpenSpace.Icon();icons.ghost.url="ghost-waypoint.png";icons.ghost.size=new OpenLayers.Size(11,11);icons.ghost.offset=new OpenLayers.Pixel(-5,-5);var waypointIcon;var thisWaypointIcon;var followerIcon;var walkerIcon;setIcons();var followerInterval=30;var followerShow=false;var walkerShow=false;var walkerMarker;var walkerTrack=1;var walkerPoint=1;var walkerInterval;var walkerPause=false;var walkerSpeed=500;var dialogParams={width:480,height:320,position:[240,30]};var gChartMax=1000;window.onresize=resizeMap;function resizeMap(){if(mapDiv==null){return false}setMapHeight(mapDiv);if($("#profile").dialog("isOpen")){$("#profile").dialog("close");var a=new Date;profileRedo=a.getTime()+950;setTimeout("redoProfile()",1000)}}function redoProfile(){var a=new Date;if(a.getTime()>profileRedo){switch(profileType){case"R":viewRouteProfile();break;case"T":viewTrackProfile();break}}}function setIcons(){switch(customer){case"hug":case"openmaps":if(user.id){waypointIcon=icons[user.waypoint].clone();thisWaypointIcon=icons[user.thisWaypoint].clone();followerIcon=icons[user.follower].clone();walkerIcon=icons[user.walker].clone();dragCursor=user.dragCursor;return true}default:waypointIcon=icons[iconChoice.waypoint].clone();thisWaypointIcon=icons[iconChoice.thisWaypoint].clone();followerIcon=icons[iconChoice.follower].clone();walkerIcon=icons[iconChoice.walker].clone()}}function newCentre(){$("#search_results").dialog("close");var g=trim(document.getElementById("location").value.toUpperCase());if(g=="HERE"){if(geo_position_js.init()){geo_position_js.getCurrentPosition(geoSuccessCallback,geoErrorCallback,{enableHighAccuracy:true,options:5000})}else{alert('"here" geopositioning is not available with this browser')}return false}$("#location").css({color:"gray"});if(g.match(/^[A-Z][A-Z][0-9][0-9][0-9][0-9]$/)){var f=g.slice(0,2);var k=g.slice(2,4)+"5";var h=g.slice(4,6)+"5";if(osGrid[f+"e"]){centreOnMatch(osGrid[f+"e"]+k+"00",osGrid[f+"n"]+h+"00","S");return true}}var d=new RegExp;for(var e=3;e<=5;e++){d=new RegExp("^[A-Z]{2}[0-9]{"+(e*2)+"}$");if(g.match(d)){var f=g.slice(0,2);var k=g.slice(2,(2+e))+"00";var h=g.slice((2+e),(2+e+e))+"00";k=k.slice(0,5);h=h.slice(0,5);if(osGrid[f+"e"]){centreOnMatch(osGrid[f+"e"]+k,osGrid[f+"n"]+h,"C");return true}}}if(g.match(/^[0-9][0-9][0-9][0-9][0-9][0-9]$/)){var k=g.slice(0,3);var h=g.slice(3,6);var b=osMap.getCenter();var c=Math.floor(b.getEasting()/100000);var j=Math.floor(b.getNorthing()/100000);centreOnMatch(c.toString()+k+"00",j.toString()+h+"00","C");return true}var a="http://osapi.the-hug.net/api.php?t=g&q="+escape(g)+"&callback=?";$.getJSON(a,{},function(i){showMatchList(i)});return false}function showMatchList(d){switch(d.matches.length){case 0:showMatchListPopup("<a onClick=\"$('#search_results').dialog('close')\">No matches found</a>");return true;case 1:if(d.matches[0].x=="Y"){centreOnMatch(d.matches[0].e,d.matches[0].n,"C")}else{centreOnMatch(d.matches[0].e,d.matches[0].n,"S")}return true;default:var e="";var c;var b;var f=false;for(var a=0;a<d.matches.length;a++){c=d.matches[a].m+" "+osGazetteerFeatureCode[d.matches[a].f];e+='<a onClick="showMatchListGo('+d.matches[a].e+","+d.matches[a].n+');">'+c+"</a><br>";if(c==b){f=true}b=c}if(f){e="(Where there are identically named entries in the same county<br>&nbsp;in the list below the most north westerly ones are listed first)<br><br>"+e}showMatchListPopup(e)}}function showMatchListGo(b,a){$("#search_results").dialog("close");centreOnMatch(b,a,"S")}function centreOnMatch(c,b,a){osMap.setCenter(new OpenSpace.MapPoint(c,b),loadZoom);switch(a){case"S":$("#centre").attr("src","centre_square.png");break;case"C":$("#centre").attr("src","centre_cross.png");break}$("#location").css({color:"black"});$("#centre").fadeIn(1);setTimeout("fadeOutCentre()",2000)}function fadeOutCentre(){$("#centre").fadeOut(3000)}function showMatchListPopup(a){searchResultsDiv.innerHTML=a;$("#search_results").dialog(dialogParams)}function geoSuccessCallback(b){var a=pointFromLonLat(b.coords.longitude,b.coords.latitude);centreOnMatch(a.getEasting(),a.getNorthing(),"C")}function geoErrorCallback(a){alert('"here" geopositioning failed, try later ('+a.message+")")}function loadMap(){getUserConfig();$("#centre").fadeOut(1);if(copyright&&!poweredByOpenSpace){OpenSpace.Control.Copyright.getDefaultCopyright=function(){return new OpenSpace.Control.Copyright(copyright,new OpenSpace.MapBounds(0,0,800000,1300000))}}elWaypointList=document.getElementById("waypoint_list");elWaypointCtrl=document.getElementById("waypoint_ctrl");elTracksCtrl=document.getElementById("tracks_ctrl");var n,b;mapDiv=document.getElementById("map");ctrlDiv=document.getElementById("ctrl");routeDiv=document.getElementById("gpx");maplogDiv=document.getElementById("maplog");searchResultsDiv=document.getElementById("search_results");mousePosSpan=document.getElementById("mouse_pos");setMapHeight(mapDiv);var l=[new OpenLayers.Control.Navigation({handleRightClicks:true}),new OpenLayers.Control.KeyboardDefaults(),new OpenSpace.Control.CopyrightCollection(),new OpenLayers.Control.ArgParser()];var k=[2500,1000,500,200,100,50,25,10,5,2.5];switch(mapServer){case"openspace":k=[2500,1000,500,200,100,50,25,10,5,4,2.5,2,1];break;case"map":k=[2500,1000,500,200,100,50,25,10,5];break;case"walk":if(maxZoom==9){k=[2500,1000,500,200,100,50,25,10,5]}break}var e={controls:l,resolutions:k};osMap=new OpenSpace.Map("map",e);osMap.div.oncontextmenu=function o(i){if(OpenLayers.Event.isRightClick(i)){rightMouseMenu(i)}};var s=new OpenSpace.Control.ControlPosition(OpenSpace.Control.ControlAnchor.ANCHOR_TOP_RIGHT);osMap.addControl(new OpenSpace.Control.LargeMapControl(),s);if(poweredByOpenSpace){var s=new OpenSpace.Control.ControlPosition(OpenSpace.Control.ControlAnchor.ANCHOR_BOTTOM_LEFT);osMap.addControl(new OpenSpace.Control.PoweredBy(),s)}vectorLayer=osMap.getVectorLayer();markerLayer=osMap.getMarkerLayer();var e={onStart:waypointDragStart,onDrag:waypointDrag,onComplete:waypointDragEnd};if(embedded){$("#map").css({cursor:"move"})}else{dragControl=new OpenSpace.Control.DragMarkers(markerLayer,e);osMap.addControl(dragControl);dragControl.activate()}var a;var r;var p;if(cookie("zoom")){a=parseInt(cookie("zoom"));r=cookie("centreeasting");p=cookie("centrenorthing")}else{a=2;if(customer=="walk"){r=250000;p=850000}else{r=400000;p=300000}}var g=document.getElementById("route_data");if(g){var f=g.innerHTML.split("|");document.getElementById("route_name").value=f[0];nWaypoints=(f.length-1)/3;r=0;p=0;for(var q=1;q<=nWaypoints;q++){waypoint[q]=new Object();waypoint[q].point=pointFromLonLat(f[q*3],f[q*3-1]);waypoint[q].name=trim(f[q*3-2]);if(waypoint[q].name.slice(-1)==":"){waypoint[q].name=""}r+=waypoint[q].point.getEasting();p+=waypoint[q].point.getNorthing();if(q>1){waypointGhost[q]=new Object()}}a=loadZoom;r/=nWaypoints;p/=nWaypoints}var c=document.getElementById("track_data");if(c){if(embedded){r=0;p=0;var m=0}var f=c.innerHTML.split("|");var d=(f.length-1)/4;var h=0;for(var q=1;q<=d;q++){if(f[q*4-3]=="x"){tracks[nTracks].nWaypoints=h;h=0}else{if(h==0){nTracks++;tracks[nTracks]=new Array()}h++;tracks[nTracks][h]=new Object();tracks[nTracks][h].point=pointFromLonLat(f[q*4],f[q*4-1]);tracks[nTracks][h].time=f[q*4-3];tracks[nTracks][h].ele=f[q*4-2];if(embedded){r+=tracks[nTracks][h].point.getEasting();p+=tracks[nTracks][h].point.getNorthing();m++}}}if(embedded){r/=m;p/=m;a=loadZoom}else{if(nTracks>0){r=tracks[1][1].point.getEasting();p=tracks[1][1].point.getNorthing();a=loadZoom}}}mapDiv.style.backgroundColor=waterColor[a];osMap.setCenter(new OpenSpace.MapPoint(r,p),a);zoomEnd();if(nWaypoints>0){updateWaypoints()}displayTracks();setRouteDivHeight();osMap.events.register("moveend",mapDiv,logCentre);osMap.events.register("rightclick",mapDiv,rightMouseMenu);if(!embedded){osMap.events.register("click",mapDiv,addWaypoint);osMap.events.register("movestart",mapDiv,function(){ctrlDiv.style.opacity="0.9"});osMap.events.register("moveend",mapDiv,ctrlDivOpaque)}osMap.events.register("mousemove",mapDiv,showMousePos);osMap.events.register("mouseout",mapDiv,function(){mousePosSpan.innerHTML="&nbsp;"});osMap.events.register("zoomend",mapDiv,zoomEnd);if(document.getElementById("relnotes").innerHTML){$("#relnotes").dialog(dialogParams);$("#relnotes").scrollTop(0)}var j=document.getElementById("location").value;if(j!=""&&j!=null){newCentre()}if(!embedded){switch(mapServer){case"openspace":if(nTracks==0){logCentre();r="000000"+parseInt(cookie("centreeasting"))+"x";p="000000"+parseInt(cookie("centrenorthing"))+"x";r=r.slice(-7,-1);p=p.slice(-7,-1);showPopup("Using this Site","<p>This site relies on the Ordnance Survey OpenSpace server and they limit us to  "+maxTiles+" tiles per day of which you have collectively used "+tilesUsed+'.</p><p>You can help us to keep the usage down by not maximizing your web browser but instead re-sizing it to the size you actually need. You might also like to consider switching to our <a href="http://openmaps.the-hug.net?p='+r+p+parseInt(cookie("zoom"))+'">OpenMaps</a> server which offers a very similar service but using tiles with no restrictions on our use per day.</p><p>Alternatively the Ordnance Survey suggest you might want to use the <a href="http://www.ordnancesurvey.co.uk/oswebsite/opendata/viewer/">OS OpenData Viewer</a> or, for Windows users, you might like to try <a href="http://www.ordnancesurvey.co.uk/oswebsite/getamap/">OS getamap</a> (requires Silverlight) which also offers some of the same features this site does for creating routes.</p>')}break;case"map":if(!bigvForced){showPopup("A message from The Hug","<p>As Ordnance Survey complain to us whenever users exceed the "+maxTiles+" tile a day limit they've imposed on us we've now brought a new map server online which we switch to when that limit is exceeded.</p><p>You have collectively used "+tilesUsed+" tiles today so we are now using that server and it will remain online until midnight.</p><p>This server serves the same tiles as the OS OpenSpace server for large scale maps but for 1:50,000 it uses a combination of data released by Ordnance Survey under their OS OpenData programme for the mapping and contours along with path data from the Open Streetmap project to produce tiles which we can legally serve to you without quota restrictions.</p><p>If you find that unsatisfactory for your needs please try again tomorrow.</p>")}break}}}function showPopup(c,b){var a=document.getElementById("popupMessage");a.title=c;a.innerHTML='<a href="#"></a>'+b;$("#popupMessage").dialog(dialogParams);$("#popupMessage").scrollTop(0);return false}function ctrlDivOpaque(){var a=parseFloat(ctrlDiv.style.opacity);if(a<1){a=a+0.01;ctrlDiv.style.opacity=a.toString();setTimeout("ctrlDivOpaque()",100)}}function waypointDragStart(b){mapDiv.style.cursor=dragCursor;for(var a=1;a<=nWaypoints;a++){if(b.lonlat.lon==waypoint[a].point.getEasting()&&b.lonlat.lat==waypoint[a].point.getNorthing()){pointVal=a}if(a>1&&b.lonlat.lon==waypointGhost[a].point.getEasting()&&b.lonlat.lat==waypointGhost[a].point.getNorthing()){pointVal=-1*a}}}function waypointDrag(a){if(a==null){return}}function waypointDragEnd(b){if(pointVal<0){if(checkWaypointLimit()){updateWaypoints();return false}pointVal=-1*pointVal;nWaypoints++;for(var a=nWaypoints;a>pointVal;a--){waypoint[a]=waypoint[a-1]}waypointGhost[nWaypoints]=new Object();waypoint[pointVal]=new Object();waypoint[pointVal].point=new OpenSpace.MapPoint(b.lonlat.lon,b.lonlat.lat);waypoint[pointVal].name=""}else{waypoint[pointVal].point=new OpenSpace.MapPoint(b.lonlat.lon,b.lonlat.lat)}updateWaypoints();mapDiv.style.cursor="crosshair"}function setMapHeight(a){a.height=$(window).height();a.width=$(window).width();a.style.height=a.height+"px";var b=(a.height-$("#centre").height())/2;var c=(a.width-$("#centre").width())/2;$("#centre").css({top:b.toString()+"px",left:c.toString()+"px"});setRouteDivHeight();$("#legend").css({top:(a.height-15).toString()+"px"});if(mapServer=="openspace"){$("#legend").css({left:(a.width-40).toString()+"px"})}else{$("#legend").css({left:"5px"})}}function setRouteDivHeight(){var b;var a=divHeight("nav");if(customer=="walk"||beta){a+=divHeight("login")+5}if(nTracks>0){a+=divHeight("tracks")+5}routeDiv.style.maxHeight=(divHeight("map")-a-24)+"px"}function divHeight(a){return document.getElementById(a).offsetHeight}function zoomEnd(){logCentre();var a="";if(osMap.getZoom()==9&&customer=="walk"){walkAnalytics();a="25"}if(mapServer=="openspace"){switch(osMap.getZoom()){case 8:case 7:a="50";break}}if(a){$("#legend").html('<a href="http://www.ordnancesurvey.co.uk/oswebsite/docs/legends/'+a+'k-raster-legend.pdf" target="legend">legend</a>')}else{$("#legend").html("")}}function logCentre(){var b=osMap.getCenter();var a=osMap.getZoom();setCookie("centreeasting",b.getEasting());setCookie("centrenorthing",b.getNorthing());setCookie("zoom",a);mapDiv.style.backgroundColor=waterColor[a]}function walkAnalytics(){_gaq.push(["_setCustomVar",2,"Zoom","25k",2]);_gaq.push(["_trackEvent","zoomed","true"])}function displayTracks(){var c=new Object;if(nTracks>0){var d;for(var b=1;b<=nTracks;b++){d=new Array();for(var a=1;a<=tracks[b].nWaypoints;a++){thisPoint=new OpenLayers.Geometry.Point(tracks[b][a].point.getEasting(),tracks[b][a].point.getNorthing());d.push(thisPoint)}var e=new OpenLayers.Geometry.LineString(d);c=new OpenLayers.Feature.Vector(e,null,trackStyle);vectorLayer.addFeatures([c])}if(followerShow){displayFollowers()}document.getElementById("tracks").style.display="block";showTracksOptions()}}function showTracksOptions(){var a='Markers: <a title="Click to toggle track followers" onClick="toggleFollowers();">';if(followerShow){a+="Hide"}else{a+="Show"}a+="</a>";if(betaProfile){document.getElementById("tracks_profile").innerHTML='<a title="Click to see a graphical profile of your track heights" onClick="viewTrackProfile();">profile</a>'}if(followerShow){a+='<br> &nbsp; <a title="Click to decrease spacing between markers" onClick="changeFollowerInterval(\'i\',-5);">More</a> <a title="Click to increase spacing between markers" onClick="changeFollowerInterval(\'i\',+5);">Less</a> <a title="Click to only display markers at track ends" onClick="changeFollowerInterval(\'e\',0);">Ends</a> <a title="Click to reset spacing between markers" onClick="changeFollowerInterval(\'r\',0);">Reset</a>'}a+="</table>";a+='<p>Walker: <a title="Click to toggle display of walker" onClick="toggleWalker();">';if(walkerShow){a+="Hide</a> ";if(walkerPause){a+='<a title="Click to start" onClick="toggleWalkerPause();">Start</a>'}else{a+='<a title="Click to pause" onClick="toggleWalkerPause();">Pause</a> <a title="Click to go faster" onClick="changeWalkerSpeed(-100);">Faster</a> <a title="Click to go slower" onClick="changeWalkerSpeed(100);">Slower</a>'}a+='<table id="walker_data"><tr><td>Date:</td><td id="walker_date"></td></tr><tr><td>Time:</td><td id="walker_time"></td></tr><tr><td>Height:</td><td id="walker_ele"></td></tr></table>'}else{a+="Show</a>"}elTracksCtrl.innerHTML=a}function toggleFollowers(){if(followerShow){clearFollowers();followerShow=false}else{if(walkerShow){toggleWalker()}displayFollowers();followerShow=true}showTracksOptions()}function changeFollowerInterval(b,a){clearFollowers();switch(b){case"r":followerInterval=30;break;case"e":followerInterval=1000000000;break;case"i":if(a<0&&followerInterval>=1000000000){followerInterval=30}else{followerInterval+=a}break}if(followerInterval==0){followerInterval=1}displayFollowers()}function clearFollowers(){for(var a=1;a<=nFollowers;a++){markerLayer.removeMarker(followerMarker[a]);followerMarker[a].destroy()}nFollowers=0}function displayFollowers(){nFollowers=0;followerMarker=new Array();for(var b=1;b<=nTracks;b++){displayFollower(tracks[b][1]);if(tracks[b].nWaypoints>followerInterval){for(var a=followerInterval;a<tracks[b].nWaypoints;a+=followerInterval){displayFollower(tracks[b][a])}}displayFollower(tracks[b][tracks[b].nWaypoints])}}function displayFollower(a){var c=new OpenLayers.Size(200,120);var b="Date: "+a.time.substring(0,10)+"<br />Time: "+a.time.substring(11).replace("Z"," GMT")+"<br />Elevation: "+a.ele+"m";nFollowers++;followerMarker[nFollowers]=osMap.createMarker(a.point,followerIcon.clone(),b,c)}function toggleWalker(){if(walkerShow){clearWalker();clearInterval(walkerInterval);walkerShow=false;showTracksOptions()}else{if(followerShow){toggleFollowers()}walkerShow=true;showTracksOptions();displayWalker();walkerInterval=setInterval(moveWalker,walkerSpeed)}}function clearWalker(){markerLayer.removeMarker(walkerMarker);walkerMarker.destroy()}function toggleWalkerPause(){if(walkerPause){walkerPause=false;walkerInterval=setInterval(moveWalker,walkerSpeed)}else{walkerPause=true;clearInterval(walkerInterval)}showTracksOptions();displayWalkerPosition()}function changeWalkerSpeed(a){walkerSpeed+=a;if(walkerSpeed<100){walkerSpeed=100}clearInterval(walkerInterval);walkerInterval=setInterval(moveWalker,walkerSpeed)}function moveWalker(){clearWalker();walkerPoint++;if(walkerPoint>tracks[walkerTrack].nWaypoints){walkerPoint=1;walkerTrack++;if(walkerTrack>nTracks){walkerTrack=1}}displayWalker()}function displayWalker(){var a=new Object();a.draggable=false;a.icon=walkerIcon;aWaypoint=tracks[walkerTrack][walkerPoint];walkerMarker=osMap.createMarker(aWaypoint.point,walkerIcon.clone());displayWalkerPosition()}function displayWalkerPosition(){aWaypoint=tracks[walkerTrack][walkerPoint];document.getElementById("walker_date").innerHTML=aWaypoint.time.substring(0,10);document.getElementById("walker_time").innerHTML=aWaypoint.time.substring(11).replace("Z"," GMT");document.getElementById("walker_ele").innerHTML=aWaypoint.ele+"m"}function addWaypoint(c){if(c.xy.y>(mapDiv.height-15)){return false}if(checkWaypointLimit()){return false}var a=osMap.getLonLatFromViewPortPx(c.xy);var b=gridProjection.getLonLatFromMapPoint(a);nWaypoints++;waypoint[nWaypoints]=new Object();waypoint[nWaypoints].point=pointFromLonLat(b.lon,b.lat);waypoint[nWaypoints].name="";if(nWaypoints>1){waypointGhost[nWaypoints]=new Object()}updateWaypoints()}function checkWaypointLimit(){if(nWaypoints>=maxWaypoints){alert("You can only add "+maxWaypoints+" waypoints to your route. If this is a problem then split the route into two or more parts.");return true}}function updateWaypoints(){removeRoute();if(nWaypoints==0){document.getElementById("gpx").style.display="none";elWaypointList.innerHTML="";elWaypointCtrl.innerHTML="";return true}document.getElementById("gpx").style.display="block";apiUrlWaypoints="";var c="";var v;var p;var o=new Array();var e=0;var s="<table>";var a;var h;var f;var j;var y;var t;for(var r=1;r<=nWaypoints;r++){if(waypoint[r].name==""){t="wp_osgb";y=osgb(waypoint[r].point)}else{t="wp_name";y=waypoint[r].name}s+='<tr onMouseOver="highlightWaypointOn('+r+');" onMouseOut="highlightWaypointOff('+r+');"><td align="right" width="20px">'+r+':</td><td><input type="text" id="waypoint_'+r+'" class="'+t+'" size="8" maxlength="8" value="'+y+'" onFocus="editWaypointName('+r+');" onKeyUp="updateWaypointName('+r+');"></td><td>&nbsp;<a title="Delete waypoint '+r+'" tabindex="-1" onClick="deleteWaypoint('+r+');">Delete</a></td></tr>';v=waypoint[r].point.getEasting();p=waypoint[r].point.getNorthing();a=new OpenLayers.Geometry.Point(v,p);o.push(a);apiUrlWaypoints+=c+v.toFixed(0)+","+p.toFixed(0);c=":";if(r>1){e+=parseFloat(a.distanceTo(h));waypointGhost[r].point=new OpenSpace.MapPoint(((v+f)/2),((p+j)/2));waypointGhost[r].marker=osMap.createMarker(waypointGhost[r].point,icons.ghost.clone())}waypoint[r].marker=osMap.createMarker(waypoint[r].point,waypointIcon.clone());h=a;f=v;j=p}s+="</table>";var k=e/1609.344;var n=2;if(k>100){n=0}else{if(k>10){n=1}}var x=e/1000;var b=2;if(x>100){b=0}else{if(x>10){b=1}}var w="Length: "+k.toFixed(n)+" miles &nbsp;"+x.toFixed(b)+" km";if(betaProfile){w+='<br><span id="route_summary"><br>&nbsp;</span>';if(nWaypoints>1){apiUrl="http://osapi.the-hug.net/api.php?t=s&q="+apiUrlWaypoints+"&callback=?";$.getJSON(apiUrl,{},function(i){showRouteSummary(i)})}}s=w+s;elWaypointList.innerHTML=s;if(customer=="walk"&&reportMode){var q="Add to walk report";var d="gpxsave.php";var g='<input type="hidden" name="whUsid" value="'+whUsid+'">';var m='<div style="float: left;"><form id="gpx_form" method="post" action="'+d+'">'+g+'<input type="hidden" name="gpx_name" id="gpx_name" value=""><input type="hidden" name="gpx_xml" id="gpx_xml" value=""><a title="'+q+'" onClick="createGPX();">'+q+"</a></form></div>"}else{var m='<div style="float: left;"><form id="gpx_form" method="post" action="gpxout.php"><input type="hidden" name="gpx_name" id="gpx_name" value="">Download as <input type="hidden" name="gpx_xml" id="gpx_xml" value=""><a title="download as GPX file for use on a GPS" onClick="createGPX();">GPX</a></form>&nbsp;or <form id="kml_form" method="post" action="kmlout.php"><input type="hidden" name="kml_name" id="kml_name" value=""><input type="hidden" name="kml_xml" id="kml_xml" value=""><a title="download KML file for viewing in Google Earth" onClick="createKML();">KML</a></form></div>'}m+='<div style="float: right"><a title="Click to clear route" onClick="clearRoute();">Clear</a></div>';elWaypointCtrl.innerHTML=m;if(nWaypoints>1){var u={strokeColor:"blue",strokeOpacity:1,strokeWidth:2};var l=new OpenLayers.Geometry.LineString(o);routeFeature=new OpenLayers.Feature.Vector(l,null,u);vectorLayer=osMap.getVectorLayer();vectorLayer.addFeatures([routeFeature])}markerLayer.setDragMode(true)}function showRouteSummary(a){document.getElementById("route_profile").innerHTML='<a title="Click to see a graphical profile of your route heights" onClick="viewRouteProfile();">profile</a>';document.getElementById("route_summary").innerHTML="Ascent: +"+a.ascTotal+"m &nbsp;-"+a.descTotal+"m<br>Naismith: "+a.naismith}function clearRoute(){if(confirm("Click OK to delete this route.")){removeRoute();document.getElementById("gpx").style.display="none";nWaypoints=0;waypoint=new Array();elWaypointList.innerHTML="";elWaypointCtrl.innerHTML="";displayTracks()}return false}function removeRoute(){document.getElementById("route_profile").innerHTML="";if(routeFeature){vectorLayer.removeFeatures([routeFeature])}for(var a=1;a<=nWaypoints;a++){if(waypoint[a].marker){markerLayer.removeMarker(waypoint[a].marker);waypoint[a].marker.destroy()}}for(var a=2;a<=nWaypoints;a++){if(waypointGhost[a].marker){markerLayer.removeMarker(waypointGhost[a].marker);waypointGhost[a].marker.destroy()}}}function highlightWaypointOn(a){changeWaypointUrl(a,thisWaypointIcon)}function highlightWaypointOff(a){changeWaypointUrl(a,waypointIcon)}function changeWaypointUrl(b,a){markerLayer.removeMarker(waypoint[b].marker);waypoint[b].marker=osMap.createMarker(waypoint[b].point,a.clone())}function editWaypointName(a){var b=document.getElementById("waypoint_"+a);if(waypoint[a].name==""){b.value="";b.className="wp_name"}}function updateWaypointName(a){var b=document.getElementById("waypoint_"+a);waypoint[a].name=trim(b.value);if(waypoint[a].name==""){b.value=osgb(waypoint[a].point);b.className="wp_osgb"}}function deleteWaypoint(a){markerLayer.removeMarker(waypoint[a].marker);waypoint[a].marker.destroy();waypoint.splice(a,1);if(a>1){markerLayer.removeMarker(waypointGhost[a].marker);waypointGhost[a].marker.destroy();waypointGhost.splice(a,1)}nWaypoints--;updateWaypoints()}function disLatLon(a){return a.latToCanonical()+", "+a.lonToCanonical()}function createGPX(){var c;document.getElementById("gpx_name").value=document.getElementById("route_name").value;var a='<?xml version="1.0"?>\n<gpx version="1.1"\n  creator="The Hug - http://maps.the-hug.net/"\n  xmlns="http://www.topografix.com/GPX/1/1"\n  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\n  xsi:schemaLocation="http://www.topografix.com/GPX/1/1\n  http://www.topografix.com/GPX/1/1/gpx.xsd">\n  <rte>\n    <name>'+document.getElementById("route_name").value+"</name>\n";for(var b=1;b<=nWaypoints;b++){c=gridProjection.getLonLatFromMapPoint(waypoint[b].point);a+='    <rtept lat="'+c.lat+'" lon="'+c.lon+'">\n      <name>'+b+":"+waypoint[b].name+"</name>\n    </rtept>\n"}a+="  </rte>\n</gpx>\n";document.getElementById("gpx_xml").value=a;document.forms[1].submit()}function createKML(){var c;document.getElementById("kml_name").value=document.getElementById("route_name").value;var a='<?xml version="1.0"?>\n  <kml creator="The Hug - http://maps.the-hug.net/"\n xmlns="http://earth.google.com/kml/2.0">\n  <Document>\n  <name>'+document.getElementById("route_name").value+'</name>\n  <Style id="line"><LineStyle><color>7fff0000</color><width>3</width></LineStyle></Style>\n  <Placemark>\n  <visibility>1</visibility>\n  <open>0</open>\n  <styleUrl>#line</styleUrl>\n  <LineString>\n   <extrude>0</extrude>\n   <tessellate>1</tessellate>\n   <altitudeMode>clampedToGround</altitudeMode> \n   <coordinates>\n';for(var b=1;b<=nWaypoints;b++){c=gridProjection.getLonLatFromMapPoint(waypoint[b].point);a+="    "+c.lon+","+c.lat+"\n"}a+="  </coordinates>\n</LineString></Placemark></Document></kml>\n";document.getElementById("kml_xml").value=a;document.forms[2].submit()}function checkNoRoute(){if(nWaypoints>0){return confirm("This will forget your route. Click OK to confirm that you want to so this.")}if(nTracks>0){return confirm("This will forget the tracks you've loaded. Click OK to confirm that you want to so this.")}return true}function rightMouseMenu(a){popup=new OpenLayers.Popup("rightclick",mousePos.lonlat,new OpenLayers.Size(100,45),"You clicked on:<br>"+mousePos.textOS+"<br>"+mousePos.textLonlat,true);osMap.addPopup(popup)}function helpWindow(){if(mapServer=="openspace"){var a=document.getElementById("tileusage");a.innerHTML="You and the other users of this site have currently collectively used "+tilesUsed+" of our "+maxTiles+" nominal daily tile allowance with Ordnance Survey.";a.style.borderTop="1px solid silver";a.style.paddingTop="0.7em"}$("#help").dialog(dialogParams);$("#help").scrollTop(0);return false}function termsWindow(){$("#terms").dialog(dialogParams);$("#terms").scrollTop(0);return false}function osgb(a){var d=a.getEasting()/100;var c=a.getNorthing()/100;var b=osGridLetter[parseInt(d/1000)][parseInt(c/1000)];d=parseInt(1000+(d%1000)+0.5);c=parseInt(1000+(c%1000)+0.5);d=d.toString();c=c.toString();d=d.slice(1,4);c=c.slice(1,4);return b+d+c}function pointFromLonLat(c,b){var a=new OpenLayers.LonLat(c,b);return gridProjection.getMapPointFromLonLat(a)}function maplog(a){maplogDiv.style.display="block";if(maplogDiv.innerHTML!=""){maplogDiv.innerHTML+="<br>"}a=a.replace(/&/g,"&amp;");a=a.replace(/</g,"&lt;");a=a.replace(/>/g,"&gt;");maplogDiv.innerHTML+=a}function maplogClear(){maplogDiv.style.display="none";maplogDiv.innerHTML=""}function viewRouteProfile(){var a="http://osapi.the-hug.net/api.php?t=p&q="+apiUrlWaypoints+"&w="+(mapDiv.width-270)+"&callback=?";$.getJSON(a,{},function(b){showProfile("R",b)});return true}function viewTrackProfile(){var a="http://osapi.the-hug.net/api.php?t=P&q="+rawTrack+"&w="+(mapDiv.width-270)+"&callback=?";$.getJSON(a,{},function(b){showProfile("T",b)});return true}function showProfile(b,c){profileType=b;var a=new Object();if($("#profile").dialog("isOpen")!=true){a.height=190;a.width=mapDiv.width-245;if(a.width>(gChartMax+25)){a.width=gChartMax+25}a.position=[($(window).width()-a.width-30),(mapDiv.height-210)]}$("#profile").dialog(a);document.getElementById("profile").innerHTML='<img src="'+c.url+'">'}function showMousePos(b){mousePos.lonlat=gridProjection.getLonLatFromMapPoint(osMap.getLonLatFromViewPortPx(b.xy));var a=pointFromLonLat(mousePos.lonlat.lon,mousePos.lonlat.lat);mousePos.textOS=osgb(a);mousePos.textLonlat=mousePos.lonlat.lat.disFixed(3)+"N, ";if(mousePos.lonlat.lon>=0){mousePos.textLonlat+=mousePos.lonlat.lon.disFixed(3)+"E"}else{mousePos.textLonlat+=(-1*mousePos.lonlat.lon).disFixed(3)+"W"}mousePosSpan.innerHTML="at "+mousePos.textOS+" : "+mousePos.textLonlat}function getUserConfig(){user=new Object();user.id=0;setCookie("userkey","A1");if(cookie("userkey")){var a="http://maps.the-hug.net/api.php?a=R&m=j&k="+cookie("userkey")+"&callback=?";$.getJSON(a,{},function(b){setUserConfig(user)})}return false}function setUserConfig(a){if(a.id){$("#user_id").innerHTML="You are "+a.name}else{$("#user_id").innerHTML='<a href="#">Login/register for more options</a>'}}function cookie(a){var c=document.cookie.split(/;\s?/);var d=new Array();for(var b=0;b<c.length;b++){d=c[b].split("=");if(a==d[0]){return d[1]}}return false}Number.prototype.disFixed=function(c){var a=this.toFixed(c);var b=a.split(".");return b[0]+"."+(b[1]+"0000000000").slice(0,c)};function setCookie(a,b){document.cookie=a+"="+b+";max-age="+(60*60*24*365)}function trim(a){return a.replace(/^\s+|\s+$/g,"")};
