﻿var io_post_title_array = new Array();
var io_post_url_array = new Array();
var io_post_date_array = new Array();
var io_post_label_array = new Array();

var is_post_filter = '';
var is_post_order = "title-asc";
var ib_toc_loaded = false;

function loadtoc(json) {

	if ("entry" in json.feed) {
		var li_post_count = json.feed.entry.length;

		for (var i = 0; i < li_post_count; i++) {
			var lo_post = json.feed.entry[i];
			var ls_post_date = lo_post.published.$t.substring(0, 10);

			var ls_year = ls_post_date.substr(0, 4);
			var li_year = parseInt(ls_year, 10);

			if (li_year > 2008) {
				var ls_post_title = lo_post.title.$t;
				var ls_post_url;

				for (var k = 0; k < lo_post.link.length; k++) {
					if (lo_post.link[k].rel == 'alternate') {
						ls_post_url = lo_post.link[k].href;
						break;
					}
				}

				var ls_post_labels = '';

				if ("category" in lo_post) {
					lo_post.category.sort();

					for (var li_idx_s1 = 0; li_idx_s1 < lo_post.category.length - 1; li_idx_s1++) {
						for (var li_idx_s2 = 1; li_idx_s2 < lo_post.category.length; li_idx_s2++) {
							if (lo_post.category[li_idx_s2].term < lo_post.category[li_idx_s1].term) {
								var ls_temp = lo_post.category[li_idx_s1].term;
								lo_post.category[li_idx_s1].term = lo_post.category[li_idx_s2].term;
								lo_post.category[li_idx_s2].term = ls_temp;
							}
						}
					}

					for (var k = 0; k < lo_post.category.length; k++) {
						ls_post_labels += '<a href="javascript:filterPosts(\'' + lo_post.category[k].term + '\')">' + lo_post.category[k].term + '</a>, ';
					}

					var l = ls_post_labels.lastIndexOf(',');

					if (l != -1) {
						ls_post_labels = ls_post_labels.substring(0, l);
					}
				}

				io_post_title_array.push(ls_post_title);
				io_post_date_array.push(ls_post_date);
				io_post_url_array.push(ls_post_url);
				io_post_label_array.push(ls_post_labels);
			}
    }
	}

   sortPosts(is_post_order);
   ib_toc_loaded = true;
}

function filterPosts(filter) {
	is_post_filter = filter;
	displayToc();
}

function allPosts() {
	is_post_filter = '';
	displayToc();
}

function sortPosts(is_post_order) {

	function swapPosts(x,y) {
   	var temp;
   	
   	temp = io_post_title_array[x];
		io_post_title_array[x] = io_post_title_array[y];
		io_post_title_array[y] = temp;

		temp = io_post_date_array[x];
		io_post_date_array[x] = io_post_date_array[y];
		io_post_date_array[y] = temp;

		temp = io_post_url_array[x];
		io_post_url_array[x] = io_post_url_array[y];
		io_post_url_array[y] = temp;

		temp = io_post_label_array[x];
		io_post_label_array[x] = io_post_label_array[y];
		io_post_label_array[y] = temp;
	}

	for (var i=0; i < io_post_title_array.length-1; i++) {
		for (var j=i+1; j<io_post_title_array.length; j++) {
			if (is_post_order == "title-asc")  { if (io_post_title_array[i] > io_post_title_array[j]) { swapPosts(i,j); } }
			if (is_post_order == "title-desc") { if (io_post_title_array[i] < io_post_title_array[j]) { swapPosts(i,j); } }
			if (is_post_order == "date-asc")   { if (io_post_date_array[i] > io_post_date_array[j]) { swapPosts(i,j); } }
			if (is_post_order == "date-desc")  { if (io_post_date_array[i] < io_post_date_array[j]) { swapPosts(i,j); } }
		}
	}
}

function displayToc() {
	var ls_tbl_header = '';
	var ls_tbl_detail = '';
	var li_row_count = 0;
	var ls_year = '';

	ls_tbl_header = '<tr>';
	ls_tbl_header += '<td class="header-col1">Date</td>';
	ls_tbl_header += '<td class="header-col2">Title</td>';
	ls_tbl_header += '<td class="header-col3">Labels</td>';
	ls_tbl_header += '</tr>';

	for (var i = 0; i < io_post_title_array.length; i++) {
		var ls_yy = io_post_date_array[i].substr(0, 4);
		var li_yy = parseInt(ls_yy, 10);

		if ( (li_yy > 2008) && (is_post_filter == '' || io_post_label_array[i].indexOf(is_post_filter) >= 0) ) {
			var ls_mm = io_post_date_array[i].substr(5, 2);
			var ls_dd = io_post_date_array[i].substr(8, 2);
			var ls_date = ls_mm.replace('01', 'Jan').replace(
																	'02', 'Feb').replace(
																	'03', 'Mar').replace(
																	'04', 'Apr').replace(
																	'05', 'May').replace(
																	'06', 'Jun').replace(
																	'07', 'Jul').replace(
																	'08', 'Aug').replace(
																	'09', 'Sep').replace(
																	'10', 'Oct').replace(
																	'11', 'Nov').replace(
																	'12', 'Dec') + ' ' + ls_dd;

			if (ls_yy != ls_year) {
				ls_tbl_detail += '<tr><td class="group-col" colspan="3">' + ls_yy + '</td></tr>';
				ls_year = ls_yy;
			}

			ls_tbl_detail += '<tr>' +
											 '<td class="detail-col1">' + ls_date + '</td>' +
											 '<td class="detail-col2"><a href="' + io_post_url_array[i] + '">' + io_post_title_array[i] + '</a></td>' +
											 '<td class="detail-col3">' + io_post_label_array[i] + '</td>' +
											 '</tr>';

			li_row_count++;
		}
	}

	var div_panel = document.getElementById("toc-panel");
	var div_loading = document.getElementById("toc-loading");

	div_panel.innerHTML = '<table>' + ls_tbl_header + ls_tbl_detail + '</table>';

	if (is_post_filter == '') {
		div_loading.innerHTML = '<span style="float: left;">Displaying all ' + io_post_title_array.length + ((io_post_title_array.length == 1) ? ' post' : ' posts') + '</span>';
	} else {
		div_loading.innerHTML = '<span style="float: left;">Displaying ' + li_row_count + ((io_post_title_array.length == 1) ? ' post' : ' posts') + ' labeled &#8220;' + is_post_filter + '&#8221;</span>' +
														'<a href="javascript:" onclick="allPosts();" style="float: right;">Display all posts</a>';
	}
}

function toggleTitleSort() {
	is_post_order = (is_post_order == "title-asc") ? "title-desc" : "title-asc";
	sortPosts(is_post_order);
	displayToc();
}

function toggleDateSort() {
	is_post_order = "date-desc"; 
	sortPosts(is_post_order);
	displayToc();
}

function showToc() {
	if (ib_toc_loaded) {
		displayToc();
		toggleDateSort();
	}
}