StyleRiver.Components.Gallery.ProductQickView = new function ProductQickView() {

    var setData = function setData(data, callback) {
        console.log(data); //todo - implement

        $('#txtName').text(data.Name + ' - ' + data.Price);
        $('#imgPrimary').attr('src', data.PrimaryImageURL);
        if (typeof callback == "function") {

            callback();
        }
    };

    this.GetProduct = function (id, callback) {
        $.get("/gallery/quickview", { productId: id }, function (data) {
            
            $("#divProductQuickView").html(data);
            $('.js_open_modal').on('click', function () {
                var modal = $('.js_sizeImgPopup');
                modal.modal('toggle');
            });

            $('.js_sizeImgPopup').find('.js_deny').on('click', function (e) {
                e.stopPropagation();
                $('.js_sizeImgPopup').modal('hide');
            });
            $("#divProductQuickView").show();
        });
        //Api.getProductById(id).then(response => {
        //    setData(response, callback);
        //})//.catch(error => {todo - add error handling
        ////    let code = error.responseJSON.error;
        ////    return $.Deferred().reject(//Presenter.login(code)).promise();
        ////});
    };
};;
(function () {
    var domPrototype = void 0;
    var ctor = StyleRiver.Components.Login.CartsMerged = function CartsMerged() {
        var _this = this;

        var events = {};
        var dom = this.dom = domPrototype.clone();

        this.mount = function (elem) {
            elem.append(this.dom);
        };


        var handleGoToCart = function () {
            var $this = $(this);
            var cartUrl = $this.data("cart-url");
            window.location = cartUrl;
        };



        var handleContinue = function () {
            
            if (events["continueButtonClicked"] != null) {
                events["continueButtonClicked"]();
            }

        };

        dom.on("click", ".btn-go-to-cart", handleGoToCart);

        dom.on("click", ".btn-continue", handleContinue);

        this.on = function (event, fnc) {
            events[event] = fnc;
        };

    };

    ctor.init = function () {
        domPrototype = domPrototype || $("[data-component='desktop-carts-merged']").detach();
    };
})();;
StyleRiver.Components.Login.ChangePassword = new function ChangePassword() {

    this.init = function () {
        StyleRiver.Components.Login.ThankYou.init();
        var events = {};
        var form = $("[data-component='change-password']"),
            txtPassword = form.find("[data-name='password']"),
            txtPasswordConfirm = form.find("[data-name='password-confirm']"),
            hiddenToken = form.find("[data-name='hidden-token']"),
            btnSubmit = form.find(".btn-submit"),
            formInnerDiv = form.find("#formInnerDiv"),
            thankYou = new StyleRiver.Components.Login.ThankYou(),
            paragraphPassChanged = $("[data-name='password-changed-message']");

        var transitionToThankYou = function transitionToThankYou(args) {
            formInnerDiv.css("display", "none");
            thankYou.setArgs(args);
            form.append(thankYou.dom);
            window.setTimeout(function () {
                document.location.href = "/";
            }, 2000);
        };

        var showError = function showError(validator) {
            var elem = validator.verifiable;
            if (elem.type == "maxLength" || elem.type == "data" || elem.type == "equal") {
                elem = elem.elem;
            } else if (elem.type == "radio") {
                elem = elem.parent;
            }
            var msg = validator.message.body;
            elem.addClass("error");
            elem.after("<span class=\"error_massage\">*" + msg + "</span>");
        };

        var clearError = function clearError(validator) {
            var elem = validator.verifiable;
            if (elem.type == "maxLength" || elem.type == "data" || elem.type == "equal") {
                elem = elem.elem;
            } else if (elem.type == "radio") {
                elem = elem.parent;
            }
            if (elem.hasClass("error")) {
                elem.removeClass("error");
                elem.next().remove();
            }
        };

        //Validations
        var validate = function validate(data) {
            var validator = new StyleRiver.Helpers.Validation.Validator();
            var validators = StyleRiver.Helpers.Validation.Validators;

            validator.push({
                verifiable: data.password,
                validate: validators.isFieldNotEmpty,
                message: { subject: "סיסמה חסרה", body: "יש להקליד סיסמה" },
                customErrorHandler: showError, resetCustomerErrorHandler: clearError,
                innerValidator: {
                    verifiable: data.password,
                    validate: validators.isValidPassword,
                    message: {
                        subject: "הסיסמה אינה תקינה",
                        body: "הסיסמה חייבת להיות מורכבת מ 6 תווים לפחות (כוללת לפחות אות אחת או מספר אחד)"
                    },
                    customErrorHandler: showError, resetCustomerErrorHandler: clearError
                }
            }, {
                verifiable: data.passwordConfirm,
                validate: validators.isFieldNotEmpty,
                message: { subject: "אימות סיסמה חסר", body: "יש להקליד אימות סיסמה" },
                customErrorHandler: showError, resetCustomerErrorHandler: clearError,
                innerValidator: {
                    verifiable: { type: "equal", elem: data.passwordConfirm, txtPassword: data.password.val(), txtPasswordConfirm: data.passwordConfirm.val() },
                    validate: function validate(verifiable) {
                        return verifiable.txtPassword === verifiable.txtPasswordConfirm;
                    },
                    message: { subject: "סיסמה לא זהה", body: "יש להקליד סיסמה זהה" },
                    customErrorHandler: showError, resetCustomerErrorHandler: clearError
                }
            });

            var errors = validator.validate(false, false);
            return errors.status;
        };
        var doSubmit = function doSubmit(e) {

            var password = txtPassword,
                passwordConfirm = txtPasswordConfirm,
                token = hiddenToken.val();

            var itemToValidate = {
                password: password,
                passwordConfirm: passwordConfirm
            };
            
            var data = {
                password: password.val(),
                passwordConfirm: passwordConfirm.val()
            };
            if (!validate(itemToValidate)) {
                return;
            }

            Api.postChangePassword(token, data.password).then(function (response) {
                transitionToThankYou({
                    title: "סיסמה אופסה בהצלחה",
                    text: "מיד תוחזר לעמוד"
                });
            }).catch(function (error) {
                paragraphPassChanged.html("שגיאה בהחלפת סיסמה");
                paragraphPassChanged.css({ "display": "inline-block", "color": "red" });
            });
        };
        btnSubmit.on("click", doSubmit);
        form.find("input").keypress(function (event) {
            if (event.which === 13) {
                doSubmit();
            }
        });
    };
};

$(function () {
    var changePassword = StyleRiver.Components.Login.ChangePassword;
    changePassword.init();
});;
StyleRiver.Components.Login.Errors = {
    Login: {
        unknown: 0,
        invalidInfo: 1,
        userNotFound: 2,
        userInactive: 3
    },
    Register: {
        unknown: 0,
        invalidInfo: 1,
        userAlreadyExists: 2,
        inactiveUserAlreadyExists: 3
    },
    LoginAsGuest: {
        unknown: 0,
        invalidInfo: 1,
        registeredUserExists: 2
    },
    FacebookLogin: {
        unknown: 0,
        noEmail: 1,
        invalidToken: 2
    },
    ChangePassword: {
        generalError: 0,
        tokenNotFound: 1,
        emailNotFound: 2,
        emailNotSent: 3
    }
};

