﻿var auth = {
    formWidth: 618,
    formHeight: 468,

    VK_APP_ID: '2651900',

    MAIL_APP_ID: '647780',
    MAIL_APP_PRIVATE_KEY: 'bd4236e81babd3ec6d458c944eff7cfd',

    FB_APP_ID: '306422319372291',

    init: function () {
        if (window.needShowProfile) {
            auth.showProfileForm(true);
        }
    },

    login: function (method) {
        eval('auth.' + method + '.login();');
        return false;
    },

    logout: function () {
        var functionName = 'auth.' + window.authMethod + '.logout';
        if (typeof (eval(functionName)) == 'function') {
            eval(functionName + '();');
        }
        return false;
    },

    vkontakte: {
        init: function () {
            VK.init({
                apiId: auth.VK_APP_ID
            });

            VK.Observer.subscribe('auth.login', function (response) {
                if (window.isAuthenticated === false) {
                    auth.redirect('vklogin');
                }
            });

            VK.Observer.subscribe('auth.logout', function () {
                auth.redirect('logoff');
            });
        },
        login: function () {
            VK.Auth.login(null);
        },
        logout: function () {
            VK.Auth.logout();
        }
    },

    mail: {
        init: function () {
            mailru.loader.require('api', function () {

                mailru.connect.init(auth.MAIL_APP_ID, auth.MAIL_APP_PRIVATE_KEY);

                mailru.events.listen(mailru.connect.events.login, function (session) {
                    if (window.isAuthenticated === false) {
                        auth.redirect('maillogin');
                    }
                });

                mailru.events.listen(mailru.connect.events.logout, function () {
                    auth.redirect('logoff');
                });
            });
        },
        login: function () {
            mailru.connect.login();
        },
        logout: function () {
            mailru.connect.logout();
        }
    },

    odnoklassniki: {
        login: function () {
            alert('Данный способ авторизации находится в стадии разработки!');
        }
    },

    twitter: {
        login: function () {
            auth.redirect('twitterlogin');
        },
        logout: function () {
            auth.redirect('logoff');
        }
    },

    facebook: {
        init: function () {
            FB.init({
                appId: auth.FB_APP_ID,
                status: true,
                cookie: true,
                oauth: true,
                xfbml: true
            });
        },
        login: function () {
            FB.login(function (response) {
                if (response.authResponse && window.isAuthenticated === false) {
                    auth.redirect('fblogin', '&token=' + response.authResponse.accessToken);
                }
            });
        },
        logout: function () {
            FB.logout(function () {
                auth.redirect('logoff');
            });
        }
    },

    redirect: function (method, params) {
        window.location.href = '/account/' + method + '/?returnurl=' + window.location.href + (params != 'undefined' ? params : '');
    },

    registerNewUser: function () {
        if (/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/.test($('#register-email').val())) {
            if ($('#region').val() == -1 || $('#city') == -1) {
                alert('Пожалуйста, выберите регион и город проживания!');
            }
            else {
                $.ajax({
                    url: '/account/register',
                    type: 'POST',
                    dataType: 'json',
                    data: {
                        email: $('#register-email').val(),
                        region: $('#region').val(),
                        city: $('#city').val()
                    },
                    success: function (result) {
                        if (result.success) {
                            alert('Спасибо за регистрацию! На Ваш e-mail адресс высланы данные для входа!');
                        }
                        else {
                            alert(result.error);
                        }
                    }
                });
            }
        }
        else {
            alert('E-email адресс некорректен!');
        }
    },

    setLoading: function () {
        $.blockUI({ message: "Загрузка...",
            css: {
                border: 'none',
                padding: '15px',
                backgroundColor: '#000',
                '-webkit-border-radius': '10px',
                '-moz-border-radius': '10px',
                opacity: .5,
                color: '#fff'
            }
        });
    },

    submitProfileForm: function () {
        $.ajax({
            url: '/account/profile',
            data: $('#profile').serialize(),
            type: 'POST',
            dataType: 'json',
            success: function (data) {
                if (data.success == true) {
                    window.location.reload();
                }
                else {
                    alert('Извивинте, но все поля необходимы для заполнения!!!');
                }
            }
        });

        return false;
    },

    showProfileForm: function (external) {
        auth.setLoading();
        $.get('/account/profile', function (data) {
            $.unblockUI();
            $.blockUI({
                message: data,
                css: {
                    top: ($(window).height() - auth.formHeight) / 2 + 'px',
                    left: ($(window).width() - auth.formWidth) / 2 + 'px',
                    width: auth.formWidth + 'px',
                    height: auth.formHeight + 'px',
                    cursor: 'default'
                }
            });
            $('.blockOverlay').click($.unblockUI);
        });
        return false;
    },

    showLoginForm: function () {
        auth.setLoading();

        $.get('/account/logon', function (data) {
            $.unblockUI();
            $.blockUI({
                message: data,
                css: {
                    top: ($(window).height() - auth.formHeight) / 2 + 'px',
                    left: ($(window).width() - auth.formWidth) / 2 + 'px',
                    width: auth.formWidth + 'px',
                    height: auth.formHeight + 'px',
                    cursor: 'default'
                }
            });
            $('.blockOverlay').click($.unblockUI);
        });
        return false;
    }
};

$(document).ready(function () {
    auth.vkontakte.init();
    auth.mail.init();
    auth.facebook.init();
    auth.init();
});
