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