StyleRiver.Components.Login.ErrorPresenter = new function ErrorPresenter() {
    var _StyleRiver$Component = StyleRiver.Components.Login.Errors,
	    Login = _StyleRiver$Component.Login,
	    Register = _StyleRiver$Component.Register,
	    LoginAsGuest = _StyleRiver$Component.LoginAsGuest,
	    FacebookLogin = _StyleRiver$Component.FacebookLogin,
	    ChangePassword = _StyleRiver$Component.ChangePassword;


    var unknownError = {
        subject: "שגיאה",
        body: "לא ידוע"
    };

    var invalidInfoError = {
        subject: "שגיאה",
        body: "הפרטים לא עברו ולדידציה"
    };

    this.login = function (code) {
        switch (code) {
            case Login.invalidInfo:
                return invalidInfoError;
            case Login.userNotFound:
                return {
                    subject: "האימייל או הסיסמא אינם נכונים",
                    body: 'אנא נסי שוב או <a data-action="forgotPassword" class="inline-forgot-password">  שחזרי סיסמא </a>'
                };
            case Login.userInactive:
                return {
                    subject: "משתמש לא פעיל",
                    body: "אנא הפעילי את המשתמש בעזרת הקישור שנשלח לחשבון האמייל שלך כרגע"
                };
            default:
                return unknownError;
        }
    };

    this.register = function (code) {
        switch (code) {
            case Register.inactiveUserAlreadyExists:
                return {
                    subject: "משתמש כבר קיים",
                    body: "המשתמש אינו פעיל"
                };
            case Register.userAlreadyExists:
                return {
                    subject: "משתמש כבר קיים",
                    body: "משתמש כבר קיים"
                };
            case Register.invalidInfo:
                return invalidInfoError;
            default:
                return unknownError;
        }
    };

    this.loginAsGuest = function (code) {
        switch (code) {
            case LoginAsGuest.invalidInfo:
                return invalidInfoError;
            case LoginAsGuest.registeredUserExists:
                return {
                    subject: "משתמש כבר קיים",
                    body: "משתמש עם זה כבר רשום לאתר"
                };
            default:
                return unknownError;
        }
    };

    this.facebookLogin = function (code) {
        switch (code) {
            case FacebookLogin.invalidToken:
                return {
                    subject: "שגיאה בהתחברות",
                    body: "המערכת לא הצליחה לאמת את החשבון מול פייסבוק"
                };
            case FacebookLogin.noEmail:
                return {
                    subject: "חסר מייל",
                    body: "לחשבון אין כתובת מייל מאומתת"
                };
            default:
                return unknownError;
        }
    };

    this.forgotPassword = function (code) {
        switch (code) {
            case 0:
                //GeneralError
                return {
                    subject: "שגיאה",
                    body: 'שגיאה בשליחת מייל'
                };
            case 1:
                return {
                    subject: "שגיאה",
                    body: 'שגיאה בשליחת מייל'
                };
            case 2:
                return {
                    subject: "שגיאה",
                    body: 'כתובת מייל לא נמצאת במערכת'
                };
            case 3:
                return {
                    subject: "שגיאה",
                    body: 'אימייל לא נשלח'
                };
            default:
                return {
                    subject: "שגיאה לא ידוע",
                    body: "שגיאה"
                };
        }
    };
};;
(function () {
    var domPrototype = void 0;
    var ctor = StyleRiver.Components.Login.FacebookFirstAgreement = function FacebookFirstAgreement() {
        var _this = this;

        var validate = function validate(data) {
            var validator = new StyleRiver.Helpers.Validation.Validator();
            var validators = StyleRiver.Helpers.Validation.Validators;

            validator.push({ verifiable: data.email, validate: validators.isFieldNotEmpty, message: { subject: "אימייל חסר", body: "יש להקליד אימייל" } }, { verifiable: data.email, validate: validators.isValidEmail, message: { subject: "אימייל לא תקין", body: " יש להקליד אימייל תקין" } });

            var errors = validator.validate(true);
            if (!errors.status) {
                _this.validationBubble.setDisplay(errors.errors[0]);
            }
            return errors.status;
        };

        var events = {};
        var dom = this.dom = domPrototype.clone();
        dom.find("input").keypress(function (event) {
            if (event.which === 13) {
                doSubmit();
            }
        });

        //dom.find("[data-action='forgotPassword']").on("click",
        //	() => {
        //	    if (!!events["forgotPassword"]) {
        //	        events["forgotPassword"]();
        //	    }
        //	});


        var bubble = this.validationBubble = new StyleRiver.Components.Login.ValidationBubble();
        dom.find("[data-mount='validation-bubble']").append(bubble.dom);

        var doSubmit = function doSubmit() {
            var email = dom.find("[data-name='email']").val();

            var itemToValidate = {
                email: email
            };

            if (!validate(itemToValidate)) {
                return;
            }

            if (events["submit"] != null) {
                itemToValidate.agree = dom.find("[data-name='agree']").is(":checked");
                itemToValidate.userId = dom.find("[data-name='userId']").val();
                events["submit"](itemToValidate);
            }
        };
        dom.on("click", ".btn-submit", doSubmit);

        this.on = function (event, fnc) {
            events[event] = fnc;
        };

        this.mount = function (elem) {
            bubble.clearDisplay();
            elem.append(this.dom);
        };

        this.setEmail = function (facebookMail) {
            dom.find("[data-name='email']").val(facebookMail);
        };

        this.setUserId = function (userId) {
            dom.find("[data-name='userId']").val(userId);
        };
    };

    ctor.init = function () {
        domPrototype = domPrototype || $("[data-component='desktop-facebook-first-agreement']").detach();
        $("[data-component='desktop-facebook-first-agreement']").find('[data-name="agree"]').css({
            'display': 'block',
            'opacity': 1,
            'visibility': 'visible'
        });
    };
})();;
(function () {
    var domPrototype = void 0;
    var ctor = StyleRiver.Components.Login.FastSignIn = function FastSignIn() {
        var _this = this;

        var events = {};
        var dom = this.dom = domPrototype.clone();
        var validate = function validate(data) {
            var validator = new StyleRiver.Helpers.Validation.Validator();
            var validators = StyleRiver.Helpers.Validation.Validators;

            validator.push({ verifiable: data.email, validate: validators.isFieldNotEmpty, message: { subject: "אימייל חסר", body: "יש להקליד אימייל" } }, { verifiable: data.email, validate: validators.isValidEmail, message: { subject: "אימייל לא תקין", body: " יש להקליד אימייל תקין" } });
            var errors = validator.validate(true);
            if (!errors.status) {
                _this.validationBubble.setDisplay(errors.errors[0]);
            }

            return errors.status;
        };
        var bubble = this.validationBubble = new StyleRiver.Components.Login.ValidationBubble();
        dom.find("[data-mount='validation-bubble']").append(bubble.dom);
        this.mount = function (elem) {
            bubble.clearDisplay();
            elem.append(this.dom);
        };
        var doSubmit = function doSubmit() {
            var email = dom.find("[data-name='email']").val();

            var itemToValidate = {
                email: email
            };

            if (!validate(itemToValidate)) {
                return;
            }

            if (events["submit"] != null) {
                events["submit"](email);
            }
        };
        dom.on("click", ".btn-submit", doSubmit);
        dom.find("input").keypress(function (event) {
            if (event.which === 13) {
                doSubmit();
            }
        });
        this.on = function (event, fnc) {
            events[event] = fnc;
        };
    };

    ctor.init = function () {
        domPrototype = $("[data-component='desktop-fast-sign-in']").detach();
    };
})();;
(function () {
    var domPrototype = void 0;
    var ctor = StyleRiver.Components.Login.ForgotPassword = function ForgotPassword() {
        var _this = this;

        var events = {};
        var dom = this.dom = domPrototype.clone();

        var showError = function showError(validator) {
            var elem = validator.verifiable;
            if (elem.type == "maxLength" || elem.type == "data") {
                elem = elem.elem;
            } else if (elem.type == "radio") {
                elem = elem.parent;
            }
            var msg = validator.message.body;
            elem.addClass("error");
            elem.after("<span class=\"error_massage\">*" + msg + "</span>");
        };

        var clearError = function clearError(validator) {
            var elem = validator.verifiable;
            if (elem.type == "maxLength" || elem.type == "data") {
                elem = elem.elem;
            } else if (elem.type == "radio") {
                elem = elem.parent;
            }
            if (elem.hasClass("error")) {
                elem.removeClass("error");
                elem.next().remove();
            }
        };

        var validate = function validate(data) {
            var validator = new StyleRiver.Helpers.Validation.Validator();
            var validators = StyleRiver.Helpers.Validation.Validators;

            validator.push({
                verifiable: data.email, validate: validators.isFieldNotEmpty, message: { subject: "אימייל חסר", body: "יש להקליד אימייל" }, customErrorHandler: showError, resetCustomerErrorHandler: clearError,
                innerValidator: { verifiable: data.email, validate: validators.isValidEmail, message: { subject: "אימייל לא תקין", body: " יש להקליד אימייל תקין" }, customErrorHandler: showError, resetCustomerErrorHandler: clearError }
            });

            var errors = validator.validate(false,false);            

            return errors.status;
        };
        var bubble = this.validationBubble = new StyleRiver.Components.Login.ValidationBubble();
        dom.find("[data-mount='validation-bubble']").append(bubble.dom);
        this.mount = function (elem) {
            bubble.clearDisplay();
            elem.append(this.dom);
        };
        var doSubmit = function doSubmit() {
            var email = dom.find("[data-name='email']");

            var itemToValidate = {
                email: email
            };

            if (!validate(itemToValidate)) {
                return;
            }

            if (events["submit"] != null) {
                events["submit"](email.val());
            }
        };
        dom.on("click", ".btn-submit", doSubmit);
        dom.find("input").keypress(function (event) {
            if (event.which === 13) {
                doSubmit();
            }
        });
        this.on = function (event, fnc) {
            events[event] = fnc;
        };
    };

    ctor.init = function () {
        domPrototype = domPrototype || $("[data-component='forgot-password']").clone();
    };
})();;
StyleRiver.Components.Login.Init = function () {
    _.forIn(StyleRiver.Components.Login, function (item) {
        item.init && item.init();
    });

    _.forIn(StyleRiver.Components.Login, function (item) {
        item.postInit && item.postInit();
    });

    StyleRiver.Components.Header.HeaderStrip.postInit();
};;

