﻿var Membership =
{
    _isDebugging: false,
    _isLoggedIn: false,
    _loginUrl: '',
    _logoutUrl: '',
    _sendPasswordUrl: '',
    _signUpUrl: '',
    _deleteUserUrl: '',
    _centerMeTimer: null,

    get_isLoggedIn: function() {
        return Membership._isLoggedIn;
    },

    set_isLoggedIn: function(value) {
        if (Membership._isLoggedIn !== value) {
            Membership._isLoggedIn = value;
        }
    },

    set_loginUrl: function(value) {
        if (Membership._loginUrl !== value) {
            Membership._loginUrl = value;
        }
    },

    set_logoutUrl: function(value) {
        if (Membership._logoutUrl !== value) {
            Membership._logoutUrl = value;
        }
    },

    set_signUpUrl: function(value) {
        if (Membership._signUpUrl !== value) {
            Membership._signUpUrl = value;
        }
    },

    set_sendPasswordUrl: function(value) {
        if (Membership._sendPasswordUrl !== value) {
            Membership._sendPasswordUrl = value;
        }
    },

    init: function() {
        //add handlers
        $("#divMembershipClose").click(function() { Membership._closeButtonClick(); });
        $("#txtForgotEmail").keydown(function(e) { Membership._keyDownForForgotPassword(e); });

        $("#txtLoginUserName").keydown(function(e) { Membership._keyDownForLogin(e); });
        $("#txtLoginPassword").keydown(function(e) { Membership._keyDownForPassword(e); });
        $("#txtSignupConfirm").keydown(function(e) { Membership._keyDownForSignup(e); });
        $("#txtSignupEmail").keydown(function(e) { Membership._keyDownForSignup(e); });
    },

    dispose: function() {
        //Membership._clearCenterMeTimer();

        $removeHandler($get('divMembershipClose'), "click", Membership._closeButtonClick);

        $removeHandler($get('txtForgotEmail'), "keydown", Membership._keyDownForForgotPassword);

        $removeHandler($get('txtLoginUserName'), "keydown", Membership._keyDownForLogin);
        $removeHandler($get('txtLoginPassword'), "keydown", Membership._keyDownForPassword);
        $removeHandler($get('txtSignupConfirm'), "keydown", Membership._keyDownForSignup);
        $removeHandler($get('txtSignupEmail'), "keydown", Membership._keyDownForSignup);
    },

    _show: function() {

        try {
            $("#divMembershipBox").modal({ overlay: 100 });
        }
        catch (e) { //эесть какая-т :)
            $("#divMembershipBox").modal({ overlay: 50 });
        }

    },

    _hide: function() {

        $.modal.close();

    },

    showLogin: function() {
        $("#divSignup").hide();
        $("#divLogin").show();

        //hide validators and messages
        $("#divMembershipBox span.validator").hide();
        $("#divMembershipBox span.validator").text('');
        $("#divMembershipBox span.message").hide();

        Membership._show();
    },

    login: function() {
        $("#divLogin span.validator").hide();
        $("#loginMessage").hide();
        $("#valLoginUserName").text('');
        $("#valLoginPassword").text('');

        var txtUserName = $('#txtLoginUserName');
        var userName = $.trim(txtUserName.val());

        if (userName.length == 0) {
            Membership._showMessage('#valLoginUserName', 'Задайте имя пользователя', true);
            $(txtLoginUserName).focus();
            return;
        }

        var txtPassword = $('#txtLoginPassword');
        var password = txtPassword.val();

        if (password.length == 0) {
            Membership._showMessage('#valLoginPassword', 'Пароль не может быть пустым.', true);
            $(txtLoginPassword).focus();
            return;
        }

        var rememberMe = $('#chkLoginRememberMe').is(":checked"); // = $('#chkLoginRememberMe').checked;

        Membership._showMessage('#loginMessage', 'Входим...', false);
        $('#btnLogin').attr("disabled", "disabled");
        $('#chkLoginRememberMe').attr("disabled", "disabled");

        $.ajax({
            type: "POST",
            dataType: "json",
            url: Membership._loginUrl,
            data: { userName: userName, password: password, rememberMe: rememberMe },
            success: function(result) {
                $('#btnLogin').removeAttr("disabled");
                $('#chkLoginRememberMe').removeAttr("disabled");

                if (result.isSuccessful == true) {
                    if (result.Data == "1") {
                        window.location = "/SignUpButRegistered";
                    }
                    else
                        window.location = "/marketing/networks";
                }
                else {
                    Membership._showMessage('#loginMessage', result.errorMessage, true);
                    $('#txtLoginUserName').focus();
                }
            },
            error: function(error) {
                $('#btnLogin').removeAttr("disabled");
                $('#chkLoginRememberMe').removeAttr("disabled");
                $('#txtLoginUserName').focus();
                Membership._showMessage('#loginMessage', 'Произошла неизвестная ошибка во время входа.', true);
            }
        });
    },

    logout: function() {

        $.post(
                        Membership._logoutUrl,
                        null,
                        function(result) {
                            if (result.isSuccessful == true) {
                                window.location.reload();
                            }
                        },
                        "json"
                    );
    },

    DeleteMe: function() {
        if (confirm("Вы точно хотите удалить свою учетную запись?")) {
            $.post(
                        "/User/DeleteMe",
                        null,
                        function(result) {
                            if (result.isSuccessful == true) {
                                window.location.reload();
                            }
                        },
                        "json"
                    );
        }
    },

    sendPassword: function() {
        $("#divLogin span.validator").hide();
        $("#passwordMessage").hide();

        var txtEmail = $('#txtForgotEmail');
        var email = $.trim(txtEmail.val());

        if (email.length == 0) {
            Membership._showMessage('#valForgotEmail', 'Email не может быть пустым.', true);
            $(txtEmail).focus();
            return;
        }

        if (!Membership._isValidEmail(email)) {
            Membership._showMessage('#valForgotEmail', 'Не верный email-адрес.', true);
            $(txtEmail).focus();
            return;
        }

        Membership._showMessage('#passwordMessage', 'Отправляю пароль...', false);
        $('#btnPassword').attr("disabled", "disabled");
        $.ajax({
            type: "POST",
            dataType: "json",
            url: Membership._sendPasswordUrl,
            data: { email: email },
            success: function(result) {
                $("#passwordMessage").hide();
                $('#btnPassword').removeAttr("disabled");

                if (result.isSuccessful == true) {
                    Membership._hide();
                }
                else {
                    Membership._showMessage('#valForgotEmail', result.errorMessage, true);
                    $(txtEmail).focus();
                }
            },
            error: function(error) {
                $('#btnPassword').removeAttr("disabled");
                Membership._showMessage('#passwordMessage', 'Неизвестная ошибка при отправке пароля.', true);
            }
        });
    },

    showSignUp: function() {
        $("#divLogin").hide();
        $("#divSignup").show();
        //hide validators and messages
        $("#divMembershipBox span.validator").hide();
        $("#divMembershipBox span.validator").text('');
        $("#divMembershipBox span.message").hide();
        //reset intputs
        $("#divMembershipBox :text").val("");
        $("#divMembershipBox :password").val("");
        //        $("#divMembershipBox :checkbox").each(function ()
        //                                                { this.checked = false;});        
        Membership._show();
        if (Membership._isDebugging) {
           // $("#txtSignupUserName").val("");
            $("#txtSignupPassword").val("");
            $("#txtSignupEmail").val("");
        }

    },

    signUp: function() {
        $("#divSignup span.validator").hide();
        $("#signupMessage").hide();

        var txtPromoCode = $('#txtSignupPromoCode');
        var promoCode = $.trim(txtPromoCode.val());
        if (promoCode.length == 0) {
            Membership._showMessage('#valSignupPromoCode', 'Не задан промо-код.', true);
            $(txtSignupPromoCode).focus();
            return;
        }


        var txtUserName = $('#txtSignupEmail');
        var userName = $.trim(txtUserName.val());

        if (userName.length == 0) {
            Membership._showMessage('#valSignupUserName', 'Задайте имя пользователя.', true);
            $(txtLoginUserName).focus();
            return;
        }

        var txtPassword = $('#txtSignupPassword');
        var password = txtPassword.val();

        if (password.length < 4) {
            Membership._showMessage('#valSignupPassword', 'Минимальная длина пароля - 4 символа', true);
            $(txtLoginPassword).focus();
            return;
        }

        var txtEmail = $('#txtSignupEmail');
        var email = $.trim(txtEmail.val());

        if (email.length == 0) {
            Membership._showMessage('#valSignupEmail', 'Email не может быть пустым.', true);
            $(txtEmail).focus();
            return;
        }

        if (!Membership._isValidEmail(email)) {
            Membership._showMessage('#valSignupEmail', 'Некорректный eMail.', true);
            $(txtEmail).focus();
            return;
        }

        var formFields = [['userName', userName], ['password', password], ['email', email]];

        Membership._showMessage('#signupMessage', 'Регистрируюсь...', false);
        $('#btnSignup').attr("disabled", "disabled");

        $.ajax({
            type: "POST",
            dataType: "json",
            url: Membership._signUpUrl,
            data: { promoCode: promoCode, userName: userName, password: password, email: email },
            success: function(result) {
                $('#btnSignup').removeAttr("disabled");

                if (result.isSuccessful == true) {
                    Membership._hide();
                    window.location.reload();
                }
                else {
                    var msg = result.errorMessage;
                    $("#signupMessage").hide();

                   // if (msg.indexOf('username') > -1) {
                   //     Membership._showMessage('#valSignupUserName', msg, true);
                       // $(txtSignupUserName).focus();
                   // }
                    if ((msg.indexOf('E-mail') > -1) || ((msg.indexOf('username') > -1))) {
                        Membership._showMessage('#valSignupEmail', msg, true);
                        $(txtSignupEmail).focus();
                    }
                    else {
                        Membership._showMessage('#signupMessage', msg, true);
                    }
                }
            },
            error: function(error) {
                $('#btnSignup').removeAttr("disabled");
                Membership._showMessage('#signupMessage', 'Неизвестная ошибка при регистрации.', true);
            }
        });
    },

    _showMessage: function(e, msg, err) {
        //var e = $U.fix(e);
        if (err) {
            $(e).css("color", '#ff0000');
        }
        else {
            $(e).css("color", '#00aa11');
        }
        $(e).text(msg);
        $(e).show();
    },

    _isValidEmail: function(email) {
        var regExp = /^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/;
        return regExp.test(email);
    },

    _keyDownForPassword: function(e) {
        if (e.keyCode === keys.enter) {
            if ($("#txtLoginUserName").val().length != 0)
                Membership.login();
            else
                $("#txtLoginUserName").focus();
        }
        else if (e.keyCode === keys.esc) {
            Membership._hide();
        }
    },

    _keyDownForLogin: function(e) {
        if (e.keyCode === keys.enter) {
            if ($("#txtLoginPassword").val().length != 0)
                Membership.login();
            else
                $("#txtLoginPassword").focus();
        }
        else if (e.keyCode === keys.esc) {
            Membership._hide();
        }
    },

    _keyDownForForgotPassword: function(e) {
        if (e.keyCode === keys.enter) {
            Membership.sendPassword();
        }
        else if (e.keyCode === keys.esc) {
            Membership._hide();
        }
    },

    _keyDownForSignup: function(e) {
        if (e.keyCode === keys.enter) {
            Membership.signUp();
        }
        else if (e.keyCode === keys.esc) {
            Membership._hide();
        }
    },

    _closeButtonClick: function(e) {
        Membership._hide();
    }

}

