function hash_prefix(target) { return (target == '' ? '' : ('#' + target)); }

function set_anchor_target(target)
{
	var hash_pos = location.href.indexOf('#');
	if (hash_pos == -1)
		location.href += hash_prefix(target);
	else
		location.href = location.href.substring(0, hash_pos) + hash_prefix(target);
}

function get_tag_name(url)
{
	return url.replace(/^(\/portfolio\/filter\/)/, '').replace(/\/$/, '');
}

$(document).ready(function()
{
	$('ul#filter').find('a').click(function()
	{
		$('ul#filter a.selected').removeClass('selected');
		$(this).addClass('selected');
		
		var group = 'grp-' + get_tag_name($(this).attr('href'));
		var cls = '.' + group;
		if (cls == '.grp-all') cls = '';
		
		set_anchor_target(group);
		
		var results = $('ul#results');
		var li_results = $('ul#results > li');
		var selected_results = $('ul#results > li' + cls);
		
		results.css('height', results.height());
		li_results.addClass('animating').fadeOut(350, function()
		{
			$(this).removeClass('animating');
			if ($('ul#results > li.animating').size() == 0)
			{
				selected_results.css({display: 'list-item', visibility: 'hidden'});
				var reset_height = results.css('height');
				results.css('height', 'auto');
				var auto_height = results.height();
				results.css('height', reset_height);
				selected_results.css({display: 'none', visibility: 'visible'});
				results.animate({ height: auto_height }, 350, function() { selected_results.fadeIn(350); } );
			}
		});
		
		return false;
	});
	
	if (location.href.indexOf('#') != -1)
	{
		var hash = location.href.substring(location.href.indexOf('#') + 1);
		if (hash.match(/^grp-/) && hash != 'grp-all')
		{
			var selector = $('ul#filter a[href=/portfolio/filter/' + hash.replace(/^grp-/, '') + '/]');
			if (selector.size() == 1 && selector != $('ul#filter a.selected'))
			{
				$('ul#filter a.selected').removeClass('selected');
				selector.addClass('selected');
			}
			
			$('ul#results > li').each(function()
			{
				if ($(this).hasClass('.' + hash) == false)
					$(this).css('display', 'none');
			});
		}
	}
});