StyleRiver.Components.Login.Logic = new function () {
    var fbApi = StyleRiver.Facebook;
    var Presenter = StyleRiver.Components.Login.ErrorPresenter;
    var showMessage = function showMessage(obj) {
        ShowNotification(toastType.error, obj.title, obj.body);
    };

    //let setToken = token => {
    //	return Session.setToken(token);
    //}

    var setToken = function setToken(token, isFirstTimeFbLogin) {
        return Session.setToken(token, isFirstTimeFbLogin);
    };

    this.login = function (creds) {
        return Api.getToken(creds.email, creds.password, creds.rememberMe).then(function (response) {
            //setToken(response);
            var token = response.Token;
            setToken(token);

            //get indication if there was a carts merging
            var isCartsMerged = response.IsCartsMerged;

            return { isCartsMerged: isCartsMerged };

        }).catch(function (error) {
            var code = error.responseJSON.error;
            return $.Deferred().reject(Presenter.login(code)).promise();
        });
    };

    this.register = function (details) {
        return Api.createUser(details).then(function (response) {
            //setToken(response);
            var token = response.Token;
            setToken(token);

            //get indication if there was a carts merging
            var isCartsMerged = response.IsCartsMerged;

            return { isCartsMerged: isCartsMerged };

        }).catch(function (_ref) {
            var error = _ref.responseJSON.error;

            return $.Deferred().reject(Presenter.register(error)).promise();
        });
    };

    this.loginAsGuest = function (creds) {
        return Api.loginAsGuest(creds).then(function (token) {
            setToken(token);
        }).catch(function (_ref2) {
            var error = _ref2.responseJSON.error;

            return $.Deferred().reject(Presenter.loginAsGuest(error)).promise();
        });
    };

    this.facebookLogin = function () {
        return fbApi.login().then(function (response) {
            //return Api.loginWithFacebook(response).then(token => {
            //	setToken(token);
            return Api.loginWithFacebook(response).then(function (session) {
                setToken(session.Token);
                var isFirstFbLogin = session.IsFirstTimeFacebookLogin != null || session.IsFirstTimeFacebookLogin != undefined ? session.IsFirstTimeFacebookLogin : false;
                var facebookEmail = session.FaceBookEmail;
                var userId = session.UserId;

                var isCartsMerged = session.IsCartsMerged;
              

                return { isFirstFbLogin: isFirstFbLogin, facebookEmail: facebookEmail, userId: userId, isCartsMerged: isCartsMerged };
            }).catch(function (_ref3) {
                var error = _ref3.responseJSON.error;

                return $.Deferred().reject(Presenter.facebookLogin(error)).promise();
            });
        });
    };

    this.facebookFirstAgreement = function (data) {
        return Api.facebookFirstAgreement(data);
    };

    this.forgotPassword = function (obj) {
        return Api.postSendRestorePassword(obj).catch(function (_ref4) {
            var error = _ref4.responseJSON.error;

            return $.Deferred().reject(Presenter.forgotPassword(error)).promise();
        });
    };

    this.logout = function () {
        return Api.logout().always(function () {
            Session.invalidateToken();
            onLogOutSuccess();
        });
    };

    var onLogOutSuccess = function onLogOutSuccess() {
        if (events["onLogOutSuccess"] != null) {
            for (var key in events["onLogOutSuccess"]) {
                events["onLogOutSuccess"][key].fnc();
                if (events["onLogOutSuccess"][key].oneTime) {
                    delete events["onLogOutSuccess"][key];
                }
            }
        }
    };
    var exitWithFailure = function exitWithFailure() { };

    var events = {};
    this.on = function (evn, fnc, oneTime) {
        if (oneTime === undefined) {
            oneTime = false;
        }

        if (events[evn] == null) {
            events[evn] = [];
        }
        events[evn][0] = { fnc: fnc, oneTime: oneTime };
    };
};;

