function LatLng(b,a){this.lat=b;this.lng=a;this.distance=LatLngDistance;this.toOSRef=LatLngToOSRef;this.toUTMRef=LatLngToUTMRef;this.WGS84ToOSGB36=WGS84ToOSGB36;this.OSGB36ToWGS84=OSGB36ToWGS84;this.toString=LatLngToString}function LatLngToString(){return"("+this.lat+", "+this.lng+")"}function OSRef(b,a){this.easting=b;this.northing=a;this.toLatLng=OSRefToLatLng;this.toString=OSRefToString;this.toSixFigureString=OSRefToSixFigureString}function OSRefToString(){return"("+this.easting+", "+this.northing+")"}function OSRefToSixFigureString(){var c=Math.floor(this.easting/100000);var k=Math.floor(this.northing/100000);var d="";if(k<5){if(c<5){d="S"}else{d="T"}}else{if(k<10){if(c<5){d="N"}else{d="O"}}else{d="H"}}var j="";var f=65+((4-(k%5))*5)+(c%5);var a=f;if(f>=73){f++}j=chr(f);var g=Math.floor((this.easting-(100000*c))/100);var b=Math.floor((this.northing-(100000*k))/100);var i=g;if(g<100){i="0"+i}if(g<10){i="0"+i}var h=b;if(b<100){h="0"+h}if(b<10){h="0"+h}return d+j+i+h}function UTMRef(d,c,b,a){this.easting=d;this.northing=c;this.latZone=b;this.lngZone=a;this.toLatLng=UTMRefToLatLng;this.toString=UTMRefToString}function UTMRefToString(){return this.lngZone+this.latZone+" "+this.easting+" "+this.northing}function RefEll(a,b){this.maj=a;this.min=b;this.ecc=((a*a)-(b*b))/(a*a)}function sinSquared(a){return Math.sin(a)*Math.sin(a)}function cosSquared(a){return Math.cos(a)*Math.cos(a)}function tanSquared(a){return Math.tan(a)*Math.tan(a)}function sec(a){return 1/Math.cos(a)}function deg2rad(a){return a*(Math.PI/180)}function rad2deg(a){return a*(180/Math.PI)}function chr(a){var b=a.toString(16);if(b.length==1){b="0"+b}b="%"+b;return unescape(b)}function ord(a){var e=a.charAt(0);var b;for(b=0;b<256;++b){var d=b.toString(16);if(d.length==1){d="0"+d}d="%"+d;d=unescape(d);if(d==e){break}}return b}function LatLngDistance(m){var n=6366.707;var e=deg2rad(this.lat);var h=deg2rad(m.lat);var j=deg2rad(this.lng);var c=deg2rad(m.lng);var b=n*Math.cos(j)*Math.sin(e);var l=n*Math.sin(j)*Math.sin(e);var g=n*Math.cos(e);var a=n*Math.cos(c)*Math.sin(h);var k=n*Math.sin(c)*Math.sin(h);var f=n*Math.cos(h);var i=Math.sqrt((b-a)*(b-a)+(l-k)*(l-k)+(g-f)*(g-f));return i}function OSGB36ToWGS84(){var q=new RefEll(6377563.396,6356256.909);var J=q.maj;var G=q.min;var m=q.ecc;var d=deg2rad(this.lat);var u=deg2rad(this.lng);var t=J/(Math.sqrt(1-m*sinSquared(d)));var r=0;var o=(t+r)*Math.cos(d)*Math.cos(u);var l=(t+r)*Math.cos(d)*Math.sin(u);var k=((1-m)*t+r)*Math.sin(d);var K=446.448;var I=-124.157;var F=542.06;var A=-0.0000204894;var g=deg2rad(0.00004172222);var f=deg2rad(0.00006861111);var e=deg2rad(0.00023391666);var n=K+(o*(1+A))+(-g*l)+(f*k);var E=I+(e*o)+(l*(1+A))+(-g*k);var c=F+(-f*o)+(g*l)+(k*(1+A));var j=new RefEll(6378137,6356752.3141);J=j.maj;G=j.min;m=j.ecc;var C=rad2deg(Math.atan(E/n));var B=Math.sqrt((n*n)+(E*E));var h=Math.atan(c/(B*(1-m)));for(var D=1;D<10;D++){t=J/(Math.sqrt(1-m*sinSquared(h)));phiN1=Math.atan((c+(m*t*Math.sin(h)))/B);h=phiN1}var w=rad2deg(h);this.lat=w;this.lng=C}function WGS84ToOSGB36(){var j=new RefEll(6378137,6356752.3141);var J=j.maj;var G=j.min;var m=j.ecc;var d=deg2rad(this.lat);var u=deg2rad(this.lng);var t=J/(Math.sqrt(1-m*sinSquared(d)));var r=0;var q=(t+r)*Math.cos(d)*Math.cos(u);var l=(t+r)*Math.cos(d)*Math.sin(u);var k=((1-m)*t+r)*Math.sin(d);var K=-446.448;var I=124.157;var F=-542.06;var A=0.0000204894;var g=deg2rad(-0.00004172222);var f=deg2rad(-0.00006861111);var e=deg2rad(-0.00023391666);var o=K+(q*(1+A))+(-g*l)+(f*k);var E=I+(e*q)+(l*(1+A))+(-g*k);var c=F+(-f*q)+(g*l)+(k*(1+A));var n=new RefEll(6377563.396,6356256.909);J=n.maj;G=n.min;m=n.ecc;var C=rad2deg(Math.atan(E/o));var B=Math.sqrt((o*o)+(E*E));var h=Math.atan(c/(B*(1-m)));for(var D=1;D<10;D++){t=J/(Math.sqrt(1-m*sinSquared(h)));phiN1=Math.atan((c+(m*t*Math.sin(h)))/B);h=phiN1}var w=rad2deg(h);this.lat=w;this.lng=C}function OSRefToLatLng(){var k=new RefEll(6377563.396,6356256.909);var D=0.9996012717;var t=-100000;var m=400000;var z=deg2rad(49);var c=deg2rad(-2);var y=k.maj;var x=k.min;var j=k.ecc;var f=0;var q=0;var s=this.easting;var g=this.northing;var u=(y-x)/(y+x);var h=0;var l=((g-t)/(y*D))+z;do{h=(x*D)*(((1+u+((5/4)*u*u)+((5/4)*u*u*u))*(l-z))-(((3*u)+(3*u*u)+((21/8)*u*u*u))*Math.sin(l-z)*Math.cos(l+z))+((((15/8)*u*u)+((15/8)*u*u*u))*Math.sin(2*(l-z))*Math.cos(2*(l+z)))-(((35/24)*u*u*u)*Math.sin(3*(l-z))*Math.cos(3*(l+z))));l+=(g-t-h)/(y*D)}while((g-t-h)>=0.001);var p=y*D*Math.pow(1-j*sinSquared(l),-0.5);var d=y*D*(1-j)*Math.pow(1-j*sinSquared(l),-1.5);var r=(p/d)-1;var w=Math.tan(l)/(2*d*p);var o=(Math.tan(l)/(24*d*Math.pow(p,3)))*(5+(3*tanSquared(l))+r-(9*tanSquared(l)*r));var C=(Math.tan(l)/(720*d*Math.pow(p,5)))*(61+(90*tanSquared(l))+(45*tanSquared(l)*tanSquared(l)));var e=sec(l)/p;var i=(sec(l)/(6*p*p*p))*((p/d)+(2*tanSquared(l)));var B=(sec(l)/(120*Math.pow(p,5)))*(5+(28*tanSquared(l))+(24*tanSquared(l)*tanSquared(l)));var A=(sec(l)/(5040*Math.pow(p,7)))*(61+(662*tanSquared(l))+(1320*tanSquared(l)*tanSquared(l))+(720*tanSquared(l)*tanSquared(l)*tanSquared(l)));f=l-(w*Math.pow(s-m,2))+(o*Math.pow(s-m,4))-(C*Math.pow(s-m,6));q=c+(e*(s-m))-(i*Math.pow(s-m,3))+(B*Math.pow(s-m,5))-(A*Math.pow(s-m,7));return new LatLng(rad2deg(f),rad2deg(q))}function LatLngToOSRef(){var m=new RefEll(6377563.396,6356256.909);var C=0.9996012717;var s=-100000;var o=400000;var B=deg2rad(49);var d=deg2rad(-2);var A=m.maj;var z=m.min;var k=m.ecc;var f=deg2rad(this.lat);var q=deg2rad(this.lng);var r=0;var i=0;var u=(A-z)/(A+z);var p=A*C*Math.pow(1-k*sinSquared(f),-0.5);var e=A*C*(1-k)*Math.pow(1-k*sinSquared(f),-1.5);var t=(p/e)-1;var j=(z*C)*(((1+u+((5/4)*u*u)+((5/4)*u*u*u))*(f-B))-(((3*u)+(3*u*u)+((21/8)*u*u*u))*Math.sin(f-B)*Math.cos(f+B))+((((15/8)*u*u)+((15/8)*u*u*u))*Math.sin(2*(f-B))*Math.cos(2*(f+B)))-(((35/24)*u*u*u)*Math.sin(3*(f-B))*Math.cos(3*(f+B))));var l=j+s;var h=(p/2)*Math.sin(f)*Math.cos(f);var w=(p/24)*Math.sin(f)*Math.pow(Math.cos(f),3)*(5-tanSquared(f)+(9*t));var y=(p/720)*Math.sin(f)*Math.pow(Math.cos(f),5)*(61-(58*tanSquared(f))+Math.pow(Math.tan(f),4));var c=p*Math.cos(f);var g=(p/6)*Math.pow(Math.cos(f),3)*((p/e)-tanSquared(f));var x=(p/120)*Math.pow(Math.cos(f),5)*(5-(18*tanSquared(f))+(Math.pow(Math.tan(f),4))+(14*t)-(58*tanSquared(f)*t));i=l+(h*Math.pow(q-d,2))+(w*Math.pow(q-d,4))+(y*Math.pow(q-d,6));r=o+(c*(q-d))+(g*Math.pow(q-d,3))+(x*Math.pow(q-d,5));return new OSRef(r,i)}function UTMRefToLatLng(){var h=new RefEll(6378137,6356752.314);var D=0.9996;var C=h.maj;var j=h.ecc;var B=j/(1-j);var g=(1-Math.sqrt(1-j))/(1+Math.sqrt(1-j));var k=this.easting-500000;var i=this.northing;var f=this.lngZone;var e=this.latZone;var b=(f-1)*6-180+3;if((ord(e)-ord("N"))<0){i-=10000000}var v=i/D;var s=v/(C*(1-j/4-3*j*j/64-5*Math.pow(j,3)/256));var w=s+(3*g/2-27*Math.pow(g,3)/32)*Math.sin(2*s)+(21*g*g/16-55*Math.pow(g,4)/32)*Math.sin(4*s)+(151*Math.pow(g,3)/96)*Math.sin(6*s);var u=C/Math.sqrt(1-j*Math.sin(w)*Math.sin(w));var o=Math.tan(w)*Math.tan(w);var A=B*Math.cos(w)*Math.cos(w);var p=C*(1-j)/Math.pow(1-j*Math.sin(w)*Math.sin(w),1.5);var z=k/(u*D);var q=(w-(u*Math.tan(w)/p)*(z*z/2-(5+(3*o)+(10*A)-(4*A*A)-(9*B))*Math.pow(z,4)/24+(61+(90*o)+(298*A)+(45*o*o)-(252*B)-(3*A*A))*Math.pow(z,6)/720))*(180/Math.PI);var l=b+((z-(1+2*o+A)*Math.pow(z,3)/6+(5-(2*A)+(28*o)-(3*A*A)+(8*B)+(24*o*o))*Math.pow(z,5)/120)/Math.cos(w))*(180/Math.PI);return new LatLng(q,l)}function LatLngToUTMRef(){var g=new RefEll(6378137,6356752.314);var v=0.9996;var u=g.maj;var i=g.ecc;var k=this.lng;var l=this.lat;var d=l*(Math.PI/180);var p=k*(Math.PI/180);var w=Math.floor((k+180)/6)+1;if(l>=56&&l<64&&k>=3&&k<12){w=32}if(l>=72&&l<84){if(k>=0&&k<9){w=31}else{if(k>=9&&k<21){w=33}else{if(k>=21&&k<33){w=35}else{if(k>=33&&k<42){w=37}}}}}var b=(w-1)*6-180+3;var q=b*(Math.PI/180);var r=getUTMLatitudeZoneLetter(l);ePrimeSquared=(i)/(1-i);var o=u/Math.sqrt(1-i*Math.sin(d)*Math.sin(d));var j=Math.tan(d)*Math.tan(d);var s=ePrimeSquared*Math.cos(d)*Math.cos(d);var m=Math.cos(d)*(p-q);var h=u*((1-i/4-3*i*i/64-5*i*i*i/256)*d-(3*i/8+3*i*i/32+45*i*i*i/1024)*Math.sin(2*d)+(15*i*i/256+45*i*i*i/1024)*Math.sin(4*d)-(35*i*i*i/3072)*Math.sin(6*d));var f=(v*o*(m+(1-j+s)*Math.pow(m,3)/6+(5-18*j+j*j+72*s-58*ePrimeSquared)*Math.pow(m,5)/120)+500000);var e=(v*(h+o*Math.tan(d)*(m*m/2+(5-j+(9*s)+(4*s*s))*Math.pow(m,4)/24+(61-(58*j)+(j*j)+(600*s)-(330*ePrimeSquared))*Math.pow(m,6)/720)));if(l<0){e+=10000000}return new UTMRef(f,e,r,w)}function getOSRefFromSixFigureReference(f){var e=f.substring(0,1);var d=f.substring(1,2);var c=parseInt(f.substring(2,5),10)*100;var g=parseInt(f.substring(5,8),10)*100;if(e=="H"){g+=1000000}else{if(e=="N"){g+=500000}else{if(e=="O"){g+=500000;c+=500000}else{if(e=="T"){c+=500000}}}}var b=ord(d);if(b>73){b--}var a=((b-65)%5)*100000;var h=(4-Math.floor((b-65)/5))*100000;return new OSRef(c+a,g+h)}function getUTMLatitudeZoneLetter(a){if((84>=a)&&(a>=72)){return"X"}else{if((72>a)&&(a>=64)){return"W"}else{if((64>a)&&(a>=56)){return"V"}else{if((56>a)&&(a>=48)){return"U"}else{if((48>a)&&(a>=40)){return"T"}else{if((40>a)&&(a>=32)){return"S"}else{if((32>a)&&(a>=24)){return"R"}else{if((24>a)&&(a>=16)){return"Q"}else{if((16>a)&&(a>=8)){return"P"}else{if((8>a)&&(a>=0)){return"N"}else{if((0>a)&&(a>=-8)){return"M"}else{if((-8>a)&&(a>=-16)){return"L"}else{if((-16>a)&&(a>=-24)){return"K"}else{if((-24>a)&&(a>=-32)){return"J"}else{if((-32>a)&&(a>=-40)){return"H"}else{if((-40>a)&&(a>=-48)){return"G"}else{if((-48>a)&&(a>=-56)){return"F"}else{if((-56>a)&&(a>=-64)){return"E"}else{if((-64>a)&&(a>=-72)){return"D"}else{if((-72>a)&&(a>=-80)){return"C"}else{return"Z"}}}}}}}}}}}}}}}}}}}}};