var LineDiet = {};
LineDiet.CurrentUser = {};

LineDiet.Init = {
  all: function() {
    $('input[type="text"]').addClass('text');
    $('input[type="password"]').addClass('password');
    $('input[type="checkbox"]').addClass('checkbox');
    $('input[type="radio"]').addClass('radio');
    $('input[type="submit"]').addClass('submit');
    $('p:first-child').addClass('first');
    $('li:first-child').addClass('first');
    LineDiet.Init.chart();
    LineDiet.Init.fadeMessages();
    LineDiet.Init.datePickers();
    LineDiet.Init.weightUnitSelector();
  },

  chart: function() {
   var viz = $(".GoogleViz");
   if(viz.size() > 0) {
     google.load('visualization', '1', { 'callback': LineDiet.Init.googleVisualization, 'packages': ['annotatedtimeline'] });
   }
  },

  googleVisualization: function() {
    
    if(typeof chart_data != "undefined" && chart_data != null) {
      $(".GoogleViz.Weight").each(function() {
        var id = $(this).attr('id').replace(/\D+/, '');
        LineDiet.Chart.plotWeight(this, id, chart_data);
      });

      $(".GoogleViz.Scores").each(function() {
        var id = $(this).attr('id').replace(/\D+/, '');
        LineDiet.Chart.plotScores(this, id, chart_data);
      });
    }
  },

  weightUnitSelector: function() { $('#person_weight_units').change(function() { $('.weight_units').text(this.options[this.selectedIndex].text); }); },

  fadeMessages: function() { $('.Messages.Fade').slideDown('slow', function() {
    var el = this;
    setTimeout( function() { $(el).fadeOut('slow'); }, 1000 ); });
  },

  datePickers: function() {

    $('.DatePicker').datepicker({
      defaultDate:     LineDiet.CurrentDate,
      dateFormat:      'yy/mm/dd',
      numberOfMonths:  1,
      showOtherMonths: false,
      /* showButtonPanel: true */
      onSelect: function(dateText, inst) { document.location.href = "/people/" + LineDiet.CurrentUser.id + "/weights/new?date=" + dateText }
    });

    $('.DatePickerToggle').toggle(
      function() { $('.DatePicker').slideDown(); },
      function() { $('.DatePicker').slideUp(); }
    );
  }
};

LineDiet.Chart = {

  plotWeight: function(element, line_id, json) {
    var weight_data = new google.visualization.DataTable();

    weight_data.addColumn('date', 'Date');
    weight_data.addColumn('number', 'Actual Weight');
    weight_data.addColumn('string', 'Actual Annotation Title');
    weight_data.addColumn('string', 'Actual Annotation Description');
    weight_data.addColumn('number', 'Target Weight');
    weight_data.addColumn('string', 'Target Annotation Title');
    weight_data.addColumn('string', 'Target Annotation Description');
    weight_data.addRows(json.weights.length);

    for(i=0; i < json.weights.length; i++) {
      var weight = json.weights[i];
      weight_data.setValue(i, 0, new Date(weight.date));
      weight_data.setValue(i, 1, weight.actual);
      weight_data.setValue(i, 4, weight.target);
    }

    var chart = new google.visualization.AnnotatedTimeLine(element);
    chart.draw(
      weight_data, 
      {
       'scaleType': 'allmaximize',
       'thickness': 2,
       'allValuesSuffix': ' ' + LineDiet.CurrentUser.weightUnits,
       'max': json.max_weight + 5, 
       'min': json.min_weight - 5, 
       'displayRangeSelector': false,
       'displayZoomButtons': false,
       'displayAnnotations': false,
       'colors': new Array('#993333', '#9d9d9d')}
    );
  },

  plotScores: function(element, line_id, json) {
    var score_data = new google.visualization.DataTable();

    score_data.addColumn('date', 'Date');
    score_data.addColumn('number', 'Exercise Score');
    score_data.addColumn('string', '');
    score_data.addColumn('string', '');
    score_data.addColumn('number', 'Diet Score');
    score_data.addColumn('string', '');
    score_data.addColumn('string', '');
    score_data.addColumn('number', 'Weight');
    score_data.addColumn('string', '');
    score_data.addColumn('string', '');
    score_data.addColumn('number', 'Trend');
    score_data.addRows(json.weights.length);

    for(i=0; i < json.weights.length; i++) {
      var weight = json.weights[i];
      score_data.setValue(i, 0, new Date(weight.date));
      score_data.setValue(i, 1, weight.exercise_score);
      score_data.setValue(i, 4, weight.diet_score);
      score_data.setValue(i, 7, weight.actual);
      score_data.setValue(i, 10, weight.target);
    }

    score_chart = new google.visualization.AnnotatedTimeLine(element);
    score_chart.draw(
      score_data, 
      {
       'scaleType': 'allmaximize',
       'thickness': 2,
       'max': 5, 
       'min': 0, 
       'displayRangeSelector': false,
       'displayZoomButtons': false,
       'displayAnnotations': false,
       'colors': new Array('#182b6d', '#7872ba')}
    );
    score_chart.hideDataColumns(new Array(2,3,5,6,7,8,9,10));
  }
};

$(document).ready(LineDiet.Init.all);
