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