var COOKIE = 'flagged';
// The next line doesn't work because the cookie js modifies the OPTIONS object
//var OPTIONS = {expires: 14, path: '/'};
var EXP = 365;
var PATH = '/';

function add_flag(eec_id) {
    var cookie_value = $.cookie(COOKIE);
    if (cookie_value && ! is_flagged(eec_id)) {
        $.cookie(COOKIE, cookie_value + "," + eec_id, {expires: EXP, path: PATH});
    } else {
        $.cookie(COOKIE, eec_id, {expires: EXP, path: PATH});
    }
}

function remove_flag(eec_id) {
    if ($.cookie(COOKIE)) {
        var values = $.cookie(COOKIE).split(',');
        var temp = Array();
        for (var i=0; i<values.length; i++) {
            if (parseInt(values[i], 10) == parseInt(eec_id, 10)) {
                continue;
            } else {
                temp.push(values[i]);
            }
        }
        if (temp.length == 0) {
            $.cookie(COOKIE, null, {expires: EXP, path: PATH});
        } else {
            $.cookie(COOKIE, temp.join(','), {expires: EXP, path: PATH});
        }
    }
}

function reset_flags() {
    $.cookie(COOKIE, null, {expires: EXP, path: PATH});
    update_flag_controls();
}

function is_flagged(eec_id) {
    if ($.cookie(COOKIE)) {
        var values = $.cookie(COOKIE).split(',');
        for (var i=0; i<values.length; i++) {
            if (parseInt(values[i], 10) == parseInt(eec_id, 10)) {
                return true;
            }
        }
        return false;
    } else {
        return false;
    }
}

function get_prev_next(eec_id) {
    var prev = '';
    var next = '';
    var values = $.cookie(COOKIE).split(',');
    values.sort();
    if (values) {
        var last = values.length - 1;
        var current = jQuery.inArray(eec_id, values);
        switch (current) {
            case -1:
                break;
            case 0:
                if (current != last) {
                    next = values[current + 1];
                }
                break;
            case last:
                prev = values[current - 1];
                break;
            default:
                prev = values[current - 1];
                next = values[current + 1];
        }
    }
    return [prev, next];
}

function get_flagged_count() {
    if ($.cookie(COOKIE)) {
        var values = $.cookie(COOKIE).split(',');
        return values.length;
    }
    return 0;
}

function toggle_flag() {
    var eec_id = $('#eec_id').text();
    if ($('#flag').is(':checked')) {
        add_flag(eec_id);
    } else {
        remove_flag(eec_id);
    }
    update_flag_controls();
}

function visual_flag() {
    if ($('#flag').is(":checked")) {
        $('#flag_label').addClass('flag_set');
        $('#flag_label').text('Flagged');
    } else {
        $('#flag_label').removeClass('flag_set');
        $('#flag_label').text('Flag');
    }
}

var FLAG_CONTROL_DEFAULTS = '<input type="checkbox" id="flag" name="flag" value="" /><label for="flag" id="flag_label">Flag</label> | <span id="show_flagged">Show Flagged (0)</span><span id="reset_flags"></span>';
var FLAG_CONTROL = '<div id="flag_control"></div>';

function update_flag_controls() {
    var count = get_flagged_count();
    if (count) {
        var flagged_text = '<a href="/gallery/?flagged">Show Flagged (' + count + ')</a>';
        $('#show_flagged').html(flagged_text);
        if (! $('#reset_flags').text()) {
            $('#reset_flags').text('Clear all flags');
            $('#reset_flags').before(' | ');
        }
        if (is_flagged($('#eec_id').text())) {
            $('#flag').attr('checked', true);
        }
    } else {
        $('#flag_control').html(FLAG_CONTROL_DEFAULTS);
        //$("#flag").attr('checked', false);
    }
    $('#flag_control').attr('class', 'nav');
    $('#flag').change(toggle_flag);
    $('#reset_flags').click(reset_flags);
    //visual_flag();
}

var FLAGSET_NAV_DEFAULT = '<span class="eecUp">To Flagged Set <a href="/gallery/?flagged">[^]</a></span><br><span id="flagged_prev" class="eecPrev"></span><span id="flagged_next" class="eecNext"></span>';

function update_flagset_nav() {
    if ($.cookie('in_flag_set')) {
        var prev_next = get_prev_next($('#eec_id').text());
        var prev = prev_next[0];
        var next = prev_next[1];
        $('#gallery_links').html(FLAGSET_NAV_DEFAULT);
        var href = '<a href="/artwork/?eec=';
        if (prev) {
            $('#flagged_prev').html(href + prev + '">[&lt;&lt;]</a>&nbsp;Previous in Flagged Set');
        }
        if (next) {
            $('#flagged_next').html('Next in Flagged Set&nbsp;' + href + next + '">[&gt;&gt;]</a>');
        }
        if (prev && next) {
            $('#flagged_next').before(' | ');
        }
    }
}

$(document).ready(function() {
    var flagged_count = get_flagged_count();
    $("#gallery_links").after(FLAG_CONTROL);
    $('#flag_control').html(FLAG_CONTROL_DEFAULTS);
    //$("#flag_this").click(toggle_flag);
    update_flagset_nav();
    update_flag_controls();
})
