 var ajk=0;
 var i;
 var osMap;
 var ngr;
 var content;
 var marker;
 var popupsize = new OpenLayers.Size(370, 220);
 var mapcenter;
 var mapcenterNE;
 var getamapurl;
 var mousegrlonlat;

 var pt;
 var lonlat;
 var vectorLayer;
 var mappointstoadd;
 var mappoints;
 
 var tracklinestyle =
     {
         strokeColor: "#EE00EE",
         strokeOpacity: 0.4,
         strokeWidth: 4,
         strokeLinecap: "round"
     };

 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(390000,350000,440000,410000)});

	osMap.setCenter(NGR2NE('SK187851'), 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();

  
/*	### 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: ';
	marker = osMap.createMarker(NGR2NE(''), null, content,popupsize);

*/
/* 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: */****/**';
	marker = osMap.createMarker(NGR2NE('SK173857'), null, content,popupsize);
mappointstoadd=new Array("417305,385770","417285,385615","417570,384945","417845,384755","417900,384620","417980,384555","417975,384440","418130,384315");
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))));}
vectorLayer.addFeatures([new OpenLayers.Feature.Vector(new OpenLayers.Geometry.LineString(mappoints), null, tracklinestyle)]);


/* 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: ***/****/***';
	marker = osMap.createMarker(NGR2NE('SK213839'), null, content,popupsize);
mappointstoadd=new Array("421395,383940","421260,383895","421005,383735");
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))));}
vectorLayer.addFeatures([new OpenLayers.Feature.Vector(new OpenLayers.Geometry.LineString(mappoints), null, tracklinestyle)]);

/* 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: **/****/***';
	marker = osMap.createMarker(NGR2NE('SK165868'), null, content,popupsize);
mappointstoadd=new Array("416475,386795","416585,386605","416735,386455","416890,386235","417020,386010","417005,385885","417045,385615","417050,385505","417085,385370");
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))));}
vectorLayer.addFeatures([new OpenLayers.Feature.Vector(new OpenLayers.Geometry.LineString(mappoints), null, tracklinestyle)]);

/* 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: *****/**/***';
	marker = osMap.createMarker(NGR2NE('SK147821'), null, content,popupsize);
mappointstoadd=new Array("414700,382110","414825,382185","414900,382395","414925,382505","414995,382550","415040,382720");
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))));}
vectorLayer.addFeatures([new OpenLayers.Feature.Vector(new OpenLayers.Geometry.LineString(mappoints), null, tracklinestyle)]);

/* 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: *****/***/***';
	marker = osMap.createMarker(new OpenSpace.MapPoint(409845,383135), null, content,popupsize);
mappointstoadd=new Array("409845,383135","409915,383240","409960,383390","410180,383550","410295,383675","410440,383890","410700,384025","411055,384005","411265,384165","411300,384250");
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))));}
vectorLayer.addFeatures([new OpenLayers.Feature.Vector(new OpenLayers.Geometry.LineString(mappoints), null, tracklinestyle)]);

/* 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: ***/***/***';
	marker = osMap.createMarker(NGR2NE('SK198877'), null, content,popupsize);
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");
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))));}
vectorLayer.addFeatures([new OpenLayers.Feature.Vector(new OpenLayers.Geometry.LineString(mappoints), null, tracklinestyle)]);

/* Gores DH */
	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: ***/****/*****';
	marker = osMap.createMarker(NGR2NE('SK167901'), null, content,popupsize);
mappointstoadd=new Array("416700,390115","416715,390170","416640,390380","416705,390630","416815,390745","416820,390910","416680,390970","416735,391010");
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))));}
vectorLayer.addFeatures([new OpenLayers.Feature.Vector(new OpenLayers.Geometry.LineString(mappoints), null, tracklinestyle)]);

/* 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: **/****/*****';
	marker = osMap.createMarker(NGR2NE('SK163890'), null, content,popupsize);
mappointstoadd=new Array("416365,389035","416380,388940","416345,388950","416320,388925","416220,388975","416225,388890","416195,388820");
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))));}
vectorLayer.addFeatures([new OpenLayers.Feature.Vector(new OpenLayers.Geometry.LineString(mappoints), null, tracklinestyle)]);

/* Hope-X DH */
	content = '<a href="http://monkeyspoon.com/tracks/track-hopex-dh" target="_BLANK"><b>HopeX 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: *****/*/****';
	marker = osMap.createMarker(NGR2NE('SK160878'), null, content,popupsize);
mappointstoadd=new Array("415995,387625","416075,388005","416150,388145","416160,388205","416220,388175","416285,388195","416325,388115","416385,388210","416200,388415");
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))));}
vectorLayer.addFeatures([new OpenLayers.Feature.Vector(new OpenLayers.Geometry.LineString(mappoints), null, tracklinestyle)]);

/* 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: **/****/***';
	marker = osMap.createMarker(new OpenSpace.MapPoint(422165,383175), null, content,new OpenLayers.Size(340, 230));
mappointstoadd=new Array("422165,383175","422100,383155","421980,382975","421875,382920","421770,382945","421675,382920","421630,382960","421580,382900");
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))));}
vectorLayer.addFeatures([new OpenLayers.Feature.Vector(new OpenLayers.Geometry.LineString(mappoints), null, tracklinestyle)]);
/* 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: ***** / *** / ****';
	marker = osMap.createMarker(NGR2NE('SK082862'), null, content,popupsize);
mappointstoadd=new Array("408075,386100","408190,386200","408535,386195","408645,386215","408670,385985","408700,385970","408805,386130","408840,386115");
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))));}
vectorLayer.addFeatures([new OpenLayers.Feature.Vector(new OpenLayers.Geometry.LineString(mappoints), null, tracklinestyle)]);
}

/*	~~~END~~~ [Track Markers & Lines] */


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);
}