/* Minification failed. Returning unminified contents.
(396,9,399,10): run-time error JS1314: Implicit property name must be identifier: disableButton() {
            $('#js-form-register-submit').prop("disabled", true);
            $('#js-form-register-submit').addClass("btn-spiner");
        }
(400,9,403,10): run-time error JS1314: Implicit property name must be identifier: enabelButton() {
            $('#js-form-register-submit').removeClass("btn-spiner");
            $('#js-form-register-submit').prop("disabled", false);
        }
 */
var user = user || {};

user = function () {
    var self =
    {
        returnCallbackRedirect: '',
        email: '',
        name: '',
        termsAccepted: true,
        idProfessionalProfile: 0,
        idContactPerson: 0,
        loginOkCallback: undefined,
        loginCancelCallback: undefined,
        setAnonymousUserId: function (urlSite, userId) {
            var url = urlSite + '/set-anonymous-user-id?userId=' + userId;
            $('body').ready(function () {
                $('body').append('<iframe height="1" width="1" src="' + url + '"></iframe>');
            });
        },
        logout: function (hardLogout, callbackFunction) {
            $.ajax({
                type: "POST",
                url: "/User/SignOutUserComplete",
                datatype: "json",
                traditional: true,
                success: function (response) {
                    window.removeEventListener('user:ready', userReady, false);
                    $("#js-partial-user").empty();
                    window.sessionStorage.clear();
                    if (response.result) {
                        if (response.text) {
                            user.idContactPerson = response.text.IdContactPerson;
                            user.idProfessionalProfile = response.text.IdProfessionalProfile;
                        }
                        else {
                            user.idContactPerson = response.result.IdContactPerson;
                            user.idProfessionalProfile = response.result.IdProfessionalProfile;
                        }                        
                        user.idClient = 0;
                        user.spreadDeleteRememberme(function () {
                            user.refreshAccount(hardLogout, callbackFunction);
                        });
                    }
                }
            });
        },
        refreshAccount: function (reload, callback) {
            if (reload) {
                location.reload();
            }
            else {

                $.get('/User/RefreshMyAccountResponsive', function (data) {
                    window.removeEventListener('user:ready', userReady, false);
                    $("#js-partial-user").empty();
                    $("#js-partial-user").html("").html(data.htmlUser);

                    $('.js-account-phone').remove();
                    $('#js-account-data').append(data.htmlPhone);
                    $('.js-account-desktop').remove();
                    $('#js-account-data').append(data.htmlDesktop);

                    $("#js-partial-user").ready(function () {
                        window.dispatchEvent(new window.CustomEvent('user:ready'));
                    });

                    if (callback) {
                        callback();
                    }

                    user.attachEvents();
                });

                if (typeof storefront != "undefined") {
                    storefront.downloads.reload();

                    if (typeof storefront.webinar.infobackup != null)
                        window.dispatchEvent(new window.CustomEvent('webinar:reload'));
                }
            }
        },
        refreshChatRequestForm: function () {
            if (typeof storefront != "undefined") {

                let iframe = $("#js-iframe-chatformurl");
                let currentData = iframe.data('src');

                $.get('/Shared/RefreshChatRequestForm?data=' + currentData, function (data) {

                    if (data.urlChatRequest) {
                        iframe[0].src = data.urlChatRequest;
                    }
                });
            }
        },
        sendAnonymousData: function (url, payload) {
            $.ajax({
                url: url,
                type: 'POST',
                data: JSON.stringify(payload),
                contentType: 'application/json; charset=utf-8',
                dataType: 'json',
                async: true,
                success: function (data, textStatus, jqXHR) {
                    if (data.error) {
                        console.log(data.error);
                    }
                },
                error: function (data, textStatus, jqXHR) {
                    console.log(textStatus);
                }
            });
        },
        changeStaffAccount: function (idCP, idPP) {
            $.ajax({
                type: "POST",
                url: "/User/SignOutUserAsyncRegisterAnother",
                datatype: "json",
                traditional: true,
                async: false,
                data: { "idContactPerson": idCP, "idProfessionalProfile": idPP },
                success: function (result) {
					window.location.reload(false);
                }
            });
            return false;
        },
        attachEvents: function () {
            $(".js-logout").off("click");
            $(".js-logout").on("click", function (e) {
                user.logout(true);
                e.preventDefault();
            });
        },
        init: function () {
            self.attachEvents();
            window.dispatchEvent(new window.CustomEvent('user:ready'));
        }
    };
    return self;
}();

