$(function()
{
    var $authorized       = $('#authorized');
    var $unauthorized     = $('#unauthorized');
    var $authorizedList   = $authorized.find('.apps-list');
    var $unauthorizedList = $unauthorized.find('.apps-list');
    var $swapIcon         = $('#mainContent .drag-direction-icon');

    var resizeAppsContainer = function()
    {
        var maxWidth = $(window).height() - 302;
        var minWidth = Math.max($authorizedList.height(), $unauthorizedList.height());
        var style    = {minHeight: Math.min(maxWidth, minWidth)};
        $authorizedList.css(style);
        $unauthorizedList.css(style);
    };
    resizeAppsContainer();
    $(window).on('resize', resizeAppsContainer);

    var changeAppPri = function($appItem)
    {
        var $checkbox = $appItem.find(':checkbox');
        var hasPri    = !$checkbox.is(':checked');
        $checkbox.prop('checked', hasPri);
        $appItem.parent().appendTo(hasPri ? $authorizedList : $unauthorizedList);
    };

    $authorized.droppable(
    {
        selector: '.app-item',
        target: function(){return $unauthorized},
        start: function(e)
        {
            $unauthorized.addClass('can-drop-here');
            $swapIcon.removeClass('icon-swap-h').addClass('icon-arrow-left');
        },
        always: function()
        {
            $unauthorized.removeClass('can-drop-here');
            $swapIcon.addClass('icon-swap-h').removeClass('icon-arrow-left');
        },
        drop: function(e)
        {
            changeAppPri(e.element);
        }
    });

    $unauthorized.droppable(
    {
        selector: '.app-item',
        target: function(){return $authorized},
        start: function()
        {
            $authorized.addClass('can-drop-here');
            $swapIcon.removeClass('icon-swap-h').addClass('icon-arrow-right');
        },
        always: function()
        {
            $authorized.removeClass('can-drop-here');
            $swapIcon.addClass('icon-swap-h').removeClass('icon-arrow-right');
        },
        drop: function(e)
        {
            changeAppPri(e.element);
        }
    });
});
