﻿function azmag(satlong,eslat,eslong) {
var longdiffr, esazimuth, latit, longi, a,b,c,pl,pr,u1,u2, um,esazimuthm;
longdiffr=(eslong-satlong)/57.29578;
esazimuth=180+57.29578*Math.atan(Math.tan(longdiffr)/Math.sin((eslat/57.29578)));
if (eslat<0) esazimuth=esazimuth-180; 
if (esazimuth<0) esazimuth=esazimuth+360.0;
//earth magnetic field model at 30 deg lat long increments
//table below updated 16 Oct 2009, data forecast centered on 16 Oct 2010, needs updating in Oct 2012
dev = new Array(65);
dev[0]=4.346;     dev[1]=7.097;      dev[2]=9.546;     dev[3]=16.532;   dev[4]=46.206;
dev[5]=18.607;    dev[6]=12.01;     dev[7]=9.359;     dev[8]=17.384;   dev[9]=42.848;
dev[10]=20.544;  dev[11]=12.162;  dev[12]=9.007;   dev[13]=16.832;    dev[14]=38.962;
dev[15]=-8.288;   dev[16]=-0.054;   dev[17]=4.34;    dev[18]=13.826;    dev[19]=28.79;
dev[20]=-27.087;  dev[21]=-15.829; dev[22]=-14.992; dev[23]=-8.734;  dev[24]=10.37;
dev[25]=-17.699; dev[26]=-10.916; dev[27]=-18.367; dev[28]=-24.179; dev[29]=-5.663;
dev[30]=-2.874;   dev[31]=-0.668;  dev[32]=-6.059;  dev[33]=-23.279; dev[34]=-19.57;
dev[35]=9.579;   dev[36]=3.568;    dev[37]=0.841;   dev[38]=-24.577;   dev[39]=-40.576;
dev[40]=16.591;  dev[41]=2.285;   dev[42]=-4.035;  dev[43]=-32.052; dev[44]=-61.239;
dev[45]=7.383;   dev[46]=-0.187;   dev[47]=-2.504;  dev[48]=-17.86; dev[49]=-74.047;
dev[50]=-13.0;    dev[51]=-5.078;   dev[52]=1.005;   dev[53]=0.884; dev[54]=-62.146;
dev[55]=-11.131; dev[56]=-2.661;  dev[57]=5.491;   dev[58]=10.991;   dev[59]=39.998;
dev[60]=4.346;    dev[61]=7.097;   dev[62]=9.546;   dev[63]=16.532;  dev[64]=46.206;

latit=1.0*eslat;
longi=1.0*eslong;
if (latit==60.0) latit=59.99999;
if (latit >59.999999) return "n/a";
if (latit <-60) return "n/a";
if (longi==180.0) longi=179.99999;
if (longi>179.999999) longi=longi-360;
if (longi<-180) longi=longi+360;
a = Math.round(((1.0*longi + 180)/30)-0.5);
//document.write("<p>top left long index is ", a);  
b = 3- Math.round(((1.0*latit + 60)/30)-0.5);
//document.write("top lat index is    ", b);   
c=a * 5 + b;
//calculate left proportion up to 30.
if (latit>=30) pl=latit-30;
else
if(latit>=0) pl=latit;
else
if (latit>=-30) pl=30+latit;
else
pl = 60+latit;
//return pl;
//calculate hoziz proportion up to 30.
pr=longi +180 - a*30;
//return pr;   ok to here
u1=dev[c+1]+(dev[c]-dev[c+1])*pl/30;
u2=dev[c+6]+(dev[c+5]-dev[c+6])*pl/30;
um=u1+(u2-u1)*pr/30;
//return um;
esazimuthm=esazimuth-um;
if (esazimuthm<-180) esazimuthm=esazimuthm+360; 
if (esazimuthm>360) esazimuthm=esazimuthm-360.0;
return esazimuthm;
}
