
var dateSelect = {
  container: $('#scale_1 .date'),
  
  init: function() {
    this.container.html('<button class=\'prev\'>&larr;<\/button>\n<select class=\'year\'><\/select>\n<select class=\'month\'><\/select>\n<select class=\'day\'><\/select>\n<button class=\'next\'>&rarr;<\/button>\n<button class=\'last\'>&rarr;|<\/button>\n');
    
    this.container.find('.year').bind('change', this, function(event) {
      event.data.fillMonths();
      event.data.fillDays();
      event.data.container.find('.day').change();
    });
    
    this.container.find('.month').bind('change', this, function(event) {
      event.data.fillDays();
      event.data.container.find('.day').change();
    });
    
    this.container.find('.day').bind('change', this, function(event) {
      event.data.enablePrevNext();
      year = event.data.container.find('.year option:selected').get(0).value;
      month = event.data.container.find('.month option:selected').get(0).value;
      day = event.data.container.find('.day option:selected').get(0).value;
      event.data.container.data('date', new Date(year, month, day))
      event.data.container.parents('.scale').find('.content').empty();
      app.scalings.refresh();
    });
        
    this.container.find('.prev').bind('click', this, function(event) {
      if (event.data.container.find('.day option:selected').attr('selected', '').prev().attr('selected', 'selected').none()) {
        if (event.data.container.find('.month option:selected').attr('selected', '').prev().attr('selected', 'selected').none()) {
          event.data.container.find('.year option:selected:not(:first-child)').attr('selected', '').prev().attr('selected', 'selected');
          event.data.fillMonths();
          event.data.container.find('.month option:last').attr('selected', 'selected');
        }
        event.data.fillDays();
        event.data.container.find('.day option:last-child').attr('selected', 'selected');
      }
      event.data.container.find('.day').change();
    });
    
    this.container.find('.next').bind('click', this, function(event) {
      if (event.data.container.find('.day option:selected').attr('selected', '').next().attr('selected', 'selected').none()) {
        if (event.data.container.find('.month option:selected').attr('selected', '').next().attr('selected', 'selected').none()) {
          event.data.container.find('.year option:selected:not(:last-child)').attr('selected', '').next().attr('selected', 'selected');
          event.data.fillMonths();
          event.data.container.find('.month option:first').attr('selected', 'selected');
        }
        event.data.fillDays();
        event.data.container.find('.day option:first').attr('selected', 'selected');
      }
      event.data.container.find('.day').change();
    });
    
    this.container.find('.last').bind('click', this, function(event) {
      event.data.selectLastDate();
      event.data.container.find('.day').change();
    });

    this.selectLastDate();
    this.container.find('.day').change();
    
    $('#scale_1 .refresh').bind('click', this, function(event) {
      event.data.container.find('.day').change();
    });
  },
  
  selectLastDate: function() {
    this.fillYears();
    this.container.find('.year option:last-child').attr('selected', 'selected');
    this.fillMonths();
    this.container.find('.month option:last-child').attr('selected', 'selected');
    this.fillDays();
    this.container.find('.day option:last-child').attr('selected', 'selected');
  },
  
  fillYears: function() {
    this.container.find('.year').empty();
    for (year = 2009; year <= 2012; year++) {
      this.container.find('.year').append('<option value="'+year+'">'+year+'</option>');
    };
  },
  
  fillMonths: function() {
    this.container.find('.month').empty();
      monthNames = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
      year = this.container.find('.year option:selected').get(0).value;
      for (month = 0; month < 12; month++) {
        if (year > 2009 || month >= 0) {
          if (year < 2012 || month <= 1) {
            this.container.find('.month').append('<option value="'+month+'">'+monthNames[month]+'</option>');
          };
        };
      };
  },
  
  fillDays: function() {
    this.container.find('.day').empty();
    year = this.container.find('.year option:selected').get(0).value;
    month = this.container.find('.month option:selected').get(0).value;
      this.container.find('.day').empty();
      for (day = 1; day <= 31; day++) {
        if (year > 2009 || month > 0 || day >= 11) {
          if (year < 2012 || month < 1 || day <= 22) {
            if ((new Date(year, month, day)).getMonth() == month) {
              this.container.find('.day').append('<option value="'+day+'">'+day+'</option>');
            };
          };
        };
      };
  },
  
  enablePrevNext: function() {
    this.container.find('.next, .last').attr('disabled', this.container.find('select option:selected:not(:last-child)').any() ? '' : 'disabled');
    this.container.find('.prev').attr('disabled', this.container.find('select option:selected:not(:first-child)').any() ? '' : 'disabled');
  }
}

dateSelect.init();

