/*
 設定項目
*/

// 画像ファイルの格納ディレクトリのURL
var imagedir = "img/calendar/moon/";

// 画像ファイルの拡張子
var suffix   = ".gif";

// 画像ファイルの表示サイズ（幅）
var imageWidth = 50;

// 画像ファイルの表示サイズ（幅）
var imageHeight = 50;


/*
    PNG対応ブラウザを判定
      対応ブラウザなら true 非対応なら false
      Netscape Navigator 4.04以降
      Microsoft Internet Explorer 4.0以降(Windows版のみ)
      Mozilla (Seamonkey)を対応ブラウザと判定。
*/

function enablePNG() {
  var ver  = parseFloat(navigator.appVersion);
  var name = navigator.appName;
  var platform = navigator.platform;
  var pngOK = false;

  if (name == "Netscape" && ver >= 4.04) {
    pngOK = true;
  } else if (name == "Microsoft Internet Explorer" && ver >= 4.0) {
    if (platform.charAt(0) == "W") {
      pngOK = true;
    }
  } else if (name == "Mozilla") {
    pngOK = true;
  }
  return pngOK;
}

/*
   新月日計算
   引数  　julian  ユリウス通日
   戻り値  与えられたユリウス通日に対する直前の新月日(ユリウス日)
*/
function getNewMoon(julian) {

  var k     = Math.floor((julian - 2451550.09765) / 29.530589);
  var t     = k / 1236.85;
  var nmoon = 2451550.09765
             + 29.530589  * k
             +  0.0001337 * t * t
             -  0.40720   * Math.sin((201.5643 + 385.8169 * k) * 0.017453292519943)
             +  0.17241   * Math.sin((2.5534 +  29.1054 * k) * 0.017453292519943);
  return (nmoon);         // julian - nmoonが現在時刻の月齢

}

/*
    ユリウス通日計算
    引数　　時刻(Dateオブジェクト)
    戻り値　ユリウス通日(浮動小数点数)
*/
function getJulian(date) {

  return date.getTime() / 86400000.0+2440587.5;

}

/*
    0,1,2,3 ... を 00,01,02,03 ... に。
   （変な関数名だ）
*/
function maeZero(num){

  if (num < 10){
    return '0' + num;
  } else {
    return num;
  }

}


/*
    メイン処理
*/

var moonage;
var image;

var appName  = navigator.appName.charAt(0);
var appVer   = navigator.appVersion.charAt(0);

var nowDate   = new Date();

julian = getJulian(nowDate);

var year    = nowDate.getYear();
if(year < 2000){
  year += 1900;
}
var month  = nowDate.getMonth() + 1;
var day    = nowDate.getDate();
var week   = (new Array('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'))[nowDate.getDay()];
var hour   = nowDate.getHours();
var minute = nowDate.getMinutes();

var nmoon = getNewMoon(julian);
// getNewMoonは新月直前の日を与えるとうまく計算できないのでその対処
// (一日前の日付で再計算してみる)
if (nmoon > julian) {
   nmoon = getNewMoon(julian - 1.0);
}

var age     = julian - nmoon;         // julian - nmoonが現在時刻の月齢

if(appName == "N" && appVer == "2") {
    moonage = age;
} else {
    moonage = new String(age);
}

// 月齢を表示用に編集（小数以下第一位まで表示）
// 画像ファイル名を編集
// でもこんな回りくどいことをしなくてもいいような気が。。。。
if (age >= 0) {
  moonage = moonage + ".0";     // 小数部が0の時に備えた処理
  if (moonage.charAt(0) == ".") { // 整数部が飛ばされたときの処理
    moonage = "0" + moonage;
  }
  if(age >= 10) {
    moonage = moonage.substring(0,4);
    var image   = imagedir + moonage.substring(0,2) + suffix;
  } else {
    moonage = moonage.substring(0,3);
    image   = imagedir + moonage.substring(0,1) + suffix;
  }
  /*
  document.write(year, '-', maeZero(month), '-', maeZero(day), ' (', week, ') ');
  document.write(' ', maeZero(hour), ':', maeZero(minute), ' ');
  document.write('moonage: ', moonage);
  
  if(enablePNG() == true){
    document.write(' <img width="', imageWidth, '" height="', imageHeight, '" src="', image, '" alt="" \/>');
  }
  */
  document.write(' <img width="', imageWidth, '" height="', imageHeight, '" src="', image, '" alt="" \/>');
}

