var synodic = 29.53058867;
var msPerDay = 24*60*60*1000;

function rnd(val, prec) 
  {
  val = val * Math.pow(10,prec);
  val = Math.round(val);
  val = val / Math.pow(10,prec);
  return val;
  }

function moonPhPer(anyDate)
  {
  var baseDate = new Date();
  baseDate.setUTCFullYear(2003);
  baseDate.setUTCMonth(6);
  baseDate.setUTCDate(29);
  baseDate.setUTCHours(6);
  baseDate.setUTCMinutes(53);
  baseDate.setUTCSeconds(0);

  var diff = anyDate - baseDate + msPerDay;
  var phase = Math.abs(diff) / (synodic * msPerDay);
  phase *=100;
  while(phase>100)
    {
    phase -= 100;
    }
  return phase;
  }

function moonPhase(phase)
  {
  if(phase >= 0 && phase <= 2.49)
    {
    var phaseName = "Luna Nuova";
    }
  else if(phase >= 2.5 && phase <= 22.49)
    {
    var phaseName = "Luna Crescente";
    }
  else if(phase >= 22.5 && phase <= 27.49)
    {
    var phaseName = "Primo Quarto";
    }
  else if(phase >= 27.5 && phase <= 47.49)
    {
    var phaseName = "Luna Gobba";
    }
  else if(phase >= 47.5 && phase <= 52.49)
    {
    var phaseName = "Luna Piena";
    }
  else if(phase >= 52.5 && phase <= 73.49)
    {
    var phaseName = "Luna Calante";
    }
  else if(phase >= 73.5 && phase <= 77.49)
    {
    var phaseName = "Ultimo Quarto";
    }
  else if(phase >= 77.5 && phase <= 97.49)
    {
    var phaseName = "Waning crescent";
    }
  else
    {
    var phaseName = "Luna Nuova";
    }

  return phaseName;
  }

var today = new Date();
var phasePercent = moonPhPer(today);
var phName = moonPhase(phasePercent);

if ( phasePercent <= 50.0 )
  {
  var fullness = phasePercent * 2;
  }
else
  {
  var fullness = ( 100 - phasePercent ) * 2;
  }

var daysTillNew = (1-phasePercent/100)*synodic;
var daysTillFull = (1-fullness/100)*synodic;
var newDate = new Date(today.valueOf() + (daysTillNew * msPerDay));
var fullDate = new Date(today.valueOf() + (daysTillFull * msPerDay));

document.write("La percentuale della fase lunare è " + rnd(phasePercent,2) + "%. ");
document.write("La percentuale totale di luna visibile è " + rnd(fullness,2) + "%. ");
document.write("Siamo in fase di <b>" + phName + "</b>. ");
document.write("La prossima <b>Luna Nuova</b> sarà fra " + rnd(daysTillNew,2) + " giorni (" + newDate + "), mentre ");
document.write("la prossima <b>Luna Piena</b> cadrà fra " + rnd(daysTillFull,2) + " giorni (" + fullDate + ").");
