
var idtop = 
{
  sunpos_x: null,
  sunpos_y: null,
  moonpos_x: null,
  moonpos_y: null,
  backdrop: null,
  moonset: null,
  sunrise: null,
  sunset: null,
  near_sr: 0,
  near_ss: 0,
  lat: 0,
  longi: 0,

  sunInfo: function()
  {
    var latlong = $.cookie('latlong');

    if (latlong)
      idtop._suninfo(JSON.parse(latlong));
    else
      $.getJSON("/api/latlong/", idtop._suninfo);
  },

  _suninfo: function(data)
  {
    $.cookie('latlong', JSON.stringify(data), { expires: 30, path: '/', domain: '.idthis.org' });

    idtop.resetScene(data);
    setInterval(idtop.resetScene, 60000);
  },

  resetScene: function(data)
  {
    if (data && data["lat"])
    {
      idtop.lat = data["lat"];
      idtop.longi = data["long"];
    }

    suntimes = calcSun(idtop.lat, idtop.longi)

    idtop.sunrise = suntimes["sunrise"];
    idtop.sunset  = suntimes["sunset"];
    idtop.moonset = suntimes["moonset"];

    idtop.pickBackdrop();
    idtop.getSunMoonPos();
    idtop.setScene();
  },

  pickBackdrop: function()
  {
    var sunrise = idtop.sunrise;
    var sunset  = idtop.sunset;

    now = new Date();

    var near_sr = (now - sunrise) / 1000 / 60;
    var near_ss = (now - sunset) / 1000 / 60;

    idtop.near_sr = near_sr;
    idtop.near_ss = near_ss;

    var backdrop = "midday";

    var night_line = 40;
    var sun_line = 10;
    var presun_line = 20;

    if (near_sr < -night_line)
      backdrop = "night";
    else if (near_sr < -presun_line)
      backdrop = "twilight";
    else if (near_sr < 0)
      backdrop = "dawn";
    else if (near_sr >= 0 && near_sr <= sun_line)
      backdrop = "sunrise";
    else if (near_ss > night_line)
      backdrop = "night";
    else if (near_ss > sun_line)
      backdrop = "twilight";
    else if (near_ss >= -presun_line && near_ss <= sun_line)
      backdrop = "sunset";

    idtop.backdrop = backdrop;
  },

  getSunMoonPos: function()
  {
    now = new Date();

    var pi = 3.14159;
    var path_diameter = 360;
    var pathsquish = 1.4;
    var sunrise = idtop.sunrise;
    var sunset  = idtop.sunset;
    var moonset = idtop.moonset;

    // now get the sun and moon pos
    if (now >= sunrise && now <= sunset)
    {
      var total = sunset - sunrise;
      var passed = now - sunrise;
      
      idtop.sunpos_x = Math.round(path_diameter * (passed / total));
      idtop.sunpos_y = Math.sin((passed / total)*pi) / pathsquish;
    }
    else
    {
      idtop.sunpos_x = null;
      idtop.sunpos_y = null;
    }
  
    // only allow the moon position if it's night or twilight
    if (now >= sunrise && now <= moonset && (idtop.backdrop == "night" || idtop.backdrop == "twilight"))
    {
      var total = moonset - sunrise;
      var passed = now - sunrise;
      
      idtop.moonpos_x = Math.round(path_diameter * (passed / total));
      idtop.moonpos_y = Math.sin((passed / total)*pi) / pathsquish;
    }
    else
    {
      idtop.moonpos_x = null;
      idtop.moonpos_y = null;
    }
  },

  setScene: function()
  {
    var path = "http://static.idthis.org/images/top/";
    var backdrop = idtop.backdrop;

    $('#idtop_bg').css('background-image', "url(" + path + backdrop + "_bg.png)");
    $('#idtop').css('background-image', "url(" + path + backdrop + ".png)");
    $('#idtop_r').css('background-image', "url(" + path + backdrop + "_r.png)");

    var xoffset = 280;
    var yheight = 105;
    var sunrad = 23;
    var moonrad = 15;

    if (idtop.sunpos_x)
    {
      $('#idsun').css('top', 105 - Math.round(idtop.sunpos_y * 105) - sunrad + "px");
      $('#idsun').css('left', xoffset + idtop.sunpos_x - sunrad + "px");
      $('#idsun').show();
    }
    else
      $('#idsun').hide();

    if (idtop.moonpos_x)
    {
      $('#idmoon').css('top', 105 - Math.round(idtop.moonpos_y * 105) - moonrad + "px");
      $('#idmoon').css('left', xoffset + idtop.moonpos_x - moonrad + "px")
      $('#idmoon').show();
    }
    else
      $('#idmoon').hide();
  }
}
