Timeline.GregorianDateLabeller.prototype.labelPrecise = function(date) {
    var months = new Array("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec");
    var d = Timeline.DateTime.removeTimeZoneOffset(date, this._timeZone);
    return months[d.getMonth()] + ' ' + d.getFullYear();
};

Timeline.DefaultEventSource.Event.prototype.fillInfoBubble = function(elmt, labeller) {
  if (this._instant) {
      if (this.isImprecise()) {
          elmt.appendChild(elmt.ownerDocument.createTextNode(labeller.labelPrecise(this._start)));
          elmt.appendChild(elmt.ownerDocument.createElement("br"));
          elmt.appendChild(elmt.ownerDocument.createTextNode(labeller.labelPrecise(this._end)));
      } else {
          elmt.appendChild(elmt.ownerDocument.createTextNode(labeller.labelPrecise(this._start)));
      }
  } else {
      if (this.isImprecise()) {
          elmt.appendChild(elmt.ownerDocument.createTextNode(
              labeller.labelPrecise(this._start) + " ~ " + labeller.labelPrecise(this._latestStart)));
          elmt.appendChild(elmt.ownerDocument.createElement("br"));
          elmt.appendChild(elmt.ownerDocument.createTextNode(
              labeller.labelPrecise(this._earliestEnd) + " ~ " + labeller.labelPrecise(this._end)));
      } else {
          elmt.appendChild(elmt.ownerDocument.createTextNode(labeller.labelPrecise(this._start)));
          elmt.appendChild(elmt.ownerDocument.createElement("br"));
          elmt.appendChild(elmt.ownerDocument.createTextNode(labeller.labelPrecise(this._end)));
      }
  }
}

Timeline.DefaultEventSource.Event.prototype.fillInfoBubble = function(elmt, theme, labeller) {
  var doc = elmt.ownerDocument;

  var title = this.getText();
  var link = this.getLink();
  var image = this.getImage();

  if (image != null) {
      var img = doc.createElement("img");
      img.src = image;

      theme.event.bubble.imageStyler(img);
      elmt.appendChild(img);
  }

  var divTitle = doc.createElement("div");
  var textTitle = doc.createTextNode(title);
  if (link != null) {
      var a = doc.createElement("a");
      a.href = link;
      a.appendChild(textTitle);
      divTitle.appendChild(a);
  } else {
      divTitle.appendChild(textTitle);
  }
  theme.event.bubble.titleStyler(divTitle);
  elmt.appendChild(divTitle);

  var divTime = doc.createElement("div");
  this.fillTime(divTime, labeller);
  theme.event.bubble.timeStyler(divTime);
  elmt.appendChild(divTime);

  var divBody = doc.createElement("div");
  this.fillDescription(divBody);
  theme.event.bubble.bodyStyler(divBody);
  elmt.appendChild(divBody);
};
       
function onLoad() {
  var eventSource = new Timeline.DefaultEventSource();
  
  var theme = Timeline.ClassicTheme.create();
  theme.event.instant.icon = Timeline.urlPrefix + "images/dull-green-circle.png";
              
  var bandInfos = [
    Timeline.createBandInfo({
        eventSource:    eventSource,
        date:           "Jan 1 2008 00:00:00 GMT",
        width:          "88%", 
        intervalUnit:   Timeline.DateTime.YEAR, 
        intervalPixels: 180,
        theme: theme
    }),
    Timeline.createBandInfo({
        overview:       true,
        eventSource:    eventSource,
        date:           "Jan 1 2008 00:00:00 GMT",
        width:          "12%", 
        intervalUnit:   Timeline.DateTime.YEAR, 
        intervalPixels: 50,
        theme: theme
    })
  ];
  bandInfos[1].syncWith = 0;
  bandInfos[1].highlight = true;
  
  tl = Timeline.create(document.getElementById("timeline"), bandInfos);
  Timeline.loadJSON("/portfolio/timeline_data", function(json, url) { eventSource.loadJSON(json, url); });
}