;
user.login = function () {
    var self = {
        attachEvents: function () {

            $("#js-form-login").find("input:text,input[type='email'],input:password").coolify();

            $('#js-form-login').validate({
                errorPlacement: validation.errorPlacement,
                success: validation.success,
                highlight: validation.highlight,
                unhighlight: validation.unhighlight,
                rules: {
                    username: {
                        required: true,
                        email: true,
                        checkEmailExists: true
                    },
                    password: {
                        required: true
                    }
                },
                submitHandler: function () { document.getElementById("js-form-login").submit(); }
            });
        },

        load: function () {
            self.attachEvents();
        },
    };
    return self;
}();;

user.loginRequiredForm = function () {
    var self = {
        attachEvents: function () {

            $('#js-form-login').validate({
                errorPlacement: validation.errorPlacement,
                success: validation.success,
                highlight: validation.highlight,
                unhighlight: validation.unhighlight,
                rules: {
                    username: {
                        required: true,
                        email: true,
                        checkEmailExists: true
                    },
                    password: {
                        required: true
                    }
                },
                submitHandler: self.post
            });

            $('#js-forgotPassword-login-required').on('click', function (e) {
                e.preventDefault();
                user.modalForgotPassword.attachEvents();
                $("#js-forgot-password-modal").modal('show');
            });

        },

        post: function () {
            $.ajax({
                type: "POST",
                url: "/User/SignInUserComplete",
                datatype: "json",
                traditional: true,
                data: $('#js-form-login').serialize(),
                beforeSend: function (xhr, settings) {
                    var inputPassword = $('#js-login-password');
                    var container = inputPassword.closest('.form-group');
                    inputPassword.removeClass('form-control-danger');
                    container.removeClass('has-danger');
                    container.remove('.invalid-feedback');
                },
                success: function (result) {
                    if (result.result) {
                        user.idContactPerson = result.text.IdContactPerson;
                        user.idProfessionalProfile = result.text.IdProfessionalProfile;
                        user.email = result.text.Email;
                        user.name = result.text.Name;
                        window.location.replace($('#js-form-login input[name="returnurl"]').val());
                    }
                    else {
                        var inputPassword = $('#js-login-password');
                        var container = inputPassword.closest('.form-group');
                        inputPassword.addClass('form-control-danger');
                        container.addClass('has-danger');
                        container.append('<div class="form-control-feedback invalid-feedback">Please check your password</div>');
                    }
                }
            });
        },
        init: function () {
            window.dispatchEvent(new window.CustomEvent('user.loginRequiredForm:ready'));
        },

        load: function () {
            self.attachEvents();
        },
    };
    return self;
}();
;

user.modalForgotPassword = function () {
    var self =
    {
        attachEvents: function () {

            $("#js-form-forgot-password-modal input").coolify();

            $('#js-form-forgot-password-modal').validate({
                errorPlacement: validation.errorPlacement,
                success: validation.success,
                highlight: validation.highlight,
                unhighlight: validation.unhighlight,
                rules: {
                    email: {
                        required: true,
                        email: true,
                        isFormatEmailValid: true,
                    }
                },
                onfocusout: function (element) { $(element).valid(); },
                submitHandler: self.postForgotPassword
            });

        },
        userEmail: undefined,
        postForgotPassword: function () {
            self.userEmail = $("#js-forgot-password-modal-email").val();
            $.ajax({
                url: '/User/doForgottenPassword',
                type: "POST",
                data: {
                    email: self.userEmail
                },
                success: function (data) {
                    if (data) {
                        $("#js-forgot-password-modal-title").html('Please check your email');
                        $("#js-forgot-password-modal-body").html("<div class='text-xs-center'>We emailed a password reset link to " + self.userEmail + "</div>");
                    }
                    else {
                        $("#js-forgot-password-modal-title").html('An error has been occurred');
                        $("#js-forgot-password-modal-body").html("<div class='text-xs-center'>Please try again later</div>");
                    }
                },
                error: function () {
                    $("#js-forgot-password-modal-title").html('An error has been occurred');
                    $("#js-forgot-password-modal-body").html("<div class='text-xs-center'>Please try again later</div>");
                }
            });
        }
    };
    return self;
}();
;

