var RAD=Math.PI/180;var DEG=180/Math.PI;var Re=6371.001;var Rc=42164.129;var MPK=0.621371192237;function UKOSGNVariance(lat,lon){var oDeg=-2;var K0=0.9996012717;var a=6377563.396;var b=6356256.91;a*=K0;b*=K0;with(Math){var rLat=lat*RAD;var c=cos(rLat);var s=sin(rLat);var t=tan(rLat);var t2=pow(t,2);var p=(lon-oDeg)*RAD;var eta2=pow(c,2)*(pow(a,2)/pow(b,2)-1);return((p*s)+(pow(p,3)*s*pow(c,2)*(1+(3*eta2)+(2*pow(eta2,2)))/3)+(pow(p,5)*s*pow(c,4)*(2-t2)/15))*DEG}}function WorldMagneticModel(){this.beg=2010;this.name="WMM-2010";this.publ=new Date(2009,11,20);this.coff=[[1,0,-29496.6,0,11.6,0],[1,1,-1586.3,4944.4,16.5,-25.9],[2,0,-2396.6,0,-12.1,0],[2,1,3026.1,-2707.7,-4.4,-22.5],[2,2,1668.6,-576.1,1.9,-11.8],[3,0,1340.1,0,0.4,0],[3,1,-2326.2,-160.2,-4.1,7.3],[3,2,1231.9,251.9,-2.9,-3.9],[3,3,634,-536.6,-7.7,-2.6],[4,0,912.6,0,-1.8,0],[4,1,808.9,286.4,2.3,1.1],[4,2,166.7,-211.2,-8.7,2.7],[4,3,-357.1,164.3,4.6,3.9],[4,4,89.4,-309.1,-2.1,-0.8],[5,0,-230.9,0,-1,0],[5,1,357.2,44.6,0.6,0.4],[5,2,200.3,188.9,-1.8,1.8],[5,3,-141.1,-118.2,-1,1.2],[5,4,-163,0,0.9,4],[5,5,-7.8,100.9,1,-0.6],[6,0,72.8,0,-0.2,0],[6,1,68.6,-20.8,-0.2,-0.2],[6,2,76,44.1,-0.1,-2.1],[6,3,-141.4,61.5,2,-0.4],[6,4,-22.8,-66.3,-1.7,-0.6],[6,5,13.2,3.1,-0.3,0.5],[6,6,-77.9,55,1.7,0.9],[7,0,80.5,0,0.1,0],[7,1,-75.1,-57.9,-0.1,0.7],[7,2,-4.7,-21.1,-0.6,0.3],[7,3,45.3,6.5,1.3,-0.1],[7,4,13.9,24.9,0.4,-0.1],[7,5,10.4,7,0.3,-0.8],[7,6,1.7,-27.7,-0.7,-0.3],[7,7,4.9,-3.3,0.6,0.3],[8,0,24.4,0,-0.1,0],[8,1,8.1,11,0.1,-0.1],[8,2,-14.5,-20,-0.6,0.2],[8,3,-5.6,11.9,0.2,0.4],[8,4,-19.3,-17.4,-0.2,0.4],[8,5,11.5,16.7,0.3,0.1],[8,6,10.9,7,0.3,-0.1],[8,7,-14.1,-10.8,-0.6,0.4],[8,8,-3.7,1.7,0.2,0.3],[9,0,5.4,0,-0,0],[9,1,9.4,-20.5,-0.1,-0],[9,2,3.4,11.5,0,-0.2],[9,3,-5.2,12.8,0.3,0],[9,4,3.1,-7.2,-0.4,-0.1],[9,5,-12.4,-7.4,-0.3,0.1],[9,6,-0.7,8,0.1,-0],[9,7,8.4,2.1,-0.1,-0.2],[9,8,-8.5,-6.1,-0.4,0.3],[9,9,-10.1,7,-0.2,0.2],[10,0,-2,0,0,0],[10,1,-6.3,2.8,-0,0.1],[10,2,0.9,-0.1,-0.1,-0.1],[10,3,-1.1,4.7,0.2,0],[10,4,-0.2,4.4,-0,-0.1],[10,5,2.5,-7.2,-0.1,-0.1],[10,6,-0.3,-1,-0.2,-0],[10,7,2.2,-3.9,0,-0.1],[10,8,3.1,-2,-0.1,-0.2],[10,9,-1,-2,-0.2,0],[10,10,-2.8,-8.3,-0.2,-0.1],[11,0,3,0,0,0],[11,1,-1.5,0.2,0,-0],[11,2,-2.1,1.7,-0,0.1],[11,3,1.7,-0.6,0.1,0],[11,4,-0.5,-1.8,-0,0.1],[11,5,0.5,0.9,0,0],[11,6,-0.8,-0.4,-0,0.1],[11,7,0.4,-2.5,-0,0],[11,8,1.8,-1.3,-0,-0.1],[11,9,0.1,-2.1,0,-0.1],[11,10,0.7,-1.9,-0.1,-0],[11,11,3.8,-1.8,-0,-0.1],[12,0,-2.2,0,-0,0],[12,1,-0.2,-0.9,0,-0],[12,2,0.3,0.3,0.1,0],[12,3,1,2.1,0.1,-0],[12,4,-0.6,-2.5,-0.1,0],[12,5,0.9,0.5,-0,-0],[12,6,-0.1,0.6,0,0.1],[12,7,0.5,-0,0,0],[12,8,-0.4,0.1,-0,0],[12,9,-0.4,0.3,0,-0],[12,10,0.2,-0.9,0,-0],[12,11,-0.8,-0.2,-0.1,0],[12,12,0,0.9,0.1,0]];this.c=new Array(13);this.cd=new Array(13);this.tc=new Array(13);this.dp=new Array(13);this.k=new Array(13);for(var o=0;o<13;o++){this.c[o]=new Array(13);this.cd[o]=new Array(13);this.tc[o]=new Array(13);this.dp[o]=new Array(13);this.k[o]=new Array(13)}this.snorm=new Array(169);this.sp=new Array(13);this.cp=new Array(13);this.fn=new Array(13);this.fm=new Array(13);this.pp=new Array(13);var t=12;var r;var o,s,l,d,a,c,e;var k,q,g,p,h;var f;var b;r=t;this.sp[0]=0;this.cp[0]=this.snorm[0]=this.pp[0]=1;this.dp[0][0]=0;this.c[0][0]=0;this.cd[0][0]=0;for(o=0,s=this.coff.length;o<s;o++){var b=this.coff[o];c=b[0];e=b[1];k=b[2];q=b[3];g=b[4];p=b[5];if(e<=c){this.c[e][c]=k;this.cd[e][c]=g;if(e!=0){this.c[c][e-1]=q;this.cd[c][e-1]=p}}}this.snorm[0]=1;for(c=1;c<=r;c++){this.snorm[c]=this.snorm[c-1]*(2*c-1)/c;l=2;for(e=0,d=1,a=(c-e+d)/d;a>0;a--,e+=d){this.k[e][c]=(((c-1)*(c-1))-(e*e))/((2*c-1)*(2*c-3));if(e>0){h=((c-e+1)*l)/(c+e);this.snorm[c+e*13]=this.snorm[c+(e-1)*13]*Math.sqrt(h);l=1;this.c[c][e-1]=this.snorm[c+e*13]*this.c[c][e-1];this.cd[c][e-1]=this.snorm[c+e*13]*this.cd[c][e-1]}this.c[e][c]=this.snorm[c+e*13]*this.c[e][c];this.cd[e][c]=this.snorm[c+e*13]*this.cd[e][c]}this.fn[c]=(c+1);this.fm[c]=c}this.k[1][1]=0;this.fm[0]=0}WorldMagneticModel.prototype.declination=function(p,s,g,an){var al=6378.137;var ak=6356.7523142;var P=6371.2;var X=al*al;var J=ak*ak;var l=X-J;var U=X*X;var H=J*J;var i=U-H;var w,u;var am,f,k,D;var aa,ab;var A,j,af,E,F,aj,Y,y,ad,M,V,L,K,I,ai,z,h,W,T,v,ah,o,e,B,c,R,Q,O,ag,Z,S,t,N,G;var ac=12;var x=g?g:0;var C=s;var ae=p;if(an!=undefined){j=an}else{j=new Date();j=j.getFullYear()+(j-new Date(j.getFullYear(),0,0,0,0,0,0))/(365.25*24*60*60*1000)}j-=this.beg;af=C*RAD;E=ae*RAD;F=Math.sin(af);aj=Math.sin(E);Y=Math.cos(af);y=Math.cos(E);ad=aj*aj;M=y*y;this.sp[1]=F;this.cp[1]=Y;V=Math.sqrt(X-l*ad);L=x*V;K=((L+X)/(L+J))*((L+X)/(L+J));I=aj/Math.sqrt(K*M+ad);t=Math.sqrt(1-(I*I));v=(x*x)+2*L+(U-i*ad)/(V*V);T=Math.sqrt(v);ai=Math.sqrt(X*M+J*ad);N=(x+ai)/T;G=l*y*aj/(T*ai);for(ab=2;ab<=ac;ab++){this.sp[ab]=this.sp[1]*this.cp[ab-1]+this.cp[1]*this.sp[ab-1];this.cp[ab]=this.cp[1]*this.cp[ab-1]-this.sp[1]*this.sp[ab-1]}z=P/T;h=z*z;W=S=Z=ah=0;for(aa=1;aa<=ac;aa++){h=h*z;for(ab=0,w=1,u=(aa+ab+w)/w;u>0;u--,ab+=w){if(aa==ab){this.snorm[aa+ab*13]=t*this.snorm[aa-1+(ab-1)*13];this.dp[ab][aa]=t*this.dp[ab-1][aa-1]+I*this.snorm[aa-1+(ab-1)*13]}else{if(aa==1&&ab==0){this.snorm[aa+ab*13]=I*this.snorm[aa-1+ab*13];this.dp[ab][aa]=I*this.dp[ab][aa-1]-t*this.snorm[aa-1+ab*13]}else{if(aa>1&&aa!=ab){if(ab>aa-2){this.snorm[aa-2+ab*13]=0}if(ab>aa-2){this.dp[ab][aa-2]=0}this.snorm[aa+ab*13]=I*this.snorm[aa-1+ab*13]-this.k[ab][aa]*this.snorm[aa-2+ab*13];this.dp[ab][aa]=I*this.dp[ab][aa-1]-t*this.snorm[aa-1+ab*13]-this.k[ab][aa]*this.dp[ab][aa-2]}}}this.tc[ab][aa]=this.c[ab][aa]+j*this.cd[ab][aa];if(ab!=0){this.tc[aa][ab-1]=this.c[aa][ab-1]+j*this.cd[aa][ab-1]}o=h*this.snorm[aa+ab*13];if(ab==0){e=this.tc[ab][aa]*this.cp[ab];c=this.tc[ab][aa]*this.sp[ab]}else{e=this.tc[ab][aa]*this.cp[ab]+this.tc[aa][ab-1]*this.sp[ab];c=this.tc[ab][aa]*this.sp[ab]-this.tc[aa][ab-1]*this.cp[ab]}S=S-h*e*this.dp[ab][aa];Z+=(this.fm[ab]*c*o);W+=(this.fn[aa]*e*o);if(t==0&&ab==1){if(aa==1){this.pp[aa]=this.pp[aa-1]}else{this.pp[aa]=this.ct*this.pp[aa-1]-this.k[ab][aa]*this.pp[aa-2]}B=h*this.pp[aa];ah+=(this.fm[ab]*c*B)}}}if(t==0){Z=ah}else{Z/=t}R=-S*N-W*G;Q=Z;O=S*G-W*N;ag=Math.sqrt((R*R)+(Q*Q));f=Math.sqrt((ag*ag)+(O*O));D=Math.atan2(Q,R)*DEG;am=Math.atan2(O,ag)*DEG;return(j>=-0.25)&&(j<=5)?D:10000*D};WorldMagneticModel.prototype.knownAnswerTest=function(){var j=[[2010,0,80,0,-6.13,82.98,6687.8,6649.5,-714.6,54346.2,54756.2,-6.13],[2010,0,0,120,0.97,-16.5,39434.5,39428.8,664.9,-11683.8,41128.9],[2010,0,-80,240,70.21,-72.62,16714,5657.7,15727.3,-53407.5,55961.8,310.21],[2010,100,80,0,-6.57,83.04,6374,6332.2,-729.1,52194.9,52582.6,-6.57],[2010,100,0,120,0.94,-16.62,37457,37452,611.9,-11180.8,39090.1],[2010,100,-80,240,69.62,-72.79,15748.6,5484.3,14762.8,-50834.8,53218.3,309.62],[2012.5,0,80,0,-5.21,83,6685.5,6658,-606.7,54420.4,54829.5,-5.21],[2012.5,0,0,120,0.88,-16.31,39428.6,39423.9,608.1,-11540.5,41082.8],[2012.5,0,-80,240,70.04,-72.53,16737.2,5713.6,15731.8,-53184.3,55755.7,310.04],[2012.5,100,80,0,-5.63,83.05,6371.6,6340.9,-625.1,52261.9,52648.9,-5.63],[2012.5,100,0,120,0.86,-16.43,37452.2,37448.1,559.7,-11044.2,39046.7],[2012.5,100,-80,240,69.45,-72.7,15768.9,5535.5,14765.4,-50625.9,53024.9,309.45]];var c=0;var b=0;var o="Date\tAlt\tLat\tLon\tExp Dec\tCalc Dec\tError\n";for(var g=0,m=j.length;g<m;g++){var d=j[g];var e=d[0];var h=d[1];var l=d[2];var a=d[3];var n=d[4];var k=this.declination(l,a,h,e);var f=Math.abs(k-n);o+=e+"\t"+l+"\t"+a+"\t"+n+"\t"+k.toFixed(2)+"\t"+f.toFixed(2)+"\n";if(f>c){c=f;b=n}}o+="\nMaximum error = "+c.toFixed(3)+", "+(c*100/b).toFixed(3)+"%";return o};
