$(function() {
    // Card Impression Tracking
    _cardtrak_trackCards();

    // Flyouts
    var timeouts = {};
    var timein   = undefined;

    // remove title tags from card links and images
    $('td.card_name a').attr('title', '');
    $('td.card_name img').attr('alt', '');

    $('.card-image-container>a, .card_name>a').hover(
        function(e) {
            var $flyout = $(this).closest('td.card_name').children('.flyout');
            var id = $flyout.attr("id");
            if (timein) return;
            timein = window.setTimeout(function() {
                if (timeouts[id]) {
                    window.clearTimeout(timeouts[id]);
                    timeouts[id] = 0;
                    return;
                }
                var sheight = $(window).height();
                var top     = $(document).scrollTop();
                var bottom  = top + sheight;
                var fheight = $flyout.height();
                var imgtop  = $flyout.closest('td.card_name').find('.card-image-container').position().top;
                var imgbot  = $flyout.closest('td.card_name').find('img').position().top
                            + $flyout.closest('td.card_name').find('img').height();
                $flyout.css('top', imgtop);
                $flyout.show();
                if ($flyout.position().top + fheight > bottom) {
                    var bbottom = bottom - fheight - 8;
                    var ibottom = imgbot - fheight;
                    $flyout.css('top', ibottom > bbottom ? ibottom : bbottom);
                }
                $('.arrow', $flyout).css('top', imgtop - $flyout.position().top + 15);
                $('.arrow', $flyout).hide();
                $('.content-text', $flyout).hide();
                $('.content-text', $flyout).slideDown('fast');
                $('.arrow', $flyout).slideDown('fast');
            }, 100);
        },
        function() {
            var $flyout = $(this).closest('td.card_name').children('.flyout');
            var id = $flyout.attr("id");
            if (timein) window.clearTimeout(timein);
            timein = undefined;
            window.clearTimeout(timeouts[id]);
            timeouts[id] = window.setTimeout(function() {
                $flyout.hide()
                timeouts[id] = 0;
            }, 60);
        }
    );

    $('.card_name .flyout').hover(
        function(e) {
            var $flyout = $(this);
            var id = $flyout.attr("id");
            if (timein) window.clearTimeout(timein);
            timein = undefined;
            window.clearTimeout(timeouts[id]);
            timeouts[id] = 0;
        },
        function() { $(this).hide() }
    );

    // Compare Feature
    var max = 4;
    var cards = [];
    var cookie = $.cookie('compare-cards');

    function load_comparator() {
        var date = new Date();
        $('#comparator-cards').load("/cards/comparator/" + max + "/" + date.getTime());
    }

    function remove_card(card_id) {
        for (var i = 0; i < cards.length; ++i) {
            if (cards[i] == card_id) {
                cards.splice(i, 1);
                break;
            }
        }
        $('input#compare-' + card_id).each( function() { this.checked = false; } );

        $.cookie('compare-cards', cards.join(','), { path: '/' });
        load_comparator();
    }

    function add_card(card_id) {
        if (cards.length >= max) {
            //if (!$.cookie('compare-max')) {
            //    alert("You can select a maximum of " + max + " cards.  Selecting more cards will replace your previous selections in the order you selected them.\n\nThis message will not be shown again.");
            //    $.cookie('compare-max', 1, { expires: 100, path: '/' });
            //}
            remove_card(card_id);
            alert("You can only compare 4 cards at a time");
        }
        else {
            cards.push(card_id);
            $.cookie('compare-cards', cards.join(','), { path: '/' });
            load_comparator();
        }
    }

    function initialize() {
        load_comparator();

        if (cookie != null && cookie != '') {
            cards = cookie.split(',');
        }

        $.each(cards, function(i,v) {
            $('#compare-' + v).each( function() { this.checked = true; } );
        });
    }

    $('#comparator .card .card-x').live('click', function() {
        var card_id = $(this).prev('img').attr('id').substr(9);
        $(this).fadeTo(500, 0);
        $(this).prev('img').fadeTo(1000, 0);
        window.setTimeout(function() {
            remove_card(card_id);
        }, 500);
    });

    $('td.compare :checkbox').change(function() {
        var checked = this.checked;
        var card_id = $(this).attr('id').substr(8);

        if (checked) {
            add_card(card_id);
        }
        else {
            remove_card(card_id);
        }
    });

    var $comparebox = $('#comparator .colorbox a').colorbox({
        transition: 'fade',
        transitionSpeed: 1000,
        modal: true,
        open: false,
        bgOpacity: 0.65,
        initialWidth: 250,
        initialHeight: 90,
        //fixedHeight: '95%',
        //fixedWidth: '94%',
        modalClose: 'Close'
    }, function() { $('#comparator-compare table tr:even').addClass('even'); });
    // unbind colorbox escape key
    $(document).unbind('keydown');

    $('#comparator-button').click(function(e) {
        e.preventDefault();

        if (cards.length < 2) {
            alert("You must select at least 2 cards");
            return;
        }

        $('#skyscraper-ad object, #skyscraper-ad embed').css({position: 'fixed', top: '-800px'});
        $('#skyscraper-ad object, #skyscraper-ad embed').hide();
        var date = new Date;
        $comparebox.attr('href', '/cards/comparator/compare/' + date.getTime());
        $comparebox.colorbox({open: true});
    });

    $('#modalClose').click(function() {
        window.setTimeout(function() {
            $('#skyscraper-ad object, #skyscraper-ad embed').css({position: 'static', top: '0'});
            $('#skyscraper-ad object, #skyscraper-ad embed').show();
        }, 500);
    });

    // workaround for IE's stupid behavior
    $('td.compare :checkbox').click(function() { this.blur() });

    initialize();
});
