
// ---------------------
(function($) {
	// JavaScript Document
	$.githubUser = function(username, callback) {
	  jQuery.getJSON("http://github.com/api/v2/json/repos/show/" + username + "?callback=?", callback);
	}
	 
var current_date = new Date ( );

var month_names = new Array ( );
month_names[month_names.length] = "January";
month_names[month_names.length] = "February";
month_names[month_names.length] = "March";
month_names[month_names.length] = "April";
month_names[month_names.length] = "May";
month_names[month_names.length] = "June";
month_names[month_names.length] = "July";
month_names[month_names.length] = "August";
month_names[month_names.length] = "September";
month_names[month_names.length] = "October";
month_names[month_names.length] = "November";
month_names[month_names.length] = "December";

var day_names = new Array ( );
day_names[day_names.length] = "Sunday";
day_names[day_names.length] = "Monday";
day_names[day_names.length] = "Tuesday";
day_names[day_names.length] = "Wednesday";
day_names[day_names.length] = "Thursday";
day_names[day_names.length] = "Friday";
day_names[day_names.length] = "Saturday";

function format_as_date(str)
{
	return format_date(new Date(str));
}
function format_date(date) {
return [day_names[date.getDay()],", ",month_names[date.getMonth()]," ",date.getDate()," "," ",date.getFullYear() ].join('');
}
	$.fn.loadRepositories = function(username) {
	  this.html("<span>Querying GitHub for repositories...</span>");
	 
	  var target = this; 
	  $.githubUser(username, function(data) {
		var repos = data.repositories;
		sortByLastPushed(repos);
	 
	 	var exclusions = "(ncqrs-sample)|(experiments)|(nmedia)";
		var re_exclusions = new RegExp(exclusions);
		var list = ['<h2 style="margin-top:0;padding-top:0;">My projects</h2><ul id="created">'];
		$(repos).each(function() {
		  if (this.private) return;
		  if (this.fork) return;
		  if (this.name.match(re_exclusions)) return;
		  list.push('<li><h5><a href="'+ this.url +'">' + this.name + '</a></h5>');
		     if (this.description && !this.description.match(/^$/)) list.push('<p>' + this.description + '<br/>');
		     if (this.fork)
			 	list.push('<em>Forked on '+format_as_date(this.created_at)+'</em></p>');
			else 
				list.push('<em>Created on '+format_as_date(this.created_at)+'</em><br/><strong>'+this.forks+' fork'+(this.forks>1?'s':'')+'</strong></p>');
		  list.push('</li>');
		});
		list.push('</ul><h2>Open source contributions</h2><ul id="forked"');
		$(repos).each(function() {
		  if (this.private) return;
		  if (!this.fork) return;
		  list.push('<li><h5><a href="'+ this.url +'">' + this.name + '</a></h5>');
		     if (this.description && !this.description.match(/^$/)) list.push('<p>' + this.description + '<br/>');
		     if (this.fork)
			 	list.push('<em>Forked on '+format_as_date(this.created_at)+'</em></p>');
			else 
				list.push('<em>Created on '+format_as_date(this.created_at)+'</em><br/><strong>'+this.forks+' fork'+(this.forks>1?'s':'')+'</strong></p>');
		  list.push('</li>');
		});
		list.push('</ul>');
		target.empty().append($(list.join('')));
	  });
	 
	  function sortByNumberOfWatchers(repos) {
		repos.sort(function(a,b) {
		  return b.watchers - a.watchers;
		});
	  }
	  function sortByLastPushed(repos) {
		repos.sort(function(a,b) {
		  return new Date(b.pushed_at).getTime() - new Date(a.pushed_at).getTime();
		});
	  }
	};	
	
	$(function() {
    	$("#github-projects").loadRepositories("davidalpert");
	});
})(jQuery);
