function more_formatters(formatter) {
	switch(formatter) {
	case "formatdate":
		return function(data) {
			var m = data.match(/(\d\d\d\d)-(\d\d)-(\d\d)T(\d\d):(\d\d)/);
			var date = m ? new Date(Date.UTC(m[1], m[2]-1, m[3], m[4], m[5])) : new Date(data);
			var now = new Date();
			var milliseconds = now-date;
			var seconds = Math.floor(milliseconds/1000);
			milliseconds -= seconds*60;
			var minutes = Math.floor(seconds/60);
			seconds -= minutes*60;
			var hours = Math.floor(minutes/60);
			minutes -= hours*60;
			var days = Math.floor(hours/24);
			hours -= days*24;
			
			var ago = [];
			if ( days > 1 )
				ago.push(days+" days");
			else if ( days )
				ago.push(days+" day");
			if ( hours )
				ago.push(hours+" hours");
			else if ( hours )
				ago.push(hours+" hour");
			if ( minutes )
				ago.push(minutes+" minutes");
			else if ( minutes )
				ago.push(minutes+" minute");
			if ( seconds )
				ago.push(seconds+" seconds");
			else if ( seconds )
				ago.push(seconds+" second");
			
			if ( ago.length )
				data = ago.join(", ") + " ago";
			else
				data = "just now";
			
			return data;
		}
		break;
	case "commentformat":
		return function(data) {
			data = data.replace(/https?:\/\/[\w\d:#@%\/;$()~_?\+-=\\\.&]*/gi, function(m) {
				m = m.replace(/&/g, "&amp;")
			        .replace(/</g, "&lt;")
			        .replace(/>/g, "&gt;")
					.replace(/"/g, "&quot;");
				
				return '<a rel=nofollow href="'+m+'">'+m+'</a>';
			});
			return data;
		}
		break;
	}
	return null;
}
var rcomments = jsontemplate.Template("<h2>Recent Comments</h2>\n<div id=\"comments\">\n\t<ul class=dsq-widget-list>\n\t{.repeated section message}\n\t\t<li class=dsq-widget-item>\n\t\t{.section author}\n\t\t\t<a href=\"http://disqus.com/{username|html-attr-value}/\">\n\t\t\t\t{.section avatar}\n\t\t\t\t<img class=dsq-widget-avatar src=\"{medium|html-attr-value}\">\n\t\t\t\t{.or}\n\t\t\t\t<img class=dsq-widget-avatar src=\"http://mediacdn.disqus.com/1000/images/noavatar92.png\">\n\t\t\t\t{.end}\n\t\t\t</a>\n\t\t\t<a class=dsq-widget-user href=\"http://disqus.com/{username|html-attr-value}/\">{display_name|html}</a>\n\t\t{.end}\n\t\t{.section anonymous_author}\n\t\t\t<a href=\"http://disqus.com/guest/{email_hash|html-attr-value}/\">\n\t\t\t\t<img class=dsq-widget-avatar src=\"http://www.gravatar.com/avatar/{email_hash|html-attr-value}?d=http%3A%2F%2Fmediacdn.disqus.com%2F1000%2Fimages%2Fnoavatar92.png\">\n\t\t\t</a>\n\t\t\t<a class=\"dsq-widget-user dsq-unregistered-user\" href=\"http://disqus.com/guest/{email_hash|html-attr-value}/\">{name|html}</a>\n\t\t{.end}\n\t\t\t<span class=dsq-widget-comment>\n\t\t\t\t{message|commentformat}\n\t\t\t</span>\n\t\t{.section thread}\n\t\t\t<p class=dsq-widget-meta>\n\t\t\t\t<a href=\"{url|html-attr-value}\">{title|html}</a>\n\t\t\t\t·\n\t\t\t\t<a href=\"{url|html-attr-value}#comment-{comment-id|html-attr-value}\">{created_at|formatdate}</a>\n\t\t\t</p>\n\t\t{.end}\n\t\t</li>\n\t{.end}\n\t</ul>\n\t<a href=\"http://disqus.com/\">Powered by Disqus</a>\n</div>\n", { more_formatters:more_formatters });
var tweetsTpl = jsontemplate.Template("<asside id=tweets>\n\t<header>\n\t\t<img class=avatar src=\"{base|html-attr-value}avatar-45.png\" alt=\"\">\n\t\t<span class=name>{name|html}</span>\n\t\t<span class=user><a href=\"http://twitter.com/nadir_seen_fire\">@{user|html}</a></span>\n\t</header>\n{.repeated section tweets}\n\t<div class=tweet>\n\t\t<p>{text|commentformat}</p>\n\t\t<span class=date>{created_at|formatdate}</span>\n\t</div>\n{.end}\n\t<footer>\n\t\t<a class=follow href=\"http://twitter.com/{user|html-attr-value}\"><img src=\"{base|html-attr-value}follow_me.png\" alt=\"Follow me on Twitter\"></a>\n\t</footer>\n</asside>\n", { more_formatters:more_formatters });
if ( window.SyntaxHighlighter )
	SyntaxHighlighter.config.clipboardSwf = base+"syntaxhighlighter/clipboard.swf";

jQuery(function($) {
	
	var $grafts = $("#underlayer .graft");
	
	// Find grafts
	var $a = $grafts.filter('.a');
	var $b = $grafts.filter('.b');
	var $c = $grafts.filter('.c');
	var $d = $grafts.filter('.d');
	
	// Extract
	var bgA = $a.css("background-position").split(" ");
	var bgB = $b.css("background-position").split(" ");
	var bgC = $c.css("background-position").split(" ");
	var bgD = $d.css("background-position").split(" ");
	
	// Parse ints
	bgA = [ parseInt(bgA[0], 10), parseInt(bgA[1], 10) ];
	bgB = [ parseInt(bgB[0], 10), parseInt(bgB[1], 10) ];
	bgC = [ parseInt(bgC[0], 10), parseInt(bgC[1], 10) ];
	bgD = [ parseInt(bgD[0], 10), parseInt(bgD[1], 10) ];
	
	var sizes = {
		a: [467, 366],
		b: [1004, 1690],
		c: [1004, 1690],
		d: [673, 958]
	}
	
	setInterval(function() {
		bgA[0] -= 1;
		bgA[1] += 0.1;
		bgB[0] += 1.1;
		bgC[0] += 1;
		bgC[1] += 0.2;
		bgD[1] += .5;
		
		bgA[0] = bgA[0] % sizes.a[0];
		bgA[1] = bgA[1] % sizes.a[1];
		bgB[0] = bgB[0] % sizes.b[0];
		bgB[1] = bgB[1] % sizes.b[1];
		bgC[0] = bgC[0] % sizes.c[0];
		bgC[1] = bgC[1] % sizes.c[1];
		bgD[0] = bgD[0] % sizes.d[0];
		bgD[1] = bgD[1] % sizes.d[1];
		
		$a[0].style.backgroundPosition = bgA[0] + "px " + bgA[1] + "px";
		$b[0].style.backgroundPosition = bgB[0] + "px " + bgB[1] + "px";
		$c[0].style.backgroundPosition = bgC[0] + "px " + bgC[1] + "px";
		$d[0].style.backgroundPosition = bgD[0] + "px " + bgD[1] + "px";
	}, 50);
	
	if ( window.SyntaxHighlighter )
		$('pre[data-lang]').each(function() {
			$(this).html($(this).find('code:first').html());
			var lang = $(this).attr('data-lang');
			SyntaxHighlighter.highlight({brush:lang}, this);
		});
	
	var $allposts = $('.allposts');
	if ( $allposts.length ) {
		$.getJSON("comments.json", function(q) {
			try {
				$allposts.after(rcomments.expand(q));
			} catch ( e ) {
				e.toString = function() { return this.name + ": " + this.message; };
				throw e;
			}
		});
		
		$.ajax({
			url: "http://twitter.com/statuses/user_timeline/nadir_seen_fire.json?count=5&callback=?",
			dataType: "jsonp",
			success: function(tweets) {
				var $tweets = $(tweetsTpl.expand({base:base, name:"Daniel Friesen", user:"nadir_seen_fire", tweets:tweets})).appendTo('#page');
				
				$(window).resize(function(e) {
					$tweets.toggle($(window).width() > 50 + 575 + 50 + 250 + 50 + 150);
				}).resize();
			}
		});
		
	}
	
});
