window.fbAsyncInit = function () {
    FB.init({
        appId: fb_id,
        cookie: true,
        xfbml: true,
        version: 'v4.0'
    });

};


(function (d, s, id) {
    var js, fjs = d.getElementsByTagName(s)[0];
    if (d.getElementById(id)) { return; }
    js = d.createElement(s); js.id = id;
    js.src = "https://connect.facebook.net/en_US/sdk.js";
    fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));



function process_facebook(e) {
    fb_login(
        checkEmailOnFBUser
    );
}

function promptEmail(user) {
    $('.overlay').velocity('fadeIn');

    $('#cust_alert.login').hide().promise().done(function () {
        $('#cust_alert.fb_email').show();

        $('.close, .strokeBtn.red').unbind('click').bind('click', function () {
            $('#cust_alert.fb_email').hide();
            $('.overlay').velocity('fadeOut', function () {
                // $(this).remove();
            });
        });

        $('.fb_email .solidBtn').unbind('click').bind('click', function () {
            var form = $('.fb_email .input-wrap');
            form.removeClass('error');
            $('.error-msg').remove();


            var email = $('input[id="email-field"]').val();

            if (!IsEmail(email)) {
                form.addClass('error');
                form.append('<p class="error-msg">' + emailWrongFormat + '</p>');
                return;
            }

            user.email = email;

            callAjax('register/ajaxCheckData', user, function (result) {
                callAjax('login/facebook', user, handleFacebookLogin, handleFacebookLoginError);
            }, function (err) {
                var form = $('.fb_email .input-wrap');
                form.addClass('error');
                form.append('<p class="error-msg">' + emailExistedTxt + '</p>');
                promptEmail(user);
            });
        });

    });
}


function checkEmailOnFBUser(user) {
    if (user.email == undefined) {
        promptEmail(user);
        return;
    }

    callAjax('register/ajaxCheckData', user, function (result) {
        callAjax('login/facebook', user, handleFacebookLogin, handleFacebookLoginError);
    }, function (err) {
        var form = $('.fb_email .input-wrap');
        form.addClass('error');
        form.append('<p class="error-msg">' + emailExistedTxt + '</p>');
        promptEmail(user);
    });

}


function validEmail(email) {

    var regex = /^([a-zA-Z0-9_.+-])+\@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/;
    return regex.test(email);

}


function fb_login(callBack) {
    FB.login(function (response) {
        if (response.authResponse) {
            FB.api('/me', { fields: 'first_name, last_name, email, name' }, function (user) {

                fbUser = {
                    'email': user.email,
                    'first_name': user.first_name,
                    'last_name': user.last_name,
                    'fbid': user.id,
                    'username': user.name
                };

                // if (callBack != undefined) {
                //     callBack(fbUser);
                // }

                callAjax('login/isFBExisted', fbUser, handleFBExisted, handleFBNotExisted);

            });
        }

    }, { scope: 'email' });

}

function handleFBExisted(result) {
    if (result.status) {
        callAjax('login/facebook', fbUser, handleFacebookLogin, handleFacebookLoginError);
    } else {
        handleFBNotExisted();
    }
}


function handleFBNotExisted(result) {
    var form = $('.fb_email .input-wrap');
    form.removeClass('error');
    $('.error-msg').remove();

    checkEmailOnFBUser(fbUser);
}