(function () {
    var Logic = StyleRiver.Components.Login.Logic;
    StyleRiver.Components.Login.Main = new function MainLogin() {
        var _this = this;

        var dom = void 0,
            signIn = void 0,
            signUp = void 0,
            forgotPassword = void 0,
            fastSignIn = void 0,
            facebookSignIn = void 0,
            arrow = void 0,
            mobileBtnSignIn = void 0,
            thankYou = void 0,
            facebookFirstAgreement = void 0;
        cartsMerged = void 0;
        var self = this;

        var fbApi = StyleRiver.Facebook;

        var mountTarget;

        var isCartsMerged = false;

        var LOGIN_TYPE_REGISTRATION = 1;

        //after 5 seconds hide welcome plasma
        setTimeout(function () {
            if ($("[data-purpose='welcome']").is(":visible")) {
                transitionOut();
                Cookies.set('hide-welcome-body', true);
            }
        }, 5000);
        //


        var transitionOut = function transitionOut() {
            //StyleRiver.Components.Login.Main.hide();
            $('body').removeClass("no-scroll");
            $("#blackBg").removeClass('active');
            $("[data-purpose]").slideUp(function () {
                StyleRiver.Components.Header.HeaderStrip.backToTop();
                $(".filler").show();
            });
        };
        var selectedControl = null;
        this.init = function () {
            dom = $("[data-component='sign-in-manager']");
            mountTarget = dom.find("[data-embed='login-panel']");
            facebookSignIn = dom.find(".btn-facebook");
            arrow = dom.find(".welcome-arrow");
            mobileBtnSignIn = dom.find(".btn-signin");

            //HACK: THIS IS HACK!
            $(".welcome-arrow").on("click", function () {

                transitionOut();
                for (var mainKey in events) {
                    for (var key in events[mainKey]) {
                        if (events[mainKey][key].option == self.eventOptions.currentCallback || events[mainKey][key].option == self.eventOptions.currentCallbackOnly) {
                            events[mainKey].splice(key, 1);
                        }
                    }
                }
            });

            if ($("[data-purpose='welcome']").is(":visible") && $("body").hasClass("login-mode")) {
                var _handler = void 0;
                _handler = function handler(e) {
                    if (e.originalEvent.deltaY > 0) {
                        transitionOut();
                        $(document).off("wheel", _handler);
                    }
                };
                $(document).on("wheel", _handler);
            }
            //Add a cookie to hide the main image next time the user come.
            $("section[data-purpose='welcome'] .welcome-arrow").on("click", function () {
                Cookies.set('hide-welcome-body', true);
            });

            dom.find(".btn-signin").on("click", function () {
                Notifications.success("signin");
            });
            dom.find("[data-action='existing']").on("click", function () {
                selectedControl = signIn;
                mountTarget.children().detach();
                signIn.mount(mountTarget);
                mountTarget.append(signIn.dom);
                mountTarget.find("input").val("");
                showSpecificAction("register");
            });
            dom.find("[data-action='register']").on("click", function () {
                selectedControl = signUp;
                mountTarget.children().detach();
                signUp.mount(mountTarget);
                mountTarget.find("input").val("");
                showSpecificAction("existing");
            });
            //dom.find("[data-action='guest']").on("click",
            //	() => {
            //		selectedControl = fastSignIn;
            //		mountTarget.children().detach();
            //		fastSignIn.mount(mountTarget);
            //		mountTarget.find("input").val("");

            //	});
            dom.find("[data-action='close-login']").on("click", transitionOut);
        };

        var showSpecificAction = function showSpecificAction(actionType) {
            $(".other-options-link").hide();
            $(".other-options-link[data-action=" + actionType + "]").show();
        };

        var isCartPage = function () {
            return document.location.href.indexOf("/cart/") != -1;
        }

        var transitionToThankYou = function transitionToThankYou(args) {
            dom.find(".btn-facebook").hide();
            dom.find(".after_facebook_divider").hide();
            thankYou.setArgs(args);
            dom.find("[data-component='other-options']").hide();
            mountTarget.children().detach();

            if (isCartsMerged && isCartPage()) { //carts merged so show --go to cart-- and --continue--

                cartsMerged.mount(mountTarget);
                cartsMerged.on("continueButtonClicked", function () {
                    onLoginSuccess();
                    transitionOut();
                });
                mountTarget.append(cartsMerged.dom);
            }
            else { //regular login without carts merged
                mountTarget.append(thankYou.dom);
                onLoginSuccess();

                //if registration hide the email activation message after 10 seconds
                if (args.loginType == LOGIN_TYPE_REGISTRATION) {
                    window.setTimeout(function () {
                        transitionOut();
                    }, 10000);
                }
                else {
                    window.setTimeout(function () {
                        transitionOut();
                    }, 5000);
                }

            }
        };


        var gtag_report_conversion = function (url) {
            try {
                var callback = function () {
                    if (typeof (url) != 'undefined') {
                        window.location = url;
                    }
                };


                gtag('event', 'conversion', {
                    send_to: 'AW - 858046630 / cGT6CMCNp8wBEKaBk5kD',
                    event_callback: callback
                });

            }
            catch (error) {
                console.error(error);
            }

            return false;
        };

        var current = void 0;
        this.postInit = function () {
            signIn = new StyleRiver.Components.Login.SignIn();
            signUp = new StyleRiver.Components.Login.SignUp();
            forgotPassword = new StyleRiver.Components.Login.ForgotPassword();
            fastSignIn = new StyleRiver.Components.Login.FastSignIn();
            thankYou = new StyleRiver.Components.Login.ThankYou();
            facebookFirstAgreement = new StyleRiver.Components.Login.FacebookFirstAgreement();
            cartsMerged = new StyleRiver.Components.Login.CartsMerged();
            selectedControl = signIn;

            var isAcceptMailing = false;

            signIn.on("forgotPassword", function () {
                selectedControl = forgotPassword;
                mountTarget.children().detach();
                forgotPassword.mount(mountTarget);
            });

            signIn.on("submit", function (creds) {
                Logic.login(creds).then(function (result) {
                    ga('send', 'event', 'login', 'login as existing user', 'succeed');

                    //set if carts merged indication
                    isCartsMerged = result.isCartsMerged;

                    transitionToThankYou({
                        title: "תודה שהתחברת",
                        text: "מיד תוחזר לעמוד"
                    });
                }).catch(function (err) {
                    console.log(err, 'catch');
                    ga('send', 'event', 'login', 'login as existing user', 'fail');
                    signIn.validationBubble.setDisplay(err);
                    onLoginFail();
                });
            });




            signUp.on("submit", function (details, evn) {
                isAcceptMailing = details.acceptNewsletter;
                Logic.register(details).then(function () {
                    ga('send', 'event', 'login', 'register as new user', 'succeed');
                    StyleRiver.Facebook.Pixel.track({ eventName: 'COMPLETE_REGISTRATION' });
                    if (isAcceptMailing) {
                        gtag_report_conversion();
                    }

                    if (evn != null) {
                        evn();
                    }

                    transitionToThankYou({
                        title: "תודה על ההרשמה,",
                        //text: "בתיבת המייל שלך מחכה לינק לאישור ההרשמה",
                        text: "מיד תוחזר לעמוד",
                        loginType: LOGIN_TYPE_REGISTRATION
                    });
                }).catch(function (err) {
                    ga('send', 'event', 'login', 'register as new user', 'fail');
                    if (evn != null) {
                        evn();
                    }
                    signUp.validationBubble.setDisplay(err);
                });
            });

            fastSignIn.on("submit", function (creds) {
                Logic.loginAsGuest(creds).then(function () {

                    transitionToThankYou({
                        title: "תודה שנרשמת כאורח",
                        text: "מיד תוחזר לעמוד"
                    });
                }).catch(function (err) {
                    fastSignIn.validationBubble.setDisplay(err);
                });
            });

            dom.find(".btn-facebook").on("click", function () {
                //Logic.facebookLogin().then(() => {
                Logic.facebookLogin().then(function (facebookInfo) {

                    ga('send', 'event', 'login', 'login as facebook user', 'succeed');

                    //first time facebook login, dont hide and show form with email and agreement
                    if (facebookInfo.isFirstFbLogin) {
                        console.log("first time facebook login : " + facebookInfo.facebookEmail);

                        //

                        selectedControl = facebookFirstAgreement;
                        mountTarget.children().detach();
                        $(".other-options").css("display", "none");
                        $(".btn-facebook").css("display", "none");
                        facebookFirstAgreement.setEmail(facebookInfo.facebookEmail);
                        facebookFirstAgreement.setUserId(facebookInfo.userId);
                        facebookFirstAgreement.mount(mountTarget);
                        mountTarget.append(facebookFirstAgreement.dom);

                        facebookFirstAgreement.on("submit", function (data) {

                            Api.facebookFirstAgreement(data).then(function () {

                                //set carts merged indication
                                isCartsMerged = facebookInfo.isCartsMerged;

                                transitionToThankYou({
                                    title: "תודה",
                                    text: "מיד תוחזר לעמוד"
                                });
                            });
                        });

                        //
                    } else {

                        //set carts merged indication
                        isCartsMerged = facebookInfo.isCartsMerged;

                        transitionToThankYou({
                            title: "תודה שהתחברת",
                            text: "מיד תוחזרי לעמוד"
                        });
                    }
                    //transitionToThankYou({
                    //	title : "תודה שנרשמת",
                    //	text : "מיד תוחזרי לעמוד"
                    //});
                }).catch(function (err) {
                    ga('send', 'event', 'login', 'login as facebook user', 'fail');
                    selectedControl.validationBubble.setDisplay(err);
                });
            });

            forgotPassword.on("submit", function (obj) {
                return Logic.forgotPassword(obj).then(function () {
                    transitionToThankYou({
                        title: "נשלח מייל לאיפוס סיסמה",
                        text: "מיד תוחזר לעמוד"
                    });
                }).catch(function (err) {
                    forgotPassword.validationBubble.setDisplay(err);
                });
            });
        };

        this.hide = function () {
            transitionOut();
        };

        this.show = function (isMobile) {
            $("[data-purpose='welcome']").hide();
            $("[data-purpose='login']").slideDown();
            mountTarget.children().detach();
            signIn.mount(mountTarget);
            showSpecificAction("register");
            dom.show();
            facebookSignIn.show();
            mountTarget.find("input").val("");
            //$('html,body').animate({
            //    scrollTop: 0
            //}, 700);
        };

        this.showWelcome = function () {
            $("[data-purpose='login']").hide();
            $("[data-purpose='welcome']").show();
            $(".main").addClass("animate");
            //$('html,body').animate({
            //    scrollTop: 0
            //}, 700);
        };

        this.showAnonymousLogin = function () {
            $(".other-options-link-anonymous").show();
            $(".other-options").addClass("anonymous-enabled");
        };

        var onLoginSuccess = function onLoginSuccess() {

            if (events["onLoginSuccess"] != null) {

                var arrayToIterate = events["onLoginSuccess"];
                var callbackOnly = events["onLoginSuccess"].filter(function (item) {
                    return item.option == self.eventOptions.currentCallbackOnly;
                });
                if (callbackOnly.length > 0) {

                    for (var key in callbackOnly) {

                        callbackOnly[key].fnc();
                        var i = events["onLoginSuccess"].indexOf(callbackOnly[key]);
                        events["onLoginSuccess"].splice(key, 1);
                    }
                } else {

                    for (var key in events["onLoginSuccess"]) {
                        events["onLoginSuccess"][key].fnc();
                        if (events["onLoginSuccess"][key].option != self.eventOptions.permanent) {
                            events["onLoginSuccess"].splice(key, 1);
                        }
                    }
                }
            }
            StyleRiver.Components.UpdateUserProductsCount();
        };

        var onLoginFail = function onLoginFail() {

            if (events["onLoginFail"] != null) {

                var arrayToIterate = events["onLoginFail"];
                var callbackOnly = events["onLoginFail"].filter(function (item) {
                    return item.option == self.eventOptions.currentCallbackOnly;
                });
                if (callbackOnly.length > 0) {

                    for (var key in callbackOnly) {

                        callbackOnly[key].fnc();
                        var i = events["onLoginFail"].indexOf(callbackOnly[key]);
                        events["onLoginFail"].splice(key, 1);
                    }
                } else {

                    for (var key in events["onLoginFail"]) {
                        events["onLoginFail"][key].fnc();
                        if (events["onLoginFail"][key].option != self.eventOptions.permanent) {
                            events["onLoginFail"].splice(key, 1);
                        }
                    }
                }
            }
        };

        var exitWithFailure = function exitWithFailure() { };

        var events = {};
        this.on = function (evn, fnc, option) {

            if (option === undefined) {
                option = _this.eventOptions.permanent;
            }

            if (events[evn] == null) {
                events[evn] = [];
            }
            events[evn][events[evn].length] = { fnc: fnc, option: option };

            //events[evn][0] = { fnc, oneTime};
        };

        this.eventOptions = {

            permanent: "permanent",
            oneTime: "oneTime",
            currentCallback: "currentCallback",
            currentCallbackOnly: "currentCallbackOnly"
        };
    };
})();;
(function () {
    var domPrototype = void 0;
    var ctor = StyleRiver.Components.Login.SignIn = function SignIn() {
        var _this = this;

        var showError = function showError(validator) {
            var elem = validator.verifiable;
            if (elem.type == "maxLength" || elem.type == "data") {
                elem = elem.elem;
            } else if (elem.type == "radio") {
                elem = elem.parent;
            }
            var msg = validator.message.body;
            elem.addClass("error");
            elem.after("<span class=\"error_massage\">*" + msg + "</span>");
        };

        var clearError = function clearError(validator) {
            var elem = validator.verifiable;
            if (elem.type == "maxLength" || elem.type == "data") {
                elem = elem.elem;
            } else if (elem.type == "radio") {
                elem = elem.parent;
            }
            if (elem.hasClass("error")) {
                elem.removeClass("error");
                elem.next().remove();
            }
        };

        var validate = function validate(data) {
            var validator = new StyleRiver.Helpers.Validation.Validator();
            var validators = StyleRiver.Helpers.Validation.Validators;

            validator.push({
                verifiable: data.email, validate: validators.isFieldNotEmpty, message: { subject: "אימייל חסר", body: "יש להקליד אימייל" }, customErrorHandler: showError, resetCustomerErrorHandler: clearError,
                innerValidator: { verifiable: data.email, validate: validators.isValidEmail, message: { subject: "אימייל לא תקין", body: " יש להקליד אימייל תקין" }, customErrorHandler: showError, resetCustomerErrorHandler: clearError }
                },                
                { verifiable: data.password, validate: validators.isFieldNotEmpty, message: { subject: "סיסמה חסרה", body: "יש להקליד סיסמה" }, customErrorHandler: showError, resetCustomerErrorHandler: clearError });

            var errors = validator.validate(false,false);
            
            return errors.status;
        };

        var events = {};
        var dom = this.dom = domPrototype.clone();
        dom.find("input").keypress(function (event) {
            if (event.which === 13) {
                doSubmit();
            }
        });
        dom.on("click", "[data-action='forgotPassword']", function () {
            ga('send', 'pageview', '/checkout/forgotpassword/');
            if (!!events["forgotPassword"]) {
                events["forgotPassword"]();
            }
        });
        var bubble = this.validationBubble = new StyleRiver.Components.Login.ValidationBubble();
        dom.find("[data-mount='validation-bubble']").append(bubble.dom);

        var doSubmit = function doSubmit() {            
            var email = dom.find("[data-name='email']");
            var password = dom.find("[data-name='password']");
            var rememberMe = dom.find("[data-name='rememberMe']");

            var itemToValidate = {
                email: email,
                password: password,
                rememberMe: { type: "radio", value: rememberMe.is(":checked"), elem: rememberMe, parent: rememberMe.parent().parent() }
            };

            var obj = {
                email: email.val(),
                password: password.val(),
                rememberMe: rememberMe.is(':checked')
            };

            if (!validate(itemToValidate)) {
                return;
            }

            if (events["submit"] != null) {
                events["submit"](obj);
            }
        };
        dom.on("click", ".btn-submit", doSubmit);

        this.on = function (event, fnc) {
            events[event] = fnc;
        };

        this.mount = function (elem) {
            bubble.clearDisplay();
            elem.append(this.dom);
        };
    };

    ctor.init = function () {
        domPrototype = domPrototype || $("[data-component='desktop-sign-in']").detach();
    };
})();;
(function () {
    var domPrototype = void 0;
    var ctor = StyleRiver.Components.Login.SignUp = function SignUp() {
        var _this = this;

        var events = {};
        var dom = this.dom = domPrototype.clone();
        var bubble = this.validationBubble = new StyleRiver.Components.Login.ValidationBubble();
        dom.find("[data-mount='validation-bubble']").append(bubble.dom);
        this.mount = function (elem) {
            bubble.clearDisplay();
            elem.append(this.dom);
        };

        var doSubmit = function doSubmit() {
            var email = dom.find("[data-name='email']");
            var password = dom.find("[data-name='password']");
            var firstName = dom.find("[data-name='first-name']");
            var lastName = dom.find("[data-name='last-name']");
            var accept = dom.find("[data-name='accept-conditions']");            
            var acceptNewsletter = dom.find("[data-name='accept-newsletter']");                        

            var valObj = {
                email: email,
                password: password,
                firstName: firstName,
                lastName: lastName,
                accept: { type: "radio", value: accept.is(":checked"), elem: accept, parent: accept.parent().parent() }
            };

            var obj = {
                email: email.val(),
                password: password.val(),
                firstName: firstName.val(),
                lastName: lastName.val(),
                accept: accept.is(":checked"),
                acceptNewsletter: acceptNewsletter.is(":checked")
            };

            if (!validate(valObj)) {
                ga('send', 'event', 'login', 'register as new user', 'fail');
                return;
            }

            var disableSubmitButton = function (disable) {
                var btn = dom.find('.btn-submit');
                btn.parent().find(".loader").remove();

                if (disable) {
                    btn.hide();
                    $("<div class=\"loader\"></div>").insertBefore(btn);                    
                } else {                    
                    btn.show();
                }
            }

            if (events["submit"] != null) {
                disableSubmitButton(true);
                events["submit"](obj, function () {
                    disableSubmitButton(false);
                });
                
            }
        };

        dom.on("click", ".btn-submit", doSubmit);
        dom.find("input").keypress(function (event) {
            if (event.which === 13) {
                doSubmit();
            }
        });
        this.on = function (event, fnc) {
            events[event] = fnc;
        };

        var validate = function validate(data) {
            var validator = new StyleRiver.Helpers.Validation.Validator();
            var validators = StyleRiver.Helpers.Validation.Validators;

            validator.push({ verifiable: data.firstName, validate: validators.isFieldNotEmpty, message: { subject: "שם פרטי חסר", body: "יש להקליד שם פרטי" }, customErrorHandler: showError, resetCustomerErrorHandler: clearError },
                { verifiable: data.lastName, validate: validators.isFieldNotEmpty, message: { subject: "שם משפחה חסר", body: "יש להקליד שם משפחה" }, customErrorHandler: showError, resetCustomerErrorHandler: clearError },
                {
                    verifiable: data.email, validate: validators.isFieldNotEmpty, message: { subject: "אימייל חסר", body: "יש להקליד אימייל" }, customErrorHandler: showError, resetCustomerErrorHandler: clearError,
                    innerValidator: { verifiable: data.email, validate: validators.isValidEmail, message: { subject: "אימייל לא תקין", body: "יש להקליד אימייל תקין" }, customErrorHandler: showError, resetCustomerErrorHandler: clearError }
                },
                {
                    verifiable: data.password, validate: validators.isFieldNotEmpty, message: { subject: "סיסמה חסרה", body: "יש להקליד סיסמה" }, customErrorHandler: showError, resetCustomerErrorHandler: clearError,
                    innerValidator: { verifiable: data.password, validate: validators.isValidPassword, message: { subject: "הסיסמה אינה תקינה", body: "הסיסמה חייבת להיות מורכבת מ 6 תווים לפחות (כוללת לפחות אות אחת או מספר אחד)" } }
                },
                { verifiable: data.accept, validate: validators.isTrue, message: { subject: "התנאים לא אושרו", body: "יש לאשר את התנאים" }, customErrorHandler: showError, resetCustomerErrorHandler: clearError }
            );

            var errors = validator.validate(false,false);            
            return errors.status;
        };

        var showError = function showError(validator) {
            var elem = validator.verifiable;
            if (elem.type == "maxLength" || elem.type == "data") {
                elem = elem.elem;
            } else if (elem.type == "radio") {
                elem = elem.parent;
            }
            var msg = validator.message.body;
            elem.addClass("error");
            elem.after("<span class=\"error_massage\">*" + msg + "</span>");
        };

        var clearError = function clearError(validator) {
            var elem = validator.verifiable;
            if (elem.type == "maxLength" || elem.type == "data") {
                elem = elem.elem;
            } else if (elem.type == "radio") {
                elem = elem.parent;
            }
            if (elem.hasClass("error")) {
                elem.removeClass("error");
                elem.next().remove();
            }
        };
    };

    ctor.init = function () {

        domPrototype = domPrototype || $("[data-component='desktop-sign-up']").detach();
    };
})();;
(function () {

    var domPrototype = void 0;

    /**
  * @param args Arguments for the thank you page
  */
    var ctor = StyleRiver.Components.Login.ThankYou = function ThankYou() {
        var dom = this.dom = domPrototype.clone();

        this.setArgs = function (args) {
            var title = dom.find("[data-source='title']");
            var text = dom.find("[data-source='text']");

            title.text(args.title);
            text.text(args.text);

            var LOGIN_TYPE_REGISTRATION = 1;

            var redAndBoldTextCss = { "color": "red", "font-weight": "bold" };
            var blackAndDefaultFontTextCss = { "color": "black", "font-weight": "normal" };
            //if registration colorize in red color and make font bold
            if (args.loginType == LOGIN_TYPE_REGISTRATION) {
                title.css(redAndBoldTextCss);
                text.css(redAndBoldTextCss);
            }
                //coloroize in default color black
            else {
                title.css(blackAndDefaultFontTextCss);
                text.css(blackAndDefaultFontTextCss);
            }

        };
    };

    ctor.init = function () {
        domPrototype = domPrototype || $("[data-component='thank-you']").detach();
    };
})();;
(function () {
    StyleRiver.Components.UpdateUserProductsCount = function () {
        Api.favoritesAndCartCount().then(function (response) {
            var dataIconSal = $("[data-icon-sal]");
            var dataIconSalWhite = $("[data-icon-sal-white]");
            if (response.data.CartCount > 0)
            {
                dataIconSal.attr("src", "/Content/images/icon-sal-full.svg");
                dataIconSal.parent().addClass("cart-full");

                dataIconSalWhite.attr("src", "/Content/images/icon-sal-full-white.svg");
                dataIconSalWhite.parent().addClass("cart-full");
            }
            else
            {
                dataIconSal.attr("src", "/Content/images/icon-sal-empty.svg");
                dataIconSal.parent().removeClass("cart-full");

                dataIconSalWhite.attr("src", "/Content/images/icon-sal-empty-white.svg");
                dataIconSalWhite.parent().removeClass("cart-full");
            }
            $(".cart-num-of-item").text(response.data.CartCount);
            $(".favorites-num-of-item").text(response.data.FavoritesCount);
        });
    };
})();;
(function () {
    var domPrototype = void 0;
    var ctor = StyleRiver.Components.Login.ValidationBubble = function ValidationBubble() {
        var dom = this.dom = domPrototype.clone();
        var eTitle = dom.find("[data-source='title']");
        var eText = dom.find("[data-source='text']");
        dom.hide();
        this.setDisplay = function (display) {
            display = display.message ? display.message : display;
            dom.show();
            eTitle.text(display.subject);
            eText.html(display.body);
        };

        this.clearDisplay = function () {
            eTitle.text("");
            eText.text("");
            dom.hide();
        };
    };

    ctor.init = function () {
        domPrototype = $("[data-component='validation-bubble']").detach();
    };
})();;
StyleRiver.Components.Popups = new function Popups() {
    
    return {

        confirmPopup: function (message) {

            return confirm(message);
        },

        errorMessagePopup: function (message) {

            return alert(message);
        }
    }
};
'use strict';

