/* Minification failed. Returning unminified contents.
(1007,84-85): run-time error JS1195: Expected expression: >
(1045,1-2): run-time error JS1002: Syntax error: }
(1055,24-25): run-time error JS1004: Expected ';': {
(1057,3-70): run-time error JS1018: 'return' statement outside of function: return Math.floor((today - new Date(date)) / (1000 * 60 * 60 * 24))
 */
(function($) {
    var adapters = $.validator.unobtrusive.adapters;
    adapters.fxbAddNumberVal = function (adapterName, attribute, ruleName) {
        attribute = attribute || "val";
        ruleName = ruleName || adapterName;
        this.add(adapterName, [attribute], function(options) {
                var attrVal = options.params[attribute];
                if ((attrVal || attrVal === 0) && !isNaN(attrVal)) {
                    options.rules[ruleName] = Number(attrVal);
                }
                if (options.message) {
                    options.messages[ruleName] = options.message;
                }
            });
    };

    adapters.fxbAddMinMax = function(adapterName, minRuleName, maxRuleName, minAttribute, maxAttribute) {
        minAttribute = minAttribute || "min";
        maxAttribute = maxAttribute || "max";
        this.add(adapterName, [minAttribute, maxAttribute], function(options) {
                if (options.params[minAttribute] && options.params[maxAttribute]) {
                    if (!options.rules.hasOwnProperty(minRuleName)) {
                        if (options.message) {
                            options.messages[minRuleName] = options.message;
                        }
                    }
                    if (!options.rules.hasOwnProperty(maxRuleName)) {
                        if (options.message) {
                            options.messages[maxRuleName] = options.message;
                        }
                    }
                }
            });
    };

    adapters.addBool("ischecked", "required");

    $.validator.addMethod(
        "daterange",
        function(value, element, params) {
            return this.optional(element) || (value >= params.min && value <= params.max);
        });

    adapters.add(
        "daterange",
        ["min", "max"],
        function(options) {
            var params = {
                min: options.params.min,
                max: options.params.max
            };
            options.rules["daterange"] = params;
            options.messages["daterange"] = options.message;
        });

    adapters.addSingleVal("filesize", "max");
    $.validator.addMethod(
        "filesize",
        function (value, element, max) {
            if (!this.optional(element)) {
                for (var i = 0; i < element.files.length; i++) {
                    if (element.files[i].size > max) {
                        return false;
                    }
                }
            }
            return true;
        });

    adapters.addSingleVal("filecount", "max");
    $.validator.addMethod(
        "filecount",
        function (value, element, max) {
            if (!this.optional(element)) {
                    if (element.files.length > max) {
                        return false;
                    }
            }
            return true;
        });

    adapters.addSingleVal("filetype", "allowedcontenttypes");
    $.validator.addMethod(
        "filetype",
        function (value, element, allowedContentTypes) {
            if (!this.optional(element)) {
                var allowedContentTypesArray = allowedContentTypes.split(",").filter(function (s) {
                    // Remove empty entries
                    return s !== "";
                });
                if (allowedContentTypesArray.length) {
                    for (var i = 0; i < element.files.length; i++) {
                        var file = element.files[i];
                        var isValid = false;
                        for (var j = 0; j < allowedContentTypesArray.length; j++) {
                            var allowedContentType = allowedContentTypesArray[j];
                            if (allowedContentType.indexOf("/") !== -1) {
                                // MIME type comparison if there is a slash "/"
                                isValid = allowedContentType.toLowerCase() === file.type.toLowerCase();
                            } else {
                                // File extension comparison
                                isValid = allowedContentType.toLowerCase() === "." + file.name.split(".").pop().toLowerCase();
                            }

                            if (isValid) {
                                break;
                            }
                        }

                        if (!isValid) {
                            return false;
                        }
                    }
                }
            }
            return true;
        });

    adapters.fxbAddNumberVal("min");
    adapters.fxbAddNumberVal("max");
    adapters.fxbAddNumberVal("step");

    adapters.fxbAddMinMax("range", "min", "max");
    adapters.fxbAddMinMax("length", "minlength", "maxlength");
    adapters.fxbAddMinMax("daterange", "min", "max");
})(jQuery);
;
(function($) {
    var eventIds = {
        fieldCompleted: "2ca692cb-bdb2-4c9d-a3b5-917b3656c46a",
        fieldError: "ea27aca5-432f-424a-b000-26ba5f8ae60a"
    };

    function endsWith(str, suffix) {
        return str.toLowerCase().indexOf(suffix.toLowerCase(), str.length - suffix.length) !== -1;
    }

    function getOwner(form, elementId) {
        var targetId = elementId.slice(0, -(elementId.length - elementId.lastIndexOf(".") - 1)) + "Value";
        return form.find("input[name=\"" + targetId + "\"]")[0];
    }

    function getSessionId(form) {
        var formId = form[0].id;
        var targetId = formId.slice(0, -(formId.length - formId.lastIndexOf("_") - 1)) + "FormSessionId";
        var element = form.find("input[type='hidden'][id=\"" + targetId + "\"]");
        return element.val();
    }

    function getElementName(element) {
        var fieldName = element.name;
        if (!endsWith(fieldName, "value")) {
            return getFieldGuid(fieldName) + "Value";
        }

        return fieldName;
    }

    function getElementValue(element) {
        var value;
        if (element.type === "checkbox" || element.type === "radio") {
            var form = $(element).closest("form");
            var checkboxList = form.find("input[name='" + element.name + "']");
            if (checkboxList.length > 1) {
                value = [];
                checkboxList = checkboxList.not(":not(:checked)");
                $.each(checkboxList, function () {
                    value.push($(this).val());
                });
            } else {
                value = element.checked ? "1" : "0";
            }
        } else {
            value = $(element).val();
        }

        if (value && Object.prototype.toString.call(value) === "[object Array]") {
            value = value.join(",");
        }

        return value;
    }

    function getFieldGuid(fieldName) {
        var searchPattern = "fields[";
        var index = fieldName.toLowerCase().indexOf(searchPattern);
        return fieldName.substring(0, index + searchPattern.length + 38);
    }

    function getFieldName(element) {
        return $(element).attr("data-sc-field-name");
    }

    $.fxbFormTracker = function (el, options) {
        this.el = el;
        this.$el = $(el);
        this.options = $.extend({}, $.fxbFormTracker.defaultOptions, options);
        this.init();
    },

        $.fxbFormTracker.parse = function (formId) {
            var $form = $(formId);
            $form.track_fxbForms();

            var isSessionExpired = parseInt($("[name$='.IsSessionExpired']").val());
            if (isSessionExpired) {
                alert($.fxbFormTracker.texts.expiredWebSession);
            }
        },

        $.extend($.fxbFormTracker,
            {
                defaultOptions: {
                    formId: null,
                    sessionId: null,
                    fieldId: null,
                    fieldValue: null,
                    duration: null
                },

                prototype: {
                    init: function () {
                        this.options.duration = 0;
                        this.options.formId = this.$el.attr("data-sc-fxb");
                    },

                    startTracking: function () {
                        this.options.sessionId = getSessionId(this.$el);

                        var self = this;
                        var inputs = this.$el.find("input:not([type='submit']), select, textarea");
                        var trackedInputs = inputs.filter("[data-sc-tracking='True'], [data-sc-tracking='true']");
                        var trackedNonDateInputs = trackedInputs.not("[type='date']");

                        if (trackedInputs.length) {
                            inputs.not(trackedInputs).on("focus",
                                function () {
                                    self.onFocusField(this);
                                });

                            trackedInputs.on("focus",
                                function () {
                                    self.onFocusField(this, true);
                                }).on("blur",
                                    function () {
                                        self.onBlurField(this);
                                    });

                            trackedNonDateInputs.on("change",
                                function () {
                                    self.onBlurField(this);
                                });
                        }
                    },

                    onFocusField: function (element, hasTracking) {
                        if (!hasTracking) {
                            this.options.fieldId = "";
                            return;
                        }

                        var fieldId = getElementName(element);

                        if (this.options.fieldId !== fieldId) {
                            this.options.fieldId = fieldId;
                            this.options.duration = $.now();
                            this.options.fieldValue = getElementValue(element);
                        }
                    },

                    onBlurField: function (element) {
                        var fieldId = getElementName(element);
                        var timeStamp = $.now();

                        if (!endsWith(fieldId, "value")) {
                            var owner = getOwner(this.$el, fieldId);
                            if (!owner) {
                                return;
                            }

                            element = owner;
                        }

                        var duration = this.options.duration ? Math.round((timeStamp - this.options.duration) / 1000) : 0;
                        var value = getElementValue(element);
                        var fieldChanged = this.options.fieldId !== fieldId;
                        if (fieldChanged) {
                            this.options.fieldId = fieldId;
                            this.options.duration = $.now();
                            duration = 0;
                        }
                        if (fieldChanged || this.options.fieldValue !== value) {
                            this.options.fieldValue = value;

                            var fieldName = getFieldName(element);
                            var clientEvent = this.buildEvent(fieldId, fieldName, eventIds.fieldCompleted, duration);

                            var validator = this.$el.data("validator");
                            var validationEvents = [];
                            if (validator && !validator.element(element)) {
                                validationEvents = this.checkClientValidation(element, fieldName, validator, duration);
                            }

                            this.trackEvents($.merge([clientEvent], validationEvents));
                        }
                    },

                    buildEvent: function (fieldId, fieldName, eventId, duration) {
                        var fieldIdHidden = getFieldGuid(fieldId) + "ItemId";

                        fieldId = $("input[name=\"" + fieldIdHidden + "\"]").val();

                        return {
                            'formId': this.options.formId,
                            'sessionId': this.options.sessionId,
                            'eventId': eventId,
                            'fieldId': fieldId,
                            'duration': duration,
                            'fieldName': fieldName
                        };
                    },

                    checkClientValidation: function (element, fieldName, validator, duration) {
                        var tracker = this;
                        var events = [];

                        $.each(validator.errorMap,
                            function (key) {
                                if (key === element.name) {
                                    var clientEvent = tracker.buildEvent(key, fieldName, eventIds.fieldError, duration);
                                    events.push(clientEvent);
                                }
                            });

                        return events;
                    },

                    trackEvents: function (events) {
                        $.ajax({
                            type: "POST",
                            url: "/fieldtracking/register",
                            data: JSON.stringify(events),
                            contentType: "application/json"
                        }).done(function (data, textStatus, jqXhr) {
                            if ((jqXhr.statusText === "OK" || jqXhr.statusText === "success") && jqXhr.responseText !== "") {
                                alert(jqXhr.responseText);
                            }
                        });
                    }
                }
            });

    $.fn.track_fxbForms = function (options) {
        return this.each(function () {
            var tracker = $.data(this, "fxbForms.tracking");
            if (tracker) {
                tracker.startTracking();
            } else {
                tracker = new $.fxbFormTracker(this, options);
                $.data(this, "fxbForms.tracking", tracker);
                tracker.startTracking();
            }
        });
    };

    $("form[data-sc-fxb]").track_fxbForms();
})(jQuery);;
(function($) {
    $.fxbConditions = function(el, options) {
            this.el = el;
            this.$el = $(el);
            this.options = $.extend({}, $.fxbConditions.defaultOptions, options);
    },
        $.fxbConditions.parse = function (formId) {
            var $form = $(formId);
            $form.init_formConditions();
        },

        $.extend($.fxbConditions,
            {
                defaultOptions: {
                    fieldConditions: [],
                    animate: true
                },

                helpers: {
                    normalize: function(value, preserveCase) {
                        if (value == null) {
                            return "";
                        }

                        return preserveCase ? String(value) : String(value).toLowerCase();
                    },

                    toNumber: function(value) {
                        value = Number(value);
                        return isNaN(value) ? undefined : value;
                    },

                    indexOf: function(str, value, startIndex, preserveCase) {
                        str = this.normalize(str, preserveCase);
                        value = this.normalize(value, preserveCase);

                        return str.indexOf(value, startIndex);
                    },

                    endsWith: function(str, value, preserveCase) {
                        str = this.normalize(str, preserveCase);
                        value = this.normalize(value, preserveCase);

                        var lengthDiff = str.length - value.length;
                        return lengthDiff >= 0 && str.substring(lengthDiff) === value;
                    }
                },

                actions: {
                    show: function($target) {
                        if (this.loaded && this.options.animate) {
                            if ($target.is(":hidden")) {
                                var $self = this;
                                $target.slideDown(function () {
                                    $self.setRequired($target);
                                });

                                return;
                            }
                        } else {
                            $target.show();
                        }

                        this.setRequired($target);
                    },

                    hide: function($target) {
                        if (this.loaded && this.options.animate) {
                            if ($target.is(":visible")) {
                                var $self = this;
                                $target.slideUp(function() {
                                    $self.setRequired($target);
                                });

                                return;
                            }
                        } else {
                            $target.hide();
                        }

                        this.setRequired($target);
                    },

                    enable: function($target) {
                        if ($target.is("input,select,textarea,button")) {
                            $target.prop("disabled", false);
                            this.setRequired($target);
                            $('[data-valmsg-for="' + $target.prop("name") + '"]').show();
                        }
                    },

                    disable: function($target) {
                        if ($target.is("input,select,textarea,button")) {
                            $target.prop("disabled", true);
                            this.setRequired($target);
                            $('[data-valmsg-for="' + $target.prop("name") + '"]').hide();
                        }
                    },

                    "go to page": function($target, action, conditionsResult) {
                        $target.each(function(idx, target) {
                            if (target.name &&
                                target.name.length &&
                                $(target).is("input[type='submit'], button[type='submit']")) {
                                var $nextPageEl = this.$el.find("[name=\"" + target.name + "\"][data-sc-next-page]");
                                if (!$nextPageEl.length) {
                                    if (conditionsResult && action.value) {
                                        var $currentEl = this.$el.find("[name=\"" + target.name + "\"]");
                                        $('<input>').attr({
                                            type: 'hidden',
                                            name: target.name,
                                            value: action.value,
                                            'data-sc-next-page': ""
                                        }).insertAfter($currentEl.last());
                                    }

                                    return;
                                }

                                var value = action.value;
                                if (!conditionsResult) {
                                    value = $nextPageEl.data("sc-next-page");

                                    for (var i = (this.executedActions.length - 1); i >= 0; i--) {
                                        var prevAction = this.executedActions[i];
                                        if (prevAction.fieldId === action.fieldId &&
                                            prevAction.conditionsResult &&
                                            prevAction.actionType.toLowerCase() === "go to page") {
                                            value = prevAction.value;
                                            break;
                                        }
                                    }
                                }

                                $nextPageEl.val(value);
                                $nextPageEl.prop("disabled", !value);
                            }
                        }.bind(this));
                    },

                    // action pairs used for finding the opposite action to execute when conditions are not satisfied
                    actionLinks: {
                        show: "hide",
                        enable: "disable",
                        "go to page": "go to page"
                    },

                    addAction: function(actionName, actionFn, oppositeActionName, oppositeActionFn) {
                        if (actionName && actionName.length) {
                            actionName = actionName.toLowerCase();

                            this[actionName] = actionFn;

                            if (arguments.length === 2) {
                                return;
                            }

                            if (oppositeActionName && oppositeActionName.length) {
                                oppositeActionName = oppositeActionName.toLowerCase();

                                this.actionLinks[actionName] = oppositeActionName;
                                if (arguments.length > 3) {
                                    this[oppositeActionName] = oppositeActionFn;
                                }
                            } else {
                                delete this.actionLinks[actionName];
                            }
                        }
                    },

                    getAction: function(actionName, conditionsResult) {
                        if (actionName && actionName.length) {
                            actionName = actionName.toLowerCase();

                            if (conditionsResult) {
                                return this[actionName];
                            }

                            if (this.actionLinks.hasOwnProperty(actionName)) {
                                var oppositeActionName = this.actionLinks[actionName];
                                return this[oppositeActionName];
                            } else {
                                for (var property in this.actionLinks) {
                                    if (this.actionLinks.hasOwnProperty(property) &&
                                        this.actionLinks[property] === actionName) {
                                        return this[property];
                                    }
                                }
                            }
                        }

                        return this[actionName];
                    }
                },

                operators: {
                    "contains": function(conditionValue, fieldValue) {
                        return $.fxbConditions.helpers.indexOf(fieldValue, conditionValue) >= 0;
                    },

                    "does not contain": function(conditionValue, fieldValue) {
                        return $.fxbConditions.helpers.indexOf(fieldValue, conditionValue) === -1;
                    },

                    "starts with": function(conditionValue, fieldValue) {
                        return $.fxbConditions.helpers.indexOf(fieldValue, conditionValue) === 0;
                    },

                    "does not start with": function(conditionValue, fieldValue) {
                        return $.fxbConditions.helpers.indexOf(fieldValue, conditionValue) !== 0;
                    },

                    "ends with": function(conditionValue, fieldValue) {
                        return $.fxbConditions.helpers.endsWith(fieldValue, conditionValue);
                    },

                    "does not end with": function(conditionValue, fieldValue) {
                        return !$.fxbConditions.helpers.endsWith(fieldValue, conditionValue);
                    },

                    "is equal to": function(conditionValue, fieldValue) {
                        conditionValue = $.fxbConditions.helpers.normalize(conditionValue);
                        fieldValue = $.fxbConditions.helpers.normalize(fieldValue);
                        if (fieldValue === conditionValue) {
                            return true;
                        }

                        if (conditionValue.length) {
                            var left = $.fxbConditions.helpers.toNumber(conditionValue);
                            if (typeof left === "number") {
                                var right = $.fxbConditions.helpers.toNumber(fieldValue);
                                return typeof right === "number" && left === right;
                            }
                        }

                        return false;
                    },

                    "is not equal to": function(conditionValue, fieldValue) {
                        conditionValue = $.fxbConditions.helpers.normalize(conditionValue);
                        fieldValue = $.fxbConditions.helpers.normalize(fieldValue);
                        if (fieldValue === conditionValue) {
                            return false;
                        }

                        if (conditionValue.length) {
                            var left = $.fxbConditions.helpers.toNumber(conditionValue);
                            if (typeof left === "number") {
                                var right = $.fxbConditions.helpers.toNumber(fieldValue);
                                return typeof right !== "number" || left !== right;
                            }
                        }

                        return true;
                    },

                    "is greater than": function(conditionValue, fieldValue) {
                        conditionValue = $.fxbConditions.helpers.normalize(conditionValue);
                        fieldValue = $.fxbConditions.helpers.normalize(fieldValue);

                        if (conditionValue.length) {
                            var left = $.fxbConditions.helpers.toNumber(conditionValue);
                            if (typeof left === "number") {
                                var right = $.fxbConditions.helpers.toNumber(fieldValue);
                                return typeof right === "number" && right > left;
                            }
                        }

                        return fieldValue > conditionValue;
                    },

                    "is greater than or equal to": function(conditionValue, fieldValue) {
                        conditionValue = $.fxbConditions.helpers.normalize(conditionValue);
                        fieldValue = $.fxbConditions.helpers.normalize(fieldValue);

                        if (fieldValue === conditionValue) {
                            return true;
                        }

                        if (conditionValue.length) {
                            var left = $.fxbConditions.helpers.toNumber(conditionValue);
                            if (typeof left === "number") {
                                var right = $.fxbConditions.helpers.toNumber(fieldValue);
                                return typeof right === "number" && right >= left;
                            }
                        }

                        return fieldValue >= conditionValue;
                    },

                    "is less than": function(conditionValue, fieldValue) {
                        conditionValue = $.fxbConditions.helpers.normalize(conditionValue);
                        fieldValue = $.fxbConditions.helpers.normalize(fieldValue);

                        if (conditionValue.length) {
                            var left = $.fxbConditions.helpers.toNumber(conditionValue);
                            if (typeof left === "number") {
                                var right = $.fxbConditions.helpers.toNumber(fieldValue);
                                return typeof right === "number" && right < left;
                            }
                        }

                        return fieldValue < conditionValue;
                    },

                    "is less than or equal to": function(conditionValue, fieldValue) {
                        conditionValue = $.fxbConditions.helpers.normalize(conditionValue);
                        fieldValue = $.fxbConditions.helpers.normalize(fieldValue);

                        if (fieldValue === conditionValue) {
                            return true;
                        }

                        if (conditionValue.length) {
                            var left = $.fxbConditions.helpers.toNumber(conditionValue);
                            if (typeof left === "number") {
                                var right = $.fxbConditions.helpers.toNumber(fieldValue);
                                return typeof right === "number" && right <= left;
                            }
                        }

                        return fieldValue <= conditionValue;
                    },

                    addOperator: function(operatorName, operatorFn) {
                        if (operatorName && operatorName.length) {
                            this[operatorName.toLowerCase()] = operatorFn;
                        }
                    },

                    getOperator: function(operatorName) {
                        return operatorName && operatorName.length ? this[operatorName.toLowerCase()] : null;
                    }
                },

                prototype: {
                    initConditions: function(options) {
                        this.options = $.extend(true, this.options || {}, options);

                        if (!this.options.fieldConditions) {
                            return;
                        }

                        var sourceFields = [];
                        this.options.fieldConditions.forEach(function(fieldCondition) {
                            if (!fieldCondition || !fieldCondition.conditions) {
                                return;
                            }

                            fieldCondition.conditions.forEach(function(condition) {
                                if (condition.fieldId && sourceFields.indexOf(condition.fieldId) === -1) {
                                    sourceFields.push(condition.fieldId);
                                    var $source = this.$el.find("[data-sc-field-key=\"" + condition.fieldId + "\"]")
                                        .filter(function() {
                                            return $.fxbConditions.helpers.endsWith(this.name, "value");
                                        });
                                    if ($source.length) {
                                        $source.on("change", this.applyConditions.bind(this));
                                    }
                                }
                            }.bind(this));
                        }.bind(this));

                        this.applyConditions();
                        this.loaded = true;
                    },

                    applyConditions: function() {
                        if (!this.options.fieldConditions) {
                            return;
                        }

                        this.executedActions = [];
                        this.fieldActions = {};

                        this.options.fieldConditions.forEach(function(fieldCondition) {
                            if (fieldCondition && fieldCondition.actions && fieldCondition.actions.length) {
                                var conditionsResult = this.evaluateConditions(fieldCondition);
                                fieldCondition.actions.forEach(function(action) {
                                    this.gatherFieldActions(action, conditionsResult);
                                }.bind(this));
                            }
                        }.bind(this));

                        for (var fieldId in this.fieldActions) {
                            if (!this.fieldActions.hasOwnProperty(fieldId)) continue;
                            for (var actionType in this.fieldActions[fieldId]) {
                                if (!this.fieldActions[fieldId].hasOwnProperty(actionType)) continue;
                                var action = this.fieldActions[fieldId][actionType].action;
                                var conditionsResult = this.fieldActions[fieldId][actionType].conditionsResult;
                                this.executeAction(action, conditionsResult);
                            }
                        }
                    },

                    setRequired: function($targets) {
                        $targets.each(function(idx, target) {
                            var $target = $(target);
                            if ($target.is("input:not([type='submit']), select, textarea")) {
                                var name = target.name;
                                if (!$.fxbConditions.helpers.endsWith(name, "value") && !$.fxbConditions.helpers.endsWith(name, "Files") )
                                    return;

                                name = name.slice(0, -(name.length - name.lastIndexOf(".") - 1)) + "Required";
                                var $requiredEl = this.$el.find("[name=\"" + name + "\"][data-sc-conditions-required]"),
                                    isNotAccessible = $target.is(":hidden") ||
                                        $target.css("visibility") === "hidden" ||
                                        target.disabled;

                                if (!$requiredEl.length) {
                                    if (isNotAccessible) {
                                        var $currentEl = this.$el.find("[name=\"" + target.name + "\"]");
                                        $('<input>').attr({
                                            type: 'hidden',
                                            name: name,
                                            value: false,
                                            "data-sc-conditions-required": ""
                                        }).insertAfter($currentEl.last());
                                    }

                                    return;
                                }

                                $requiredEl.val(false);
                                $requiredEl.prop("disabled", !isNotAccessible);
                            } else {
                                this.setRequired($target.find("input:not([type='submit']), select, textarea"));
                            }
                        }.bind(this));
                    },

                    executeAction: function(action, conditionsResult) {
                        if (action && action.fieldId && action.actionType) {
                            var $target = this.$el.find("[data-sc-field-key=\"" + action.fieldId + "\"]");
                            if ($target.length) {
                                var actionFn = $.fxbConditions.actions.getAction(action.actionType, conditionsResult);
                                if (actionFn && typeof actionFn === "function") {
                                    actionFn.call(this, $target, action, conditionsResult);
                                    var executedAction = $.extend(true,
                                        action,
                                        {
                                            conditionsResult: conditionsResult
                                        });
                                    this.executedActions.push(executedAction);
                                }
                            }
                        }
                    },

                    evaluateConditions: function(fieldCondition) {
                        if (!fieldCondition || !fieldCondition.conditions) return true;

                        var matchType = (fieldCondition.matchType || "").toLowerCase();
                        switch (matchType) {
                        case "all":
                            return fieldCondition.conditions.every(this.isConditionSatisfied.bind(this));
                        case "any":
                        default:
                            return fieldCondition.conditions.some(this.isConditionSatisfied.bind(this));
                        }
                    },

                    gatherFieldActions: function(action, conditionsResult) {
                        if (action && action.fieldId && action.actionType) {
                            if (typeof this.fieldActions[action.fieldId] === "undefined") {
                                this.fieldActions[action.fieldId] = {};
                            }

                            if (typeof this.fieldActions[action.fieldId][action.actionType] === "undefined") {
                                this.fieldActions[action.fieldId][action.actionType] = {
                                    action: action,
                                    conditionsResult: conditionsResult
                                };
                            }
                            // if a true conditionsResult finally appears for this particular fieldId and actionType, set it to true.
                            // from now on, it can never be set back to false again.
                            // (existing is deleted first to ensure this latest action appears at the bottom of the queue)
                            else if (!this.fieldActions[action.fieldId][action.actionType].conditionsResult && conditionsResult) {
                                delete this.fieldActions[action.fieldId][action.actionType];
                                this.fieldActions[action.fieldId][action.actionType] = {
                                    action: action,
                                    conditionsResult: true
                                };
                            }
                        }
                    },

                    getValueList: function(fieldId) {
                        var $fieldEl = this.$el.find("[data-sc-field-key=\"" + fieldId + "\"]").filter(function() {
                            return $.fxbConditions.helpers.endsWith(this.name, "value");
                        });

                        var $listElements = $fieldEl.filter(function(idx, element) {
                            return element.type === "checkbox" || element.type === "radio";
                        });

                        if (!$listElements.length && $fieldEl.prop("multiple")) {
                            $listElements = $fieldEl.find("option");
                        }

                        var value;
                        if ($listElements.length) {
                            if ($listElements.length > 1) {
                                value = $listElements.filter(":checked").map(function() {
                                    return $(this).val();
                                }).get();
                                if (!value.length) {
                                    value.push("");
                                }
                            } else {
                                value = [$listElements[0].checked ? "true" : "false"];
                            }
                        } else {
                            value = [$fieldEl.val()];
                        }

                        return value;
                    },

                    isConditionSatisfied: function(condition) {
                        if (condition && condition.operator) {
                            var operatorFn = $.fxbConditions.operators.getOperator(condition.operator);
                            if (operatorFn && typeof operatorFn === "function") {

                                var valueList = this.getValueList(condition.fieldId);
                                var result = condition.operator === "is not equal to"
                                    ? valueList.every(operatorFn.bind(this, condition.value))
                                    : valueList.some(operatorFn.bind(this, condition.value));
                                return result;
                            };
                        }

                        return false;
                    }
                }
            });

    $.fn.init_fxbConditions = function(options) {
        return this.each(function() {
            var conditions = $.data(this, "fxbForms.conditions");
            if (conditions) {
                conditions.initConditions(options);
            } else {
                conditions = new $.fxbConditions(this, options);
                $.data(this, "fxbForms.conditions", conditions);
                conditions.initConditions();
            }
        });
    };

    $.fn.init_formConditions = function() {
        var input = this.find('input[data-sc-fxb-condition]');
        if (input) {
            var conditions = JSON.parse(input.attr('value'));
            if (conditions) {
                if (typeof this.init_fxbConditions === 'function') {
                    this.init_fxbConditions(conditions);
                }
            }
        }
    };

    var forms = $("form[data-sc-fxb]");
    if (forms.length) {
        forms.each(function () {
            var formEl = $(this);
            formEl.init_formConditions();
        }).parent().on("submit", "form[data-sc-fxb]", function () {
            var $submitBtns = $(this).find("input[type='submit'], button[type='submit']");
            if ($submitBtns.length) {
                $('html, body').animate({
                    scrollTop: $(this).offset().top
                }, 500);
                $submitBtns.on("click", function () {
                    return false;
                });
            }
        });
    }
})(jQuery);;
$.validator.setDefaults({ ignore: ":hidden:not(.fxt-captcha)" });

/**
 * Google Recaptcha
 */
var reCaptchaArray = reCaptchaArray || [];
$.validator.unobtrusive.adapters.add("recaptcha", function (options) {
    options.rules["recaptcha"] = true;
    if (options.message) {
        options.messages["recaptcha"] = options.message;
    }
});

$.validator.addMethod("recaptcha", function (value, element, exclude) {
    return true;
});
var recaptchasRendered = false;
var loadReCaptchas = function () {
    for (var i = 0; i < reCaptchaArray.length; i++) {
        var reCaptcha = reCaptchaArray[i];
        if (reCaptcha.IsRendered === undefined) {
            reCaptcha.IsRendered = true;
            reCaptcha();
        }
    }
};

/**
 * File upload Content Type
 */
$.validator.unobtrusive.adapters.addSingleVal("contenttype", "allowedcontenttypes");

$.validator.addMethod("contenttype", function (value, element, allowedcontenttypes) {
    if (!this.optional(element)) {
        for (var i = 0; i < element.files.length; i++) {
            if (allowedcontenttypes.indexOf(element.files[i].type) < 0) {
                return false;
            }
        }
    }
    return true;
});

/**
 * File upload File Size
 */
$.validator.unobtrusive.adapters.addSingleVal("filesize", "maxfilesize");
$.validator.addMethod("filesize", function (value, element, maxfilesize) {
    if (!this.optional(element)) {
        for (var i = 0; i < element.files.length; i++) {
            if (element.files[i].size > maxfilesize) {
                return false;
            }
        }
    }
    return true;
});

// Date Time Span Validator
["timespan", "tsminagedate", "tsfuturedate", "tspastdate"].forEach(validationType =>{
  $.validator.unobtrusive.adapters.add(validationType, ['min', 'max', 'unit'], function(options) {
    options.rules[validationType] = [options.params.min, options.params.max, options.params.unit];
    options.messages[validationType] = options.message;
  });
  
  $.validator.addMethod(validationType, function (value, element, params) {
    if (!this.optional(element)) {
      var unit = params[2];
      var minvalue = params[0];
      var maxvalue = params[1];
  
      var valueToValidate = 0;
  
      switch (unit) {
        case 'days':
          valueToValidate = getDays(value);
          break;
        case 'months':
          valueToValidate = getMonths(value);
          break;
        case 'years':
          valueToValidate = getYears(value);
          break;
      }
  
      var isValid = true;
  
      if (typeof minvalue !== 'undefined' && valueToValidate < minvalue)
        isValid = false;
  
      if (typeof maxvalue !== 'undefined' && valueToValidate > maxvalue)
        isValid = false;
  
      return isValid;
    }
    return true;
  });
})

/*
$.validator.unobtrusive.adapters.add('timespan', ['min', 'max', 'unit'], function(options) {
  options.rules['timespan'] = [options.params.min, options.params.max, options.params.unit];
  options.messages['timespan'] = options.message;
});

$.validator.addMethod("timespan", timespanValidatorFunction);*/

function getDays(date) {
  var today = new Date();
  return Math.floor((today - new Date(date)) / (1000 * 60 * 60 * 24));
}

function getYears(date) {
  var today = new Date();
  var diffYears = today.getFullYear() - new Date(date).getFullYear();
  var temp = today;

  temp.setFullYear(temp.getFullYear() - diffYears);

  if (new Date(date) > temp)
    diffYears--;

  return diffYears;
}

function getMonths(date) {
  var today = new Date();
  var d = new Date(date);

  return (today.getFullYear() - d.getFullYear()) * 12 + today.getMonth() - d.getMonth();
};
+function ($) {
    if (typeof ($.fn.typeahead) != "undefined") {
        $('.typeahead').each(function () {
            var sourceData = $(this).data("ta-source"), wrapClass = $(this).attr("class");
            wrapClass = ("twitter-typeahead" + wrapClass.replace(/^typeahead\b/, "")).trim();
            $(this).attr("class", "typeahead").removeAttr("data-ta-source").on("focusin", function () {
                $(this).parent('.twitter-typeahead').addClass("focused");
            }).on("focusout", function () {
                $(this).parent('.twitter-typeahead').removeClass("focused");
            });
            var findMatches = function (query, syncResults) {
                var matches = [], substrRegex = new RegExp(query.replace(/\\/g, "\\\\"), 'i');

                $.each(sourceData, function (index, item) {
                    if (substrRegex.test(item)) {
                        matches.push(item);
                    }
                });

                syncResults(matches);
            };

            if (sourceData instanceof Array && sourceData.length != 0) {
                $(this).typeahead({
                    classNames: { wrapper: wrapClass },
                    minLength: 2,
                    highlight: false
                }, {
                    name: 'typeahead-dataset',
                    source: findMatches
                });
            }
        });
    }

    if (typeof ($.fxbHandlers) == "undefined") {
        var ajaxHandlers = [];
        $.extend({
            fxbHandlers: {
                add: function(name, handler) {
                    (name && typeof handler == "function") &&
                    ajaxHandlers.push({ command: name, handler: handler });
                },
                remove: function (name) {
                    for (var i = ajaxHandlers.length - 1; i >= 0; i--) {
                        (ajaxHandlers[i].name == name) && ajaxHandlers.splice(i, 1);
                    }
                }
            }
        });
        $.extend({
            fxbCommands: {
                execute: function(formId, command, args) {
                    var $form = $(formId);
                    for (var i = 0; $form.length && i < ajaxHandlers.length; i++) {
                        if (ajaxHandlers[i].command == command && typeof ajaxHandlers[i].handler == "function") {
                            $form.each(function (idx, form) {
                                ajaxHandlers[i].handler.apply(form, [form].concat(args));
                            });
                        }
                    }
                }
            }
        });
    }

    if (typeof (window.loadReCaptchas) == "undefined") {
        window.loadReCaptchas = function () {
            if (window.reCaptchaArray instanceof Array && window.reCaptchaArray.length > 0) {
                for (var i = 0; i < window.reCaptchaArray.length; i++) window.reCaptchaArray[i]();
            }
        }
    }
}(jQuery);;
+function ($) {
    function ModalDialogBuilder(id) {
        $.extend(this, builder.defaultOptions);
        this.id = id;
    }

    ModalDialogBuilder.prototype.create = function () {
        if (!this.id) throw new Error("Dialog id is not set");

        var $dialog = $("#" + this.id);
        if ($dialog.length > 0) return $(); // dialog already exists
       
        var dialogHtml =
            '<div class="modal_wrapper modal modal_wrapper-redesign" id="' + this.id + '" style="' + this.dialogStyle + '">' +
              '<div class="modal-dialog ' + this.modalCss + '">' +
                '<div class="modal_container modal-content ' + this.contentCss + '">' +
                  '<div class="modal-header ' + this.headerCss + '" style="' + this.headerStyle + '">' + this.headerHtml + '</div>' +
                  '<div class="modal-body ' + this.bodyCss + '" style="' + this.bodyStyle + '">' + this.bodyHtml + '</div>' +
                '</div>' +
              '</div>' +
            '</div>';
      
        return $(dialogHtml).appendTo('body');
    };

    ModalDialogBuilder.prototype.destroy = function () {
        if (!this.id) throw new Error("Dialog id is not set");

        $("#" + this.id).remove();
    };

    ModalDialogBuilder.prototype.show = function () {
        if (!this.id) throw new Error("Dialog id is not set");

        $("#" + this.id).modal("show");
    };

    var builder = function (id) {
        return new ModalDialogBuilder(id);
    };
    builder.defaultOptions = {
        headerHtml: "",
        bodyHtml: "",
        modalCss: "",
        contentCss: "",
        headerCss: "",
        bodyCss: "",
        dialogStyle: "",
        headerStyle: "",
        bodyStyle: ""
    };
    $.extend({
        buildModal: builder,
        configBuildModal: function (options) {
            $.extend(builder.defaultOptions, options);
        }
    });
}(jQuery);;
+function ($) {

    $.fn.gatedMedia = function (settings) {
        // we have global variable defined - means no ajax checks necessary
        if (window.isContactKnown === true) return;

        var _config = {
            selector: 'a[href^="' + window.location.origin + '/-/media/"]:not([download]),' +
                      'a[href ^= "' + window.location.origin + '-/media/"]:not([download]),' +
                      'a[href ^= "/-/media/"]:not([download]), a[href ^= "-/media/"]:not([download])'
        };
        if (settings) $.extend(_config, settings);

        this.each(function () {
            $(this).on("click", _config.selector, handleGatedMediaClick);
        });

        return this;
    }
    function tryToOpenInNewWindow(url) {
        var popupWindow = window.open(url, "_blank");
        if (popupWindow == null) {
            window.location.href = url;
        }
    }

    // Gated Pdf handler
    function handleGatedMediaClick() {
        var isAccessible = false;
        var mediaUrl = $(this).attr("href");

        function showModalGatedDialog(data) {
            $(document).trigger("create.fxb.modal", {
                id: "gated-form-popup",
                url: data.redirectUrl,
                show: true
            });
        }

        $.ajax({
            method: "GET",
            url: mediaUrl,
            cache: false,
            async: false, // wait for the response to assign the accessible variable
            headers: { "X-Custom-Action": "check-gated-access" }
        }).done(function (data) {
            if (data && data.redirectUrl) {
                if (data.action === "identify") {
                    showModalGatedDialog(data);
                } else if (data.action === "download") {
                    isAccessible = true;
                } else {
                    console.error("Failed to check access for the media asset: " + mediaUrl);
                }
            }
        });
        
        return isAccessible;
    }

}(jQuery);
+function ($) {
    // track share event from sharethis buttons
    $("body").on("click", ".sharing-link[data-network]", function () {
            var $btn = $(this);
            var dataNetwork = $btn.data("network");
            var sharingUrl = $btn.data("url") ? $btn.data("url") : window.location.href;

            $.ajax({
                url: "/api/sitecore/Social/TrackShareEvent",
                method: "POST",
                async: false,
                data: {
                    dataNetwork: dataNetwork,
                    sharingUrl: sharingUrl
                }
            });
        }).on("click", ".venobox-social", function (event) {
            event.preventDefault();

            $(this).venobox({
                framewidth: '100%',
                frameheight: '100%',
                bgcolor: 'transparent',
                spinColor: 'transparent',
                border: 'none',
                cb_pre_open: onSocialModalOpen,
                cb_post_open: onSocialModalAfterOpen
            }).trigger("click");
        });


    function onSocialModalOpen(element) {
        var $link = $(element);
        if (!$link || !$link.attr('href')) return false;

        var associatedId = $link.attr('href').replace("#", "");

        var associatedUrl = $link.data("socialUrl");
        var associatedTitle = $link.data("socialTitle");
        var twitterVia = $link.data("socialTwittervia");
        var metadataItem = $link.data("socialMetaitemId");

        //Social Network configuration
        var socialNetworks = {

            facebook: {
                title: "Share On Facebook",
                url: "https://www.facebook.com/sharer/sharer.php?u={page}&t={title}",
                icon: "Facebook.svg"
            },

            twitter: {
                title: "Tweet",
                url: "https://twitter.com/intent/tweet?url={page}&text={title}",
                icon: "Twitter.svg",
                optionalParams: { "via": twitterVia }
            },
            wechat: {
                title: "Share on WeChat",
                url: "https://chart.apis.google.com/chart?cht=qr&chs=154x154&chl={page}",
                icon: "WeChat.svg"
            },
            linkedin: {
                title: "Share on LinkedIn",
                url: "http://www.linkedin.com/shareArticle?mini=true&url={page}&title={title}",
                icon: "LinkedIn.svg"
            },
            weibo: {
                title: "Share on Weibo",
                url: "http://service.weibo.com/share/share.php?title={title}&url={page}",
                icon: "Weibo.svg"
            },
            xing: {
                title: "Share on Xing",
                url: "https://www.xing.com/spi/shares/new?url={page}",
                icon: "Xing.svg"
            },
            email: {
                title: "Send email",
                url: "mailto:?subject={title}&body={page}",
                icon: "Email.svg"
            }
        }

        var $shareButtonsHtml = $('<ul class="share-buttons">');
        var pageUrl = !!associatedUrl ? associatedUrl : document.URL;

        if (metadataItem) {
            var key = pageUrl.indexOf('?') !== -1 ? "&mditid=" : "?mditid=";
            pageUrl = pageUrl + key + metadataItem;
        };

        pageUrl = encodeURIComponent(pageUrl);

        var pageTitle = !!associatedTitle ? encodeURIComponent(associatedTitle) : encodeURIComponent(document.title);

        $.each(socialNetworks, function (index, network) {
            var sharePage = network.url
                .replace('{page}', pageUrl)
                .replace('{title}', pageTitle);

            if (network.optionalParams) {
                $.each(network.optionalParams,
                    function (key, value) {
                        if(value) sharePage = sharePage + "&" + key + "=" + value;
                    });
            }

            var $socialLinkWrapper = $('<li>');
            var $socialLink = $('<a class="sharing-link" data-url="' + pageUrl + '" data-network="' + index + '" href="' + sharePage + '" title="' + network.title + '" target="_blank" onclick="window.open(\'' + sharePage + '\');return false;">');
            var $socialImg = $('<img alt="' + network.title + '" src="/Content/Shotgun/img/icons/social_icons/' + network.icon + '" />');

            $socialLink.append($socialImg);
            $socialLinkWrapper.append($socialLink);
            $shareButtonsHtml.append($socialLinkWrapper);
        });

        var $shareButtonWrapper = $('<div class="share-buttons-wrapper" id="' + associatedId + '">');
        $shareButtonWrapper.append($shareButtonsHtml);

        $shareButtonWrapper.insertAfter($link);
    };

    function onSocialModalAfterOpen(element) {
        var $link = $(element);

        if (!$link || !$link.attr('href')) return true;

        var associatedId = $link.attr('href');
        $(associatedId).remove();
    };

    $('.twitter-actions-link').on('click', function (event) {
        event.preventDefault();
    });

}(jQuery);;
+function ($) {

    $.fn.feedbackButton = function () {

        var $feedbackWrap = $(this);
        var $form = $feedbackWrap.find("form[data-wffm]");

        $form.on("wffm:submitted",
            function(event, res) {
                var $headerTitle = $feedbackWrap.find(".feedback-header");
                var $formContent = $feedbackWrap.find(".feedback-form-content");

                //no submit button - form submitted succesfully
                if ($(':submit', this).length === 0) {
                    var $result = $(res).wrap("li");
                    $headerTitle.html($result);
                    $formContent.hide();
                }
            });


        $('.feedback-header-controls').on('click change',
            '.radio-inline input, .feedback-close',
            function (e) {

                var $element = $(this);
                var $radioButtons = $feedbackWrap.find(".radio-inline");
                var $closeButton = $feedbackWrap.find(".feedback-close");
                var $form = $feedbackWrap.find(".feedback-form-content");
                var $headerTitle = $feedbackWrap.find(".feedback-header-title");
                var $thankYouMessage = $feedbackWrap.find(".feedback-header-thank-you");


                if ($element.hasClass("feedback-close")) {

                    $form.slideUp();
                    $radioButtons.show().find("input").prop("checked", false);
                    $closeButton.hide();
                    return;
                }

                if ($element.val() === 'yes') {
                    $form.slideUp();
                    $headerTitle.hide();
                    $thankYouMessage.show();
                } else {
                    $radioButtons.hide();
                    $closeButton.show();
                    $form.slideDown();
                    $headerTitle.show();
                    $thankYouMessage.hide();
                }
            });

        $feedbackWrap.on("click", "[data-goal-url]", triggerGoal);

        function triggerGoal() {

            var $button = $(this);
            var url = $button.data("goalUrl");

            $.ajax({
                url: url,
                method: "POST"
            }).done(function () {
                $feedbackWrap.off("click", "[data-goal-url]", triggerGoal);
            });
        }
    }
}(jQuery);;
//+function ($) {
//
//}(jQuery);
+function ($) {

    $("#persons-grid-wrapper").on("click", "a.person-next-group-link", loadNextGroup);

    function loadNextGroup(event) {
        event.preventDefault();
        var $link = $(this);
        var $wrapper = $("#persons-grid-wrapper");

        var controllerUrl = $link.data("url");
        var counter = $link.data("page");
        var sitecoreItemId = $link.data("itemid");

        $.ajax({
            url: controllerUrl,
            method: "POST",
            data: { page: counter, itemId: sitecoreItemId }
        }).done(function (data) {
            $wrapper.html(data);

            var mustHeaderHeight = $("header").height; //skip fixed header
            var offset = $wrapper.offset().top - mustHeaderHeight + "px";

            console.log(offset);
            $('html, body').animate({
                scrollTop: offset
            }, 'fast');

        });
    }

}(jQuery);
// TODO: add custom script code for Shotgun specifically
//+function ($) {
//    if (typeof ($.fn.typeahead) != "undefined") {
//    }
//}(jQuery);;
+function ($) {

    var $leaveCountryPopup = $('#leave-country-popup');
    if ($leaveCountryPopup.length) {
        var pattern = ".*(\/locations\/.[^\/]+)\/{0,1}.*";
        var found = new RegExp(pattern, 'i').exec(window.location.pathname);

        if (found) {
            //variables
            var link;
            var rememberChoiseKey = "leave-country-popup_remember-choise-value";
            var excludedLinkPatterns = ["/-/media/", "/api/"];
            //elements
            var $btnConfirm = $("#leave-country-popup-button-confirm");
            var $btnNewTab = $("#leave-country-popup-button-newtab");
            var $btnClose = $("#leave-country-popup .close-btn");
            var $rememberChoise = $("#leave-country-popup-button-remember");
            var $externalCountryLinks = $("a[href*='" + window.location.host + "'], a[href^='/']")
                .filter(function () {
                    var h = $(this).attr("href");

                    if ($(this).data("no-popup-action") || excludedLinkPatterns.filter(
                        function (p) { return h.indexOf(p) >= 0; }).length > 0) return false;

                    return h.indexOf(found[1]) === -1;
                });
            $rememberChoise.on("change", function (evt) {
                var boxLabel = $(evt.target).parent('label');
                (this.checked ? boxLabel.addClass : boxLabel.removeClass).call(boxLabel, "checked");
            });

            //methods
            var openModal = function () {
                $leaveCountryPopup.show()
            };
            var closeModal = function () {
                $leaveCountryPopup.toggle();
            };
            var rememberChoise = function (value) {
                if ($rememberChoise.prop("checked")) {
                    sessionStorage.setItem(rememberChoiseKey, value);
                }
            };
            //handlers
            var onConfirm = function () {
                rememberChoise("next");
                closeModal();
                window.location.href = link;
            };
            var onNewTab = function () {
                rememberChoise("newtab");
                closeModal();
                window.open(link, "_blank");
            };
            var onCloseBtn = function () {
                closeModal();
            }
            var onExternalLinkClick = function (event) {

                event.preventDefault();

                link = $(this).attr("href");
                var choise = sessionStorage.getItem(rememberChoiseKey);

                switch (choise) {
                    case "next":
                        window.location.href = link;
                        break;
                    case "newtab":
                        window.open(link, "_blank");
                        break;
                    default:
                        openModal();
                }
            };

            //events
            $btnConfirm.on("click", onConfirm);
            $btnNewTab.on("click", onNewTab);
            $btnClose.on("click", onCloseBtn);
            $externalCountryLinks.on("click", onExternalLinkClick);
        }
    }

    var globalPicker = $('.global-picker');

    if (globalPicker.length) {
        var country = globalPicker.find('li.alternate-lan');

        $(country).on('click', function () {
            var current = $(this).find('.subcountries');
            $('.subcountries').each(function () {
                if ($(this).is(":visible") && !($(this).is(current))) {
                    $(this).slideToggle();
                    $(this).parent().find("i").removeClass("fa-rotate-180");

                }
            });
            $(current).slideToggle();
            $(current).parent().find("i").toggleClass("fa-rotate-180");
        });
    }

}(jQuery);;
+function ($) {

    // print button
    $(".print-page").on("click", function (event) {
        event.preventDefault();
        var printClass = "print-bg-image-" + new Date().valueOf();
        var printItems = $('[style*="background-image"]');
        printItems.each(function (index, value) {
            $(this).addClass("non-printable");
            var imageItem = $("<img class ='printable " + printClass + "' style='content:" + $(this).css("background-image") + "'>").insertBefore(this);
            if ($(this).hasClass("banner")) {
                $(imageItem).css("width", "100%");
            }
        });
        window.print();
        $("." + printClass).remove();

    });

    $(".language-item.active").on("click", function (e) {
        e.preventDefault();
        $(".language-item.hidden-language").toggle();
    });

    //$("#primary-menu").find('.left-panel-list').on("click", 'a', function (event) {
    //    event.preventDefault();
    //    var $link = $(this);
    //    var openClass = ("open");

    //    if (!$link.hasClass(openClass)) {
    //        var $associatedList = $($link.data("associated-list"));
    //        var $openedLinks = $link.closest(".left-panel-list").find("a.open");
    //        var $openedLists = $(".menu-item-list-wrap");

    //        $openedLinks.removeClass(openClass);
    //        $openedLists.removeClass(openClass);

    //        $link.addClass(openClass);
    //        $associatedList.addClass(openClass);
    //    }
    //});

    $('.menu-item-panel.collapse, .country-selector-panel.collapse, .menu-item-popup.collapse').click(function (event) {
        !$(event.target).filter('.btn[data-toggle]').length && event.stopPropagation();
    });

    $(".mobile-menu-wrapper").on("click", '.with-children .mobile-menu-list-item-link', function () {

        var $link = $(this);
        var $parentMenu = $link.closest(".mobile-menu-list");
        var $children = $link.next(".mobile-menu-list");

        var menuOffset = $parentMenu.data('offset');
        if (!menuOffset) {
            menuOffset = 0;
            $parentMenu.data('offset', menuOffset);
        }

        if ($link.hasClass("open")) {

            $link.removeClass("open");
            $children.slideUp(function () {
                if ($parentMenu.hasClass("first")) {
                    $parentMenu.css('transform', 'none');
                    $parentMenu.data('offset', 0);
                };
            });

            var $childMenus = $children.find(".mobile-menu-list");
            $childMenus.slideUp();
            $children.find(".mobile-menu-list-item-link").removeClass("open");

        } else {

            $(".mobile-menu-list-item-link").not($link).not(
                $link.parents(".mobile-menu-list-item").children(".mobile-menu-list-item-link")
            ).removeClass("open");

            $(".mobile-menu-list").not($link.parents(".mobile-menu-list")).slideUp();

            $link.addClass("open");
            $children.slideDown(function () {

                if ($parentMenu.hasClass("first")) {
                    var $parentItem = $link.closest("li");
                    menuOffset = $parentItem.position().top + menuOffset;
                    $parentMenu.data('offset', menuOffset);
                    $parentMenu.css('transform', 'translateY(-' + menuOffset + 'px)');
                };
            });

        }

    });

    $(".mobile-menu-wrapper").on("click", '.btn-menu-wrap', function (event) {
        var $button = $(this);
        var $menu = $button.next(".mobile-menu");

        $button.toggleClass("open");
        $menu.stop().animate({ width: 'toggle' }, 350);
    });

    $('.panel-secondary-menu .dropdown-toggle').on("click", function () {
        $(this).parent().toggleClass("open");
    });
    $(document).on("click", function (e) {
        if ($(".panel-secondary-menu .dropdown").is(e.target) === false &&
            $(".panel-secondary-menu .dropdown").has(e.target).length === 0 &&
            $(".open").has(e.target).length === 0) {

            $(".panel-secondary-menu .dropdown").removeClass("open");
        }
    });

    $('.regional-cta-box:not(.editing)').on("click", '.title-collapsed', function (event) {
        var $box = $(event.delegateTarget);
        $('.regional-cta-content', $box).slideDown(300, function () {
            $box.removeClass("collapsed");
        });
    }).on("click", '.title-expanded', function (event) {
        var $box = $(event.delegateTarget);
        $('.regional-cta-content', $box).slideUp(300, function () {
            $box.addClass("collapsed");
        });
    }).on("click", '.btn-cta-yes, .btn-cta-no', function (event) {
        var $button = $(this);
        var actionUrl = $(event.delegateTarget).data("action");
        var targetUrl = $button.hasClass("btn-cta-yes") ? $button.attr("href") : null;

        if (actionUrl) {
            $.ajax({
                url: actionUrl,
                method: "POST"
            }).done(function (data, textStatus, jqXHR) {
                if (jqXHR.status == 200) {
                    if (targetUrl) {
                        window.location.href = targetUrl;
                    } else {
                        $button.closest('.regional-cta').hide().siblings('.country-selector').css("display", "inline-block");
                    }
                } else {
                    console.error("Failed to view regional solutions: " + textStatus);
                }
            });

            event.preventDefault();
        }
    });

    $(document).ready(function () {
        var backToTopButton = $('.pagetop-button');

        $(window).scroll(function () {
            if ($(window).scrollTop() > 300) {
                backToTopButton.addClass("show");
            } else {
                backToTopButton.removeClass("show");
            }
        });
        backToTopButton.on("click", function (e) {
            e.preventDefault();
            $('html, body').animate({ scrollTop: 0 }, "300");
        });
    });

}(jQuery);
+function ($) {

    $(".promo-awards-carousel").slick({
        dots: true,
        infinite: true,
        arrows: false,
        speed: 1000,
        slidesToShow: 1,
        slidesToScroll: 1
    });
    $(".related-content-carousel").slick({
        dots: true,
        infinite: true,
        arrows: false,
        speed: 1000,
        slidesToShow: 1,
        slidesToScroll: 1
    });
    $(".slick-carousel-modern").slick({
        dots: false,
        infinite: true,
        arrows: true,
        speed: 1000,
        slidesToShow: 4,
        slidesToScroll: 4,
        nextArrow: '<i class="carousel-modern-button next iqvia-icon-menu-thin-right"></i>',
        prevArrow: '<i class="carousel-modern-button prev iqvia-icon-menu-thin-left"></i>',
        responsive: [
            {
                breakpoint: 1562,
                settings: {
                    slidesToShow: 4,
                    slidesToScroll: 4,
                }
            },
            {
                breakpoint: 1219,
                settings: {
                    slidesToShow: 3,
                    slidesToScroll: 3,
                }
            },
            {
                breakpoint: 992,
                settings: {
                    slidesToShow: 2,
                    slidesToScroll: 2,
                }
            },
            {
                breakpoint: 767,
                settings: {
                    slidesToShow: 1,
                    slidesToScroll: 1,
                }
            },
        ],
    });
    $(".promo-box-wrapper.vertical").each(function () {
        var $box = $(this);
        var $closestRow = $box.closest(".row");
        var $children = $closestRow.find(".promo-box-wrapper.vertical .promo-box");

        if ($children.length > 1) {
            var minHeight = Math.max.apply(null,
                $children.map(function () {
                    return $(this).outerHeight();
                }).get()
            );
            $children.css("min-height", minHeight);
        }
    });

    $(".welcome-play").on('click', function () {
        var $welcome = $(this);
        var player = videojs($welcome.attr('data-id'));
        player.play();

    });

    var bindableCta = [
        '.top-level-hero__button', '.home-page-hero__button',
        '.mid-level-hero__button', '.accordeon-cta__button',
        '.image-align-box__button', '.cta-button__inner .cta-btn',
        '.color_accent__box .def-btn', '.main-mega-menu-button-redesign',
        '.contact-us-cta-button', ".cta-btn-redesign", ".nav-mobile-contact-us",
        ".three-pill-wrapper .three-pill-container .content a", ".tile-container__text .cta-button .cta-btn"
    ];
    $(bindableCta.join(",")).click(function () {
        var currentLanguage = $('.stiky-language').data('currentLanguage');
        if (!currentLanguage) currentLanguage = $("[data-sc-current-language]").data("sc-current-language");
        var linkUrl = $(this).attr("href");
        if (linkUrl && linkUrl[0] == '#') {
            linkUrl = linkUrl.substring(1);
            var dialogUrl = currentLanguage
                ? /^\w{1,25}$/.test(linkUrl) ? "/" + currentLanguage + "/form-pages/" + linkUrl : null
                : /^\w{1,25}$/.test(linkUrl) ? "/form-pages/" + linkUrl : null;

            if (dialogUrl) {
                $(document).trigger("create.fxb.modal", {
                    id: "cta-form-popup-" + linkUrl,
                    url: dialogUrl,
                    show: true
                });
            }
            return false;
        }

        return true;
    });

}(jQuery)
;
+function ($) {
    $(".tabbed-banner-carousel").slick({
        dots: false,
        infinite: true,
        arrows: true,
        speed: 800,
        slidesToShow: 1,
        slidesToScroll: 1,
        adaptiveHeight: true,
        nextArrow: '<i class="tabbed-banner-carousel-button next iqvia-icon-menu-thin-right"></i>',
        prevArrow: '<i class="tabbed-banner-carousel-button prev iqvia-icon-menu-thin-left"></i>',
        responsive: [
            {
                breakpoint: 767,
                settings: {
                    dots: true,
                    arrows: false
                }
            }, 
    ],
    });
}(jQuery)
;
/*!
 * css-vars-ponyfill
 * v1.16.2
 * https://github.com/jhildenbiddle/css-vars-ponyfill
 * (c) 2018 John Hildenbiddle <http://hildenbiddle.com>
 * MIT license
 */
!function(n,o){"object"==typeof exports&&"undefined"!=typeof module?module.exports=o():"function"==typeof define&&define.amd?define(o):(n=n||self).cssVars=o()}(this,function(){"use strict";function n(n){return function(n){if(Array.isArray(n)){for(var o=0,e=new Array(n.length);o<n.length;o++)e[o]=n[o];return e}}(n)||function(n){if(Symbol.iterator in Object(n)||"[object Arguments]"===Object.prototype.toString.call(n))return Array.from(n)}(n)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance")}()}function o(n){var o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},e={mimeType:o.mimeType||null,onBeforeSend:o.onBeforeSend||Function.prototype,onSuccess:o.onSuccess||Function.prototype,onError:o.onError||Function.prototype,onComplete:o.onComplete||Function.prototype},c=Array.isArray(n)?n:[n],t=Array.apply(null,Array(c.length)).map(function(n){return null});function u(){return!("<"===(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").trim().charAt(0))}function f(n,o){e.onError(n,c[o],o)}function r(n,o){var u=e.onSuccess(n,c[o],o);n=!1===u?"":u||n,t[o]=n,-1===t.indexOf(null)&&e.onComplete(t)}c.forEach(function(n,o){var c=document.createElement("a");c.setAttribute("href",n),c.href=String(c.href);var t=c.host!==location.host,a=document.all&&!window.atob,p=c.protocol===location.protocol;if(t&&a)if(p){var l=new XDomainRequest;l.open("GET",n),l.timeout=0,l.onprogress=Function.prototype,l.ontimeout=Function.prototype,l.onload=function(){u(l.responseText)?r(l.responseText,o):f(l,o)},l.onerror=function(n){f(l,o)},setTimeout(function(){l.send()},0)}else console.log("Internet Explorer 9 Cross-Origin (CORS) requests must use the same protocol"),f(null,o);else{var v=new XMLHttpRequest;v.open("GET",n),e.mimeType&&v.overrideMimeType&&v.overrideMimeType(e.mimeType),e.onBeforeSend(v,n,o),v.onreadystatechange=function(){4===v.readyState&&(200===v.status&&u(v.responseText)?r(v.responseText,o):f(v,o))},v.send()}})}function e(n){var e={cssComments:/\/\*[\s\S]+?\*\//g,cssImports:/(?:@import\s*)(?:url\(\s*)?(?:['"])([^'"]*)(?:['"])(?:\s*\))?(?:[^;]*;)/g},t={rootElement:n.rootElement||document,include:n.include||'style,link[rel="stylesheet"]',exclude:n.exclude||null,filter:n.filter||null,useCSSOM:n.useCSSOM||!1,onBeforeSend:n.onBeforeSend||Function.prototype,onSuccess:n.onSuccess||Function.prototype,onError:n.onError||Function.prototype,onComplete:n.onComplete||Function.prototype},u=Array.apply(null,t.rootElement.querySelectorAll(t.include)).filter(function(n){return o=n,e=t.exclude,!(o.matches||o.matchesSelector||o.webkitMatchesSelector||o.mozMatchesSelector||o.msMatchesSelector||o.oMatchesSelector).call(o,e);var o,e}),f=Array.apply(null,Array(u.length)).map(function(n){return null});function r(){if(-1===f.indexOf(null)){var n=f.join("");t.onComplete(n,f,u)}}function a(n,e,c,u){var a=t.onSuccess(n,c,u);(function n(e,c,u,f){var r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:[];var a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:[];var l=p(e,u,a);l.rules.length?o(l.absoluteUrls,{onBeforeSend:function(n,o,e){t.onBeforeSend(n,c,o)},onSuccess:function(n,o,e){var u=t.onSuccess(n,c,o),f=p(n=!1===u?"":u||n,o,a);return f.rules.forEach(function(o,e){n=n.replace(o,f.absoluteRules[e])}),n},onError:function(o,t,p){r.push({xhr:o,url:t}),a.push(l.rules[p]),n(e,c,u,f,r,a)},onComplete:function(o){o.forEach(function(n,o){e=e.replace(l.rules[o],n)}),n(e,c,u,f,r,a)}}):f(e,r)})(n=void 0!==a&&!1===Boolean(a)?"":a||n,c,u,function(n,o){null===f[e]&&(o.forEach(function(n){return t.onError(n.xhr,c,n.url)}),!t.filter||t.filter.test(n)?f[e]=n:f[e]="",r())})}function p(n,o){var t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],u={};return u.rules=(n.replace(e.cssComments,"").match(e.cssImports)||[]).filter(function(n){return-1===t.indexOf(n)}),u.urls=u.rules.map(function(n){return n.replace(e.cssImports,"$1")}),u.absoluteUrls=u.urls.map(function(n){return c(n,o)}),u.absoluteRules=u.rules.map(function(n,e){var t=u.urls[e],f=c(u.absoluteUrls[e],o);return n.replace(t,f)}),u}u.length?u.forEach(function(n,e){var u=n.getAttribute("href"),p=n.getAttribute("rel"),l="LINK"===n.nodeName&&u&&p&&"stylesheet"===p.toLowerCase(),v="STYLE"===n.nodeName;if(l)o(u,{mimeType:"text/css",onBeforeSend:function(o,e,c){t.onBeforeSend(o,n,e)},onSuccess:function(o,t,f){var r=c(u,location.href);a(o,e,n,r)},onError:function(o,c,u){f[e]="",t.onError(o,n,c),r()}});else if(v){var i=n.textContent;t.useCSSOM&&(i=Array.apply(null,n.sheet.cssRules).map(function(n){return n.cssText}).join("")),a(i,e,n,location.href)}else f[e]="",r()}):t.onComplete("",[])}function c(n){var o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:location.href,e=document.implementation.createHTMLDocument(""),c=e.createElement("base"),t=e.createElement("a");return e.head.appendChild(c),e.body.appendChild(t),c.href=o,t.href=n,t.href}function t(){for(var n=function(n){return n instanceof Object&&n.constructor===Object},o=arguments.length,e=new Array(o),c=0;c<o;c++)e[c]=arguments[c];return e.reduce(function(o,e){return Object.keys(e).forEach(function(c){var u=o[c],f=e[c];n(u)&&n(f)?o[c]=t(u,f):o[c]=f}),o},{})}var u=f;function f(n,o,e){n instanceof RegExp&&(n=r(n,e)),o instanceof RegExp&&(o=r(o,e));var c=a(n,o,e);return c&&{start:c[0],end:c[1],pre:e.slice(0,c[0]),body:e.slice(c[0]+n.length,c[1]),post:e.slice(c[1]+o.length)}}function r(n,o){var e=o.match(n);return e?e[0]:null}function a(n,o,e){var c,t,u,f,r,a=e.indexOf(n),p=e.indexOf(o,a+1),l=a;if(a>=0&&p>0){for(c=[],u=e.length;l>=0&&!r;)l==a?(c.push(l),a=e.indexOf(n,l+1)):1==c.length?r=[c.pop(),p]:((t=c.pop())<u&&(u=t,f=p),p=e.indexOf(o,l+1)),l=a<p&&a>=0?a:p;c.length&&(r=[u,f])}return r}function p(n){var o=t({onlyVars:!1,removeComments:!1},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{});function e(n){throw new Error("CSS parse error: ".concat(n))}function c(o){var e=o.exec(n);if(e)return n=n.slice(e[0].length),e}function f(){return c(/^{\s*/)}function r(){return c(/^}/)}function a(){c(/^\s*/)}function p(){if(a(),"/"===n[0]&&"*"===n[1]){for(var o=2;n[o]&&("*"!==n[o]||"/"!==n[o+1]);)o++;if(!n[o])return e("end of comment is missing");var c=n.slice(2,o);return n=n.slice(o+2),{type:"comment",comment:c}}}function l(){for(var n,e=[];n=p();)e.push(n);return o.removeComments?[]:e}function v(){for(a();"}"===n[0];)e("extra closing bracket");var o=c(/^(("(?:\\"|[^"])*"|'(?:\\'|[^'])*'|[^{])+)/);if(o)return o[0].trim().replace(/\/\*([^*]|[\r\n]|(\*+([^*\/]|[\r\n])))*\*\/+/g,"").replace(/"(?:\\"|[^"])*"|'(?:\\'|[^'])*'/g,function(n){return n.replace(/,/g,"‌")}).split(/\s*(?![^(]*\)),\s*/).map(function(n){return n.replace(/\u200C/g,",")})}function i(){c(/^([;\s]*)+/);var n=/\/\*[^*]*\*+([^\/*][^*]*\*+)*\//g,o=c(/^(\*?[-#\/*\\\w]+(\[[0-9a-z_-]+\])?)\s*/);if(o){if(o=o[0].trim(),!c(/^:\s*/))return e("property missing ':'");var t=c(/^((?:\/\*.*?\*\/|'(?:\\'|.)*?'|"(?:\\"|.)*?"|\((\s*'(?:\\'|.)*?'|"(?:\\"|.)*?"|[^)]*?)\s*\)|[^};])+)/),u={type:"declaration",property:o.replace(n,""),value:t?t[0].replace(n,"").trim():""};return c(/^[;\s]*/),u}}function m(){if(!f())return e("missing '{'");for(var n,o=l();n=i();)o.push(n),o=o.concat(l());return r()?o:e("missing '}'")}function h(){a();for(var n,o=[];n=c(/^((\d+\.\d+|\.\d+|\d+)%?|[a-z]+)\s*/);)o.push(n[1]),c(/^,\s*/);if(o.length)return{type:"keyframe",values:o,declarations:m()}}function y(){if(a(),"@"===n[0]){var t=function(){var n=c(/^@([-\w]+)?keyframes\s*/);if(n){var o=n[1];if(!(n=c(/^([-\w]+)\s*/)))return e("@keyframes missing name");var t,u=n[1];if(!f())return e("@keyframes missing '{'");for(var a=l();t=h();)a.push(t),a=a.concat(l());return r()?{type:"keyframes",name:u,vendor:o,keyframes:a}:e("@keyframes missing '}'")}}()||function(){var n=c(/^@supports *([^{]+)/);if(n)return{type:"supports",supports:n[1].trim(),rules:S()}}()||function(){if(c(/^@host\s*/))return{type:"host",rules:S()}}()||function(){var n=c(/^@media *([^{]+)/);if(n)return{type:"media",media:n[1].trim(),rules:S()}}()||function(){var n=c(/^@custom-media\s+(--[^\s]+)\s*([^{;]+);/);if(n)return{type:"custom-media",name:n[1].trim(),media:n[2].trim()}}()||function(){if(c(/^@page */))return{type:"page",selectors:v()||[],declarations:m()}}()||function(){var n=c(/^@([-\w]+)?document *([^{]+)/);if(n)return{type:"document",document:n[2].trim(),vendor:n[1]?n[1].trim():null,rules:S()}}()||function(){if(c(/^@font-face\s*/))return{type:"font-face",declarations:m()}}()||function(){var n=c(/^@(import|charset|namespace)\s*([^;]+);/);if(n)return{type:n[1],name:n[2].trim()}}();if(t&&o.onlyVars){var u=!1;if(t.declarations)u=t.declarations.some(function(n){return/var\(/.test(n.value)});else u=(t.keyframes||t.rules||[]).some(function(n){return(n.declarations||[]).some(function(n){return/var\(/.test(n.value)})});return u?t:{}}return t}}function b(){if(o.onlyVars){var c=u("{","}",n);if(c){var t=-1!==c.pre.indexOf(":root")&&/--\S*\s*:/.test(c.body),f=/var\(/.test(c.body);if(!t&&!f)return n=n.slice(c.end+1),{}}}var r=v()||[],a=o.onlyVars?m().filter(function(n){var o=r.some(function(n){return-1!==n.indexOf(":root")})&&/^--\S/.test(n.property),e=/var\(/.test(n.value);return o||e}):m();return r.length||e("selector missing"),{type:"rule",selectors:r,declarations:a}}function S(o){if(!o&&!f())return e("missing '{'");for(var c,t=l();n.length&&(o||"}"!==n[0])&&(c=y()||b());)c.type&&t.push(c),t=t.concat(l());return o||r()?t:e("missing '}'")}return{type:"stylesheet",stylesheet:{rules:S(!0),errors:[]}}}f.range=a;var l="--",v="var",i={dom:{},temp:{},user:{}};function m(n){var o,e,c=t({fixNestedCalc:!0,onlyVars:!1,persist:!1,preserve:!1,variables:{},onWarning:function(){}},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}),f=c.persist?i.dom:i.temp=JSON.parse(JSON.stringify(i.dom)),r=p(n,{onlyVars:c.onlyVars});if(r.stylesheet.rules.forEach(function(n){var o=[];if("rule"===n.type&&1===n.selectors.length&&":root"===n.selectors[0]&&(n.declarations.forEach(function(n,e){var c=n.property,t=n.value;c&&0===c.indexOf(l)&&(f[c]=t,o.push(e))}),!c.preserve))for(var e=o.length-1;e>=0;e--)n.declarations.splice(o[e],1)}),Object.keys(i.user).forEach(function(n){f[n]=i.user[n]}),Object.keys(c.variables).length){var a={declarations:[],selectors:[":root"],type:"rule"};Object.keys(c.variables).forEach(function(n){var o="--".concat(n.replace(/^-+/,"")),e=c.variables[n];c.persist&&(i.user[o]=e),f[o]!==e&&(f[o]=e,a.declarations.push({type:"declaration",property:o,value:e}))}),c.preserve&&a.declarations.length&&r.stylesheet.rules.push(a)}return function n(o,e){o.rules.forEach(function(c){c.rules?n(c,e):c.keyframes?c.keyframes.forEach(function(n){"keyframe"===n.type&&e(n.declarations,c)}):c.declarations&&e(c.declarations,o)})}(r.stylesheet,function(n,o){for(var e,t,u,r=0;r<n.length;r++)u=(e=n[r]).value,"declaration"===e.type&&u&&-1!==u.indexOf(v+"(")&&(t=h(u,f,c))!==e.value&&(c.preserve?(n.splice(r,0,{type:e.type,property:e.property,value:t}),r++):e.value=t)}),c.fixNestedCalc&&(o=r.stylesheet.rules,e=/(-[a-z]+-)?calc\(/,o.forEach(function(n){n.declarations&&n.declarations.forEach(function(n){for(var o=n.value,c="";e.test(o);){var t=u("calc(",")",o||"");for(o=o.slice(t.end);e.test(t.body);){var f=u(e,")",t.body);t.body="".concat(f.pre,"(").concat(f.body,")").concat(f.post)}c+="".concat(t.pre,"calc(").concat(t.body),c+=e.test(o)?"":")".concat(t.post)}n.value=c||n.value})})),function(n){var o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",e=arguments.length>2?arguments[2]:void 0,c={charset:function(n){return"@charset "+n.name+";"},comment:function(n){return 0===n.comment.indexOf("__CSSVARSPONYFILL")?"/*"+n.comment+"*/":""},"custom-media":function(n){return"@custom-media "+n.name+" "+n.media+";"},declaration:function(n){return n.property+":"+n.value+";"},document:function(n){return"@"+(n.vendor||"")+"document "+n.document+"{"+t(n.rules)+"}"},"font-face":function(n){return"@font-face{"+t(n.declarations)+"}"},host:function(n){return"@host{"+t(n.rules)+"}"},import:function(n){return"@import "+n.name+";"},keyframe:function(n){return n.values.join(",")+"{"+t(n.declarations)+"}"},keyframes:function(n){return"@"+(n.vendor||"")+"keyframes "+n.name+"{"+t(n.keyframes)+"}"},media:function(n){return"@media "+n.media+"{"+t(n.rules)+"}"},namespace:function(n){return"@namespace "+n.name+";"},page:function(n){return"@page "+(n.selectors.length?n.selectors.join(", "):"")+"{"+t(n.declarations)+"}"},rule:function(n){var o=n.declarations;if(o.length)return n.selectors.join(",")+"{"+t(o)+"}"},supports:function(n){return"@supports "+n.supports+"{"+t(n.rules)+"}"}};function t(n){for(var t="",u=0;u<n.length;u++){var f=n[u];e&&e(f);var r=c[f.type](f);r&&(t+=r,r.length&&f.selectors&&(t+=o))}return t}return t(n.stylesheet.rules)}(r)}function h(n,o){var e=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},c=arguments.length>3?arguments[3]:void 0;if(-1===n.indexOf("var("))return n;var t=u("(",")",n),f="CSS transform warning:";return t?"var"===t.pre.slice(-3)?0===t.body.trim().length?(e.onWarning("".concat(f," var() must contain a non-whitespace string")),n):t.pre.slice(0,-3)+function(n){var t=n.split(",")[0],u=(n.match(/(?:\s*,\s*){1}(.*)?/)||[])[1],r=o.hasOwnProperty(t)?String(o[t]):void 0,a=r||(u?String(u):void 0),p=c||n;return r||e.onWarning("".concat(f,' variable "').concat(t,'" is undefined')),a&&"undefined"!==a&&a.length>0?h(a,o,e,p):"var(".concat(p,")")}(t.body)+h(t.post,o,e):t.pre+"(".concat(h(t.body,o,e),")")+h(t.post,o,e):(-1!==n.indexOf("var(")&&e.onWarning("".concat(f,' missing closing ")" in the value "').concat(n,'"')),n)}var y="css-vars-ponyfill",b="undefined"!=typeof window,S=b&&window.CSS&&window.CSS.supports&&window.CSS.supports("(--a: 0)"),C={rootElement:b?document:null,include:"style,link[rel=stylesheet]",exclude:"",fixNestedCalc:!0,onlyLegacy:!0,onlyVars:!1,preserve:!1,shadowDOM:!1,silent:!1,updateDOM:!0,updateURLs:!0,variables:{},watch:null,onBeforeSend:function(){},onSuccess:function(){},onWarning:function(){},onError:function(){},onComplete:function(){}},O={cssComments:/\/\*[\s\S]+?\*\//g,cssKeyframes:/@(?:-\w*-)?keyframes/,cssRootRules:/(?::root\s*{\s*[^}]*})/g,cssUrls:/url\((?!['"]?(?:data|http|\/\/):)['"]?([^'")]*)['"]?\)/g,cssVars:/(?:(?::root\s*{\s*[^;]*;*\s*)|(?:var\(\s*))(--[^:)]+)(?:\s*[:)])/},w=null,E=!1;function R(){var o=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},c=t(C,o),u=y;function f(n,o,e,t){c.silent||console.error("".concat(n,"\n"),o),c.onError(n,o,e,t)}function r(n){c.silent||console.warn(n),c.onWarning(n)}if(c.exclude="#".concat(u)+(c.exclude?",".concat(c.exclude):""),b)if("loading"!==document.readyState){var a=c.shadowDOM||c.rootElement.shadowRoot||c.rootElement.host;if(S&&c.onlyLegacy){if(c.updateDOM){var p=c.rootElement.host||(c.rootElement===document?document.documentElement:c.rootElement);Object.keys(c.variables).forEach(function(n){var o="--".concat(n.replace(/^-+/,"")),e=c.variables[n];p.style.setProperty(o,e)})}}else a&&!E?e({rootElement:C.rootElement,include:C.include,exclude:c.exclude,onSuccess:function(n,o,e){return(n.match(O.cssRootRules)||[]).join("")||!1},onComplete:function(n,o,e){m(n,{persist:!0}),E=!0,R(c)}}):(c.watch?function(n,o){if(!window.MutationObserver)return;var e=function(n){return"LINK"===n.tagName&&-1!==(n.getAttribute("rel")||"").indexOf("stylesheet")},c=function(n){return"STYLE"===n.tagName&&(!o||n.id!==o)},t=null;w&&w.disconnect();n.watch=C.watch,(w=new MutationObserver(function(o){var u=!1;o.forEach(function(o){if("attributes"===o.type)u=e(o.target)||c(o.target);else if("childList"===o.type){var f=Array.apply(null,o.addedNodes),r=Array.apply(null,o.removedNodes);u=[].concat(f,r).some(function(n){var o=e(n)&&!n.disabled,t=c(n)&&!n.disabled&&O.cssVars.test(n.textContent);return o||t})}u&&(clearTimeout(t),t=setTimeout(function(){R(n)},1))})})).observe(document.documentElement,{attributes:!0,attributeFilter:["disabled","href"],childList:!0,subtree:!0})}(c,u):!1===c.watch&&w&&w.disconnect(),e({rootElement:c.rootElement,include:c.include,exclude:c.exclude,filter:c.onlyVars?O.cssVars:null,onBeforeSend:c.onBeforeSend,onSuccess:function(n,o,e){var t=c.onSuccess(n,o,e);(n=void 0!==t&&!1===Boolean(t)?"":t||n,c.updateURLs)&&(n.replace(O.cssComments,"").match(O.cssUrls)||[]).forEach(function(o){var c=o.replace(O.cssUrls,"$1"),t=j(c,e);n=n.replace(o,o.replace(c,t))});return n},onError:function(n,o,e){var c=n.responseURL||j(e,location.href),t=n.statusText?"(".concat(n.statusText,")"):"Unspecified Error"+(0===n.status?" (possibly CORS related)":"");f("CSS XHR Error: ".concat(c," ").concat(n.status," ").concat(t),o,n,c)},onComplete:function(o,e,a){var p=null;o=e.map(function(n,o){return O.cssVars.test(n)?n:"/*__CSSVARSPONYFILL-".concat(o,"__*/")}).join("");try{o=m(o,{fixNestedCalc:c.fixNestedCalc,onlyVars:c.onlyVars,persist:c.updateDOM,preserve:c.preserve,variables:c.variables,onWarning:r});var l=O.cssKeyframes.test(o);if(o=o.replace(/\/\*__CSSVARSPONYFILL-(\d+)__\*\//g,function(n,o){return e[o]}),c.updateDOM&&a&&a.length){var v=a[a.length-1];(p=c.rootElement.querySelector("#".concat(u))||document.createElement("style")).setAttribute("id",u),p.textContent!==o&&(p.textContent=o),v.nextSibling!==p&&v.parentNode&&v.parentNode.insertBefore(p,v.nextSibling),l&&function(n){var o=["animation-name","-moz-animation-name","-webkit-animation-name"].filter(function(n){return getComputedStyle(document.body)[n]})[0];if(o){for(var e=n.getElementsByTagName("*"),c=[],t=0,u=e.length;t<u;t++){var f=e[t],r=getComputedStyle(f)[o];"none"!==r&&(f.style[o]+="__CSSVARSPONYFILL-KEYFRAMES__",c.push(f))}document.body.offsetHeight;for(var a=0,p=c.length;a<p;a++){var l=c[a].style;l[o]=l[o].replace("__CSSVARSPONYFILL-KEYFRAMES__","")}}}(c.rootElement)}}catch(n){var h=!1;e.forEach(function(n,o){try{n=m(n,c)}catch(n){var e=a[o-0];h=!0,f(n.message,e)}}),h||f(n.message||n)}if(c.shadowDOM)for(var y,b=[c.rootElement].concat(n(c.rootElement.querySelectorAll("*"))),S=0;y=b[S];++S){if(y.shadowRoot&&y.shadowRoot.querySelector("style"))R(t(c,{rootElement:y.shadowRoot,variables:i.dom}))}c.onComplete(o,p,JSON.parse(JSON.stringify(c.updateDOM?i.dom:i.temp)))}}))}else document.addEventListener("DOMContentLoaded",function n(e){R(o),document.removeEventListener("DOMContentLoaded",n)})}function j(n){var o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:location.href,e=document.implementation.createHTMLDocument(""),c=e.createElement("base"),t=e.createElement("a");return e.head.appendChild(c),e.body.appendChild(t),c.href=o,t.href=n,t.href}return R});
//# sourceMappingURL=css-vars-ponyfill.min.js.map
;
/*!
 * Select2 4.0.6-rc.0
 * https://select2.github.io
 *
 * Released under the MIT license
 * https://github.com/select2/select2/blob/master/LICENSE.md
 */
;(function (factory) {
  if (typeof define === 'function' && define.amd) {
    // AMD. Register as an anonymous module.
    define(['jquery'], factory);
  } else if (typeof module === 'object' && module.exports) {
    // Node/CommonJS
    module.exports = function (root, jQuery) {
      if (jQuery === undefined) {
        // require('jQuery') returns a factory that requires window to
        // build a jQuery instance, we normalize how we use modules
        // that require this pattern but the window provided is a noop
        // if it's defined (how jquery works)
        if (typeof window !== 'undefined') {
          jQuery = require('jquery');
        }
        else {
          jQuery = require('jquery')(root);
        }
      }
      factory(jQuery);
      return jQuery;
    };
  } else {
    // Browser globals
    factory(jQuery);
  }
} (function (jQuery) {
  // This is needed so we can catch the AMD loader configuration and use it
  // The inner file should be wrapped (by `banner.start.js`) in a function that
  // returns the AMD loader references.
  var S2 =(function () {
  // Restore the Select2 AMD loader so it can be used
  // Needed mostly in the language files, where the loader is not inserted
  if (jQuery && jQuery.fn && jQuery.fn.select2 && jQuery.fn.select2.amd) {
    var S2 = jQuery.fn.select2.amd;
  }
var S2;(function () { if (!S2 || !S2.requirejs) {
if (!S2) { S2 = {}; } else { require = S2; }
/**
 * @license almond 0.3.3 Copyright jQuery Foundation and other contributors.
 * Released under MIT license, http://github.com/requirejs/almond/LICENSE
 */
//Going sloppy to avoid 'use strict' string cost, but strict practices should
//be followed.
/*global setTimeout: false */

var requirejs, require, define;
(function (undef) {
    var main, req, makeMap, handlers,
        defined = {},
        waiting = {},
        config = {},
        defining = {},
        hasOwn = Object.prototype.hasOwnProperty,
        aps = [].slice,
        jsSuffixRegExp = /\.js$/;

    function hasProp(obj, prop) {
        return hasOwn.call(obj, prop);
    }

    /**
     * Given a relative module name, like ./something, normalize it to
     * a real name that can be mapped to a path.
     * @param {String} name the relative name
     * @param {String} baseName a real name that the name arg is relative
     * to.
     * @returns {String} normalized name
     */
    function normalize(name, baseName) {
        var nameParts, nameSegment, mapValue, foundMap, lastIndex,
            foundI, foundStarMap, starI, i, j, part, normalizedBaseParts,
            baseParts = baseName && baseName.split("/"),
            map = config.map,
            starMap = (map && map['*']) || {};

        //Adjust any relative paths.
        if (name) {
            name = name.split('/');
            lastIndex = name.length - 1;

            // If wanting node ID compatibility, strip .js from end
            // of IDs. Have to do this here, and not in nameToUrl
            // because node allows either .js or non .js to map
            // to same file.
            if (config.nodeIdCompat && jsSuffixRegExp.test(name[lastIndex])) {
                name[lastIndex] = name[lastIndex].replace(jsSuffixRegExp, '');
            }

            // Starts with a '.' so need the baseName
            if (name[0].charAt(0) === '.' && baseParts) {
                //Convert baseName to array, and lop off the last part,
                //so that . matches that 'directory' and not name of the baseName's
                //module. For instance, baseName of 'one/two/three', maps to
                //'one/two/three.js', but we want the directory, 'one/two' for
                //this normalization.
                normalizedBaseParts = baseParts.slice(0, baseParts.length - 1);
                name = normalizedBaseParts.concat(name);
            }

            //start trimDots
            for (i = 0; i < name.length; i++) {
                part = name[i];
                if (part === '.') {
                    name.splice(i, 1);
                    i -= 1;
                } else if (part === '..') {
                    // If at the start, or previous value is still ..,
                    // keep them so that when converted to a path it may
                    // still work when converted to a path, even though
                    // as an ID it is less than ideal. In larger point
                    // releases, may be better to just kick out an error.
                    if (i === 0 || (i === 1 && name[2] === '..') || name[i - 1] === '..') {
                        continue;
                    } else if (i > 0) {
                        name.splice(i - 1, 2);
                        i -= 2;
                    }
                }
            }
            //end trimDots

            name = name.join('/');
        }

        //Apply map config if available.
        if ((baseParts || starMap) && map) {
            nameParts = name.split('/');

            for (i = nameParts.length; i > 0; i -= 1) {
                nameSegment = nameParts.slice(0, i).join("/");

                if (baseParts) {
                    //Find the longest baseName segment match in the config.
                    //So, do joins on the biggest to smallest lengths of baseParts.
                    for (j = baseParts.length; j > 0; j -= 1) {
                        mapValue = map[baseParts.slice(0, j).join('/')];

                        //baseName segment has  config, find if it has one for
                        //this name.
                        if (mapValue) {
                            mapValue = mapValue[nameSegment];
                            if (mapValue) {
                                //Match, update name to the new value.
                                foundMap = mapValue;
                                foundI = i;
                                break;
                            }
                        }
                    }
                }

                if (foundMap) {
                    break;
                }

                //Check for a star map match, but just hold on to it,
                //if there is a shorter segment match later in a matching
                //config, then favor over this star map.
                if (!foundStarMap && starMap && starMap[nameSegment]) {
                    foundStarMap = starMap[nameSegment];
                    starI = i;
                }
            }

            if (!foundMap && foundStarMap) {
                foundMap = foundStarMap;
                foundI = starI;
            }

            if (foundMap) {
                nameParts.splice(0, foundI, foundMap);
                name = nameParts.join('/');
            }
        }

        return name;
    }

    function makeRequire(relName, forceSync) {
        return function () {
            //A version of a require function that passes a moduleName
            //value for items that may need to
            //look up paths relative to the moduleName
            var args = aps.call(arguments, 0);

            //If first arg is not require('string'), and there is only
            //one arg, it is the array form without a callback. Insert
            //a null so that the following concat is correct.
            if (typeof args[0] !== 'string' && args.length === 1) {
                args.push(null);
            }
            return req.apply(undef, args.concat([relName, forceSync]));
        };
    }

    function makeNormalize(relName) {
        return function (name) {
            return normalize(name, relName);
        };
    }

    function makeLoad(depName) {
        return function (value) {
            defined[depName] = value;
        };
    }

    function callDep(name) {
        if (hasProp(waiting, name)) {
            var args = waiting[name];
            delete waiting[name];
            defining[name] = true;
            main.apply(undef, args);
        }

        if (!hasProp(defined, name) && !hasProp(defining, name)) {
            throw new Error('No ' + name);
        }
        return defined[name];
    }

    //Turns a plugin!resource to [plugin, resource]
    //with the plugin being undefined if the name
    //did not have a plugin prefix.
    function splitPrefix(name) {
        var prefix,
            index = name ? name.indexOf('!') : -1;
        if (index > -1) {
            prefix = name.substring(0, index);
            name = name.substring(index + 1, name.length);
        }
        return [prefix, name];
    }

    //Creates a parts array for a relName where first part is plugin ID,
    //second part is resource ID. Assumes relName has already been normalized.
    function makeRelParts(relName) {
        return relName ? splitPrefix(relName) : [];
    }

    /**
     * Makes a name map, normalizing the name, and using a plugin
     * for normalization if necessary. Grabs a ref to plugin
     * too, as an optimization.
     */
    makeMap = function (name, relParts) {
        var plugin,
            parts = splitPrefix(name),
            prefix = parts[0],
            relResourceName = relParts[1];

        name = parts[1];

        if (prefix) {
            prefix = normalize(prefix, relResourceName);
            plugin = callDep(prefix);
        }

        //Normalize according
        if (prefix) {
            if (plugin && plugin.normalize) {
                name = plugin.normalize(name, makeNormalize(relResourceName));
            } else {
                name = normalize(name, relResourceName);
            }
        } else {
            name = normalize(name, relResourceName);
            parts = splitPrefix(name);
            prefix = parts[0];
            name = parts[1];
            if (prefix) {
                plugin = callDep(prefix);
            }
        }

        //Using ridiculous property names for space reasons
        return {
            f: prefix ? prefix + '!' + name : name, //fullName
            n: name,
            pr: prefix,
            p: plugin
        };
    };

    function makeConfig(name) {
        return function () {
            return (config && config.config && config.config[name]) || {};
        };
    }

    handlers = {
        require: function (name) {
            return makeRequire(name);
        },
        exports: function (name) {
            var e = defined[name];
            if (typeof e !== 'undefined') {
                return e;
            } else {
                return (defined[name] = {});
            }
        },
        module: function (name) {
            return {
                id: name,
                uri: '',
                exports: defined[name],
                config: makeConfig(name)
            };
        }
    };

    main = function (name, deps, callback, relName) {
        var cjsModule, depName, ret, map, i, relParts,
            args = [],
            callbackType = typeof callback,
            usingExports;

        //Use name if no relName
        relName = relName || name;
        relParts = makeRelParts(relName);

        //Call the callback to define the module, if necessary.
        if (callbackType === 'undefined' || callbackType === 'function') {
            //Pull out the defined dependencies and pass the ordered
            //values to the callback.
            //Default to [require, exports, module] if no deps
            deps = !deps.length && callback.length ? ['require', 'exports', 'module'] : deps;
            for (i = 0; i < deps.length; i += 1) {
                map = makeMap(deps[i], relParts);
                depName = map.f;

                //Fast path CommonJS standard dependencies.
                if (depName === "require") {
                    args[i] = handlers.require(name);
                } else if (depName === "exports") {
                    //CommonJS module spec 1.1
                    args[i] = handlers.exports(name);
                    usingExports = true;
                } else if (depName === "module") {
                    //CommonJS module spec 1.1
                    cjsModule = args[i] = handlers.module(name);
                } else if (hasProp(defined, depName) ||
                           hasProp(waiting, depName) ||
                           hasProp(defining, depName)) {
                    args[i] = callDep(depName);
                } else if (map.p) {
                    map.p.load(map.n, makeRequire(relName, true), makeLoad(depName), {});
                    args[i] = defined[depName];
                } else {
                    throw new Error(name + ' missing ' + depName);
                }
            }

            ret = callback ? callback.apply(defined[name], args) : undefined;

            if (name) {
                //If setting exports via "module" is in play,
                //favor that over return value and exports. After that,
                //favor a non-undefined return value over exports use.
                if (cjsModule && cjsModule.exports !== undef &&
                        cjsModule.exports !== defined[name]) {
                    defined[name] = cjsModule.exports;
                } else if (ret !== undef || !usingExports) {
                    //Use the return value from the function.
                    defined[name] = ret;
                }
            }
        } else if (name) {
            //May just be an object definition for the module. Only
            //worry about defining if have a module name.
            defined[name] = callback;
        }
    };

    requirejs = require = req = function (deps, callback, relName, forceSync, alt) {
        if (typeof deps === "string") {
            if (handlers[deps]) {
                //callback in this case is really relName
                return handlers[deps](callback);
            }
            //Just return the module wanted. In this scenario, the
            //deps arg is the module name, and second arg (if passed)
            //is just the relName.
            //Normalize module name, if it contains . or ..
            return callDep(makeMap(deps, makeRelParts(callback)).f);
        } else if (!deps.splice) {
            //deps is a config object, not an array.
            config = deps;
            if (config.deps) {
                req(config.deps, config.callback);
            }
            if (!callback) {
                return;
            }

            if (callback.splice) {
                //callback is an array, which means it is a dependency list.
                //Adjust args if there are dependencies
                deps = callback;
                callback = relName;
                relName = null;
            } else {
                deps = undef;
            }
        }

        //Support require(['a'])
        callback = callback || function () {};

        //If relName is a function, it is an errback handler,
        //so remove it.
        if (typeof relName === 'function') {
            relName = forceSync;
            forceSync = alt;
        }

        //Simulate async callback;
        if (forceSync) {
            main(undef, deps, callback, relName);
        } else {
            //Using a non-zero value because of concern for what old browsers
            //do, and latest browsers "upgrade" to 4 if lower value is used:
            //http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#dom-windowtimers-settimeout:
            //If want a value immediately, use require('id') instead -- something
            //that works in almond on the global level, but not guaranteed and
            //unlikely to work in other AMD implementations.
            setTimeout(function () {
                main(undef, deps, callback, relName);
            }, 4);
        }

        return req;
    };

    /**
     * Just drops the config on the floor, but returns req in case
     * the config return value is used.
     */
    req.config = function (cfg) {
        return req(cfg);
    };

    /**
     * Expose module registry for debugging and tooling
     */
    requirejs._defined = defined;

    define = function (name, deps, callback) {
        if (typeof name !== 'string') {
            throw new Error('See almond README: incorrect module build, no module name');
        }

        //This module may not have dependencies
        if (!deps.splice) {
            //deps is not an array, so probably means
            //an object literal or factory function for
            //the value. Adjust args.
            callback = deps;
            deps = [];
        }

        if (!hasProp(defined, name) && !hasProp(waiting, name)) {
            waiting[name] = [name, deps, callback];
        }
    };

    define.amd = {
        jQuery: true
    };
}());

S2.requirejs = requirejs;S2.require = require;S2.define = define;
}
}());
S2.define("almond", function(){});

/* global jQuery:false, $:false */
S2.define('jquery',[],function () {
  var _$ = jQuery || $;

  if (_$ == null && console && console.error) {
    console.error(
      'Select2: An instance of jQuery or a jQuery-compatible library was not ' +
      'found. Make sure that you are including jQuery before Select2 on your ' +
      'web page.'
    );
  }

  return _$;
});

S2.define('select2/utils',[
  'jquery'
], function ($) {
  var Utils = {};

  Utils.Extend = function (ChildClass, SuperClass) {
    var __hasProp = {}.hasOwnProperty;

    function BaseConstructor () {
      this.constructor = ChildClass;
    }

    for (var key in SuperClass) {
      if (__hasProp.call(SuperClass, key)) {
        ChildClass[key] = SuperClass[key];
      }
    }

    BaseConstructor.prototype = SuperClass.prototype;
    ChildClass.prototype = new BaseConstructor();
    ChildClass.__super__ = SuperClass.prototype;

    return ChildClass;
  };

  function getMethods (theClass) {
    var proto = theClass.prototype;

    var methods = [];

    for (var methodName in proto) {
      var m = proto[methodName];

      if (typeof m !== 'function') {
        continue;
      }

      if (methodName === 'constructor') {
        continue;
      }

      methods.push(methodName);
    }

    return methods;
  }

  Utils.Decorate = function (SuperClass, DecoratorClass) {
    var decoratedMethods = getMethods(DecoratorClass);
    var superMethods = getMethods(SuperClass);

    function DecoratedClass () {
      var unshift = Array.prototype.unshift;

      var argCount = DecoratorClass.prototype.constructor.length;

      var calledConstructor = SuperClass.prototype.constructor;

      if (argCount > 0) {
        unshift.call(arguments, SuperClass.prototype.constructor);

        calledConstructor = DecoratorClass.prototype.constructor;
      }

      calledConstructor.apply(this, arguments);
    }

    DecoratorClass.displayName = SuperClass.displayName;

    function ctr () {
      this.constructor = DecoratedClass;
    }

    DecoratedClass.prototype = new ctr();

    for (var m = 0; m < superMethods.length; m++) {
      var superMethod = superMethods[m];

      DecoratedClass.prototype[superMethod] =
        SuperClass.prototype[superMethod];
    }

    var calledMethod = function (methodName) {
      // Stub out the original method if it's not decorating an actual method
      var originalMethod = function () {};

      if (methodName in DecoratedClass.prototype) {
        originalMethod = DecoratedClass.prototype[methodName];
      }

      var decoratedMethod = DecoratorClass.prototype[methodName];

      return function () {
        var unshift = Array.prototype.unshift;

        unshift.call(arguments, originalMethod);

        return decoratedMethod.apply(this, arguments);
      };
    };

    for (var d = 0; d < decoratedMethods.length; d++) {
      var decoratedMethod = decoratedMethods[d];

      DecoratedClass.prototype[decoratedMethod] = calledMethod(decoratedMethod);
    }

    return DecoratedClass;
  };

  var Observable = function () {
    this.listeners = {};
  };

  Observable.prototype.on = function (event, callback) {
    this.listeners = this.listeners || {};

    if (event in this.listeners) {
      this.listeners[event].push(callback);
    } else {
      this.listeners[event] = [callback];
    }
  };

  Observable.prototype.trigger = function (event) {
    var slice = Array.prototype.slice;
    var params = slice.call(arguments, 1);

    this.listeners = this.listeners || {};

    // Params should always come in as an array
    if (params == null) {
      params = [];
    }

    // If there are no arguments to the event, use a temporary object
    if (params.length === 0) {
      params.push({});
    }

    // Set the `_type` of the first object to the event
    params[0]._type = event;

    if (event in this.listeners) {
      this.invoke(this.listeners[event], slice.call(arguments, 1));
    }

    if ('*' in this.listeners) {
      this.invoke(this.listeners['*'], arguments);
    }
  };

  Observable.prototype.invoke = function (listeners, params) {
    for (var i = 0, len = listeners.length; i < len; i++) {
      listeners[i].apply(this, params);
    }
  };

  Utils.Observable = Observable;

  Utils.generateChars = function (length) {
    var chars = '';

    for (var i = 0; i < length; i++) {
      var randomChar = Math.floor(Math.random() * 36);
      chars += randomChar.toString(36);
    }

    return chars;
  };

  Utils.bind = function (func, context) {
    return function () {
      func.apply(context, arguments);
    };
  };

  Utils._convertData = function (data) {
    for (var originalKey in data) {
      var keys = originalKey.split('-');

      var dataLevel = data;

      if (keys.length === 1) {
        continue;
      }

      for (var k = 0; k < keys.length; k++) {
        var key = keys[k];

        // Lowercase the first letter
        // By default, dash-separated becomes camelCase
        key = key.substring(0, 1).toLowerCase() + key.substring(1);

        if (!(key in dataLevel)) {
          dataLevel[key] = {};
        }

        if (k == keys.length - 1) {
          dataLevel[key] = data[originalKey];
        }

        dataLevel = dataLevel[key];
      }

      delete data[originalKey];
    }

    return data;
  };

  Utils.hasScroll = function (index, el) {
    // Adapted from the function created by @ShadowScripter
    // and adapted by @BillBarry on the Stack Exchange Code Review website.
    // The original code can be found at
    // http://codereview.stackexchange.com/q/13338
    // and was designed to be used with the Sizzle selector engine.

    var $el = $(el);
    var overflowX = el.style.overflowX;
    var overflowY = el.style.overflowY;

    //Check both x and y declarations
    if (overflowX === overflowY &&
        (overflowY === 'hidden' || overflowY === 'visible')) {
      return false;
    }

    if (overflowX === 'scroll' || overflowY === 'scroll') {
      return true;
    }

    return ($el.innerHeight() < el.scrollHeight ||
      $el.innerWidth() < el.scrollWidth);
  };

  Utils.escapeMarkup = function (markup) {
    var replaceMap = {
      '\\': '&#92;',
      '&': '&amp;',
      '<': '&lt;',
      '>': '&gt;',
      '"': '&quot;',
      '\'': '&#39;',
      '/': '&#47;'
    };

    // Do not try to escape the markup if it's not a string
    if (typeof markup !== 'string') {
      return markup;
    }

    return String(markup).replace(/[&<>"'\/\\]/g, function (match) {
      return replaceMap[match];
    });
  };

  // Append an array of jQuery nodes to a given element.
  Utils.appendMany = function ($element, $nodes) {
    // jQuery 1.7.x does not support $.fn.append() with an array
    // Fall back to a jQuery object collection using $.fn.add()
    if ($.fn.jquery.substr(0, 3) === '1.7') {
      var $jqNodes = $();

      $.map($nodes, function (node) {
        $jqNodes = $jqNodes.add(node);
      });

      $nodes = $jqNodes;
    }

    $element.append($nodes);
  };

  // Cache objects in Utils.__cache instead of $.data (see #4346)
  Utils.__cache = {};

  var id = 0;
  Utils.GetUniqueElementId = function (element) {
    // Get a unique element Id. If element has no id, 
    // creates a new unique number, stores it in the id 
    // attribute and returns the new id. 
    // If an id already exists, it simply returns it.

    var select2Id = element.getAttribute('data-select2-id');
    if (select2Id == null) {
      // If element has id, use it.
      if (element.id) {
        select2Id = element.id;
        element.setAttribute('data-select2-id', select2Id);
      } else {
        element.setAttribute('data-select2-id', ++id);
        select2Id = id.toString();
      }
    }
    return select2Id;
  };

  Utils.StoreData = function (element, name, value) {
    // Stores an item in the cache for a specified element.
    // name is the cache key.    
    var id = Utils.GetUniqueElementId(element);
    if (!Utils.__cache[id]) {
      Utils.__cache[id] = {};
    }

    Utils.__cache[id][name] = value;
  };

  Utils.GetData = function (element, name) {
    // Retrieves a value from the cache by its key (name)
    // name is optional. If no name specified, return 
    // all cache items for the specified element.
    // and for a specified element.
    var id = Utils.GetUniqueElementId(element);
    if (name) {
      if (Utils.__cache[id]) {
        return Utils.__cache[id][name] != null ? 
	      Utils.__cache[id][name]:
	      $(element).data(name); // Fallback to HTML5 data attribs.
      }
      return $(element).data(name); // Fallback to HTML5 data attribs.
    } else {
      return Utils.__cache[id];			   
    }
  };

  Utils.RemoveData = function (element) {
    // Removes all cached items for a specified element.
    var id = Utils.GetUniqueElementId(element);
    if (Utils.__cache[id] != null) {
      delete Utils.__cache[id];
    }
  };

  return Utils;
});

S2.define('select2/results',[
  'jquery',
  './utils'
], function ($, Utils) {
  function Results ($element, options, dataAdapter) {
    this.$element = $element;
    this.data = dataAdapter;
    this.options = options;

    Results.__super__.constructor.call(this);
  }

  Utils.Extend(Results, Utils.Observable);

  Results.prototype.render = function () {
    var $results = $(
      '<ul class="select2-results__options" role="tree"></ul>'
    );

    if (this.options.get('multiple')) {
      $results.attr('aria-multiselectable', 'true');
    }

    this.$results = $results;

    return $results;
  };

  Results.prototype.clear = function () {
    this.$results.empty();
  };

  Results.prototype.displayMessage = function (params) {
    var escapeMarkup = this.options.get('escapeMarkup');

    this.clear();
    this.hideLoading();

    var $message = $(
      '<li role="treeitem" aria-live="assertive"' +
      ' class="select2-results__option"></li>'
    );

    var message = this.options.get('translations').get(params.message);

    $message.append(
      escapeMarkup(
        message(params.args)
      )
    );

    $message[0].className += ' select2-results__message';

    this.$results.append($message);
  };

  Results.prototype.hideMessages = function () {
    this.$results.find('.select2-results__message').remove();
  };

  Results.prototype.append = function (data) {
    this.hideLoading();

    var $options = [];

    if (data.results == null || data.results.length === 0) {
      if (this.$results.children().length === 0) {
        this.trigger('results:message', {
          message: 'noResults'
        });
      }

      return;
    }

    data.results = this.sort(data.results);

    for (var d = 0; d < data.results.length; d++) {
      var item = data.results[d];

      var $option = this.option(item);

      $options.push($option);
    }

    this.$results.append($options);
  };

  Results.prototype.position = function ($results, $dropdown) {
    var $resultsContainer = $dropdown.find('.select2-results');
    $resultsContainer.append($results);
  };

  Results.prototype.sort = function (data) {
    var sorter = this.options.get('sorter');

    return sorter(data);
  };

  Results.prototype.highlightFirstItem = function () {
    var $options = this.$results
      .find('.select2-results__option[aria-selected]');

    var $selected = $options.filter('[aria-selected=true]');

    // Check if there are any selected options
    if ($selected.length > 0) {
      // If there are selected options, highlight the first
      $selected.first().trigger('mouseenter');
    } else {
      // If there are no selected options, highlight the first option
      // in the dropdown
      $options.first().trigger('mouseenter');
    }

    this.ensureHighlightVisible();
  };

  Results.prototype.setClasses = function () {
    var self = this;

    this.data.current(function (selected) {
      var selectedIds = $.map(selected, function (s) {
        return s.id.toString();
      });

      var $options = self.$results
        .find('.select2-results__option[aria-selected]');

      $options.each(function () {
        var $option = $(this);

        var item = Utils.GetData(this, 'data');

        // id needs to be converted to a string when comparing
        var id = '' + item.id;

        if ((item.element != null && item.element.selected) ||
            (item.element == null && $.inArray(id, selectedIds) > -1)) {
          $option.attr('aria-selected', 'true');
        } else {
          $option.attr('aria-selected', 'false');
        }
      });

    });
  };

  Results.prototype.showLoading = function (params) {
    this.hideLoading();

    var loadingMore = this.options.get('translations').get('searching');

    var loading = {
      disabled: true,
      loading: true,
      text: loadingMore(params)
    };
    var $loading = this.option(loading);
    $loading.className += ' loading-results';

    this.$results.prepend($loading);
  };

  Results.prototype.hideLoading = function () {
    this.$results.find('.loading-results').remove();
  };

  Results.prototype.option = function (data) {
    var option = document.createElement('li');
    option.className = 'select2-results__option';

    var attrs = {
      'role': 'treeitem',
      'aria-selected': 'false'
    };

    if (data.disabled) {
      delete attrs['aria-selected'];
      attrs['aria-disabled'] = 'true';
    }

    if (data.id == null) {
      delete attrs['aria-selected'];
    }

    if (data._resultId != null) {
      option.id = data._resultId;
    }

    if (data.title) {
      option.title = data.title;
    }

    if (data.children) {
      attrs.role = 'group';
      attrs['aria-label'] = data.text;
      delete attrs['aria-selected'];
    }

    for (var attr in attrs) {
      var val = attrs[attr];

      option.setAttribute(attr, val);
    }

    if (data.children) {
      var $option = $(option);

      var label = document.createElement('strong');
      label.className = 'select2-results__group';

      var $label = $(label);
      this.template(data, label);

      var $children = [];

      for (var c = 0; c < data.children.length; c++) {
        var child = data.children[c];

        var $child = this.option(child);

        $children.push($child);
      }

      var $childrenContainer = $('<ul></ul>', {
        'class': 'select2-results__options select2-results__options--nested'
      });

      $childrenContainer.append($children);

      $option.append(label);
      $option.append($childrenContainer);
    } else {
      this.template(data, option);
    }

    Utils.StoreData(option, 'data', data);

    return option;
  };

  Results.prototype.bind = function (container, $container) {
    var self = this;

    var id = container.id + '-results';

    this.$results.attr('id', id);

    container.on('results:all', function (params) {
      self.clear();
      self.append(params.data);

      if (container.isOpen()) {
        self.setClasses();
        self.highlightFirstItem();
      }
    });

    container.on('results:append', function (params) {
      self.append(params.data);

      if (container.isOpen()) {
        self.setClasses();
      }
    });

    container.on('query', function (params) {
      self.hideMessages();
      self.showLoading(params);
    });

    container.on('select', function () {
      if (!container.isOpen()) {
        return;
      }

      self.setClasses();
      self.highlightFirstItem();
    });

    container.on('unselect', function () {
      if (!container.isOpen()) {
        return;
      }

      self.setClasses();
      self.highlightFirstItem();
    });

    container.on('open', function () {
      // When the dropdown is open, aria-expended="true"
      self.$results.attr('aria-expanded', 'true');
      self.$results.attr('aria-hidden', 'false');

      self.setClasses();
      self.ensureHighlightVisible();
    });

    container.on('close', function () {
      // When the dropdown is closed, aria-expended="false"
      self.$results.attr('aria-expanded', 'false');
      self.$results.attr('aria-hidden', 'true');
      self.$results.removeAttr('aria-activedescendant');
    });

    container.on('results:toggle', function () {
      var $highlighted = self.getHighlightedResults();

      if ($highlighted.length === 0) {
        return;
      }

      $highlighted.trigger('mouseup');
    });

    container.on('results:select', function () {
      var $highlighted = self.getHighlightedResults();

      if ($highlighted.length === 0) {
        return;
      }

      var data = Utils.GetData($highlighted[0], 'data');

      if ($highlighted.attr('aria-selected') == 'true') {
        self.trigger('close', {});
      } else {
        self.trigger('select', {
          data: data
        });
      }
    });

    container.on('results:previous', function () {
      var $highlighted = self.getHighlightedResults();

      var $options = self.$results.find('[aria-selected]');

      var currentIndex = $options.index($highlighted);

      // If we are already at te top, don't move further
      if (currentIndex === 0) {
        return;
      }

      var nextIndex = currentIndex - 1;

      // If none are highlighted, highlight the first
      if ($highlighted.length === 0) {
        nextIndex = 0;
      }

      var $next = $options.eq(nextIndex);

      $next.trigger('mouseenter');

      var currentOffset = self.$results.offset().top;
      var nextTop = $next.offset().top;
      var nextOffset = self.$results.scrollTop() + (nextTop - currentOffset);

      if (nextIndex === 0) {
        self.$results.scrollTop(0);
      } else if (nextTop - currentOffset < 0) {
        self.$results.scrollTop(nextOffset);
      }
    });

    container.on('results:next', function () {
      var $highlighted = self.getHighlightedResults();

      var $options = self.$results.find('[aria-selected]');

      var currentIndex = $options.index($highlighted);

      var nextIndex = currentIndex + 1;

      // If we are at the last option, stay there
      if (nextIndex >= $options.length) {
        return;
      }

      var $next = $options.eq(nextIndex);

      $next.trigger('mouseenter');

      var currentOffset = self.$results.offset().top +
        self.$results.outerHeight(false);
      var nextBottom = $next.offset().top + $next.outerHeight(false);
      var nextOffset = self.$results.scrollTop() + nextBottom - currentOffset;

      if (nextIndex === 0) {
        self.$results.scrollTop(0);
      } else if (nextBottom > currentOffset) {
        self.$results.scrollTop(nextOffset);
      }
    });

    container.on('results:focus', function (params) {
      params.element.addClass('select2-results__option--highlighted');
    });

    container.on('results:message', function (params) {
      self.displayMessage(params);
    });

    if ($.fn.mousewheel) {
      this.$results.on('mousewheel', function (e) {
        var top = self.$results.scrollTop();

        var bottom = self.$results.get(0).scrollHeight - top + e.deltaY;

        var isAtTop = e.deltaY > 0 && top - e.deltaY <= 0;
        var isAtBottom = e.deltaY < 0 && bottom <= self.$results.height();

        if (isAtTop) {
          self.$results.scrollTop(0);

          e.preventDefault();
          e.stopPropagation();
        } else if (isAtBottom) {
          self.$results.scrollTop(
            self.$results.get(0).scrollHeight - self.$results.height()
          );

          e.preventDefault();
          e.stopPropagation();
        }
      });
    }

    this.$results.on('mouseup', '.select2-results__option[aria-selected]',
      function (evt) {
      var $this = $(this);

      var data = Utils.GetData(this, 'data');

      if ($this.attr('aria-selected') === 'true') {
        if (self.options.get('multiple')) {
          self.trigger('unselect', {
            originalEvent: evt,
            data: data
          });
        } else {
          self.trigger('close', {});
        }

        return;
      }

      self.trigger('select', {
        originalEvent: evt,
        data: data
      });
    });

    this.$results.on('mouseenter', '.select2-results__option[aria-selected]',
      function (evt) {
      var data = Utils.GetData(this, 'data');

      self.getHighlightedResults()
          .removeClass('select2-results__option--highlighted');

      self.trigger('results:focus', {
        data: data,
        element: $(this)
      });
    });
  };

  Results.prototype.getHighlightedResults = function () {
    var $highlighted = this.$results
    .find('.select2-results__option--highlighted');

    return $highlighted;
  };

  Results.prototype.destroy = function () {
    this.$results.remove();
  };

  Results.prototype.ensureHighlightVisible = function () {
    var $highlighted = this.getHighlightedResults();

    if ($highlighted.length === 0) {
      return;
    }

    var $options = this.$results.find('[aria-selected]');

    var currentIndex = $options.index($highlighted);

    var currentOffset = this.$results.offset().top;
    var nextTop = $highlighted.offset().top;
    var nextOffset = this.$results.scrollTop() + (nextTop - currentOffset);

    var offsetDelta = nextTop - currentOffset;
    nextOffset -= $highlighted.outerHeight(false) * 2;

    if (currentIndex <= 2) {
      this.$results.scrollTop(0);
    } else if (offsetDelta > this.$results.outerHeight() || offsetDelta < 0) {
      this.$results.scrollTop(nextOffset);
    }
  };

  Results.prototype.template = function (result, container) {
    var template = this.options.get('templateResult');
    var escapeMarkup = this.options.get('escapeMarkup');

    var content = template(result, container);

    if (content == null) {
      container.style.display = 'none';
    } else if (typeof content === 'string') {
      container.innerHTML = escapeMarkup(content);
    } else {
      $(container).append(content);
    }
  };

  return Results;
});

S2.define('select2/keys',[

], function () {
  var KEYS = {
    BACKSPACE: 8,
    TAB: 9,
    ENTER: 13,
    SHIFT: 16,
    CTRL: 17,
    ALT: 18,
    ESC: 27,
    SPACE: 32,
    PAGE_UP: 33,
    PAGE_DOWN: 34,
    END: 35,
    HOME: 36,
    LEFT: 37,
    UP: 38,
    RIGHT: 39,
    DOWN: 40,
    DELETE: 46
  };

  return KEYS;
});

S2.define('select2/selection/base',[
  'jquery',
  '../utils',
  '../keys'
], function ($, Utils, KEYS) {
  function BaseSelection ($element, options) {
    this.$element = $element;
    this.options = options;

    BaseSelection.__super__.constructor.call(this);
  }

  Utils.Extend(BaseSelection, Utils.Observable);

  BaseSelection.prototype.render = function () {
    var $selection = $(
      '<span class="select2-selection" role="combobox" ' +
      ' aria-haspopup="true" aria-expanded="false">' +
      '</span>'
    );

    this._tabindex = 0;

    if (Utils.GetData(this.$element[0], 'old-tabindex') != null) {
      this._tabindex = Utils.GetData(this.$element[0], 'old-tabindex');
    } else if (this.$element.attr('tabindex') != null) {
      this._tabindex = this.$element.attr('tabindex');
    }

    $selection.attr('title', this.$element.attr('title'));
    $selection.attr('tabindex', this._tabindex);

    this.$selection = $selection;

    return $selection;
  };

  BaseSelection.prototype.bind = function (container, $container) {
    var self = this;

    var id = container.id + '-container';
    var resultsId = container.id + '-results';

    this.container = container;

    this.$selection.on('focus', function (evt) {
      self.trigger('focus', evt);
    });

    this.$selection.on('blur', function (evt) {
      self._handleBlur(evt);
    });

    this.$selection.on('keydown', function (evt) {
      self.trigger('keypress', evt);

      if (evt.which === KEYS.SPACE) {
        evt.preventDefault();
      }
    });

    container.on('results:focus', function (params) {
      self.$selection.attr('aria-activedescendant', params.data._resultId);
    });

    container.on('selection:update', function (params) {
      self.update(params.data);
    });

    container.on('open', function () {
      // When the dropdown is open, aria-expanded="true"
      self.$selection.attr('aria-expanded', 'true');
      self.$selection.attr('aria-owns', resultsId);

      self._attachCloseHandler(container);
    });

    container.on('close', function () {
      // When the dropdown is closed, aria-expanded="false"
      self.$selection.attr('aria-expanded', 'false');
      self.$selection.removeAttr('aria-activedescendant');
      self.$selection.removeAttr('aria-owns');

      self.$selection.focus();

      self._detachCloseHandler(container);
    });

    container.on('enable', function () {
      self.$selection.attr('tabindex', self._tabindex);
    });

    container.on('disable', function () {
      self.$selection.attr('tabindex', '-1');
    });
  };

  BaseSelection.prototype._handleBlur = function (evt) {
    var self = this;

    // This needs to be delayed as the active element is the body when the tab
    // key is pressed, possibly along with others.
    window.setTimeout(function () {
      // Don't trigger `blur` if the focus is still in the selection
      if (
        (document.activeElement == self.$selection[0]) ||
        ($.contains(self.$selection[0], document.activeElement))
      ) {
        return;
      }

      self.trigger('blur', evt);
    }, 1);
  };

  BaseSelection.prototype._attachCloseHandler = function (container) {
    var self = this;

    $(document.body).on('mousedown.select2.' + container.id, function (e) {
      var $target = $(e.target);

      var $select = $target.closest('.select2');

      var $all = $('.select2.select2-container--open');

      $all.each(function () {
        var $this = $(this);

        if (this == $select[0]) {
          return;
        }

        var $element = Utils.GetData(this, 'element');

        $element.select2('close');
      });
    });
  };

  BaseSelection.prototype._detachCloseHandler = function (container) {
    $(document.body).off('mousedown.select2.' + container.id);
  };

  BaseSelection.prototype.position = function ($selection, $container) {
    var $selectionContainer = $container.find('.selection');
    $selectionContainer.append($selection);
  };

  BaseSelection.prototype.destroy = function () {
    this._detachCloseHandler(this.container);
  };

  BaseSelection.prototype.update = function (data) {
    throw new Error('The `update` method must be defined in child classes.');
  };

  return BaseSelection;
});

S2.define('select2/selection/single',[
  'jquery',
  './base',
  '../utils',
  '../keys'
], function ($, BaseSelection, Utils, KEYS) {
  function SingleSelection () {
    SingleSelection.__super__.constructor.apply(this, arguments);
  }

  Utils.Extend(SingleSelection, BaseSelection);

  SingleSelection.prototype.render = function () {
    var $selection = SingleSelection.__super__.render.call(this);

    $selection.addClass('select2-selection--single');

    $selection.html(
      '<span class="select2-selection__rendered"></span>' +
      '<span class="select2-selection__arrow" role="presentation">' +
        '<b role="presentation"></b>' +
      '</span>'
    );

    return $selection;
  };

  SingleSelection.prototype.bind = function (container, $container) {
    var self = this;

    SingleSelection.__super__.bind.apply(this, arguments);

    var id = container.id + '-container';

    this.$selection.find('.select2-selection__rendered')
      .attr('id', id)
      .attr('role', 'textbox')
      .attr('aria-readonly', 'true');
    this.$selection.attr('aria-labelledby', id);

    this.$selection.on('mousedown', function (evt) {
      // Only respond to left clicks
      if (evt.which !== 1) {
        return;
      }

      self.trigger('toggle', {
        originalEvent: evt
      });
    });

    this.$selection.on('focus', function (evt) {
      // User focuses on the container
    });

    this.$selection.on('blur', function (evt) {
      // User exits the container
    });

    container.on('focus', function (evt) {
      if (!container.isOpen()) {
        self.$selection.focus();
      }
    });
  };

  SingleSelection.prototype.clear = function () {
    var $rendered = this.$selection.find('.select2-selection__rendered');
    $rendered.empty();
    $rendered.removeAttr('title'); // clear tooltip on empty
  };

  SingleSelection.prototype.display = function (data, container) {
    var template = this.options.get('templateSelection');
    var escapeMarkup = this.options.get('escapeMarkup');

    return escapeMarkup(template(data, container));
  };

  SingleSelection.prototype.selectionContainer = function () {
    return $('<span></span>');
  };

  SingleSelection.prototype.update = function (data) {
    if (data.length === 0) {
      this.clear();
      return;
    }

    var selection = data[0];

    var $rendered = this.$selection.find('.select2-selection__rendered');
    var formatted = this.display(selection, $rendered);

    $rendered.empty().append(formatted);
    $rendered.attr('title', selection.title || selection.text);
  };

  return SingleSelection;
});

S2.define('select2/selection/multiple',[
  'jquery',
  './base',
  '../utils'
], function ($, BaseSelection, Utils) {
  function MultipleSelection ($element, options) {
    MultipleSelection.__super__.constructor.apply(this, arguments);
  }

  Utils.Extend(MultipleSelection, BaseSelection);

  MultipleSelection.prototype.render = function () {
    var $selection = MultipleSelection.__super__.render.call(this);

    $selection.addClass('select2-selection--multiple');

    $selection.html(
      '<ul class="select2-selection__rendered"></ul>'
    );

    return $selection;
  };

  MultipleSelection.prototype.bind = function (container, $container) {
    var self = this;

    MultipleSelection.__super__.bind.apply(this, arguments);

    this.$selection.on('click', function (evt) {
      self.trigger('toggle', {
        originalEvent: evt
      });
    });

    this.$selection.on(
      'click',
      '.select2-selection__choice__remove',
      function (evt) {
        // Ignore the event if it is disabled
        if (self.options.get('disabled')) {
          return;
        }

        var $remove = $(this);
        var $selection = $remove.parent();

        var data = Utils.GetData($selection[0], 'data');

        self.trigger('unselect', {
          originalEvent: evt,
          data: data
        });
      }
    );
  };

  MultipleSelection.prototype.clear = function () {
    var $rendered = this.$selection.find('.select2-selection__rendered');
    $rendered.empty();
    $rendered.removeAttr('title');
  };

  MultipleSelection.prototype.display = function (data, container) {
    var template = this.options.get('templateSelection');
    var escapeMarkup = this.options.get('escapeMarkup');

    return escapeMarkup(template(data, container));
  };

  MultipleSelection.prototype.selectionContainer = function () {
    var $container = $(
      '<li class="select2-selection__choice">' +
        '<span class="select2-selection__choice__remove" role="presentation">' +
          '&times;' +
        '</span>' +
      '</li>'
    );

    return $container;
  };

  MultipleSelection.prototype.update = function (data) {
    this.clear();

    if (data.length === 0) {
      return;
    }

    var $selections = [];

    for (var d = 0; d < data.length; d++) {
      var selection = data[d];

      var $selection = this.selectionContainer();
      var formatted = this.display(selection, $selection);

      $selection.append(formatted);
      $selection.attr('title', selection.title || selection.text);

      Utils.StoreData($selection[0], 'data', selection);

      $selections.push($selection);
    }

    var $rendered = this.$selection.find('.select2-selection__rendered');

    Utils.appendMany($rendered, $selections);
  };

  return MultipleSelection;
});

S2.define('select2/selection/placeholder',[
  '../utils'
], function (Utils) {
  function Placeholder (decorated, $element, options) {
    this.placeholder = this.normalizePlaceholder(options.get('placeholder'));

    decorated.call(this, $element, options);
  }

  Placeholder.prototype.normalizePlaceholder = function (_, placeholder) {
    if (typeof placeholder === 'string') {
      placeholder = {
        id: '',
        text: placeholder
      };
    }

    return placeholder;
  };

  Placeholder.prototype.createPlaceholder = function (decorated, placeholder) {
    var $placeholder = this.selectionContainer();

    $placeholder.html(this.display(placeholder));
    $placeholder.addClass('select2-selection__placeholder')
                .removeClass('select2-selection__choice');

    return $placeholder;
  };

  Placeholder.prototype.update = function (decorated, data) {
    var singlePlaceholder = (
      data.length == 1 && data[0].id != this.placeholder.id
    );
    var multipleSelections = data.length > 1;

    if (multipleSelections || singlePlaceholder) {
      return decorated.call(this, data);
    }

    this.clear();

    var $placeholder = this.createPlaceholder(this.placeholder);

    this.$selection.find('.select2-selection__rendered').append($placeholder);
  };

  return Placeholder;
});

S2.define('select2/selection/allowClear',[
  'jquery',
  '../keys',
  '../utils'
], function ($, KEYS, Utils) {
  function AllowClear () { }

  AllowClear.prototype.bind = function (decorated, container, $container) {
    var self = this;

    decorated.call(this, container, $container);

    if (this.placeholder == null) {
      if (this.options.get('debug') && window.console && console.error) {
        console.error(
          'Select2: The `allowClear` option should be used in combination ' +
          'with the `placeholder` option.'
        );
      }
    }

    this.$selection.on('mousedown', '.select2-selection__clear',
      function (evt) {
        self._handleClear(evt);
    });

    container.on('keypress', function (evt) {
      self._handleKeyboardClear(evt, container);
    });
  };

  AllowClear.prototype._handleClear = function (_, evt) {
    // Ignore the event if it is disabled
    if (this.options.get('disabled')) {
      return;
    }

    var $clear = this.$selection.find('.select2-selection__clear');

    // Ignore the event if nothing has been selected
    if ($clear.length === 0) {
      return;
    }

    evt.stopPropagation();

    var data = Utils.GetData($clear[0], 'data');

    var previousVal = this.$element.val();
    this.$element.val(this.placeholder.id);

    var unselectData = {
      data: data
    };
    this.trigger('clear', unselectData);
    if (unselectData.prevented) {
      this.$element.val(previousVal);
      return;
    }

    for (var d = 0; d < data.length; d++) {
      unselectData = {
        data: data[d]
      };

      // Trigger the `unselect` event, so people can prevent it from being
      // cleared.
      this.trigger('unselect', unselectData);

      // If the event was prevented, don't clear it out.
      if (unselectData.prevented) {
        this.$element.val(previousVal);
        return;
      }
    }

    this.$element.trigger('change');

    this.trigger('toggle', {});
  };

  AllowClear.prototype._handleKeyboardClear = function (_, evt, container) {
    if (container.isOpen()) {
      return;
    }

    if (evt.which == KEYS.DELETE || evt.which == KEYS.BACKSPACE) {
      this._handleClear(evt);
    }
  };

  AllowClear.prototype.update = function (decorated, data) {
    decorated.call(this, data);

    if (this.$selection.find('.select2-selection__placeholder').length > 0 ||
        data.length === 0) {
      return;
    }

    var $remove = $(
      '<span class="select2-selection__clear">' +
        '&times;' +
      '</span>'
    );
    Utils.StoreData($remove[0], 'data', data);

    this.$selection.find('.select2-selection__rendered').prepend($remove);
  };

  return AllowClear;
});

S2.define('select2/selection/search',[
  'jquery',
  '../utils',
  '../keys'
], function ($, Utils, KEYS) {
  function Search (decorated, $element, options) {
    decorated.call(this, $element, options);
  }

  Search.prototype.render = function (decorated) {
    var $search = $(
      '<li class="select2-search select2-search--inline">' +
        '<input class="select2-search__field" type="search" tabindex="-1"' +
        ' autocomplete="off" autocorrect="off" autocapitalize="none"' +
        ' spellcheck="false" role="textbox" aria-autocomplete="list" />' +
      '</li>'
    );

    this.$searchContainer = $search;
    this.$search = $search.find('input');

    var $rendered = decorated.call(this);

    this._transferTabIndex();

    return $rendered;
  };

  Search.prototype.bind = function (decorated, container, $container) {
    var self = this;

    decorated.call(this, container, $container);

    container.on('open', function () {
      self.$search.trigger('focus');
    });

    container.on('close', function () {
      self.$search.val('');
      self.$search.removeAttr('aria-activedescendant');
      self.$search.trigger('focus');
    });

    container.on('enable', function () {
      self.$search.prop('disabled', false);

      self._transferTabIndex();
    });

    container.on('disable', function () {
      self.$search.prop('disabled', true);
    });

    container.on('focus', function (evt) {
      self.$search.trigger('focus');
    });

    container.on('results:focus', function (params) {
      self.$search.attr('aria-activedescendant', params.id);
    });

    this.$selection.on('focusin', '.select2-search--inline', function (evt) {
      self.trigger('focus', evt);
    });

    this.$selection.on('focusout', '.select2-search--inline', function (evt) {
      self._handleBlur(evt);
    });

    this.$selection.on('keydown', '.select2-search--inline', function (evt) {
      evt.stopPropagation();

      self.trigger('keypress', evt);

      self._keyUpPrevented = evt.isDefaultPrevented();

      var key = evt.which;

      if (key === KEYS.BACKSPACE && self.$search.val() === '') {
        var $previousChoice = self.$searchContainer
          .prev('.select2-selection__choice');

        if ($previousChoice.length > 0) {
          var item = Utils.GetData($previousChoice[0], 'data');

          self.searchRemoveChoice(item);

          evt.preventDefault();
        }
      }
    });

    // Try to detect the IE version should the `documentMode` property that
    // is stored on the document. This is only implemented in IE and is
    // slightly cleaner than doing a user agent check.
    // This property is not available in Edge, but Edge also doesn't have
    // this bug.
    var msie = document.documentMode;
    var disableInputEvents = msie && msie <= 11;

    // Workaround for browsers which do not support the `input` event
    // This will prevent double-triggering of events for browsers which support
    // both the `keyup` and `input` events.
    this.$selection.on(
      'input.searchcheck',
      '.select2-search--inline',
      function (evt) {
        // IE will trigger the `input` event when a placeholder is used on a
        // search box. To get around this issue, we are forced to ignore all
        // `input` events in IE and keep using `keyup`.
        if (disableInputEvents) {
          self.$selection.off('input.search input.searchcheck');
          return;
        }

        // Unbind the duplicated `keyup` event
        self.$selection.off('keyup.search');
      }
    );

    this.$selection.on(
      'keyup.search input.search',
      '.select2-search--inline',
      function (evt) {
        // IE will trigger the `input` event when a placeholder is used on a
        // search box. To get around this issue, we are forced to ignore all
        // `input` events in IE and keep using `keyup`.
        if (disableInputEvents && evt.type === 'input') {
          self.$selection.off('input.search input.searchcheck');
          return;
        }

        var key = evt.which;

        // We can freely ignore events from modifier keys
        if (key == KEYS.SHIFT || key == KEYS.CTRL || key == KEYS.ALT) {
          return;
        }

        // Tabbing will be handled during the `keydown` phase
        if (key == KEYS.TAB) {
          return;
        }

        self.handleSearch(evt);
      }
    );
  };

  /**
   * This method will transfer the tabindex attribute from the rendered
   * selection to the search box. This allows for the search box to be used as
   * the primary focus instead of the selection container.
   *
   * @private
   */
  Search.prototype._transferTabIndex = function (decorated) {
    this.$search.attr('tabindex', this.$selection.attr('tabindex'));
    this.$selection.attr('tabindex', '-1');
  };

  Search.prototype.createPlaceholder = function (decorated, placeholder) {
    this.$search.attr('placeholder', placeholder.text);
  };

  Search.prototype.update = function (decorated, data) {
    var searchHadFocus = this.$search[0] == document.activeElement;

    this.$search.attr('placeholder', '');

    decorated.call(this, data);

    this.$selection.find('.select2-selection__rendered')
                   .append(this.$searchContainer);

    this.resizeSearch();
    if (searchHadFocus) {
      this.$search.focus();
    }
  };

  Search.prototype.handleSearch = function () {
    this.resizeSearch();

    if (!this._keyUpPrevented) {
      var input = this.$search.val();

      this.trigger('query', {
        term: input
      });
    }

    this._keyUpPrevented = false;
  };

  Search.prototype.searchRemoveChoice = function (decorated, item) {
    this.trigger('unselect', {
      data: item
    });

    this.$search.val(item.text);
    this.handleSearch();
  };

  Search.prototype.resizeSearch = function () {
    this.$search.css('width', '25px');

    var width = '';

    if (this.$search.attr('placeholder') !== '') {
      width = this.$selection.find('.select2-selection__rendered').innerWidth();
    } else {
      var minimumWidth = this.$search.val().length + 1;

      width = (minimumWidth * 0.75) + 'em';
    }

    this.$search.css('width', width);
  };

  return Search;
});

S2.define('select2/selection/eventRelay',[
  'jquery'
], function ($) {
  function EventRelay () { }

  EventRelay.prototype.bind = function (decorated, container, $container) {
    var self = this;
    var relayEvents = [
      'open', 'opening',
      'close', 'closing',
      'select', 'selecting',
      'unselect', 'unselecting',
      'clear', 'clearing'
    ];

    var preventableEvents = [
      'opening', 'closing', 'selecting', 'unselecting', 'clearing'
    ];

    decorated.call(this, container, $container);

    container.on('*', function (name, params) {
      // Ignore events that should not be relayed
      if ($.inArray(name, relayEvents) === -1) {
        return;
      }

      // The parameters should always be an object
      params = params || {};

      // Generate the jQuery event for the Select2 event
      var evt = $.Event('select2:' + name, {
        params: params
      });

      self.$element.trigger(evt);

      // Only handle preventable events if it was one
      if ($.inArray(name, preventableEvents) === -1) {
        return;
      }

      params.prevented = evt.isDefaultPrevented();
    });
  };

  return EventRelay;
});

S2.define('select2/translation',[
  'jquery',
  'require'
], function ($, require) {
  function Translation (dict) {
    this.dict = dict || {};
  }

  Translation.prototype.all = function () {
    return this.dict;
  };

  Translation.prototype.get = function (key) {
    return this.dict[key];
  };

  Translation.prototype.extend = function (translation) {
    this.dict = $.extend({}, translation.all(), this.dict);
  };

  // Static functions

  Translation._cache = {};

  Translation.loadPath = function (path) {
    if (!(path in Translation._cache)) {
      var translations = require(path);

      Translation._cache[path] = translations;
    }

    return new Translation(Translation._cache[path]);
  };

  return Translation;
});

S2.define('select2/diacritics',[

], function () {
  var diacritics = {
    '\u24B6': 'A',
    '\uFF21': 'A',
    '\u00C0': 'A',
    '\u00C1': 'A',
    '\u00C2': 'A',
    '\u1EA6': 'A',
    '\u1EA4': 'A',
    '\u1EAA': 'A',
    '\u1EA8': 'A',
    '\u00C3': 'A',
    '\u0100': 'A',
    '\u0102': 'A',
    '\u1EB0': 'A',
    '\u1EAE': 'A',
    '\u1EB4': 'A',
    '\u1EB2': 'A',
    '\u0226': 'A',
    '\u01E0': 'A',
    '\u00C4': 'A',
    '\u01DE': 'A',
    '\u1EA2': 'A',
    '\u00C5': 'A',
    '\u01FA': 'A',
    '\u01CD': 'A',
    '\u0200': 'A',
    '\u0202': 'A',
    '\u1EA0': 'A',
    '\u1EAC': 'A',
    '\u1EB6': 'A',
    '\u1E00': 'A',
    '\u0104': 'A',
    '\u023A': 'A',
    '\u2C6F': 'A',
    '\uA732': 'AA',
    '\u00C6': 'AE',
    '\u01FC': 'AE',
    '\u01E2': 'AE',
    '\uA734': 'AO',
    '\uA736': 'AU',
    '\uA738': 'AV',
    '\uA73A': 'AV',
    '\uA73C': 'AY',
    '\u24B7': 'B',
    '\uFF22': 'B',
    '\u1E02': 'B',
    '\u1E04': 'B',
    '\u1E06': 'B',
    '\u0243': 'B',
    '\u0182': 'B',
    '\u0181': 'B',
    '\u24B8': 'C',
    '\uFF23': 'C',
    '\u0106': 'C',
    '\u0108': 'C',
    '\u010A': 'C',
    '\u010C': 'C',
    '\u00C7': 'C',
    '\u1E08': 'C',
    '\u0187': 'C',
    '\u023B': 'C',
    '\uA73E': 'C',
    '\u24B9': 'D',
    '\uFF24': 'D',
    '\u1E0A': 'D',
    '\u010E': 'D',
    '\u1E0C': 'D',
    '\u1E10': 'D',
    '\u1E12': 'D',
    '\u1E0E': 'D',
    '\u0110': 'D',
    '\u018B': 'D',
    '\u018A': 'D',
    '\u0189': 'D',
    '\uA779': 'D',
    '\u01F1': 'DZ',
    '\u01C4': 'DZ',
    '\u01F2': 'Dz',
    '\u01C5': 'Dz',
    '\u24BA': 'E',
    '\uFF25': 'E',
    '\u00C8': 'E',
    '\u00C9': 'E',
    '\u00CA': 'E',
    '\u1EC0': 'E',
    '\u1EBE': 'E',
    '\u1EC4': 'E',
    '\u1EC2': 'E',
    '\u1EBC': 'E',
    '\u0112': 'E',
    '\u1E14': 'E',
    '\u1E16': 'E',
    '\u0114': 'E',
    '\u0116': 'E',
    '\u00CB': 'E',
    '\u1EBA': 'E',
    '\u011A': 'E',
    '\u0204': 'E',
    '\u0206': 'E',
    '\u1EB8': 'E',
    '\u1EC6': 'E',
    '\u0228': 'E',
    '\u1E1C': 'E',
    '\u0118': 'E',
    '\u1E18': 'E',
    '\u1E1A': 'E',
    '\u0190': 'E',
    '\u018E': 'E',
    '\u24BB': 'F',
    '\uFF26': 'F',
    '\u1E1E': 'F',
    '\u0191': 'F',
    '\uA77B': 'F',
    '\u24BC': 'G',
    '\uFF27': 'G',
    '\u01F4': 'G',
    '\u011C': 'G',
    '\u1E20': 'G',
    '\u011E': 'G',
    '\u0120': 'G',
    '\u01E6': 'G',
    '\u0122': 'G',
    '\u01E4': 'G',
    '\u0193': 'G',
    '\uA7A0': 'G',
    '\uA77D': 'G',
    '\uA77E': 'G',
    '\u24BD': 'H',
    '\uFF28': 'H',
    '\u0124': 'H',
    '\u1E22': 'H',
    '\u1E26': 'H',
    '\u021E': 'H',
    '\u1E24': 'H',
    '\u1E28': 'H',
    '\u1E2A': 'H',
    '\u0126': 'H',
    '\u2C67': 'H',
    '\u2C75': 'H',
    '\uA78D': 'H',
    '\u24BE': 'I',
    '\uFF29': 'I',
    '\u00CC': 'I',
    '\u00CD': 'I',
    '\u00CE': 'I',
    '\u0128': 'I',
    '\u012A': 'I',
    '\u012C': 'I',
    '\u0130': 'I',
    '\u00CF': 'I',
    '\u1E2E': 'I',
    '\u1EC8': 'I',
    '\u01CF': 'I',
    '\u0208': 'I',
    '\u020A': 'I',
    '\u1ECA': 'I',
    '\u012E': 'I',
    '\u1E2C': 'I',
    '\u0197': 'I',
    '\u24BF': 'J',
    '\uFF2A': 'J',
    '\u0134': 'J',
    '\u0248': 'J',
    '\u24C0': 'K',
    '\uFF2B': 'K',
    '\u1E30': 'K',
    '\u01E8': 'K',
    '\u1E32': 'K',
    '\u0136': 'K',
    '\u1E34': 'K',
    '\u0198': 'K',
    '\u2C69': 'K',
    '\uA740': 'K',
    '\uA742': 'K',
    '\uA744': 'K',
    '\uA7A2': 'K',
    '\u24C1': 'L',
    '\uFF2C': 'L',
    '\u013F': 'L',
    '\u0139': 'L',
    '\u013D': 'L',
    '\u1E36': 'L',
    '\u1E38': 'L',
    '\u013B': 'L',
    '\u1E3C': 'L',
    '\u1E3A': 'L',
    '\u0141': 'L',
    '\u023D': 'L',
    '\u2C62': 'L',
    '\u2C60': 'L',
    '\uA748': 'L',
    '\uA746': 'L',
    '\uA780': 'L',
    '\u01C7': 'LJ',
    '\u01C8': 'Lj',
    '\u24C2': 'M',
    '\uFF2D': 'M',
    '\u1E3E': 'M',
    '\u1E40': 'M',
    '\u1E42': 'M',
    '\u2C6E': 'M',
    '\u019C': 'M',
    '\u24C3': 'N',
    '\uFF2E': 'N',
    '\u01F8': 'N',
    '\u0143': 'N',
    '\u00D1': 'N',
    '\u1E44': 'N',
    '\u0147': 'N',
    '\u1E46': 'N',
    '\u0145': 'N',
    '\u1E4A': 'N',
    '\u1E48': 'N',
    '\u0220': 'N',
    '\u019D': 'N',
    '\uA790': 'N',
    '\uA7A4': 'N',
    '\u01CA': 'NJ',
    '\u01CB': 'Nj',
    '\u24C4': 'O',
    '\uFF2F': 'O',
    '\u00D2': 'O',
    '\u00D3': 'O',
    '\u00D4': 'O',
    '\u1ED2': 'O',
    '\u1ED0': 'O',
    '\u1ED6': 'O',
    '\u1ED4': 'O',
    '\u00D5': 'O',
    '\u1E4C': 'O',
    '\u022C': 'O',
    '\u1E4E': 'O',
    '\u014C': 'O',
    '\u1E50': 'O',
    '\u1E52': 'O',
    '\u014E': 'O',
    '\u022E': 'O',
    '\u0230': 'O',
    '\u00D6': 'O',
    '\u022A': 'O',
    '\u1ECE': 'O',
    '\u0150': 'O',
    '\u01D1': 'O',
    '\u020C': 'O',
    '\u020E': 'O',
    '\u01A0': 'O',
    '\u1EDC': 'O',
    '\u1EDA': 'O',
    '\u1EE0': 'O',
    '\u1EDE': 'O',
    '\u1EE2': 'O',
    '\u1ECC': 'O',
    '\u1ED8': 'O',
    '\u01EA': 'O',
    '\u01EC': 'O',
    '\u00D8': 'O',
    '\u01FE': 'O',
    '\u0186': 'O',
    '\u019F': 'O',
    '\uA74A': 'O',
    '\uA74C': 'O',
    '\u01A2': 'OI',
    '\uA74E': 'OO',
    '\u0222': 'OU',
    '\u24C5': 'P',
    '\uFF30': 'P',
    '\u1E54': 'P',
    '\u1E56': 'P',
    '\u01A4': 'P',
    '\u2C63': 'P',
    '\uA750': 'P',
    '\uA752': 'P',
    '\uA754': 'P',
    '\u24C6': 'Q',
    '\uFF31': 'Q',
    '\uA756': 'Q',
    '\uA758': 'Q',
    '\u024A': 'Q',
    '\u24C7': 'R',
    '\uFF32': 'R',
    '\u0154': 'R',
    '\u1E58': 'R',
    '\u0158': 'R',
    '\u0210': 'R',
    '\u0212': 'R',
    '\u1E5A': 'R',
    '\u1E5C': 'R',
    '\u0156': 'R',
    '\u1E5E': 'R',
    '\u024C': 'R',
    '\u2C64': 'R',
    '\uA75A': 'R',
    '\uA7A6': 'R',
    '\uA782': 'R',
    '\u24C8': 'S',
    '\uFF33': 'S',
    '\u1E9E': 'S',
    '\u015A': 'S',
    '\u1E64': 'S',
    '\u015C': 'S',
    '\u1E60': 'S',
    '\u0160': 'S',
    '\u1E66': 'S',
    '\u1E62': 'S',
    '\u1E68': 'S',
    '\u0218': 'S',
    '\u015E': 'S',
    '\u2C7E': 'S',
    '\uA7A8': 'S',
    '\uA784': 'S',
    '\u24C9': 'T',
    '\uFF34': 'T',
    '\u1E6A': 'T',
    '\u0164': 'T',
    '\u1E6C': 'T',
    '\u021A': 'T',
    '\u0162': 'T',
    '\u1E70': 'T',
    '\u1E6E': 'T',
    '\u0166': 'T',
    '\u01AC': 'T',
    '\u01AE': 'T',
    '\u023E': 'T',
    '\uA786': 'T',
    '\uA728': 'TZ',
    '\u24CA': 'U',
    '\uFF35': 'U',
    '\u00D9': 'U',
    '\u00DA': 'U',
    '\u00DB': 'U',
    '\u0168': 'U',
    '\u1E78': 'U',
    '\u016A': 'U',
    '\u1E7A': 'U',
    '\u016C': 'U',
    '\u00DC': 'U',
    '\u01DB': 'U',
    '\u01D7': 'U',
    '\u01D5': 'U',
    '\u01D9': 'U',
    '\u1EE6': 'U',
    '\u016E': 'U',
    '\u0170': 'U',
    '\u01D3': 'U',
    '\u0214': 'U',
    '\u0216': 'U',
    '\u01AF': 'U',
    '\u1EEA': 'U',
    '\u1EE8': 'U',
    '\u1EEE': 'U',
    '\u1EEC': 'U',
    '\u1EF0': 'U',
    '\u1EE4': 'U',
    '\u1E72': 'U',
    '\u0172': 'U',
    '\u1E76': 'U',
    '\u1E74': 'U',
    '\u0244': 'U',
    '\u24CB': 'V',
    '\uFF36': 'V',
    '\u1E7C': 'V',
    '\u1E7E': 'V',
    '\u01B2': 'V',
    '\uA75E': 'V',
    '\u0245': 'V',
    '\uA760': 'VY',
    '\u24CC': 'W',
    '\uFF37': 'W',
    '\u1E80': 'W',
    '\u1E82': 'W',
    '\u0174': 'W',
    '\u1E86': 'W',
    '\u1E84': 'W',
    '\u1E88': 'W',
    '\u2C72': 'W',
    '\u24CD': 'X',
    '\uFF38': 'X',
    '\u1E8A': 'X',
    '\u1E8C': 'X',
    '\u24CE': 'Y',
    '\uFF39': 'Y',
    '\u1EF2': 'Y',
    '\u00DD': 'Y',
    '\u0176': 'Y',
    '\u1EF8': 'Y',
    '\u0232': 'Y',
    '\u1E8E': 'Y',
    '\u0178': 'Y',
    '\u1EF6': 'Y',
    '\u1EF4': 'Y',
    '\u01B3': 'Y',
    '\u024E': 'Y',
    '\u1EFE': 'Y',
    '\u24CF': 'Z',
    '\uFF3A': 'Z',
    '\u0179': 'Z',
    '\u1E90': 'Z',
    '\u017B': 'Z',
    '\u017D': 'Z',
    '\u1E92': 'Z',
    '\u1E94': 'Z',
    '\u01B5': 'Z',
    '\u0224': 'Z',
    '\u2C7F': 'Z',
    '\u2C6B': 'Z',
    '\uA762': 'Z',
    '\u24D0': 'a',
    '\uFF41': 'a',
    '\u1E9A': 'a',
    '\u00E0': 'a',
    '\u00E1': 'a',
    '\u00E2': 'a',
    '\u1EA7': 'a',
    '\u1EA5': 'a',
    '\u1EAB': 'a',
    '\u1EA9': 'a',
    '\u00E3': 'a',
    '\u0101': 'a',
    '\u0103': 'a',
    '\u1EB1': 'a',
    '\u1EAF': 'a',
    '\u1EB5': 'a',
    '\u1EB3': 'a',
    '\u0227': 'a',
    '\u01E1': 'a',
    '\u00E4': 'a',
    '\u01DF': 'a',
    '\u1EA3': 'a',
    '\u00E5': 'a',
    '\u01FB': 'a',
    '\u01CE': 'a',
    '\u0201': 'a',
    '\u0203': 'a',
    '\u1EA1': 'a',
    '\u1EAD': 'a',
    '\u1EB7': 'a',
    '\u1E01': 'a',
    '\u0105': 'a',
    '\u2C65': 'a',
    '\u0250': 'a',
    '\uA733': 'aa',
    '\u00E6': 'ae',
    '\u01FD': 'ae',
    '\u01E3': 'ae',
    '\uA735': 'ao',
    '\uA737': 'au',
    '\uA739': 'av',
    '\uA73B': 'av',
    '\uA73D': 'ay',
    '\u24D1': 'b',
    '\uFF42': 'b',
    '\u1E03': 'b',
    '\u1E05': 'b',
    '\u1E07': 'b',
    '\u0180': 'b',
    '\u0183': 'b',
    '\u0253': 'b',
    '\u24D2': 'c',
    '\uFF43': 'c',
    '\u0107': 'c',
    '\u0109': 'c',
    '\u010B': 'c',
    '\u010D': 'c',
    '\u00E7': 'c',
    '\u1E09': 'c',
    '\u0188': 'c',
    '\u023C': 'c',
    '\uA73F': 'c',
    '\u2184': 'c',
    '\u24D3': 'd',
    '\uFF44': 'd',
    '\u1E0B': 'd',
    '\u010F': 'd',
    '\u1E0D': 'd',
    '\u1E11': 'd',
    '\u1E13': 'd',
    '\u1E0F': 'd',
    '\u0111': 'd',
    '\u018C': 'd',
    '\u0256': 'd',
    '\u0257': 'd',
    '\uA77A': 'd',
    '\u01F3': 'dz',
    '\u01C6': 'dz',
    '\u24D4': 'e',
    '\uFF45': 'e',
    '\u00E8': 'e',
    '\u00E9': 'e',
    '\u00EA': 'e',
    '\u1EC1': 'e',
    '\u1EBF': 'e',
    '\u1EC5': 'e',
    '\u1EC3': 'e',
    '\u1EBD': 'e',
    '\u0113': 'e',
    '\u1E15': 'e',
    '\u1E17': 'e',
    '\u0115': 'e',
    '\u0117': 'e',
    '\u00EB': 'e',
    '\u1EBB': 'e',
    '\u011B': 'e',
    '\u0205': 'e',
    '\u0207': 'e',
    '\u1EB9': 'e',
    '\u1EC7': 'e',
    '\u0229': 'e',
    '\u1E1D': 'e',
    '\u0119': 'e',
    '\u1E19': 'e',
    '\u1E1B': 'e',
    '\u0247': 'e',
    '\u025B': 'e',
    '\u01DD': 'e',
    '\u24D5': 'f',
    '\uFF46': 'f',
    '\u1E1F': 'f',
    '\u0192': 'f',
    '\uA77C': 'f',
    '\u24D6': 'g',
    '\uFF47': 'g',
    '\u01F5': 'g',
    '\u011D': 'g',
    '\u1E21': 'g',
    '\u011F': 'g',
    '\u0121': 'g',
    '\u01E7': 'g',
    '\u0123': 'g',
    '\u01E5': 'g',
    '\u0260': 'g',
    '\uA7A1': 'g',
    '\u1D79': 'g',
    '\uA77F': 'g',
    '\u24D7': 'h',
    '\uFF48': 'h',
    '\u0125': 'h',
    '\u1E23': 'h',
    '\u1E27': 'h',
    '\u021F': 'h',
    '\u1E25': 'h',
    '\u1E29': 'h',
    '\u1E2B': 'h',
    '\u1E96': 'h',
    '\u0127': 'h',
    '\u2C68': 'h',
    '\u2C76': 'h',
    '\u0265': 'h',
    '\u0195': 'hv',
    '\u24D8': 'i',
    '\uFF49': 'i',
    '\u00EC': 'i',
    '\u00ED': 'i',
    '\u00EE': 'i',
    '\u0129': 'i',
    '\u012B': 'i',
    '\u012D': 'i',
    '\u00EF': 'i',
    '\u1E2F': 'i',
    '\u1EC9': 'i',
    '\u01D0': 'i',
    '\u0209': 'i',
    '\u020B': 'i',
    '\u1ECB': 'i',
    '\u012F': 'i',
    '\u1E2D': 'i',
    '\u0268': 'i',
    '\u0131': 'i',
    '\u24D9': 'j',
    '\uFF4A': 'j',
    '\u0135': 'j',
    '\u01F0': 'j',
    '\u0249': 'j',
    '\u24DA': 'k',
    '\uFF4B': 'k',
    '\u1E31': 'k',
    '\u01E9': 'k',
    '\u1E33': 'k',
    '\u0137': 'k',
    '\u1E35': 'k',
    '\u0199': 'k',
    '\u2C6A': 'k',
    '\uA741': 'k',
    '\uA743': 'k',
    '\uA745': 'k',
    '\uA7A3': 'k',
    '\u24DB': 'l',
    '\uFF4C': 'l',
    '\u0140': 'l',
    '\u013A': 'l',
    '\u013E': 'l',
    '\u1E37': 'l',
    '\u1E39': 'l',
    '\u013C': 'l',
    '\u1E3D': 'l',
    '\u1E3B': 'l',
    '\u017F': 'l',
    '\u0142': 'l',
    '\u019A': 'l',
    '\u026B': 'l',
    '\u2C61': 'l',
    '\uA749': 'l',
    '\uA781': 'l',
    '\uA747': 'l',
    '\u01C9': 'lj',
    '\u24DC': 'm',
    '\uFF4D': 'm',
    '\u1E3F': 'm',
    '\u1E41': 'm',
    '\u1E43': 'm',
    '\u0271': 'm',
    '\u026F': 'm',
    '\u24DD': 'n',
    '\uFF4E': 'n',
    '\u01F9': 'n',
    '\u0144': 'n',
    '\u00F1': 'n',
    '\u1E45': 'n',
    '\u0148': 'n',
    '\u1E47': 'n',
    '\u0146': 'n',
    '\u1E4B': 'n',
    '\u1E49': 'n',
    '\u019E': 'n',
    '\u0272': 'n',
    '\u0149': 'n',
    '\uA791': 'n',
    '\uA7A5': 'n',
    '\u01CC': 'nj',
    '\u24DE': 'o',
    '\uFF4F': 'o',
    '\u00F2': 'o',
    '\u00F3': 'o',
    '\u00F4': 'o',
    '\u1ED3': 'o',
    '\u1ED1': 'o',
    '\u1ED7': 'o',
    '\u1ED5': 'o',
    '\u00F5': 'o',
    '\u1E4D': 'o',
    '\u022D': 'o',
    '\u1E4F': 'o',
    '\u014D': 'o',
    '\u1E51': 'o',
    '\u1E53': 'o',
    '\u014F': 'o',
    '\u022F': 'o',
    '\u0231': 'o',
    '\u00F6': 'o',
    '\u022B': 'o',
    '\u1ECF': 'o',
    '\u0151': 'o',
    '\u01D2': 'o',
    '\u020D': 'o',
    '\u020F': 'o',
    '\u01A1': 'o',
    '\u1EDD': 'o',
    '\u1EDB': 'o',
    '\u1EE1': 'o',
    '\u1EDF': 'o',
    '\u1EE3': 'o',
    '\u1ECD': 'o',
    '\u1ED9': 'o',
    '\u01EB': 'o',
    '\u01ED': 'o',
    '\u00F8': 'o',
    '\u01FF': 'o',
    '\u0254': 'o',
    '\uA74B': 'o',
    '\uA74D': 'o',
    '\u0275': 'o',
    '\u01A3': 'oi',
    '\u0223': 'ou',
    '\uA74F': 'oo',
    '\u24DF': 'p',
    '\uFF50': 'p',
    '\u1E55': 'p',
    '\u1E57': 'p',
    '\u01A5': 'p',
    '\u1D7D': 'p',
    '\uA751': 'p',
    '\uA753': 'p',
    '\uA755': 'p',
    '\u24E0': 'q',
    '\uFF51': 'q',
    '\u024B': 'q',
    '\uA757': 'q',
    '\uA759': 'q',
    '\u24E1': 'r',
    '\uFF52': 'r',
    '\u0155': 'r',
    '\u1E59': 'r',
    '\u0159': 'r',
    '\u0211': 'r',
    '\u0213': 'r',
    '\u1E5B': 'r',
    '\u1E5D': 'r',
    '\u0157': 'r',
    '\u1E5F': 'r',
    '\u024D': 'r',
    '\u027D': 'r',
    '\uA75B': 'r',
    '\uA7A7': 'r',
    '\uA783': 'r',
    '\u24E2': 's',
    '\uFF53': 's',
    '\u00DF': 's',
    '\u015B': 's',
    '\u1E65': 's',
    '\u015D': 's',
    '\u1E61': 's',
    '\u0161': 's',
    '\u1E67': 's',
    '\u1E63': 's',
    '\u1E69': 's',
    '\u0219': 's',
    '\u015F': 's',
    '\u023F': 's',
    '\uA7A9': 's',
    '\uA785': 's',
    '\u1E9B': 's',
    '\u24E3': 't',
    '\uFF54': 't',
    '\u1E6B': 't',
    '\u1E97': 't',
    '\u0165': 't',
    '\u1E6D': 't',
    '\u021B': 't',
    '\u0163': 't',
    '\u1E71': 't',
    '\u1E6F': 't',
    '\u0167': 't',
    '\u01AD': 't',
    '\u0288': 't',
    '\u2C66': 't',
    '\uA787': 't',
    '\uA729': 'tz',
    '\u24E4': 'u',
    '\uFF55': 'u',
    '\u00F9': 'u',
    '\u00FA': 'u',
    '\u00FB': 'u',
    '\u0169': 'u',
    '\u1E79': 'u',
    '\u016B': 'u',
    '\u1E7B': 'u',
    '\u016D': 'u',
    '\u00FC': 'u',
    '\u01DC': 'u',
    '\u01D8': 'u',
    '\u01D6': 'u',
    '\u01DA': 'u',
    '\u1EE7': 'u',
    '\u016F': 'u',
    '\u0171': 'u',
    '\u01D4': 'u',
    '\u0215': 'u',
    '\u0217': 'u',
    '\u01B0': 'u',
    '\u1EEB': 'u',
    '\u1EE9': 'u',
    '\u1EEF': 'u',
    '\u1EED': 'u',
    '\u1EF1': 'u',
    '\u1EE5': 'u',
    '\u1E73': 'u',
    '\u0173': 'u',
    '\u1E77': 'u',
    '\u1E75': 'u',
    '\u0289': 'u',
    '\u24E5': 'v',
    '\uFF56': 'v',
    '\u1E7D': 'v',
    '\u1E7F': 'v',
    '\u028B': 'v',
    '\uA75F': 'v',
    '\u028C': 'v',
    '\uA761': 'vy',
    '\u24E6': 'w',
    '\uFF57': 'w',
    '\u1E81': 'w',
    '\u1E83': 'w',
    '\u0175': 'w',
    '\u1E87': 'w',
    '\u1E85': 'w',
    '\u1E98': 'w',
    '\u1E89': 'w',
    '\u2C73': 'w',
    '\u24E7': 'x',
    '\uFF58': 'x',
    '\u1E8B': 'x',
    '\u1E8D': 'x',
    '\u24E8': 'y',
    '\uFF59': 'y',
    '\u1EF3': 'y',
    '\u00FD': 'y',
    '\u0177': 'y',
    '\u1EF9': 'y',
    '\u0233': 'y',
    '\u1E8F': 'y',
    '\u00FF': 'y',
    '\u1EF7': 'y',
    '\u1E99': 'y',
    '\u1EF5': 'y',
    '\u01B4': 'y',
    '\u024F': 'y',
    '\u1EFF': 'y',
    '\u24E9': 'z',
    '\uFF5A': 'z',
    '\u017A': 'z',
    '\u1E91': 'z',
    '\u017C': 'z',
    '\u017E': 'z',
    '\u1E93': 'z',
    '\u1E95': 'z',
    '\u01B6': 'z',
    '\u0225': 'z',
    '\u0240': 'z',
    '\u2C6C': 'z',
    '\uA763': 'z',
    '\u0386': '\u0391',
    '\u0388': '\u0395',
    '\u0389': '\u0397',
    '\u038A': '\u0399',
    '\u03AA': '\u0399',
    '\u038C': '\u039F',
    '\u038E': '\u03A5',
    '\u03AB': '\u03A5',
    '\u038F': '\u03A9',
    '\u03AC': '\u03B1',
    '\u03AD': '\u03B5',
    '\u03AE': '\u03B7',
    '\u03AF': '\u03B9',
    '\u03CA': '\u03B9',
    '\u0390': '\u03B9',
    '\u03CC': '\u03BF',
    '\u03CD': '\u03C5',
    '\u03CB': '\u03C5',
    '\u03B0': '\u03C5',
    '\u03C9': '\u03C9',
    '\u03C2': '\u03C3'
  };

  return diacritics;
});

S2.define('select2/data/base',[
  '../utils'
], function (Utils) {
  function BaseAdapter ($element, options) {
    BaseAdapter.__super__.constructor.call(this);
  }

  Utils.Extend(BaseAdapter, Utils.Observable);

  BaseAdapter.prototype.current = function (callback) {
    throw new Error('The `current` method must be defined in child classes.');
  };

  BaseAdapter.prototype.query = function (params, callback) {
    throw new Error('The `query` method must be defined in child classes.');
  };

  BaseAdapter.prototype.bind = function (container, $container) {
    // Can be implemented in subclasses
  };

  BaseAdapter.prototype.destroy = function () {
    // Can be implemented in subclasses
  };

  BaseAdapter.prototype.generateResultId = function (container, data) {
    var id = container.id + '-result-';

    id += Utils.generateChars(4);

    if (data.id != null) {
      id += '-' + data.id.toString();
    } else {
      id += '-' + Utils.generateChars(4);
    }
    return id;
  };

  return BaseAdapter;
});

S2.define('select2/data/select',[
  './base',
  '../utils',
  'jquery'
], function (BaseAdapter, Utils, $) {
  function SelectAdapter ($element, options) {
    this.$element = $element;
    this.options = options;

    SelectAdapter.__super__.constructor.call(this);
  }

  Utils.Extend(SelectAdapter, BaseAdapter);

  SelectAdapter.prototype.current = function (callback) {
    var data = [];
    var self = this;

    this.$element.find(':selected').each(function () {
      var $option = $(this);

      var option = self.item($option);

      data.push(option);
    });

    callback(data);
  };

  SelectAdapter.prototype.select = function (data) {
    var self = this;

    data.selected = true;

    // If data.element is a DOM node, use it instead
    if ($(data.element).is('option')) {
      data.element.selected = true;

      this.$element.trigger('change');

      return;
    }

    if (this.$element.prop('multiple')) {
      this.current(function (currentData) {
        var val = [];

        data = [data];
        data.push.apply(data, currentData);

        for (var d = 0; d < data.length; d++) {
          var id = data[d].id;

          if ($.inArray(id, val) === -1) {
            val.push(id);
          }
        }

        self.$element.val(val);
        self.$element.trigger('change');
      });
    } else {
      var val = data.id;

      this.$element.val(val);
      this.$element.trigger('change');
    }
  };

  SelectAdapter.prototype.unselect = function (data) {
    var self = this;

    if (!this.$element.prop('multiple')) {
      return;
    }

    data.selected = false;

    if ($(data.element).is('option')) {
      data.element.selected = false;

      this.$element.trigger('change');

      return;
    }

    this.current(function (currentData) {
      var val = [];

      for (var d = 0; d < currentData.length; d++) {
        var id = currentData[d].id;

        if (id !== data.id && $.inArray(id, val) === -1) {
          val.push(id);
        }
      }

      self.$element.val(val);

      self.$element.trigger('change');
    });
  };

  SelectAdapter.prototype.bind = function (container, $container) {
    var self = this;

    this.container = container;

    container.on('select', function (params) {
      self.select(params.data);
    });

    container.on('unselect', function (params) {
      self.unselect(params.data);
    });
  };

  SelectAdapter.prototype.destroy = function () {
    // Remove anything added to child elements
    this.$element.find('*').each(function () {
      // Remove any custom data set by Select2
      Utils.RemoveData(this);
    });
  };

  SelectAdapter.prototype.query = function (params, callback) {
    var data = [];
    var self = this;

    var $options = this.$element.children();

    $options.each(function () {
      var $option = $(this);

      if (!$option.is('option') && !$option.is('optgroup')) {
        return;
      }

      var option = self.item($option);

      var matches = self.matches(params, option);

      if (matches !== null) {
        data.push(matches);
      }
    });

    callback({
      results: data
    });
  };

  SelectAdapter.prototype.addOptions = function ($options) {
    Utils.appendMany(this.$element, $options);
  };

  SelectAdapter.prototype.option = function (data) {
    var option;

    if (data.children) {
      option = document.createElement('optgroup');
      option.label = data.text;
    } else {
      option = document.createElement('option');

      if (option.textContent !== undefined) {
        option.textContent = data.text;
      } else {
        option.innerText = data.text;
      }
    }

    if (data.id !== undefined) {
      option.value = data.id;
    }

    if (data.disabled) {
      option.disabled = true;
    }

    if (data.selected) {
      option.selected = true;
    }

    if (data.title) {
      option.title = data.title;
    }

    var $option = $(option);

    var normalizedData = this._normalizeItem(data);
    normalizedData.element = option;

    // Override the option's data with the combined data
    Utils.StoreData(option, 'data', normalizedData);

    return $option;
  };

  SelectAdapter.prototype.item = function ($option) {
    var data = {};

    data = Utils.GetData($option[0], 'data');

    if (data != null) {
      return data;
    }

    if ($option.is('option')) {
      data = {
        id: $option.val(),
        text: $option.text(),
        disabled: $option.prop('disabled'),
        selected: $option.prop('selected'),
        title: $option.prop('title')
      };
    } else if ($option.is('optgroup')) {
      data = {
        text: $option.prop('label'),
        children: [],
        title: $option.prop('title')
      };

      var $children = $option.children('option');
      var children = [];

      for (var c = 0; c < $children.length; c++) {
        var $child = $($children[c]);

        var child = this.item($child);

        children.push(child);
      }

      data.children = children;
    }

    data = this._normalizeItem(data);
    data.element = $option[0];

    Utils.StoreData($option[0], 'data', data);

    return data;
  };

  SelectAdapter.prototype._normalizeItem = function (item) {
    if (item !== Object(item)) {
      item = {
        id: item,
        text: item
      };
    }

    item = $.extend({}, {
      text: ''
    }, item);

    var defaults = {
      selected: false,
      disabled: false
    };

    if (item.id != null) {
      item.id = item.id.toString();
    }

    if (item.text != null) {
      item.text = item.text.toString();
    }

    if (item._resultId == null && item.id && this.container != null) {
      item._resultId = this.generateResultId(this.container, item);
    }

    return $.extend({}, defaults, item);
  };

  SelectAdapter.prototype.matches = function (params, data) {
    var matcher = this.options.get('matcher');

    return matcher(params, data);
  };

  return SelectAdapter;
});

S2.define('select2/data/array',[
  './select',
  '../utils',
  'jquery'
], function (SelectAdapter, Utils, $) {
  function ArrayAdapter ($element, options) {
    var data = options.get('data') || [];

    ArrayAdapter.__super__.constructor.call(this, $element, options);

    this.addOptions(this.convertToOptions(data));
  }

  Utils.Extend(ArrayAdapter, SelectAdapter);

  ArrayAdapter.prototype.select = function (data) {
    var $option = this.$element.find('option').filter(function (i, elm) {
      return elm.value == data.id.toString();
    });

    if ($option.length === 0) {
      $option = this.option(data);

      this.addOptions($option);
    }

    ArrayAdapter.__super__.select.call(this, data);
  };

  ArrayAdapter.prototype.convertToOptions = function (data) {
    var self = this;

    var $existing = this.$element.find('option');
    var existingIds = $existing.map(function () {
      return self.item($(this)).id;
    }).get();

    var $options = [];

    // Filter out all items except for the one passed in the argument
    function onlyItem (item) {
      return function () {
        return $(this).val() == item.id;
      };
    }

    for (var d = 0; d < data.length; d++) {
      var item = this._normalizeItem(data[d]);

      // Skip items which were pre-loaded, only merge the data
      if ($.inArray(item.id, existingIds) >= 0) {
        var $existingOption = $existing.filter(onlyItem(item));

        var existingData = this.item($existingOption);
        var newData = $.extend(true, {}, item, existingData);

        var $newOption = this.option(newData);

        $existingOption.replaceWith($newOption);

        continue;
      }

      var $option = this.option(item);

      if (item.children) {
        var $children = this.convertToOptions(item.children);

        Utils.appendMany($option, $children);
      }

      $options.push($option);
    }

    return $options;
  };

  return ArrayAdapter;
});

S2.define('select2/data/ajax',[
  './array',
  '../utils',
  'jquery'
], function (ArrayAdapter, Utils, $) {
  function AjaxAdapter ($element, options) {
    this.ajaxOptions = this._applyDefaults(options.get('ajax'));

    if (this.ajaxOptions.processResults != null) {
      this.processResults = this.ajaxOptions.processResults;
    }

    AjaxAdapter.__super__.constructor.call(this, $element, options);
  }

  Utils.Extend(AjaxAdapter, ArrayAdapter);

  AjaxAdapter.prototype._applyDefaults = function (options) {
    var defaults = {
      data: function (params) {
        return $.extend({}, params, {
          q: params.term
        });
      },
      transport: function (params, success, failure) {
        var $request = $.ajax(params);

        $request.then(success);
        $request.fail(failure);

        return $request;
      }
    };

    return $.extend({}, defaults, options, true);
  };

  AjaxAdapter.prototype.processResults = function (results) {
    return results;
  };

  AjaxAdapter.prototype.query = function (params, callback) {
    var matches = [];
    var self = this;

    if (this._request != null) {
      // JSONP requests cannot always be aborted
      if ($.isFunction(this._request.abort)) {
        this._request.abort();
      }

      this._request = null;
    }

    var options = $.extend({
      type: 'GET'
    }, this.ajaxOptions);

    if (typeof options.url === 'function') {
      options.url = options.url.call(this.$element, params);
    }

    if (typeof options.data === 'function') {
      options.data = options.data.call(this.$element, params);
    }

    function request () {
      var $request = options.transport(options, function (data) {
        var results = self.processResults(data, params);

        if (self.options.get('debug') && window.console && console.error) {
          // Check to make sure that the response included a `results` key.
          if (!results || !results.results || !$.isArray(results.results)) {
            console.error(
              'Select2: The AJAX results did not return an array in the ' +
              '`results` key of the response.'
            );
          }
        }

        callback(results);
      }, function () {
        // Attempt to detect if a request was aborted
        // Only works if the transport exposes a status property
        if ('status' in $request &&
            ($request.status === 0 || $request.status === '0')) {
          return;
        }

        self.trigger('results:message', {
          message: 'errorLoading'
        });
      });

      self._request = $request;
    }

    if (this.ajaxOptions.delay && params.term != null) {
      if (this._queryTimeout) {
        window.clearTimeout(this._queryTimeout);
      }

      this._queryTimeout = window.setTimeout(request, this.ajaxOptions.delay);
    } else {
      request();
    }
  };

  return AjaxAdapter;
});

S2.define('select2/data/tags',[
  'jquery'
], function ($) {
  function Tags (decorated, $element, options) {
    var tags = options.get('tags');

    var createTag = options.get('createTag');

    if (createTag !== undefined) {
      this.createTag = createTag;
    }

    var insertTag = options.get('insertTag');

    if (insertTag !== undefined) {
        this.insertTag = insertTag;
    }

    decorated.call(this, $element, options);

    if ($.isArray(tags)) {
      for (var t = 0; t < tags.length; t++) {
        var tag = tags[t];
        var item = this._normalizeItem(tag);

        var $option = this.option(item);

        this.$element.append($option);
      }
    }
  }

  Tags.prototype.query = function (decorated, params, callback) {
    var self = this;

    this._removeOldTags();

    if (params.term == null || params.page != null) {
      decorated.call(this, params, callback);
      return;
    }

    function wrapper (obj, child) {
      var data = obj.results;

      for (var i = 0; i < data.length; i++) {
        var option = data[i];

        var checkChildren = (
          option.children != null &&
          !wrapper({
            results: option.children
          }, true)
        );

        var optionText = (option.text || '').toUpperCase();
        var paramsTerm = (params.term || '').toUpperCase();

        var checkText = optionText === paramsTerm;

        if (checkText || checkChildren) {
          if (child) {
            return false;
          }

          obj.data = data;
          callback(obj);

          return;
        }
      }

      if (child) {
        return true;
      }

      var tag = self.createTag(params);

      if (tag != null) {
        var $option = self.option(tag);
        $option.attr('data-select2-tag', true);

        self.addOptions([$option]);

        self.insertTag(data, tag);
      }

      obj.results = data;

      callback(obj);
    }

    decorated.call(this, params, wrapper);
  };

  Tags.prototype.createTag = function (decorated, params) {
    var term = $.trim(params.term);

    if (term === '') {
      return null;
    }

    return {
      id: term,
      text: term
    };
  };

  Tags.prototype.insertTag = function (_, data, tag) {
    data.unshift(tag);
  };

  Tags.prototype._removeOldTags = function (_) {
    var tag = this._lastTag;

    var $options = this.$element.find('option[data-select2-tag]');

    $options.each(function () {
      if (this.selected) {
        return;
      }

      $(this).remove();
    });
  };

  return Tags;
});

S2.define('select2/data/tokenizer',[
  'jquery'
], function ($) {
  function Tokenizer (decorated, $element, options) {
    var tokenizer = options.get('tokenizer');

    if (tokenizer !== undefined) {
      this.tokenizer = tokenizer;
    }

    decorated.call(this, $element, options);
  }

  Tokenizer.prototype.bind = function (decorated, container, $container) {
    decorated.call(this, container, $container);

    this.$search =  container.dropdown.$search || container.selection.$search ||
      $container.find('.select2-search__field');
  };

  Tokenizer.prototype.query = function (decorated, params, callback) {
    var self = this;

    function createAndSelect (data) {
      // Normalize the data object so we can use it for checks
      var item = self._normalizeItem(data);

      // Check if the data object already exists as a tag
      // Select it if it doesn't
      var $existingOptions = self.$element.find('option').filter(function () {
        return $(this).val() === item.id;
      });

      // If an existing option wasn't found for it, create the option
      if (!$existingOptions.length) {
        var $option = self.option(item);
        $option.attr('data-select2-tag', true);

        self._removeOldTags();
        self.addOptions([$option]);
      }

      // Select the item, now that we know there is an option for it
      select(item);
    }

    function select (data) {
      self.trigger('select', {
        data: data
      });
    }

    params.term = params.term || '';

    var tokenData = this.tokenizer(params, this.options, createAndSelect);

    if (tokenData.term !== params.term) {
      // Replace the search term if we have the search box
      if (this.$search.length) {
        this.$search.val(tokenData.term);
        this.$search.focus();
      }

      params.term = tokenData.term;
    }

    decorated.call(this, params, callback);
  };

  Tokenizer.prototype.tokenizer = function (_, params, options, callback) {
    var separators = options.get('tokenSeparators') || [];
    var term = params.term;
    var i = 0;

    var createTag = this.createTag || function (params) {
      return {
        id: params.term,
        text: params.term
      };
    };

    while (i < term.length) {
      var termChar = term[i];

      if ($.inArray(termChar, separators) === -1) {
        i++;

        continue;
      }

      var part = term.substr(0, i);
      var partParams = $.extend({}, params, {
        term: part
      });

      var data = createTag(partParams);

      if (data == null) {
        i++;
        continue;
      }

      callback(data);

      // Reset the term to not include the tokenized portion
      term = term.substr(i + 1) || '';
      i = 0;
    }

    return {
      term: term
    };
  };

  return Tokenizer;
});

S2.define('select2/data/minimumInputLength',[

], function () {
  function MinimumInputLength (decorated, $e, options) {
    this.minimumInputLength = options.get('minimumInputLength');

    decorated.call(this, $e, options);
  }

  MinimumInputLength.prototype.query = function (decorated, params, callback) {
    params.term = params.term || '';

    if (params.term.length < this.minimumInputLength) {
      this.trigger('results:message', {
        message: 'inputTooShort',
        args: {
          minimum: this.minimumInputLength,
          input: params.term,
          params: params
        }
      });

      return;
    }

    decorated.call(this, params, callback);
  };

  return MinimumInputLength;
});

S2.define('select2/data/maximumInputLength',[

], function () {
  function MaximumInputLength (decorated, $e, options) {
    this.maximumInputLength = options.get('maximumInputLength');

    decorated.call(this, $e, options);
  }

  MaximumInputLength.prototype.query = function (decorated, params, callback) {
    params.term = params.term || '';

    if (this.maximumInputLength > 0 &&
        params.term.length > this.maximumInputLength) {
      this.trigger('results:message', {
        message: 'inputTooLong',
        args: {
          maximum: this.maximumInputLength,
          input: params.term,
          params: params
        }
      });

      return;
    }

    decorated.call(this, params, callback);
  };

  return MaximumInputLength;
});

S2.define('select2/data/maximumSelectionLength',[

], function (){
  function MaximumSelectionLength (decorated, $e, options) {
    this.maximumSelectionLength = options.get('maximumSelectionLength');

    decorated.call(this, $e, options);
  }

  MaximumSelectionLength.prototype.query =
    function (decorated, params, callback) {
      var self = this;

      this.current(function (currentData) {
        var count = currentData != null ? currentData.length : 0;
        if (self.maximumSelectionLength > 0 &&
          count >= self.maximumSelectionLength) {
          self.trigger('results:message', {
            message: 'maximumSelected',
            args: {
              maximum: self.maximumSelectionLength
            }
          });
          return;
        }
        decorated.call(self, params, callback);
      });
  };

  return MaximumSelectionLength;
});

S2.define('select2/dropdown',[
  'jquery',
  './utils'
], function ($, Utils) {
  function Dropdown ($element, options) {
    this.$element = $element;
    this.options = options;

    Dropdown.__super__.constructor.call(this);
  }

  Utils.Extend(Dropdown, Utils.Observable);

  Dropdown.prototype.render = function () {
    var $dropdown = $(
      '<span class="select2-dropdown">' +
        '<span class="select2-results"></span>' +
      '</span>'
    );

    $dropdown.attr('dir', this.options.get('dir'));

    this.$dropdown = $dropdown;

    return $dropdown;
  };

  Dropdown.prototype.bind = function () {
    // Should be implemented in subclasses
  };

  Dropdown.prototype.position = function ($dropdown, $container) {
    // Should be implmented in subclasses
  };

  Dropdown.prototype.destroy = function () {
    // Remove the dropdown from the DOM
    this.$dropdown.remove();
  };

  return Dropdown;
});

S2.define('select2/dropdown/search',[
  'jquery',
  '../utils'
], function ($, Utils) {
  function Search () { }

  Search.prototype.render = function (decorated) {
    var $rendered = decorated.call(this);

    var $search = $(
      '<span class="select2-search select2-search--dropdown">' +
        '<input class="select2-search__field" type="search" tabindex="-1"' +
        ' autocomplete="off" autocorrect="off" autocapitalize="none"' +
        ' spellcheck="false" role="textbox" />' +
      '</span>'
    );

    this.$searchContainer = $search;
    this.$search = $search.find('input');

    $rendered.prepend($search);

    return $rendered;
  };

  Search.prototype.bind = function (decorated, container, $container) {
    var self = this;

    decorated.call(this, container, $container);

    this.$search.on('keydown', function (evt) {
      self.trigger('keypress', evt);

      self._keyUpPrevented = evt.isDefaultPrevented();
    });

    // Workaround for browsers which do not support the `input` event
    // This will prevent double-triggering of events for browsers which support
    // both the `keyup` and `input` events.
    this.$search.on('input', function (evt) {
      // Unbind the duplicated `keyup` event
      $(this).off('keyup');
    });

    this.$search.on('keyup input', function (evt) {
      self.handleSearch(evt);
    });

    container.on('open', function () {
      self.$search.attr('tabindex', 0);

      self.$search.focus();

      window.setTimeout(function () {
        self.$search.focus();
      }, 0);
    });

    container.on('close', function () {
      self.$search.attr('tabindex', -1);

      self.$search.val('');
      self.$search.blur();
    });

    container.on('focus', function () {
      if (!container.isOpen()) {
        self.$search.focus();
      }
    });

    container.on('results:all', function (params) {
      if (params.query.term == null || params.query.term === '') {
        var showSearch = self.showSearch(params);

        if (showSearch) {
          self.$searchContainer.removeClass('select2-search--hide');
        } else {
          self.$searchContainer.addClass('select2-search--hide');
        }
      }
    });
  };

  Search.prototype.handleSearch = function (evt) {
    if (!this._keyUpPrevented) {
      var input = this.$search.val();

      this.trigger('query', {
        term: input
      });
    }

    this._keyUpPrevented = false;
  };

  Search.prototype.showSearch = function (_, params) {
    return true;
  };

  return Search;
});

S2.define('select2/dropdown/hidePlaceholder',[

], function () {
  function HidePlaceholder (decorated, $element, options, dataAdapter) {
    this.placeholder = this.normalizePlaceholder(options.get('placeholder'));

    decorated.call(this, $element, options, dataAdapter);
  }

  HidePlaceholder.prototype.append = function (decorated, data) {
    data.results = this.removePlaceholder(data.results);

    decorated.call(this, data);
  };

  HidePlaceholder.prototype.normalizePlaceholder = function (_, placeholder) {
    if (typeof placeholder === 'string') {
      placeholder = {
        id: '',
        text: placeholder
      };
    }

    return placeholder;
  };

  HidePlaceholder.prototype.removePlaceholder = function (_, data) {
    var modifiedData = data.slice(0);

    for (var d = data.length - 1; d >= 0; d--) {
      var item = data[d];

      if (this.placeholder.id === item.id) {
        modifiedData.splice(d, 1);
      }
    }

    return modifiedData;
  };

  return HidePlaceholder;
});

S2.define('select2/dropdown/infiniteScroll',[
  'jquery'
], function ($) {
  function InfiniteScroll (decorated, $element, options, dataAdapter) {
    this.lastParams = {};

    decorated.call(this, $element, options, dataAdapter);

    this.$loadingMore = this.createLoadingMore();
    this.loading = false;
  }

  InfiniteScroll.prototype.append = function (decorated, data) {
    this.$loadingMore.remove();
    this.loading = false;

    decorated.call(this, data);

    if (this.showLoadingMore(data)) {
      this.$results.append(this.$loadingMore);
    }
  };

  InfiniteScroll.prototype.bind = function (decorated, container, $container) {
    var self = this;

    decorated.call(this, container, $container);

    container.on('query', function (params) {
      self.lastParams = params;
      self.loading = true;
    });

    container.on('query:append', function (params) {
      self.lastParams = params;
      self.loading = true;
    });

    this.$results.on('scroll', function () {
      var isLoadMoreVisible = $.contains(
        document.documentElement,
        self.$loadingMore[0]
      );

      if (self.loading || !isLoadMoreVisible) {
        return;
      }

      var currentOffset = self.$results.offset().top +
        self.$results.outerHeight(false);
      var loadingMoreOffset = self.$loadingMore.offset().top +
        self.$loadingMore.outerHeight(false);

      if (currentOffset + 50 >= loadingMoreOffset) {
        self.loadMore();
      }
    });
  };

  InfiniteScroll.prototype.loadMore = function () {
    this.loading = true;

    var params = $.extend({}, {page: 1}, this.lastParams);

    params.page++;

    this.trigger('query:append', params);
  };

  InfiniteScroll.prototype.showLoadingMore = function (_, data) {
    return data.pagination && data.pagination.more;
  };

  InfiniteScroll.prototype.createLoadingMore = function () {
    var $option = $(
      '<li ' +
      'class="select2-results__option select2-results__option--load-more"' +
      'role="treeitem" aria-disabled="true"></li>'
    );

    var message = this.options.get('translations').get('loadingMore');

    $option.html(message(this.lastParams));

    return $option;
  };

  return InfiniteScroll;
});

S2.define('select2/dropdown/attachBody',[
  'jquery',
  '../utils'
], function ($, Utils) {
  function AttachBody (decorated, $element, options) {
    this.$dropdownParent = options.get('dropdownParent') || $(document.body);

    decorated.call(this, $element, options);
  }

  AttachBody.prototype.bind = function (decorated, container, $container) {
    var self = this;

    var setupResultsEvents = false;

    decorated.call(this, container, $container);

    container.on('open', function () {
      self._showDropdown();
      self._attachPositioningHandler(container);

      if (!setupResultsEvents) {
        setupResultsEvents = true;

        container.on('results:all', function () {
          self._positionDropdown();
          self._resizeDropdown();
        });

        container.on('results:append', function () {
          self._positionDropdown();
          self._resizeDropdown();
        });
      }
    });

    container.on('close', function () {
      self._hideDropdown();
      self._detachPositioningHandler(container);
    });

    this.$dropdownContainer.on('mousedown', function (evt) {
      evt.stopPropagation();
    });
  };

  AttachBody.prototype.destroy = function (decorated) {
    decorated.call(this);

    this.$dropdownContainer.remove();
  };

  AttachBody.prototype.position = function (decorated, $dropdown, $container) {
    // Clone all of the container classes
    $dropdown.attr('class', $container.attr('class'));

    $dropdown.removeClass('select2');
    $dropdown.addClass('select2-container--open');

    $dropdown.css({
      position: 'absolute',
      top: -999999
    });

    this.$container = $container;
  };

  AttachBody.prototype.render = function (decorated) {
    var $container = $('<span></span>');

    var $dropdown = decorated.call(this);
    $container.append($dropdown);

    this.$dropdownContainer = $container;

    return $container;
  };

  AttachBody.prototype._hideDropdown = function (decorated) {
    this.$dropdownContainer.detach();
  };

  AttachBody.prototype._attachPositioningHandler =
      function (decorated, container) {
    var self = this;

    var scrollEvent = 'scroll.select2.' + container.id;
    var resizeEvent = 'resize.select2.' + container.id;
    var orientationEvent = 'orientationchange.select2.' + container.id;

    var $watchers = this.$container.parents().filter(Utils.hasScroll);
    $watchers.each(function () {
      Utils.StoreData(this, 'select2-scroll-position', {
        x: $(this).scrollLeft(),
        y: $(this).scrollTop()
      });
    });

    $watchers.on(scrollEvent, function (ev) {
      var position = Utils.GetData(this, 'select2-scroll-position');
      $(this).scrollTop(position.y);
    });

    $(window).on(scrollEvent + ' ' + resizeEvent + ' ' + orientationEvent,
      function (e) {
      self._positionDropdown();
      self._resizeDropdown();
    });
  };

  AttachBody.prototype._detachPositioningHandler =
      function (decorated, container) {
    var scrollEvent = 'scroll.select2.' + container.id;
    var resizeEvent = 'resize.select2.' + container.id;
    var orientationEvent = 'orientationchange.select2.' + container.id;

    var $watchers = this.$container.parents().filter(Utils.hasScroll);
    $watchers.off(scrollEvent);

    $(window).off(scrollEvent + ' ' + resizeEvent + ' ' + orientationEvent);
  };

  AttachBody.prototype._positionDropdown = function () {
    var $window = $(window);

    var isCurrentlyAbove = this.$dropdown.hasClass('select2-dropdown--above');
    var isCurrentlyBelow = this.$dropdown.hasClass('select2-dropdown--below');

    var newDirection = null;

    var offset = this.$container.offset();

    offset.bottom = offset.top + this.$container.outerHeight(false);

    var container = {
      height: this.$container.outerHeight(false)
    };

    container.top = offset.top;
    container.bottom = offset.top + container.height;

    var dropdown = {
      height: this.$dropdown.outerHeight(false)
    };

    var viewport = {
      top: $window.scrollTop(),
      bottom: $window.scrollTop() + $window.height()
    };

    var enoughRoomAbove = viewport.top < (offset.top - dropdown.height);
    var enoughRoomBelow = viewport.bottom > (offset.bottom + dropdown.height);

    var css = {
      left: offset.left,
      top: container.bottom
    };

    // Determine what the parent element is to use for calciulating the offset
    var $offsetParent = this.$dropdownParent;

    // For statically positoned elements, we need to get the element
    // that is determining the offset
    if ($offsetParent.css('position') === 'static') {
      $offsetParent = $offsetParent.offsetParent();
    }

    var parentOffset = $offsetParent.offset();

    css.top -= parentOffset.top;
    css.left -= parentOffset.left;

    if (!isCurrentlyAbove && !isCurrentlyBelow) {
      newDirection = 'below';
    }

    if (!enoughRoomBelow && enoughRoomAbove && !isCurrentlyAbove) {
      newDirection = 'above';
    } else if (!enoughRoomAbove && enoughRoomBelow && isCurrentlyAbove) {
      newDirection = 'below';
    }

    if (newDirection == 'above' ||
      (isCurrentlyAbove && newDirection !== 'below')) {
      css.top = container.top - parentOffset.top - dropdown.height;
    }

    if (newDirection != null) {
      this.$dropdown
        .removeClass('select2-dropdown--below select2-dropdown--above')
        .addClass('select2-dropdown--' + newDirection);
      this.$container
        .removeClass('select2-container--below select2-container--above')
        .addClass('select2-container--' + newDirection);
    }

    this.$dropdownContainer.css(css);
  };

  AttachBody.prototype._resizeDropdown = function () {
    var css = {
      width: this.$container.outerWidth(false) + 'px'
    };

    if (this.options.get('dropdownAutoWidth')) {
      css.minWidth = css.width;
      css.position = 'relative';
      css.width = 'auto';
    }

    this.$dropdown.css(css);
  };

  AttachBody.prototype._showDropdown = function (decorated) {
    this.$dropdownContainer.appendTo(this.$dropdownParent);

    this._positionDropdown();
    this._resizeDropdown();
  };

  return AttachBody;
});

S2.define('select2/dropdown/minimumResultsForSearch',[

], function () {
  function countResults (data) {
    var count = 0;

    for (var d = 0; d < data.length; d++) {
      var item = data[d];

      if (item.children) {
        count += countResults(item.children);
      } else {
        count++;
      }
    }

    return count;
  }

  function MinimumResultsForSearch (decorated, $element, options, dataAdapter) {
    this.minimumResultsForSearch = options.get('minimumResultsForSearch');

    if (this.minimumResultsForSearch < 0) {
      this.minimumResultsForSearch = Infinity;
    }

    decorated.call(this, $element, options, dataAdapter);
  }

  MinimumResultsForSearch.prototype.showSearch = function (decorated, params) {
    if (countResults(params.data.results) < this.minimumResultsForSearch) {
      return false;
    }

    return decorated.call(this, params);
  };

  return MinimumResultsForSearch;
});

S2.define('select2/dropdown/selectOnClose',[
  '../utils'
], function (Utils) {
  function SelectOnClose () { }

  SelectOnClose.prototype.bind = function (decorated, container, $container) {
    var self = this;

    decorated.call(this, container, $container);

    container.on('close', function (params) {
      self._handleSelectOnClose(params);
    });
  };

  SelectOnClose.prototype._handleSelectOnClose = function (_, params) {
    if (params && params.originalSelect2Event != null) {
      var event = params.originalSelect2Event;

      // Don't select an item if the close event was triggered from a select or
      // unselect event
      if (event._type === 'select' || event._type === 'unselect') {
        return;
      }
    }

    var $highlightedResults = this.getHighlightedResults();

    // Only select highlighted results
    if ($highlightedResults.length < 1) {
      return;
    }

    var data = Utils.GetData($highlightedResults[0], 'data');

    // Don't re-select already selected resulte
    if (
      (data.element != null && data.element.selected) ||
      (data.element == null && data.selected)
    ) {
      return;
    }

    this.trigger('select', {
        data: data
    });
  };

  return SelectOnClose;
});

S2.define('select2/dropdown/closeOnSelect',[

], function () {
  function CloseOnSelect () { }

  CloseOnSelect.prototype.bind = function (decorated, container, $container) {
    var self = this;

    decorated.call(this, container, $container);

    container.on('select', function (evt) {
      self._selectTriggered(evt);
    });

    container.on('unselect', function (evt) {
      self._selectTriggered(evt);
    });
  };

  CloseOnSelect.prototype._selectTriggered = function (_, evt) {
    var originalEvent = evt.originalEvent;

    // Don't close if the control key is being held
    if (originalEvent && originalEvent.ctrlKey) {
      return;
    }

    this.trigger('close', {
      originalEvent: originalEvent,
      originalSelect2Event: evt
    });
  };

  return CloseOnSelect;
});

S2.define('select2/i18n/en',[],function () {
  // English
  return {
    errorLoading: function () {
      return 'The results could not be loaded.';
    },
    inputTooLong: function (args) {
      var overChars = args.input.length - args.maximum;

      var message = 'Please delete ' + overChars + ' character';

      if (overChars != 1) {
        message += 's';
      }

      return message;
    },
    inputTooShort: function (args) {
      var remainingChars = args.minimum - args.input.length;

      var message = 'Please enter ' + remainingChars + ' or more characters';

      return message;
    },
    loadingMore: function () {
      return 'Loading more results…';
    },
    maximumSelected: function (args) {
      var message = 'You can only select ' + args.maximum + ' item';

      if (args.maximum != 1) {
        message += 's';
      }

      return message;
    },
    noResults: function () {
      return 'No results found';
    },
    searching: function () {
      return 'Searching…';
    }
  };
});

S2.define('select2/defaults',[
  'jquery',
  'require',

  './results',

  './selection/single',
  './selection/multiple',
  './selection/placeholder',
  './selection/allowClear',
  './selection/search',
  './selection/eventRelay',

  './utils',
  './translation',
  './diacritics',

  './data/select',
  './data/array',
  './data/ajax',
  './data/tags',
  './data/tokenizer',
  './data/minimumInputLength',
  './data/maximumInputLength',
  './data/maximumSelectionLength',

  './dropdown',
  './dropdown/search',
  './dropdown/hidePlaceholder',
  './dropdown/infiniteScroll',
  './dropdown/attachBody',
  './dropdown/minimumResultsForSearch',
  './dropdown/selectOnClose',
  './dropdown/closeOnSelect',

  './i18n/en'
], function ($, require,

             ResultsList,

             SingleSelection, MultipleSelection, Placeholder, AllowClear,
             SelectionSearch, EventRelay,

             Utils, Translation, DIACRITICS,

             SelectData, ArrayData, AjaxData, Tags, Tokenizer,
             MinimumInputLength, MaximumInputLength, MaximumSelectionLength,

             Dropdown, DropdownSearch, HidePlaceholder, InfiniteScroll,
             AttachBody, MinimumResultsForSearch, SelectOnClose, CloseOnSelect,

             EnglishTranslation) {
  function Defaults () {
    this.reset();
  }

  Defaults.prototype.apply = function (options) {
    options = $.extend(true, {}, this.defaults, options);

    if (options.dataAdapter == null) {
      if (options.ajax != null) {
        options.dataAdapter = AjaxData;
      } else if (options.data != null) {
        options.dataAdapter = ArrayData;
      } else {
        options.dataAdapter = SelectData;
      }

      if (options.minimumInputLength > 0) {
        options.dataAdapter = Utils.Decorate(
          options.dataAdapter,
          MinimumInputLength
        );
      }

      if (options.maximumInputLength > 0) {
        options.dataAdapter = Utils.Decorate(
          options.dataAdapter,
          MaximumInputLength
        );
      }

      if (options.maximumSelectionLength > 0) {
        options.dataAdapter = Utils.Decorate(
          options.dataAdapter,
          MaximumSelectionLength
        );
      }

      if (options.tags) {
        options.dataAdapter = Utils.Decorate(options.dataAdapter, Tags);
      }

      if (options.tokenSeparators != null || options.tokenizer != null) {
        options.dataAdapter = Utils.Decorate(
          options.dataAdapter,
          Tokenizer
        );
      }

      if (options.query != null) {
        var Query = require(options.amdBase + 'compat/query');

        options.dataAdapter = Utils.Decorate(
          options.dataAdapter,
          Query
        );
      }

      if (options.initSelection != null) {
        var InitSelection = require(options.amdBase + 'compat/initSelection');

        options.dataAdapter = Utils.Decorate(
          options.dataAdapter,
          InitSelection
        );
      }
    }

    if (options.resultsAdapter == null) {
      options.resultsAdapter = ResultsList;

      if (options.ajax != null) {
        options.resultsAdapter = Utils.Decorate(
          options.resultsAdapter,
          InfiniteScroll
        );
      }

      if (options.placeholder != null) {
        options.resultsAdapter = Utils.Decorate(
          options.resultsAdapter,
          HidePlaceholder
        );
      }

      if (options.selectOnClose) {
        options.resultsAdapter = Utils.Decorate(
          options.resultsAdapter,
          SelectOnClose
        );
      }
    }

    if (options.dropdownAdapter == null) {
      if (options.multiple) {
        options.dropdownAdapter = Dropdown;
      } else {
        var SearchableDropdown = Utils.Decorate(Dropdown, DropdownSearch);

        options.dropdownAdapter = SearchableDropdown;
      }

      if (options.minimumResultsForSearch !== 0) {
        options.dropdownAdapter = Utils.Decorate(
          options.dropdownAdapter,
          MinimumResultsForSearch
        );
      }

      if (options.closeOnSelect) {
        options.dropdownAdapter = Utils.Decorate(
          options.dropdownAdapter,
          CloseOnSelect
        );
      }

      if (
        options.dropdownCssClass != null ||
        options.dropdownCss != null ||
        options.adaptDropdownCssClass != null
      ) {
        var DropdownCSS = require(options.amdBase + 'compat/dropdownCss');

        options.dropdownAdapter = Utils.Decorate(
          options.dropdownAdapter,
          DropdownCSS
        );
      }

      options.dropdownAdapter = Utils.Decorate(
        options.dropdownAdapter,
        AttachBody
      );
    }

    if (options.selectionAdapter == null) {
      if (options.multiple) {
        options.selectionAdapter = MultipleSelection;
      } else {
        options.selectionAdapter = SingleSelection;
      }

      // Add the placeholder mixin if a placeholder was specified
      if (options.placeholder != null) {
        options.selectionAdapter = Utils.Decorate(
          options.selectionAdapter,
          Placeholder
        );
      }

      if (options.allowClear) {
        options.selectionAdapter = Utils.Decorate(
          options.selectionAdapter,
          AllowClear
        );
      }

      if (options.multiple) {
        options.selectionAdapter = Utils.Decorate(
          options.selectionAdapter,
          SelectionSearch
        );
      }

      if (
        options.containerCssClass != null ||
        options.containerCss != null ||
        options.adaptContainerCssClass != null
      ) {
        var ContainerCSS = require(options.amdBase + 'compat/containerCss');

        options.selectionAdapter = Utils.Decorate(
          options.selectionAdapter,
          ContainerCSS
        );
      }

      options.selectionAdapter = Utils.Decorate(
        options.selectionAdapter,
        EventRelay
      );
    }

    if (typeof options.language === 'string') {
      // Check if the language is specified with a region
      if (options.language.indexOf('-') > 0) {
        // Extract the region information if it is included
        var languageParts = options.language.split('-');
        var baseLanguage = languageParts[0];

        options.language = [options.language, baseLanguage];
      } else {
        options.language = [options.language];
      }
    }

    if ($.isArray(options.language)) {
      var languages = new Translation();
      options.language.push('en');

      var languageNames = options.language;

      for (var l = 0; l < languageNames.length; l++) {
        var name = languageNames[l];
        var language = {};

        try {
          // Try to load it with the original name
          language = Translation.loadPath(name);
        } catch (e) {
          try {
            // If we couldn't load it, check if it wasn't the full path
            name = this.defaults.amdLanguageBase + name;
            language = Translation.loadPath(name);
          } catch (ex) {
            // The translation could not be loaded at all. Sometimes this is
            // because of a configuration problem, other times this can be
            // because of how Select2 helps load all possible translation files.
            if (options.debug && window.console && console.warn) {
              console.warn(
                'Select2: The language file for "' + name + '" could not be ' +
                'automatically loaded. A fallback will be used instead.'
              );
            }

            continue;
          }
        }

        languages.extend(language);
      }

      options.translations = languages;
    } else {
      var baseTranslation = Translation.loadPath(
        this.defaults.amdLanguageBase + 'en'
      );
      var customTranslation = new Translation(options.language);

      customTranslation.extend(baseTranslation);

      options.translations = customTranslation;
    }

    return options;
  };

  Defaults.prototype.reset = function () {
    function stripDiacritics (text) {
      // Used 'uni range + named function' from http://jsperf.com/diacritics/18
      function match(a) {
        return DIACRITICS[a] || a;
      }

      return text.replace(/[^\u0000-\u007E]/g, match);
    }

    function matcher (params, data) {
      // Always return the object if there is nothing to compare
      if ($.trim(params.term) === '') {
        return data;
      }

      // Do a recursive check for options with children
      if (data.children && data.children.length > 0) {
        // Clone the data object if there are children
        // This is required as we modify the object to remove any non-matches
        var match = $.extend(true, {}, data);

        // Check each child of the option
        for (var c = data.children.length - 1; c >= 0; c--) {
          var child = data.children[c];

          var matches = matcher(params, child);

          // If there wasn't a match, remove the object in the array
          if (matches == null) {
            match.children.splice(c, 1);
          }
        }

        // If any children matched, return the new object
        if (match.children.length > 0) {
          return match;
        }

        // If there were no matching children, check just the plain object
        return matcher(params, match);
      }

      var original = stripDiacritics(data.text).toUpperCase();
      var term = stripDiacritics(params.term).toUpperCase();

      // Check if the text contains the term
      if (original.indexOf(term) > -1) {
        return data;
      }

      // If it doesn't contain the term, don't return anything
      return null;
    }

    this.defaults = {
      amdBase: './',
      amdLanguageBase: './i18n/',
      closeOnSelect: true,
      debug: false,
      dropdownAutoWidth: false,
      escapeMarkup: Utils.escapeMarkup,
      language: EnglishTranslation,
      matcher: matcher,
      minimumInputLength: 0,
      maximumInputLength: 0,
      maximumSelectionLength: 0,
      minimumResultsForSearch: 0,
      selectOnClose: false,
      sorter: function (data) {
        return data;
      },
      templateResult: function (result) {
        return result.text;
      },
      templateSelection: function (selection) {
        return selection.text;
      },
      theme: 'default',
      width: 'resolve'
    };
  };

  Defaults.prototype.set = function (key, value) {
    var camelKey = $.camelCase(key);

    var data = {};
    data[camelKey] = value;

    var convertedData = Utils._convertData(data);

    $.extend(true, this.defaults, convertedData);
  };

  var defaults = new Defaults();

  return defaults;
});

S2.define('select2/options',[
  'require',
  'jquery',
  './defaults',
  './utils'
], function (require, $, Defaults, Utils) {
  function Options (options, $element) {
    this.options = options;

    if ($element != null) {
      this.fromElement($element);
    }

    this.options = Defaults.apply(this.options);

    if ($element && $element.is('input')) {
      var InputCompat = require(this.get('amdBase') + 'compat/inputData');

      this.options.dataAdapter = Utils.Decorate(
        this.options.dataAdapter,
        InputCompat
      );
    }
  }

  Options.prototype.fromElement = function ($e) {
    var excludedData = ['select2'];

    if (this.options.multiple == null) {
      this.options.multiple = $e.prop('multiple');
    }

    if (this.options.disabled == null) {
      this.options.disabled = $e.prop('disabled');
    }

    if (this.options.language == null) {
      if ($e.prop('lang')) {
        this.options.language = $e.prop('lang').toLowerCase();
      } else if ($e.closest('[lang]').prop('lang')) {
        this.options.language = $e.closest('[lang]').prop('lang');
      }
    }

    if (this.options.dir == null) {
      if ($e.prop('dir')) {
        this.options.dir = $e.prop('dir');
      } else if ($e.closest('[dir]').prop('dir')) {
        this.options.dir = $e.closest('[dir]').prop('dir');
      } else {
        this.options.dir = 'ltr';
      }
    }

    $e.prop('disabled', this.options.disabled);
    $e.prop('multiple', this.options.multiple);

    if (Utils.GetData($e[0], 'select2Tags')) {
      if (this.options.debug && window.console && console.warn) {
        console.warn(
          'Select2: The `data-select2-tags` attribute has been changed to ' +
          'use the `data-data` and `data-tags="true"` attributes and will be ' +
          'removed in future versions of Select2.'
        );
      }

      Utils.StoreData($e[0], 'data', Utils.GetData($e[0], 'select2Tags'));
      Utils.StoreData($e[0], 'tags', true);
    }

    if (Utils.GetData($e[0], 'ajaxUrl')) {
      if (this.options.debug && window.console && console.warn) {
        console.warn(
          'Select2: The `data-ajax-url` attribute has been changed to ' +
          '`data-ajax--url` and support for the old attribute will be removed' +
          ' in future versions of Select2.'
        );
      }

      $e.attr('ajax--url', Utils.GetData($e[0], 'ajaxUrl'));
      Utils.StoreData($e[0], 'ajax-Url', Utils.GetData($e[0], 'ajaxUrl'));
	  
    }

    var dataset = {};

    // Prefer the element's `dataset` attribute if it exists
    // jQuery 1.x does not correctly handle data attributes with multiple dashes
    if ($.fn.jquery && $.fn.jquery.substr(0, 2) == '1.' && $e[0].dataset) {
      dataset = $.extend(true, {}, $e[0].dataset, Utils.GetData($e[0]));
    } else {
      dataset = Utils.GetData($e[0]);
    }

    var data = $.extend(true, {}, dataset);

    data = Utils._convertData(data);

    for (var key in data) {
      if ($.inArray(key, excludedData) > -1) {
        continue;
      }

      if ($.isPlainObject(this.options[key])) {
        $.extend(this.options[key], data[key]);
      } else {
        this.options[key] = data[key];
      }
    }

    return this;
  };

  Options.prototype.get = function (key) {
    return this.options[key];
  };

  Options.prototype.set = function (key, val) {
    this.options[key] = val;
  };

  return Options;
});

S2.define('select2/core',[
  'jquery',
  './options',
  './utils',
  './keys'
], function ($, Options, Utils, KEYS) {
  var Select2 = function ($element, options) {
    if (Utils.GetData($element[0], 'select2') != null) {
      Utils.GetData($element[0], 'select2').destroy();
    }

    this.$element = $element;

    this.id = this._generateId($element);

    options = options || {};

    this.options = new Options(options, $element);

    Select2.__super__.constructor.call(this);

    // Set up the tabindex

    var tabindex = $element.attr('tabindex') || 0;
    Utils.StoreData($element[0], 'old-tabindex', tabindex);
    $element.attr('tabindex', '-1');

    // Set up containers and adapters

    var DataAdapter = this.options.get('dataAdapter');
    this.dataAdapter = new DataAdapter($element, this.options);

    var $container = this.render();

    this._placeContainer($container);

    var SelectionAdapter = this.options.get('selectionAdapter');
    this.selection = new SelectionAdapter($element, this.options);
    this.$selection = this.selection.render();

    this.selection.position(this.$selection, $container);

    var DropdownAdapter = this.options.get('dropdownAdapter');
    this.dropdown = new DropdownAdapter($element, this.options);
    this.$dropdown = this.dropdown.render();

    this.dropdown.position(this.$dropdown, $container);

    var ResultsAdapter = this.options.get('resultsAdapter');
    this.results = new ResultsAdapter($element, this.options, this.dataAdapter);
    this.$results = this.results.render();

    this.results.position(this.$results, this.$dropdown);

    // Bind events

    var self = this;

    // Bind the container to all of the adapters
    this._bindAdapters();

    // Register any DOM event handlers
    this._registerDomEvents();

    // Register any internal event handlers
    this._registerDataEvents();
    this._registerSelectionEvents();
    this._registerDropdownEvents();
    this._registerResultsEvents();
    this._registerEvents();

    // Set the initial state
    this.dataAdapter.current(function (initialData) {
      self.trigger('selection:update', {
        data: initialData
      });
    });

    // Hide the original select
    $element.addClass('select2-hidden-accessible');
    $element.attr('aria-hidden', 'true');

    // Synchronize any monitored attributes
    this._syncAttributes();

    Utils.StoreData($element[0], 'select2', this);
  };

  Utils.Extend(Select2, Utils.Observable);

  Select2.prototype._generateId = function ($element) {
    var id = '';

    if ($element.attr('id') != null) {
      id = $element.attr('id');
    } else if ($element.attr('name') != null) {
      id = $element.attr('name') + '-' + Utils.generateChars(2);
    } else {
      id = Utils.generateChars(4);
    }

    id = id.replace(/(:|\.|\[|\]|,)/g, '');
    id = 'select2-' + id;

    return id;
  };

  Select2.prototype._placeContainer = function ($container) {
    $container.insertAfter(this.$element);

    var width = this._resolveWidth(this.$element, this.options.get('width'));

    if (width != null) {
      $container.css('width', width);
    }
  };

  Select2.prototype._resolveWidth = function ($element, method) {
    var WIDTH = /^width:(([-+]?([0-9]*\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i;

    if (method == 'resolve') {
      var styleWidth = this._resolveWidth($element, 'style');

      if (styleWidth != null) {
        return styleWidth;
      }

      return this._resolveWidth($element, 'element');
    }

    if (method == 'element') {
      var elementWidth = $element.outerWidth(false);

      if (elementWidth <= 0) {
        return 'auto';
      }

      return elementWidth + 'px';
    }

    if (method == 'style') {
      var style = $element.attr('style');

      if (typeof(style) !== 'string') {
        return null;
      }

      var attrs = style.split(';');

      for (var i = 0, l = attrs.length; i < l; i = i + 1) {
        var attr = attrs[i].replace(/\s/g, '');
        var matches = attr.match(WIDTH);

        if (matches !== null && matches.length >= 1) {
          return matches[1];
        }
      }

      return null;
    }

    return method;
  };

  Select2.prototype._bindAdapters = function () {
    this.dataAdapter.bind(this, this.$container);
    this.selection.bind(this, this.$container);

    this.dropdown.bind(this, this.$container);
    this.results.bind(this, this.$container);
  };

  Select2.prototype._registerDomEvents = function () {
    var self = this;

    this.$element.on('change.select2', function () {
      self.dataAdapter.current(function (data) {
        self.trigger('selection:update', {
          data: data
        });
      });
    });

    this.$element.on('focus.select2', function (evt) {
      self.trigger('focus', evt);
    });

    this._syncA = Utils.bind(this._syncAttributes, this);
    this._syncS = Utils.bind(this._syncSubtree, this);

    if (this.$element[0].attachEvent) {
      this.$element[0].attachEvent('onpropertychange', this._syncA);
    }

    var observer = window.MutationObserver ||
      window.WebKitMutationObserver ||
      window.MozMutationObserver
    ;

    if (observer != null) {
      this._observer = new observer(function (mutations) {
        $.each(mutations, self._syncA);
        $.each(mutations, self._syncS);
      });
      this._observer.observe(this.$element[0], {
        attributes: true,
        childList: true,
        subtree: false
      });
    } else if (this.$element[0].addEventListener) {
      this.$element[0].addEventListener(
        'DOMAttrModified',
        self._syncA,
        false
      );
      this.$element[0].addEventListener(
        'DOMNodeInserted',
        self._syncS,
        false
      );
      this.$element[0].addEventListener(
        'DOMNodeRemoved',
        self._syncS,
        false
      );
    }
  };

  Select2.prototype._registerDataEvents = function () {
    var self = this;

    this.dataAdapter.on('*', function (name, params) {
      self.trigger(name, params);
    });
  };

  Select2.prototype._registerSelectionEvents = function () {
    var self = this;
    var nonRelayEvents = ['toggle', 'focus'];

    this.selection.on('toggle', function () {
      self.toggleDropdown();
    });

    this.selection.on('focus', function (params) {
      self.focus(params);
    });

    this.selection.on('*', function (name, params) {
      if ($.inArray(name, nonRelayEvents) !== -1) {
        return;
      }

      self.trigger(name, params);
    });
  };

  Select2.prototype._registerDropdownEvents = function () {
    var self = this;

    this.dropdown.on('*', function (name, params) {
      self.trigger(name, params);
    });
  };

  Select2.prototype._registerResultsEvents = function () {
    var self = this;

    this.results.on('*', function (name, params) {
      self.trigger(name, params);
    });
  };

  Select2.prototype._registerEvents = function () {
    var self = this;

    this.on('open', function () {
      self.$container.addClass('select2-container--open');
    });

    this.on('close', function () {
      self.$container.removeClass('select2-container--open');
    });

    this.on('enable', function () {
      self.$container.removeClass('select2-container--disabled');
    });

    this.on('disable', function () {
      self.$container.addClass('select2-container--disabled');
    });

    this.on('blur', function () {
      self.$container.removeClass('select2-container--focus');
    });

    this.on('query', function (params) {
      if (!self.isOpen()) {
        self.trigger('open', {});
      }

      this.dataAdapter.query(params, function (data) {
        self.trigger('results:all', {
          data: data,
          query: params
        });
      });
    });

    this.on('query:append', function (params) {
      this.dataAdapter.query(params, function (data) {
        self.trigger('results:append', {
          data: data,
          query: params
        });
      });
    });

  this.on('keypress', function (evt) {
      var key = evt.which;

  if (self.isOpen()) {
    if (key === KEYS.ESC || key === KEYS.TAB ||
        (key === KEYS.UP && evt.altKey)) {
      self.close();

      evt.preventDefault();
    } else if (key === KEYS.ENTER) {
      self.trigger('results:select', {});

      evt.preventDefault();
    } else if ((key === KEYS.SPACE && evt.ctrlKey)) {
      self.trigger('results:toggle', {});

      evt.preventDefault();
    } else if (key === KEYS.UP) {
       
      self.trigger('results:previous', {});
       
      evt.preventDefault();
    } else if (key === KEYS.DOWN) {
        
        self.trigger('results:next', {});

      evt.preventDefault();
    }
  } else {
    if (key === KEYS.ENTER || key === KEYS.SPACE ||
        (key === KEYS.DOWN && evt.altKey)) {
        
      self.open();

      evt.preventDefault();
    } else {
      if (key === KEYS.SHIFT || key === KEYS.CTRL || key === KEYS.ALT || key === KEYS.TAB)
        return;
      
      target = self.$container;

      if (!target.length)
        return;

      target = target.prev();
      self.open();
 
    }
  }
});
  };

  Select2.prototype._syncAttributes = function () {
    this.options.set('disabled', this.$element.prop('disabled'));

    if (this.options.get('disabled')) {
      if (this.isOpen()) {
        this.close();
      }

      this.trigger('disable', {});
    } else {
      this.trigger('enable', {});
    }
  };

  Select2.prototype._syncSubtree = function (evt, mutations) {
    var changed = false;
    var self = this;

    // Ignore any mutation events raised for elements that aren't options or
    // optgroups. This handles the case when the select element is destroyed
    if (
      evt && evt.target && (
        evt.target.nodeName !== 'OPTION' && evt.target.nodeName !== 'OPTGROUP'
      )
    ) {
      return;
    }

    if (!mutations) {
      // If mutation events aren't supported, then we can only assume that the
      // change affected the selections
      changed = true;
    } else if (mutations.addedNodes && mutations.addedNodes.length > 0) {
      for (var n = 0; n < mutations.addedNodes.length; n++) {
        var node = mutations.addedNodes[n];

        if (node.selected) {
          changed = true;
        }
      }
    } else if (mutations.removedNodes && mutations.removedNodes.length > 0) {
      changed = true;
    }

    // Only re-pull the data if we think there is a change
    if (changed) {
      this.dataAdapter.current(function (currentData) {
        self.trigger('selection:update', {
          data: currentData
        });
      });
    }
  };

  /**
   * Override the trigger method to automatically trigger pre-events when
   * there are events that can be prevented.
   */
  Select2.prototype.trigger = function (name, args) {
    var actualTrigger = Select2.__super__.trigger;
    var preTriggerMap = {
      'open': 'opening',
      'close': 'closing',
      'select': 'selecting',
      'unselect': 'unselecting',
      'clear': 'clearing'
    };

    if (args === undefined) {
      args = {};
    }

    if (name in preTriggerMap) {
      var preTriggerName = preTriggerMap[name];
      var preTriggerArgs = {
        prevented: false,
        name: name,
        args: args
      };

      actualTrigger.call(this, preTriggerName, preTriggerArgs);

      if (preTriggerArgs.prevented) {
        args.prevented = true;

        return;
      }
    }

    actualTrigger.call(this, name, args);
  };

  Select2.prototype.toggleDropdown = function () {
    if (this.options.get('disabled')) {
      return;
    }

    if (this.isOpen()) {
      this.close();
    } else {
      this.open();
    }
  };

  Select2.prototype.open = function () {
    if (this.isOpen()) {
      return;
    }

    this.trigger('query', {});
  };

  Select2.prototype.close = function () {
    if (!this.isOpen()) {
      return;
    }

    this.trigger('close', {});
  };

  Select2.prototype.isOpen = function () {
    return this.$container.hasClass('select2-container--open');
  };

  Select2.prototype.hasFocus = function () {
    return this.$container.hasClass('select2-container--focus');
  };

  Select2.prototype.focus = function (data) {
    // No need to re-trigger focus events if we are already focused
    if (this.hasFocus()) {
      return;
    }

    this.$container.addClass('select2-container--focus');
    this.trigger('focus', {});
  };

  Select2.prototype.enable = function (args) {
    if (this.options.get('debug') && window.console && console.warn) {
      console.warn(
        'Select2: The `select2("enable")` method has been deprecated and will' +
        ' be removed in later Select2 versions. Use $element.prop("disabled")' +
        ' instead.'
      );
    }

    if (args == null || args.length === 0) {
      args = [true];
    }

    var disabled = !args[0];

    this.$element.prop('disabled', disabled);
  };

  Select2.prototype.data = function () {
    if (this.options.get('debug') &&
        arguments.length > 0 && window.console && console.warn) {
      console.warn(
        'Select2: Data can no longer be set using `select2("data")`. You ' +
        'should consider setting the value instead using `$element.val()`.'
      );
    }

    var data = [];

    this.dataAdapter.current(function (currentData) {
      data = currentData;
    });

    return data;
  };

  Select2.prototype.val = function (args) {
    if (this.options.get('debug') && window.console && console.warn) {
      console.warn(
        'Select2: The `select2("val")` method has been deprecated and will be' +
        ' removed in later Select2 versions. Use $element.val() instead.'
      );
    }

    if (args == null || args.length === 0) {
      return this.$element.val();
    }

    var newVal = args[0];

    if ($.isArray(newVal)) {
      newVal = $.map(newVal, function (obj) {
        return obj.toString();
      });
    }

    this.$element.val(newVal).trigger('change');
  };

  Select2.prototype.destroy = function () {
    this.$container.remove();

    if (this.$element[0].detachEvent) {
      this.$element[0].detachEvent('onpropertychange', this._syncA);
    }

    if (this._observer != null) {
      this._observer.disconnect();
      this._observer = null;
    } else if (this.$element[0].removeEventListener) {
      this.$element[0]
        .removeEventListener('DOMAttrModified', this._syncA, false);
      this.$element[0]
        .removeEventListener('DOMNodeInserted', this._syncS, false);
      this.$element[0]
        .removeEventListener('DOMNodeRemoved', this._syncS, false);
    }

    this._syncA = null;
    this._syncS = null;

    this.$element.off('.select2');
    this.$element.attr('tabindex',
    Utils.GetData(this.$element[0], 'old-tabindex'));

    this.$element.removeClass('select2-hidden-accessible');
    this.$element.attr('aria-hidden', 'false');
    Utils.RemoveData(this.$element[0]);

    this.dataAdapter.destroy();
    this.selection.destroy();
    this.dropdown.destroy();
    this.results.destroy();

    this.dataAdapter = null;
    this.selection = null;
    this.dropdown = null;
    this.results = null;
  };

  Select2.prototype.render = function () {
    var $container = $(
      '<span class="select2 select2-container">' +
        '<span class="selection"></span>' +
        '<span class="dropdown-wrapper" aria-hidden="true"></span>' +
      '</span>'
    );

    $container.attr('dir', this.options.get('dir'));

    this.$container = $container;

    this.$container.addClass('select2-container--' + this.options.get('theme'));

    Utils.StoreData($container[0], 'element', this.$element);

    return $container;
  };

  return Select2;
});

S2.define('jquery-mousewheel',[
  'jquery'
], function ($) {
  // Used to shim jQuery.mousewheel for non-full builds.
  return $;
});

S2.define('jquery.select2',[
  'jquery',
  'jquery-mousewheel',

  './select2/core',
  './select2/defaults',
  './select2/utils'
], function ($, _, Select2, Defaults, Utils) {
  if ($.fn.select2 == null) {
    // All methods that should return the element
    var thisMethods = ['open', 'close', 'destroy'];

    $.fn.select2 = function (options) {
      options = options || {};

      if (typeof options === 'object') {
        this.each(function () {
          var instanceOptions = $.extend(true, {}, options);

          var instance = new Select2($(this), instanceOptions);
        });

        return this;
      } else if (typeof options === 'string') {
        var ret;
        var args = Array.prototype.slice.call(arguments, 1);

        this.each(function () {
          var instance = Utils.GetData(this, 'select2');

          if (instance == null && window.console && console.error) {
            console.error(
              'The select2(\'' + options + '\') method was called on an ' +
              'element that is not using Select2.'
            );
          }

          ret = instance[options].apply(instance, args);
        });

        // Check if we should be returning `this`
        if ($.inArray(options, thisMethods) > -1) {
          return this;
        }

        return ret;
      } else {
        throw new Error('Invalid arguments for Select2: ' + options);
      }
    };
  }

  if ($.fn.select2.defaults == null) {
    $.fn.select2.defaults = Defaults;
  }

  return Select2;
});

  // Return the AMD loader configuration so it can be used outside of this file
  return {
    define: S2.define,
    require: S2.require
  };
}());

  // Autoload the jQuery bindings
  // We know that all of the modules exist above this, so we're safe
  var select2 = S2.require('jquery.select2');

  // Hold the AMD module references on the jQuery function that was just loaded
  // This allows Select2 to use the internal loader outside of this file, such
  // as in the language files.
  jQuery.fn.select2.amd = S2;

  // Return the Select2 instance for anyone who is importing it.
  return select2;
}));
;
/******/ (function(modules) { // webpackBootstrap
/******/ 	function hotDisposeChunk(chunkId) {
/******/ 		delete installedChunks[chunkId];
/******/ 	}
/******/ 	var parentHotUpdateCallback = window["webpackHotUpdate"];
/******/ 	window["webpackHotUpdate"] = // eslint-disable-next-line no-unused-vars
/******/ 	function webpackHotUpdateCallback(chunkId, moreModules) {
/******/ 		hotAddUpdateChunk(chunkId, moreModules);
/******/ 		if (parentHotUpdateCallback) parentHotUpdateCallback(chunkId, moreModules);
/******/ 	} ;
/******/
/******/ 	// eslint-disable-next-line no-unused-vars
/******/ 	function hotDownloadUpdateChunk(chunkId) {
/******/ 		var script = document.createElement("script");
/******/ 		script.charset = "utf-8";
/******/ 		script.src = __webpack_require__.p + "" + chunkId + "." + hotCurrentHash + ".hot-update.js";
/******/ 		if (null) script.crossOrigin = null;
/******/ 		document.head.appendChild(script);
/******/ 	}
/******/
/******/ 	// eslint-disable-next-line no-unused-vars
/******/ 	function hotDownloadManifest(requestTimeout) {
/******/ 		requestTimeout = requestTimeout || 10000;
/******/ 		return new Promise(function(resolve, reject) {
/******/ 			if (typeof XMLHttpRequest === "undefined") {
/******/ 				return reject(new Error("No browser support"));
/******/ 			}
/******/ 			try {
/******/ 				var request = new XMLHttpRequest();
/******/ 				var requestPath = __webpack_require__.p + "" + hotCurrentHash + ".hot-update.json";
/******/ 				request.open("GET", requestPath, true);
/******/ 				request.timeout = requestTimeout;
/******/ 				request.send(null);
/******/ 			} catch (err) {
/******/ 				return reject(err);
/******/ 			}
/******/ 			request.onreadystatechange = function() {
/******/ 				if (request.readyState !== 4) return;
/******/ 				if (request.status === 0) {
/******/ 					// timeout
/******/ 					reject(
/******/ 						new Error("Manifest request to " + requestPath + " timed out.")
/******/ 					);
/******/ 				} else if (request.status === 404) {
/******/ 					// no update available
/******/ 					resolve();
/******/ 				} else if (request.status !== 200 && request.status !== 304) {
/******/ 					// other failure
/******/ 					reject(new Error("Manifest request to " + requestPath + " failed."));
/******/ 				} else {
/******/ 					// success
/******/ 					try {
/******/ 						var update = JSON.parse(request.responseText);
/******/ 					} catch (e) {
/******/ 						reject(e);
/******/ 						return;
/******/ 					}
/******/ 					resolve(update);
/******/ 				}
/******/ 			};
/******/ 		});
/******/ 	}
/******/
/******/ 	var hotApplyOnUpdate = true;
/******/ 	// eslint-disable-next-line no-unused-vars
/******/ 	var hotCurrentHash = "f51c2ea94fd5a3f0b946";
/******/ 	var hotRequestTimeout = 10000;
/******/ 	var hotCurrentModuleData = {};
/******/ 	var hotCurrentChildModule;
/******/ 	// eslint-disable-next-line no-unused-vars
/******/ 	var hotCurrentParents = [];
/******/ 	// eslint-disable-next-line no-unused-vars
/******/ 	var hotCurrentParentsTemp = [];
/******/
/******/ 	// eslint-disable-next-line no-unused-vars
/******/ 	function hotCreateRequire(moduleId) {
/******/ 		var me = installedModules[moduleId];
/******/ 		if (!me) return __webpack_require__;
/******/ 		var fn = function(request) {
/******/ 			if (me.hot.active) {
/******/ 				if (installedModules[request]) {
/******/ 					if (installedModules[request].parents.indexOf(moduleId) === -1) {
/******/ 						installedModules[request].parents.push(moduleId);
/******/ 					}
/******/ 				} else {
/******/ 					hotCurrentParents = [moduleId];
/******/ 					hotCurrentChildModule = request;
/******/ 				}
/******/ 				if (me.children.indexOf(request) === -1) {
/******/ 					me.children.push(request);
/******/ 				}
/******/ 			} else {
/******/ 				console.warn(
/******/ 					"[HMR] unexpected require(" +
/******/ 						request +
/******/ 						") from disposed module " +
/******/ 						moduleId
/******/ 				);
/******/ 				hotCurrentParents = [];
/******/ 			}
/******/ 			return __webpack_require__(request);
/******/ 		};
/******/ 		var ObjectFactory = function ObjectFactory(name) {
/******/ 			return {
/******/ 				configurable: true,
/******/ 				enumerable: true,
/******/ 				get: function() {
/******/ 					return __webpack_require__[name];
/******/ 				},
/******/ 				set: function(value) {
/******/ 					__webpack_require__[name] = value;
/******/ 				}
/******/ 			};
/******/ 		};
/******/ 		for (var name in __webpack_require__) {
/******/ 			if (
/******/ 				Object.prototype.hasOwnProperty.call(__webpack_require__, name) &&
/******/ 				name !== "e" &&
/******/ 				name !== "t"
/******/ 			) {
/******/ 				Object.defineProperty(fn, name, ObjectFactory(name));
/******/ 			}
/******/ 		}
/******/ 		fn.e = function(chunkId) {
/******/ 			if (hotStatus === "ready") hotSetStatus("prepare");
/******/ 			hotChunksLoading++;
/******/ 			return __webpack_require__.e(chunkId).then(finishChunkLoading, function(err) {
/******/ 				finishChunkLoading();
/******/ 				throw err;
/******/ 			});
/******/
/******/ 			function finishChunkLoading() {
/******/ 				hotChunksLoading--;
/******/ 				if (hotStatus === "prepare") {
/******/ 					if (!hotWaitingFilesMap[chunkId]) {
/******/ 						hotEnsureUpdateChunk(chunkId);
/******/ 					}
/******/ 					if (hotChunksLoading === 0 && hotWaitingFiles === 0) {
/******/ 						hotUpdateDownloaded();
/******/ 					}
/******/ 				}
/******/ 			}
/******/ 		};
/******/ 		fn.t = function(value, mode) {
/******/ 			if (mode & 1) value = fn(value);
/******/ 			return __webpack_require__.t(value, mode & ~1);
/******/ 		};
/******/ 		return fn;
/******/ 	}
/******/
/******/ 	// eslint-disable-next-line no-unused-vars
/******/ 	function hotCreateModule(moduleId) {
/******/ 		var hot = {
/******/ 			// private stuff
/******/ 			_acceptedDependencies: {},
/******/ 			_declinedDependencies: {},
/******/ 			_selfAccepted: false,
/******/ 			_selfDeclined: false,
/******/ 			_disposeHandlers: [],
/******/ 			_main: hotCurrentChildModule !== moduleId,
/******/
/******/ 			// Module API
/******/ 			active: true,
/******/ 			accept: function(dep, callback) {
/******/ 				if (dep === undefined) hot._selfAccepted = true;
/******/ 				else if (typeof dep === "function") hot._selfAccepted = dep;
/******/ 				else if (typeof dep === "object")
/******/ 					for (var i = 0; i < dep.length; i++)
/******/ 						hot._acceptedDependencies[dep[i]] = callback || function() {};
/******/ 				else hot._acceptedDependencies[dep] = callback || function() {};
/******/ 			},
/******/ 			decline: function(dep) {
/******/ 				if (dep === undefined) hot._selfDeclined = true;
/******/ 				else if (typeof dep === "object")
/******/ 					for (var i = 0; i < dep.length; i++)
/******/ 						hot._declinedDependencies[dep[i]] = true;
/******/ 				else hot._declinedDependencies[dep] = true;
/******/ 			},
/******/ 			dispose: function(callback) {
/******/ 				hot._disposeHandlers.push(callback);
/******/ 			},
/******/ 			addDisposeHandler: function(callback) {
/******/ 				hot._disposeHandlers.push(callback);
/******/ 			},
/******/ 			removeDisposeHandler: function(callback) {
/******/ 				var idx = hot._disposeHandlers.indexOf(callback);
/******/ 				if (idx >= 0) hot._disposeHandlers.splice(idx, 1);
/******/ 			},
/******/
/******/ 			// Management API
/******/ 			check: hotCheck,
/******/ 			apply: hotApply,
/******/ 			status: function(l) {
/******/ 				if (!l) return hotStatus;
/******/ 				hotStatusHandlers.push(l);
/******/ 			},
/******/ 			addStatusHandler: function(l) {
/******/ 				hotStatusHandlers.push(l);
/******/ 			},
/******/ 			removeStatusHandler: function(l) {
/******/ 				var idx = hotStatusHandlers.indexOf(l);
/******/ 				if (idx >= 0) hotStatusHandlers.splice(idx, 1);
/******/ 			},
/******/
/******/ 			//inherit from previous dispose call
/******/ 			data: hotCurrentModuleData[moduleId]
/******/ 		};
/******/ 		hotCurrentChildModule = undefined;
/******/ 		return hot;
/******/ 	}
/******/
/******/ 	var hotStatusHandlers = [];
/******/ 	var hotStatus = "idle";
/******/
/******/ 	function hotSetStatus(newStatus) {
/******/ 		hotStatus = newStatus;
/******/ 		for (var i = 0; i < hotStatusHandlers.length; i++)
/******/ 			hotStatusHandlers[i].call(null, newStatus);
/******/ 	}
/******/
/******/ 	// while downloading
/******/ 	var hotWaitingFiles = 0;
/******/ 	var hotChunksLoading = 0;
/******/ 	var hotWaitingFilesMap = {};
/******/ 	var hotRequestedFilesMap = {};
/******/ 	var hotAvailableFilesMap = {};
/******/ 	var hotDeferred;
/******/
/******/ 	// The update info
/******/ 	var hotUpdate, hotUpdateNewHash;
/******/
/******/ 	function toModuleId(id) {
/******/ 		var isNumber = +id + "" === id;
/******/ 		return isNumber ? +id : id;
/******/ 	}
/******/
/******/ 	function hotCheck(apply) {
/******/ 		if (hotStatus !== "idle") {
/******/ 			throw new Error("check() is only allowed in idle status");
/******/ 		}
/******/ 		hotApplyOnUpdate = apply;
/******/ 		hotSetStatus("check");
/******/ 		return hotDownloadManifest(hotRequestTimeout).then(function(update) {
/******/ 			if (!update) {
/******/ 				hotSetStatus("idle");
/******/ 				return null;
/******/ 			}
/******/ 			hotRequestedFilesMap = {};
/******/ 			hotWaitingFilesMap = {};
/******/ 			hotAvailableFilesMap = update.c;
/******/ 			hotUpdateNewHash = update.h;
/******/
/******/ 			hotSetStatus("prepare");
/******/ 			var promise = new Promise(function(resolve, reject) {
/******/ 				hotDeferred = {
/******/ 					resolve: resolve,
/******/ 					reject: reject
/******/ 				};
/******/ 			});
/******/ 			hotUpdate = {};
/******/ 			var chunkId = 0;
/******/ 			// eslint-disable-next-line no-lone-blocks
/******/ 			{
/******/ 				/*globals chunkId */
/******/ 				hotEnsureUpdateChunk(chunkId);
/******/ 			}
/******/ 			if (
/******/ 				hotStatus === "prepare" &&
/******/ 				hotChunksLoading === 0 &&
/******/ 				hotWaitingFiles === 0
/******/ 			) {
/******/ 				hotUpdateDownloaded();
/******/ 			}
/******/ 			return promise;
/******/ 		});
/******/ 	}
/******/
/******/ 	// eslint-disable-next-line no-unused-vars
/******/ 	function hotAddUpdateChunk(chunkId, moreModules) {
/******/ 		if (!hotAvailableFilesMap[chunkId] || !hotRequestedFilesMap[chunkId])
/******/ 			return;
/******/ 		hotRequestedFilesMap[chunkId] = false;
/******/ 		for (var moduleId in moreModules) {
/******/ 			if (Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {
/******/ 				hotUpdate[moduleId] = moreModules[moduleId];
/******/ 			}
/******/ 		}
/******/ 		if (--hotWaitingFiles === 0 && hotChunksLoading === 0) {
/******/ 			hotUpdateDownloaded();
/******/ 		}
/******/ 	}
/******/
/******/ 	function hotEnsureUpdateChunk(chunkId) {
/******/ 		if (!hotAvailableFilesMap[chunkId]) {
/******/ 			hotWaitingFilesMap[chunkId] = true;
/******/ 		} else {
/******/ 			hotRequestedFilesMap[chunkId] = true;
/******/ 			hotWaitingFiles++;
/******/ 			hotDownloadUpdateChunk(chunkId);
/******/ 		}
/******/ 	}
/******/
/******/ 	function hotUpdateDownloaded() {
/******/ 		hotSetStatus("ready");
/******/ 		var deferred = hotDeferred;
/******/ 		hotDeferred = null;
/******/ 		if (!deferred) return;
/******/ 		if (hotApplyOnUpdate) {
/******/ 			// Wrap deferred object in Promise to mark it as a well-handled Promise to
/******/ 			// avoid triggering uncaught exception warning in Chrome.
/******/ 			// See https://bugs.chromium.org/p/chromium/issues/detail?id=465666
/******/ 			Promise.resolve()
/******/ 				.then(function() {
/******/ 					return hotApply(hotApplyOnUpdate);
/******/ 				})
/******/ 				.then(
/******/ 					function(result) {
/******/ 						deferred.resolve(result);
/******/ 					},
/******/ 					function(err) {
/******/ 						deferred.reject(err);
/******/ 					}
/******/ 				);
/******/ 		} else {
/******/ 			var outdatedModules = [];
/******/ 			for (var id in hotUpdate) {
/******/ 				if (Object.prototype.hasOwnProperty.call(hotUpdate, id)) {
/******/ 					outdatedModules.push(toModuleId(id));
/******/ 				}
/******/ 			}
/******/ 			deferred.resolve(outdatedModules);
/******/ 		}
/******/ 	}
/******/
/******/ 	function hotApply(options) {
/******/ 		if (hotStatus !== "ready")
/******/ 			throw new Error("apply() is only allowed in ready status");
/******/ 		options = options || {};
/******/
/******/ 		var cb;
/******/ 		var i;
/******/ 		var j;
/******/ 		var module;
/******/ 		var moduleId;
/******/
/******/ 		function getAffectedStuff(updateModuleId) {
/******/ 			var outdatedModules = [updateModuleId];
/******/ 			var outdatedDependencies = {};
/******/
/******/ 			var queue = outdatedModules.slice().map(function(id) {
/******/ 				return {
/******/ 					chain: [id],
/******/ 					id: id
/******/ 				};
/******/ 			});
/******/ 			while (queue.length > 0) {
/******/ 				var queueItem = queue.pop();
/******/ 				var moduleId = queueItem.id;
/******/ 				var chain = queueItem.chain;
/******/ 				module = installedModules[moduleId];
/******/ 				if (!module || module.hot._selfAccepted) continue;
/******/ 				if (module.hot._selfDeclined) {
/******/ 					return {
/******/ 						type: "self-declined",
/******/ 						chain: chain,
/******/ 						moduleId: moduleId
/******/ 					};
/******/ 				}
/******/ 				if (module.hot._main) {
/******/ 					return {
/******/ 						type: "unaccepted",
/******/ 						chain: chain,
/******/ 						moduleId: moduleId
/******/ 					};
/******/ 				}
/******/ 				for (var i = 0; i < module.parents.length; i++) {
/******/ 					var parentId = module.parents[i];
/******/ 					var parent = installedModules[parentId];
/******/ 					if (!parent) continue;
/******/ 					if (parent.hot._declinedDependencies[moduleId]) {
/******/ 						return {
/******/ 							type: "declined",
/******/ 							chain: chain.concat([parentId]),
/******/ 							moduleId: moduleId,
/******/ 							parentId: parentId
/******/ 						};
/******/ 					}
/******/ 					if (outdatedModules.indexOf(parentId) !== -1) continue;
/******/ 					if (parent.hot._acceptedDependencies[moduleId]) {
/******/ 						if (!outdatedDependencies[parentId])
/******/ 							outdatedDependencies[parentId] = [];
/******/ 						addAllToSet(outdatedDependencies[parentId], [moduleId]);
/******/ 						continue;
/******/ 					}
/******/ 					delete outdatedDependencies[parentId];
/******/ 					outdatedModules.push(parentId);
/******/ 					queue.push({
/******/ 						chain: chain.concat([parentId]),
/******/ 						id: parentId
/******/ 					});
/******/ 				}
/******/ 			}
/******/
/******/ 			return {
/******/ 				type: "accepted",
/******/ 				moduleId: updateModuleId,
/******/ 				outdatedModules: outdatedModules,
/******/ 				outdatedDependencies: outdatedDependencies
/******/ 			};
/******/ 		}
/******/
/******/ 		function addAllToSet(a, b) {
/******/ 			for (var i = 0; i < b.length; i++) {
/******/ 				var item = b[i];
/******/ 				if (a.indexOf(item) === -1) a.push(item);
/******/ 			}
/******/ 		}
/******/
/******/ 		// at begin all updates modules are outdated
/******/ 		// the "outdated" status can propagate to parents if they don't accept the children
/******/ 		var outdatedDependencies = {};
/******/ 		var outdatedModules = [];
/******/ 		var appliedUpdate = {};
/******/
/******/ 		var warnUnexpectedRequire = function warnUnexpectedRequire() {
/******/ 			console.warn(
/******/ 				"[HMR] unexpected require(" + result.moduleId + ") to disposed module"
/******/ 			);
/******/ 		};
/******/
/******/ 		for (var id in hotUpdate) {
/******/ 			if (Object.prototype.hasOwnProperty.call(hotUpdate, id)) {
/******/ 				moduleId = toModuleId(id);
/******/ 				/** @type {TODO} */
/******/ 				var result;
/******/ 				if (hotUpdate[id]) {
/******/ 					result = getAffectedStuff(moduleId);
/******/ 				} else {
/******/ 					result = {
/******/ 						type: "disposed",
/******/ 						moduleId: id
/******/ 					};
/******/ 				}
/******/ 				/** @type {Error|false} */
/******/ 				var abortError = false;
/******/ 				var doApply = false;
/******/ 				var doDispose = false;
/******/ 				var chainInfo = "";
/******/ 				if (result.chain) {
/******/ 					chainInfo = "\nUpdate propagation: " + result.chain.join(" -> ");
/******/ 				}
/******/ 				switch (result.type) {
/******/ 					case "self-declined":
/******/ 						if (options.onDeclined) options.onDeclined(result);
/******/ 						if (!options.ignoreDeclined)
/******/ 							abortError = new Error(
/******/ 								"Aborted because of self decline: " +
/******/ 									result.moduleId +
/******/ 									chainInfo
/******/ 							);
/******/ 						break;
/******/ 					case "declined":
/******/ 						if (options.onDeclined) options.onDeclined(result);
/******/ 						if (!options.ignoreDeclined)
/******/ 							abortError = new Error(
/******/ 								"Aborted because of declined dependency: " +
/******/ 									result.moduleId +
/******/ 									" in " +
/******/ 									result.parentId +
/******/ 									chainInfo
/******/ 							);
/******/ 						break;
/******/ 					case "unaccepted":
/******/ 						if (options.onUnaccepted) options.onUnaccepted(result);
/******/ 						if (!options.ignoreUnaccepted)
/******/ 							abortError = new Error(
/******/ 								"Aborted because " + moduleId + " is not accepted" + chainInfo
/******/ 							);
/******/ 						break;
/******/ 					case "accepted":
/******/ 						if (options.onAccepted) options.onAccepted(result);
/******/ 						doApply = true;
/******/ 						break;
/******/ 					case "disposed":
/******/ 						if (options.onDisposed) options.onDisposed(result);
/******/ 						doDispose = true;
/******/ 						break;
/******/ 					default:
/******/ 						throw new Error("Unexception type " + result.type);
/******/ 				}
/******/ 				if (abortError) {
/******/ 					hotSetStatus("abort");
/******/ 					return Promise.reject(abortError);
/******/ 				}
/******/ 				if (doApply) {
/******/ 					appliedUpdate[moduleId] = hotUpdate[moduleId];
/******/ 					addAllToSet(outdatedModules, result.outdatedModules);
/******/ 					for (moduleId in result.outdatedDependencies) {
/******/ 						if (
/******/ 							Object.prototype.hasOwnProperty.call(
/******/ 								result.outdatedDependencies,
/******/ 								moduleId
/******/ 							)
/******/ 						) {
/******/ 							if (!outdatedDependencies[moduleId])
/******/ 								outdatedDependencies[moduleId] = [];
/******/ 							addAllToSet(
/******/ 								outdatedDependencies[moduleId],
/******/ 								result.outdatedDependencies[moduleId]
/******/ 							);
/******/ 						}
/******/ 					}
/******/ 				}
/******/ 				if (doDispose) {
/******/ 					addAllToSet(outdatedModules, [result.moduleId]);
/******/ 					appliedUpdate[moduleId] = warnUnexpectedRequire;
/******/ 				}
/******/ 			}
/******/ 		}
/******/
/******/ 		// Store self accepted outdated modules to require them later by the module system
/******/ 		var outdatedSelfAcceptedModules = [];
/******/ 		for (i = 0; i < outdatedModules.length; i++) {
/******/ 			moduleId = outdatedModules[i];
/******/ 			if (
/******/ 				installedModules[moduleId] &&
/******/ 				installedModules[moduleId].hot._selfAccepted
/******/ 			)
/******/ 				outdatedSelfAcceptedModules.push({
/******/ 					module: moduleId,
/******/ 					errorHandler: installedModules[moduleId].hot._selfAccepted
/******/ 				});
/******/ 		}
/******/
/******/ 		// Now in "dispose" phase
/******/ 		hotSetStatus("dispose");
/******/ 		Object.keys(hotAvailableFilesMap).forEach(function(chunkId) {
/******/ 			if (hotAvailableFilesMap[chunkId] === false) {
/******/ 				hotDisposeChunk(chunkId);
/******/ 			}
/******/ 		});
/******/
/******/ 		var idx;
/******/ 		var queue = outdatedModules.slice();
/******/ 		while (queue.length > 0) {
/******/ 			moduleId = queue.pop();
/******/ 			module = installedModules[moduleId];
/******/ 			if (!module) continue;
/******/
/******/ 			var data = {};
/******/
/******/ 			// Call dispose handlers
/******/ 			var disposeHandlers = module.hot._disposeHandlers;
/******/ 			for (j = 0; j < disposeHandlers.length; j++) {
/******/ 				cb = disposeHandlers[j];
/******/ 				cb(data);
/******/ 			}
/******/ 			hotCurrentModuleData[moduleId] = data;
/******/
/******/ 			// disable module (this disables requires from this module)
/******/ 			module.hot.active = false;
/******/
/******/ 			// remove module from cache
/******/ 			delete installedModules[moduleId];
/******/
/******/ 			// when disposing there is no need to call dispose handler
/******/ 			delete outdatedDependencies[moduleId];
/******/
/******/ 			// remove "parents" references from all children
/******/ 			for (j = 0; j < module.children.length; j++) {
/******/ 				var child = installedModules[module.children[j]];
/******/ 				if (!child) continue;
/******/ 				idx = child.parents.indexOf(moduleId);
/******/ 				if (idx >= 0) {
/******/ 					child.parents.splice(idx, 1);
/******/ 				}
/******/ 			}
/******/ 		}
/******/
/******/ 		// remove outdated dependency from module children
/******/ 		var dependency;
/******/ 		var moduleOutdatedDependencies;
/******/ 		for (moduleId in outdatedDependencies) {
/******/ 			if (
/******/ 				Object.prototype.hasOwnProperty.call(outdatedDependencies, moduleId)
/******/ 			) {
/******/ 				module = installedModules[moduleId];
/******/ 				if (module) {
/******/ 					moduleOutdatedDependencies = outdatedDependencies[moduleId];
/******/ 					for (j = 0; j < moduleOutdatedDependencies.length; j++) {
/******/ 						dependency = moduleOutdatedDependencies[j];
/******/ 						idx = module.children.indexOf(dependency);
/******/ 						if (idx >= 0) module.children.splice(idx, 1);
/******/ 					}
/******/ 				}
/******/ 			}
/******/ 		}
/******/
/******/ 		// Not in "apply" phase
/******/ 		hotSetStatus("apply");
/******/
/******/ 		hotCurrentHash = hotUpdateNewHash;
/******/
/******/ 		// insert new code
/******/ 		for (moduleId in appliedUpdate) {
/******/ 			if (Object.prototype.hasOwnProperty.call(appliedUpdate, moduleId)) {
/******/ 				modules[moduleId] = appliedUpdate[moduleId];
/******/ 			}
/******/ 		}
/******/
/******/ 		// call accept handlers
/******/ 		var error = null;
/******/ 		for (moduleId in outdatedDependencies) {
/******/ 			if (
/******/ 				Object.prototype.hasOwnProperty.call(outdatedDependencies, moduleId)
/******/ 			) {
/******/ 				module = installedModules[moduleId];
/******/ 				if (module) {
/******/ 					moduleOutdatedDependencies = outdatedDependencies[moduleId];
/******/ 					var callbacks = [];
/******/ 					for (i = 0; i < moduleOutdatedDependencies.length; i++) {
/******/ 						dependency = moduleOutdatedDependencies[i];
/******/ 						cb = module.hot._acceptedDependencies[dependency];
/******/ 						if (cb) {
/******/ 							if (callbacks.indexOf(cb) !== -1) continue;
/******/ 							callbacks.push(cb);
/******/ 						}
/******/ 					}
/******/ 					for (i = 0; i < callbacks.length; i++) {
/******/ 						cb = callbacks[i];
/******/ 						try {
/******/ 							cb(moduleOutdatedDependencies);
/******/ 						} catch (err) {
/******/ 							if (options.onErrored) {
/******/ 								options.onErrored({
/******/ 									type: "accept-errored",
/******/ 									moduleId: moduleId,
/******/ 									dependencyId: moduleOutdatedDependencies[i],
/******/ 									error: err
/******/ 								});
/******/ 							}
/******/ 							if (!options.ignoreErrored) {
/******/ 								if (!error) error = err;
/******/ 							}
/******/ 						}
/******/ 					}
/******/ 				}
/******/ 			}
/******/ 		}
/******/
/******/ 		// Load self accepted modules
/******/ 		for (i = 0; i < outdatedSelfAcceptedModules.length; i++) {
/******/ 			var item = outdatedSelfAcceptedModules[i];
/******/ 			moduleId = item.module;
/******/ 			hotCurrentParents = [moduleId];
/******/ 			try {
/******/ 				__webpack_require__(moduleId);
/******/ 			} catch (err) {
/******/ 				if (typeof item.errorHandler === "function") {
/******/ 					try {
/******/ 						item.errorHandler(err);
/******/ 					} catch (err2) {
/******/ 						if (options.onErrored) {
/******/ 							options.onErrored({
/******/ 								type: "self-accept-error-handler-errored",
/******/ 								moduleId: moduleId,
/******/ 								error: err2,
/******/ 								originalError: err
/******/ 							});
/******/ 						}
/******/ 						if (!options.ignoreErrored) {
/******/ 							if (!error) error = err2;
/******/ 						}
/******/ 						if (!error) error = err;
/******/ 					}
/******/ 				} else {
/******/ 					if (options.onErrored) {
/******/ 						options.onErrored({
/******/ 							type: "self-accept-errored",
/******/ 							moduleId: moduleId,
/******/ 							error: err
/******/ 						});
/******/ 					}
/******/ 					if (!options.ignoreErrored) {
/******/ 						if (!error) error = err;
/******/ 					}
/******/ 				}
/******/ 			}
/******/ 		}
/******/
/******/ 		// handle errors in accept handlers and self accepted module load
/******/ 		if (error) {
/******/ 			hotSetStatus("fail");
/******/ 			return Promise.reject(error);
/******/ 		}
/******/
/******/ 		hotSetStatus("idle");
/******/ 		return new Promise(function(resolve) {
/******/ 			resolve(outdatedModules);
/******/ 		});
/******/ 	}
/******/
/******/ 	// The module cache
/******/ 	var installedModules = {};
/******/
/******/ 	// The require function
/******/ 	function __webpack_require__(moduleId) {
/******/
/******/ 		// Check if module is in cache
/******/ 		if(installedModules[moduleId]) {
/******/ 			return installedModules[moduleId].exports;
/******/ 		}
/******/ 		// Create a new module (and put it into the cache)
/******/ 		var module = installedModules[moduleId] = {
/******/ 			i: moduleId,
/******/ 			l: false,
/******/ 			exports: {},
/******/ 			hot: hotCreateModule(moduleId),
/******/ 			parents: (hotCurrentParentsTemp = hotCurrentParents, hotCurrentParents = [], hotCurrentParentsTemp),
/******/ 			children: []
/******/ 		};
/******/
/******/ 		// Execute the module function
/******/ 		modules[moduleId].call(module.exports, module, module.exports, hotCreateRequire(moduleId));
/******/
/******/ 		// Flag the module as loaded
/******/ 		module.l = true;
/******/
/******/ 		// Return the exports of the module
/******/ 		return module.exports;
/******/ 	}
/******/
/******/
/******/ 	// expose the modules object (__webpack_modules__)
/******/ 	__webpack_require__.m = modules;
/******/
/******/ 	// expose the module cache
/******/ 	__webpack_require__.c = installedModules;
/******/
/******/ 	// define getter function for harmony exports
/******/ 	__webpack_require__.d = function(exports, name, getter) {
/******/ 		if(!__webpack_require__.o(exports, name)) {
/******/ 			Object.defineProperty(exports, name, { enumerable: true, get: getter });
/******/ 		}
/******/ 	};
/******/
/******/ 	// define __esModule on exports
/******/ 	__webpack_require__.r = function(exports) {
/******/ 		if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ 			Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ 		}
/******/ 		Object.defineProperty(exports, '__esModule', { value: true });
/******/ 	};
/******/
/******/ 	// create a fake namespace object
/******/ 	// mode & 1: value is a module id, require it
/******/ 	// mode & 2: merge all properties of value into the ns
/******/ 	// mode & 4: return value when already ns object
/******/ 	// mode & 8|1: behave like require
/******/ 	__webpack_require__.t = function(value, mode) {
/******/ 		if(mode & 1) value = __webpack_require__(value);
/******/ 		if(mode & 8) return value;
/******/ 		if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
/******/ 		var ns = Object.create(null);
/******/ 		__webpack_require__.r(ns);
/******/ 		Object.defineProperty(ns, 'default', { enumerable: true, value: value });
/******/ 		if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
/******/ 		return ns;
/******/ 	};
/******/
/******/ 	// getDefaultExport function for compatibility with non-harmony modules
/******/ 	__webpack_require__.n = function(module) {
/******/ 		var getter = module && module.__esModule ?
/******/ 			function getDefault() { return module['default']; } :
/******/ 			function getModuleExports() { return module; };
/******/ 		__webpack_require__.d(getter, 'a', getter);
/******/ 		return getter;
/******/ 	};
/******/
/******/ 	// Object.prototype.hasOwnProperty.call
/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ 	// __webpack_public_path__
/******/ 	__webpack_require__.p = "/content/shotgun/";
/******/
/******/ 	// __webpack_hash__
/******/ 	__webpack_require__.h = function() { return hotCurrentHash; };
/******/
/******/
/******/ 	// Load entry module and return exports
/******/ 	return hotCreateRequire(0)(__webpack_require__.s = 0);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


Object.defineProperty(exports, "__esModule", {
    value: true
});
exports.loop = exports.swiperQuery = exports.getUrlParameterByName = exports.centerSlides = exports.replaceSVG = exports.tabletWidth = exports.mobileWidth = undefined;

var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };

__webpack_require__(1);

var _cssVarsPonyfill = __webpack_require__(2);

var _cssVarsPonyfill2 = _interopRequireDefault(_cssVarsPonyfill);

__webpack_require__(3);

__webpack_require__(4);

__webpack_require__(5);

__webpack_require__(6);

__webpack_require__(7);

__webpack_require__(8);

__webpack_require__(9);

__webpack_require__(10);

__webpack_require__(11);

__webpack_require__(12);

__webpack_require__(13);

__webpack_require__(14);

__webpack_require__(15);

__webpack_require__(16);

__webpack_require__(17);

__webpack_require__(18);

__webpack_require__(19);

__webpack_require__(20);

__webpack_require__(21);

__webpack_require__(22);

__webpack_require__(23);

__webpack_require__(24);

__webpack_require__(25);

__webpack_require__(26);

__webpack_require__(27);

__webpack_require__(28);

__webpack_require__(29);

__webpack_require__(30);

__webpack_require__(31);

__webpack_require__(32);

__webpack_require__(33);

__webpack_require__(34);

__webpack_require__(35);

__webpack_require__(36);

__webpack_require__(37);

__webpack_require__(38);

__webpack_require__(39);

__webpack_require__(40);

__webpack_require__(41);

__webpack_require__(42);

__webpack_require__(43);

__webpack_require__(44);

__webpack_require__(45);

__webpack_require__(46);

__webpack_require__(47);

__webpack_require__(48);

__webpack_require__(49);

__webpack_require__(50);

__webpack_require__(51);

__webpack_require__(52);

__webpack_require__(53);

__webpack_require__(54);

__webpack_require__(55);

__webpack_require__(56);

__webpack_require__(57);

__webpack_require__(58);

__webpack_require__(59);

__webpack_require__(60);

__webpack_require__(61);

__webpack_require__(62);

__webpack_require__(63);

__webpack_require__(64);

__webpack_require__(65);

__webpack_require__(66);

__webpack_require__(67);

__webpack_require__(68);

__webpack_require__(69);

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

// project js variables
var mobileWidth = 599;
var tabletWidth = 768;


(0, _cssVarsPonyfill2.default)({
    rootElement: document // default
});
$(document).ready(function () {
    $(document).on("select2:open", "select", function () {
        $('.select2-results__options').mCustomScrollbar('destroy');
        setTimeout(function () {
            $('.select2-results__options').mCustomScrollbar({
                mouseWheel: true,
                advanced: {
                    updateOnContentResize: true
                }
            }, 200);
        });
    });

    // Preserved UTM query string parameters in cookies
    var utmParamNames = ["utm_source", "utm_medium", "utm_content", "utm_campaign", "utm_term"];
    $.each(utmParamNames, function (idx, name) {
        var preservedValue = getUrlParameterByName(name);
        if (preservedValue) document.cookie = name + "=" + preservedValue + "; path=/";
    });

    // Enhancements for Experience Editor
    if (typeof $.applyExpEditor !== "undefined") {
        $.applyExpEditor(function (editorOptions) {
            // { isEditing: bool, ribbonHeight: number }
            // do something specific for Experience Editor
        });
    }

    //Initialize VENOBOX elements
    $('.venobox').venobox();
    // handle clicks on gated media links
    $('.all-page-wrapper').gatedMedia();

    function scaleMap(map, sWidth, sHeight, origWidth, origHeight) {
        var ratioX = sWidth / origWidth,
            ratioY = sHeight / origHeight;
        $('area', map).each(function () {
            var value = $(this).data("coords") || $(this).attr("coords") || "";
            var coords = value.split(",");
            for (var i = 0; i < 4 && coords.length == 4; i++) {
                var ratio = (i + 1) % 2 == 0 ? ratioY : ratioX,
                    coord = Number(coords[i]);
                coords[i] = isNaN(coord) ? 0 : Math.round(coord * ratio);
            }
            $(this).attr("coords", coords.join(",")).data("coords", value);
        });
    }

    function rescaleMaps() {
        $('img[usemap]').each(function () {
            var that = $(this),
                mapId = that.attr("usemap");
            if (!mapId) return true;
            var map = $(mapId),
                imgSrc = this.src,
                imgWidth = parseInt(this.style.width),
                imgHeight = parseInt(this.style.height || that.data("img-height"));
            if (imgWidth && imgHeight) {
                scaleMap(map, that.width(), that.height(), imgWidth, imgHeight);
            } else if (imgSrc) {
                var img = new Image();
                img.onload = function () {
                    imgWidth = imgWidth || img.width;
                    imgHeight = imgHeight || img.height;
                    scaleMap(map, that.width(), that.height(), imgWidth, imgHeight);
                };
                img.src = imgSrc;
            }
        });
    }

    // dynimic styling for external download links
    var extLinkProtocols = ["http", "https"];
    var extLinkSelector = '';
    $.each(extLinkProtocols, function (idx, protocol) {
        extLinkSelector += 'a[href^="' + protocol + '://"]';
        extLinkSelector += window.location.protocol == protocol + ':' ? ':not([href^="' + window.location.origin + '"])' : '';
        extLinkSelector += idx == extLinkProtocols.length - 1 ? '::after' : '::after,';
    });

    var extLinkStyling = extLinkSelector + '{display:inline-block;position:relative;content:"\\f35d";font-family:"Font Awesome 6 Free";' + 'font-weight:900;font-size:.7em;text-decoration:none;margin-left:2px;bottom:.5ex;}';
    $('head').append('<style type="text/css">' + extLinkStyling + '</style>');

    $(window).resize(function () {
        rescaleMaps();
    });
    rescaleMaps();

    // initializing AOS
    AOS.init();
});

// adding custom Ceros event listener to recalculate all offsets and positions in AOS
window.addEventListener("message", function (message) {
    var CEROS_MSG_NAMESPACE = "ceros.sdk.player:",
        CEROS_MESSAGE_READY = "ready";

    var data, isValidMessage;

    try {
        data = JSON.parse(message.data);

        // leave this in the try-catch block in case data.event is present but not a string
        isValidMessage = data && data.name && data.name.substr(0, CEROS_MSG_NAMESPACE.length) === CEROS_MSG_NAMESPACE;
    } catch (e) {
        return;
    }

    if (isValidMessage && data.name.substr(CEROS_MSG_NAMESPACE.length) == CEROS_MESSAGE_READY) {
        $('.ceros-experience').filter(function (idx, frame) {
            return frame.contentWindow === message.source;
        }).parent('.ceros-component').each(function () {
            var cerosPadding = this.style.paddingBottom;
            $(this).prev('.alert').append('<span>padding bottom: ' + cerosPadding + '</span>');
        });

        // recalculate all offsets and positions in AOS everytime a Ceros frame is loaded
        AOS.refresh();
    }
});

function replaceSVG(list) {
    list.forEach(function (_class) {
        var $images = $(_class);
        $images.each(function () {
            var $img = $(this);
            var imgID = $img.attr('id');
            var imgClass = $img.attr('class');
            var imgURL = $img.attr('src');
            jQuery.get(imgURL, function (data) {
                // Get the SVG tag, ignore the rest
                var $svg = jQuery(data).find('svg');
                // Add replaced image's ID to the new SVG
                if (typeof imgID !== 'undefined') {
                    $svg = $svg.attr('id', imgID);
                }
                // Add replaced image's classes to the new SVG
                if (typeof imgClass !== 'undefined') {
                    $svg = $svg.attr('class', imgClass + ' replaced-svg');
                }
                // Remove any invalid XML tags as per http://validator.w3.org
                $svg = $svg.removeAttr('xmlns:a');
                // Replace image with new SVG
                $img.replaceWith($svg);
            }, 'xml');
        });
    });
}

function centerSlides(data) {
    if (window.innerWidth > 768) {
        if (data < 3) {
            $('.swiper-wrapper').css({
                justifyContent: 'center'
            });
            return true;
        }
        return false;
    } else {
        if (window.innerWidth > 768) {
            $('.swiper-wrapper').css({
                justifyContent: 'none'
            });
            return false;
        }
        return false;
    }
}

function getUrlParameterByName(name, url) {
    url = url || window.location.href;
    var match = new RegExp("[?&]" + name + "=([^&#]*)(|&|#|$)", "i").exec(url) || [, ""];
    return decodeURIComponent(match[1].replace(/\+/g, " "));
}

function loop(data) {
    return data >= 3;
}

function swiperQuery(swiper, selector) {
    var result = (typeof swiper === 'undefined' ? 'undefined' : _typeof(swiper)) === "object" && $(selector, _typeof(swiper.el) === "object" ? swiper.el : swiper);
    return result && result.length !== 0 ? result[0] : null;
}

exports.mobileWidth = mobileWidth;
exports.tabletWidth = tabletWidth;
exports.replaceSVG = replaceSVG;
exports.centerSlides = centerSlides;
exports.getUrlParameterByName = getUrlParameterByName;
exports.swiperQuery = swiperQuery;
exports.loop = loop;

/***/ }),
/* 1 */
/***/ (function(module, exports, __webpack_require__) {

// extracted by mini-css-extract-plugin

/***/ }),
/* 2 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


Object.defineProperty(exports, "__esModule", {
    value: true
});
/*!
 * css-vars-ponyfill
 * v2.0.2
 * https://jhildenbiddle.github.io/css-vars-ponyfill/
 * (c) 2018-2019 John Hildenbiddle <http://hildenbiddle.com>
 * MIT license
 */
function _extends() {
    _extends = Object.assign || function (target) {
        for (var i = 1; i < arguments.length; i++) {
            var source = arguments[i];
            for (var key in source) {
                if (Object.prototype.hasOwnProperty.call(source, key)) {
                    target[key] = source[key];
                }
            }
        }
        return target;
    };
    return _extends.apply(this, arguments);
}

function _toConsumableArray(arr) {
    return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();
}

function _arrayWithoutHoles(arr) {
    if (Array.isArray(arr)) {
        for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) {
            arr2[i] = arr[i];
        }return arr2;
    }
}

function _iterableToArray(iter) {
    if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter);
}

function _nonIterableSpread() {
    throw new TypeError("Invalid attempt to spread non-iterable instance");
}

/*!
 * get-css-data
 * v1.6.3
 * https://github.com/jhildenbiddle/get-css-data
 * (c) 2018-2019 John Hildenbiddle <http://hildenbiddle.com>
 * MIT license
 */function getUrls(urls) {
    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
    var settings = {
        mimeType: options.mimeType || null,
        onBeforeSend: options.onBeforeSend || Function.prototype,
        onSuccess: options.onSuccess || Function.prototype,
        onError: options.onError || Function.prototype,
        onComplete: options.onComplete || Function.prototype
    };
    var urlArray = Array.isArray(urls) ? urls : [urls];
    var urlQueue = Array.apply(null, Array(urlArray.length)).map(function (x) {
        return null;
    });
    function isValidCss() {
        var cssText = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
        var isHTML = cssText.trim().charAt(0) === "<";
        return !isHTML;
    }
    function onError(xhr, urlIndex) {
        settings.onError(xhr, urlArray[urlIndex], urlIndex);
    }
    function onSuccess(responseText, urlIndex) {
        var returnVal = settings.onSuccess(responseText, urlArray[urlIndex], urlIndex);
        responseText = returnVal === false ? "" : returnVal || responseText;
        urlQueue[urlIndex] = responseText;
        if (urlQueue.indexOf(null) === -1) {
            settings.onComplete(urlQueue);
        }
    }
    var parser = document.createElement("a");
    urlArray.forEach(function (url, i) {
        parser.setAttribute("href", url);
        parser.href = String(parser.href);
        var isIElte9 = Boolean(document.all && !window.atob);
        var isIElte9CORS = isIElte9 && parser.host.split(":")[0] !== location.host.split(":")[0];
        if (isIElte9CORS) {
            var isSameProtocol = parser.protocol === location.protocol;
            if (isSameProtocol) {
                var xdr = new XDomainRequest();
                xdr.open("GET", url);
                xdr.timeout = 0;
                xdr.onprogress = Function.prototype;
                xdr.ontimeout = Function.prototype;
                xdr.onload = function () {
                    if (isValidCss(xdr.responseText)) {
                        onSuccess(xdr.responseText, i);
                    } else {
                        onError(xdr, i);
                    }
                };
                xdr.onerror = function (err) {
                    onError(xdr, i);
                };
                setTimeout(function () {
                    xdr.send();
                }, 0);
            } else {
                console.warn("Internet Explorer 9 Cross-Origin (CORS) requests must use the same protocol (".concat(url, ")"));
                onError(null, i);
            }
        } else {
            var xhr = new XMLHttpRequest();
            xhr.open("GET", url);
            if (settings.mimeType && xhr.overrideMimeType) {
                xhr.overrideMimeType(settings.mimeType);
            }
            settings.onBeforeSend(xhr, url, i);
            xhr.onreadystatechange = function () {
                if (xhr.readyState === 4) {
                    if (xhr.status === 200 && isValidCss(xhr.responseText)) {
                        onSuccess(xhr.responseText, i);
                    } else {
                        onError(xhr, i);
                    }
                }
            };
            xhr.send();
        }
    });
}

/**
 * Gets CSS data from <style> and <link> nodes (including @imports), then
 * returns data in order processed by DOM. Allows specifying nodes to
 * include/exclude and filtering CSS data using RegEx.
 *
 * @preserve
 * @param {object}   [options] The options object
 * @param {object}   [options.rootElement=document] Root element to traverse for
 *                   <link> and <style> nodes.
 * @param {string}   [options.include] CSS selector matching <link> and <style>
 *                   nodes to include
 * @param {string}   [options.exclude] CSS selector matching <link> and <style>
 *                   nodes to exclude
 * @param {object}   [options.filter] Regular expression used to filter node CSS
 *                   data. Each block of CSS data is tested against the filter,
 *                   and only matching data is included.
 * @param {object}   [options.useCSSOM=false] Determines if CSS data will be
 *                   collected from a stylesheet's runtime values instead of its
 *                   text content. This is required to get accurate CSS data
 *                   when a stylesheet has been modified using the deleteRule()
 *                   or insertRule() methods because these modifications will
 *                   not be reflected in the stylesheet's text content.
 * @param {function} [options.onBeforeSend] Callback before XHR is sent. Passes
 *                   1) the XHR object, 2) source node reference, and 3) the
 *                   source URL as arguments.
 * @param {function} [options.onSuccess] Callback on each CSS node read. Passes
 *                   1) CSS text, 2) source node reference, and 3) the source
 *                   URL as arguments.
 * @param {function} [options.onError] Callback on each error. Passes 1) the XHR
 *                   object for inspection, 2) soure node reference, and 3) the
 *                   source URL that failed (either a <link> href or an @import)
 *                   as arguments
 * @param {function} [options.onComplete] Callback after all nodes have been
 *                   processed. Passes 1) concatenated CSS text, 2) an array of
 *                   CSS text in DOM order, and 3) an array of nodes in DOM
 *                   order as arguments.
 *
 * @example
 *
 *   getCssData({
 *     rootElement: document,
 *     include    : 'style,link[rel="stylesheet"]',
 *     exclude    : '[href="skip.css"]',
 *     filter     : /red/,
 *     useCSSOM   : false,
 *     onBeforeSend(xhr, node, url) {
 *       // ...
 *     }
 *     onSuccess(cssText, node, url) {
 *       // ...
 *     }
 *     onError(xhr, node, url) {
 *       // ...
 *     },
 *     onComplete(cssText, cssArray, nodeArray) {
 *       // ...
 *     }
 *   });
 */function getCssData(options) {
    var regex = {
        cssComments: /\/\*[\s\S]+?\*\//g,
        cssImports: /(?:@import\s*)(?:url\(\s*)?(?:['"])([^'"]*)(?:['"])(?:\s*\))?(?:[^;]*;)/g
    };
    var settings = {
        rootElement: options.rootElement || document,
        include: options.include || 'style,link[rel="stylesheet"]',
        exclude: options.exclude || null,
        filter: options.filter || null,
        useCSSOM: options.useCSSOM || false,
        onBeforeSend: options.onBeforeSend || Function.prototype,
        onSuccess: options.onSuccess || Function.prototype,
        onError: options.onError || Function.prototype,
        onComplete: options.onComplete || Function.prototype
    };
    var sourceNodes = Array.apply(null, settings.rootElement.querySelectorAll(settings.include)).filter(function (node) {
        return !matchesSelector(node, settings.exclude);
    });
    var cssArray = Array.apply(null, Array(sourceNodes.length)).map(function (x) {
        return null;
    });
    function handleComplete() {
        var isComplete = cssArray.indexOf(null) === -1;
        if (isComplete) {
            var cssText = cssArray.join("");
            settings.onComplete(cssText, cssArray, sourceNodes);
        }
    }
    function handleSuccess(cssText, cssIndex, node, sourceUrl) {
        var returnVal = settings.onSuccess(cssText, node, sourceUrl);
        cssText = returnVal !== undefined && Boolean(returnVal) === false ? "" : returnVal || cssText;
        resolveImports(cssText, node, sourceUrl, function (resolvedCssText, errorData) {
            if (cssArray[cssIndex] === null) {
                errorData.forEach(function (data) {
                    return settings.onError(data.xhr, node, data.url);
                });
                if (!settings.filter || settings.filter.test(resolvedCssText)) {
                    cssArray[cssIndex] = resolvedCssText;
                } else {
                    cssArray[cssIndex] = "";
                }
                handleComplete();
            }
        });
    }
    function parseImportData(cssText, baseUrl) {
        var ignoreRules = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
        var importData = {};
        importData.rules = (cssText.replace(regex.cssComments, "").match(regex.cssImports) || []).filter(function (rule) {
            return ignoreRules.indexOf(rule) === -1;
        });
        importData.urls = importData.rules.map(function (rule) {
            return rule.replace(regex.cssImports, "$1");
        });
        importData.absoluteUrls = importData.urls.map(function (url) {
            return getFullUrl(url, baseUrl);
        });
        importData.absoluteRules = importData.rules.map(function (rule, i) {
            var oldUrl = importData.urls[i];
            var newUrl = getFullUrl(importData.absoluteUrls[i], baseUrl);
            return rule.replace(oldUrl, newUrl);
        });
        return importData;
    }
    function resolveImports(cssText, node, baseUrl, callbackFn) {
        var __errorData = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : [];
        var __errorRules = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : [];
        var importData = parseImportData(cssText, baseUrl, __errorRules);
        if (importData.rules.length) {
            getUrls(importData.absoluteUrls, {
                onBeforeSend: function onBeforeSend(xhr, url, urlIndex) {
                    settings.onBeforeSend(xhr, node, url);
                },
                onSuccess: function onSuccess(cssText, url, urlIndex) {
                    var returnVal = settings.onSuccess(cssText, node, url);
                    cssText = returnVal === false ? "" : returnVal || cssText;
                    var responseImportData = parseImportData(cssText, url, __errorRules);
                    responseImportData.rules.forEach(function (rule, i) {
                        cssText = cssText.replace(rule, responseImportData.absoluteRules[i]);
                    });
                    return cssText;
                },
                onError: function onError(xhr, url, urlIndex) {
                    __errorData.push({
                        xhr: xhr,
                        url: url
                    });
                    __errorRules.push(importData.rules[urlIndex]);
                    resolveImports(cssText, node, baseUrl, callbackFn, __errorData, __errorRules);
                },
                onComplete: function onComplete(responseArray) {
                    responseArray.forEach(function (importText, i) {
                        cssText = cssText.replace(importData.rules[i], importText);
                    });
                    resolveImports(cssText, node, baseUrl, callbackFn, __errorData, __errorRules);
                }
            });
        } else {
            callbackFn(cssText, __errorData);
        }
    }
    if (sourceNodes.length) {
        sourceNodes.forEach(function (node, i) {
            var linkHref = node.getAttribute("href");
            var linkRel = node.getAttribute("rel");
            var isLink = node.nodeName === "LINK" && linkHref && linkRel && linkRel.toLowerCase() === "stylesheet";
            var isStyle = node.nodeName === "STYLE";
            if (isLink) {
                getUrls(linkHref, {
                    mimeType: "text/css",
                    onBeforeSend: function onBeforeSend(xhr, url, urlIndex) {
                        settings.onBeforeSend(xhr, node, url);
                    },
                    onSuccess: function onSuccess(cssText, url, urlIndex) {
                        var sourceUrl = getFullUrl(linkHref, location.href);
                        handleSuccess(cssText, i, node, sourceUrl);
                    },
                    onError: function onError(xhr, url, urlIndex) {
                        cssArray[i] = "";
                        settings.onError(xhr, node, url);
                        handleComplete();
                    }
                });
            } else if (isStyle) {
                var cssText = node.textContent;
                if (settings.useCSSOM) {
                    cssText = Array.apply(null, node.sheet.cssRules).map(function (rule) {
                        return rule.cssText;
                    }).join("");
                }
                handleSuccess(cssText, i, node, location.href);
            } else {
                cssArray[i] = "";
                handleComplete();
            }
        });
    } else {
        settings.onComplete("", []);
    }
}

function getFullUrl(url) {
    var base = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : location.href;
    var d = document.implementation.createHTMLDocument("");
    var b = d.createElement("base");
    var a = d.createElement("a");
    d.head.appendChild(b);
    d.body.appendChild(a);
    b.href = base;
    a.href = url;
    return a.href;
}

function matchesSelector(elm, selector) {
    var matches = elm.matches || elm.matchesSelector || elm.webkitMatchesSelector || elm.mozMatchesSelector || elm.msMatchesSelector || elm.oMatchesSelector;
    return matches.call(elm, selector);
}

var balancedMatch = balanced;

function balanced(a, b, str) {
    if (a instanceof RegExp) a = maybeMatch(a, str);
    if (b instanceof RegExp) b = maybeMatch(b, str);
    var r = range(a, b, str);
    return r && {
        start: r[0],
        end: r[1],
        pre: str.slice(0, r[0]),
        body: str.slice(r[0] + a.length, r[1]),
        post: str.slice(r[1] + b.length)
    };
}

function maybeMatch(reg, str) {
    var m = str.match(reg);
    return m ? m[0] : null;
}

balanced.range = range;

function range(a, b, str) {
    var begs, beg, left, right, result;
    var ai = str.indexOf(a);
    var bi = str.indexOf(b, ai + 1);
    var i = ai;
    if (ai >= 0 && bi > 0) {
        begs = [];
        left = str.length;
        while (i >= 0 && !result) {
            if (i == ai) {
                begs.push(i);
                ai = str.indexOf(a, i + 1);
            } else if (begs.length == 1) {
                result = [begs.pop(), bi];
            } else {
                beg = begs.pop();
                if (beg < left) {
                    left = beg;
                    right = bi;
                }
                bi = str.indexOf(b, i + 1);
            }
            i = ai < bi && ai >= 0 ? ai : bi;
        }
        if (begs.length) {
            result = [left, right];
        }
    }
    return result;
}

function parseCss(css) {
    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
    var defaults = {
        preserveStatic: true,
        removeComments: false
    };
    var settings = _extends({}, defaults, options);
    var errors = [];
    function error(msg) {
        throw new Error("CSS parse error: ".concat(msg));
    }
    function match(re) {
        var m = re.exec(css);
        if (m) {
            css = css.slice(m[0].length);
            return m;
        }
    }
    function open() {
        return match(/^{\s*/);
    }
    function close() {
        return match(/^}/);
    }
    function whitespace() {
        match(/^\s*/);
    }
    function comment() {
        whitespace();
        if (css[0] !== "/" || css[1] !== "*") {
            return;
        }
        var i = 2;
        while (css[i] && (css[i] !== "*" || css[i + 1] !== "/")) {
            i++;
        }
        if (!css[i]) {
            return error("end of comment is missing");
        }
        var str = css.slice(2, i);
        css = css.slice(i + 2);
        return {
            type: "comment",
            comment: str
        };
    }
    function comments() {
        var cmnts = [];
        var c;
        while (c = comment()) {
            cmnts.push(c);
        }
        return settings.removeComments ? [] : cmnts;
    }
    function selector() {
        whitespace();
        while (css[0] === "}") {
            error("extra closing bracket");
        }
        var m = match(/^(("(?:\\"|[^"])*"|'(?:\\'|[^'])*'|[^{])+)/);
        if (m) {
            return m[0].trim().replace(/\/\*([^*]|[\r\n]|(\*+([^*\/]|[\r\n])))*\*\/+/g, "").replace(/"(?:\\"|[^"])*"|'(?:\\'|[^'])*'/g, function (m) {
                return m.replace(/,/g, "‌");
            }).split(/\s*(?![^(]*\)),\s*/).map(function (s) {
                return s.replace(/\u200C/g, ",");
            });
        }
    }
    function declaration() {
        match(/^([;\s]*)+/);
        var comment_regexp = /\/\*[^*]*\*+([^\/*][^*]*\*+)*\//g;
        var prop = match(/^(\*?[-#\/*\\\w]+(\[[0-9a-z_-]+\])?)\s*/);
        if (!prop) {
            return;
        }
        prop = prop[0].trim();
        if (!match(/^:\s*/)) {
            return error("property missing ':'");
        }
        var val = match(/^((?:\/\*.*?\*\/|'(?:\\'|.)*?'|"(?:\\"|.)*?"|\((\s*'(?:\\'|.)*?'|"(?:\\"|.)*?"|[^)]*?)\s*\)|[^};])+)/);
        var ret = {
            type: "declaration",
            property: prop.replace(comment_regexp, ""),
            value: val ? val[0].replace(comment_regexp, "").trim() : ""
        };
        match(/^[;\s]*/);
        return ret;
    }
    function declarations() {
        if (!open()) {
            return error("missing '{'");
        }
        var d;
        var decls = comments();
        while (d = declaration()) {
            decls.push(d);
            decls = decls.concat(comments());
        }
        if (!close()) {
            return error("missing '}'");
        }
        return decls;
    }
    function keyframe() {
        whitespace();
        var vals = [];
        var m;
        while (m = match(/^((\d+\.\d+|\.\d+|\d+)%?|[a-z]+)\s*/)) {
            vals.push(m[1]);
            match(/^,\s*/);
        }
        if (vals.length) {
            return {
                type: "keyframe",
                values: vals,
                declarations: declarations()
            };
        }
    }
    function at_keyframes() {
        var m = match(/^@([-\w]+)?keyframes\s*/);
        if (!m) {
            return;
        }
        var vendor = m[1];
        m = match(/^([-\w]+)\s*/);
        if (!m) {
            return error("@keyframes missing name");
        }
        var name = m[1];
        if (!open()) {
            return error("@keyframes missing '{'");
        }
        var frame;
        var frames = comments();
        while (frame = keyframe()) {
            frames.push(frame);
            frames = frames.concat(comments());
        }
        if (!close()) {
            return error("@keyframes missing '}'");
        }
        return {
            type: "keyframes",
            name: name,
            vendor: vendor,
            keyframes: frames
        };
    }
    function at_page() {
        var m = match(/^@page */);
        if (m) {
            var sel = selector() || [];
            return {
                type: "page",
                selectors: sel,
                declarations: declarations()
            };
        }
    }
    function at_fontface() {
        var m = match(/^@font-face\s*/);
        if (m) {
            return {
                type: "font-face",
                declarations: declarations()
            };
        }
    }
    function at_supports() {
        var m = match(/^@supports *([^{]+)/);
        if (m) {
            return {
                type: "supports",
                supports: m[1].trim(),
                rules: rules()
            };
        }
    }
    function at_host() {
        var m = match(/^@host\s*/);
        if (m) {
            return {
                type: "host",
                rules: rules()
            };
        }
    }
    function at_media() {
        var m = match(/^@media *([^{]+)/);
        if (m) {
            return {
                type: "media",
                media: m[1].trim(),
                rules: rules()
            };
        }
    }
    function at_custom_m() {
        var m = match(/^@custom-media\s+(--[^\s]+)\s*([^{;]+);/);
        if (m) {
            return {
                type: "custom-media",
                name: m[1].trim(),
                media: m[2].trim()
            };
        }
    }
    function at_document() {
        var m = match(/^@([-\w]+)?document *([^{]+)/);
        if (m) {
            return {
                type: "document",
                document: m[2].trim(),
                vendor: m[1] ? m[1].trim() : null,
                rules: rules()
            };
        }
    }
    function at_x() {
        var m = match(/^@(import|charset|namespace)\s*([^;]+);/);
        if (m) {
            return {
                type: m[1],
                name: m[2].trim()
            };
        }
    }
    function at_rule() {
        whitespace();
        if (css[0] === "@") {
            var ret = at_keyframes() || at_supports() || at_host() || at_media() || at_custom_m() || at_page() || at_document() || at_fontface() || at_x();
            if (ret && !settings.preserveStatic) {
                var hasVarFunc = false;
                if (ret.declarations) {
                    hasVarFunc = ret.declarations.some(function (decl) {
                        return (/var\(/.test(decl.value)
                        );
                    });
                } else {
                    var arr = ret.keyframes || ret.rules || [];
                    hasVarFunc = arr.some(function (obj) {
                        return (obj.declarations || []).some(function (decl) {
                            return (/var\(/.test(decl.value)
                            );
                        });
                    });
                }
                return hasVarFunc ? ret : {};
            }
            return ret;
        }
    }
    function rule() {
        if (!settings.preserveStatic) {
            var balancedMatch$1 = balancedMatch("{", "}", css);
            if (balancedMatch$1) {
                var hasVarDecl = balancedMatch$1.pre.indexOf(":root") !== -1 && /--\S*\s*:/.test(balancedMatch$1.body);
                var hasVarFunc = /var\(/.test(balancedMatch$1.body);
                if (!hasVarDecl && !hasVarFunc) {
                    css = css.slice(balancedMatch$1.end + 1);
                    return {};
                }
            }
        }
        var sel = selector() || [];
        var decls = settings.preserveStatic ? declarations() : declarations().filter(function (decl) {
            var hasVarDecl = sel.some(function (s) {
                return s.indexOf(":root") !== -1;
            }) && /^--\S/.test(decl.property);
            var hasVarFunc = /var\(/.test(decl.value);
            return hasVarDecl || hasVarFunc;
        });
        if (!sel.length) {
            error("selector missing");
        }
        return {
            type: "rule",
            selectors: sel,
            declarations: decls
        };
    }
    function rules(core) {
        if (!core && !open()) {
            return error("missing '{'");
        }
        var node;
        var rules = comments();
        while (css.length && (core || css[0] !== "}") && (node = at_rule() || rule())) {
            if (node.type) {
                rules.push(node);
            }
            rules = rules.concat(comments());
        }
        if (!core && !close()) {
            return error("missing '}'");
        }
        return rules;
    }
    return {
        type: "stylesheet",
        stylesheet: {
            rules: rules(true),
            errors: errors
        }
    };
}

function parseVars(cssData) {
    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
    var defaults = {
        store: {},
        onWarning: function onWarning() {}
    };
    var settings = _extends({}, defaults, options);
    if (typeof cssData === "string") {
        cssData = parseCss(cssData, settings);
    }
    cssData.stylesheet.rules.forEach(function (rule) {
        if (rule.type !== "rule") {
            return;
        }
        if (rule.selectors.length !== 1 || rule.selectors[0] !== ":root") {
            return;
        }
        rule.declarations.forEach(function (decl, i) {
            var prop = decl.property;
            var value = decl.value;
            if (prop && prop.indexOf("--") === 0) {
                settings.store[prop] = value;
            }
        });
    });
    return settings.store;
}

function stringifyCss(tree) {
    var delim = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "";
    var cb = arguments.length > 2 ? arguments[2] : undefined;
    var renderMethods = {
        charset: function charset(node) {
            return "@charset " + node.name + ";";
        },
        comment: function comment(node) {
            return node.comment.indexOf("__CSSVARSPONYFILL") === 0 ? "/*" + node.comment + "*/" : "";
        },
        "custom-media": function customMedia(node) {
            return "@custom-media " + node.name + " " + node.media + ";";
        },
        declaration: function declaration(node) {
            return node.property + ":" + node.value + ";";
        },
        document: function document(node) {
            return "@" + (node.vendor || "") + "document " + node.document + "{" + visit(node.rules) + "}";
        },
        "font-face": function fontFace(node) {
            return "@font-face" + "{" + visit(node.declarations) + "}";
        },
        host: function host(node) {
            return "@host" + "{" + visit(node.rules) + "}";
        },
        import: function _import(node) {
            return "@import " + node.name + ";";
        },
        keyframe: function keyframe(node) {
            return node.values.join(",") + "{" + visit(node.declarations) + "}";
        },
        keyframes: function keyframes(node) {
            return "@" + (node.vendor || "") + "keyframes " + node.name + "{" + visit(node.keyframes) + "}";
        },
        media: function media(node) {
            return "@media " + node.media + "{" + visit(node.rules) + "}";
        },
        namespace: function namespace(node) {
            return "@namespace " + node.name + ";";
        },
        page: function page(node) {
            return "@page " + (node.selectors.length ? node.selectors.join(", ") : "") + "{" + visit(node.declarations) + "}";
        },
        rule: function rule(node) {
            var decls = node.declarations;
            if (decls.length) {
                return node.selectors.join(",") + "{" + visit(decls) + "}";
            }
        },
        supports: function supports(node) {
            return "@supports " + node.supports + "{" + visit(node.rules) + "}";
        }
    };
    function visit(nodes) {
        var buf = "";
        for (var i = 0; i < nodes.length; i++) {
            var n = nodes[i];
            if (cb) {
                cb(n);
            }
            var txt = renderMethods[n.type](n);
            if (txt) {
                buf += txt;
                if (txt.length && n.selectors) {
                    buf += delim;
                }
            }
        }
        return buf;
    }
    return visit(tree.stylesheet.rules);
}

function walkCss(node, fn) {
    node.rules.forEach(function (rule) {
        if (rule.rules) {
            walkCss(rule, fn);
            return;
        }
        if (rule.keyframes) {
            rule.keyframes.forEach(function (keyframe) {
                if (keyframe.type === "keyframe") {
                    fn(keyframe.declarations, rule);
                }
            });
            return;
        }
        if (!rule.declarations) {
            return;
        }
        fn(rule.declarations, node);
    });
}

var VAR_PROP_IDENTIFIER = "--";

var VAR_FUNC_IDENTIFIER = "var";

function transformCss(cssData) {
    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
    var defaults = {
        preserveStatic: true,
        preserveVars: false,
        variables: {},
        onWarning: function onWarning() {}
    };
    var settings = _extends({}, defaults, options);
    if (typeof cssData === "string") {
        cssData = parseCss(cssData, settings);
    }
    walkCss(cssData.stylesheet, function (declarations, node) {
        for (var i = 0; i < declarations.length; i++) {
            var decl = declarations[i];
            var type = decl.type;
            var prop = decl.property;
            var value = decl.value;
            if (type !== "declaration") {
                continue;
            }
            if (!settings.preserveVars && prop && prop.indexOf(VAR_PROP_IDENTIFIER) === 0) {
                declarations.splice(i, 1);
                i--;
                continue;
            }
            if (value.indexOf(VAR_FUNC_IDENTIFIER + "(") !== -1) {
                var resolvedValue = resolveValue(value, settings);
                if (resolvedValue !== decl.value) {
                    resolvedValue = fixNestedCalc(resolvedValue);
                    if (!settings.preserveVars) {
                        decl.value = resolvedValue;
                    } else {
                        declarations.splice(i, 0, {
                            type: type,
                            property: prop,
                            value: resolvedValue
                        });
                        i++;
                    }
                }
            }
        }
    });
    return stringifyCss(cssData);
}

function fixNestedCalc(value) {
    var reCalcVal = /calc\(([^)]+)\)/g;
    (value.match(reCalcVal) || []).forEach(function (match) {
        var newVal = "calc".concat(match.split("calc").join(""));
        value = value.replace(match, newVal);
    });
    return value;
}

function resolveValue(value) {
    var settings = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
    var __recursiveFallback = arguments.length > 2 ? arguments[2] : undefined;
    if (value.indexOf("var(") === -1) {
        return value;
    }
    var valueData = balancedMatch("(", ")", value);
    function resolveFunc(value) {
        var name = value.split(",")[0].replace(/[\s\n\t]/g, "");
        var fallback = (value.match(/(?:\s*,\s*){1}(.*)?/) || [])[1];
        var match = settings.variables.hasOwnProperty(name) ? String(settings.variables[name]) : undefined;
        var replacement = match || (fallback ? String(fallback) : undefined);
        var unresolvedFallback = __recursiveFallback || value;
        if (!match) {
            settings.onWarning('variable "'.concat(name, '" is undefined'));
        }
        if (replacement && replacement !== "undefined" && replacement.length > 0) {
            return resolveValue(replacement, settings, unresolvedFallback);
        } else {
            return "var(".concat(unresolvedFallback, ")");
        }
    }
    if (!valueData) {
        if (value.indexOf("var(") !== -1) {
            settings.onWarning('missing closing ")" in the value "'.concat(value, '"'));
        }
        return value;
    } else if (valueData.pre.slice(-3) === "var") {
        var isEmptyVarFunc = valueData.body.trim().length === 0;
        if (isEmptyVarFunc) {
            settings.onWarning("var() must contain a non-whitespace string");
            return value;
        } else {
            return valueData.pre.slice(0, -3) + resolveFunc(valueData.body) + resolveValue(valueData.post, settings);
        }
    } else {
        return valueData.pre + "(".concat(resolveValue(valueData.body, settings), ")") + resolveValue(valueData.post, settings);
    }
}

var isBrowser = typeof window !== "undefined";

var isNativeSupport = isBrowser && window.CSS && window.CSS.supports && window.CSS.supports("(--a: 0)");

var counters = {
    group: 0,
    job: 0
};

var defaults = {
    rootElement: isBrowser ? document : null,
    shadowDOM: false,
    include: "style,link[rel=stylesheet]",
    exclude: "",
    variables: {},
    onlyLegacy: true,
    preserveStatic: true,
    preserveVars: false,
    silent: false,
    updateDOM: true,
    updateURLs: true,
    watch: null,
    onBeforeSend: function onBeforeSend() {},
    onWarning: function onWarning() {},
    onError: function onError() {},
    onSuccess: function onSuccess() {},
    onComplete: function onComplete() {}
};

var regex = {
    cssComments: /\/\*[\s\S]+?\*\//g,
    cssKeyframes: /@(?:-\w*-)?keyframes/,
    cssMediaQueries: /@media[^{]+\{([\s\S]+?})\s*}/g,
    cssRootRules: /(?::root\s*{\s*[^}]*})/g,
    cssUrls: /url\((?!['"]?(?:data|http|\/\/):)['"]?([^'")]*)['"]?\)/g,
    cssVarDecls: /(?:[\s;]*)(-{2}\w[\w-]*)(?:\s*:\s*)([^;]*);/g,
    cssVarFunc: /var\(\s*--[\w-]/,
    cssVars: /(?:(?::root\s*{\s*[^;]*;*\s*)|(?:var\(\s*))(--[^:)]+)(?:\s*[:)])/
};

var variableStore = {
    dom: {},
    job: {},
    user: {}
};

var cssVarsIsRunning = false;

var cssVarsObserver = null;

var cssVarsSrcNodeCount = 0;

var debounceTimer = null;

var isShadowDOMReady = false;

/**
 * Fetches, parses, and transforms CSS custom properties from specified
 * <style> and <link> elements into static values, then appends a new <style>
 * element with static values to the DOM to provide CSS custom property
 * compatibility for legacy browsers. Also provides a single interface for
 * live updates of runtime values in both modern and legacy browsers.
 *
 * @preserve
 * @param {object}   [options] Options object
 * @param {object}   [options.rootElement=document] Root element to traverse for
 *                   <link> and <style> nodes
 * @param {boolean}  [options.shadowDOM=false] Determines if shadow DOM <link>
 *                   and <style> nodes will be processed.
 * @param {string}   [options.include="style,link[rel=stylesheet]"] CSS selector
 *                   matching <link re="stylesheet"> and <style> nodes to
 *                   process
 * @param {string}   [options.exclude] CSS selector matching <link
 *                   rel="stylehseet"> and <style> nodes to exclude from those
 *                   matches by options.include
 * @param {object}   [options.variables] A map of custom property name/value
 *                   pairs. Property names can omit or include the leading
 *                   double-hyphen (—), and values specified will override
 *                   previous values
 * @param {boolean}  [options.onlyLegacy=true] Determines if the ponyfill will
 *                   only generate legacy-compatible CSS in browsers that lack
 *                   native support (i.e., legacy browsers)
 * @param {boolean}  [options.preserveStatic=true] Determines if CSS
 *                   declarations that do not reference a custom property will
 *                   be preserved in the transformed CSS
 * @param {boolean}  [options.preserveVars=false] Determines if CSS custom
 *                   property declarations will be preserved in the transformed
 *                   CSS
 * @param {boolean}  [options.silent=false] Determines if warning and error
 *                   messages will be displayed on the console
 * @param {boolean}  [options.updateDOM=true] Determines if the ponyfill will
 *                   update the DOM after processing CSS custom properties
 * @param {boolean}  [options.updateURLs=true] Determines if the ponyfill will
 *                   convert relative url() paths to absolute urls
 * @param {boolean}  [options.watch=false] Determines if a MutationObserver will
 *                   be created that will execute the ponyfill when a <link> or
 *                   <style> DOM mutation is observed
 * @param {function} [options.onBeforeSend] Callback before XHR is sent. Passes
 *                   1) the XHR object, 2) source node reference, and 3) the
 *                   source URL as arguments
 * @param {function} [options.onWarning] Callback after each CSS parsing warning
 *                   has occurred. Passes 1) a warning message as an argument.
 * @param {function} [options.onError] Callback after a CSS parsing error has
 *                   occurred or an XHR request has failed. Passes 1) an error
 *                   message, and 2) source node reference, 3) xhr, and 4 url as
 *                   arguments.
 * @param {function} [options.onSuccess] Callback after CSS data has been
 *                   collected from each node and before CSS custom properties
 *                   have been transformed. Allows modifying the CSS data before
 *                   it is transformed by returning any string value (or false
 *                   to skip). Passes 1) CSS text, 2) source node reference, and
 *                   3) the source URL as arguments.
 * @param {function} [options.onComplete] Callback after all CSS has been
 *                   processed, legacy-compatible CSS has been generated, and
 *                   (optionally) the DOM has been updated. Passes 1) a CSS
 *                   string with CSS variable values resolved, 2) an array of
 *                   output <style> node references that have been appended to
 *                   the DOM, 3) an object containing all custom properies names
 *                   and values, and 4) the ponyfill execution time in
 *                   milliseconds.
 *
 * @example
 *
 *   cssVars({
 *     rootElement   : document,
 *     shadowDOM     : false,
 *     include       : 'style,link[rel="stylesheet"]',
 *     exclude       : '',
 *     variables     : {},
 *     onlyLegacy    : true,
 *     preserveStatic: true,
 *     preserveVars  : false,
 *     silent        : false,
 *     updateDOM     : true,
 *     updateURLs    : true,
 *     watch         : false,
 *     onBeforeSend(xhr, node, url) {},
 *     onWarning(message) {},
 *     onError(message, node, xhr, url) {},
 *     onSuccess(cssText, node, url) {},
 *     onComplete(cssText, styleNode, cssVariables, benchmark) {}
 *   });
 */function cssVars() {
    var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
    var msgPrefix = "cssVars(): ";
    var settings = _extends({}, defaults, options);
    function handleError(message, sourceNode, xhr, url) {
        if (!settings.silent && window.console) {
            console.error("".concat(msgPrefix).concat(message, "\n"), sourceNode);
        }
        settings.onError(message, sourceNode, xhr, url);
    }
    function handleWarning(message) {
        if (!settings.silent && window.console) {
            console.warn("".concat(msgPrefix).concat(message));
        }
        settings.onWarning(message);
    }
    if (!isBrowser) {
        return;
    }
    if (settings.watch) {
        settings.watch = defaults.watch;
        addMutationObserver(settings);
        cssVars(settings);
        return;
    } else if (settings.watch === false && cssVarsObserver) {
        cssVarsObserver.disconnect();
        cssVarsObserver = null;
    }
    if (!settings.__benchmark) {
        if (cssVarsIsRunning === settings.rootElement) {
            cssVarsDebounced(options);
            return;
        }
        settings.__benchmark = getTimeStamp();
        settings.exclude = [cssVarsObserver ? '[data-cssvars]:not([data-cssvars=""])' : '[data-cssvars="out"]', settings.exclude].filter(function (selector) {
            return selector;
        }).join(",");
        settings.variables = fixVarNames(settings.variables);
        if (!cssVarsObserver) {
            var outNodes = Array.apply(null, settings.rootElement.querySelectorAll('[data-cssvars="out"]'));
            outNodes.forEach(function (outNode) {
                var dataGroup = outNode.getAttribute("data-cssvars-group");
                var srcNode = dataGroup ? settings.rootElement.querySelector('[data-cssvars="src"][data-cssvars-group="'.concat(dataGroup, '"]')) : null;
                if (!srcNode) {
                    outNode.parentNode.removeChild(outNode);
                }
            });
            if (cssVarsSrcNodeCount) {
                var srcNodes = settings.rootElement.querySelectorAll('[data-cssvars]:not([data-cssvars="out"])');
                if (srcNodes.length < cssVarsSrcNodeCount) {
                    cssVarsSrcNodeCount = srcNodes.length;
                    variableStore.dom = {};
                }
            }
        }
    }
    if (document.readyState !== "loading") {
        var isShadowElm = settings.shadowDOM || settings.rootElement.shadowRoot || settings.rootElement.host;
        if (isNativeSupport && settings.onlyLegacy) {
            if (settings.updateDOM) {
                var targetElm = settings.rootElement.host || (settings.rootElement === document ? document.documentElement : settings.rootElement);
                Object.keys(settings.variables).forEach(function (key) {
                    targetElm.style.setProperty(key, settings.variables[key]);
                });
            }
        } else if (isShadowElm && !isShadowDOMReady) {
            getCssData({
                rootElement: defaults.rootElement,
                include: defaults.include,
                exclude: settings.exclude,
                onSuccess: function onSuccess(cssText, node, url) {
                    cssText = cssText.replace(regex.cssComments, "").replace(regex.cssMediaQueries, "");
                    cssText = (cssText.match(regex.cssRootRules) || []).join("");
                    return cssText || false;
                },
                onComplete: function onComplete(cssText, cssArray, nodeArray) {
                    parseVars(cssText, {
                        store: variableStore.dom,
                        onWarning: handleWarning
                    });
                    isShadowDOMReady = true;
                    cssVars(settings);
                }
            });
        } else {
            cssVarsIsRunning = settings.rootElement;
            getCssData({
                rootElement: settings.rootElement,
                include: settings.include,
                exclude: settings.exclude,
                onBeforeSend: settings.onBeforeSend,
                onError: function onError(xhr, node, url) {
                    var responseUrl = xhr.responseURL || getFullUrl$1(url, location.href);
                    var statusText = xhr.statusText ? "(".concat(xhr.statusText, ")") : "Unspecified Error" + (xhr.status === 0 ? " (possibly CORS related)" : "");
                    var errorMsg = "CSS XHR Error: ".concat(responseUrl, " ").concat(xhr.status, " ").concat(statusText);
                    handleError(errorMsg, node, xhr, responseUrl);
                },
                onSuccess: function onSuccess(cssText, node, url) {
                    var returnVal = settings.onSuccess(cssText, node, url);
                    cssText = returnVal !== undefined && Boolean(returnVal) === false ? "" : returnVal || cssText;
                    if (settings.updateURLs) {
                        cssText = fixRelativeCssUrls(cssText, url);
                    }
                    return cssText;
                },
                onComplete: function onComplete(cssText, cssArray) {
                    var nodeArray = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
                    var jobVars = {};
                    var varStore = settings.updateDOM ? variableStore.dom : Object.keys(variableStore.job).length ? variableStore.job : variableStore.job = JSON.parse(JSON.stringify(variableStore.dom));
                    var hasVarChange = false;
                    nodeArray.forEach(function (node, i) {
                        if (regex.cssVars.test(cssArray[i])) {
                            try {
                                var cssTree = parseCss(cssArray[i], {
                                    preserveStatic: settings.preserveStatic,
                                    removeComments: true
                                });
                                parseVars(cssTree, {
                                    store: jobVars,
                                    onWarning: handleWarning
                                });
                                node.__cssVars = {
                                    tree: cssTree
                                };
                            } catch (err) {
                                handleError(err.message, node);
                            }
                        }
                    });
                    if (settings.updateDOM) {
                        _extends(variableStore.user, settings.variables);
                    }
                    _extends(jobVars, settings.variables);
                    hasVarChange = Boolean((document.querySelector("[data-cssvars]") || Object.keys(variableStore.dom).length) && Object.keys(jobVars).some(function (name) {
                        return jobVars[name] !== varStore[name];
                    }));
                    _extends(varStore, variableStore.user, jobVars);
                    if (hasVarChange) {
                        resetCssNodes(settings.rootElement);
                        cssVars(settings);
                    } else {
                        var outCssArray = [];
                        var outNodeArray = [];
                        var hasKeyframesWithVars = false;
                        variableStore.job = {};
                        if (settings.updateDOM) {
                            counters.job++;
                        }
                        nodeArray.forEach(function (node) {
                            var isSkip = !node.__cssVars;
                            if (node.__cssVars) {
                                try {
                                    transformCss(node.__cssVars.tree, _extends({}, settings, {
                                        variables: varStore,
                                        onWarning: handleWarning
                                    }));
                                    var outCss = stringifyCss(node.__cssVars.tree);
                                    if (settings.updateDOM) {
                                        if (!node.getAttribute("data-cssvars")) {
                                            node.setAttribute("data-cssvars", "src");
                                        }
                                        if (outCss.length) {
                                            var dataGroup = node.getAttribute("data-cssvars-group") || ++counters.group;
                                            var outCssNoSpaces = outCss.replace(/\s/g, "");
                                            var outNode = settings.rootElement.querySelector('[data-cssvars="out"][data-cssvars-group="'.concat(dataGroup, '"]')) || document.createElement("style");
                                            hasKeyframesWithVars = hasKeyframesWithVars || regex.cssKeyframes.test(outCss);
                                            if (!outNode.hasAttribute("data-cssvars")) {
                                                outNode.setAttribute("data-cssvars", "out");
                                            }
                                            if (outCssNoSpaces === node.textContent.replace(/\s/g, "")) {
                                                isSkip = true;
                                                if (outNode && outNode.parentNode) {
                                                    node.removeAttribute("data-cssvars-group");
                                                    outNode.parentNode.removeChild(outNode);
                                                }
                                            } else if (outCssNoSpaces !== outNode.textContent.replace(/\s/g, "")) {
                                                [node, outNode].forEach(function (n) {
                                                    n.setAttribute("data-cssvars-job", counters.job);
                                                    n.setAttribute("data-cssvars-group", dataGroup);
                                                });
                                                outNode.textContent = outCss;
                                                outCssArray.push(outCss);
                                                outNodeArray.push(outNode);
                                                if (!outNode.parentNode) {
                                                    node.parentNode.insertBefore(outNode, node.nextSibling);
                                                }
                                            }
                                        }
                                    } else {
                                        if (node.textContent.replace(/\s/g, "") !== outCss) {
                                            outCssArray.push(outCss);
                                        }
                                    }
                                } catch (err) {
                                    handleError(err.message, node);
                                }
                            }
                            if (isSkip) {
                                node.setAttribute("data-cssvars", "skip");
                            }
                            if (!node.hasAttribute("data-cssvars-job")) {
                                node.setAttribute("data-cssvars-job", counters.job);
                            }
                        });
                        cssVarsSrcNodeCount = settings.rootElement.querySelectorAll('[data-cssvars]:not([data-cssvars="out"])').length;
                        if (settings.shadowDOM) {
                            var elms = [settings.rootElement].concat(_toConsumableArray(settings.rootElement.querySelectorAll("*")));
                            for (var i = 0, elm; elm = elms[i]; ++i) {
                                if (elm.shadowRoot && elm.shadowRoot.querySelector("style")) {
                                    var shadowSettings = _extends({}, settings, {
                                        rootElement: elm.shadowRoot,
                                        variables: variableStore.dom
                                    });
                                    cssVars(shadowSettings);
                                }
                            }
                        }
                        if (settings.updateDOM && hasKeyframesWithVars) {
                            fixKeyframes(settings.rootElement);
                        }
                        cssVarsIsRunning = false;
                        settings.onComplete(outCssArray.join(""), outNodeArray, JSON.parse(JSON.stringify(varStore)), getTimeStamp() - settings.__benchmark);
                    }
                }
            });
        }
    } else {
        document.addEventListener("DOMContentLoaded", function init(evt) {
            cssVars(options);
            document.removeEventListener("DOMContentLoaded", init);
        });
    }
}

cssVars.reset = function () {
    cssVarsIsRunning = false;
    if (cssVarsObserver) {
        cssVarsObserver.disconnect();
        cssVarsObserver = null;
    }
    cssVarsSrcNodeCount = 0;
    debounceTimer = null;
    isShadowDOMReady = false;
    for (var prop in variableStore) {
        variableStore[prop] = {};
    }
};

function addMutationObserver(settings) {
    function isLink(node) {
        var isStylesheet = node.tagName === "LINK" && (node.getAttribute("rel") || "").indexOf("stylesheet") !== -1;
        return isStylesheet && !node.disabled;
    }
    function isStyle(node) {
        return node.tagName === "STYLE" && !node.disabled;
    }
    function isValidAddMutation(mutationNodes) {
        return Array.apply(null, mutationNodes).some(function (node) {
            var isElm = node.nodeType === 1;
            var hasAttr = isElm && node.hasAttribute("data-cssvars");
            var isStyleWithVars = isStyle(node) && regex.cssVars.test(node.textContent);
            var isValid = !hasAttr && (isLink(node) || isStyleWithVars);
            return isValid;
        });
    }
    function isValidRemoveMutation(mutationNodes) {
        return Array.apply(null, mutationNodes).some(function (node) {
            var isElm = node.nodeType === 1;
            var isOutNode = isElm && node.getAttribute("data-cssvars") === "out";
            var isSrcNode = isElm && node.getAttribute("data-cssvars") === "src";
            var isValid = isSrcNode;
            if (isSrcNode || isOutNode) {
                var dataGroup = node.getAttribute("data-cssvars-group");
                var orphanNode = settings.rootElement.querySelector('[data-cssvars-group="'.concat(dataGroup, '"]'));
                if (isSrcNode) {
                    resetCssNodes(settings.rootElement);
                    variableStore.dom = {};
                }
                if (orphanNode) {
                    orphanNode.parentNode.removeChild(orphanNode);
                }
            }
            return isValid;
        });
    }
    if (!window.MutationObserver) {
        return;
    }
    if (cssVarsObserver) {
        cssVarsObserver.disconnect();
        cssVarsObserver = null;
    }
    cssVarsObserver = new MutationObserver(function (mutations) {
        var hasValidMutation = mutations.some(function (mutation) {
            var isValid = false;
            if (mutation.type === "attributes") {
                isValid = isLink(mutation.target);
            } else if (mutation.type === "childList") {
                isValid = isValidAddMutation(mutation.addedNodes) || isValidRemoveMutation(mutation.removedNodes);
            }
            return isValid;
        });
        if (hasValidMutation) {
            cssVars(settings);
        }
    });
    cssVarsObserver.observe(document.documentElement, {
        attributes: true,
        attributeFilter: ["disabled", "href"],
        childList: true,
        subtree: true
    });
}

function cssVarsDebounced(settings) {
    var delay = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 100;
    clearTimeout(debounceTimer);
    debounceTimer = setTimeout(function () {
        settings.__benchmark = null;
        cssVars(settings);
    }, delay);
}

function fixKeyframes(rootElement) {
    var animationNameProp = ["animation-name", "-moz-animation-name", "-webkit-animation-name"].filter(function (prop) {
        return getComputedStyle(document.body)[prop];
    })[0];
    if (animationNameProp) {
        var allNodes = rootElement.getElementsByTagName("*");
        var keyframeNodes = [];
        var nameMarker = "__CSSVARSPONYFILL-KEYFRAMES__";
        for (var i = 0, len = allNodes.length; i < len; i++) {
            var node = allNodes[i];
            var animationName = getComputedStyle(node)[animationNameProp];
            if (animationName !== "none") {
                node.style[animationNameProp] += nameMarker;
                keyframeNodes.push(node);
            }
        }
        void document.body.offsetHeight;
        for (var _i = 0, _len = keyframeNodes.length; _i < _len; _i++) {
            var nodeStyle = keyframeNodes[_i].style;
            nodeStyle[animationNameProp] = nodeStyle[animationNameProp].replace(nameMarker, "");
        }
    }
}

function fixRelativeCssUrls(cssText, baseUrl) {
    var cssUrls = cssText.replace(regex.cssComments, "").match(regex.cssUrls) || [];
    cssUrls.forEach(function (cssUrl) {
        var oldUrl = cssUrl.replace(regex.cssUrls, "$1");
        var newUrl = getFullUrl$1(oldUrl, baseUrl);
        cssText = cssText.replace(cssUrl, cssUrl.replace(oldUrl, newUrl));
    });
    return cssText;
}

function fixVarNames() {
    var varObj = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
    var reLeadingHyphens = /^-{2}/;
    return Object.keys(varObj).reduce(function (obj, value) {
        var key = reLeadingHyphens.test(value) ? value : "--".concat(value.replace(/^-+/, ""));
        obj[key] = varObj[value];
        return obj;
    }, {});
}

function getFullUrl$1(url) {
    var base = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : location.href;
    var d = document.implementation.createHTMLDocument("");
    var b = d.createElement("base");
    var a = d.createElement("a");
    d.head.appendChild(b);
    d.body.appendChild(a);
    b.href = base;
    a.href = url;
    return a.href;
}

function getTimeStamp() {
    return isBrowser && (window.performance || {}).now ? window.performance.now() : new Date().getTime();
}

function resetCssNodes(rootElement) {
    var resetNodes = Array.apply(null, rootElement.querySelectorAll('[data-cssvars="skip"],[data-cssvars="src"]'));
    resetNodes.forEach(function (node) {
        return node.setAttribute("data-cssvars", "");
    });
}

exports.default = cssVars;
//# sourceMappingURL=css-vars-ponyfill.esm.js.map

/***/ }),
/* 3 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


$(document).ready(function () {
  var animationDuration = 300;
  var breadcrumb = document.querySelector('.breadcrumbs-new');
  if (breadcrumb != null) {
    var offsetTop = breadcrumb.offsetTop;
    var isStuck = false;
    window.addEventListener('scroll', function () {
      if (window.scrollY >= offsetTop && !isStuck) {
        breadcrumb.classList.add('fixed');
        isStuck = true;
      } else if (window.scrollY < offsetTop && isStuck) {
        breadcrumb.classList.remove('fixed');

        $(".breadcrumbs__inner, .breadcrumbs-hero_inner").click();
        isStuck = false;
      }
    });
  }

  $(".breadcrumbs__inner, .breadcrumbs-hero_inner").on("click", ".breadcrumbs__item--select", function (evt) {
    var $selectItems = $(".breadcrumbs__select", evt.delegateTarget);
    if ($selectItems.is(":visible")) {
      hideSelect($selectItems, $(evt.delegateTarget));
    } else {
      showSelect($selectItems, $(evt.delegateTarget));
    }
    evt.stopPropagation();
  });
  $(".breadcrumbs__select").on("click", "li a", function (e) {
    var wrapper = $(e.delegateTarget).parent();
    $(".dropdown", wrapper).text($(this).text());
  });
  $("body").click(closeOnOutsideClick);

  $(window).resize(function () {
    scaleBodyBreadcrumb();
    scaleBodyBreadcrumb(".breadcrumbs-hero_outer", ".breadcrumbs-hero_inner");
  });
  scaleBodyBreadcrumb();
  scaleBodyBreadcrumb(".breadcrumbs-hero_outer", ".breadcrumbs-hero_inner");

  function scaleBodyBreadcrumb(wrapper, inner) {
    $(wrapper || ".top-breadcrumbs__wrapper").each(function () {
      var topic = $(".breadcrumbs__item--select", this);
      var panelWidth = $(inner || ".top-breadcrumbs__inner", this).width() - 20,
          totalWidth = 0;
      panelWidth -= topic.width() || 0;
      var items = $(".breadcrumbs__item:not(.breadcrumbs__item--select)", this).css("max-width", "");
      var sizes = items.map(function () {
        var width = $(this).width();
        totalWidth += width;
        return { width: width, item: this };
      }).sort(function (item1, item2) {
        return item2.width - item1.width;
      });

      var extraW = totalWidth - panelWidth;
      if (extraW > 0) {
        while (extraW > 0 && sizes.length > 1) {
          sizes[0].width -= 10;
          extraW -= 10;
          if (sizes[0].width < sizes[1].width) {
            sizes.sort(function (item1, item2) {
              return item2.width - item1.width;
            });
          }
        }
        if (sizes.length == 1) sizes[0].width = panelWidth;
        sizes.each(function () {
          $(this.item).css("max-width", this.width + "px");
        });
      }
      var currentBrowserWidth = $(window).width();
      var selectPanel = $(".breadcrumbs__select", this);
      var selectPanelWidth = selectPanel.width();
      var iconDown = topic.find(".icon-navigationcaret");
      var iconDownPos = iconDown.position();
      var selectPosLeft = Math.round(iconDownPos ? iconDownPos.left - 35 : 0);
      if (currentBrowserWidth <= selectPanelWidth + selectPosLeft) {
        selectPosLeft -= selectPosLeft + selectPanelWidth + 19 - currentBrowserWidth;
        selectPosLeft = selectPosLeft < 0 ? 0 : selectPosLeft;
      }
      selectPanel.css("left", selectPosLeft + "px");
    });
  }

  function closeOnOutsideClick(evt) {
    var $selectItems = $(".breadcrumbs__select");
    if ($selectItems.is(":visible") && $selectItems.find(evt.target).length == 0) {
      var button = $(".breadcrumbs__item--select");
      hideSelect($selectItems, button);
    }
  }

  function showSelect($select, $button) {
    if ($select && $select.length > 0 && $select[0].className.indexOf("breadcrumbs__select-hero") > -1) {
      setSelectTop($button); // show the drop-down above the breadcrump
    }
    $(".dropdown .icon-navigationcaret", $button).addClass("rotate");
    $select.css("opacity", 0).show().stop().css("transform", "translateY(0)").animate({
      opacity: "1"
    }, animationDuration);
  }

  function hideSelect($select, $button) {
    $(".dropdown .icon-navigationcaret", $button).removeClass("rotate");
    $select.stop().css("transform", "translateY(10px)").animate({
      opacity: "0"
    }, animationDuration, function () {
      $select.hide();
    });
    $(".breadcrumbs-dropdown-overlay").hide();
  }

  function setSelectTop($button) {
    var selectPanel = $(".breadcrumbs__select", $button);
    var breadcrumbsNew = $(".breadcrumbs-new");

    var breadcrumbsOffset = breadcrumbsNew.offset();
    var breadcrumbsHeight = breadcrumbsNew.outerHeight();

    var selectTop = breadcrumbsOffset.top + breadcrumbsHeight;

    selectPanel.css({
      position: "absolute",
      top: selectTop + "px",
      zIndex: "999"
    });
    // Add the overlay below the dropdown
    //var dropdownBottom = selectTop.offset().top + selectTop.outerHeight();
    $(".breadcrumbs-dropdown-overlay").css({
      top: selectTop + "px",
      display: "block"
    });
  }
});

/***/ }),
/* 4 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var _main = __webpack_require__(0);

$(document).ready(function () {
    // if block doesn't exists then stop function execution
    if (!$('.mid-level-hero').length) return;
});

// Set image height same as height of content
// function setImageHeight() {
//     var $imageBox = $('.mid-level-hero__image-box')
//     var windowWidth = $(window).width()
//     var bottomLevelHeight = $('.mid-level-hero__bottom-level').outerHeight()
//     if (windowWidth > tabletWidth) {
//         $imageBox.height(bottomLevelHeight)
//     }
//     else {
//         $imageBox.css('height', windowWidth / 2)
//     }
// }

/***/ }),
/* 5 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var _main = __webpack_require__(0);

$(document).ready(function () {
    $('.carousel-stats-swiper').each(function () {
        var swiper = this;
        var singleSlide = $(swiper).hasClass("single-slide");
        new Swiper(swiper, {
            slidesPerView: singleSlide ? 'auto' : 1,
            spaceBetween: 30,
            centerInsufficientSlides: true,
            navigation: {
                nextEl: (0, _main.swiperQuery)(swiper, '.swiper-button-next'),
                prevEl: (0, _main.swiperQuery)(swiper, '.swiper-button-prev')
            },
            breakpoints: {
                480: {
                    slidesPerView: singleSlide ? 'auto' : 2,
                    spaceBetween: 30
                },
                768: {
                    slidesPerView: singleSlide ? 'auto' : 3,
                    spaceBetween: 30
                }
            }
        });
    });
});

/***/ }),
/* 6 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var _main = __webpack_require__(0);

$(document).ready(function () {
    (0, _main.replaceSVG)(['.quotes__pic']);

    var wrapper = $(".quotes.graphic-image-redesign .swiper");
    if (wrapper) {
        $('.quotes.graphic-image-redesign .swiper').each(function () {
            var swiper = this;
            var nextButton = (0, _main.swiperQuery)(swiper, '.swiper-button-next');
            var prevButton = (0, _main.swiperQuery)(swiper, '.swiper-button-prev');
            var pageButtons = (0, _main.swiperQuery)(swiper, '.swiper-pagination');

            new Swiper(this, {
                slidesPerView: 1,
                autoHeight: false,

                loop: true,
                navigation: {
                    nextEl: nextButton,
                    prevEl: prevButton
                }, pagination: {
                    el: pageButtons,
                    clickable: true
                }
            });
        });
    }
});

/***/ }),
/* 7 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var _main = __webpack_require__(0);

$(document).ready(function () {
    $('.card_swiper').each(function () {
        var swiper = this;
        new Swiper(swiper, {
            slidesPerView: 3,
            spaceBetween: 30,
            slidesPerGroup: 3,
            loop: true,
            loopFillGroupWithBlank: true,
            pagination: {
                el: (0, _main.swiperQuery)(swiper, '.swiper-pagination'),
                clickable: true
            },
            navigation: {
                nextEl: (0, _main.swiperQuery)(swiper, '.button-next'),
                prevEl: (0, _main.swiperQuery)(swiper, '.button-prev')
            }
        });
    });
});

/***/ }),
/* 8 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


$(document).ready(function () {
    var navBar = $('.nav-bar');
    $('.h-menu__button').click(function () {
        $('.h-menu__bars').toggleClass('active-icon');
        navBar.toggleClass('active-navbar');
        $('.global-picker').removeClass('active-picker');
        $('.header__globe .header__button').removeClass('active-btn');
        $('.search_wrapper.popup').removeClass('active-picker');
        $('.accordion .title a', navBar).removeClass('active');
        $('.accordion .title .content', navBar).hide();
        $('.header__search .header__button').removeClass('active-btn_search');
        //RBU navigation
        $('.rbu-nav-bar').removeClass('active-navbar');
        $('.rbu-menu__button').removeClass('active');
    });
    //
    $('.nav-bar').on("click", '.accordion .title > a', function (evt) {
        var dropDown = $(this).siblings('.content');
        $('.content', evt.delegateTarget).not(dropDown).slideUp();
        $('.accordion .title .active', evt.delegateTarget).not(this).removeClass("active");
        $(this).toggleClass("active");
        dropDown.stop(false, true).slideToggle();
        evt.preventDefault();
    });
});

/***/ }),
/* 9 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


$(document).ready(function () {
  $('.header__globe').click(function () {
    $('.global-picker').toggleClass('active-picker');
    $('.header__globe .header__button').toggleClass('active-btn ');
    $('.h-menu__bars').removeClass('active-icon');
    $('.nav-bar').removeClass('active-navbar');
    $('.search_wrapper.popup').removeClass('active-picker');
    $('.header__search .header__button').removeClass('active-btn_search');
    //RBU navigation
    $('.rbu-nav-bar').removeClass('active-navbar');
    $('.rbu-menu__button').removeClass('active');
  });
  $('.animation-arr').click(function () {
    $(this).toggleClass('active-animation');
  });
});

/***/ }),
/* 10 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


$(document).ready(function () {
  var result = $('.filters_wrapper .dropdown_result');
  //
  $("#datepickerFilters").datepicker({
    showOtherMonths: true,
    selectOtherMonths: true
  });
  //
  $('.filters_wrapper .filters-tag_event, .filters-tag_data').select2({
    minimumResultsForSearch: -1
  });
  //
  $('.filters_wrapper .result').click(function () {
    result.toggleClass('active-result');
    $('.filters_wrapper .select_checkbox').toggleClass('active-checkbox');
  });
  $('.filters_wrapper .dropdown_result li').click(function () {
    $(this).find('input').attr('checked', true);
  });
  $('.filters_wrapper .dropdown_result li').dblclick(function () {
    $(this).find('input').attr('checked', false);
  });
});

/***/ }),
/* 11 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


$(document).ready(function () {
  breadcrumb();
  $(window).scroll(function () {
    breadcrumb();
  }).resize(function () {
    scaleTopBreadcrumb();
  });
  $('.breadcrumb_wrapper .breadcrumbs__topic').click(function () {
    var wrapper = $(this).parent('.breadcrumb_wrapper');
    var topPos = wrapper.innerHeight();
    $('.sub_links', wrapper).toggleClass("show_links").css("top", topPos);
    $('.icon-navigationcaret', wrapper).toggleClass("rotate");
  });
  $('.breadcrumb_wrapper .sub_links').on("click", 'li a', function (e) {
    var wrapper = $(this).parent('.breadcrumb_wrapper');
    $('.dropdown', wrapper).text($(e.delegateTarget).text());
    $('.sub_links', wrapper).removeClass("show_links");
    $('.icon-navigationcaret', wrapper).removeClass("rotate");
  });
});

function breadcrumb() {
  if (innerWidth > 600) {
    var scrollTop = $(window).scrollTop();
    var wrapper = $('.breadcrumb_wrapper');
    if (scrollTop > 60) {
      wrapper.filter(':not(.show-breadcrumb)').each(function () {
        $(this).addClass("show-breadcrumb");
        scaleTopBreadcrumb(this);
      });
    } else {
      wrapper.filter('.show-breadcrumb').each(function () {
        $(this).removeClass("show-breadcrumb");
        $('.sub_links', this).removeClass("show_links");
      });
    }
  }
}

function scaleTopBreadcrumb(wrapper) {
  console.log('scaleTopBreadcrumb');
  $(wrapper || '.breadcrumb_wrapper').each(function () {
    var topic = $('.breadcrumbs__topic', this);
    var panelWidth = $(this).width() - 21,
        totalWidth = 0;
    panelWidth -= topic.width() || 0;
    var items = $('.breadcrumbs__item', this).css("max-width", "");
    var sizes = items.map(function () {
      var width = $(this).width();totalWidth += width;
      return { width: width, item: this };
    }).sort(function (item1, item2) {
      return item2.width - item1.width;
    });

    var extraW = totalWidth - panelWidth;
    if (extraW > 0) {
      while (extraW > 0 && sizes.length > 1) {
        sizes[0].width -= 10;extraW -= 10;
        if (sizes[0].width < sizes[1].width) {
          sizes.sort(function (item1, item2) {
            return item2.width - item1.width;
          });
        }
      }
      if (sizes.length == 1) sizes[0].width = panelWidth;
      sizes.each(function () {
        $(this.item).css("max-width", this.width + "px");
      });
    }

    var topicPos = topic.position();
    topicPos = topicPos ? topicPos.left : 0;
    var wrapWidth = Math.round($(this).width() - topicPos - 140);
    $('.sub_links', this).css("right", wrapWidth + "px");
  }).css("overflow", "visible");
}

/***/ }),
/* 12 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


$(document).ready(function () {
  $(".search_wrapper.popup .search_filter .wrapper_container").slideToggle("fast");
  $(".search_wrapper.popup .search_filter .title").click(function () {
    $(".search_wrapper.popup .search_filter .wrapper_container").slideToggle("fast");
    $(".search_wrapper.popup .search_filter .icon").toggleClass("change-icon");
  });
  $(".header__search").click(function () {
    $(".search_wrapper.popup").toggleClass("active-picker");
    $(".search_wrapper.popup.active-picker input").focus();
    $(".header__search .header__button").toggleClass("active-btn_search");
    $(".h-menu__bars").removeClass("active-icon");
    $(".nav-bar").removeClass("active-navbar");
    $(".global-picker").removeClass("active-picker");
    $(".header__globe .header__button").removeClass("active-btn");
    //RBU navigation
    $(".rbu-nav-bar").removeClass("active-navbar");
    $(".rbu-menu__button").removeClass("active");
  });

  function isPageEditor() {
    if (window.Sitecore) {
      return !!(Sitecore && Sitecore.PageModes && Sitecore.PageModes.PageEditor);
    } else return false;
  }

  /*function markExtraCols(container) {
    var cols = container.children('.col-33:not(.hidden)');
    cols.slice(0, 3).removeClass("extra");
    container.toggleClass("extra", !!cols.slice(3).addClass("extra").length);
  }
  */
  var searchInterfaces = Coveo.$(".CoveoSearchInterface");
  searchInterfaces.each(function () {
    var searchInterface = Coveo.$$(this);
    if (searchInterface.hasClass("insights-search-interface")) {
      searchInterface.on("newResultsDisplayed", function (evt) {
        Coveo.$(".CoveoQuerySummary", this).toggleClass("hidden", !!Coveo.$$(evt.target).find(".CoveoResult"));
      });
    }
    /*
    // hide empty filters
    if (!isPageEditor()) {
      searchInterface.on(Coveo.InitializationEvents.afterInitialization, function () {
        Coveo.$.each(this.CoveoComponentState.attributes, function () {
          Coveo.$.each(this, function () {
            var originalQuerySuccessHandler = this.handleDeferredQuerySuccess;
            this.handleDeferredQuerySuccess = function (data) {
              originalQuerySuccessHandler.call(this, data);
              var col = Coveo.$(this.element).parent('.col-33');
              col.toggleClass("hidden", !this.getDisplayedFacetValues().length);
              markExtraCols(col.parent());
            };
          });
        });
      });
    }
    */
  });

  // Show More Filters Button
  /// $('.filters_wrapper .filters').on("click", '.coveo-show-more-filters, .coveo-show-more-filters-mobile', function (evt) {
  //   !$('.expanded', evt.delegateTarget).length && $(evt.delegateTarget).toggleClass("more");
  // });
});

$(".CoveoFacetDropdown").click(function () {
  var expandedFacets = $(".CoveoFacetDropdown");
  expandedFacets.not($(this)).removeClass("expanded");
});
$(".custom-close-button").click(function () {
  $(".nav-search-coveo-wrapper").hide();
  $(".nav-search-button").show();
});

/***/ }),
/* 13 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var _main = __webpack_require__(0);

$(document).ready(function () {
    $('.insights_carousel__container__swiper').each(function (index) {
        var slideCount = $('.swiper-wrapper .swiper-slide', this).length;

        $(this).addClass('insights_carousel-sl-' + index);
        var parentClass = '.' + $(this).parent().attr("data-slider");
        $(parentClass + ' .swiper-pagination').addClass('sw-' + index);
        $(parentClass + ' .button-next').addClass('btn-nex-' + index);
        $(parentClass + ' .button-prev').addClass('btn-pr-' + index);

        var swiper = new Swiper('.insights_carousel-sl-' + index, {
            slidesPerView: 3,
            spaceBetween: 8,
            slidesPerGroup: 3,
            loop: (0, _main.loop)(slideCount),
            centerSlides: (0, _main.centerSlides)(slideCount),
            pagination: {
                el: '.sw-' + index,
                clickable: true
            },
            navigation: {
                nextEl: '.btn-nex-' + index,
                prevEl: '.btn-pr-' + index
            },
            breakpoints: {
                768: {
                    slidesPerView: 2,
                    slidesPerGroup: 2,
                    spaceBetween: 10
                },
                725: {
                    slidesPerView: 1,
                    slidesPerGroup: 1,
                    spaceBetween: 30
                }
            }
        });
    });
});

/***/ }),
/* 14 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var _main = __webpack_require__(0);

$(document).ready(function () {
  $('.point-of-view__container__swiper').each(function () {
    var swiper = this;
    new Swiper(swiper, {
      slidesPerView: 3,
      spaceBetween: 8,
      slidesPerGroup: 3,
      loop: true,
      loopFillGroupWithBlank: true,
      pagination: {
        el: (0, _main.swiperQuery)(swiper, '.swiper-pagination'),
        clickable: true
      },
      navigation: {
        nextEl: (0, _main.swiperQuery)(swiper, '.button-next'),
        prevEl: (0, _main.swiperQuery)(swiper, '.button-prev')
      },
      breakpoints: {
        640: {
          slidesPerView: 1,
          slidesPerGroup: 1,
          spaceBetween: 30
        }
      }
    });
  });

  $('.point-of-view .swiper-slide.card-link').on("click", function (evt) {
    var $link = $('.card-title', this),
        target = $link.attr("target") || "_self",
        targetUrl = $link.attr("href");

    if (targetUrl) {
      window.open(targetUrl, target);
      evt.preventDefault();
    }
  });
});

/***/ }),
/* 15 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


$(document).ready(function () {

    function getQueryParameterByName(name, url) {
        url = url || window.location.href;
        name = name.replace(/[\[\]]/g, "\\$&");

        var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
            results = regex.exec(url);

        return results ? results[2] ? decodeURIComponent(results[2].replace(/\+/g, " ")) : '' : null;
    }

    function buildErrorForm(errorText) {
        errorText = "An error occurred while trying to load a dialog: " + (errorText == "error" ? "Unknown error" : errorText);
        console.error(errorText);
        return '<div class="validation-summary-errors">' + errorText + '</div>';
    }

    // For modal videos (venobox + brightcove documentation methods combined)
    $('.build-brightcove-player').venobox({
        // is called when opening is finished
        cb_post_open: function cb_post_open(obj, gallIndex, thenext, theprev) {
            var myPlayer,
                playerHTML,

            // +++ Set the data for the player +++
            playerData = {
                accountId: obj.data('bright-account'),
                playerId: "default",
                videoId: obj.data('bright-video-id'),
                playerDivId: obj.data('bright-player-id')
            };

            // +++ Build the player and place in HTML DOM +++

            // Dynamically build the player video element
            playerHTML = '<video-js id="' + playerData.playerDivId + '" data-video-id="' + playerData.videoId + '"  data-account="' + playerData.accountId + '" data-player="' + playerData.playerId + '" data-embed="default" class="vjs-fluid" controls></video-js>';
            // Inject the player code into the DOM
            $(".vbox-content .modal-video").html(playerHTML);
            // Add and execute the player script tag
            var bcscript = document.createElement("script");
            bcscript.src = "//players.brightcove.net/" + playerData.accountId + "/" + playerData.playerId + "_default/index.min.js";
            // Add the script tag to the document
            $('.vbox-overlay').append(bcscript);
            // Call a function to play the video once player's JavaScropt loaded
            //bcscript.onload = function () {
            //    // Can also use the following to assign a player instance to the variable if you choose not to use IDs for elements directly
            //    myPlayer = bc(document.getElementById(playerData.playerDivId));
            //    myPlayer.on("loadedmetadata", function () {
            //        // Mute the audio track, if there is one, so video will autoplay on button click
            //        //myPlayer.muted(true);
            //        //myPlayer.play();
            //    });
            //};
        }
    });

    // Define behavior for all modal dialogs
    $.configBuildModal({
        bodyHtml: '<div class="container-change">' + '<h5 class="modal-title">Loading...</h5>' + '<div class="form">' + '<div class="progress-bar progress-striped active"></div>' + '</div>' + '</div>',
        headerCss: "close-btn",
        bodyCss: "contact_content"
    });

    $(document).on("create.fxb.modal", function (evt, options) {
        options = options || {};
        var dialogId = options.id || null;

        if (dialogId) {
            var builder = $.buildModal(dialogId);
            var $dialog = builder.create();

            $('.close-btn', $dialog).on("click", function () {
                $dialog.trigger("hide.fxb.modal");
            });

            if ($dialog.length !== 0) {
                $.get(options.url, function (response) {
                    var $form = $('form[data-sc-fxb]', response);
                    if ($form.length !== 0) {
                        $('.form', $dialog).html($form);

                        $('.modal-title', $dialog).text($('.page-header', $form).hide().text());

                        $.validator.unobtrusive.parse($form);
                        $form.initFormControls();
                        $form.init_formConditions();

                        if (typeof options.loaded == "function") {
                            options.loaded.call($dialog[0]);
                        }
                    } else {
                        $('.form', $dialog).html(buildErrorForm("Form was not found"));
                    }
                }).fail(function (xhr) {
                    $('.form', $dialog).html(buildErrorForm(xhr.statusText));
                });

                if (typeof options.created == "function") {
                    options.created.call($dialog[0]);
                }

                options.show === true && $dialog.trigger("show.fxb.modal");
            } else if (options.show === true) {
                $('#' + dialogId).trigger("show.fxb.modal");
            }
        } else {
            throw new Error("Invalid dialog id");
        }
    }).on("show.fxb.modal", '.modal', function () {
        var scrollWidth = window.innerWidth - document.documentElement.clientWidth;
        scrollWidth = scrollWidth >= 0 ? scrollWidth : 0;
        $('.all-page-wrapper').addClass("modal-open").css("padding-right", scrollWidth).find('.header').css("padding-right", scrollWidth);
        $(this).fadeIn(function () {
            $(this).trigger("shown.fxb.modal");
        });
    }).on("hide.fxb.modal", '.modal', function () {
        $(this).fadeOut(function () {
            $('.all-page-wrapper').removeClass("modal-open").css("padding-right", "").find('.header').css("padding-right", "");
            $(this).trigger("hidden.fxb.modal");
        });
    }).on("keyup", function (evt) {
        if (evt.key == "Escape") {
            var $dialog = $('.modal');
            $dialog.is(':visible') && $dialog.trigger("hide.fxb.modal");
        }
    });

    $.fxbHandlers.add("submit:success", function (form) {
        var $form = $(form);
        // update media links inside a form
        var mediaUrl = $form.attr("action");
        mediaUrl = getQueryParameterByName("redirectUrl", mediaUrl);
        mediaUrl = mediaUrl == null ? $form.next('.asset-media-url').val() : mediaUrl;

        var $mediaLink = $form.find('.media-url');
        mediaUrl && $mediaLink.attr("href", mediaUrl) || $mediaLink.remove();

        $form.closest('.modal').trigger("submitted.fxb.modal");
    });
});

/***/ }),
/* 16 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var _main = __webpack_require__(0);

$(document).ready(function () {
    // Redesign
    var wrapper = '.init-js-related';
    $(wrapper + ' .swiper').each(function () {
        var swiper = this;
        new Swiper(swiper, {
            slidesPerGroup: 4,
            spaceBetween: 30,
            navigation: {
                nextEl: (0, _main.swiperQuery)(swiper, '.button-next'),
                prevEl: (0, _main.swiperQuery)(swiper, '.button-prev')
            },
            pagination: {
                el: (0, _main.swiperQuery)(swiper, '.swiper-pagination')
            },
            breakpoints: {
                320: {
                    slidesPerView: 1,
                    slidesPerGroup: 1,
                    spaceBetween: 0
                },
                768: {
                    slidesPerView: 4,
                    spaceBetween: 20
                }
            }
        });
    });
});

/***/ }),
/* 17 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


$(document).ready(function () {
	function formatEventDate(date) {
		return date.toLocaleDateString("en", { month: "long" }) + " " + date.getDate();
	}

	function formatEventTime(time) {
		return time.toLocaleTimeString("en", { hour: "numeric", minute: "numeric" }).replace(" ", "");
	}

	function formatTimezone(time) {
		return (/GMT[+-]\d+ .*/.exec(time.toString())[0]
		);
	}

	$('.event-detail-inner:not(.editing) .date-container').each(function () {
		var startDate = $(this).data("st-utc");
		var endDate = $(this).data("et-utc");
		var eventDate = "",
		    eventTime = "",
		    timeZone = "";
		if (startDate) {
			startDate = new Date(startDate);
			eventDate = formatEventDate(startDate);
			eventTime = formatEventTime(startDate);
			timeZone = formatTimezone(startDate);
		}

		if (endDate) {
			endDate = new Date(endDate);
			if (formatEventDate(endDate) !== formatEventDate(startDate)) {
				eventDate += " - ";
				eventDate += startDate.getMonth() == endDate.getMonth() && startDate.getYear() == endDate.getYear() ? endDate.getDate() : formatEventDate(endDate);
			}
			eventDate += ", " + endDate.getFullYear();
			timeZone = formatTimezone(endDate);
			eventTime += " - " + formatEventTime(endDate);
		}

		startDate && $('.date .date-content p', this).text(eventDate);
		endDate && $('.time .time-content .time-content-value', this).text(eventTime);
		if (timeZone != "") {
			var timezoneParts = timeZone.split(' ');
			if (timezoneParts.length > 0) timeZone = "(" + timezoneParts[0] + ")";
			$('.time-content-timezone', this).text(timeZone);
		}
	});

	$("#event-view-map").on("click", function () {
		var offset = $("#event-map").offset();
		offset.top -= 65;

		$(window).scrollTop(offset.top);
		return false;
	});

	typeof AOS != "undefined" && AOS.init();
});

/***/ }),
/* 18 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


$(document).ready(function () {
  $('.close-btn_local').click(function () {
    $('.local-language_content').addClass('hide');
    $('.local-language_content').removeClass('show-modal');
    $('.show').show();
  });
  $('.show').hide();
  $('.show').click(function () {
    $('.local-language_content').addClass('show-modal');
    $('.local-language_content').removeClass('hide');
    $('.show').hide();
  });
});

/***/ }),
/* 19 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var _main = __webpack_require__(0);

$(document).ready(function () {
    $('.image-carousel-big').slick({
        arrows: false,
        dots: false,
        fade: true,
        slidesToShow: 1,
        slidesToScroll: 1,
        draggable: false,
        asNavFor: '.image-carousel-small',
        dotsClass: 'image-carousel-big-dots',
        responsive: [{
            breakpoint: 768,
            settings: {
                dots: true,
                draggable: true,
                fade: false,
                adaptiveHeight: true
            }
        }]
    });
    $('.image-carousel-meta-actions').slick({
        arrows: false,
        dots: false,
        fade: true,
        slidesToShow: 1,
        slidesToScroll: 1,
        draggable: false

    });

    $('.image-carousel-small').slick({
        centerMode: true,
        slidesToShow: 3,
        arrows: true,
        dots: false,
        centerPadding: '100px',
        nextArrow: '<i class="image-carousel-small-buttons prev iqvia-icon-menu-right" />',
        prevArrow: '<i class="image-carousel-small-buttons next iqvia-icon-menu-left" />',
        asNavFor: '.image-carousel-common-slick'
    });

    //Graphic Image carousel
    //var $sliders = $('.graphic-image-carousel__group');
    //$sliders.on("init", function (evt, slick) {
    //   //resizeSlides(slick.$slides);
    //}).each(function (index, slider) {
    //    var $slider = $(slider);
    //    var $container = $slider.parent();
    //    $slider.slick({
    //        prevArrow: $container.find('.graphic-image-carousel__arrow--prev'),
    //        nextArrow: $container.find('.graphic-image-carousel__arrow--next'),
    //        dots: true,
    //        appendDots: $container.find('.graphic-image-carousel__dots'),
    //        autoplay: false,
    //        autoplaySpeed: 2000,
    //        responsive: [{
    //            breakpoint: 600,
    //            settings: {
    //                arrows: false
    //            }
    //        }]
    //    });
    //});

    // Redesign (GraphicImage.cshtml)
    $('.graphic-image-redesign').each(function () {
        var container = this;
        $('.swiper', container).each(function () {
            var swiper = this;
            new Swiper(swiper, {
                slidesPerView: 1,
                autoHeight: false,
                loop: true,
                navigation: {
                    nextEl: (0, _main.swiperQuery)(container, '.graphic-image__outer .graphic-image__wrapper .button-next'),
                    prevEl: (0, _main.swiperQuery)(container, '.graphic-image__outer .graphic-image__wrapper .button-prev')
                },
                pagination: {
                    el: (0, _main.swiperQuery)(container, '.graphic-image__outer .graphic-image__wrapper .controls-panel .swiper-pagination'),
                    clickable: true
                }
            });
        });
    });
});

/***/ }),
/* 20 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


$(document).ready(function () {
  $('.single-card__inner .single-card__item.card-link').on("click", function (evt) {
    var $link = $('.single-card__cta-link', this),
        target = $link.attr("target") || "_self",
        targetUrl = $link.attr("href");

    if (targetUrl) {
      window.open(targetUrl, target);
      evt.preventDefault();
    }
  });
});

/***/ }),
/* 21 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


$(document).ready(function () {
    var slidingSpeed = 250;

    $('.single-audio-card:not(.scModuleEditing)').each(function (idx, container) {
        $('.media-transcript', container).on("click", '.media-transcript-caption', function (e) {
            var transcript = $(e.delegateTarget),
                transBtn = $(this);
            transcript.find('.media-transcript-body').slideDown({
                duration: slidingSpeed,
                start: function start() {
                    transBtn.hide();
                },
                complete: function complete() {
                    var transBox = $('.media-transcript-text', this);
                    transcript.addClass("opened");
                    if (transBox.hasClass("mCustomScrollbar")) {
                        transBox.mCustomScrollbar("update");
                    } else {
                        transBox.mCustomScrollbar({
                            theme: "iqvia-blue",
                            scrollInertia: 0
                        });
                    }
                }
            });

            return false;
        }).on("click", '.media-transcript-xmark .btn', function (e) {
            var transcript = $(e.delegateTarget),
                transBtn = transcript.find('.media-transcript-caption');
            transcript.find('.media-transcript-body').slideUp({
                duration: slidingSpeed,
                complete: function complete() {
                    transcript.removeClass("opened");
                    transBtn.show();
                }
            });
        });

        $('.media-item', container).each(function (idx, audio) {
            audio.addEventListener("play", function () {
                var mediabox = $(audio).parent('.single-audio-card-media');
                if (!mediabox.hasClass("opened")) {
                    mediabox.addClass("opened").find('.media-author').slideDown(slidingSpeed);
                }
            });
        });
    });
});

/***/ }),
/* 22 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


$(document).ready(function () {
  $('.multi-card__wrapper .card-item.card-link, .multi-card__wrapper .card-item-wrapper.card-link').on("click", function (evt) {
    var $link = $('.card-title', this),
        target = $link.attr("target") || "_self",
        targetUrl = $link.attr("href");

    if (targetUrl) {
      window.open(targetUrl, target);
      evt.preventDefault();
    }
  });
});

/***/ }),
/* 23 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


$(document).ready(function () {
  $('.leadership-content li').fadeOut(1);
  $('.leadership-content li').eq(0).fadeIn(1);
  $('.leadership-tabs button').eq(0).addClass('active-tab');
  $('.leadership-tabs button').click(function () {
    var index = $(this).index();
    $('.leadership-content li').fadeOut(300).eq(index).fadeIn(300);
    $('.leadership-tabs button').removeClass('active-tab').eq(index).addClass('active-tab');
  });
});

/***/ }),
/* 24 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


$(document).ready(function () {

    function toggleSubmit(form, enable) {
        var parent = $(':submit', form).prop("disabled", !enable).parent();
        parent.toggleClass("form-submit-loading", !enable);
    }

    $.fn.extend({
        initFormControls: function initFormControls() {
            this.each(function () {
                var validator = $(this).data("validator");
                if (validator) {
                    var originalPlacement = validator.settings.errorPlacement;
                    var originalSuccess = validator.settings.success;
                    validator.settings.errorPlacement = function (error, element) {
                        $(element).closest('.form-group').addClass("has-error");
                        originalPlacement(error, element);
                    };
                    validator.settings.success = function (error, element) {
                        $(element).closest('.form-group').removeClass("has-error");
                        originalSuccess(error, element);
                    };
                }
                $(':submit:first-child', this).before('<i class="fa fa-circle-notch fa-spin"></i>');
            }).on("click", '.control-label', function (evt) {
                $(evt.target).next('select:enabled').select2("open");
            }).on("change", 'label :checkbox', function (evt) {
                var boxLabel = $(evt.target).parent('label');
                boxLabel.toggleClass("checked", this.checked);
            }).on("submit", function (evt, action) {
                var submitReady = true;
                if (action !== "consent") {
                    var $form = $(this),
                        validator = $form.data("validator");
                    if (!validator || validator.valid()) {
                        typeof Optanon != "undefined" && $(':submit.btn-consent-allow:first', this).each(function () {
                            var categories = $form.next().next('.consent-groups').val();
                            categories = (categories || "").split(",").filter(function (categoryId) {
                                return categoryId;
                            }).map(function (categoryId) {
                                return Optanon.UpdateConsent("Category", categoryId + ":1");
                            });
                            submitReady = !Promise.all(categories).then(function () {
                                //$form.trigger("submit", ["consent"]);
                                window.location.reload();
                            });
                        });
                        toggleSubmit(this, false);
                    }
                }
                return submitReady;
            }).find('.form-group').filter(function () {
                return $('label:has(:checked)', this).addClass("checked").length || $('.form-control', this).val();
            }).addClass("has-value");

            $('.form-control', this).on("change keyup", function () {
                var $that = $(this),
                    group = $that.parent('.form-group');
                group.toggleClass("has-value", !!$that.val());
                toggleSubmit(this, true);
            }).on("focusin", function () {
                $(this).parent('.form-group').addClass("has-focus");
            }).on("focusout", function () {
                $(this).parent('.form-group').removeClass("has-focus");
            });

            $('.multiple-forms-select', this).on("change", function () {
                var formUrl = $(this).val();
                if (formUrl) {
                    $(this).prop("disabled", true);
                    window.location.href = formUrl;
                }
            });

            $('select.form-control', this).select2({
                dropdownParent: $(this).parent(),
                minimumResultsForSearch: Infinity,
                width: "100%"
            }).on("select2:opening", function () {
                $(this).prev('.control-label').css("z-index", 1052);
            }).on("select2:closing", function () {
                $(this).prev('.control-label').css("z-index", "");
            });

            var expandCheckboxDropdown = function expandCheckboxDropdown(dropdown) {
                $(dropdown).addClass("show").find('.dropdown-toggle').attr("aria-expanded", true);
                $(document.body).on("click.fxbCheckboxDropdown", function (evt) {
                    var $target = $(evt.target);
                    if ($target.closest('.dropdown-menu').length == 0) {
                        $('.checkbox-dropdown').removeClass("show").find('.dropdown-toggle').attr("aria-expanded", false);
                        $(document.body).off("click.fxbCheckboxDropdown");
                    }
                });
            };
            $('.checkbox-dropdown', this).on("click", function (evt) {
                if (!$(this).hasClass("show")) {
                    expandCheckboxDropdown(this);
                    evt.stopPropagation();
                }
            }).filter('.form-control').on("change", function () {
                var $that = $(this),
                    group = $that.parent('.form-group');
                group.toggleClass("has-value", !!$that.find('label :checked').length);
            }).find('.dropdown-menu').mCustomScrollbar({
                mouseWheel: true,
                advanced: {
                    updateOnContentResize: true
                }
            });
            $('.dropdown-label', this).on("click", function (evt) {
                $(this).nextAll('.checkbox-dropdown:not(.show)').each(function () {
                    expandCheckboxDropdown(this);
                    evt.stopPropagation();
                });
            });

            return this;
        }
    });

    $.fxbHandlers.add("submit:complete", function (form) {
        $(form).initFormControls();
    });
    $.fxbHandlers.add("submit:error", function (form, xhr) {
        alert("An error occurred while trying to submit a form: " + xhr.statusText);
        toggleSubmit(this, true);
    });

    $(document).on("keyup", '.select2.select2-container--focus', function (evt) {
        $(this).parent('.form-group').addClass("has-focus");
        var selectId = $('.select2-selection__rendered', this).attr("id");
        if (selectId && evt.key) {
            $('#' + selectId + ' .select2-results__option').closest('.select2-results').mCustomScrollbar("scrollTo", $('.select2-results__option.select2-results__option--highlighted'), { scrollInertia: 0 });
            var match = /^select2-([\w-_]+)-container$/.exec(selectId);
            var $list = $(match ? "#" + match[1] : null);
            selectId = match ? "select2-" + match[1] + "-results" : "";
            $list.find('option').each(function () {
                var optionValue = this.innerText;
                if (optionValue && optionValue[0].toLowerCase() == evt.key.toLowerCase()) {
                    $('#' + selectId + ' .select2-results__option').each(function () {
                        var $option = $(this);
                        if ($option.text() == optionValue) {
                            $option.trigger('mouseenter');
                            $option.closest('.select2-results').mCustomScrollbar("scrollTo", $option, { scrollInertia: 0 });
                            return false;
                        }
                    });
                    return false;
                }
            });
        }
    }).on("focusout", '.select2.select2-container--focus', function () {
        $(this).parent('.form-group').removeClass("has-focus");
    });

    $('.contact_content form').initFormControls();
});

/***/ }),
/* 25 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


$(document).ready(function () {
    var _this = this;

    var wrapper = ".multi-card_feature-redesign-custom-swiper";
    var scrollArea = wrapper + " .scroll-area";
    var scrollSpeed = 300; // ms
    var btnNext = $(wrapper + " .controls-panel .button-next");
    var btnPrev = $(wrapper + " .controls-panel .button-prev");
    var isBtnPressed = false;
    //
    for (var i = 0; i < Array.from($(wrapper)).length; i++) {
        try {
            (function () {
                var ps = new PerfectScrollbar($(scrollArea)[i], {
                    swipeEasing: false
                });
                var isScroll = $(wrapper + " .ps__thumb-x")[i];
                isScroll = window.getComputedStyle(isScroll).width;
                isScroll = +isScroll.replace("px", "");
                if (isScroll) $(wrapper + " .controls-panel").eq(i).addClass("show-controls");
                var scrollItemWidth = $(scrollArea).find("article").outerWidth() || 0;
                $(scrollArea)[i].addEventListener("ps-scroll-x", function (e) {
                    if (isBtnPressed) {
                        isBtnPressed = false;
                        return;
                    }
                    // const targetPosition = Math.ceil(ps.lastScrollLeft / scrollItemWidth) * scrollItemWidth;
                    $(_this).parents(".multi-card__wrapper").find(".controls-panel").attr("scroll-position", ps.lastScrollLeft);
                });
            })();
        } catch (e) {
            console.log(e);
        }
    }
    //
    btnNext.click(function () {
        isBtnPressed = true;
        var scrollArea = $(this).parents(".multi-card__wrapper").find(".scroll-area");
        scrollAnimate("next", scrollArea, $(this));
        $(this).parent().find(".button-prev").removeClass("disabled");
    });
    btnPrev.click(function () {
        isBtnPressed = true;
        var scrollArea = $(this).parents(".multi-card__wrapper").find(".scroll-area");
        scrollAnimate("prev", scrollArea, $(this));
        $(this).parent().find(".button-next").removeClass("disabled");
    });

    function scrollAnimate() {
        var direction = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
        var area = arguments[1];
        var vm = arguments[2];

        var scrollItem = area.find("article").outerWidth() || 0;
        var slidePerView = +area.attr("per-slide") || 1;
        var targetPosition = +vm.parent().attr("scroll-position") || 0;

        if (direction === "next") targetPosition += scrollItem * slidePerView;else targetPosition -= scrollItem * slidePerView;
        vm.parent().attr("scroll-position", targetPosition);
        area.animate({ scrollLeft: +targetPosition }, scrollSpeed);
    }

    $(scrollArea).on("ps-x-reach-end", function () {
        $(this).parents(".multi-card__wrapper").find(".controls-panel .button-next").addClass("disabled");
        $(this).parents(".multi-card__wrapper").find(".controls-panel .button-prev").removeClass("disabled");
    });
    $(scrollArea).on("ps-x-reach-start", function () {
        $(this).parents(".multi-card__wrapper").find(".controls-panel .button-prev").addClass("disabled");
        $(this).parents(".multi-card__wrapper").find(".controls-panel .button-next").removeClass("disabled");
    });
});

/***/ }),
/* 26 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


$(document).ready(function () {
    $("#datepicker-events").datepicker({
        showOtherMonths: true,
        selectOtherMonths: true
    });
    $("#datepicker").datepicker({
        showOtherMonths: true,
        selectOtherMonths: true
    });
    $(".date-picker_triangle").click(function () {
        $(this).toggleClass('rotate');
    });
});

/***/ }),
/* 27 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var alwaysShowCTA = false;
$(document).ready(function () {
  var sticky = $('.btn-container-stiky');
  var stickyBottom = parseInt(sticky.css('bottom'));
  var stickyright = parseInt(sticky.css('right'));

  $('.contact-us-stiky', sticky).click(function () {
    $('.content-stiky', sticky).addClass('show-content');
    $(this).hide();
  });
  var icons = {
    header: "fas fa-chevron-down",
    activeHeader: "fas fa-chevron-up"
  };
  $('.stiky-accordeon', sticky).accordion({
    collapsible: true,
    heightStyle: "content",
    icons: icons
  });
  $('.title-header .fas', sticky).click(function () {
    $('.content-stiky', sticky).removeClass("show-content");
    $('.contact-us-stiky', sticky).show();
  });
  $(window).scroll(function () {
    var $offset = $(".footer").offset().top,
        $wh = $(window).innerHeight(),
        $ww = $(window).innerWidth(),
        $sw = sticky.outerWidth(),
        $stickyRightCenter = ($ww - $sw) / 2,
        $diff = $offset - $wh,
        $scrolled = $(window).scrollTop();
    if ($ww <= 320) {
      sticky.css("right", $stickyRightCenter);
    } else {
      sticky.css("right", stickyright);
    }
    sticky.css("bottom", Math.max(stickyBottom, $scrolled - $diff));

    if ($(window).scrollTop() > 300) {
      sticky.addClass("show");
    } else if (alwaysShowCTA === false) {
      sticky.removeClass("show");
    }
  });
  if (document.documentElement.scrollHeight - document.documentElement.clientHeight < 300) {
    sticky.addClass("show");
    alwaysShowCTA = true;
  }
});

/***/ }),
/* 28 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var _main = __webpack_require__(0);

$(document).ready(function () {
    //if ('objectFit' in document.documentElement.style === false) {
    //    $('.image-align-box__image-box img').each(function () {           
    //        var t = $(this),
    //            s = 'url(' + t.attr('src') + ')',
    //            p = t.parent(),
    //            d = $('<div></div>'),
    //            w = t.css('max-width'),
    //            h = t.css('height');
    //        t.hide();
    //        p.append(d);
    //        d.css({
    //            'width': w,
    //            'height': h,          
    //            'background-size': 'contain',
    //            'background-repeat': 'no-repeat',
    //            'background-position': 'center',
    //            'background-image': s
    //        });
    //    });
    //}

    //function resizeSlides($slides) {
    //    var slideH = 0;
    //    $slides.find('.flex-column').css("height", '').each(function () {
    //        var $slide = $(this);
    //        slideH = $slide.innerHeight() > slideH ? $slide.innerHeight() : slideH;
    //    }).css("height", slideH + "px");
    //}

    //var $sliders = $('.image-align-box_carousel__group');
    //$sliders.on("init", function (evt, slick) {
    //    resizeSlides(slick.$slides);
    //}).each(function (index, slider) {
    //    var $slider = $(slider);
    //    var $container = $slider.parent();
    //    $slider.slick({
    //        prevArrow: $container.find('.image-align-box_carousel__arrow--prev'),
    //        nextArrow: $container.find('.image-align-box_carousel__arrow--next'),
    //        dots: true,
    //        appendDots: $container.find('.image-align-box_carousel__dots'),
    //        autoplay: false,
    //        autoplaySpeed: 2000,
    //        responsive: [{
    //            breakpoint: 600,
    //            settings: {
    //                arrows: false
    //            }
    //        }]
    //    });
    //});
    //$(window).resize(function () {
    //    $sliders.each(function () {
    //        resizeSlides($(this));
    //    });
    //});

    // Redesign (PromoBoxFiftyFifty.cshtml)
    var wrapper = '.fifty-fifty-redesign';
    $(wrapper + ' .swiper').each(function () {
        var swiper = this;
        new Swiper(swiper, {
            slidesPerView: 1,
            loop: true,
            spaceBetween: 20,
            navigation: {
                nextEl: (0, _main.swiperQuery)(swiper, '.button-next'),
                prevEl: (0, _main.swiperQuery)(swiper, '.button-prev')
            },
            pagination: {
                el: (0, _main.swiperQuery)(swiper, '.swiper-pagination'),
                clickable: true
            }
        });
    });
});

/***/ }),
/* 29 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var _main = __webpack_require__(0);

$(document).ready(function () {
  var wrapper = ".CoveoRecommendations.redesign";
  $(wrapper + ' .swiper').each(function () {
    var swiper = this;
    new Swiper(swiper, {
      slidesPerView: 4,
      spaceBetween: 10,
      slidesPerGroup: 4,
      navigation: {
        nextEl: (0, _main.swiperQuery)(swiper, '.button-next'),
        prevEl: (0, _main.swiperQuery)(swiper, '.button-prev')
      },
      pagination: {
        el: (0, _main.swiperQuery)(swiper, '.swiper-pagination'),
        clickable: true
      },
      breakpoints: {
        320: {
          slidesPerView: 1,
          slidesPerGroup: 1,
          spaceBetween: 5
        },
        768: {
          slidesPerView: 2,
          spaceBetween: 10
        },
        1024: {
          slidesPerView: 3,
          spaceBetween: 15
        },
        1180: {
          slidesPerView: 4,
          spaceBetween: 20
        }
      }
    });
  });
});

/***/ }),
/* 30 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var alwaysShowCTA = false;
$(document).ready(function () {
  var sticky = $('.btn-container-stiky-mobile');
  var stickyBottom = parseInt(sticky.css('bottom'));
  $('body').one("DOMNodeInserted", '.modal-body.contact_content .container-change', function (e) {
    var contactText = $(".form-contact-info.hidden");
    if (contactText != null && contactText != 'undefined') {
      var formModalBody = $(".modal-body.contact_content .container-change");
      formModalBody.prepend(contactText.html());
    }
  });
  $(window).scroll(function () {
    if ($(window).scrollTop() > 300) {
      sticky.addClass("show");
    } else if (alwaysShowCTA === false) {
      sticky.removeClass("show");
    }
  });
  if (document.documentElement.scrollHeight - document.documentElement.clientHeight < 300) {
    sticky.addClass("show");
    alwaysShowCTA = true;
  }
});

/***/ }),
/* 31 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


$(document).ready(function () {
    var navBar = $('.nav-bar');
    var rbuNavBar = $('.rbu-nav-bar');
    var rbuMain = $('.rbu-navigation');
    //Add class to all menus if the rbu is present (to assign correct TOP)
    if (rbuNavBar.length > 0) {
        $('.global-picker').addClass('rbu-present');
        $('.search_wrapper.popup').addClass('rbu-present');
        navBar.addClass('rbu-present');
        var rbuDiv = '<div class="rbu-navigation-div"></div>';
        $('.rbu-navigation.header__menu').closest('.header').before($(rbuDiv));
    }
    $('.rbu-menu__button').click(function () {
        $('.h-menu__bars').removeClass('active-icon');
        navBar.removeClass('active-navbar');
        rbuNavBar.toggleClass('active-navbar');
        $(this).toggleClass('active');
        $('.global-picker').removeClass('active-picker');
        $('.header__globe .header__button').removeClass('active-btn');
        $('.search_wrapper.popup').removeClass('active-picker');
        $('.accordion .title a', rbuNavBar).removeClass('active');
        $('.accordion .title .content', rbuNavBar).hide();
        $('.header__search .header__button').removeClass('active-btn_search');
    });
    //
    rbuNavBar.on("click", '.accordion .title > a', function (evt) {
        var dropDown = $(this).siblings('.content');
        $('.content', evt.delegateTarget).not(dropDown).slideUp();
        $('.accordion .title .active', evt.delegateTarget).not(this).removeClass("active");
        $(this).toggleClass("active");
        dropDown.stop(false, true).slideToggle();
        evt.preventDefault();
    });
    //Scroll
    window.currScrollTop = $(window).scrollTop();
    window.currScrollDirection = 0;
    window.prevScrollTop = window.currScrollTop;
    $(window).scroll(function () {
        if (rbuNavBar.length > 0) {
            if ($(window).scrollTop() == window.currScrollTop) return;
            var newScrollDirection = $(window).scrollTop() > window.prevScrollTop ? 1 : -1;
            window.prevScrollTop = $(window).scrollTop();
            if (newScrollDirection != window.currScrollDirection && window.currScrollDirection != 0) {
                window.currScrollTop = $(window).scrollTop();
            } else {
                var delta = Math.abs(window.currScrollTop - $(window).scrollTop());
                if (delta > 400) {
                    //down
                    if (newScrollDirection == 1) {
                        rbuMain.addClass("hide");
                        rbuNavBar.addClass("hide");
                        $('.global-picker').removeClass('rbu-present');
                        $('.search_wrapper.popup').removeClass('rbu-present');
                        navBar.removeClass('rbu-present');
                    }
                    //up
                    else {
                            rbuMain.removeClass("hide");
                            rbuNavBar.removeClass("hide");
                            $('.global-picker').addClass('rbu-present');
                            $('.search_wrapper.popup').addClass('rbu-present');
                            navBar.addClass('rbu-present');
                        }
                }
            }
        }
    });
});

/***/ }),
/* 32 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


$(document).ready(function () {
    $('.q-and-a-single-module').click(function (el) {
        if (window.innerWidth > 768) {
            $(el.currentTarget).find('.right-part').toggleClass('active');
        } else {
            $(el.currentTarget).find('.fa-chevron-down').toggleClass('rotate');
            $(el.currentTarget).find('.right-part').slideToggle('active');
        }
    });

    if (window.innerWidth < 768) {
        $('.q-and-a-single-module .right-part').hide();
    } else {
        $('.wrapper-module .hidden-text').each(function (e) {
            var h = $(this).height();
            $(this).closest(".q-and-a-single-module .wrapper-module").css('height', h + 'px');
        });
    }
});

/***/ }),
/* 33 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


$(document).ready(function () {
    var items = document.getElementsByClassName('q-and-a-multi-module__item');
    var counter = items.length / 3;
    if (isFloat(counter)) {
        $('.q-and-a-multi-module__item').addClass('float');
    } else {
        $('.q-and-a-multi-module__item').removeClass('float');
    }
});

function isFloat(n) {
    return Number(n) === n && n % 1 !== 0;
}

/***/ }),
/* 34 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


$(document).ready(function () {
    var acc = document.getElementsByClassName("accordion");
    var i;

    for (i = 0; i < acc.length; i++) {
        acc[i].addEventListener("click", function () {
            this.classList.toggle("active");
            var panel = this.nextElementSibling;
            if (panel.style.maxHeight) {
                panel.style.maxHeight = null;
            } else {
                panel.style.maxHeight = panel.scrollHeight + 15 + "px";
            }
        });
    }
});

/***/ }),
/* 35 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


$(document).ready(function () {
    var wrapper = '.fifty-fifty-accordion-redesign';
    $(wrapper + ' .tile-container button.clickable-tile').click(function () {
        var activeEl = $(this);
        var actParent = activeEl.parent();
        var accentColorClass = actParent[0].getAttribute('data-accent-color'); /*Kos*/
        if (actParent.hasClass('active-title')) {
            actParent.removeClass('active-title').next().slideUp();
            if (accentColorClass) {
                activeEl.removeClass(accentColorClass);
            }
            return;
        }
        actParent.parent().children('.tile-container-text').slideUp();
        actParent.parent().children('.tile-container').removeClass('active-title');
        actParent.addClass('active-title').next().slideDown();
        if (accentColorClass) {
            actParent.parent().children('.tile-container').children('.clickable-tile').removeClass(accentColorClass);
            activeEl.addClass(accentColorClass);
        }
    });
});

/***/ }),
/* 36 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


$(document).ready(function () {
    var slidingSpeed = 250;

    $('.fifty-fifty-audio-card:not(.scModuleEditing)').each(function (idx, container) {
        $('.media-transcript', container).on("click", '.media-transcript-caption', function (e) {
            var transcript = $(e.delegateTarget),
                transBtn = $(this);
            transcript.find('.media-transcript-body').slideDown({
                duration: slidingSpeed,
                start: function start() {
                    transBtn.hide();
                },
                complete: function complete() {
                    var transBox = $('.media-transcript-text', this);
                    transcript.addClass("opened");
                    if (transBox.hasClass("mCustomScrollbar")) {
                        transBox.mCustomScrollbar("update");
                    } else {
                        transBox.mCustomScrollbar({
                            theme: "iqvia-blue",
                            scrollInertia: 0
                        });
                    }
                }
            });

            return false;
        }).on("click", '.media-transcript-xmark .btn', function (e) {
            var transcript = $(e.delegateTarget),
                transBtn = transcript.find('.media-transcript-caption');
            transcript.find('.media-transcript-body').slideUp({
                duration: slidingSpeed,
                complete: function complete() {
                    transcript.removeClass("opened");
                    transBtn.show();
                }
            });
        });
    });
});

/***/ }),
/* 37 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
/* TODO: add code for tabs when it's necessary */


/***/ }),
/* 38 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


/***/ }),
/* 39 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


$(document).ready(function () {
    var wrapper = '.accordion-module-redesign';
    $(wrapper + ' .tile-container button.clickable-tile').click(function () {
        var activeEl = $(this);
        var actParent = activeEl.parent();
        var accentColorClass = actParent[0].getAttribute('data-accent-color'); /*Kos*/
        if (actParent.hasClass('active')) {
            actParent.removeClass('active').next().slideUp();
            if (accentColorClass) {
                activeEl.removeClass(accentColorClass);
            }
            return;
        }
        actParent.parent().children('.tile-container-text').slideUp();
        actParent.parent().children('.tile-container').removeClass('active');
        actParent.addClass('active').next().slideDown();
        if (accentColorClass) {
            actParent.parent().children('.tile-container').children('.clickable-tile').removeClass(accentColorClass);
            activeEl.addClass(accentColorClass);
        }
    });
});

/***/ }),
/* 40 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


$(document).ready(function () {
    if ($(window).width() >= 699) {
        var maxHeight = -1;
        var tabHeight = $('.tab-titles').outerHeight();
        $('.tab-module__tabs').each(function () {
            $(this).find('.tab-section').each(function () {
                if ($(this).outerHeight() > maxHeight) {
                    maxHeight = $(this).outerHeight();
                }
            });
            $(this).height(maxHeight + tabHeight);
            maxHeight = 0;
        });
    }
    $('.tab-module .tab-section').hide();
    $('.tab-titles').on('click', '.tab-wrapper', function () {
        $(this).closest('.tab-module__tabs').find('.tab-contents > .tab-section').eq($(this).index()).addClass('active').siblings().removeClass('active');
        $(this).addClass('active').siblings().removeClass('active');
    });
    $('.tab-titles').find('.tab-wrapper:first').click();
    $('.tab-titles').find('.tab-wrapper').height();
});

/***/ }),
/* 41 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var _main = __webpack_require__(0);

$(document).ready(function () {
    var videoModules = $('.video-js');

    $('.video_carousel__item').each(function () {
        // +++ Set the data for the player +++
        var playerData = {
            accountId: $(this).data('bright-account'),
            playerId: "default",
            videoId: $(this).data('bright-video-id'),
            playerDivId: $(this).data('bright-player-id')
        };

        // +++ Build the player and place in HTML DOM +++

        // Dynamically build the player video element
        var videoModule = $('<video-js id="' + playerData.playerDivId + '" data-video-id="' + playerData.videoId + '" ' + 'data-account="' + playerData.accountId + '" data-player="' + playerData.playerId + '" ' + 'data-embed="default" class="video-js" controls></video-js>');
        // Add and execute the player script tag
        var bcscript = document.createElement("script");
        bcscript.setAttribute("data-playerid", playerData.playerDivId);
        bcscript.onload = bcScriptLoaded;
        // Inject the player code into the DOM with the script
        $('.video_container', this).append(videoModule).append(bcscript);
        bcscript.src = "//players.brightcove.net/" + playerData.accountId + "/" + playerData.playerId + "_default/index.min.js";

        videoModules.push(videoModule[0]);
    });

    function bcScriptLoaded() {
        var playerId = this.getAttribute("data-playerid");
        playerId && videojs(playerId).ready(function () {
            var player = this;
            // Assign and event listener for play event
            player.on("play", function (e) {
                var playerId = e.target.id;
                videoModules.each(function (idx, videoModule) {
                    // Pause the other players
                    videoModule.id != playerId && videojs(videoModule.id).pause();
                });
            });
        });
    }

    $('.video_carousel__arrow, .hero-carousel__arrow, .hero-carousel__dots, .tab-wrapper .tab').on("click", function () {
        videoModules.each(function (idx, videoModule) {
            // Pause all players when sliding
            videojs(videoModule.id).pause();
        });
    });

    function resizeSlides($slides) {
        var slideH = 0;
        $slides.find('.flex-column').css("height", '').each(function () {
            var $slide = $(this);
            slideH = $slide.innerHeight() > slideH ? $slide.innerHeight() : slideH;
        }).css("height", slideH + "px");
    }

    var $sliders = $('.video_carousel__group');
    $sliders.on("init", function (evt, slick) {
        resizeSlides(slick.$slides);
    }).each(function (index, slider) {
        var $slider = $(slider);
        var $container = $slider.parent();
        $slider.slick({
            prevArrow: $container.find('.video_carousel__arrow--prev'),
            nextArrow: $container.find('.video_carousel__arrow--next'),
            dots: true,
            appendDots: $container.find('.video_carousel__dots'),
            autoplay: false,
            autoplaySpeed: 2000,
            responsive: [{
                breakpoint: 600,
                settings: {
                    arrows: false
                }
            }]
        });
    });
    $(window).resize(function () {
        $sliders.each(function () {
            resizeSlides($(this));
        });
    });

    var wrapper = '.video-redesign';
    var player_config = {
        controls: true,
        preload: 'auto'
    };
    var $videos = $(wrapper + ' .video-js');
    var videoPlayers = new Array($videos.length);

    $videos.each(function (idx, player) {
        videoPlayers[idx] = videojs(player, player_config);
    });

    $(wrapper + '.carousel .swiper').each(function () {
        var swiper = this;
        new Swiper(swiper, {
            slidesPerView: 1,
            autoHeight: true,
            navigation: {
                nextEl: (0, _main.swiperQuery)(swiper, '.control-panel .button-next'),
                prevEl: (0, _main.swiperQuery)(swiper, '.control-panel .button-prev')
            },
            pagination: {
                el: (0, _main.swiperQuery)(swiper, '.control-panel .swiper-pagination'),
                clickable: true
            }
        }).on("slideChange", function () {
            $.each(videoPlayers, function (idx, player) {
                player.pause();
            });
        });
    });
});

/***/ }),
/* 42 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


$(document).ready(function () {
    $(".CoveoSearchInterface").on('click', '.clickable-tile', function (el) {
        var tileTextElement = $(this).next(".tile-container-text");
        if (tileTextElement && tileTextElement.is(':visible')) {
            tileTextElement.slideUp();
            $(this).removeClass('active');
        } else {

            tileTextElement.slideDown();
            tileTextElement.show();
            $(this).addClass('active');
        }
        return false;
    });
});

/***/ }),
/* 43 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


$(document).ready(function () {
    var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key

    $('.mid-level-hero-redesign').each(function () {
        var that = this;var player = null;
        var $vdialog = $('.video-popup', that);
        typeof videojs !== "undefined" && $('.video-js', that).each(function () {
            return !(player = videojs.getPlayer(this));
        });

        $('.show-video-btn', that).click(function () {
            $vdialog.addClass("popup-fade");
            setTimeout(function () {
                $vdialog.addClass("popup-open");
            }, 150);
        });
        $('.close-popup-btn', that).click(function () {
            $vdialog.removeClass("popup-open");
            setTimeout(function () {
                $vdialog.removeClass("popup-fade");
            }, 150);
            player && player.pause();
        });
    });

    $(document).on("keydown", function (event) {
        if (event.which === ESCAPE_KEYCODE) {
            var $vdialog = $('.mid-level-hero-redesign .video-popup:visible');
            if ($vdialog.length != 0) {
                event.preventDefault();
                $vdialog.find('.close-popup-btn').click();
            }
        }
    });
});

/***/ }),
/* 44 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


$(document).ready(function () {
	$('.top-level-hero-redesign').each(function () {
		var that = this;
		var isEditing = $(that).hasClass("scModuleEditing");

		$('.swiper-top-level-hero-init', that).each(function () {
			new Swiper(this, {
				loop: !isEditing,
				autoplay: {
					disableOnInteraction: false,
					pauseOnMouseEnter: true
				},
				navigation: {
					nextEl: $('.control-panel .button-next', that).get(0),
					prevEl: $('.control-panel .button-prev', that).get(0)
				},
				pagination: {
					el: $('.control-panel .swiper-pagination', that).get(0),
					clickable: true
				}
			}).on("slideChange", function (swiper) {
				$('.bg .video-js,.bg .video-html,.bg .back-image,.bg .mobile-image', that).removeClass("active").filter('.video-js,.video-html,.back-image').eq(swiper.realIndex).addClass("active").next('.mobile-image').addClass("active");
			});
		});

		$('.video-js', that).each(function () {
			var $wrapper = $(this);

			var resizeVideo = function resizeVideo(clientWidth) {
				var videoWidth = Math.round(that.clientHeight * 16 / 9),
				    videoHeight = that.clientHeight;

				videoHeight = videoWidth < clientWidth ? Math.round(clientWidth * 9 / 16) : videoHeight;
				videoWidth = Math.max(videoWidth, clientWidth);

				$wrapper.css({ "width": videoWidth + "px", "height": videoHeight + "px" });
			};

			resizeVideo($(window).resize(function () {
				resizeVideo(this.innerWidth);
			}).width());

			videojs.getPlayer(this).ready(function () {
				var player = this;
				player.muted(true);
				player.on("loadedmetadata", function () {
					player.play();
				});

				// this is needed for TopLevelHero video
				$('.video-control', that).click(function () {
					var $btn = $(this).find(':first-child');
					var playing = $btn.hasClass("fa-pause");
					$btn.addClass(playing ? "fa-play" : "fa-pause").removeClass(playing ? "fa-pause" : "fa-play");
					player[playing ? "pause" : "play"]();
				});
			});
		});
	});
});

/***/ }),
/* 45 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


$(document).ready(function () {
    var _this = this;

    var player_config = {
        controls: true,
        preload: "auto"
    };
    var wrapper = ".fifty-fifty-tab-module-redesign";
    var videosEl = $(wrapper + " video");
    var videos = [];
    var tabTilesEl = $(wrapper + " .tab-titles-wrapper");
    var btnNext = $(wrapper + " .button-next");
    var scrollSpeed = 300;

    var btnPrev = $(wrapper + " .button-prev");

    btnNext.on("click", function () {
        var scrollArea = $(this).parents(".tab-titles").find(".tab-titles-wrapper");
        scrollAnimate("next", scrollArea, $(this));
        $(this).parent().find(".button-prev").removeClass("disabled");
    });
    btnPrev.on("click", function () {
        var scrollArea = $(this).parents(".tab-titles").find(".tab-titles-wrapper");
        scrollAnimate("prev", scrollArea, $(this));
        $(this).parent().find(".button-next").removeClass("disabled");
    });

    function scrollAnimate() {
        var direction = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
        var area = arguments[1];
        var vm = arguments[2];

        var scrollItem = area.find(".tab-wrapper").outerWidth(true) || 0;
        var slidePerView = +area.attr("per-slide") || 1;
        var targetPosition = +vm.parent().attr("scroll-position") || 0;

        if (direction === "next") targetPosition += scrollItem * slidePerView;else targetPosition -= scrollItem * slidePerView;
        vm.parent().attr("scroll-position", targetPosition);
        area.animate({ scrollLeft: +targetPosition }, scrollSpeed);
    }

    tabTilesEl.on("ps-x-reach-end", function () {
        $(this).parents(".tab-titles").find(".button-next").addClass("disabled");
        $(this).parents(".tab-titles").find(".button-prev").removeClass("disabled");
    });
    tabTilesEl.on("ps-x-reach-start", function () {
        $(this).parents(".tab-titles").find(".button-prev").addClass("disabled");
        $(this).parents(".tab-titles").find(".button-next").removeClass("disabled");
    });

    for (var i = 0; i < Array.from(tabTilesEl).length; i++) {
        var tabTiles = Array.from(tabTilesEl)[i];
        if (tabTiles) {
            (function () {
                var ps = new PerfectScrollbar(tabTiles);
                var isScroll = $(wrapper + " .ps__thumb-x")[i];
                isScroll = window.getComputedStyle(isScroll).width;
                isScroll = +isScroll.replace("px", "");
                if (isScroll) {
                    $(wrapper + " .tab-titles").eq(i).find(".button-prev").show();
                    $(wrapper + " .tab-titles").eq(i).find(".button-next").show();
                } else {
                    $(wrapper + " .tab-titles").eq(i).find(".button-prev").hide();
                    $(wrapper + " .tab-titles").eq(i).find(".button-next").hide();
                }
                tabTilesEl[i].addEventListener("ps-scroll-x", function (e) {
                    $(_this).parents(".tab-titles").attr("scroll-position", ps.lastScrollLeft);
                });
            })();
        }
    }
    for (var _i = 0; _i <= Array.from(videosEl).length; _i++) {
        if (Array.from(videosEl)[_i]) {
            var id = Array.from(videosEl)[_i].getAttribute("id");
            var video = videojs("" + id, player_config);
            videos.push(video);
        }
    }

    $(wrapper + " button.tab-wrapper").click(function () {
        var activeIndex = $(this).index();
        $(this).parents(".tab-titles-wrapper").children().removeClass("active").eq(activeIndex).addClass("active");
        $(this).parent().parent().next().children().hide().eq(activeIndex).show();
        for (var _i2 = 0; _i2 < videos.length; _i2++) {
            videos[_i2].pause();
        }

        // special behaviour logic for other embedded modules

        $('.icon-with-text .card-slider').slick('setPosition'); // icon-with-text
    });
});

/***/ }),
/* 46 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var _main = __webpack_require__(0);

$(document).ready(function () {

    $('.related-solutions_swiper').each(function (index) {
        var slideCount = $('.swiper-wrapper .swiper-slide', this).length;

        $(this).addClass("related-solutions_sl-" + index);var parent = $(this).parent();
        parent.find(".related-solutions-next").addClass("related-solutions-next" + index);
        parent.find(".related-solutions-prev").addClass("related-solutions-prev" + index);
        parent.find(".swiper-pagination").addClass("related-solutions-pages" + index);

        var swiper = new Swiper('.related-solutions_sl-' + index, {
            slidesPerView: 3,
            spaceBetween: 20,
            slidesPerGroup: 3,
            loop: (0, _main.loop)(slideCount),
            centerSlides: (0, _main.centerSlides)(slideCount),
            pagination: {
                el: '.related-solutions-pages' + index,
                clickable: true
            },
            navigation: {
                nextEl: '.related-solutions-next' + index,
                prevEl: '.related-solutions-prev' + index
            },
            breakpoints: {
                640: {
                    slidesPerView: 1,
                    slidesPerGroup: 1,
                    spaceBetween: 7,
                    loop: (0, _main.loop)(slideCount),
                    centerSlides: (0, _main.centerSlides)(slideCount)
                }
            }
        });
    });
});

/***/ }),
/* 47 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


/***/ }),
/* 48 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


$(document).ready(function () {
    $('.utility-navigation').on("click", '.utility-navigation-button', function (evt) {
        var button = $(this),
            opened = button.hasClass("opened");
        $('.utility-navigation-button', evt.delegateTarget).removeClass("opened");
        (opened ? button.removeClass : button.addClass).call(button, "opened");

        if (button.hasClass("regions")) {
            $(evt.delegateTarget).next('.region-navigation').toggleClass("opened");
            $(evt.delegateTarget).next().next('.language-navigation').offset({ left: 0 }).removeClass("opened");
            $('.secondary-nav.search').removeClass("opened");
        } else if (button.hasClass("languages")) {
            var menuOffset = { left: opened ? 0 : button.offset().left };
            $(evt.delegateTarget).next('.region-navigation').removeClass("opened");
            $(evt.delegateTarget).next().next('.language-navigation').offset(menuOffset).toggleClass("opened");
        } else if (button.hasClass("search")) {
            $('.secondary-nav.search').toggleClass("opened");
            $('.region-navigation').removeClass("opened");
        } else {
            return true;
        }

        return false;
    });
    $('.mob-primary-navigation').on("click", '.mob-primary-navigation-button', function (evt) {
        var button = $(this),
            wrapper = $(evt.delegateTarget).next('.mob-primary-navigation-wrapper');
        if (button.hasClass("menu")) {
            var overlay = $('.mobile-navigation-overlay');
            if (overlay.hasClass("active")) {
                $('.all-page-wrapper').removeClass("no-scroll");
                $('.secondary-nav.search').removeClass("opened");
                overlay.removeClass("active");
            }

            $('.mobile-toggle', this).toggleClass("active");
            $('.all-page-wrapper').toggleClass("no-scroll");
            wrapper.toggleClass("opened");
        } else if (button.hasClass("search")) {
            if (wrapper.hasClass("opened")) {
                $('.mob-primary-navigation-button .mobile-toggle', evt.delegateTarget).removeClass("active");
                $('.all-page-wrapper').removeClass("no-scroll");
                wrapper.removeClass("opened");
            }

            $('.mobile-navigation-overlay').toggleClass("active");
            $('.secondary-nav.search').toggleClass("opened");
            $('.all-page-wrapper').toggleClass("no-scroll");
        }

        return false;
    });
    $('.mob-primary-navigation-utility').on("click", '.mob-primary-navigation-utility-button', function (evt) {
        var button = $(this),
            opened = button.hasClass("opened");
        $('.mob-primary-navigation-utility-button', evt.delegateTarget).removeClass("opened");
        (opened ? button.removeClass : button.addClass).call(button, "opened");

        if (button.hasClass("regions")) {
            var regionMenu = $(evt.delegateTarget).next('.mob-primary-navigation-regions');
            (opened ? regionMenu.removeClass : regionMenu.addClass).call(regionMenu, "opened");
            regionMenu.find('.region-navigation').addClass("opened");
            regionMenu.find('.language-navigation').removeClass("opened");
            var mainMenu = regionMenu.next('.mob-primary-navigation-main');
            (opened ? mainMenu.addClass : mainMenu.removeClass).call(mainMenu, "opened");
        } else if (button.hasClass("languages")) {
            var regionMenu = $(evt.delegateTarget).next('.mob-primary-navigation-regions');
            (opened ? regionMenu.removeClass : regionMenu.addClass).call(regionMenu, "opened");
            regionMenu.find('.region-navigation').removeClass("opened");
            regionMenu.find('.language-navigation').addClass("opened");
            var mainMenu = regionMenu.next('.mob-primary-navigation-main');
            (opened ? mainMenu.addClass : mainMenu.removeClass).call(mainMenu, "opened");
        } else {
            return true;
        }

        return false;
    });

    var isDefaultState = true;
    var secondaryNavElements = $('.top .secondary-navigation button[role="button"]');
    var bindKey = 'Enter';
    secondaryNavElements.click(function () {
        var clickedEl = $(this)[0];
        secondaryNavElements.removeClass('active');
        clickedEl = clickedEl.getAttribute('data-type');
        if (clickedEl === 'regions') {
            $('.language-wrapper').fadeOut(); /*Kos*/
            $('.drop-wrapper.secondary-nav.search').fadeOut();
            $('.drop-wrapper.secondary-nav.regions').fadeToggle();
        } else if (clickedEl === 'language') {
            /*Kos*/
            $('.drop-wrapper.secondary-nav.search').fadeOut();
            $('.drop-wrapper.secondary-nav.regions').fadeOut();
            $('.language-wrapper').fadeToggle();
        } else {
            $('.language-wrapper').fadeOut(); /*Kos*/
            $('.drop-wrapper.secondary-nav.regions').fadeOut();
            $('.drop-wrapper.secondary-nav.search').fadeToggle();
            $('.drop-wrapper.secondary-nav.search input').focus();
        }
    });
    $('.overlay-black').click(function () {
        $('.drop-wrapper.secondary-nav.regions').fadeOut();
        secondaryNavElements.removeClass('active');
    });
    $('.drop-wrapper.secondary-nav.search').click(function (e) {
        var a = e.target.closest('.coveo-search-section');
        var b = e.target.closest('input');
        if (!a && !b) {
            secondaryNavElements.removeClass('active');
            $('.drop-wrapper.secondary-nav.search').fadeOut();
            $('.drop-wrapper.secondary-nav.search input').val('');
        } else {
            e.preventDefault();
        }
    });
    $('.navigation-wrapper .main').click(function () {
        $('.drop-wrapper.secondary-nav.search').fadeOut();
        $('.drop-wrapper.secondary-nav.search input').val('');
        $('.drop-wrapper.secondary-nav.regions').fadeOut();
        $('.language-wrapper').fadeOut(); /*Kos*/
    });
    /* Kos: code for opening alternative languages if enabled in \src\Helix\Feature\QIMS.Shotgun.Navigation\code\Views\QIMS.Shotgun.Navigation\RegionMenuRedesign.cshtml
     var regionsMenu = $('.drop-wrapper.secondary-nav.regions')
    if (regionsMenu.length) {
        var country = regionsMenu.find('li.alternate-lan')
        $(country).on('click', function () {
            var current = $(this).find('.subcountries')
            $('.subcountries').each(function () {
                if ($(this).is(':visible') && !($(this).is(current))) {
                    $(this).slideToggle()
                    $(this).parent().find('i').removeClass('fa-rotate-180')
                }
            })
            $(current).slideToggle()
            $(current).parent().find('i').toggleClass('fa-rotate-180')
        })
    }*/
    function regionSelect(self) {
        var activeEl = self;
        var activeIndex = activeEl.index();
        $('.regions-wrapper .left-part > ul li').removeClass('active').eq(activeIndex).addClass('active');
        var els = $('.center-part > ul > li');
        for (var i = 0; i < Array.from(els).length; i++) {
            els[i].style.opacity = '0';
            els[i].style.zIndex = '0';
            els[activeIndex].style.opacity = '1';
            els[activeIndex].style.zIndex = '1';
        }
    }
    var regionList = $('.region-list li');
    var regionListSelectorHover = $('.region-list li a');

    regionListSelectorHover.mouseenter(function () {
        regionSelect($(this).parent());
    });
    regionList.on('keyup', function (ev) {
        if (ev.key === bindKey) regionSelect($(this));
    });
    var resultWrapper = $('.results-search');
    resultWrapper.hide();
    $('.search-wrapper form input').on('input', function () {
        var clearIcon = $('.search-wrapper form .close-icon');
        if ($(this).val()) clearIcon.fadeIn();else clearIcon.fadeOut();
    });
    $('.search-wrapper form button[type="submit"]').on('keyup', function (ev) {
        if (ev.key === bindKey) alert('search');
    });
    $('.search-wrapper form .close-icon').click(function () {
        var input = $('.search-wrapper form input');
        input.val('');
        $(this).fadeOut();
    });
    var navEls = $('.primary-nav li');
    navEls.on("keyup", function (ev) {
        if (ev.key === bindKey) {
            navEls.removeClass("active-link");
            $('.primary-nav-wrapper').removeClass("show-content");
            $(this).find('.primary-nav-wrapper').addClass("show-content");
            $(this).addClass("active-link");
        }
    }).on("mousemove", function () {
        navEls.removeClass("active-link");
        $('.primary-nav-wrapper').removeClass("show-content");
    });
    // open always first tab --start
    $('.primary-nav > li').on("mouseenter", function () {
        var activeElement = $(this).find('h5.sub-title').next();
        var listItemIndex = 0;
        if (activeElement.is('.open-first')) {
            activeElement.children().removeClass("active").eq(0).addClass("active");
            listItemIndex = 1;
        }
        activeElement.parent('.list').next('.tab-content').children().css({ opacity: 0 }).hide().eq(listItemIndex).css({ opacity: 1 }).show();
    });
    $('.primary-nav-wrapper').on("mouseleave", function () {
        defaultStateTab('.solution-selector');
        defaultStateTab('.about-selector');
    }).find('.tab-content .item').css({ display: "flex", opacity: 0 }).hide();

    function defaultStateTab(selector) {
        $(selector + ' .tab-content .item').css({ opacity: 0 }).hide().eq(0).fadeTo("default", 1);
        $(selector + ' .list ol li').removeClass("active");
    }

    //open always first tab -- end
    hoverTab('.about-selector');
    hoverTab('.solution-selector');
    hoverTab('.product-selector');
    $('.solution-selector .solution-tabs li').on("keyup", function (ev) {
        if (ev.key === bindKey) {
            hoveTabByKeyPress('.solution-selector', $(this));
        }
    });
    $('.about-selector .about-tabs li').on("keyup", function (ev) {
        if (ev.key === bindKey) {
            hoveTabByKeyPress('.about-selector', $(this));
        }
    });
    function showActiveTab(wrapperClass, selector, self) {
        var selfIndex = self.index();
        $(selector).removeClass("active").eq(selfIndex).addClass("active");
        $(wrapperClass + ' .item').css({ opacity: 0 }).hide().eq(selfIndex + 1).fadeTo("default", 1);
    }
    function hoveTabByKeyPress(wrapperClass, self) {
        var selector = wrapperClass + ' .tab-title';
        showActiveTab(wrapperClass, selector, self);
    }
    function hoverTab(wrapperClass) {
        var selector = wrapperClass + ' .tab-title';
        var selectorHover = wrapperClass + ' .tab-title a';
        $(selectorHover).mouseenter(function () {
            isDefaultState = false;
            showActiveTab(wrapperClass, selector, $(this).parent('.tab-title'));
        });
    }

    defaultHoverState('.solution-selector');
    defaultHoverState('.about-selector');

    function defaultHoverState(wrapperClass) {
        var selector = wrapperClass + " .tab .list"; //  > h5.sub-title
        $(selector).mouseenter(function (e) {
            if (!isDefaultState && !$(e.target).is('.list, .sub-title')) {
                isDefaultState = true;
                $(wrapperClass + ' .tab-content .item').css({ opacity: 0 }).hide().eq(0).fadeTo("default", 1);
                $('.list ol li').removeClass("active");
            }
        });
    }
    $('.view-all').click(function () {
        var wrapper = $('.scroll-hidden');
        var self = $(this);
        wrapper.toggleClass('scroll-auto');
        if (wrapper.hasClass('scroll-auto')) self.text('Hide All');else self.text('View All');
    });
    $('.local-search').click(function () {
        $(this).hide();
        $('.solution-search').fadeIn();
    });
    $('.solution-selector .close-icon').click(function () {
        $('.solution-selector .solution-search input').val('');
        $('.solution-selector .solution-search').hide();
        $('.solution-selector .local-search').fadeIn();
    });
    $('.solution-selector input').on('input', function () {
        var value = $(this).val();
        if (value) $('.solution-search .close-icon').fadeIn();else $('.solution-search .close-icon').fadeOut();
    });
    // Move breadcrumbs to the top upon scrolling page down
    //    if (window.innerWidth > 768) {
    //        breadCrumbPos();
    //        $(window).scroll(function () {
    //            if (scrollY > 60) {
    //                $('.navigation-wrapper, .header__inner').addClass('fixed')
    //                $('.navigation-wrapper .main').css('visibility', 'hidden'); // .hide()
    //                $('.top-breadcrumbs').css('visibility', 'hidden'); // .hide()
    //                $('.header__inner, .header__inner .top-breadcrumbs').css('visibility', 'visible'); // .show()
    //            } else {
    //                $('.navigation-wrapper, .header__inner').removeClass('fixed')
    //                $('.navigation-wrapper .main').css('visibility', 'visible'); // .show()
    //                $('.top-breadcrumbs').css('visibility', 'visible'); // .show()
    //                $('.header__inner .top-breadcrumbs').css('visibility', 'hidden'); // .hide()
    //                $('.header__inner').css('visibility', 'hidden'); // .hide()
    //            }
    //        })
    //    }
    //    $(window).resize(function () {
    //        breadCrumbPos()
    //    })
    //    function breadCrumbPos() {
    //        const el = $('.navigation-wrapper .container-ruler')
    //        const left = (window.innerWidth - el.width()) / 2
    //        $('.header__inner').css({
    //            'left': left + 'px',
    //            'visibility': 'hidden' /*Kos*/
    //        })
    //    }
});

// mobile logic
var items = $('.mobile-overlay.mobile-navigation-overlay .mobile-content');
var topNav = $('.overlay-content .top-nav');
var mainNav = $('.overlay-content .main-nav');
var breadcrumbsRegion = $('.breadcrumbs.region');
var breadcrumbsGoToMain = $('.breadcrumbs.go-to-main');

var regionsItems = $('.regions-items > li');
regionsItems.hide();
$('.mobile-toggle-navigation-bar').click(function () {
    $(this).toggleClass('active');
    var mobileOverlay = $('.mobile-overlay');
    mobileOverlay.toggleClass('active');
    $('.mobile-regions-overlay').toggleClass('active');
    $('.overlay-content').show();
    $('.drop-wrapper.secondary-nav.search').hide(); /*Kos*/
});
var activeItem = null;
$('.mobile-navigation-overlay .top-nav nav button').click(function () {
    var activeEl = $(this)[0].getAttribute('data-type');
    activeItem = Array.from(items[0].children).find(function (el) {
        return el.getAttribute('data-attribute') === activeEl;
    });
    if (activeItem) {
        // search
        activeItem.style.display = 'block';
        $('.breadcrumbs.go-to-main').show();
        $('.drop-wrapper.secondary-nav.search').show(); /*Kos*/
    } else {
        if (activeEl === 'regions') {
            $('.overlay-content').hide();
            $('.mobile-regions-overlay').show();
        }
    }
    mainNav.hide();
    topNav.hide();
});
$('ol.region-list li').click(function () {
    var activeEl = $(this)[0].getAttribute('data-name');
    $('.region-list').hide();
    $('.item-wrapper-mobile h6').hide();
    regionsItems.hide().eq($(this).index()).show();
    $('.breadcrumbs.go-to-main').hide();
    breadcrumbsRegion.show()[0].children[1].innerText = activeEl;
});
$('.breadcrumbs.go-to-main .go-main').click(function () {
    topNav.show();
    mainNav.show();
    if (activeItem) {
        $('.drop-wrapper.secondary-nav.search').hide(); /*Kos*/
        activeItem.style.display = 'none';
    } else {
        $('.mobile-regions-overlay').hide();
        $('.overlay-content').show();
    }
});
$('.breadcrumbs.region .go-back').click(function () {
    regionsItems.hide();
    $('.region-list').show();
    breadcrumbsGoToMain.show();
    $('.item-wrapper-mobile h6').show();
    breadcrumbsRegion.hide();
});

$('.mob-primary-navigation-main .main-nav ol li').click(function () {
    var activeEl = $(this)[0].getAttribute('data-item');
    //activeItem = Array.from(items[0].children).find(el => el.getAttribute('data-attribute') === activeEl);

    items.find('.item-wrapper-mobile[data-attribute="' + activeEl + '"]').each(function () {
        $('.mobile-navigation-overlay').addClass("active").find('.search-mobile').hide();
        $(this).show();
    });
});

$('.action-list .click-action > li').click(function () {
    var clickIndex = $(this).index();
    $('.action-list').hide();
    $('.item-wrapper-mobile.solutions .tabs .tab-item').eq(clickIndex).fadeIn();
    $('.item-wrapper-mobile.about .tabs .tab-item').eq(clickIndex).fadeIn();
    activeItem.children[0].style.display = 'none';
    activeItem.children[1].style.cssText += ';display:block !important;';
    activeItem.children[1].children[1].innerText = $(this)[0].innerText;
});
$('.list .breadcrumbs > span.go-main').click(function () {
    $('.item-wrapper-mobile .tabs .tab-item').hide();
    $('.content.action-list').show();
    activeItem.children[0].style.display = 'block';
    activeItem.children[1].style.display = 'none';
});
$('.list .breadcrumbs > span.go-home').click(function () {
    $('.mobile-navigation-overlay').removeClass("active");
    $('.mobile-navigation-overlay .item-wrapper-mobile').hide().find('.content.action-list').show();
});

$('.solutions .view-all-mobile').click(function () {
    var scrollArea = $('.solutions .scroll-area');
    scrollArea.toggleClass('scroll');
    if (scrollArea.hasClass('scroll')) $(this).text('Hide All');else $(this).text('View All');
});

//coveo button
$(document).ready(function () {
    var quickFindWrapper = ".nav-search-button-wrapper";
    $(quickFindWrapper + ' .nav-search-button').on("click", function () {
        $(".nav-search-button").fadeOut();
        $(".nav-search-coveo-wrapper").fadeIn();
        $(".nav-search-coveo").animate({ width: "70%" }, 400);
        $(".nav-search-coveo-wrapper .magic-box-input input").focus();
    });
    $(quickFindWrapper + ' .close-btn').on("click", function () {
        $("#nav-search-coveo-input").val("");
        $(".nav-search-coveo").css("background", "#0C7BC0");
        $(".nav-search-coveo-wrapper").fadeOut(function () {
            $(".nav-search-coveo").css("background", "transparent");
        });
        $(".nav-search-button").fadeIn();
        $(".nav-search-coveo").animate({ width: "0px" }, 400);
    });
    $("#nav-search-coveo-input").on("input", function () {
        if ($(this).val().length >= 1) {
            $(".coveo-magicbox-suggestions").fadeIn();
        } else {
            $(".coveo-magicbox-suggestions").fadeOut();
        }
    });
});

/***/ }),
/* 49 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


$(document).ready(function () {
    var wrapper = '.share-bar-redesign';
    var socialNetworks = {
        email: {
            name: "email",
            title: "Send email",
            url: "mailto:?subject={title}&body={page}",
            icon: "Email.svg"
        },
        facebook: {
            name: "facebook",
            title: "Share On Facebook",
            url: "https://www.facebook.com/sharer/sharer.php?u={page}&t={title}",
            icon: "Facebook.svg"
        },
        twitter: {
            name: "twitter",
            title: "Tweet",
            url: "https://twitter.com/intent/tweet?url={page}&text={title}",
            icon: "Twitter.svg"
        },
        linkedin: {
            name: "linkedin",
            title: "Share on LinkedIn",
            url: "http://www.linkedin.com/shareArticle?mini=true&url={page}&title={title}",
            icon: "LinkedIn.svg"
        },
        wechat: {
            name: "wechat",
            title: "Share on WeChat",
            url: "https://chart.apis.google.com/chart?cht=qr&chs=154x154&chl={page}",
            icon: "WeChat.svg"
        },
        xing: {
            name: "xing",
            title: "Share on Xing",
            url: "https://www.xing.com/spi/shares/new?url={page}",
            icon: "Xing.svg"
        }
    };

    var list = $(wrapper + ' .share-bar-container .dropdown');
    var listJumpLinksTopBar = $('.jump-links-top-bar .share-wrapper .share-dropdown');
    $.each(socialNetworks, function (index, network) {
        var shareButton = createShareButton(network);
        list.append(shareButton);
        if (listJumpLinksTopBar && listJumpLinksTopBar.length > 0) {
            var shareButton2 = createShareButton(network); // need clone
            listJumpLinksTopBar.append(shareButton2);
        }
    });

    function createShareButton(network) {
        var shareButton = $('<li title="' + network.title + '">');
        var sharePage = network.url.replace('{page}', location.href).replace('{title}', document.title);
        var socialLink = $('<a href="' + sharePage + '" target="_blank">' + network.name + '</a>');
        var socialImg = $('<img src="/Content/Shotgun/img/icons/social_icons/new/' + network.icon + '" />');
        shareButton.append(socialLink);
        shareButton.append(socialImg);
        return shareButton;
    }

    $(wrapper + " .share-bar-container").click(function () {
        $(wrapper + " .dropdown").fadeToggle();
    });

    $(wrapper + " .share-bar-container .dropdown li").click(function () {
        var vm = $(this);
        if (vm.attr('data-event') === 'copy') navigator.clipboard.writeText(location.href);
    });
    $(document).on("click", function (event) {
        var obj = $(wrapper + " .share-bar-container");
        if (!$(event.target).closest(obj).length) $(wrapper + " .dropdown").fadeOut();
    });
});

/***/ }),
/* 50 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


$(document).ready(function () {
    function justifyButtons() {
        $('.explore-more-actions .cta-btn-redesign').each(function () {
            var button = $(this),
                maxWitdh = button.css('max-width');
            maxWitdh = maxWitdh && maxWitdh.replace(/[^\d]+$/, "");

            button.removeClass("btn-resized");
            button.outerWidth() == maxWitdh && button.addClass("btn-resized");
        });
    }

    $(window).resize(function () {
        justifyButtons();
    });

    justifyButtons();
});

/***/ }),
/* 51 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }

$(document).ready(function () {
    // init state
    var containers = document.querySelectorAll('.horizontal-storytelling.live');
    var scrollSpeed = 300;
    var scrollStep = 100;
    var wrapper = '.jump-links-top-bar';
    var scrollItems = $(wrapper + ' .jump-links-top-bar-wrapper .scroll-wrapper ul li');
    var shareWrapper = $(wrapper + ' .share-wrapper');
    if (scrollItems.length === 0) {
        return;
    }
    var scrollItemLinks = Array.from($(wrapper + ' .jump-links-top-bar-wrapper .scroll-wrapper ul li a')).map(function (el) {
        return el.hash;
    });
    var scrollItemsCounter = scrollItems.length - 1;
    var wrapperHeight = $(wrapper).height();
    var underline = $(wrapper + ' .nav-underline');
    var scrollValue = 0;
    var scrollContainer = wrapper + ' .jump-links-top-bar-wrapper .scroll-wrapper ul';
    var scrollWrapper = $(scrollContainer);
    //let selectedEl = scrollItems.eq(0)
    var nextBtn = $(wrapper + ' .slide-next');
    var prevBtn = $(wrapper + ' .slide-prev');
    //
    if (window.innerWidth > 968 && window.innerWidth < 1024) {
        /*Kos*/
        shareWrapper.hide();
    }
    //
    new PerfectScrollbar(scrollContainer);
    //
    initStateLine();
    //
    prevBtn.click(function () {
        scrollValue = scrollValue - scrollStep;
        nextBtn.removeClass('pointer-event');
        //underline.hide()
        //scrollItems.removeClass('bordeer')
        //selectedEl.addClass('border')
        scrollWrapper.animate({ scrollLeft: scrollValue }, scrollSpeed);
    });
    nextBtn.click(function () {
        scrollValue = scrollValue + scrollStep;
        //underline.hide()
        //scrollItems.removeClass('bordeer')
        //selectedEl.addClass('border')
        prevBtn.removeClass('pointer-event');
        scrollWrapper.animate({ scrollLeft: scrollValue }, scrollSpeed);
    });
    //scrollItems.on('mouseenter focus', function () {
    //    selectedEl = $(this)
    //    scrollItems.removeClass('border')
    //    underline.show()
    //    underline.css({
    //        left: $(this).position().left + 10,
    //        width: $(this).width() + 20
    //    })
    //})

    $(wrapper + ' .share-wrapper .share-bar').click(function () {
        $(this).next().fadeToggle();
    });
    $(wrapper + ' .share-wrapper .share-dropdown li').click(function () {
        var vm = $(this);
        if (vm.attr('data-event') === 'copy') navigator.clipboard.writeText(location.href);
    });
    // click outside
    $(document).on("click", function (event) {
        var shareWrapper = $(wrapper + ' .share-wrapper');
        var dropdown = $(wrapper + ' .nav-container-tablet');
        if (!$(event.target).closest(shareWrapper).length) $('.share-dropdown').fadeOut();
        if (!$(event.target).closest(dropdown).length) {
            $(wrapper + ' .nav-toggle').removeClass('rotate');
            $(wrapper + ' .nav-dropdown').fadeOut();
        }
    });
    // animation scrollTo
    $(wrapper + ' .scroll-wrapper ul li, ' + wrapper + ' .tablet-view .nav-dropdown ul li').click(function () {
        var scrollTo = $(this).children().attr('href');
        var scrollToTop = $(scrollTo).offset().top;
        if (scrollToTop >= wrapperHeight) scrollToTop = scrollToTop - wrapperHeight; // fix to scroll considering fixed top nav bar
        if (!$(wrapper).hasClass('fixed')) scrollToTop = scrollToTop - wrapperHeight;
        $("html, body").animate({ scrollTop: scrollToTop }, 1000);
        $(containers).addClass('activated-once');
        setTimeout(function () {
            $(containers).removeClass('activated-once');
        }, 1500);
    });
    //tablet logic
    $(wrapper + ' button.nav-toggle').click(function () {
        $(this).next().fadeToggle();
        $(this).toggleClass('rotate');
    });

    //
    function initStateLine() {
        var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;

        var el = scrollItems.eq(index);
        underline.show();
        underline.css({
            left: el.position().left + 10,
            width: el.width() + 20
        });
    }

    isScrollActive();

    function isScrollActive() {
        var scrollW = $(wrapper + ' .ps__rail-x').css('width').replace('px', '') * 1;
        if (!scrollW) {
            nextBtn.addClass('pointer-event');
            $(wrapper + ' .scroll-wrapper ul').addClass('space-around');
        } else {
            nextBtn.removeClass('pointer-event');
            $(wrapper + ' .on-this-page').hide();
        }
    }

    scrollWrapper[0].addEventListener('ps-x-reach-end', function () {
        nextBtn.addClass('pointer-event');
    });
    scrollWrapper[0].addEventListener('ps-x-reach-start', function () {
        nextBtn.removeClass('pointer-event');
        prevBtn.addClass('pointer-event');
    });

    var breadcrumbsWrapper = $(".breadcrumbs-new");
    var init_pos = "";
    if (breadcrumbsWrapper.length > 0) {
        var breadcrumbsTop = $(breadcrumbsWrapper).offset().top;
        init_pos = breadcrumbsTop;
    } else {
        init_pos = $(wrapper).offset().top;
    }
    $(window).scroll(function () {
        scrollSpy();
        if (scrollY >= init_pos) {
            breadcrumbsWrapper.addClass("fixed");
            $(wrapper).addClass("fixed");
        } else {
            breadcrumbsWrapper.removeClass("fixed");
            $(wrapper).removeClass("fixed");
        }
        //let st = window.pageYOffset || document.documentElement.scrollTop;
        //if (st > lastScrollTop) {
        //    scrollDirection = 'down'
        //} else {
        //    scrollDirection = 'up'
        //}
        //lastScrollTop = st <= 0 ? 0 : st;
    });

    //    scroll spy
    var sections = Array.from(document.querySelectorAll('section'));
    sections = sections.filter(function (el) {
        return el.hasAttribute('id') && scrollItemLinks.indexOf('#' + el.id) > -1;
    }); // filter out sections non existant in the jump links bar
    sections = sections.map(function (el) {
        return el.getBoundingClientRect().top + scrollY;
    });
    var visibleSection = 0;
    setTimeout(function () {
        sections = Array.from(document.querySelectorAll('section'));
        sections = sections.filter(function (el) {
            return el.hasAttribute('id') && scrollItemLinks.indexOf('#' + el.id) > -1;
        }); // filter out sections non existant in the jump links bar
        sections = sections.map(function (el) {
            return el.getBoundingClientRect().top + scrollY - $(wrapper).height() * 2;
        });
    }, 3000);
    setTimeout(function () {
        scrollSpy();
    }, 500);
    function scrollSpy() {
        var filteredSections = sections.filter(function (el) {
            return el <= scrollY + wrapperHeight + 100;
        });

        if (filteredSections.length > 0) {
            var activeIndex = Math.max.apply(Math, _toConsumableArray(filteredSections));
            visibleSection = sections.findIndex(function (el) {
                return el === activeIndex;
            });
        } else {
            visibleSection = 0;
        }

        scrollToCurrentItem(visibleSection);
        initStateLine(visibleSection);
    }

    function scrollToCurrentItem() {
        var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;

        if (index === 0) {
            scrollWrapper.animate({ scrollLeft: 0 }, 0);
        } else {
            var curItemPos = 0;
            var curItemWidth = 0;
            try {
                var firstScrollItemPos = scrollItems.eq(0).position().left;
                var curScrollItem = scrollItems.eq(index);
                curItemPos = curScrollItem.position().left - firstScrollItemPos;
                curItemWidth = curScrollItem.width();
            } catch (e) {
                curItemPos = scrollItems.eq(scrollItemsCounter).position().left - firstScrollItemPos;
                curItemWidth = scrollItems.eq(scrollItemsCounter).width();
            }

            if (curItemPos < scrollWrapper.scrollLeft()) {
                scrollWrapper.animate({ scrollLeft: curItemPos }, 0);
            } else if (curItemPos + curItemWidth > scrollWrapper.width()) {
                scrollWrapper.animate({ scrollLeft: curItemPos - curItemWidth }, 0);
            }
        }
    }

    scrollWrapper[0].addEventListener('ps-scroll-x', function () {
        var lastScrollItemPos = scrollItems.eq(scrollItemsCounter).position().left;
        if (scrollWrapper.scrollLeft() === 0) {
            nextBtn.removeClass('pointer-event');
            prevBtn.addClass('pointer-event');
        } else if (scrollWrapper.scrollLeft() > lastScrollItemPos) {
            nextBtn.addClass('pointer-event');
        } else {
            nextBtn.removeClass('pointer-event');
            prevBtn.removeClass('pointer-event');
        }
        initStateLine(visibleSection);
    });
});

/***/ }),
/* 52 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


$(document).ready(function () {
    var wrapper = '.jump-links-sidebar-container-wrapper';
    $(wrapper + ' .jump-links-sidebar nav ul li').click(function () {
        var scrollTo = $(this).children().attr('href');
        $("html, body").animate({ scrollTop: $(scrollTo).offset().top - 62 }, 1000);
    });
});

/***/ }),
/* 53 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var _main = __webpack_require__(0);

$(document).ready(function () {

    if (typeof Swiper == 'undefined') return;

    var wrapper = '.products-carousel';

    Swiper.prototype.alignSlideHeights = function () {
        var maxHeight = this.passedParams.maxSlideHeight || 0;
        $('.swiper-slide .bg', this.wrapperEl).each(function () {
            var slideHeight = $(this).find(".slide-content").outerHeight();
            maxHeight = slideHeight > maxHeight ? slideHeight : maxHeight;
        });
        this.passedParams.maxSlideHeight = maxHeight;
        $('.swiper-slide .bg', this.wrapperEl).css('height', maxHeight + 'px');
    };

    function addNavigationArrow(swiper, next) {
        // add mobile-only nav button on swiper's left/right
        var suff = next ? 'next' : 'prev',
            dir = next ? 'right' : 'left',
            arrow = '<div class="over-mobile-nav button-' + suff + '"><i class="fa-solid fa-angle-' + dir + '"></i></div>';
        $(swiper).append(arrow);
    }

    $(wrapper + ' .swiper').each(function () {
        var swiper = this;
        addNavigationArrow(swiper, false);
        addNavigationArrow(swiper, true);
        new Swiper(swiper, {
            autoHeight: false,
            spaceBetween: 15,
            speed: 400,
            loop: true,
            maxSlideHeight: 0,
            navigation: {
                nextEl: $('.button-next', swiper).toArray(),
                prevEl: $('.button-prev', swiper).toArray()
            },
            pagination: {
                el: (0, _main.swiperQuery)(swiper, '.swiper-pagination'),
                clickable: true
            },
            on: {
                beforeInit: function beforeInit() {
                    if ($('.swiper-slide', this.wrapperEl).length > 1) {
                        $('.controls-panel', this.el).addClass('show-controls');
                    }
                },
                init: function init() {
                    this.alignSlideHeights();
                },
                slideChangeTransitionStart: function slideChangeTransitionStart() {
                    $('.text-content', this.wrapperEl).css('visibility', 'hidden').removeClass('aos-init').removeClass('aos-animate');
                },
                slideChangeTransitionEnd: function slideChangeTransitionEnd() {
                    $('.text-content', this.wrapperEl).css('visibility', 'visible');
                    typeof AOS != 'undefined' && AOS.refresh();
                },
                resize: function resize() {
                    $('.swiper-slide .bg', this.wrapperEl).css('height', '');
                    this.passedParams.maxSlideHeight = 0;
                    this.alignSlideHeights();
                }
            }
        });
    });
});

/***/ }),
/* 54 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


$(document).ready(function () {
    var wrapper = '.three-pill-wrapper';

    $(wrapper + " .three-pill-container .play-btn").click(function () {
        var brighcoveId = $(this).data("video-bid"),
            videoId = $(this).data("video-id");
        videoId && $(this).closest(wrapper).find(".three-pill-modal[data-video-bid=\"" + brighcoveId + "\"]").each(function () {
            var player = $(this).data("player");
            player && player.catalog.getVideo(videoId, function (error, video) {
                if (error && typeof error.data !== "undefined") {
                    player.error({ code: "VIDEO_CLOUD_ERR_" + error.data[0].error_code });
                } else if (typeof player.mediainfo.id === "undefined" || player.mediainfo.id != videoId) {
                    player.catalog.load(video);
                }
            });

            $(this).fadeIn().css("display", "flex").addClass("open");
        });
    });

    function closeVideoModal(modal) {
        var player = $(modal).data("player");
        player && player.pause();

        $(modal).removeClass("open").fadeOut();
    }

    $(wrapper + " .three-pill-modal").on("click", '.close-btn', function (e) {
        closeVideoModal(e.delegateTarget);
    }).each(function () {
        var that = $(this);
        typeof videojs !== "undefined" && $('.video-js', this).each(function () {
            videojs.getPlayer(this).ready(function () {
                var player = this;
                that.data("player", player);
            });
        });
    });

    $(document).on("keyup", function (e) {
        e.key == "Escape" && $('.three-pill-modal:visible').each(function () {
            closeVideoModal(this);
            return false;
        });
    });
});

/***/ }),
/* 55 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


$(window).ready(function () {

    $('.icon-with-text').each(function () {
        // Within each section, find the 'nextCard' and 'prevCard' buttons
        var $nextButton = $(this).find('.nextCard');
        var $prevButton = $(this).find('.prevCard');
        $(this).find(".card-slider").slick({
            slidesToShow: 4,
            infinite: false,
            draggable: false,
            autoplay: false,
            slidesToScroll: 1,
            dots: false,
            speed: 500,
            cssEase: "ease-out",
            nextArrow: $nextButton,
            prevArrow: $prevButton,
            responsive: [{
                breakpoint: 768,
                settings: {
                    slidesToShow: 2
                }
            }, {
                breakpoint: 576,
                settings: {
                    slidesToShow: 1
                }
            }]
        });
    });
});

/***/ }),
/* 56 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


$(document).ready(function () {
    if ($('.two-column-sticky-sidebar').length != 0) {
        new StickySidebar('.two-column-sticky-sidebar', {
            containerSelector: '.two-column-layout-outer',
            innerWrapperSelector: '.two-column-sticky-sidebar-inner',
            topSpacing: 20,
            bottomSpacing: 20,
            minWidth: 768,
            resizeSensor: true
        });
    }
});

/***/ }),
/* 57 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var desktopScreenWidth = 1024;
var clickIndex = 0,
    spyingEnabled = true;

$(document).ready(function () {
    $('.on-page-navigation-wrapper').each(function () {
        var wrapper = this;
        var mobwrapper = $('.popup-wrapper .jump-select', wrapper);
        $('.on-page-navigation-list .btn-wrapper', wrapper).on("click", '.on-page-navigation-item', function (e) {
            clickIndex = $(e.delegateTarget).index();
            $('html').css('overflow', 'hidden');
            $('.popup-background', wrapper).addClass("open");
            $(this).next().addClass("open");
            initNavigation(wrapper);

            mobwrapper.find('span').text("Jump to");
            mobwrapper.parent().eq(clickIndex).removeClass("open");
        });

        $('.popup-wrapper', wrapper).on("click", '.close-btn', function (e) {
            $('.popup-background', wrapper).removeClass("open");
            $('.popup-wrapper', wrapper).removeClass('open');
            $('html').css('overflow', 'visible');
        });

        mobwrapper.click(function () {
            $('.jump-to-wrapper', wrapper).toggleClass("open");
        });

        $('.modal-control', wrapper).click(function () {
            clickIndex += $(this).hasClass("next-modal-btn") * 2 - 1;
            $('.popup-wrapper', wrapper).removeClass("open").eq(clickIndex).addClass("open");
            initNavigation(wrapper);

            mobwrapper.find('span').text("Jump to");
            mobwrapper.parent().eq(clickIndex).removeClass("open");
            location.hash = '';
        });
    });
});

function initNavigation(wrapper) {
    if ($('.tabs-list', wrapper).eq(clickIndex).find('.a').length === 0) {
        scrollSpy(wrapper);
        generateAnchors(wrapper);
        drawPopupControls(wrapper);
    }
}

function scrollToSection(anchor) {
    var $anchor = $(anchor),
        wrapper = $anchor.closest('.row-content').find('.scroll-bar-wrapper'),
        targetSection = wrapper.find('#' + $anchor.data("anchor")),
        targetIndex = targetSection.index(),
        targetPosition = 0;
    targetSection.siblings().filter(function (idx, section) {
        return $(section).index() < targetIndex;
    }).each(function (idx, section) {
        targetPosition += $(section).outerHeight();
    });

    wrapper.animate({
        scrollTop: targetPosition
    }, {
        duration: 150,
        start: function start() {
            spyingEnabled = false;
        },
        complete: function complete() {
            spyingEnabled = true;
        }
    });
}

function scrollSpy(wrapper) {
    var currentActiveId = '';
    var activeWrapper = $('.btn-wrapper', wrapper).eq(clickIndex),
        activeScrollWrapper = activeWrapper.find('.scroll-bar-wrapper'),
        activeTabList = activeWrapper.find('.tabs-list');
    if (window.innerWidth < desktopScreenWidth) return;

    activeScrollWrapper.scroll(function () {
        if (!spyingEnabled) return;
        var containerTop = activeScrollWrapper.offset().top;
        var containerBottom = containerTop + activeScrollWrapper.outerHeight();
        activeScrollWrapper.find('section').filter(function (idx, el) {
            return el.getAttribute("id");
        }).each(function () {
            var sectionTop = $(this).offset().top;
            var sectionHeight = $(this).outerHeight();
            var sectionBottom = sectionTop + sectionHeight;
            var offset = sectionHeight / 2;

            if (sectionTop >= containerTop - offset && sectionBottom <= containerBottom + offset) {
                var sectionId = $(this).attr("id");
                if (sectionId !== currentActiveId) {
                    currentActiveId = sectionId;
                    activeTabList.find('.a').removeClass('active-slide').filter(function () {
                        return $(this).data("anchor") === currentActiveId;
                    }).addClass('active-slide');
                }
            }
            if ($(this).parent().scrollTop() === 0) {
                activeTabList.find('.a').removeClass('active-slide').eq(0).addClass('active-slide');
            }
        });
    });
}

function generateAnchors(wrapper) {
    var appendWrapperDesktop = $('.row-content .tabs-list', wrapper).eq(clickIndex);
    var appendWrapperMobile = $('.row-content .jump-dropdown', wrapper).eq(clickIndex);
    //if ((window.innerWidth > desktopScreenWidth ? appendWrapperDesktop : appendWrapperMobile).find('.a').length) return;

    $('.scroll-bar-wrapper', wrapper).eq(clickIndex).find('section').filter(function (idx, el) {
        return el.getAttribute("id");
    }).each(function (idx, section) {
        var $section = $(section);
        var anchorValue = $section.data("anchor");
        var anchorId = $section.attr('id');
        var anchorClasses = ["a"];if (idx == 0) anchorClasses.push("active-slide");
        var anchorMarkup = '<div class="' + anchorClasses.join(" ") + '" data-anchor="' + anchorId + '">' + anchorValue + '</div>';
        var anchorElement = $(anchorMarkup).click(function () {
            var $anchor = $(this);
            $anchor.parent('.tabs-list').find('.a').removeClass("active-slide");
            $anchor.addClass("active-slide");
            scrollToSection(this);
        });
        appendWrapperDesktop.append(anchorElement);

        anchorElement = $(anchorMarkup).click(function () {
            var mobwrapper = $('.popup-wrapper .jump-select', wrapper);
            mobwrapper.find('span').text($(this).text());
            mobwrapper.eq(clickIndex).parent().removeClass("open");
            scrollToSection(this);
        });
        appendWrapperMobile.append(anchorElement);
    });
}

function drawPopupControls(wrapper) {
    var popups = $('.btn-wrapper', wrapper);
    var maxIndex = popups.length;
    var nextBtnValue = null;
    var prevBtnValue = null;
    if (!clickIndex) {
        nextBtnValue = popups.eq(clickIndex + 1).find('.on-page-navigation-item').text().trim();
    } else if (clickIndex <= maxIndex) {
        nextBtnValue = popups.eq(clickIndex + 1).find('.on-page-navigation-item').text().trim();
        prevBtnValue = popups.eq(clickIndex - 1).find('.on-page-navigation-item').text().trim();
    } else {
        prevBtnValue = popups.eq(-1).find('.on-page-navigation-item').text().trim();
    }
    if (nextBtnValue) {
        popups.eq(clickIndex).find('.next-modal-btn').find('p').text(nextBtnValue);
        popups.eq(clickIndex).find('.next-modal-btn').show();
    }
    if (prevBtnValue) {
        popups.eq(clickIndex).find('.prev-modal-btn').find('p').text(prevBtnValue);
        popups.eq(clickIndex).find('.prev-modal-btn').show();
    }
}

/***/ }),
/* 58 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var _main = __webpack_require__(0);

$(document).ready(function () {
    $('.proof-point-stat-swiper').each(function () {
        var swiper = this;
        new Swiper(swiper, {
            slidesPerView: 3,
            spaceBetween: 30,
            centerInsufficientSlides: true,
            pagination: {
                el: (0, _main.swiperQuery)(swiper, '.swiper-pagination'),
                clickable: true
            },
            navigation: {
                nextEl: (0, _main.swiperQuery)(swiper, '.button-next'),
                prevEl: (0, _main.swiperQuery)(swiper, '.button-prev')
            },
            breakpoints: {
                180: {
                    slidesPerView: 1,
                    spaceBetween: 30
                },
                480: {
                    slidesPerView: 2,
                    spaceBetween: 30
                },
                820: {
                    slidesPerView: 3,
                    spaceBetween: 60
                }
            }
        });
    });
});

/***/ }),
/* 59 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var _main = __webpack_require__(0);

$(document).ready(function () {
    $('.proof-point-carousel-swiper').each(function () {
        var swiper = this;
        new Swiper(swiper, {
            slidesPerView: 1,
            spaceBetween: 30,
            centerInsufficientSlides: true,
            pagination: {
                el: (0, _main.swiperQuery)(swiper, '.swiper-pagination'),
                clickable: true
            },
            navigation: {
                nextEl: (0, _main.swiperQuery)(swiper, '.button-next'),
                prevEl: (0, _main.swiperQuery)(swiper, '.button-prev')
            },
            breakpoints: {
                180: {
                    slidesPerView: 1,
                    spaceBetween: 30
                },
                480: {
                    slidesPerView: 1,
                    spaceBetween: 30
                },
                820: {
                    slidesPerView: 1,
                    spaceBetween: 60
                }
            }
        });
    });
});

/***/ }),
/* 60 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


$(document).ready(function () {

    var aiSearch = $('.ai-search');
    if (aiSearch.length > 0) {
        var getUrlParameter = function getUrlParameter(sParam) {
            var sPageURL = window.location.hash.substring(1),
                sURLVariables = sPageURL.split('&'),
                sParameterName,
                i;

            for (i = 0; i < sURLVariables.length; i++) {
                sParameterName = sURLVariables[i].split('=');

                if (sParameterName[0] === sParam) {
                    return sParameterName[1] === undefined ? true : decodeURIComponent(sParameterName[1]);
                }
            }
            return false;
        };
        var searchInterfaces = Coveo.$(".CoveoSearchInterface");
        var resourcesFromCoveo = "";
        searchInterfaces.each(function () {
            var searchInterface = Coveo.$$(this);
            searchInterface.on('querySuccess', function (e, args) {
                resourcesFromCoveo = args.results.results;
            });
            searchInterface.on("newResultsDisplayed", function (evt) {
                // Get the value of the input field
                var userQuestion = getUrlParameter('q');
                var responseClass = $('.ai-search .response');
                var answerClass = $('.ai-search .response .answer');
                var referencesClass = $('.ai-search .response .references .links');
                var waitAnimation = $('.ai-search .back-image.lottie');
                var inputToHide = $('.ai-search .input-container');
                var textToHide = $('.ai-search .notification');
                // Disable the link by preventing clicks and changing appearance

                textToHide.hide();
                inputToHide.addClass('active');
                waitAnimation.addClass('active');
                responseClass.hide();
                answerClass.empty();
                referencesClass.empty();
                // Send the userQuestion to the controller via AJAX
                $.ajax({
                    url: '/ai-search/ask', // Replace with your MVC controller URL
                    type: 'POST',
                    contentType: 'application/json',
                    data: JSON.stringify({ input: userQuestion }), // Send the user input as JSON
                    success: function success(response) {
                        responseClass.css('display', 'flex');

                        // Check for errors
                        if (typeof response.error !== 'undefined' && response.error) {
                            answerClass.append(response.error);
                        }

                        if (response.data) {
                            // Clear any previous answers

                            var parsedData = JSON.parse(response.data);

                            // Extract the answer_1 from the answer array
                            var answer = parsedData.answer[0].answer_1;
                            var cleanedString = answer.replace(/\s*Resources:.*$/s, '');
                            answerClass.append('<p>' + cleanedString + '</p>');

                            // Extract the sources from meta_data
                            var references = null; //parsedData.meta_data.sources;

                            //var resources = $('ol.cs-resources');
                            //if (resources.length > 0) {
                            //    referencesClass.append(resources);
                            //} else {
                            // Append the references to a div (e.g., referencesClass)
                            if (references && references.length > 0) {
                                var firstElement = references.shift();
                                var referencesHtml = '<ul>';
                                references.forEach(function (ref) {
                                    var pageName = ref.split('/').pop().replace(/-/g, ' ').replace(/^\w/, function (c) {
                                        return c.toUpperCase();
                                    });
                                    referencesHtml += '<li><a href="' + ref + '" target="_blank">' + pageName + '</a></li>';
                                });
                                referencesHtml += '<p><b>Coveo References:</b><p><br>';
                                resourcesFromCoveo.forEach(function (ref, index) {
                                    if (index <= 2) {
                                        var pageName = ref.Title;
                                        referencesHtml += '<li><a href="' + ref.ClickUri + '" target="_blank">' + pageName + '</a></li>';
                                    }
                                });
                                referencesHtml += '</ul>';
                                referencesClass.append(referencesHtml);
                            }
                            //}
                        }
                        waitAnimation.removeClass('active');
                        inputToHide.removeClass('active');
                        textToHide.show();
                        responseClass.show();
                        console.log('Success:', response);
                    },
                    error: function error(xhr, status, _error) {
                        responseClass.css('display', 'flex');
                        answerClass.append('<p>Error: ' + xhr.responseText + '</p>');
                        console.error('Error:', _error);
                    },
                    complete: function complete() {}
                });
            });
        });
        var userQuestionEvent = document.getElementById("userQuestion");
        if (userQuestionEvent) {
            document.getElementById("userQuestion").addEventListener("keypress", function (event) {
                if (event.key === "Enter") {
                    event.preventDefault();
                    document.querySelector(".ai-search-button").click();
                }
            });
        }

        $('.ai-search .ai-search-button, .CoveoSearchButton').click(function (event) {
            // Get the value of the input field
            var userQuestion = $('.ai-search #userQuestion').val();
            var responseClass = $('.ai-search .response');
            var answerClass = $('.ai-search .response .answer');
            var referencesClass = $('.ai-search .response .references .links');
            var askButton = $(this); // Reference to the <a> element
            var waitAnimation = $('.ai-search .back-image.lottie');
            var inputToHide = $('.ai-search .input-container');
            var textToHide = $('.ai-search .notification');
            // Disable the link by preventing clicks and changing appearance
            askButton.addClass('disabled').css('pointer-events', 'none');
            textToHide.hide();
            inputToHide.addClass('active');
            waitAnimation.addClass('active');
            responseClass.hide();
            answerClass.empty();
            referencesClass.empty();
            // Send the userQuestion to the controller via AJAX
            $.ajax({
                url: '/ai-search/ask', // Replace with your MVC controller URL
                type: 'POST',
                contentType: 'application/json',
                data: JSON.stringify({ input: userQuestion }), // Send the user input as JSON
                success: function success(response) {
                    responseClass.css('display', 'flex');

                    // Check for errors
                    if (typeof response.error !== 'undefined' && response.error) {
                        answerClass.append(response.error);
                    }

                    if (response.data) {
                        // Clear any previous answers

                        var parsedData = JSON.parse(response.data);

                        // Extract the answer_1 from the answer array
                        var answer = parsedData.answer[0].answer_1;
                        var cleanedString = answer.replace(/\s*Resources:.*$/s, '');
                        answerClass.append('<p>' + cleanedString + '</p>');

                        // Extract the sources from meta_data
                        var references = null; //parsedData.meta_data.sources;

                        //var resources = $('ol.cs-resources');
                        //if (resources.length > 0) {
                        //    referencesClass.append(resources);
                        //} else {
                        // Append the references to a div (e.g., referencesClass)
                        if (references && references.length > 0) {
                            var firstElement = references.shift();
                            var referencesHtml = '<ul>';
                            references.forEach(function (ref) {
                                var pageName = ref.split('/').pop().replace(/-/g, ' ').replace(/^\w/, function (c) {
                                    return c.toUpperCase();
                                });
                                referencesHtml += '<li><a href="' + ref + '" target="_blank">' + pageName + '</a></li>';
                            });
                            referencesHtml += '</ul>';
                            referencesClass.append(referencesHtml);
                        }
                    }
                    //}
                    waitAnimation.removeClass('active');
                    inputToHide.removeClass('active');
                    textToHide.show();
                    responseClass.show();
                    console.log('Success:', response);
                },
                error: function error(xhr, status, _error) {
                    responseClass.css('display', 'flex');
                    answerClass.append('<p>Error: ' + xhr.responseText + '</p>');
                    console.error('Error:', _error);
                },
                complete: function complete() {
                    // Enable the link again after the request is done
                    askButton.removeClass('disabled').css('pointer-events', 'auto');
                }
            });

            // Prevent default link behavior (in case it's used as an anchor)
            event.preventDefault();
        });
    }
});

/***/ }),
/* 61 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var _main = __webpack_require__(0);

$(document).ready(function () {
    $('.impact-story-view').each(function (idx, swiperViewEl) {
        var $swiperView = $(swiperViewEl),
            $swiperTiles = $swiperView.next('.impact-story-tiles');
        for (var i = 0; i < Math.min($swiperTiles.length, 1); i++) {
            var swiperTiles = new Swiper($swiperTiles[i], {
                spaceBetween: 15,
                slidesPerView: 1,
                clickable: true,
                centeredSlides: false,
                watchSlidesProgress: true,
                breakpoints: {
                    600: {
                        slidesPerView: 2,
                        spaceBetween: 20
                    },
                    769: {
                        slidesPerView: 3,
                        spaceBetween: 20
                    }
                }
            });

            var swiperView = new Swiper($swiperView[i], {
                spaceBetween: 10,
                effect: "fade",
                navigation: {
                    nextEl: (0, _main.swiperQuery)($swiperView[i], '.swiper-button-next'),
                    prevEl: (0, _main.swiperQuery)($swiperView[i], '.swiper-button-prev')
                },
                thumbs: {
                    swiper: swiperTiles
                }
            });

            $('.swiper-slide', swiperView.wrapperEl).length == 1 && $(swiperTiles.el).addClass('swiper-tiles-disabled');
        }
    });
});

/***/ }),
/* 62 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


/***/ }),
/* 63 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


var _main = __webpack_require__(0);

$(document).ready(function () {
    function findMobImages(swiper) {
        return $(swiper.el).next('.quote-testimonial-tiles').next('.author-mobile-images').find('.quote-image');
    }

    $('.quote-testimonial .swiper-quote-details').each(function (idx, swiperViewEl) {
        var $swiperView = $(swiperViewEl),
            $swiperTiles = $swiperView.next('.quote-testimonial-tiles').find('.swiper');
        for (var i = 0; i < Math.min($swiperTiles.length, 1); i++) {
            var swiperTiles = new Swiper($swiperTiles[i], {
                spaceBetween: 10,
                slidesPerView: 1,
                centeredSlides: false,
                watchSlidesProgress: true,
                breakpoints: {
                    600: {
                        slidesPerView: 2,
                        spaceBetween: 15
                    }
                }
            });

            var prevButtons = Array.from($('.swiper-button-prev, .swiper-page-button-prev', $swiperView[i]));
            var nextButtons = Array.from($('.swiper-button-next, .swiper-page-button-next', $swiperView[i]));

            new Swiper($swiperView[i], {
                spaceBetween: 10,
                effect: "fade",
                fadeEffect: {
                    crossFade: true
                },
                navigation: {
                    nextEl: nextButtons,
                    prevEl: prevButtons
                },
                pagination: {
                    el: '.swiper-pagination',
                    clickable: true
                },
                thumbs: {
                    swiper: swiperTiles
                },
                on: {
                    afterInit: function afterInit(swiper) {
                        var $images = findMobImages(swiper);
                        $images.eq(swiper.activeIndex).addClass('active-image');
                    },
                    slideChangeTransitionStart: function slideChangeTransitionStart(swiper) {
                        var $images = findMobImages(swiper);
                        $images.eq(swiper.previousIndex).removeClass('active-image');
                        $images.eq(swiper.activeIndex).addClass('active-image');
                    }
                }
            });
        }
    });
});

/***/ }),
/* 64 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


$(document).ready(function () {
    var widthBetweenSlides = 10;
    $('.content-ticker:not(.scModuleEditing)').each(function () {
        var swiperContainer = this;
        var $swiper = $('.content-ticker-view', swiperContainer),
            $prevButton = $('.swiper-button-prev', swiperContainer),
            $nextButton = $('.swiper-button-next', swiperContainer);

        $swiper.each(function () {
            var swiper = this,
                playDelay = $(swiper).data("autoplay-delay") || 1000,
                playSpeed = $(swiper).data("autoplay-speed") || 300,
                totalWidth = 0,
                wrapWidth = window.screen.availWidth * 2,
                $wrapper = $('.swiper-wrapper', swiper),
                $initSlides = $wrapper.find('.swiper-slide');
            $initSlides.each(function (idx, slide) {
                totalWidth += $(slide).width() + widthBetweenSlides;
            });
            var newWidth = totalWidth;
            while (totalWidth != 0 && newWidth < wrapWidth) {
                $initSlides.each(function (idx, slide) {
                    $wrapper.append($(slide).clone());
                });
                newWidth += totalWidth;
            }

            var swiperView = new Swiper(swiper, {
                slidesPerView: 1,
                spaceBetween: widthBetweenSlides,
                centeredSlides: true,
                updateOnWindowResize: true,
                loop: true,
                speed: playSpeed,
                autoplay: {
                    delay: playDelay,
                    pauseOnMouseEnter: true,
                    waitForTransition: true
                },
                breakpoints: {
                    600: {
                        slidesPerView: 'auto'
                    }
                }
            });

            swiperView.loopSlideView = function (shift) {
                var slideIndex = swiperView.realIndex + shift;
                slideIndex = slideIndex >= 0 ? slideIndex : swiperView.slides.length - 1;
                slideIndex = slideIndex < swiperView.slides.length ? slideIndex : 0;
                swiperView.slideToLoop(slideIndex, Math.min(playSpeed, 500));
            };

            $prevButton.on("click", function () {
                swiperView.animating || swiperView.loopSlideView(-1);
            });
            $nextButton.on("click", function () {
                swiperView.animating || swiperView.loopSlideView(1);
            });
        });
    });
});

/***/ }),
/* 65 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


$(document).ready(function () {
    document.querySelectorAll('.horizontal-storytelling.live').forEach(function (container, index) {
        // Assign a unique class to each swiper-container dynamically
        var swiperContainer = container.querySelector('.swiper-container');
        if (!swiperContainer) return;

        // Add a unique class for navigation and pagination
        var uniqueId = 'swiper-' + index;
        swiperContainer.classList.add(uniqueId);

        var swiper = new Swiper('.' + uniqueId, {
            direction: 'horizontal',
            loop: false,
            slidesPerView: 1,
            clickable: true,
            crossFade: true,
            sticky: true,
            centeredSlides: false,
            watchSlidesProgress: true,
            autoHeight: false,
            freeMode: true,
            mousewheel: {
                releaseOnEdges: true,
                sensitivity: 10
            },
            navigation: {
                nextEl: container.querySelector('.swiper-button-next'),
                prevEl: container.querySelector('.swiper-button-prev')
            },
            pagination: {
                el: container.querySelector('.swiper-progress-bar'),
                type: 'progressbar'
            },
            on: {
                slideChange: function slideChange() {
                    // Logic for progress bar or custom events if needed
                },
                reachEnd: function reachEnd() {
                    // Allow vertical scroll again after reaching end

                    $('.hr.page-overlay').fadeOut(); // Remove the overlay
                    $(container).addClass('activated-once'); // Mark this container as activated
                }
            }
        });
        // Manually attach click handlers for additional buttons
        var additionalNextButtons = container.querySelectorAll('.swiper-button-bottom-next');
        var additionalPrevButtons = container.querySelectorAll('.swiper-button-bottom-prev');

        additionalNextButtons.forEach(function (button) {
            button.addEventListener('click', function () {
                swiper.slideNext();
            });
        });

        additionalPrevButtons.forEach(function (button) {
            button.addEventListener('click', function () {
                swiper.slidePrev();
            });
        });
    });

    // Create and append the overlay for darkening and blurring background
    $('body').append('<div class="hr page-overlay"></div>');

    // CSS styling for the overlay
    $('.hr.page-overlay').css({
        position: 'fixed',
        top: '0',
        left: '0',
        width: '100vw',
        height: '100vh',
        background: 'rgba(0, 0, 0, 0.6)', // Darken effect
        backdropFilter: 'blur(10px)', // Blur effect
        zIndex: '1000',
        display: 'none' // Initially hidden
    });
});

/***/ }),
/* 66 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


$(document).ready(function () {
    var wrapper = '.title-with-pill-wrapper';

    $(wrapper + " .title-with-pill-container .play-btn").click(function () {
        var brighcoveId = $(this).data("video-bid"),
            videoId = $(this).data("video-id");
        videoId && $(this).closest(wrapper).find(".three-pill-modal[data-video-bid=\"" + brighcoveId + "\"]").each(function () {
            var player = $(this).data("player");
            player && player.catalog.getVideo(videoId, function (error, video) {
                if (error && typeof error.data !== "undefined") {
                    player.error({ code: "VIDEO_CLOUD_ERR_" + error.data[0].error_code });
                } else if (typeof player.mediainfo.id === "undefined" || player.mediainfo.id != videoId) {
                    player.catalog.load(video);
                }
            });

            $(this).fadeIn().css("display", "flex").addClass("open");
        });
    });

    function closeVideoModal(modal) {
        var player = $(modal).data("player");
        player && player.pause();

        $(modal).removeClass("open").fadeOut();
    }

    $(wrapper + " .three-pill-modal").on("click", '.close-btn', function (e) {
        closeVideoModal(e.delegateTarget);
    }).each(function () {
        var that = $(this);
        typeof videojs !== "undefined" && $('.video-js', this).each(function () {
            videojs.getPlayer(this).ready(function () {
                var player = this;
                that.data("player", player);
            });
        });
    });

    $(document).on("keyup", function (e) {
        e.key == "Escape" && $('.three-pill-modal:visible').each(function () {
            closeVideoModal(this);
            return false;
        });
    });
});

/***/ }),
/* 67 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


$(document).ready(function () {
    var slidingSpeed = 300;

    $('.interactive-case-study:not(.scModuleEditing) .interactive-column').mouseenter(function () {
        var interColumn = $(this);
        interColumn.find('.box-summary').slideDown({
            duration: slidingSpeed,
            start: function start() {
                interColumn.addClass("active-column");
            },
            complete: function complete() {
                var interBox = $(this);
                if (interBox.hasClass("mCustomScrollbar")) {
                    interBox.mCustomScrollbar("update");
                } else {
                    interBox.mCustomScrollbar({
                        theme: "iqvia",
                        scrollInertia: 0
                    });
                }
                interBox.find('.mCSB_scrollTools').addClass("mCS-expanded");
            }
        });
    }).mouseleave(function () {
        $(this).removeClass("active-column").find('.box-summary').slideUp(slidingSpeed).find('.mCSB_scrollTools').removeClass("mCS-expanded");
    });
});

/***/ }),
/* 68 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


$(document).ready(function () {
    var widthBetweenSlides = 25,
        slidingSpeed = 250;
    $('.audio-carousel').each(function (idx, container) {
        var prevButtons = Array.from($('.swiper-button-prev, .swiper-page-button-prev', container));
        var nextButtons = Array.from($('.swiper-button-next, .swiper-page-button-next', container));
        var isView = !$(container).hasClass("scModuleEditing");

        $('.audio-carousel-view', container).each(function (idx, swiperView) {
            var audioHeight = $('.media-item', swiperView).height();
            new Swiper(swiperView, {
                slidesPerView: "auto",
                centeredSlides: true,
                spaceBetween: widthBetweenSlides,
                navigation: {
                    nextEl: nextButtons,
                    prevEl: prevButtons
                },
                pagination: {
                    el: '.swiper-pagination',
                    clickable: true
                },
                on: {
                    slideChangeTransitionStart: function slideChangeTransitionStart(swiper) {
                        var audios = $('.media-item', swiper.wrapperEl);
                        audios.eq(swiper.activeIndex).height(audioHeight + 1);
                        audios.eq(swiper.previousIndex).each(function (idx, audio) {
                            audio.pause();
                        });
                    },
                    slideChangeTransitionEnd: function slideChangeTransitionEnd(swiper) {
                        var audios = $('.media-item', swiper.wrapperEl);
                        audios.eq(swiper.activeIndex).height(audioHeight);
                    }
                }
            });

            isView && $('.audio-carousel-slide-content', swiperView).on("click", '.media-transcript-caption', function (e) {
                var transcript = $(e.delegateTarget),
                    transBtn = $(this);
                if (transcript.parent('.swiper-slide').hasClass("swiper-slide-active")) {
                    transcript.find('.media-transcript-body').slideDown({
                        duration: slidingSpeed,
                        start: function start() {
                            transBtn.hide();
                        },
                        complete: function complete() {
                            var transBox = $('.media-transcript-text', this);
                            transcript.addClass("opened");
                            if (transBox.hasClass("mCustomScrollbar")) {
                                transBox.mCustomScrollbar("update");
                            } else {
                                transBox.mCustomScrollbar({
                                    theme: "iqvia-blue",
                                    scrollInertia: 0
                                });
                            }
                        }
                    });
                }
                return false;
            }).on("click", '.media-transcript-xmark .btn', function (e) {
                var transcript = $(e.delegateTarget),
                    transBtn = transcript.find('.media-transcript-caption');
                transcript.find('.media-transcript-body').slideUp({
                    duration: slidingSpeed,
                    complete: function complete() {
                        transcript.removeClass("opened");
                        transBtn.show();
                    }
                });
            });
        });
    });
});

/***/ }),
/* 69 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";


$(document).ready(function () {
    var wrapper = '.faq-faq-module';
    $(wrapper + ' .tile-container button.clickable-tile').click(function () {
        var activeEl = $(this);
        var actParent = activeEl.parent();
        var accentColorClass = actParent[0].getAttribute('data-accent-color'); /*Kos*/
        if (actParent.hasClass('active')) {
            actParent.removeClass('active').next().slideUp();
            if (accentColorClass) {
                activeEl.removeClass(accentColorClass);
            }
            return;
        }
        actParent.addClass('active').next().slideDown();
        if (accentColorClass) {
            actParent.parent().children('.tile-container').children('.clickable-tile').removeClass(accentColorClass);
            activeEl.addClass(accentColorClass);
        }
    });
});

/***/ })
/******/ ]);;
