/* ***************************************
   Supporting code and necessary functions
*****************************************/
// constants
var synodic = 29.53058867;            // the synodic period
var msPerDay = 24 * 60 * 60 * 1000;   // milliseconds per day = 86 400 000

function rnd(val, prec) {
  // general function for rounding to specified precision
  val = val * Math.pow(10,prec);
  val = Math.round(val);
  val = val / Math.pow(10,prec);
  return val;
}

function moonPhPer(anyDate) {
// calculate the moon phase as a percent
  var baseDate = new Date(Date.UTC(2003, 6,  29, 6, 53, 0)); // New moon on July 29, 2003, 6:53:00

//  var diff = anyDate - baseDate + msPerDay;   // the difference in milliseconds klok loopt hiermee 1 dag voor??
  var diff = anyDate - baseDate;   // the difference in milliseconds
  var phase = Math.abs(diff) / (synodic * msPerDay); // phase percent
  phase *=100;        // make it a ##.##% figure
  while(phase>100) { phase -= 100; }
  return phase;
}

function moonPhase(phase) {
  // convert moon phase percent to nice words
  if(phase >= 0 && phase <= 2.49) {
    var phaseName = "Nieuwe maan";
  } else if(phase >= 2.5 && phase <= 22.49) {
    var phaseName = "Wassende maan";
  } else if(phase >= 22.5 && phase <= 27.49) {
    var phaseName = "Eerste Kwartier";
  } else if(phase >= 27.5 && phase <= 47.49) {
    var phaseName = "Wassende maan";
  } else if(phase >= 47.5 && phase <= 52.49) {
    var phaseName = "Volle maan";
  } else if(phase >= 52.5 && phase <= 73.49) {
    var phaseName = "Afnemende maan"; 
  } else if(phase >= 73.5 && phase <= 77.49) {
    var phaseName = "Laatste kwartier";
  } else if(phase >= 77.5 && phase <= 97.49) {
    var phaseName = "Afnemende maan";
  } else {
    var phaseName = "Nieuwe maan";
  }
  return phaseName;
}

var today = new Date();
var phasePercent = moonPhPer(today);
var phName = moonPhase(phasePercent);

// calculate percent of full for the moon
if ( phasePercent <= 50.0 ) {
  var fullness = phasePercent * 2;
} else {
  var fullness = ( 100 - phasePercent ) * 2; 
}
var daysTillNew = (1-phasePercent/100)*synodic;
if (daysTillNew < 0) daysTillNew += synodic;
// var daysTillFull = (1-fullness/100)*synodic;
var daysTillFull = daysTillNew - synodic/2; // Correctie BB dd 27-05-06
if (daysTillFull < 0) daysTillFull += synodic;

var newDate = new Date(today.valueOf() + (daysTillNew * msPerDay));
var fullDate = new Date(today.valueOf() + (daysTillFull * msPerDay));

var left  = (phasePercent <= 50.0) ? "images/singleblack.gif" : "images/singlewhite.gif"; // pictures to draw moon
var right = (phasePercent <= 50.0) ? "images/singlewhite.gif" : "images/singleblack.gif"; // pictures to draw moon

function showMoon(size,border,alignment){  // Show the moon picture
  var height = 1;

  document.write("<table border='0'",border,"' cellspacing='0' cellpadding='5' align='",alignment,"'><tr><td align='center'>")

  for (i = -(size-1); i < size; ++i) {
    var wid=2*parseFloat(Math.sqrt((size*size)-(i*i)));
    if (phasePercent <= 50) {
      document.write ("<img src='"+left +"' border='0' height='1' width='"+(wid*((100-fullness)/100))+"'>")
      document.write ("<img src='"+right+"' border='0' height='1' width='"+(wid*((fullness)/100))+"'>")
    } else {
      document.write ("<img src='"+left+"' border='0' height='1' width='"+(wid*((fullness)/100))+"'>")
      document.write ("<img src='"+right +"' border='0' height='1' width='"+(wid*((100-fullness)/100))+"'>")
    }
    document.write ("<br>")
  }
  document.write("</td></tr></table>");
}
function showMessages(param) { // Display text messages
  if (param == null || param == 0 ) param = 63;
  if (param >= 32) { param -= 32;
    document.write("Het is vandaag: " + today.toLocaleString() + "<br>");}
  if (param >= 16) { param -= 16;
    document.write("De maan cyclus is voor : " + rnd(phasePercent,1) + "% voltooid<br>");}
  if (param >= 8) { param -= 8;
    document.write(rnd(fullness,1) + "% van de maan is verlicht<br>");}
  if (param >= 4) { param -= 4;
    document.write("Deze schijngestalte heet: " + phName + "<br>");}
  if (param >= 2) { param -= 2;
    document.write("Volgende nieuwe maan is over " + rnd(daysTillNew,1) + " dagen (op " + newDate.toLocaleString() + ")<br>");}
  if (param >= 1) {
    document.write("Volgende volle maan is over " + rnd(daysTillFull,1) + " dagen (op " + fullDate.toLocaleString() + ")<br>");}
}


