Favorites = {

    initialize: function () {
        /*
        Sortable.create('favorites-list', {
        handle: 'dragger'
        onComplete: function() {};
        });
        */
        Favorites.initializeAdders();
    },

    /**
    * Creates ajaxical favoritizers.
    */
    initializeAdders: function () {
        Element.insert(document.body, '<div id="favorites-login-overlay">&nbsp;</div><div id="favorites-login-message"><p>You must be logged in to add favorites.</p><p><a href="/users/login/">Log In</a></p><img alt="Close" height="18" id="favorites-login-message-close" src="/img/close-icon.png" width="18" /></div>');
        new Effect.Opacity('favorites-login-overlay', {
            from: 0.7,
            to: 0.7
        });
        var closeOverlay = function () {
            $('favorites-login-message').hide();
            $('favorites-login-overlay').hide();
        };
        $('favorites-login-message-close').observe('click', closeOverlay);
        $('favorites-login-overlay').observe('click', closeOverlay).hide();
        $('favorites-login-message').hide();
        document.observe('click', closeOverlay);
        $$('a.add').each(function (el) {

            el.add_to_favorite_action = el.href;
            el.href = 'javascript:void();';
            if (el.innerHTML == '' || el.innerHTML == ' ' || el.innerHTML == '&nbsp;')
            {
                if (el.hasClassName('done'))
                    el.title = 'Added to favorites';
                else
                    el.title = 'Add to favorites';
            }

            el.observe('click', function (e) {
                try {
                    if (el.hasClassName('done'))
                        return;
                    new Ajax.Request(el.add_to_favorite_action, {
                        onSuccess: function (t) {
                            if (t.responseText == 'success') {
                                el.addClassName('done');
                                el.href = 'javascript:void();';
                                
                                if (el.hasClassName('lectureDetail'))
                                {
                                    el.update('Added to favorites');
                                }
                                else if (el.hasClassName('picks'))
                                {
                                    el.update('');
                                    el.title = 'Added to favorites';
                                }
                                else
                                {
                                    el.update('Added to favorites');
                                    if (el.title != '')
                                        el.title = 'Added to favorites';
                                }
                                
                                var favElem = document.getElementById('acc_fav');
                                var newFavNum = parseInt(favElem.innerHTML) + 1;
                                favElem.innerHTML = newFavNum;
                                AE.trackEvent('video-add-favorite', el.next('a.thumb').href);
                            } else if (t.responseText == 'log in') {
                                $('header-login-in').hide();
                                $('header-login-out').show();
                                $('favorites-login-message').setStyle({
                                    left: (Event.pointerX(e) - 20) + 'px',
                                    top: Event.pointerY(e) + 'px',
                                    z_index: 10000
                                }).show();
                                $('favorites-login-overlay').show();
                                var docY = parseInt($(document.body).getHeight());
                                if (docY > parseInt($('favorites-login-overlay').getHeight())) {
                                    $('favorites-login-overlay').setStyle({
                                        height: docY + 'px'
                                    });
                                };

                                el.removeClassName('processing');
                                if (el.hasClassName('lectureDetail'))
                                {
                                    el.update('Add to Favorites');
                                }
                                else if (el.hasClassName('picks'))
                                {
                                    el.update('');
                                    el.title = 'Add to favorites';
                                }
                                else
                                {
                                    el.update('favorites');
                                }
                            }
                            else window.location = el.href;
                        }
                    });

                    el.addClassName('processing');
                    if (el.hasClassName('lectureDetail'))
                    {
                        el.update('Adding to Favorites');
                    }
                    else if (el.hasClassName('picks'))
                    {
                        el.update('');
                        el.title = 'Add to favorites';
                    }
                    else
                    {
                        el.update('Adding to Favorites...');
                    }

                    Event.stop(e);
                    return false;
                } catch (e) { };
                return true;
            });
        });

        $$('ul#favorites-list li div.delete a').each(function (el) {
            Event.observe(el, 'click', function (e) {
                Event.stop(e);
                AE.trackEvent('video-remove-favorite', el.up('li').down('div.video a').href);
                window.location = el.href;
            });
        });
    }

};
document.observe('dom:loaded', Favorites.initialize);
