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