﻿/// <reference path="jquery.js" />
/// <reference path="Utility.js" />
var Membership =
    {
        _isLoggedIn: false,
        _logoutUrl: '',
        _redirectToPrevious: false,
        _vsu: null,
        _vsi: null,
        _vfp: null,

        get_isLoggedIn: function() {
            return Membership._isLoggedIn;
        },
        set_isLoggedIn: function(value) {
            Membership._isLoggedIn = value;
        },
        set_logoutUrl: function(value) {
            Membership._logoutUrl = value;
        },
        init: function() {
            $('#lnkSignin').click(function() {
                Membership.showSignin(false);
            });
            $('#lnkSignup').click(function() {
                Membership.showSignup(false);
            });
            $('#lnkSignout').click(function() {
                Membership.signout();
            });
            $('#lnkSigninSignup').click(function() {
                Membership.showSignup(false);
            });
            $('#lnkForgotSignup').click(function() {
                Membership.showSignup(false);
            });
            $('#lnkSignupSignin').click(function() {
                Membership.showSignin(false);
            });
            $('#lnkForgotPassword').click(function() {
                Membership.showForgotPwd(false);
            });
            $('#membershipBox').keydown(function(e) {
                if (e.keyCode === 27) // EscapeKey
                {
                    Membership._hide(false);
                }
            });
            $('#membershipClose').click(function() { Membership._hide(false); });
            $('#signinCancel').click(function() { Membership._hide(false); });
            $('#signupCancel').click(function() { Membership._hide(false); });
            $('#forgotPwdCancel').click(function() { Membership._hide(false); });
            $('#forgotPwdContinue').click(function() { Membership._hide(false); });


            Membership._vsu = $('#frmSignup').validate(
                                    {
                                        rules: {
                                            fullName: 'required',
                                            email: 'required',
                                            password: 'required',
                                            bday: 'required',
                                            bmonth: 'required',
                                            byear: 'required',
                                            gender: 'required',
                                            agreed: 'required'
                                        },
                                        messages: {

                                            fullName: 'نام و نام خانوادگی خود را وارد کنید',
                                            email: 'ایمیل خود را وارد کنید',
                                            password: 'رمز عبور مورد نظر خود را وارد کنید',
                                            bday: 'روز تولد',
                                            bmonth: 'ماه تولد',
                                            byear: 'سال تولد',
                                            gender: 'جنسیت خود را تعیین کنید',
                                            agreed: 'توافق خود با قوانین سایت را تایید کنید'
                                        },
                                        submitHandler: function(form) {
                                            var options = {
                                                dataType: 'json',
                                                data: '__MVCASYNCPOST=true',
                                                beforeSubmit: function() {
                                                    $('#signupMessage').hide().text('در حال ثبت نام...').css('color', '');

                                                    $U.disableInputs('#signupSection', true);
                                                    $U.showProgress('در حال ثبت نام...');
                                                },
                                                success: function(result) {
                                                    $U.disableInputs('#signupSection', false);
                                                    $U.hideProgress();

                                                    if (result.isSuccessful) {
                                                        $U.messageBox('حساب شما ایجاد شد', 'حساب شما با موفقیت ایجاد شد. لطفا برای تکمیل فرآیند ثبت نام بر روی لینک موجود در ایمیل ارسالی کلیک کنید.', false, function() {
                                                            Membership._hide(true);
                                                            window.location.reload();
                                                        });
                                                    }
                                                    else {
                                                        $('#signUpErrorsContainer').text(result.errorMessage).css({ color: '#ff0000', display: 'block' });
                                                    }
                                                }
                                            };

                                            $(form).ajaxSubmit(options);
                                            return false;
                                        }
                                    }
                                );
            Membership._vsi = $('#frmSignin').validate(
                                    {
                                        rules: {
                                            useremail: 'required',
                                            password: 'required'
                                        },
                                        messages:
                                                {
                                                    email: 'ایمیل خود را وارد کنید',
                                                    password: 'رمز عبور خود را وارد کنید'
                                                },
                                        submitHandler: function(form) {
                                            var options = {
                                                dataType: 'json',
                                                data: '__MVCASYNCPOST=true',
                                                beforeSubmit: function() {
                                                    $('#loginMessage').hide().text('').css('color', '');

                                                    $U.disableInputs('#loginSection', true);
                                                    $U.showProgress('در حال کنترل حساب...', '#chkLoginRememberMe');
                                                },
                                                success: function(result) {
                                                    $U.disableInputs('#loginSection', false);
                                                    $U.hideProgress();

                                                    if (result.isSuccessful) {
                                                        Membership._hide(true);
                                                        window.location.reload();
                                                    }
                                                    else {
                                                        alert(result.errorMessage);
                                                        $('#signinErrorsContainer').text(result.errorMessage).css({ color: '#ff0000', display: 'block' });
                                                        $U.focus('txtSigninUserEmail');
                                                    }
                                                }
                                            };

                                            $(form).ajaxSubmit(options);
                                            return false;
                                        }
                                    }
                                );
            Membership._vfp = $('#frmFogot').validate(
                                    {
                                        rules: {
                                            email: {
                                                required: true,
                                                email: true
                                            }
                                        },
                                        messages: {
                                            email: {
                                                required: 'ایمیل خود را وارد کنید',
                                                email: 'ساختار ایمیل صحیح نیست'
                                            }
                                        },
                                        submitHandler: function(form) {
                                            var options = {
                                                dataType: 'json',
                                                data: '__MVCASYNCPOST=true',
                                                beforeSubmit: function() {
                                                    $('#forgotPwdErrorsContainer').hide().text('').css('color', '');

                                                    $U.disableInputs('#forgotPwdSection', true);
                                                    $U.showProgress('در حال دریافت اطلاعات...');
                                                },
                                                success: function(result) {
                                                    $U.disableInputs('#forgotPwdSection', false);
                                                    $U.hideProgress();

                                                    if (result.isSuccessful) {
                                                        alert("رمز عبور به آدرس ایمیلتان ارسال شد");
                                                        Membership._hide(true);
                                                    }
                                                    else {
                                                        alert(result.errorMessage);
                                                        $('#forgotPwdErrorsContainer').text(result.errorMessage).css({ color: '#ff0000', display: 'block' });
                                                        $U.focus('forgotPwdEmail');
                                                    }
                                                }
                                            };

                                            $(form).ajaxSubmit(options);
                                            return false;
                                        }
                                    }
                                );

        },
        dispose: function() {
            Membership._clearCenterMeTimer();

            $('#membershipBox').unbind();
            $('#membershipClose').unbind();
            $('#lnkSignin').unbind();
            $('#lnkSignup').unbind();
        },
        showSignin: function(redirectToPreviuos) {
            Membership._redirectToPrevious = redirectToPreviuos;
            $('#signupSection').hide();
            $('#forgotPwdSection').hide();
            $('#signinSection').show();
            $('#signinMessage').text('');
            $(':input', '#frmSignin')
                 .not(':button, :submit, :reset, :hidden')
                 .val('');
            Membership._vsi.prepareForm();
            Membership._vsi.hideErrors();
            Membership._show();
            $U.focus('txtSigninUserEmail');
        },
        showSignup: function() {
            Membership._redirectToPrevious = false;
            $('#signinSection').hide();
            $('#forgotPwdSection').hide();
            $('#signupSection').show();
            $('#signupMessage').text('');
            $(':input', '#frmSignup')
                 .not(':button, :submit, :reset, :hidden')
                 .val('')
                 .removeAttr('checked')
                 .removeAttr('selected');
            Membership._vsu.prepareForm();
            Membership._vsu.hideErrors();

            Membership._show();
            $U.focus('txtSignupFullName');
        },
        showForgotPwd: function(redirectToPreviuos) {
            Membership._redirectToPrevious = redirectToPreviuos;
            $('#signupSection').hide();
            $('#signinSection').hide();
            $('#forgotPwdSection').show();

            Membership._vfp.prepareForm();
            Membership._vfp.hideErrors();

            Membership._show();
            $U.focus('forgotPwdEmail');
        },
        signout: function() {
            $.ajax(
                    {
                        url: Membership._logoutUrl,
                        type: 'POST',
                        dataType: 'json',
                        data: '__MVCASYNCPOST=true', // a fake param to fool iis for content-lenth
                        success: function(result) {
                            if (result.isSuccessful) {
                                window.location.reload();
                            }
                            else {
                                $U.alert('Error', result.errorMessage, true);
                            }
                        }
                    }
                );
        },
        _show: function() {
            $U.showModal();
            var modal = $('#membershipBox');
            $U.center(modal);
            modal.fadeIn();

            Membership._centerMe();

            modal.find('input').each(
                                        function() {
                                            var input = $(this)[0];
                                            var type = input.type.toLowerCase();

                                            if ((type == 'text') || (type == 'file') || (type == 'password')) {
                                                input.value = '';
                                            }
                                            else if ((type == 'checkbox') || (type == 'radio')) {
                                                input.checked = false;
                                            }
                                        }
                                    );

            $('span.error').hide();
            $('span.message').hide();
        },
        _hide: function(isSuccessful) {
            $U.disableInputs('#membershipBox', false);
            $U.hideProgress();
            Membership._clearCenterMeTimer();

            $('#membershipBox').fadeOut('normal', function() {
                $U.hideModal();

                if ((!isSuccessful) && (Membership._redirectToPrevious)) {
                    window.location = (document.referrer.length > 0) ? document.referrer : '/';
                }
            });
        },
        _centerMe: function() {
            var e = $('#membershipBox');

            $U.center(e);
            Membership._clearCenterMeTimer();
            Membership._centerMeTimer = setInterval(
                                                    function() {
                                                        Membership._centerMe();
                                                    },
                                                    2000
                                                );
        },
        _clearCenterMeTimer: function() {
            if (Membership._centerMeTimer != null) {
                clearInterval(Membership._centerMeTimer);
                Membership._centerMeTimer = null;
            }
        }
    };