var GoogleFeed = Class.create();
GoogleFeed.prototype = Object.extend(new Object, {
  entries: [],
  dow_labels: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
  initialize: function() {
  },
  fetch: function(task_index) {
    if (!task_index) { task_index = 0; }
    if (!this.sources[task_index]) {
      this.draw();
      return;
    }
    var task = this.sources[task_index];
    var feed = new google.feeds.Feed(task['url']);
    feed.setNumEntries(this.max_disp);
    feed.load(function(result) {
      if (!result.error) {
        for (var i = 0; i < result.feed.entries.length; i++) {
          this.entries.push({'class': task['class'], 'entry': result.feed.entries[i], 'pubDate': new Date(result.feed.entries[i].publishedDate)});
        }
      }
      if (this.sources.length - 1 == task_index) {
        this.draw();
      } else {
        this.fetch(task_index + 1);
      }
    }.bind(this));
  },
  draw: function() {
    this.entries.sort(function(a, b){
      return b['pubDate'].getTime() - a['pubDate'].getTime();
    });
    var container = document.getElementById(this.elem_id);
    var tmp_div   = document.createElement('DIV');
    var items     = []
    var i;
    for (i = 0; i < this.entries.length && i < this.max_disp; i++) {
      var pubdate = new Date(this.entries[i]['entry'].publishedDate);
      var property = {
        klass:       this.entries[i]['class'],
        title:       this.entries[i]['entry'].title,
        content:     this.entries[i]['entry'].content,
        link:        this.entries[i]['entry'].link,
        year:        pubdate.getYear(),
        month:       pubdate.getMonth() + 1,
        day:         pubdate.getDate(),
        day_of_week: this.dow_labels[pubdate.getDay()]
      }
      if (property['year'] < 1900) { property['year'] += 1900; }
      items.push(this.templates['item'].evaluate(property));
    }
    tmp_div.innerHTML = items.join('');
    while(container.childNodes.length > 0) { container.removeChild(container.lastChild); }
    while(tmp_div.childNodes.length   > 0) { container.appendChild(tmp_div.removeChild(tmp_div.firstChild)); }
  }
});

GoogleFeed.run = function() {
  var gf = new GoogleFeed();
  gf.fetch();
}