StyleRiver.Components.Product.ColorSwicher = new function ColorSwicher() {

    var isMobileView = screen.width < $("body").data("screen-resolution");

    var setData = function setData(data, callback) {

        $('.product_title').html(data.Name);
        //$('.product_company').html(data.BusinessName);
        $('.product_price_discount_label').html(data.DiscountLabel);

        if (data.RecommendedPrice != undefined && data.RecommendedPrice != data.Price) {
            $('.product_price_old').html('<span class="shekel">₪</span>' + data.RecommendedPrice).show();
            $('.product_price_sale').html(data.DiscountValue + '<span class="shekel">%</span> הנחה').show();            
        } else {

            $('.product_price_old').html('<span class="shekel">₪</span>').hide();
            $('.product_price_sale').html('<span class="shekel">%</span>').hide();
        }
        $('.product_price_real').html('<span class="shekel">₪</span>' + data.Price);

        if (data.ItemsLeft < 1) {
            $('.product_stockInfo').html('לא קיים במלאי').show();
        }
        else
        {
            $('.product_stockInfo').html('כרגע במלאי').show();
        }
        //else if (data.ItemsLeft < 4) {

        //    $('.product_stockInfo').html('נשארו ' + data.ItemsLeft + ' פריטים בלבד במלאי!').show();
        //} else {

        //    $('.product_stockInfo').html('').hide();
        //}

        if (data.DiscountLabel != null && data.DiscountLabel != "") {
            $(".product_price_sale").css("display", "none");
        }


        //$('.product_image_full').hide();
        $('.product_image_small').show().find('[data-image-url]').each(function (index) {

            var $this = $(this);
            if (index < data.ProductImages.length) {

                var image = data.ProductImages[index];
                var imageSegments = image.Url.split('/');
                var imageName = imageSegments[imageSegments.length - 1];
                //var alt = data.Name + '-' + (index + 1) + '-' + data.BusinessName;
                var alt = data.Name + '-' + (index + 1) + '-' + data.BrandName;
                $this.data('image-url', imageName);
                $this.attr('src', 'https://imgs.oneprojectshop.com/product/316/' + imageName);
                $this.attr('alt', alt);
                $this.attr('title', alt);
                $this.show();
            } else {

                $this.data('image-url', '');
                $this.attr('src', '');
                $this.hide();
            }
        }).promise().then(StyleRiver.Pages.Products.refreshImageSwapper());

        $('.dot').removeClass('active').first().addClass('active');
        $('.product_info_color_title').html(data.Color != null ? "צבע: " + data.Color.TagName : "");
        $('.selected_text').html('לבחירה');
        $('.product_info_size_title').html('בחר מידה');

        var sizesHtml = '';
        data.ProductSizes.forEach(function (item, index, array) {
            
            sizesHtml += '<span class="select_option' + (item.ItemsLeft < 1 ? '_disabled' : '') + '" data-size-code="' + item.SizeObj.Code + '">' + item.SizeObj.DisplayName + '</span>';

            if (index + 1 == array.length) {

                $('.product_info_size_select_options').html(sizesHtml).promise().then(StyleRiver.Pages.Products.refreshSizeSelection());
            }
        });

        $('.product_info_details_row_text.description').html(data.Description.replace(/\r\n/g, '<br/>'));

        $('#btnAddToCart').data('productid', data.Id);
        $('[data-favoriteheart]').data('product-id', data.Id);

        if (typeof callback == 'function') {

            callback();
        }
    };

    this.getProduct = function (id, callback) {

        $(".product").data("pid", id);

        Api.getProductById(id).then(function (response) {
            setData(response, callback);
        }); //.catch(error => {todo - add error handling
        //    let code = error.responseJSON.error;
        //    return $.Deferred().reject(//Presenter.login(code)).promise();
        //});
    };
};;
StyleRiver.Components.SearchPlugIn = new function SearchPlugIn() {
    this.Search = function (view) {

        var success = function (res) {

            view.clearAll();

            if (res.length == 0) {
                return;
            }

            for (var i = 0; i < res.length; i++) {
                switch (res[i].itemType) {
                    case 1:
                        view.addProduct(res[i]);
                        break;
                    case 2:
                        view.addBrand(res[i]);
                        break;
                    case 4:
                        //view.addCategory(res[i]);
                        break;
                }
            }

            view.show();
        }

        view.onChange(function (value) {

            if (value.length > 1) {

                var url = "https://search.oneprojectshop.com/api/search/" + value;
                $.ajax({
                    type: "GET",
                    cache: true,
                    url: url,
                    dataType: "json",
                    success: success,
                    error: function (xhr, ajaxOptions, thrownError) {
                        console.log(xhr.statusText);
                    },
                    async: true
                });
            } else {
                view.clearAll();
            }
        });
    }
};