var Friends =
{

    init : function()
    {
        //add handlers            
        $("#txtInviteFriends").keydown(function(e){Friends._keyDownForInvite(e);});
    },    
    
    
    _keyDownForInvite : function(e)
    {
        if (e.keyCode === keys.enter)
        {
            Friends.invite();
        }
    },

   
    
        addfriend : function(username)
    {
        var lnk = $("#lnkFollow" + username);
        
        if (lnk.attr("lnktype") == "unfollow")
            return Friends.unfollow(username);            
        lnk.hide();
        var url = "/Friends/AddFriend";
        $.ajax({ 
                type: "POST",
                dataType: "json",
                url: url,
                data: {username: username},
                success:function(result)
                {
                    if (result.isSuccessful == true)
                    {
                        lnk.addClass("hilite").fadeOut(1000, function(){
                                    lnk.fadeIn(1000, function(){lnk.removeClass("hilite")});
                                    lnk.html("un-follow");
                                    lnk.attr("lnktype", "unfollow");
                                    });
                                                         
                    }
                    else
                    {
                        alert(result.errorMessage);
                    }
                },
                error:function(error)
                {
                    alert(result.errorMessage);
                }
            });
    },
    
    unfollow : function(userid)
    {
        var lnk = $("#lnkFollow" + userid);
        if (lnk.attr("lnktype") == "follow")
            return Friends.follow(userid);
        lnk.hide();
            
        var url = "/user/unfollow";
        $.ajax({ 
                type: "POST",
                dataType: "json",
                url: url,
                data: {userid: userid},
                beforeSend:function()
                {
                },
                success:function(result)
                {
                    if (result.isSuccessful == true)
                    {
                        
                        lnk.addClass("hilite").fadeOut(1000, function(){
                                    lnk.fadeIn(1000, function(){lnk.removeClass("hilite")});
                                    lnk.html("follow");
                                    lnk.attr("lnktype", "follow");
                        });
                    }
                    else
                    {
                        alert(result.errorMessage);
                    }
                },
                error:function(error)
                {
                    alert(result.errorMessage);
                }
            });
    },
    
    find : function()
    {
        var txtFindFriends = $("#txtFindFriends");
        window.location = "/user/find?searchTerm=" + txtFindFriends.val();   
    },
    
    invite : function()
    {   
        var txt = $("#txtInviteFriends");
        var msg = $("#inviteMessage");
        var btn = $("#btnInvite");
        msg.hide();
        
        var email = $.trim(txt.val());
        if (email.length == 0)
        {
            Friends._showMessage(msg, 'Email не может быть пустым.');
            txt.focus();
            return;
        }

        if (!Membership._isValidEmail(email))
        {
            Friends._showMessage(msg, 'Не верный формат EMail.');
            txt.focus();
            return;
        }
        
        msg.html("sending invitation...").show();
        txt.attr("disabled","disabled");
        btn.attr("disabled","disabled");
        $.ajax({ 
                type: "POST",
                dataType: "json",
                url: "friends/invite",
                data: {email: email},
                success:function(result)
                {
                    if (result.isSuccessful == true)
                    {
                        Friends._showMessage(msg, "Приглашение отправлено.");
                        msg.fadeIn(1000, function(){msg.fadeOut(7000, function(){
                                                        txt.val("");
                                                        txt.removeAttr("disabled"); 
                                                        btn.removeAttr("disabled");
                                            })
                                            }
                                    );
                    }
                    else
                    {
                        Friends._showMessage(msg, result.errorMessage);
                        txt.removeAttr("disabled"); 
                        btn.removeAttr("disabled");
                    }
                },
                error:function(error)
                {
                    Friends._showMessage(msg, "Неизвестная ошибка.");
                    txt.removeAttr("disabled"); 
                    btn.removeAttr("disabled");
                }
            });
    },
    
    _showMessage : function (e, msg)
    {
        e.fadeOut(1000, function(){
                    e.addClass("hilite");
                    e.html(msg);
                    e.fadeIn(1000);
        });
    }
    
}

