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