function Fat () {
  // all, year, quarter, month
  const durationArray = [ false, 31557600000, 7889400000, 2629800000 ];
  const ALL_DATA=0;
  const YEAR=1;
  const QUARTER=2;
  const MONTH=3;
  var weightdata = [],
      fatdata = [],
      weightsmooth = [],
      fatsmooth = [],
      duration,
      durationButtons;

  function plotopts() {
    var opts = { xaxis: { mode: "time" },
                 lines: {show: true},
                 points: {show: false} };
    if(duration === MONTH ) {
      opts.points = { show: true };
    }
    if(duration != ALL_DATA) {
      opts.xaxis.min = (new Date()).getTime() - durationArray[duration];
    }
    return opts;
  }
        
  function sliceForDuration(arr) {
    if(!durationArray[duration]) {
      return arr;
    } else {
      var days = Math.round(durationArray[duration]/86400000);
      return arr.slice(arr.length - days, arr.length);
    }
  }

  function regraph() {
    $.plot($("#weightgraph"), [{ label: "Raw", data: sliceForDuration(weightdata)}, {label: "Smoothed", data:  sliceForDuration(weightsmooth)}], plotopts());
    $.plot($("#fatgraph"), [{ label: "Raw", data: sliceForDuration(fatdata)}, {label: "Smoothed", data: sliceForDuration(fatsmooth)}], plotopts());
  }

  function loadDuration() {
    // In the future, use a cookie
    durationButtons.check(MONTH);
  }

  function saveDuration() {
    // In the future, use a cookie
  }

  function smooth(arr) {
    // per http://www.fourmilab.ch/hackdiet/www/subsubsection1_4_1_0_8_3.html#SECTION0410830000000000000
    var avg = arr[0][1];
    var newarr = [];
    $.each(arr, function(i, x) {
      avg = avg + 0.1 * (x[1] - avg);
      newarr.push([x[0], avg]);
    });
    return newarr;
  }

  function click_duration (e) {
    duration = e.newValue.index;
    saveDuration();
    regraph();
  }

  function data_cb (data) {
    var datestr, weight, fat, y, m, d, t, tmp;
    $("table#fat").text(" ");
    $.each(data.split("\n"), function(i, x) {
      tmp = x.split(" ");
      datestr = tmp[0];
      weight = tmp[1];
      fat = tmp[2];
      if(datestr && weight && fat) {
        tmp = datestr.split("-");
        y = tmp[0];
        m = tmp[1];
        d = tmp[2];
        t = (new Date(y, m-1, d-1)).getTime();
        weightdata.push([t, parseFloat(weight)]);
        fatdata.push([t, parseFloat(fat)]);
      }
    });
    weightsmooth = smooth(weightdata);
    fatsmooth = smooth(fatdata);
    loadDuration();
    regraph();
  }

  durationButtons = new YAHOO.widget.ButtonGroup("buttongroup1") 
  $.get("fat.txt", data_cb);
  durationButtons.on("checkedButtonChange", click_duration);
}

$(document).ready(Fat);



