
e = function(i) { return document.getElementById(i); };

shownOnce = false;

toggleTags = function() {
  if (e('archives_div').style.display != 'none') {
    e('archives_div').style.display = 'none';
  }
  if (e('tags').style.display == 'none') {
    if (!shownOnce) {
      shownOnce = true;
      var html = e('tags').innerHTML.toLowerCase();
      html = html.replace(new RegExp("<li.*?>", "im"), '');
      html = html.replace(new RegExp("<h2.*?\/h2>", "im"), '');
      html = html.replace(new RegExp("<\/li>", "im"), '');
      e('tags').innerHTML = html;
      for (var i = 0; i < e('tags').childNodes.length; i++) {
      if (e('tags').childNodes[i].style) {
          var size = parseFloat(e('tags').childNodes[i].style.fontSize);
  	  if (!isNaN(size)){
 	    size *= size;
	    size /= 8;
	    size = Math.min(size, 36);
	    e('tags').childNodes[i].style.fontSize = size + 'pt';
	  }
	}
      }
    }
    e('tags').style.display = '';
  } else {
    e('tags').style.display = 'none';
  }
};

archiveData = {};
yearCounts = {};
      var minYear = 9999; 
      var maxYear = 0;

shownArchivesOnce = false;
toggleArchives = function() {
  if (e('tags').style.display != 'none') {
    e('tags').style.display = 'none';
  }
  if (e('archives_div').style.display == 'none') {
    if (!shownArchivesOnce) {
      shownArchivesOnce = true;
      var nodes;
      if (e('archives').childNodes[1].nodeName == 'UL') {
      	nodes = e('archives').childNodes[1].childNodes;
      } else {
      	nodes = e('archives').childNodes[2].childNodes;
      }
      var lastYear = 0;
      for (var i = 1; i < nodes.length; i += 2) {
        var title = nodes[i].childNodes[0].title;
	var url = nodes[i].childNodes[0].href;
	var re =  /\((\d+)\)/;
	var a = re.exec(nodes[i].innerHTML);

	var count = parseInt(a[1]);
	re =  /(\w+) (\d+)/;
	a = re.exec(title);
	var year = parseInt(a[2]);
	var month = a[1];
	if (year != lastYear) {
	  lastYear = year;
	  archiveData[year] = [];
	  yearCounts[year] = 0;
	  minYear = Math.min(year, minYear);
	  maxYear = Math.max(year, maxYear);
	}
	yearCounts[year] += count;
	archiveData[year].unshift({'month': month, 'url': url, 'count': count});
      }
    }
    archiveShowYears();
    e('archives_div').style.display = '';
  } else {
    e('archives_div').style.display = 'none';
  }
};

archiveShowYears = function() {
      var html = '';
      for (var y = minYear; y <= maxYear; y++) {
      	var size = 8 + (yearCounts[y] * 45 / 500);
	html += '<a href="javascript:archiveYear(' + y + ')" style="font-size:' + size + 'pt" title="' + yearCounts[y] + ' entries">' + y + '</a> ';
      }
      e('archives_div').innerHTML = html;
};

archiveYear = function(y) {
  var html = '<div style="text-align:center;font-size:18pt;font-weight:bold">' + y + '</span><br>';
  for (var i = 0; i < archiveData[y].length; i++) {
    size = 8 + archiveData[y][i].count * 15 / (yearCounts[y] / archiveData[y].length);
    html += '<a href="' + archiveData[y][i].url + '" title="' + archiveData[y][i].count + ' entries" style="font-size:' + size + 'pt">' + archiveData[y][i].month + '</a> ';
  }
  e('archives_div').innerHTML = html + '<br><a href="javascript:archiveShowYears()" style="font-size:12pt;">&laquo; Show Years</a>';
};

twitterCallback = function(t) {
  e('twitter_time').innerHTML = relative_time(t[0].created_at);
  e('twitter_status').innerHTML = t[0].text.replace(/((https?|s?ftp|ssh)\:\/\/[^"\s\<\>]*[^.,;'">\:\s\<\>\)\]\!])/g,function(F){return'<a href="'+F+'">'+F+"</a>"}).replace(/\B@([_a-z0-9]+)/ig,function(F){return F.charAt(0)+'<a href="http://www.twitter.com/'+F.substring(1)+'">'+F.substring(1)+"</a>"});
};

function relative_time(C){var B=C.split(" ");C=B[1]+" "+B[2]+", "+B[5]+" "+B[3];var A=Date.parse(C);var D=(arguments.length>1)?arguments[1]:new Date();var E=parseInt((D.getTime()-A)/1000);E=E+(D.getTimezoneOffset()*60);if(E<60){return"less than a minute ago"}else{if(E<120){return"about a minute ago"}else{if(E<(60*60)){return(parseInt(E/60)).toString()+" minutes ago"}else{if(E<(120*60)){return"about an hour ago"}else{if(E<(24*60*60)){return"about "+(parseInt(E/3600)).toString()+" hours ago"}else{if(E<(48*60*60)){return"1 day ago"}else{return(parseInt(E/86400)).toString()+" days ago"}}}}}}};