user.pageRegister = function () {
    var self = {
        returnUrl: undefined,

        attachEvents: function () {

            $('#js-form-register').validate({
                errorPlacement: validation.errorPlacement,
                success: validation.success,
                highlight: validation.highlight,
                unhighlight: validation.unhighlight,
                onkeyup: validation.onkeyup,
                rules: {
                    name: {
                        required: true
                    },
                    lastName: {
                        required: true
                    },
                    email: {
                        required: true,
                        email: true,
                        checkEmailNotExists: true
                    },
                    password: {
                        required: true,
                        isInLimitCharaters: true,
                        isInMaxCharaters: true,
                        hasLowercaseCharacter: true,
                        hasUppercaseCharacter: true,
                        hasNumber: true,
                        hasNonAlphanumericCharacter: true
                    },
                    confirmNewPassword: {
                        required: true,
                        confirmPassword: true,
                    }
                },
                onfocusout: function (element) { $(element).valid(); },
                submitHandler: self.postPageRegister
            }).resetForm();

        },

        init: function () {
            //$(document).trigger("user.pageRegister:ready");
            //document.dispatchEvent(new Event('user.pageRegister:ready'));
            window.dispatchEvent(new window.CustomEvent('user.pageRegister:ready'));
        },

        load: function () {
            self.attachEvents();
        },

        postPageRegister: function (form) {

            var data = $(form).serialize();

            $('#js-registerPage-form').overlayLoadingMask();
            $('#js-registerPage-form input').prop('disabled', true)
            self.disableButton();

            $.post('/user/register', data, function (result) {
                if (result.success) {
                    user.idProfessionalProfile = result.user.IdProfessionalProfile;
                    $("#js-registerPage-form").hide();
                    $("#js-registerPage-confirmation").show();

                    googleanalytics.saveTag('Interactions', 'User Registration', self.url, 0);
                    googleanalytics.saveTag('Registration', 'New Professional Profile', user.IdProfessionalProfile, 0);
                    if (result.registerInterests) {
                        googleanalytics.saveTag('Interactions', 'Subscribe Interests Confirm', window.location.href, 0);
                    }

                    user.refreshAccount(false, function () {
                        if (user.loginOkCallback) {
                            user.loginOkCallback();
                        }
                    });

                    if (self.returnUrl) {
                        window.location.href = self.returnUrl;
                    }
                }
                else if (result.error) {
                    $('#js-registerPage-form').overlayLoadingMask('hide');
                    $('#js-registerPage-error').show().text(result.error);
                }
                self.enabelButton();
            });
            return false;
        },
        disableButton() {
            $('#js-form-register-submit').prop("disabled", true);
            $('#js-form-register-submit').addClass("btn-spiner");
        },
        enabelButton() {
            $('#js-form-register-submit').removeClass("btn-spiner");
            $('#js-form-register-submit').prop("disabled", false);
        },

    };
    return self;
}();
;

