mydate = new Date();
daytoday=mydate.getDate();
calc(mydate.getMonth(),mydate.getFullYear());

// JavaScript based on a BASIC program MOON EFFECTS by Bradley E. Schaefer
 
function MP(day){

day2=new Date();
day2=day; Date.UTC(day);
var Y=day2.getFullYear();
var M=day2.getMonth()+1;
var D=day2.getDate();
var YY,MM,K1,K2,K3,J,V,IP,AG;

YY=Y-Math.floor((12-M)/10);
MM=M+9;
if (MM>=12) {MM=MM-12};
K1=Math.floor(365.25*(YY+4712));
K2=Math.floor(30.6*MM+.5);
K3=Math.floor(Math.floor((YY/100)+49)*.75)-38;
J=K1+K2+D+59;  
if (J>2299160) {J=J-K3};  
V=(J-2451550.1)/29.530588853;
V=V-Math.floor(V);
if (V<0) {V=V+1};
IP=V;
AG=IP*29.53; 
IP=IP*Math.PI*2  
return IP;
}

function calceclp(calcmonth,calcyear){
//Eclipse's
EC1=0;
EC2=0;
EM1="";
EM2="";
R1=3.14159265/180;
U=0;
Y=calcyear;
calcmonth++;
G=1;
K0=Math.floor((Y-1900)*12.3685);
T=(Y-1899.5)/100;
T2=T*T;
T3=T*T*T;
J0=2415020+29*K0;
F0=0.0001178*T2-0.000000155*T3;
F0=F0+0.75933+0.53058868*K0;
F0=F0-0.000837*T-0.000335*T2;
J0=J0+Math.floor(F0);
F0=F0-Math.floor(F0);
M0=K0*0.08084821133;
M0=360*(M0-Math.floor(M0))+359.2242;
M0=M0-0.0000333*T2;
M0=M0-0.00000347*T3;
M1=K0*0.07171366128;
M1=360*(M1-Math.floor(M1))+306.0253;
M1=M1+0.0107306*T2;
M1=M1+0.00001236*T3;
B1=K0*0.08519585128;
B1=360*(B1-Math.floor(B1))+21.2964;
B1=B1-0.0016528*T2;
B1=B1-0.00000239*T3;

for (K9=1;K9<=27;K9=K9+2){
J=J0+14*K9;
F=F0+0.765294*K9;
K=K9/2;
M5=(M0+K*29.10535608)*R1;
M6=(M1+K*385.81691806)*R1;
B6=(B1+K*390.67050646)*R1;
F=F-0.4068*Math.sin(M6);
F=F+(0.1734-0.000393*T)*Math.sin(M5);
F=F+0.0161*Math.sin(2*M6);
F=F-0.0104*Math.sin(2*B6);
F=F-0.0074*Math.sin(M5-M6);
F=F-0.0051*Math.sin(M5+M6);
F=F+0.0021*Math.sin(2*M5);
F=F+0.5/1440;
J=J+Math.floor(F);
F=F-Math.floor(F);
    eclipser(calcmonth, calcyear);
}

// 100 REM  LUNAR ECLIPSE SUBROUTINE
function eclipser(){
estr="";
D7=0;
if (Math.abs(Math.sin(B6))>0.36){return;} 
S=5.19595-0.0048*Math.cos(M5);
S=S+0.0020*Math.cos(2*M5);
S=S-0.3283*Math.cos(M6);
S=S-0.0060*Math.cos(M5+M6);
S=S+0.0041*Math.cos(M5-M6);
C1=0.2070*Math.sin(M5);
C1=C1+0.0024*Math.sin(2*M5);
C1=C1-0.0390*Math.sin(M6);
C1=C1+0.0115*Math.sin(2*M6);
C1=C1-0.0073*Math.sin(M5+M6);
C1=C1-0.0067*Math.sin(M5-M6);
C1=C1+0.0117*Math.sin(2*B6);
D9=Math.abs(S*Math.sin(B6)+C1*Math.cos(B6));
U=0.0059+0.0046*Math.cos(M5);
U=U-0.0182*Math.cos(M6);
U=U+0.0004*Math.cos(2*M6);
U=U-0.0005*Math.cos(M5+M6);

RP=1.2847+U;
RU=0.7404-U;

MPE=(1.5572+U-D9)/0.545;

if (MPE<0){return;}
MU=(1.0129-U-D9)/0.545;
D5=1.5572+U;
D6=1.0129-U;
D7=0.4679-U;
N=(0.5458+0.04*Math.cos(M6))/60;

D5 = Math.sqrt(D5*D5-D9*D9)/N 
 if(MU > 0) 
  { 
  D6 = Math.sqrt(D6*D6-D9*D9)/N 
     if(MU > 1)  
     { 
     D7 = Math.sqrt(D7*D7-D9*D9)/N 
     }
  }

Jq=J;
Fq=F;
G=1;
if ( Y<1583){G=0}

Fq=Fq+0.5;
if (!(Fq<1))
   {Fq=Fq-1; Jq=Jq+1; }
if (G==1)
   { 
   A1=Math.floor((Jq/36524.25)-51.12264);
   A=Jq+1+A1-Math.floor(A1/4);
   }
   else {A=Jq};
B=A+1524;
C=Math.floor((B/365.25)-0.3343);
Dq=Math.floor(365.25*C);
E=Math.floor((B-Dq)/30.61);
Dq=B-Dq-Math.floor(30.61*E)+Fq;
Mq=E-1;
Yq=C-4716;
if (E>13.5){Mq=Mq-12};
if (Mq<2.5) {Yq=Yq+1};
D1=Math.floor(Dq);
H=24*(Dq-D1);
H1=Math.floor(H);
M9=Math.floor(60*(H-H1));
if (M9<10){M9="0"+M9};

if (MU>1){D6=Math.floor(D6+0.5); estr=estr+"Eclipse Totale - ";}
if (MU>0 && MU<1 ){estr=estr+"Eclipse Partielle - ";}
if (MU<0 ){estr=estr+"Eclipse P&eacute;nombrale - ";}

if(MU >= 1)
   {
   D6=Math.floor(D6+0.5);
   D7=Math.floor(D7+0.5);
   estr=estr+"dur&eacute;e : "+D7*2+"m - ";
   }
if (H1<10){H1="0"+H1};
   estr=estr+"Maximum phase : "+H1+"h"+M9+" UTC";
   if ((Mq == calcmonth) && (Yq == calcyear)) 
   {
      if (EC1==0)
      {EC1=D1;EM1=estr}
      else {EC2=D1;EM2=estr}
      }
   }
}

