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