user.qualityCheckModule = function () {
    var self = {
        attachEvents: function () {

            window.addEventListener("message", function (event) {
                try {
                    var message = JSON.parse(event.data);
                    if (message && message.id && message.id == 'user_qc') {
                        $(message.html).insertBefore('#js-divider-before-logoutButton');

                        //$('#qualitycheck_userarea').on("click", function (event) {
                        //       event.stopPropagation();
                        //   });

                        //   $("#js-qc-3").on("click", function () { event.stopPropagation(); self.sendQualityCheck(3); });
                        //   $("#js-qc-2").on("click", function () { event.stopPropagation(); self.sendQualityCheck(2); });
                        //   $("#js-qc-1").on("click", function () { event.stopPropagation(); self.sendQualityCheck(1); });
                        //   $("#js-qc-0").on("click", function () { event.stopPropagation(); self.sendQualityCheck(0); });

                        if ($('#qualitycheck_userarea').length) {
                            if ($('#js-divider-before-logoutButton').length) {
                                $('#qualitycheck_userarea').detach().insertBefore('#js-divider-before-logoutButton').show();
                            }

                            $('#qualitycheck_userarea').on("click", function (event) {
                                event.stopPropagation();
                            });

                            $("#js-qc-3").on("click", function () { event.stopPropagation(); self.sendQualityCheck(3); });
                            $("#js-qc-2").on("click", function () { event.stopPropagation(); self.sendQualityCheck(2); });
                            $("#js-qc-1").on("click", function () { event.stopPropagation(); self.sendQualityCheck(1); });
                            $("#js-qc-0").on("click", function () { event.stopPropagation(); self.sendQualityCheck(0); });
                        }
                    }
                }
                catch (exception) {
                    //console.log(exception.message);
                }
            }, false);

        },

        sendQualityCheck: function (value) {
            $.ajax(
                {
                    url: "/shared/QualityCheckFormUserAreaPost",
                    type: "POST",
                    data: { 'clientsatisfaction': value },
                    success: function (data) {
                        if (data.result === true) {
                            if (value == 3 || value == 2) {
                                $('#qualitycheck_userarea_step1').hide();
                                $('#client_satisfied').show();
                            }
                            else {
                                $('#qualitycheck_userarea_step1').hide();
                                $('#client_disatisfied').show();
                            }
                        }
                        else {
                            $('#qualitycheck_userarea_step1').hide();
                            $('#client_error').show();
                        }

                    }
                });
        },

        load: function () {
            self.attachEvents();
        },
    };
    return self;
}();;

user.resetPassword = function () {
    var self = {
        attachEvents: function () {

            $("#js-form-reset-password-new").find("input:text,input[type='email'],input:password").coolify();

            $('#js-form-reset-password-new').validate({
                errorPlacement: validation.errorPlacement,
                success: validation.success,
                highlight: validation.highlight,
                unhighlight: validation.unhighlight,
                rules: {
                    confirmNewPassword: {
                        required: true,
                        confirmPassword: true,
                    }
                },
                submitHandler: function () { document.getElementById("js-form-reset-password-new").submit(); }
            });
        },

        load: function () {
            self.attachEvents();
        },
    };
    return self;
}();;
user.termsModalCheck = function () {
    var self = {

        load: function () {

            if (!user.termsAccepted) {
                $('#js-terms-acepted-modal').modal({ backdrop: 'static', keyboard: false })
            }
            $('#js-terms-acepted-modal-confirm-email').modal({ backdrop: 'static', keyboard: false })

            $('#js-terms-acepted-action-confirm-email').on("click", function (event) {
                event.preventDefault();
                $('#js-terms-acepted-modal-confirm-email').modal('hide');
                $('#js-terms-acepted-confirm-email-content').find("#TermsAccepted").val(true);
            });

            $('#js-terms-acepted-action').on("click", function (event) {
                event.preventDefault();
                $.get("/User/AcceptTermsAndConditions")
                    .done(function (data) {
                        if (data.result)
                            $('#js-terms-acepted-modal').modal('hide');
                        else
                            alert(data.text);
                    });
            });
        },
    };
    return self;
}();;