function calc(calcmonth,calcyear){

calceclp(calcmonth,calcyear);

// 10 REM    NEW AND FULL MOONS
// 12 REM
// 14 REM

var Y,JJ,K1,K2,K3,D,M,MM,FM1,FM2,NM1,NM2;
FM1=0;
FM2=0;
NM1=0;
NM2=0;
Tt1="";
Tt2="";
Tt3="";
Tt4="";

Y=calcyear;  // year
M=calcmonth;
M++;
D=-1;
YY=Y-Math.floor((12-M)/10);
MM=M+9;
if(MM>=12){MM=MM-12}
K1=Math.floor(365.25*(YY+4712));
K2=Math.floor(30.6*MM+.5);
K3=Math.floor(Math.floor((YY/100)+49)*.75)-38;
JJ=K1+K2+D+59;
if (JJ>2299160){JJ=JJ-K3}

var A,B,C,Dq,E,G,D1,H1,M9,Mq,H,Yq,A1,Fq,Jq;
var R1,U,K0,T,T2,T3,J0,F0,J,M0,M1,B1,M5,M6,K9,F;
R1=3.14159265/180;
U=0;
K0=Math.floor((Y-1900)*12.3685);
T=(Y-1899.5)/100;
T2=T*T;
T3=T*T*T;
J0=2415020+29*K0;
F0=0.0001178*T2-0.000000155*T3;
F0=F0+0.75933+0.53058868*K0;
F0=F0-0.000837*T-0.000335*T2;
J=J+Math.floor(F);
F=F-Math.floor(F);
M0=K0*0.08084821133;
M0=360*(M0-Math.floor(M0))+359.2242;
M0=M0-0.0000333*T2;
M0=M0-0.00000347*T3;
M1=K0*0.07171366128;
M1=360*(M1-Math.floor(M1))+306.0253;
M1=M1+0.0107306*T2;
M1=M1+0.00001236*T3;
B1=K0*0.08519585128;
B1=360*(B1-Math.floor(B1))+21.2964;
B1=B1-0.0016528*T2;
B1=B1-0.00000239*T3;

for(K9=0;K9<29;K9++){
J=J0+14*K9;
F=F0+0.765294*K9;
K=K9/2;
M5=(M0+K*29.10535608)*R1;
M6=(M1+K*385.81691806)*R1;
B6=(B1+K*390.67050646)*R1;
F=F-0.4068*Math.sin(M6);
F=F+(0.1734-0.000393*T)*Math.sin(M5);
F=F+0.0161*Math.sin(2*M6);
F=F+0.0104*Math.sin(2*B6);
F=F-0.0074*Math.sin(M5-M6);
F=F-0.0051*Math.sin(M5+M6);
F=F+0.0021*Math.sin(2*M5);
F=F+0.0010*Math.sin(2*B6-M6);
J=J+Math.floor(F);
F=F-Math.floor(F);

Jq=J;
Fq=F;
G=1;
if ( Y<1583){G=0}

Fq=Fq+0.5;
if (!(Fq<1)){
Fq=Fq-1;
Jq=Jq+1;
}
if (G==1){ A1=Math.floor((Jq/36524.25)-51.12264);
A=Jq+1+A1-Math.floor(A1/4)
}
else {A=Jq};
B=A+1524;
C=Math.floor((B/365.25)-0.3343);
Dq=Math.floor(365.25*C);
E=Math.floor((B-Dq)/30.61);
Dq=B-Dq-Math.floor(30.61*E)+Fq;
Mq=E-1;
Yq=C-4716;
if (E>13.5){Mq=Mq-12};
if (Mq<2.5) {Yq=Yq+1};
D1=Math.floor(Dq);
H=24*(Dq-D1);
H1=Math.floor(H);
M9=Math.floor(60*(H-H1));
if (M9<10){M9="0"+M9};
if (H1<10){H1="0"+H1};
if ((U==0) && (Mq==M) && (Yq==Y)){if (NM1==0){NM1=D1;Tt1=H1+"h"+M9} else {if(NM2==0){NM2=D1;Tt2=H1+"h"+M9}}};
if ((U==1) && (Mq==M) && (Yq==Y)){if (FM1==0){FM1=D1;Tt3=H1+"h"+M9} else {if(FM2==0){FM2=D1;Tt4=H1+"h"+M9}}};
U=U+1;

if (U==2){U=0};
}

var temp,dayoffset,days,i,j,monthnames,todayday;
today=new Date(Date.UTC(calcyear,calcmonth,10,1,1));

month=new Date(Date.UTC(calcyear,calcmonth,10,1,1));

todayday=today.getDate();
month.setDate(1);
dayoffset=month.getDay()-1;
if (dayoffset==-1){dayoffset=6};
today.setDate(1);
today.setMonth(today.getMonth()+1);
days=(today-month)/1000/60/60/24;

month.setHours(11);
monthnames=["Janvier","F&eacute;vrier","Mars","Avril","Mai","Juin","Juillet","Ao&ucirc;t","Septembre","Octobre","Novembre","D&eacute;cembre"];
window.document.open();
window.document.write('<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><style type="text/css">@import url(calune.css);</style></head>');
window.document.write('<body>');
window.document.write('<div id="conteneur">');
window.document.write('<p class="titre">Calendrier lunaire</p>');
window.document.write('<p class="titre">Phases de la lune en ', monthnames[month.getMonth()]," ",month.getFullYear(),"</p>");
window.document.write('<table id="table-cal"><tr><td id="td-titjrs">Lundi</td><td id="td-titjrs">Mardi</td><td id="td-titjrs">Mercredi</td><td id="td-titjrs">Jeudi</td><td id="td-titjrs">Vendredi</td><td id="td-titjrs">Samedi</td><td id="td-titjrs">Dimanche</td></tr>');

MD1="Nouvelle Lune "+Tt1+" UTC ";
MD2="Nouvelle Lune "+Tt2+" UTC ";
MD3="Pleine Lune "+Tt3+" UTC ";
MD4="Pleine Lune "+Tt4+" UTC ";
if (FM1==EC1){MD3=MD3+String.fromCharCode(10)+" "+EM1}
if (FM2==EC1){MD4=MD4+String.fromCharCode(10)+" "+EM1}
if (FM2==EC2){MD4=MD4+String.fromCharCode(10)+" "+EM2}


for (i=0;i<(days+dayoffset)/7;i++){
   window.document.write('<tr>'); 
   
   for (j=1;j<8;j++){
   window.document.write('<td id="td-nojrs">');
   if ((i*7)+j-dayoffset<=0 || (i*7)+j-dayoffset>Math.round(days)){  
      window.document.write("&nbsp");}
   else {
   window.document.write((i*7)+j-dayoffset);    //date ##########
if ((i*7)+j-dayoffset==FM1){window.document.write('<font color="red"> PL</font>')}
if ((i*7)+j-dayoffset==NM1){window.document.write('<font color="red"> NL</font>')}
if ((i*7)+j-dayoffset==FM2){window.document.write('<font color="red"> PL</font>')}
if ((i*7)+j-dayoffset==NM2){window.document.write('<font color="red"> NL</font>')}
if ((i*7)+j-dayoffset==EC1){
 if (EM1.indexOf("otal")!=-1){window.document.write('<font color="yellow"> *T</font>')}
     else
 {window.document.write('<font color="yellow"> *P</font>')}
}
if ((i*7)+j-dayoffset==EC2){
 if (EM2.indexOf("otal")!=-1){window.document.write('<font color="yellow"> *T</font>')}
     else
 {window.document.write('<font color="yellow"> *P</font>')}
}
      window.document.write('<br />');
   month.setDate((i*7)+j-dayoffset);

   window.document.write('<img src="img/moon_',Math.floor(MP(month)*29/2/Math.PI),'.gif" width="50px" height="50px" ');
if ((i*7)+j-dayoffset==FM1){window.document.write(' alt="',MD3,'"',' title="',MD3,'"')}
if ((i*7)+j-dayoffset==NM1){window.document.write(' alt="',MD1,'"',' title="',MD1,'"')}
if ((i*7)+j-dayoffset==FM2){window.document.write(' alt="',MD4,'"',' title="',MD4,'"')}
if ((i*7)+j-dayoffset==NM2){window.document.write(' alt="',MD2,'"',' title="',MD2,'"')}

  window.document.write('>');
 }
      window.document.write('</td>');
}

}
      window.document.write('</tr></table>');
	  window.document.write('<p id="lune">PL = Pleine lune&#160;&#160;&#160;&#160;&#160;&#160;<a href="http://www.jarrige.org/0-calune/"><img border="none" src="img/moon.gif" alt="Lune"></a>&#160;&#160;&#160;&#160;&#160;&#160;NL = Nouvelle lune<br />En moyenne, entre deux nouvelles lunes (lunaison ou p&eacute;riode synodique),<br />il se passe 29 jours, 12 heures, 44 minutes et 2,9 secondes soit 29,53 jours.</p>');
	  window.document.close();
}

function doCalc(){
var i,month,year;
for (i=0;i<document.forms[0].a.options.length;i++){if (document.forms[0].a.options[i].selected){month=document.forms[0].a.options[i].value}};
for (i=0;i<document.forms[0].b.options.length;i++){if (document.forms[0].b.options[i].selected){year=document.forms[0].b.options[i].value}};

calc(month,year);
}