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 J=Math.floor(this.northing/100000);var D="";if(J<5){if(C<5){D="S"}else{D="T"}}else{if(J<10){if(C<5){D="N"}else{D="O"}}else{D="H"}}var I="";var E=65+((4-(J%5))*5)+(C%5);var A=E;if(E>=73){E++}I=chr(E);var F=Math.floor((this.easting-(100000*C))/100);var B=Math.floor((this.northing-(100000*J))/100);var H=F;if(F<100){H="0"+H}if(F<10){H="0"+H}var G=B;if(B<100){G="0"+G}if(B<10){G="0"+G}return D+I+H+G}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 D=A.charAt(0);var B;for(B=0;B<256;++B){var C=B.toString(16);if(C.length==1){C="0"+C}C="%"+C;C=unescape(C);if(C==D){break}}return B}function LatLngDistance(L){var M=6366.707;var D=deg2rad(this.lat);var G=deg2rad(L.lat);var I=deg2rad(this.lng);var C=deg2rad(L.lng);var B=M*Math.cos(I)*Math.sin(D);var K=M*Math.sin(I)*Math.sin(D);var F=M*Math.cos(D);var A=M*Math.cos(C)*Math.sin(G);var J=M*Math.sin(C)*Math.sin(G);var E=M*Math.cos(G);var H=Math.sqrt((B-A)*(B-A)+(K-J)*(K-J)+(F-E)*(F-E));return H}function OSGB36ToWGS84(){var N=new RefEll(6377563.396,6356256.909);var c=N.maj;var Y=N.min;var K=N.ecc;var B=deg2rad(this.lat);var Q=deg2rad(this.lng);var P=c/(Math.sqrt(1-K*sinSquared(B)));var O=0;var M=(P+O)*Math.cos(B)*Math.cos(Q);var J=(P+O)*Math.cos(B)*Math.sin(Q);var I=((1-K)*P+O)*Math.sin(B);var d=446.448;var Z=-124.157;var X=542.06;var S=-0.0000204894;var E=deg2rad(0.00004172222);var D=deg2rad(0.00006861111);var C=deg2rad(0.00023391666);var L=d+(M*(1+S))+(-E*J)+(D*I);var W=Z+(C*M)+(J*(1+S))+(-E*I);var A=X+(-D*M)+(E*J)+(I*(1+S));var G=new RefEll(6378137,6356752.3141);c=G.maj;Y=G.min;K=G.ecc;var U=rad2deg(Math.atan(W/L));var T=Math.sqrt((L*L)+(W*W));var F=Math.atan(A/(T*(1-K)));for(var V=1;V<10;V++){P=c/(Math.sqrt(1-K*sinSquared(F)));phiN1=Math.atan((A+(K*P*Math.sin(F)))/T);F=phiN1}var R=rad2deg(F);this.lat=R;this.lng=U}function WGS84ToOSGB36(){var G=new RefEll(6378137,6356752.3141);var c=G.maj;var Y=G.min;var K=G.ecc;var B=deg2rad(this.lat);var Q=deg2rad(this.lng);var P=c/(Math.sqrt(1-K*sinSquared(B)));var O=0;var N=(P+O)*Math.cos(B)*Math.cos(Q);var J=(P+O)*Math.cos(B)*Math.sin(Q);var I=((1-K)*P+O)*Math.sin(B);var d=-446.448;var Z=124.157;var X=-542.06;var S=0.0000204894;var E=deg2rad(-0.00004172222);var D=deg2rad(-0.00006861111);var C=deg2rad(-0.00023391666);var M=d+(N*(1+S))+(-E*J)+(D*I);var W=Z+(C*N)+(J*(1+S))+(-E*I);var A=X+(-D*N)+(E*J)+(I*(1+S));var L=new RefEll(6377563.396,6356256.909);c=L.maj;Y=L.min;K=L.ecc;var U=rad2deg(Math.atan(W/M));var T=Math.sqrt((M*M)+(W*W));var F=Math.atan(A/(T*(1-K)));for(var V=1;V<10;V++){P=c/(Math.sqrt(1-K*sinSquared(F)));phiN1=Math.atan((A+(K*P*Math.sin(F)))/T);F=phiN1}var R=rad2deg(F);this.lat=R;this.lng=U}function OSRefToLatLng(J){if((typeof (J)==="undefined")||(J!==false)){J=true;}var U,G;if(J){U=this.easting;G=this.northing}else{var F=Y(this);U=F.easting;G=F.northing}var O=new RefEll(6377563.396,6356256.909);var i=0.9996012717;var V=-100000;var P=400000;var d=deg2rad(49);var A=deg2rad(-2);var e=O.maj;var c=O.min;var K=O.ecc;var D=0;var S=0;var W=(e-c)/(e+c);var H=0;var L=((G-V)/(e*i))+d;do{H=(c*i)*(((1+W+((5/4)*W*W)+((5/4)*W*W*W))*(L-d))-(((3*W)+(3*W*W)+((21/8)*W*W*W))*Math.sin(L-d)*Math.cos(L+d))+((((15/8)*W*W)+((15/8)*W*W*W))*Math.sin(2*(L-d))*Math.cos(2*(L+d)))-(((35/24)*W*W*W)*Math.sin(3*(L-d))*Math.cos(3*(L+d))));L+=(G-V-H)/(e*i)}while((G-V-H)>=0.001);var R=e*i*Math.pow(1-K*sinSquared(L),-0.5);var B=e*i*(1-K)*Math.pow(1-K*sinSquared(L),-1.5);var T=(R/B)-1;var Z=Math.tan(L)/(2*B*R);var Q=(Math.tan(L)/(24*B*Math.pow(R,3)))*(5+(3*tanSquared(L))+T-(9*tanSquared(L)*T));var h=(Math.tan(L)/(720*B*Math.pow(R,5)))*(61+(90*tanSquared(L))+(45*tanSquared(L)*tanSquared(L)));var C=sec(L)/R;var I=(sec(L)/(6*R*R*R))*((R/B)+(2*tanSquared(L)));var g=(sec(L)/(120*Math.pow(R,5)))*(5+(28*tanSquared(L))+(24*tanSquared(L)*tanSquared(L)));var f=(sec(L)/(5040*Math.pow(R,7)))*(61+(662*tanSquared(L))+(1320*tanSquared(L)*tanSquared(L))+(720*tanSquared(L)*tanSquared(L)*tanSquared(L)));D=L-(Z*Math.pow(U-P,2))+(Q*Math.pow(U-P,4))-(h*Math.pow(U-P,6));S=A+(C*(U-P))-(I*Math.pow(U-P,3))+(g*Math.pow(U-P,5))-(f*Math.pow(U-P,7));return new LatLng(rad2deg(D),rad2deg(S));function Y(M){var X=M.easting/100000;var j=M.northing/100000;var b=(-20.13152127*Math.pow(X,6))+(452.9685282*Math.pow(X,5))+(-4040.509066*Math.pow(X,4))+(18172.98757*Math.pow(X,3))+(-43165.25804*Math.pow(X,2))+(51036.20603*X)+(-23578.61857);var a=(-0.06414879*Math.pow(j,6))+(1.599167873*Math.pow(j,5))+(-15.19263463*Math.pow(j,4))+(68.2881115*Math.pow(j,3))+(-145.6116922*Math.pow(j,2))+(116.7793638*j)+(41.16123877);return new OSRef(M.easting+b,M.northing+a)}}function LatLngToOSRef(){var O=new RefEll(6377563.396,6356256.909);var f=0.9996012717;var T=-100000;var P=400000;var e=deg2rad(49);var B=deg2rad(-2);var d=O.maj;var c=O.min;var K=O.ecc;var D=deg2rad(this.lat);var R=deg2rad(this.lng);var S=0;var H=0;var W=(d-c)/(d+c);var Q=d*f*Math.pow(1-K*sinSquared(D),-0.5);var C=d*f*(1-K)*Math.pow(1-K*sinSquared(D),-1.5);var U=(Q/C)-1;var J=(c*f)*(((1+W+((5/4)*W*W)+((5/4)*W*W*W))*(D-e))-(((3*W)+(3*W*W)+((21/8)*W*W*W))*Math.sin(D-e)*Math.cos(D+e))+((((15/8)*W*W)+((15/8)*W*W*W))*Math.sin(2*(D-e))*Math.cos(2*(D+e)))-(((35/24)*W*W*W)*Math.sin(3*(D-e))*Math.cos(3*(D+e))));var L=J+T;var G=(Q/2)*Math.sin(D)*Math.cos(D);var X=(Q/24)*Math.sin(D)*Math.pow(Math.cos(D),3)*(5-tanSquared(D)+(9*U));var Z=(Q/720)*Math.sin(D)*Math.pow(Math.cos(D),5)*(61-(58*tanSquared(D))+Math.pow(Math.tan(D),4));var A=Q*Math.cos(D);var F=(Q/6)*Math.pow(Math.cos(D),3)*((Q/C)-tanSquared(D));var Y=(Q/120)*Math.pow(Math.cos(D),5)*(5-(18*tanSquared(D))+(Math.pow(Math.tan(D),4))+(14*U)-(58*tanSquared(D)*U));H=L+(G*Math.pow(R-B,2))+(X*Math.pow(R-B,4))+(Z*Math.pow(R-B,6));S=P+(A*(R-B))+(F*Math.pow(R-B,3))+(Y*Math.pow(R-B,5));return new OSRef(S,H)}function UTMRefToLatLng(){var E=new RefEll(6378137,6356752.314);var U=0.9996;var T=E.maj;var G=E.ecc;var S=G/(1-G);var D=(1-Math.sqrt(1-G))/(1+Math.sqrt(1-G));var H=this.easting-500000;var F=this.northing;var C=this.lngZone;var B=this.latZone;var A=(C-1)*6-180+3;if((ord(B)-ord("N"))<0){F-=10000000}var O=F/U;var M=O/(T*(1-G/4-3*G*G/64-5*Math.pow(G,3)/256));var P=M+(3*D/2-27*Math.pow(D,3)/32)*Math.sin(2*M)+(21*D*D/16-55*Math.pow(D,4)/32)*Math.sin(4*M)+(151*Math.pow(D,3)/96)*Math.sin(6*M);var N=T/Math.sqrt(1-G*Math.sin(P)*Math.sin(P));var J=Math.tan(P)*Math.tan(P);var R=S*Math.cos(P)*Math.cos(P);var K=T*(1-G)/Math.pow(1-G*Math.sin(P)*Math.sin(P),1.5);var Q=H/(N*U);var L=(P-(N*Math.tan(P)/K)*(Q*Q/2-(5+(3*J)+(10*R)-(4*R*R)-(9*S))*Math.pow(Q,4)/24+(61+(90*J)+(298*R)+(45*J*J)-(252*S)-(3*R*R))*Math.pow(Q,6)/720))*(180/Math.PI);var I=A+((Q-(1+2*J+R)*Math.pow(Q,3)/6+(5-(2*R)+(28*J)-(3*R*R)+(8*S)+(24*J*J))*Math.pow(Q,5)/120)/Math.cos(P))*(180/Math.PI);return new LatLng(L,I)}function LatLngToUTMRef(){var F=new RefEll(6378137,6356752.314);var T=0.9996;var S=F.maj;var H=F.ecc;var J=this.lng;var K=this.lat;var C=K*(Math.PI/180);var O=J*(Math.PI/180);var U=Math.floor((J+180)/6)+1;if(K>=56&&K<64&&J>=3&&J<12){U=32}if(K>=72&&K<84){if(J>=0&&J<9){U=31}else{if(J>=9&&J<21){U=33}else{if(J>=21&&J<33){U=35}else{if(J>=33&&J<42){U=37}}}}}var B=(U-1)*6-180+3;var P=B*(Math.PI/180);var Q=getUTMLatitudeZoneLetter(K);ePrimeSquared=(H)/(1-H);var N=S/Math.sqrt(1-H*Math.sin(C)*Math.sin(C));var I=Math.tan(C)*Math.tan(C);var R=ePrimeSquared*Math.cos(C)*Math.cos(C);var L=Math.cos(C)*(O-P);var G=S*((1-H/4-3*H*H/64-5*H*H*H/256)*C-(3*H/8+3*H*H/32+45*H*H*H/1024)*Math.sin(2*C)+(15*H*H/256+45*H*H*H/1024)*Math.sin(4*C)-(35*H*H*H/3072)*Math.sin(6*C));var E=(T*N*(L+(1-I+R)*Math.pow(L,3)/6+(5-18*I+I*I+72*R-58*ePrimeSquared)*Math.pow(L,5)/120)+500000);var D=(T*(G+N*Math.tan(C)*(L*L/2+(5-I+(9*R)+(4*R*R))*Math.pow(L,4)/24+(61-(58*I)+(I*I)+(600*R)-(330*ePrimeSquared))*Math.pow(L,6)/720)));if(K<0){D+=10000000}return new UTMRef(E,D,Q,U)}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"}}}}}}}}}}}}}}}}}}}}};
