//
// JQuery Sorted Extension
//
(function($) {
	$.fn.sorted = function(customOptions) {
		var options = {
			reversed: false,
			by: function(a) {
				return a.text();
			}
		};
		$.extend(options, customOptions);
	
		$data = $(this);
		arr = $data.get();
		arr.sort(function(a, b) {
			
		   	var valA = options.by($(a));
		   	var valB = options.by($(b));
			if (options.reversed) {
				return (valA < valB) ? 1 : (valA > valB) ? -1 : 0;				
			} else {		
				return (valA < valB) ? -1 : (valA > valB) ? 1 : 0;	
			}
		});
		return $(arr);
	};
})(jQuery);

$(function() {
	//
	// Main Timeline toggling
	//
	var read_button = function(class_names) {
		var r = {
			selected: false,
			type: 0
		};
		for (var i = 0; i < class_names.length; i++) {
			if (class_names[i].indexOf('selected-') == 0) {
				r.selected = true;
			}
			if (class_names[i].indexOf('segment-') == 0) {
				r.segment = class_names[i].split('-')[1];
			}
		}
		return r;
	};
	
	var determine_kind = function(buttons) {
		var kinds = [];
		buttons.parent().filter('[class*="selected-"]').each(function(i) {
			kinds.push($(this).find('a').attr('data-value'));
		});
		return kinds;
	};
	
	var filter_feed_kinds = function(kinds, preferences) {
		kinds = $(kinds);
		var filtered_data = [];
		kinds.each(function(i) {
			var kind = kinds[i];
			var kind_data = data.find('div.' + kind);
			kind_data.each(function(j) {
				filtered_data.push(kind_data[j]);
			});
		});
		filtered_data = $(filtered_data).sorted({
			by: function(v) {
				return parseInt($(v).attr('timestamp'));
			}
		});
		
		list.quicksand(filtered_data, preferences);
	};
	
	var filter_feed_buttons = function(kinds) {
		buttons.each(function(i) {
			var enable = false;
			var button = $(this);
			$(kinds).each(function(j) {
				enable = enable || button.attr('data-value') == kinds[j];
			});
			var classes = button.parent().attr('class').split(' ');
			$(classes).each(function(j) {
				if (classes[j].indexOf('selected-') == 0 && !enable) {
					button.parent().removeClass(classes[j]);
				}
				if (!classes[j].indexOf('selected-') == 0 && enable) {
					var button_properties = read_button(classes);
					button.parent().addClass('selected-' + button_properties.segment);
				}
			});
		});
	};

	var list = $('#content-list');
	var data = list.clone();
	var control = $('#content-filter');
	var buttons = control.find('a');
	
	var preferences = {
		duration: 400,
		easing: 'easeInOutQuad',
		adjustHeight: false
	};

	if ($.cookie('feed_filters') != null) {
		var kinds = $.cookie('feed_filters').split(',');
		filter_feed_kinds(kinds, preferences);
		filter_feed_buttons(kinds);
	}

	buttons.bind('click', function(e) {
		var button = $(this);
		var button_container = button.parent();
		var button_properties = read_button(button_container.attr('class').split(' '));
		var selected = button_properties.selected;
		var button_segment = button_properties.segment;
		
		if (!selected) {
			button_container.addClass('selected-' + button_segment);
		} else {
			button_container.removeClass('selected-' + button_segment);
		}
		
		var kinds = determine_kind(control.find('a'));
		console.log(kinds);
		$.cookie('feed_filters', kinds.join(), {expires: 7, path: '/'});
		filter_feed_kinds(kinds, preferences);
		e.preventDefault();
	});

	//
	// Archive navigation
	//
	$('#archive-link').bind('click', function(e) {
		e.preventDefault();
		$('#archive-navigation').toggle();
	});

	//
	// Flash message closing
	//
	$('.flash .close').bind('click', function(e) {
		e.preventDefault();
		$(this).parent().toggle('slow');
	});

	$("#lifestream").lifestream({
		limit: 30,
		list:[
			{
				service: 'github',
				user: 'predominant'
			},
			{
				service: 'twitter',
				user: 'predominant'
			},
			{
				service: 'slideshare',
				user: 'predominant'
			}
			// {
			// 	service: 'googleplus',
			// 	user: '',
			// 	key: ''
			// }
		]
	});
	
});