StyleRiver.Components.SearchPlugInView = function View() {

    var searchInputDesktop;
    var searchInputMobile;
    var searchResultsContainer

    var productsContainer;
    var categoriesContainer;
    var brandsContainer;

    var resultsProductsElem;
    var resultsCategoriesElem;
    var resultsBrandsElem;

    var productItem;
    var categoryItem;
    var brandItem;

    var func;

    var clonesElems = function () {
        searchInputDesktop = $("#search_box .search_input");
        searchInputMobile = $("#search_box_mobile .search_input");

        

        searchResultsContainer = $(".search_results");

        var resultsElem = searchResultsContainer.find(".search_results_container");

        resultsProductsElem = $(resultsElem[0]);
        resultsCategoriesElem = $(resultsElem[1]);
        resultsBrandsElem = $(resultsElem[2]);

        productsContainer = resultsProductsElem.find(".container_items");
        productItem = productsContainer.find("a:first").clone();

        categoriesContainer = resultsCategoriesElem.find(".categories_wrapper");
        categoryItem = categoriesContainer.find("a:first").clone();

        brandsContainer = resultsBrandsElem.find(".container_items");
        brandItem = brandsContainer.find("a:first").clone();

    }



    this.clearAll = function () {
        searchResultsContainer.hide();
        productsContainer.empty();
        categoriesContainer.empty();
        brandsContainer.empty();
    }

    this.show = function () {

        if (resultsProductsElem.find("a").length > 0) {
            resultsProductsElem.show();
        } else {
            resultsProductsElem.hide();
        }

        if (resultsCategoriesElem.find("a").length > 0) {
            resultsCategoriesElem.show();
        } else {
            resultsCategoriesElem.hide();
        }

        if (resultsBrandsElem.find("a").length > 0) {
            resultsBrandsElem.show();
        } else {
            resultsBrandsElem.hide();
        }

        searchResultsContainer.show();
    }

    this.addProduct = function (data) {
        var url = data.data.url;
        var s = data.data.imageUrl.split('/');
        var fn = s[s.length - 1];
        var imgUrl = "https://imgs.oneprojectshop.com/product/150/" + fn;
        var title = data.data.title;
        var item = productItem.clone();

        item.find("img").attr("src", imgUrl);
        item.find(".search_item_title").html(title);
        item.attr("href", url);

        productsContainer.append(item);
    }

    this.addCategory = function (data) {
        var url = data.data.url;
        var title = data.data.name;
        var description = data.data.description;
        var item = categoryItem.clone();


        item.find(".cat_name").html(title);
        item.find(".sub_cats").html(description);
        item.attr("href", url);

        categoriesContainer.append(item);
    }

    this.addBrand = function (data) {
        var url = data.data.url;

        var imgUrl = `https://cdn.styleriver.co.il/brands/512/${data.data.id}.png`;
        var title = data.data.title;
        var subtitle = data.data.subtitle;
        var item = brandItem.clone();

        item.find("img").attr("src", imgUrl);
        item.find(".search_brand_title").html(title);
        item.find(".search_brand_subtitle").html(subtitle);
        item.attr("href", url);

        brandsContainer.append(item);
    }

    this.onChange = function (fnc) {
        func = fnc;
    }

    this.init = function () {
        clonesElems();
        this.clearAll();
    }

    this.init();

    searchInputDesktop.on('keyup', function () {
        if (func != undefined) {
            func(this.value);
        }
    });

    searchInputMobile.on('keyup', function () {
        if (func != undefined) {
            func(this.value);
        }
    });
}

