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