var jScrollPaneOptions = {"scrollbarWidth":6, "animateTo":true, "reinitialiseOnImageLoad":false}

$(function () {
    var calendarLink = $('a.ical-feed');

    var updateCalendar = function () {
        var params = "";
        var filters = $('#regionFilter, #typeFilter, #dateFilter');

        filters.each(function () {
            var key = this.id;
            var ob = $('#'+key);
            var val = ob.val().split(' ')[0];
            if ( val ) {
                if ( params ) {
                    params = params + '&';
                }
                params = params + key + '=' + val;
            }
            calendarLink.attr('href','/feeds/events.ics' + '?' + params);
        });
    };

    $('#clear').click(function () {$('#typeFilter, #dateFilter, #regionFilter').val('').change(); return false });

    var filters = $('#typeFilter, #dateFilter');
    var rows = $('#slider tr');

    filters.add('#regionFilter').change(function () {

        var nearMatch = false;
        var classes = '';

        filters.each(function () {
            var val = $(this).val();
            if ( val ) classes += '.' + val;
        })

        if ( $('#regionFilter').val() ) {

            var region = $('#regionFilter').val().split(' ');
            var region_id = region[0].substr("region".length);

            $(".regionpdf").not("#regionpdf_" + region_id).hide();
            $("#regionpdf_" + region_id).show();

            if ( rows.filter('.' + region[0] + classes).length ) {
                classes = '.' + region[0] + classes;
            }
            else {
                nearMatch = true;
                classes = '.' + region[1] + classes;
            }

        }
        else if ( rows.filter(classes).length == 0 && classes.length > 0 ) {
            nearMatch = true;
        }

        var to_display;
        if ( classes ) {
            to_display = rows.filter(classes);
            rows.not(classes).hide();
        } else {
            to_display = rows;
        }
        to_display.each(function(idx) {
            var $row = $(this);
            if ( idx % 2 == 0 ) {
                $row.addClass('alternatingRow');
            } else {
                $row.removeClass('alternatingRow');
            }
        });
        to_display.show();

        if ( nearMatch ) {
            // near match, there are no events to show in this region
            $('#no_results').show()
            $('#regionpdf').hide();
            if (rows.filter(classes).length) {
                $('#recommended').show();
            }
            else {
                $('#recommended').hide();
            }
        }
        else {
            // exact match, there are events in this region
            $('#no_results').hide();
            $('#recommended').hide();
            // show the pdf only if a specific region is selected
            if ( $('#regionFilter').val() ) {
                $('#regionpdf').show();
            }
            else {
                $('#regionpdf').hide();
            }
        }

        $("#slider .slider-content").jScrollPaneRemove();
        $("#slider .slider-content").jScrollPane(jScrollPaneOptions);
        updateCalendar();
    })

    // grab the get param and trigger change where appropriate
    var query = Querystring();
    if (query && query["region"]) {
        $('#regionFilter option').each(function(){
            if ($(this).val().indexOf("region" + query["region"] + " ") != -1 ) {
                $('#regionFilter').val($(this).val());
            }
        })
        filters.trigger("change");
    }

    updateCalendar();
})

var scrollAmount = 30;
$(function () {
    $('#slider tr').filter(':visible').filter(':even').addClass('alternatingRow');

    var sliderContent = $('#slider .slider-content');

    sliderContent.jScrollPane(jScrollPaneOptions);

    $('#downArrow')
        .mouseup(function (e) {
            $(this).stopTime("scroll");
        })
        .mousedown(function (e) {
            scrollAmount = 30;
            sliderContent[0].scrollBy( scrollAmount );
            $(this).everyTime("250ms", "scroll", function() {
                sliderContent[0].scrollBy( scrollAmount );
                scrollAmount *= 1.25;
            })
        })
        .click(function(e) {
            return false;
        })

    $('#upArrow')
        .mouseup(function (e) {
            $(this).stopTime("scroll");
        })
        .mousedown(function (e) {
            scrollAmount = 30;
            sliderContent[0].scrollBy( -scrollAmount );
            $(this).everyTime("250ms", "scroll", function() {
                sliderContent[0].scrollBy( -scrollAmount );
                scrollAmount *= 1.25;
            })
        })
        .click(function () {
            return false;
        })
})

function Querystring(qs) { // optionally pass a querystring to parse
    /*
    Client-side access to querystring name=value pairs
    Version 1.3
    28 May 2008
    License (Simplified BSD):
    http://adamv.com/dev/javascript/qslicense.txt
    */
    var params = {}
    if (qs == null) qs = location.search.substring(1, location.search.length)
    if (qs.length == 0) return
    // Turn <plus> back to <space>
    // See: http://www.w3.org/TR/REC-html40/interact/forms.html#h-17.13.4.1
    qs = qs.replace(/\+/g, ' ')
    var args = qs.split('&'); // parse out name/value pairs separated via &
    // split out each name=value pair
    for (var i = 0; i < args.length; i++) {
        var pair = args[i].split('=')
        var name = decodeURIComponent(pair[0])
        var value = (pair.length==2)
            ? decodeURIComponent(pair[1])
            : name
        params[name] = value
    }
    return params
}

