greenash.portfolio = function() {
    // portfolio AJAX interface
    
    
    var thumbs_selector_prefix = '#portfolio-thumbnail-list a';
    var facet_types = ['year', 'pay', 'type'];
    
    
    function select_latest_year() {
        var curr_year = null, latest_year = null, latest_year_obj = null;
        $('.portfolio-year a').each(function(i) {
            curr_year = $(this).attr('id').replace('portfolio-year-', '');
            if (curr_year !== 'all') {
                curr_year = parseInt(curr_year);
                if (latest_year === null || curr_year > latest_year) {
                    latest_year = curr_year;
                    latest_year_obj = this;
                }
            }
        });
        
        if (latest_year_obj !== null) {
            select_facet(latest_year_obj, 'year');
        }
    }
    
    
    function show_item(obj) {
        var slug = $(obj).attr('id').replace('portfolio-item-', '');
        $('.section-side-left').html(portfolio_details[slug]['left_side']);
        $('.portfolio-detail').html(portfolio_details[slug]['content']);
        $(obj).siblings('a').removeClass('active');
        $(obj).addClass('active');
        $('.fulldesc').after('<p id="toggle-fulldesc"><a href="#">Show full description</a></p>');
        $('.fulldesc').hide();
    }
    
    
    function select_facet(obj, facet_type) {
        $(thumbs_selector_prefix + ', .portfolio-' + facet_type + ' a').removeClass('active');
        $(obj).addClass('active')
        Array.prototype.reverse.call($(obj).prevAll('a')).wrapAll('<div class="active-before" />');
        $(obj).nextAll('a').wrapAll('<div class="active-after" />');
        $('.portfolio-' + facet_type + ' .active-before, .portfolio-' + facet_type + ' .active-after').slideUp('slow');
        $(obj).after('<a href="#" id="portfolio-' + facet_type + '-change">Change</a>');
    }
        
    
    function update_filters() {
        $('#portfolio-thumbnail-list-empty').remove();
        
        var selected_values = [];
        var curr_obj = null, selected_value = null, class_prefix = null;
        $.each(facet_types, function(i, facet_type) {
            class_prefix = facet_type + '-';
            curr_obj = $('.portfolio-' + facet_type + ' a.active').first();
            
            selected_value = curr_obj.attr('id').replace('portfolio-' + facet_type + '-', '');
            if (selected_value !== 'all') {
                selected_values.push({'class_prefix': class_prefix, 'value': selected_value});
            }
        });
        
        var thumbs_selector_array = [], thumbs_selector = null;
        if (selected_values.length) {
            $(thumbs_selector_prefix).hide();
            $.each(selected_values, function(i, sel) {
                thumbs_selector_array.push(thumbs_selector_prefix + '.' + sel.class_prefix + sel.value);
            });
        }
        if (thumbs_selector_array.length) {
            $.each(thumbs_selector_array, function(i, sel) {
                if (thumbs_selector === null) {
                    thumbs_selector = $(sel);
                }
                else {
                    thumbs_selector = thumbs_selector.filter(sel);
                }
            });
        }
        else {
            thumbs_selector = $(thumbs_selector_prefix);
        }
        if (thumbs_selector.length) {
            thumbs_selector
                .show()
                .removeClass('last-col')
                .removeClass('first')
                .removeClass('last')
                .each(function(i) {
                    if (i % 2 !== 0) {
                        $(this).addClass('last-col');
                    }
                });
            var selected_item = thumbs_selector.first();
            show_item(selected_item);
            selected_item.addClass('active')
                         .addClass('first');
            thumbs_selector.last().addClass('last');
        }
        else {
            $('#portfolio-thumbnail-list').append('<div id="portfolio-thumbnail-list-empty">No portfolio items match your filters.</div>');
        }
    }
    
    
    function init_browse() {
        select_latest_year();
        select_facet($('.portfolio-pay a:last').get(0), 'pay');
        select_facet($('.portfolio-type a:last').get(0), 'type');
        update_filters();
        
        $.each(facet_types, function(i, facet_type) {
            $('.portfolio-' + facet_type + ' a:not(#portfolio-' + facet_type + '-change)').click(function() {
                select_facet(this, facet_type);
                update_filters();
                return false;
            });
            $('#portfolio-thumbnail-list a').click(function() {
                show_item(this);
                return false;
            });
            $('.portfolio-tags a, .date-year a').live('click', function() {
                var id_array = $(this).attr('id').replace('portfolio-tag-', '').split('--');
                var facet_type = id_array[0];
                var selected_value = id_array[1];
                var obj = $('a#portfolio-' + facet_type + '-' + selected_value)[0];
                $(obj).parents('.active-before, .active-after').slideDown('slow', function() {
                    $(this).children('a').unwrap();
                    $('a#portfolio-' + facet_type + '-change').remove();
                    select_facet(obj, facet_type);
                    update_filters();
                });
                return false;
            });
            $('a#portfolio-' + facet_type + '-change').live('click', function() {
                $(this).hide();
                $(this).siblings('.active-before, .active-after').slideDown('slow', function() {
                    $(this).children('a').unwrap();
                    $('a#portfolio-' + facet_type + '-change').remove();
                });
                return false;
            });
            $('#toggle-fulldesc a').live('click', function() {
                $('.fulldesc').slideToggle('medium', function() {
                    var link_text = 'Hide';
                    if ($(this).is(':hidden')) {
                        link_text = 'Show full description';
                    }
                    $('#toggle-fulldesc a').html(link_text);
                });
                return false;
            });
        });
    }
    
    
    return {
        init: function() {
            init_browse();
        }
    }
}();


$(function() {
    greenash.portfolio.init();
});