$(document).ready(function () {
    var view = new StyleRiver.Components.SearchPlugInView();

    StyleRiver.Components.SearchPlugIn.Search(view);
});;
StyleRiver.Components.Seo.Init = function () {

    var items = $(".widget .item");

    //for SEO purposes: change all images to have on click redirect to url
    $.each(items, function (i, el) {

        var url = $(el).closest(".item").find("a").attr("href");

        $(el).find("img").on("click", function () {
            window.location.href = url;
        });
    });

}

;
StyleRiver.Helpers.BigBannersSwiper = new function () {

    var swiperProductsList = document.querySelectorAll('.swiper.widget.banners');

    const init = () => {
        for (let i = 0; i <= swiperProductsList.length - 1; i++) {
            swiperProductsList[i].classList.add(`bb-swiper-${i}`);
            const swiperContainer = $(`.bb-swiper-${i}`).find('.swiper-container');
            new Swiper(swiperContainer[0], {
                centeredSlides: true,
                autoHeight: true,
                autoplay: {
                    delay: 5000,
                },
                loop: true,

                pagination: {
                    el: `.bb-swiper-${i} .swiper-pagination`,
                    clickable: true,
                }
            }
            );
        }
    }

    this.init = () => {
        init();
    }
}

$(document).ready(function () {
    StyleRiver.Helpers.BigBannersSwiper.init();
});
;
StyleRiver.Helpers.BrandsSwiper = new function() {

    var swiperProductsList = document.querySelectorAll('.widget.widget_brands');

    const init = () => {
        for (let i = 0; i <= swiperProductsList.length - 1; i++) {
            swiperProductsList[i].classList.add(`b-swiper-${i}`);
            const swiperContainer = $(`.b-swiper-${i}`).find('.swiper-container');
            new Swiper(swiperContainer[0], {
                // Optional parameters
                loop: true,
                // Navigation arrows
                navigation: {
                    nextEl: `.b-swiper-${i} .swiper-button-next`,
                    prevEl: `.b-swiper-${i} .swiper-button-prev`,
                },
                // Default parameters
                slidesPerView: 3,
                spaceBetween: 10,
                // Responsive breakpoints
                breakpoints: {
                    // when window width is >= 320px
                    320: {
                        slidesPerView: 3,
                        spaceBetween: 10
                    },
                    // when window width is >= 480px
                    480: {
                        slidesPerView: 3,
                        spaceBetween: 20
                    },
                    // when window width is >= 640px
                    640: {
                        slidesPerView: 8,
                        spaceBetween: 30
                    }
                }
            });
        }
    }

    this.init = () => {
        init();
    }
}

