/**
 * @author Gurkan OLUC
 * @namespace ef.fb
 * Facebook Connect Wrapper
 */
eo.fb = {
    'selectedFriends' : {},
    'selectedFriendCount' : 0,
    'selectedFriendCountByPosition': {
        'gk' : 0,
        'defence' : 0,
        'center' : 0,
        'forward' : 0
    },
    'selectedFriendPositionLimits' : {
        'gk' : 2,
        'defence' : 8,
        'center' : 8,
        'forward': 6
    },
    'friendSelectWindow' : null
};

eo.fb.login = function(type) {
    FB.login(function(response) {
        if(response.authResponse)
        {
            if(type == 'register')
                eo.fb._registerAction();
            else
                eo.fb._loginAction();
			
        }
        else
        {
            // eo.common.modal(eo.config.errorMessageTitle, __('Facebook\'a bağlanılamadı.'), 'error', 3);
        }   
    }, {
        scope : 'publish_stream, offline_access, user_birthday, email'
    });
}

/**
 * Facebook Register Handler
 */
eo.fb._registerAction = function()
{
    eo.common._hideAllModalsShowWaitingModal();
    
    $.post(eo.config.baseUrl + '/users/facebook_register', function(res) {
        if(res.result == 1) // New User
        {
            eo.common.ajaxModal(
            {
                'url' : '/users/facebook_get_friends',
                'errorCallback' : function(res) {
                    eo.common.modal('', res.message, 'error', 3, '/register');
                },
                'successCallback' : function(res) {
                    eo.fb.friendSelectWindow = eo.common.modal(__('Facebook arkadaşlarınızdan takımınızı oluşturun!'), res.content);
                }
            });
			
        }
        else if(res.result == 2) { // Already registered user, we made it logged-in
            eo.common.redirect('/dashboard');
        }
        else
        {
            eo.common.modal(eo.config.errorMessageTitle, res.message, 'error', 3);
        }
    }, 'json');
}

/**
 * Facebook Login Handler
 */
eo.fb._loginAction = function()
{
    $.post(eo.config.baseUrl + '/users/facebook_login', function(res) {
        if(res.result)
        {
            window.location.reload();
        }
        else
        {
            eo.common.modal(eo.config.errorMessageTitle, res.message, 'error', 3);
        }
    }, 'json');
}

/**
 * Updates selected friends position
 */
eo.fb._updateSelectedFriendsCount = function() {
    for(var position in eo.fb.selectedFriendCountByPosition)
    {
        $('#facebook_selected_friend_'+ position +'_count').text(eo.fb.selectedFriendCountByPosition[position]);
    }

    $('#facebook_selected_friend_count').text(eo.fb.selectedFriendCount);

}


/*
 * Selects friends from friend selector
 */
eo.fb.friendSelectHandler = function(element)
{
    var e = $(element);
    var facebookUid = e.parent().attr('rel');
    var positionSelectDiv = $('#facebook_friend_position_div_' + facebookUid);
	
    if(e.hasClass('selected'))
    {
        e.removeClass('selected');
        positionSelectDiv.css('display', 'none');
        positionSelectDiv.children().val('center');
		
        var selectedPosition = eo.fb.selectedFriends[facebookUid].position;
		
        delete eo.fb.selectedFriends[facebookUid];
        if(eo.fb.selectedFriendCount > 0)
            eo.fb.selectedFriendCount--;
        if(eo.fb.selectedFriendCountByPosition[selectedPosition] > 0)
            eo.fb.selectedFriendCountByPosition[selectedPosition]--;
    }
    else
    {
        if(eo.fb.selectedFriendCount < 24)
        {
            e.addClass('selected');
            positionSelectDiv.css('display', 'block');
            var selectedPosition = $('#facebook_friend_position_' + facebookUid);
            var avaiblePositions = ['defence', 'center', 'forward','gk'];
			
            if(!(eo.fb.selectedFriendCountByPosition['center'] < eo.fb.selectedFriendPositionLimits['center']))
            {
                var positionValue = '';
                for(var pos in avaiblePositions)
                {
                    positionValue = avaiblePositions[pos];
                    if(eo.fb.selectedFriendCountByPosition[positionValue] < eo.fb.selectedFriendPositionLimits[positionValue])
                    {
                        selectedPosition.val(positionValue);
                        break;
                    }
                }
            }
			
            var selectedPositionValue = selectedPosition.val();

            eo.fb.selectedFriends[facebookUid] = {
                'name' : $('#facebook_friend_name_' + facebookUid).text(),
                'position': selectedPositionValue
            };
            eo.fb.selectedFriendCount++;
            eo.fb.selectedFriendCountByPosition[selectedPositionValue]++;

        }
        else
        {
            eo.common.modal(__('Limit doldu'), __('En fazla 24 arkadaşınızı seçebilirsiniz.'), 'error', 5);
        }
    }

    eo.fb._updateSelectedFriendsCount();
	
}

/**
 * Facebook friend position change handler
 */
eo.fb.changePositionHandler = function(element) {
    var e = $(element);
    var facebookUid = e.parent().parent().attr('rel');
    var oldPosition = eo.fb.selectedFriends[facebookUid].position;
    var oldPositionCount = eo.fb.selectedFriendCountByPosition[oldPosition];
    var newPosition = e.val();

    if(!(eo.fb.selectedFriendCountByPosition[newPosition] < eo.fb.selectedFriendPositionLimits[newPosition]))
    {
        eo.common.modal(__('Limit aşımı'), __('Bu pozisyon için seçilebilecek maximum kişi sayısına ulaşıldı.'), 'error', 5);
        e.val(oldPosition);
        return false;
    }

    if(oldPositionCount > 0 )
        eo.fb.selectedFriendCountByPosition[oldPosition]--;
	
    eo.fb.selectedFriendCountByPosition[newPosition]++;
    eo.fb._updateSelectedFriendsCount();
    eo.fb.selectedFriends[facebookUid].position = newPosition;
}

/**
 * Saves selected friends
 */
eo.fb.saveSelectedFriends = function() {
    if(eo.fb.selectedFriendCount > 0)
    {
        eo.fb.friendSelectWindow.hide();
        $.post(eo.config.baseUrl + '/users/save_facebook_friends', {
            'friends' : eo.fb.selectedFriends
        }, function(res) {
            eo.common.modal(res.title, res.message, '', 3, '/register');
        }, 'json');
    }
    else
    {
        document.location.href = eo.config.baseUrl + '/register';
    }
}


// jQuery Event Attachments
$(document).ready(function() {
    $("#facebook_friends > .facebook_friend > .user_info").live('click', function(e) {
        e.preventDefault();
        eo.fb.friendSelectHandler(this);
    });

    $('.facebook_friend_position').live('change', function(e) {
        e.preventDefault();
        eo.fb.changePositionHandler(this);
    });

    $('#facebook_friend_select_continue').live('click', function(e) {
        e.preventDefault();
        eo.fb.saveSelectedFriends();
    });

});

