/**
 * Rubberflat JS
 */
$(document).ready(function() {
	$('.nav-things .cat-item-4 > a').attr('href', '/things');
	if ($('.image-grid').length) {
		initQuicksilver();
		// set a default height
		$('#things-category a[rel="all"]').trigger('click');
	}
});

var initQuicksilver = function() {
	// Custom sorting plugin
	$.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);
	};

	var filterType = $('#things-category a').removeAttr('href');
	var sortType = $('#things-sort a');
	var things = $('#things-grid');
	var data = things.clone();
	var rev = [false, true];

	sortType.parent().removeAttr('style');

	filterType.add(sortType).bind('click', function() {
		var filteredData;
		var sortedData;
		var ft;

		if ($(this).parent().attr('id') == 'things-category') {
			ft = $(this);
			filterType.removeClass('selected');
			ft.addClass('selected');
		} else {
			ft = filterType.filter('.selected');
		}

		if (ft.attr('rel') == 'all') {
			filteredData = data.find('li');
		} else {
			filteredData = data.find('li[data-type~=' + ft.attr('rel') + ']');
		}

		// sort
		var st;
		if ($(this).parent().attr('id') == 'things-sort') {
			st = $(this);
			if (st.hasClass('selected')) {
				var idx = $(this).attr('rel') == 'date' ? 1 : 0;
				rev[idx] = !rev[idx];
			} else {
				sortType.removeClass('selected');
				st.addClass('selected');
			}
		} else {
			st = sortType.filter('.selected');
		}

		if (st.attr('rel') == 'date') {
			sortedData = filteredData.sorted({
				reversed: rev[1],
				by: function(v) {
					return parseFloat($(v).find('input[data-type=date]').val());
				}
			});
		} else {
			sortedData = filteredData.sorted({
				reversed: rev[0],
				by: function(v) {
					return $(v).find('strong').text().toLowerCase();
				}
			});
		}

		// finally, call quicksand
		things.quicksand(sortedData, {
			duration: 800
		});
	});
};
