var ResponsiveRequestForm;
(function (ResponsiveRequestForm) {
    var Form = (function () {
        function Form(formId, groupCssClass, conditionsPopupId) {
            this.form = $("#" + formId);
            this.grouping = new FormGrouping(this.form, groupCssClass);
            this.conditions = new FormConditions(conditionsPopupId);
            this.validation = new FormValidation(this.form);
            this.refreshLabels();
        }
        Form.prototype.refreshLabels = function () {
            // Initialize floating labels inside input elements
            $("input[type=text], input[type=email], input[type=tel], input[type=number], select", this.form).jvFloat();
        };
        return Form;
    }());
    ResponsiveRequestForm.Form = Form;
    var FormValidation = (function () {
        function FormValidation(form) {
            this.form = form;
        }
        FormValidation.prototype.enable = function (messages, emailValidation, explicitAccept, onFormValidated) {
            var t = this;
            this.form.validate({
                errorPlacement: function (error, element) {
                    element.before(error);
                },
                messages: messages,
                submitHandler: function () {
                    if (emailValidation.useEmailConfirm && emailValidation.emailField.length) {
                        var emailValue = emailValidation.emailField.val();
                        if (emailValue) {
                            var confirmed = confirm((emailValidation.confirmationText || "").replace("{0}", emailValue));
                            if (!confirmed)
                                return false;
                        }
                    }
                    if (emailValidation.emailField.length && emailValidation.confirmationField.length) {
                        var confirmationValue = emailValidation.confirmationField.val();
                        var emailValue = emailValidation.emailField.val();
                        if (confirmationValue !== emailValue) {
                            emailValidation.confirmationField.val("");
                            return false;
                        }
                    }
                    if (explicitAccept.enabled && !explicitAccept.checkbox.is(":checked")) {
                        alert(explicitAccept.text);
                        return false;
                    }
                    if (onFormValidated) {
                        onFormValidated();
                    }
                    window.jQueryIRValidationResult = true;
                    return true;
                }
            });
        };
        return FormValidation;
    }());
    ResponsiveRequestForm.FormValidation = FormValidation;
    var FormExplicitAcceptOptions = (function () {
        function FormExplicitAcceptOptions(enabled, checkbox, text) {
            this.enabled = enabled;
            this.checkbox = checkbox;
            this.text = text;
        }
        return FormExplicitAcceptOptions;
    }());
    ResponsiveRequestForm.FormExplicitAcceptOptions = FormExplicitAcceptOptions;
    var FormEmailValidation = (function () {
        function FormEmailValidation(useEmailConfirm, confirmationText, emailField, confirmationField) {
            this.useEmailConfirm = useEmailConfirm;
            this.confirmationText = confirmationText;
            this.emailField = emailField;
            this.confirmationField = confirmationField;
        }
        return FormEmailValidation;
    }());
    ResponsiveRequestForm.FormEmailValidation = FormEmailValidation;
    var FormGrouping = (function () {
        function FormGrouping(form, groupCssClass) {
            this.form = form;
            this.groupCssClass = groupCssClass;
            this.checkValidityBeforeNext = true;
            $(".ir-group-legend", this.form).hide();
            $("." + this.groupCssClass + "-0", this.form).show();
        }
        FormGrouping.prototype.showAllGroups = function (el) {
            $(el).parent().hide();
            $("." + this.groupCssClass, this.form).show();
        };
        FormGrouping.prototype.showNextGroup = function (el, index) {
            var isGroupValid = $("." + this.groupCssClass + "-" + index + " input", this.form).valid();
            if (isGroupValid || !this.checkValidityBeforeNext) {
                $("." + this.groupCssClass + "-" + index, this.form).hide();
                $("." + this.groupCssClass + "-" + (index + 1), this.form).show();
            }
        };
        FormGrouping.prototype.showPreviousGroup = function (el, index) {
            $("." + this.groupCssClass + "-" + index, this.form).hide();
            $("." + this.groupCssClass + "-" + (index - 1), this.form).show();
        };
        return FormGrouping;
    }());
    ResponsiveRequestForm.FormGrouping = FormGrouping;
    var FormConditions = (function () {
        function FormConditions(conditionsPopupId) {
            this.conditionsPopupId = conditionsPopupId;
        }
        FormConditions.prototype.openConditions = function () {
            var irPopup = $("#" + this.conditionsPopupId);
            var jq = $;
            if (jq.emgPopup.isOpen()) {
                if (!irPopup.is(":visible")) {
                    irPopup.show().css("margin-top", "10px");
                    if (!irPopup.data("moved")) {
                        irPopup.data("moved", true);
                        irPopup.parent().after(irPopup);
                    }
                }
                else {
                    irPopup.hide();
                }
            }
            else {
                irPopup.emgPopup();
            }
        };
        return FormConditions;
    }());
    ResponsiveRequestForm.FormConditions = FormConditions;
    var FormFillIn = (function () {
        function FormFillIn(formId, url) {
            this.url = url;
            this.form = $("#" + formId);
        }
        FormFillIn.prototype.fillIn = function (callback) {
            var _this = this;
            $.get(this.url, function (response) {
                if (response) {
                    _this.setFields(_this.form, response);
                    _this.setFields($('#irRC'), response);
                    if (callback) {
                        callback();
                    }
                }
            });
        };
        FormFillIn.prototype.setFields = function (form, response) {
            $.each(response, function (i, group) {
                $.each(group.FieldViews, function (j, item) {
                    var hiddenFields = $('input[type="hidden"][name*=".FieldId"][value="' + item.FieldId + '"]', form);
                    if (hiddenFields.length > 0) {
                        $.each(hiddenFields, function (index, hiddenField) {
                            var id = $(hiddenField).attr('name').replace('FieldId', 'Value');
                            var v = $('input[name="' + id + '"],select[name="' + id + '"]', form);
                            if (v.length > 0 && v[0].type !== 'checkbox') {
                                v.val(item.Value);
                            }
                        });
                    }
                });
            });
        };
        return FormFillIn;
    }());
    ResponsiveRequestForm.FormFillIn = FormFillIn;
})(ResponsiveRequestForm || (ResponsiveRequestForm = {}));
//# sourceMappingURL=responsive-ir-form.js.map