user.validationResetPassword = function () {

    var self = {

        attachEvents: function () {

            var myInput = document.getElementById("js-password");
            var isInLimitCharaters = document.getElementById("js-isInLimitCharaters");
            var isInMaxCharaters = document.getElementById("js-isInMaxCharaters");
            var hasLowercase = document.getElementById("js-hasLowercaseCharacter");
            var hasUppercase = document.getElementById("js-hasUppercaseCharacter");
            var number = document.getElementById("js-hasNumber");
            var nonAlphanumericCharacter = document.getElementById("js-hasNonAlphanumericCharacter");

            // When the user starts to type something inside the password field
            if (myInput) {
                myInput.onkeyup = function () {
                    // Validate min length of the password
                    if (myInput.value.length >= 6) {
                        isInLimitCharaters.classList.remove("info");
                        isInLimitCharaters.classList.add("check");
                    } else {
                        isInLimitCharaters.classList.remove("check");
                        isInLimitCharaters.classList.add("info");
                    }
                    // Validate max length of the password
                    if (myInput.value.length < 16) {
                        isInMaxCharaters.classList.remove("info");
                        isInMaxCharaters.classList.add("check");
                    } else {
                        isInMaxCharaters.classList.remove("check");
                        isInMaxCharaters.classList.add("info");
                    }
                    // Validate if the password has lowercase letters
                    var hasLowercaseCharacter = /[a-z]/g;
                    if (myInput.value.match(hasLowercaseCharacter)) {
                        hasLowercase.classList.remove("info");
                        hasLowercase.classList.add("check");
                    } else {
                        hasLowercase.classList.remove("check");
                        hasLowercase.classList.add("info");
                    }
                    // Validate if the password has uppercase letters
                    var hasUppercaseCharacter = /[A-Z]/g;
                    if (myInput.value.match(hasUppercaseCharacter)) {
                        hasUppercase.classList.remove("info");
                        hasUppercase.classList.add("check");
                    } else {
                        hasUppercase.classList.remove("check");
                        hasUppercase.classList.add("info");
                    }
                    // Validate if the password has a number
                    var hasNumber = /[0-9]/g;
                    if (myInput.value.match(hasNumber)) {
                        number.classList.remove("info");
                        number.classList.add("check");
                    } else {
                        number.classList.remove("check");
                        number.classList.add("info");
                    }
                    // Validate if the password has nonAlphanumericCharacter
                    var hasNonAlphanumericCharacter = /[^a-zA-Z0-9_]/;
                    if (myInput.value.match(hasNonAlphanumericCharacter)) {
                        nonAlphanumericCharacter.classList.remove("info");
                        nonAlphanumericCharacter.classList.add("check");
                    } else {
                        nonAlphanumericCharacter.classList.remove("check");
                        nonAlphanumericCharacter.classList.add("info");
                    }

                    if ($('#js-isInLimitCharaters').hasClass('check') && $('#js-isInMaxCharaters').hasClass('check')
                        && $('#js-hasLowercaseCharacter').hasClass('check') && $('#js-hasUppercaseCharacter').hasClass('check')
                        && $('#js-hasNumber').hasClass('check') && $('#js-hasNonAlphanumericCharacter').hasClass('check')) {
                        $("#js-submmit-save-password").prop('disabled', false)
                    } else {
                        $("#js-submmit-save-password").prop('disabled', true)
                    }

                }
            }
        },

        load: function () {
            self.attachEvents();
        },

    };
    return self;
}();

;

user.confirmEmail = function () {
    var self = {
        attachEvents: function () {

            $("#js-form-reset-password").find("input:text,input[type='email'],input:password").coolify();

            $('#js-form-reset-password').validate({
                errorPlacement: validation.errorPlacement,
                success: validation.success,
                highlight: validation.highlight,
                unhighlight: validation.unhighlight,
                rules: {
                    newPassword: {
                        required: true,
                        isInLimitCharaters: true,
                        isInMaxCharaters: true,
                        hasLowercaseCharacter: true,
                        hasUppercaseCharacter: true,
                        hasNumber: true,
                        hasNonAlphanumericCharacter: true
                    },
                    confirmNewPassword: {
                        required: true,
                        confirmPassword: true,
                    }
                },
                submitHandler: function () { document.getElementById("js-form-reset-password").submit(); }
            });
        },

        load: function () {
            self.attachEvents();
        },
    };
    return self;
}();
;
user.forgotPassword = function () {
    var self = {
        attachEvents: function () {

            $("#js-forgot-password-form").find("input:text,input[type='email'],input:password").coolify();

            $('#js-forgot-password-form').validate({
                errorPlacement: validation.errorPlacement,
                success: validation.success,
                highlight: validation.highlight,
                unhighlight: validation.unhighlight,
                rules: {
                    usernameForgotPassword: {
                        required: true
                    }
                },
                submitHandler: function () { document.getElementById("js-forgot-password-form").submit(); }
            });
        },

        load: function () {
            self.attachEvents();
        },
    };
    return self;
}();;
$(document).ready(function () {
    user.init();    
    user.pageRegister.init();
    user.loginRequiredForm.init();
    user.qualityCheckModule.load();
    user.termsModalCheck.load();
    user.confirmEmail.load();
    user.resetPassword.load();
    user.forgotPassword.load();
    user.login.load();
});
;