$(document).ready(function () {
    StyleRiver.Helpers.BrandsSwiper.init();
});
;
StyleRiver.Helpers.ImagesSwiper = new function () {

    var swiperProductsList = document.querySelectorAll('.swiper.widget.images');

    const init = () => {
        for (let i = 0; i <= swiperProductsList.length - 1; i++) {
            swiperProductsList[i].classList.add(`i-swiper-${i}`);
            const swiperContainer = $(`.i-swiper-${i}`).find('.swiper-container');
            new Swiper(swiperContainer[0], {
                // Optional parameters
                loop: true,
                // Navigation arrows
                navigation: {
                    nextEl: `.i-swiper-${i} .swiper-button-next`,
                    prevEl: `.i-swiper-${i} .swiper-button-prev`,
                },
                // Autoplay
                autoplay: {
                    delay: 3000,
                },
                // Default parameters
                slidesPerView: 4,
                spaceBetween: 10,
                // Responsive breakpoints
                breakpoints: {
                    // when window width is >= 320px
                    320: {
                        slidesPerView: 2,
                        spaceBetween: 10
                    },
                    // when window width is >= 480px
                    480: {
                        slidesPerView: 2,
                        spaceBetween: 20
                    },
                    // when window width is >= 640px
                    640: {
                        slidesPerView: 4,
                        spaceBetween: 40
                    }
                }
            });
        }
    }

    this.init = () => {
        init();
    }
}

$(document).ready(function () {
    StyleRiver.Helpers.ImagesSwiper.init();
});
;
StyleRiver.Helpers.ProductsSwiper = new function () {

    var swiperProductsList = document.querySelectorAll('.swiper.widget.choosed-products');

    const init = () => {
        for (let i = 0; i <= swiperProductsList.length - 1; i++) {
            swiperProductsList[i].classList.add(`p-swiper-${i}`);
            const swiperContainer = $(`.p-swiper-${i}`).find('.swiper-container');
            new Swiper(swiperContainer[0], {
                // Optional parameters
                loop: true,
                // Navigation arrows
                navigation: {
                    nextEl: `.p-swiper-${i} .swiper-button-prev`,
                    prevEl: `.p-swiper-${i} .swiper-button-next`,
                },
                // Autoplay
                autoplay: {
                    delay: 2000,
                },
                // Default parameters
                slidesPerView: 1,
                spaceBetween: 10,
                // Responsive breakpoints
                breakpoints: {
                    // when window width is >= 320px
                    320: {
                        slidesPerView: 2,
                        spaceBetween: 10
                    },
                    // when window width is >= 480px
                    480: {
                        slidesPerView: 2,
                        spaceBetween: 20
                    },
                    // when window width is >= 640px
                    640: {
                        slidesPerView: 4,
                        spaceBetween: 30
                    }
                }
            });
        }
    }

    this.init = () => {
        init();
    }
}

$(document).ready(function () {
    StyleRiver.Helpers.ProductsSwiper.init();
});
;
