﻿(function (a) { (jQuery.browser = jQuery.browser || {}).mobile = /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0, 4)) })(navigator.userAgent || navigator.vendor || window.opera);

(function jsUpdate() { // IE 8 polyfill
    if (!Array.prototype.indexOf) {
        Array.prototype.indexOf = function (obj, start) {
            for (var i = (start || 0), j = this.length; i < j; i++) {
                if (this[i] === obj) { return i; }
            }
            return -1;
        }
    }

    if (!Array.prototype.forEach) {
        Array.prototype.forEach = function (callback, thisArg) {
            var T, k;
            var O = Object(this);
            var len = O.length >>> 0;

            if (typeof callback !== "function")
                throw new TypeError(callback + " n'est pas une fonction");

            if (arguments.length > 1)
                T = thisArg;

            for (k = 0; k < len; ++k) {
                var kValue;

                if (k in O) {
                    kValue = O[k];
                    callback.call(T, kValue, k, O);
                }
            }
        };
    }

    if (!Date.prototype.toISOString) {
        (function () {
            function pad(number) {
                if (number < 10) {
                    return '0' + number;
                }
                return number;
            }

            Date.prototype.toISOString = function () {
                return this.getUTCFullYear() +
                    '-' + pad(this.getUTCMonth() + 1) +
                    '-' + pad(this.getUTCDate()) +
                    'T' + pad(this.getUTCHours()) +
                    ':' + pad(this.getUTCMinutes()) +
                    ':' + pad(this.getUTCSeconds()) +
                    '.' + (this.getUTCMilliseconds() / 1000).toFixed(3).slice(2, 5) +
                    'Z';
            };

        }());
    }
})();

(function ($) {

    function DijonConstructor() {
        if (arguments.callee._singletonInstance) {
            return arguments.callee._singletonInstance;
        }

        arguments.callee._singletonInstance = this;

        var initFuncs = [];

        this.initialize = function () {
            for (var i = 0; i < initFuncs.length; ++i)
                initFuncs[i]();
        };

        this.addInitFunc = function (func) {
            initFuncs.push(func);
        };

        this.form = new Form;
        initFuncs.push(this.form.initialize);
    }

    function RemoveAccents(strAccents) {
        var strAccents = strAccents.split('');
        var strAccentsOut = new Array();
        var strAccentsLen = strAccents.length;
        var accents = 'ÀÁÂÃÄÅàáâãäåÒÓÔÕÕÖØòóôõöøÈÉÊËèéêëðÇçÐÌÍÎÏìíîïÙÚÛÜùúûüÑñŠšŸÿýŽž';
        var accentsOut = "AAAAAAaaaaaaOOOOOOOooooooEEEEeeeeeCcDIIIIiiiiUUUUuuuuNnSsYyyZz";
        for (var y = 0; y < strAccentsLen; y++) {
            if (accents.indexOf(strAccents[y]) != -1) {
                strAccentsOut[y] = accentsOut.substr(accents.indexOf(strAccents[y]), 1);
            } else {
                strAccentsOut[y] = strAccents[y];
            }
        }

        strAccentsOut = strAccentsOut.join('');

        return strAccentsOut;
    }

    function Form() {
        var $form;

        function initAutocompleteCombos() {
            $.widget("custom.combobox", {
                options: {
                    appendTo: 'body'
                },
                _create: function () {
                    if (this.element[0].disabled)
                        return;
                    this.wrapper = $("<span>")
                        .addClass("custom-combobox")
                        .insertAfter(this.element);
                    this.element.hide();
                    this._createAutocomplete();
                    this._createShowAllButton();
                    var input = this.input;
                    this.element.change(function () {
                        input.val($(this).find('option:selected').text());
                    });
                },
                _createAutocomplete: function () {
                    var selected = this.element.children(":selected"),
                        value = selected.val() ? selected.text() : "";
                    var select = this.element;
                    this.input = $("<input>")
                        .appendTo(this.wrapper)
                        .val(value)
                        .attr("title", "")
                        .addClass("custom-combobox-input ui-widget ui-widget-content ui-state-default ui-corner-left")
                        .autocomplete({
                            delay: 0,
                            minLength: 0,
                            source: $.proxy(this, "_source"),
                            appendTo: this.options.appendTo
                        })
                        .tooltip({
                            tooltipClass: "ui-state-highlight"
                        })
                        .focus(function () {
                            if ($(this).val() === select.data('nullLabel'))
                                $(this).val('');
                        });

                    this._on(this.input, {
                        autocompleteselect: function (event, ui) {
                            ui.item.option.selected = true;
                            this.element.change();
                            this._trigger("select", event, {
                                item: ui.item.option
                            });
                        },
                        autocompletechange: "_removeIfInvalid"
                    });
                },
                _createShowAllButton: function () {
                    var input = this.input,
                        wasOpen = false;
                    $("<a>")
                        .attr("tabIndex", -1)
                        .appendTo(this.wrapper)
                        .button({
                            icons: {
                                primary: "ui-icon-triangle-1-s"
                            },
                            text: false
                        })
                        .removeClass("ui-corner-all")
                        .addClass("custom-combobox-toggle ui-corner-right")
                        .mousedown(function () {
                            wasOpen = input.autocomplete("widget").is(":visible");
                        })
                        .click(function () {
                            if (input.prop("disabled"))
                                return false;

                            input.focus();
                            // Close if already visible
                            if (wasOpen) return;
                            // Pass empty string as value to search for, displaying all results
                            input.autocomplete("search", "");
                        });
                },
                _source: function (request, response) {
                    var matcher = new RegExp($.ui.autocomplete.escapeRegex(request.term), "i");
                    response(this.element.children("option").map(function () {
                        if (!$(this).is(":disabled")) {
                            var text = $(this).text();
                            if (this.value && (!request.term || matcher.test(RemoveAccents(text)) || matcher.test(text) || matcher.test(RemoveAccents(text).replace(/[`~!@#$%^&*()_|+\-=÷¿?;:'",.<>\{\}\[\]\\\/]/g, ' '))))
                                return {
                                    label: text,
                                    value: text,
                                    option: this
                                };
                        }
                    }));
                },
                _removeIfInvalid: function (event, ui) {
                    this.element.change();

                    // Selected an item, nothing to do
                    if (ui.item) {
                        return;
                    }

                    // Search for a match (case-insensitive)
                    var value = this.input.val(),
                        valueLowerCase = value.toLowerCase(),
                        valid = false;
                    this.element.children("option").each(function () {
                        if ($(this).text().toLowerCase() === valueLowerCase) {
                            this.selected = valid = true;
                            return false;
                        }
                    });
                    // Found a match, nothing to do
                    if (valid) {
                        return;
                    }

                    // Remove invalid value
                    this.input
                        .val(this.element.data('nullLabel'))
                        .attr("title", value + " n'est pas dans la liste.")
                        .tooltip("open");
                    this.element.val("");
                    this._delay(function () {
                        this.input.tooltip("close").attr("title", "");
                    }, 1000);
                    this.input.autocomplete("instance").term = "";
                },
                _destroy: function () {
                    this.wrapper.remove();
                    this.element.show();
                }
            });
            if (jQuery.browser.mobile) {
                var nothing;
            } else {
                $('select.autocomplete').each(function () {
                    var $select = $(this);
                    $select.combobox({ appendTo: $select.parent() });
                });
            }
        }

        function updateVisibility($control) {
            var $villesAggloFe = $('.villesagglo', $control);

            var inFrance = $('.pays option:selected', $control).text() == 'FRANCE';
            var inAgglo = inFrance && typeof $control.metadata.communes[$('option:selected', $villesAggloFe).text()] != 'undefined';

            $villesAggloFe.toggleClass('hidden', !inFrance);

            var $villeFe = $('.ville', $control);
            $villeFe.toggleClass('hidden', inAgglo);
            $('label', $villeFe).text(inFrance ? 'Précisez' : 'Localité');

            $('.voie', $control).toggleClass('hidden', inAgglo);
            $('.voiesville', $control).toggleClass('hidden', !inAgglo);
        }

        function updateVille($control) {
            var ville = $('.villesagglo option:selected', $control).text();
            var aucuneVille = $('.villesagglo option:first', $control).text();

            $('.ville input', $control).val(ville != aucuneVille ? ville : '');
        }

        function updateVoie($control) {
            var $voieOpt = $('.voiesville option:selected', $control);
            var voie = $voieOpt.text();
            var rivoli = $voieOpt.data('rivoli') || $control.metadata.voies[voie].rivoli;

            $('.voie input', $control).val(voie);
            $('.rivoli input', $control).val(rivoli);
        }

        function updateApercu($control) {
            var pays = $('.pays option:selected', $control).text();

            if (pays !== $('.pays option:first', $control).text()) {
                var getVal = function (cssClass) { return $('.' + cssClass + ' input', $control).val(); };

                var adress = {
                    adress: {
                        BatimentResidence: getVal('batiment'),
                        CodePostal: getVal('codepostal'),
                        ComplementNumero: getVal('complementnumero'),
                        EtagePorte: getVal('etageporte'),
                        LieuDitBoitePostale: getVal('lieuditboitepostale'),
                        Numero: getVal('numero'),
                        Pays: pays,
                        Rivoli: getVal('rivoli'),
                        Ville: getVal('ville'),
                        Voie: getVal('voie')
                    }
                };

                $.ajax({
                    url: '/_layouts/WebServicesV2/AdressWS.asmx/RenderAdressPreview',
                    type: 'POST',
                    data: JSON.stringify(adress),
                    dataType: 'json',
                    contentType: 'application/json; charset=utf-8'
                }).always(function (data) {
                    if (data.d) {
                        $('.apercu textarea', $control).val(data.d.Value).change();
                        $('.apercu pre').text(data.d.Value);
                    }
                });
            }
        }

        function initSmartAdresses() {
            var i = 0;
            $(".smartadressbox.editable").each(function () {
                var $control = $(this);
                var fill = function (selector, value) { $control.find(selector).val(value); };
                var idCPVille = "smartcpville_" + i;
                var idAddress = "smartadress_" + i;
                i++;

                var isNonEditable = $(".CP .textbox", $control).hasClass("noneditable");
                //Ajout du composant cp/ville
                if (isNonEditable) {
                    $(".PA", $control).after("<div class='form-entry smart-adress smart-VI'>"
                        + "<label>Code postal et ville<span class=\"required\">*</span><span class=\"colon\">:</span></label>"
                        + "<div class='textbox control noneditable'><span></span></div>"
                        + "<div class='error'></div>");
                }
                else {
                    $(".PA", $control).after("<div class='form-entry smart-adress smart-VI'>"
                        + "<label>Code postal et ville<span class=\"required\">*</span><span class=\"colon\">:</span></label>"
                        + "<div class='textbox control noneditable'><input id='" + idCPVille + "'></div>"
                        + "<div class='error'></div>"
                        + "</div> ");
                }
                //Ajout du composant adresse
                $(".smart-VI", $control).after("<div class='form-entry smart-adress smart-VO'>"
                    + "<label>Adresse complète<span class=\"required\">*</span><span class=\"colon\">:</span></label>"
                    + "<div class=\"info\">Veuillez saisir une adresse en commencant par le numéro de voie (par exemple 3 rue de la... )</div>"
                    + "<div class='textbox control editable'><input id='" + idAddress + "'><span class='erase'></span></div>"
                    + "<div class='helper-contents'>je ne trouve pas mon adresse dans la liste</div>"
                    + "<div class='error'></div>"
                    + ($control.data("display-complete-address") ? "<div class='complete-address'><input type='checkbox' id='completeAdd'><label class='info' for='completeAdd'>Compléter mon adresse</label></div>" : "")
                    + "</div> ");

                //Ajout clic retour à liste addresses (suite au clic sur "je ne trouve pas mon adresse dans la liste")
                $control.find(".NO").append("<div class='helperExt'><div class='helper-contents'><span class='return-address-list'>Retour à la liste des adresses</span></div></div>");
                $(".NO .helperExt .return-address-list").click(function () {
                    $(".form-entry.NO, .form-entry.NC, .form-entry.VO, .form-entry.VI, .form-entry.BR, .form-entry.CP").addClass("hidden");
                    fill(".form-entry.smart-adress.smart-VO input", "");
                    $(".smart-adress.smart-VO").show();
                    $(".smart-adress.smart-VI").show();
                });

                var isFrance = function () {
                    return $control.find(".PA select").val() === "FRANCE" || $control.find(".PA .control span").text() === "FRANCE";
                };

                var city = null;
                //autocomplete cp/ville
                $("#" + idCPVille).autocomplete({
                    source: function (request, response) {
                        return response($.map(GetCitiesFromQuery(request.term), function (c) {
                            return {
                                label: c.ccodep + " " + c.communes,
                                value: c
                            };
                        }));
                    },
                    minLength: 2,
                    select: function (event, ui) {
                        event.preventDefault();
                        $("#" + idCPVille).data("codcom", ui.item.value.codcomm);
                        $("#" + idCPVille).val(ui.item.label);

                        city = ui.item.value;

                        fill(".form-entry.smart-adress.smart-VO input", "");
                        fill(".VO input", "");
                        fill(".NO input", "");
                        fill(".NO input", "");
                        $(".form-entry.smart-adress.smart-VO", $control).removeClass("invalid");

                        //Remplissage des champs
                        if (city !== null) {
                            $control.find(".CP input").val(city.ccodep);
                            $control.find(".VI input").val(city.communes);
                        }
                        else if ($(this).val() !== 'undefined') {
                            $control.find(".CP input").val("");
                            $control.find(".VI input").val($(this).val());
                        }
                    },
                    focus: function (event, ui) {
                        event.preventDefault();
                        $("#" + idCPVille).val(ui.item.label);
                    },
                    change: function (event, ui) {
                        if (!ui.item) {
                            $("#" + idCPVille).val("");
                            $("#" + idCPVille).data("codcom", "");
                        }
                    }
                });

                var address = null;
                //autocomplete adresse
                $("#" + idAddress).autocomplete({
                    source: function (request, response) {
                        if ($.trim(request.term).length >= 3) {
                            var codCom = isNonEditable ? $(".smart-VI .textbox", $control).find("span").data("codcom") : $("#" + idCPVille).data("codcom");
                            if (codCom) {
                                $(".smart-VO .error", $("#" + idAddress)).text("Vous devez saisir une ville.");

                                var numbers = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"];
                                var isTrue = false;
                                $.each(numbers, function (index, value) { isTrue = isTrue || request.term.startsWith(value) });
                                if (isTrue) {
                                    $(".form-entry.smart-adress.smart-VO", $control).removeClass("invalid");
                                    response($.map(GetAddressFromQuery(codCom, request.term), function (a) {
                                        return {
                                            label: a.FullAddress,
                                            value: a
                                        };
                                    }));
                                }
                                else {
                                    $(".form-entry.smart-adress.smart-VO", $control).addClass("invalid");
                                    $(".form-entry.smart-adress.smart-VO .error", $control).text("Veuillez saisir une adresse en commencant par le numéro de voie.");
                                }
                            }
                            else {
                                $(".form-entry.smart-adress.smart-VO", $control).addClass("invalid");
                                $(".form-entry.smart-adress.smart-VO .error", $control).text("Vous devez choisir une ville");
                            }
                        }
                    },
                    minLength: 3,
                    select: function (event, ui) {
                        event.preventDefault();
                        $("#" + idAddress).val(ui.item.label);
                        if (ui.item.value.Provider === "AddressNotFound") {
                            $(".form-entry.NO, .form-entry.NC, .form-entry.VO, .form-entry.VI, .form-entry.BR, .form-entry.CP", $control).removeClass("hidden");
                            $(".form-entry.CP", $control).removeClass("force-hidden");
                            $(".smart-adress.smart-VO", $control).hide();
                            $(".smart-adress.smart-VI", $control).hide();
                            $(".form-entry.X input", $control).val("");
                            $(".form-entry.Y input", $control).val("");
                        }
                        else {
                            address = ui.item.value;

                            //Remplissage des champs
                            if (address !== null) {
                                $control.find(".VO input").val(address.LaneName !== "" ? address.LaneName : address.FullAddress);
                                $control.find(".NO input").val(address.Num);
                                $control.find(".NC input").val(address.ExtAd);
                                $control.find(".RI input").val(address.Rivoli);
                                $control.find(".X input").val(address.X);
                                $control.find(".X input").trigger('change');;
                                $control.find(".Y input").val(address.Y);
                                $control.find(".Y input").trigger('change');;
                                $control.find(".Provider input").val(address.Provider);
                            }
                        }
                    },
                    focus: function (event, ui) {
                        event.preventDefault();
                        $("#" + idAddress).val(ui.item.label);
                    },
                    change: function (event, ui) {
                        if (!ui.item) {
                            address = null;
                            $("#" + idAddress).val("");
                            $("#" + idAddress).data("codcom", "");
                            $control.find(".VO input").val("");
                            $control.find(".NO input").val("");
                            $control.find(".NC input").val("");
                            $control.find(".RI input").val("");
                            $control.find(".X input").val("");
                            $control.find(".Y input").val("");
                            $control.find(".Provider input").val("");
                        }
                    },
                    response: function (event, ui) {
                        if ($control.data("display-not-found")) {
                            var item = {
                                label: "Je ne trouve pas mon adresse",
                                value: {
                                    City: "",
                                    CodCom: "",
                                    ExtAd: "",
                                    FullAddress: "",
                                    LaneName: "",
                                    Num: "",
                                    PostalCode: "",
                                    Provider: "AddressNotFound",
                                    Rivoli: "",
                                    X: "0",
                                    Y: "0"
                                }
                            };
                            ui.content.push(item);
                        }
                    }
                });


                if (!isFrance()) {
                    $("#" + idCPVille).autocomplete("disable");
                    $("#" + idAddress).autocomplete("disable");
                    address = null;
                    city = null;
                    $(".form-entry.NO, .form-entry.NC, .form-entry.VO, .form-entry.VI", $control).removeClass("hidden");
                    $(".smart-adress.smart-VO", $control).hide();
                    $(".smart-adress.smart-VI", $control).hide();
                    $(".helperExt", $control).addClass("hidden");
                }

                //Réinit champs quand le pays est modifié
                $control.find(".PA select", $control).change(function () {
                    $control.find(".CP input, .VI input, .codepostalville input, .VO input, .voiesville select, .smart-VI input, .smart-VO input, .X input, .Y input").each(function () {
                        $(this).val("").change();
                    });
                    if (isFrance()) {
                        $("#" + idCPVille).autocomplete("enable");
                        $("#" + idAddress).autocomplete("enable");
                        $(".form-entry.NO, .form-entry.NC, .form-entry.VO, .form-entry.VI", $control).addClass("hidden");
                        $(".smart-adress.smart-VO", $control).show();
                        $(".smart-adress.smart-VI", $control).show();
                        $(".helperExt", $control).removeClass("hidden");
                    }
                    else {
                        address = null;
                        city = null;
                        $("#" + idCPVille).autocomplete("disable");
                        $("#" + idAddress).autocomplete("disable");
                        $(".form-entry.NO, .form-entry.NC, .form-entry.VO, .form-entry.VI", $control).removeClass("hidden");
                        $(".smart-adress.smart-VO", $control).hide();
                        $(".smart-adress.smart-VI", $control).hide();
                        $(".helperExt", $control).addClass("hidden");
                    }
                });

                //Réecriture au postback
                var oldCp = isNonEditable ? $(".CP .textbox span", $control).text() : $(".CP input", $control).val();
                var oldCity = isNonEditable ? $(".VI .textbox span", $control).text() : $(".VI input", $control).val();
                var oldNum = $(".NO input", $control).val();
                var oldComp = $(".NC input", $control).val();
                var oldLane = $(".VO input", $control).val();

                if (oldCp !== "") {
                    var c = GetCitiesFromQuery(oldCp + " " + oldCity);
                    if (c.length) {
                        if (isNonEditable) {
                            $(".smart-VI .textbox", $control).find("span").text(c[0].ccodep + " " + c[0].communes);
                            $(".smart-VI .textbox", $control).find("span").data("codcom", c[0].codcomm);
                        }
                        else {
                            $(".smart-VI input", $control).val(c[0].ccodep + " " + c[0].communes);
                            $("#" + idCPVille).data("codcom", c[0].codcomm);
                            $(".CP input", $control).val(c[0].ccodep);
                            $(".VI input", $control).val(c[0].communes);
                        }
                    }
                    else {
                        $(".smart-VI input", $control).val($.trim(oldCp + " " + oldCity));
                    }
                }
                if (oldLane !== "") {
                    $(".smart-VO input", $control).val($.trim(oldNum + " " + (oldComp !== "" ? oldComp + " " : "") + oldLane));
                }

                //Si cp et ville sont vide
                $("#" + idAddress).focus(function () {
                    if ($("#" + idCPVille).data("codcom") === "") {
                        $(".form-entry.smart-adress.smart-VO", $control).addClass("invalid");
                        $(".form-entry.smart-adress.smart-VO .error", $control).text("Vous devez choisir une ville");
                        $("#" + idAddress + " input").val("");
                    }
                });

                //Postback on deplace les erreurs 
                if ($(".VO.invalid", $control).length) {
                    $(".smart-VO", $control).addClass("invalid");
                    $(".smart-VO .error", $control).html($(".VO.invalid .error", $control).html());
                }
                if ($(" .VI.invalid", $control).length) {
                    $(".smart-VI", $control).addClass("invalid");
                    $(".smart-VI .error", $control).html($(".VI.invalid .error", $control).html());
                }

                //bouton effacer
                $(" .erase", $control).click(function () {
                    $(this).siblings("input").val("");
                });

                //Affichage des champs déjà rempli
                $(".form-entry.NC, .form-entry.BR", $control).each(function (index, value) {
                    if ($("input", $(value)).val() !== "") {
                        $(value).removeClass("hidden");
                    }
                });

                //Ajout d'information supplémentaire
                $(".complete-address input", $control).click(function () {
                    if ($(this).is(':checked')) {
                        $(".form-entry.NC", $control).removeClass("hidden");
                        $(".form-entry.BR", $control).removeClass("hidden");
                    }
                    else {
                        $(".form-entry.NC", $control).addClass("hidden");
                        $(".form-entry.BR", $control).addClass("hidden");
                    }
                });
            });
        }


        function GetAddressFromQuery(codCom, query) {
            var data = JSON.stringify({
                'Key': 'B0FC4DE0-9C27-418B-B7A9-020AFD76B1B2',
                'CodCom': codCom,
                'Query': query
            });

            var result;
            result = CallGeoCodeur("GetAddressFromQuery", data, false);
            return result.Lanes;
        }

        function GetCitiesFromQuery(query) {
            var $control = $(".smartadressbox");
            var metroCities = $control.data("metropolitan-cities");

            var data = JSON.stringify({
                'Key': 'B0FC4DE0-9C27-418B-B7A9-020AFD76B1B2',
                'Query': query,
                'IsMetropolitanCities': metroCities
            });

            var result;
            result = CallGeoCodeur("GetCitiesFromQuery", data, false);
            return result.Cities;
        }

        function CallGeoCodeur(ws_name, data, isAsync) {
            var baseUrlWebservicesAdress = window.Dijon.Utils.GetWsBaseUrl() + '/Common/AddressService.svc/';
            $.ajax({
                type: 'POST',
                url: baseUrlWebservicesAdress + ws_name,
                data: data,
                contentType: 'application/json',
                dataType: 'json',
                async: isAsync,
                success: function (data) {
                    result = data;
                },
                error: function (result, statut, error) {
                    alert("Erreur : veuillez réessayer ultérieurement");
                }
            });
            return result;
        }

        function initNumberBoxesFormatChecker() {
            var dateRx = /^([0-9]{2}\/[0-9]{2}\/[0-9]{4})?$/
            $('.datebox.editable input[type="text"], .datetimbox.editable input[type="text"]').blur(function () {
                $(this).closest('.form-entry').find('.error').text(dateRx.test($(this).val()) ? '' : 'Attention, la date ne respecte pas le format jj/mm/yyyy.');
            });

            $('.integerbox.editable input').change(function () {
                var $this = $(this);
                $this.val($this.val().replace(/[^0-9-]/g, ''));
            });

            $('.realbox.editable input').change(function () {
                var $this = $(this);
                $this.val($this.val().replace(/[^0-9,.-]/g, ''));
            });

            $('.integerbox.editable input').blur(function () {
                $(this).closest('.form-entry').children('.error').text(/^-?[0-9]*$/.test($(this).val()) ? '' : 'Attention, vous devez saisir un nombre entier.');
            });

            $('.realbox.editable input').blur(function () {
                $(this).closest('.form-entry').children('.error').text(/^-?[0-9]*,?[0-9]*$/.test($(this).val()) ? '' : 'Attention, vous devez saisir un nombre réel.');
            });
        }

        function initDatepickers() {
            $.datepicker.regional['fr'] = {
                clearText: 'Effacer', clearStatus: '',
                closeText: 'Fermer', closeStatus: 'Fermer sans modifier',
                prevText: '<Préc', prevStatus: 'Voir le mois précédent',
                nextText: 'Suiv>', nextStatus: 'Voir le mois suivant',
                currentText: 'Courant', currentStatus: 'Voir le mois courant',
                monthNames: ['Janvier', 'F&eacute;vrier', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Ao&ucirc;t', 'Septembre', 'Octobre', 'Novembre', 'D&eacute;cembre'],
                monthNamesShort: ['Jan', 'F&eacute;v', 'Mar', 'Avr', 'Mai', 'Jun', 'Jul', 'Ao&ucirc;', 'Sep', 'Oct', 'Nov', 'D&eacute;c'],
                monthStatus: 'Voir un autre mois', yearStatus: 'Voir un autre année',
                weekHeader: 'Sm', weekStatus: '',
                dayNames: ['Dimanche', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi'],
                dayNamesShort: ['Dim', 'Lun', 'Mar', 'Mer', 'Jeu', 'Ven', 'Sam'],
                dayNamesMin: ['Di', 'Lu', 'Ma', 'Me', 'Je', 'Ve', 'Sa'],
                dayStatus: 'Utiliser DD comme premier jour de la semaine', dateStatus: 'Choisir le DD, MM d',
                dateFormat: 'dd/mm/yy', firstDay: 0,
                initStatus: 'Choisir la date', isRTL: false
            };
            $.datepicker.setDefaults($.datepicker.regional['fr']);

            var cdnUrl = $(".vdd-form").data("cdn-url");

            var options = {
                showOn: 'button',
                buttonImage: cdnUrl + '/Common/Base/images/calendrier2015.png',
                buttonImageOnly: true,
                changeMonth: true,
                changeYear: true,
                //minDate: new Date(1700, 0, 1),
                //defaultDate: '-10y',
                firstDay: 1,
                beforeShow: function () {
                    return !$(this).closest(".datebox").find("input").prop("disabled");
                }
            };

            $('.datebox.editable, .datetimebox.editable').each(function () {
                var $this = $(this);
                var yearRange = $this.attr('data-year-range'); //TODO
                options.minDate = $this.data('min-date');
                options.maxDate = $this.data('max-date');
                options.yearRange = yearRange || '-100:+10';

                var $input = $('input', $this);
                $input.datepicker(options);
                var $inputWrap = $('<div></div>').addClass('inputwrap datepickerwrap').insertAfter($input.parent());
                $('.ui-datepicker-trigger', $this).appendTo($inputWrap);
            });
        }


        function initAdvancedStyles() {
            var isFill = function (ctrl) {
                if ($(ctrl).val())
                    return true;
                else
                    return false;
            };

            var getFormEntry = function (ctrl) {
                return $(ctrl).closest('.form-entry');
            };

            $('input, select, textarea', $(".form-entry:not(hidden)")).filter(':not(input[type="submit"])')
                .focus(function () {
                    getFormEntry(this).addClass('current').toggleClass("fill", true);
                })
                .blur(function () {
                    getFormEntry(this).toggleClass("fill", isFill(this)).closest('.form-entry').removeClass('current');
                });

            $('input, select, textarea', $(".form-entry:not(hidden)")).filter(function () {
                var elem = this;
                if (isFill(elem))
                    getFormEntry(elem).addClass("fill");
                $("> label", getFormEntry(elem)).click(function () {
                    getFormEntry(this).addClass("fill");
                    elem.focus();
                });
            });


            $('input,select').keypress(function (event) { return event.keyCode != 13; });
            $('.realbox input').keyup(function (event) { $(this).val($(this).val().replace('.', ',')); });

            $('.error')
                .filter(function () { return $(this).text().trim().length > 0; })
                .parent()
                .addClass('invalid')
                .find('input, select, textarea').change(function () {
                    getFormEntry(this)
                        .removeClass('invalid')
                        .find('.error').hide();
                });

            $('.datebox.editable img, .datetimebox.editable img').attr('title', 'Sélectionnez une date');

            $('.force-download, .image-toolbar').tooltip();



            $('.filters-title').click(function () {
                $(this).parent().toggleClass('open');
            });

            var privatePostBack = __doPostBack;
            __doPostBack = function () {
                displayWaiting();
                privatePostBack.apply(this, arguments);
            };
        }

        function hideWaiting() {
            $("#waiting-overlay").remove();
            $('body').css('overflow', 'auto');

        }

        function displayWaiting() {
            var $div = $("<div id='waiting-overlay' class='background-grey'></div>");
            var $loader = $("<div class='loader' id='loader'><span></span><span></span><span></span></div>");

            $div.append($loader);
            $('body').css('overflow', 'hidden');

            $('body').append($div);
        }

        function initSummary() {
            var summary = $('.summary');
            summary.on('click', 'h2', function () {
                $(this).next('.collapsable').stop().slideToggle()
                    .parent().toggleClass('closed');
            });

            summary.add('p.confirmation').closest('.main-content').addClass('summary-content');

            $('.navigation-bar .save-button, .vdd-form:not(.ajax-wpc) .navigation-bar .next-button,.vdd-form:not(.ajax-wpc) .previous-button , .waiting-dialog, .control input.vdd-base-button').click(function () {
                if ($(this).parents(".control").is(".onetomanycontrol")) {
                    return;
                }
                displayWaiting();
            });
        }

        function displayImageFullScreen(src) {
            window.scrollTo(0, 0);
            var $body = $(document.body).css({ overflow: "hidden" });
            var $overlay = $("<div/>").css({
                position: "absolute",
                top: 0, left: 0, right: 0, bottom: 0,
                background: "url('" + src + "') rgba(0, 0, 0, 0.7)",
                "z-index": 1000,
                "background-repeat": "no-repeat",
                "background-size": "contain",
                "background-position": "center center",
                cursor: "pointer"
            }).click(function () {
                $overlay.remove();
                $body.css({ overflow: "auto" });
            }).appendTo($body);
        }

        function initUploads() {
            $('.upload-button input[type="file"]').change(function () {
                $(this).parent().next('.send').click();
            });

            $('.attachmentcontrol')
                .on('click', '.delete-button', function () {
                    var $this = $(this);
                    var $attControl = $this.closest('.attachmentcontrol');

                    var $toDelete = $('.file-to-delete input', $attControl);
                    if ($toDelete.length) {
                        var fileName = $this.attr('href').substr(1);
                        $toDelete.val(fileName);
                    }
                    $('.button-submit-delete, .delete', $attControl).click();

                    return false;
                })
                .on('mouseenter', '.delete-button', function () { $(this).parent().addClass('highlight'); })
                .on('mouseleave', '.delete-button', function () { $(this).parent().removeClass('highlight'); });

            $('.pictureattachmentcontrol').each(function () {
                var $attControl = $(this);
                var $toolbar = $('.image-toolbar', $attControl);
                var $image = $('.display img', $attControl);
                var src = $image.attr('src');
                if ($toolbar.length > 0) {
                    var newSrc = src;
                    if (newSrc) {
                        if (newSrc.indexOf("?") !== -1) {
                            newSrc = newSrc + "&";
                        }
                        else {
                            newSrc = newSrc + "?";
                        }
                    }
                    $image.attr('src', newSrc + 'no_cache=' + new Date().getTime());

                    $image.one('load', function () {
                        var cvrt = Math.floor;
                        var $clone = $('<img />').attr('src', src);

                        var $cropSettings = $('.CROP_SETTINGS', $toolbar);
                        var $toolRecipient = $('.IMAGE_TOOL_DATA', $toolbar);
                        var $applyTool = $('.APPLY_TOOL', $toolbar);

                        var ratio = null;
                        if ($cropSettings.val().length > 0)
                            ratio = parseFloat($cropSettings.val());

                        setTimeout(function () {
                            var jcrop = $image.Jcrop({
                                trueSize: [$clone[0].width, $clone[0].height],
                                boxWidth: 300,
                                boxHeight: 300,
                                aspectRatio: ratio,
                                bgColor: "white",
                                onSelect: function (c) {
                                    $toolRecipient.val('crop:' + cvrt(c.x) + ';' + cvrt(c.y) + ';' + cvrt(c.w) + ';' + cvrt(c.h));
                                }
                            });
                        }, 200);

                        $('a:not(.crop):not(.zoom)', $toolbar).click(function () {
                            $toolRecipient.val($(this).attr('class'));
                            $applyTool.click();
                            return false;
                        });

                        $('a.crop', $toolbar).click(function () {
                            if ($toolRecipient.val().length > 0)
                                $applyTool.click();

                            return false;
                        });

                        $('a.zoom', $toolbar).click(function () {
                            displayImageFullScreen(src);
                            return false;
                        });
                    });
                }
                else {
                    $image.css({ "cursor": "zoom-in" }).click(function () {
                        displayImageFullScreen(src);
                        return false;
                    });
                }
            });
        }

        function waitWorkOnImage(href) {
            var $this = $(href);
            var $parent = $this.parent();
            var src = $this.attr('href');
            var $download = $('.download', $parent);
            var $waiting = $('.waiting', $parent);
            $.ajax({
                url: src,
                success: function () { //pass an anonymous callback function
                    //$this.fadeIn();
                    $waiting.hide();
                    $download.show();
                    $this.text("Télécharger");
                    $this.removeClass("blocked");
                    $parent.removeClass("not-allowed");
                },
                statusCode: {
                    404: function () {
                        $download.hide();
                        $waiting.show();
                        $this.text("Génération en cours");
                        if (!$this.hasClass('blocked')) {
                            $this.addClass("blocked");
                            $parent.addClass("not-allowed");
                        }
                        setTimeout(function () { wait(href) }, 1000);
                    }
                }
            });

        }

        function initOneToMany() {
            $('.onetomanycontrol .delete input').tooltip();
            $('.onetomanycontrol').each(function () {
                var $control = $(this);
                var deleteLabel = $control.data('deleteLabel');
                var restoreLabel = $control.data('restoreLabel');
                var $statuses = $control.children(".statuses");
                var addPostBack = $control.data('add-post-back') + '';
                var $rootOtmRow = $control.hasClass("tableonetomanycontrol") ? $("table tbody", $control).first() : $control;

                $control.on('click', '.delete input', function () {
                    var $this = $(this);
                    var index = $this.data("idx");
                    var $hidden = $statuses.children().eq(index);
                    var deleting = $hidden.val() != 'deleted';

                    $hidden.val(deleting ? 'deleted' : 'normal');

                    var $row = $rootOtmRow.children(".otm-row").eq(index);
                    $row
                        .removeClass(deleting ? 'normal' : 'deleted')
                        .removeClass(deleting ? 'new' : 'deleted')
                        .addClass(deleting ? 'deleted' : 'normal');

                    $this.attr('title', deleting ? 'Annuler la suppression' : 'Supprimer la ligne');
                    $this.val(deleting ? restoreLabel : deleteLabel);
                    $this.tooltip('option', 'content', deleting ? 'Annuler la suppression' : 'Supprimer la ligne');

                    return false;
                });

                if (addPostBack !== '1') {
                    $('input', $control.children('.add-row')).click(function () {
                        var $firstHidden = $rootOtmRow.children('.form-entry.otm-row.hidden:first');
                        $firstHidden.removeClass('hidden').addClass('new');

                        $statut = $statuses.children().eq($firstHidden.data("idx"));
                        $statut.val('new');

                        $('.empty-row', $control).hide();
                        return false;
                    });
                }

                $('input', $control.children('.copy-row')).click(function () {

                    var $firstHidden = $rootOtmRow.children('.form-entry.otm-row.hidden:first');
                    $firstHidden.removeClass('hidden').addClass('new');
                    var $prevRow = $firstHidden.prev();
                    if ($prevRow.length) {
                        $("input", $firstHidden).each(function (key, value) {
                            if (!isMyEditIdInputByKey(key, $prevRow)) {
                                value.value = $("input", $prevRow).get(key).value;
                            }
                        });

                        $("select", $firstHidden).each(function (key, value) {
                            var toto = $($("select", $prevRow).get(key)).prop('selectedIndex');
                            $('option:eq(' + toto + ')', value).prop('selected', true);

                        });

                        $statut = $statuses.children().eq($firstHidden.data("idx"));
                        $statut.val('new');
                    }
                    return false;
                });


                // binding
                $statuses.children().each(function () {
                    var $input = $(this);
                    var index = $input.data("idx");
                    var status = $input.val();

                    if (status != 'hidden') {
                        var $fe = $control.children(".otm-row").eq(index);
                        $fe.removeClass('hidden').addClass($input.val());

                        if (status == 'deleted')
                            $("input", $fe.children('.delete')).val(restoreLabel).attr('title', 'Annuler la suppression');

                        $('.empty-row', $control).hide();
                    }
                });
            });
        }

        // Test if ythe duplicate input is MDY_EDIT_ID
        function isMyEditIdInputByKey(key, prevRow) {
            // if the div parent has data-binding-attribute (if not it's the close button)
            // and return if data-binding-id contains MDY_EDIT_ID
            return $("input", prevRow).get(key).parentNode.getAttribute('data-binding-id')
                ? $("input", prevRow).get(key).parentNode.getAttribute('data-binding-id').indexOf('MDY_EDIT_ID') != -1 ? true : false
                : false;
        }

        function displayPopup(url, popReload, reloadButton, forceReload) {


            var $body = $(document.body);

            var isOnIFrame = self.location.href.indexOf("IFramed") !== -1;

            var notifyOpenParent = function () {
                if (isOnIFrame)
                    $(".overlay", window.parent.document).addClass("open-iframe");

            };
            var notifyCloseParent = function () {
                if (isOnIFrame)
                    $(".overlay", window.parent.document).removeClass("open-iframe");
            };

            url += (url.indexOf('?') === -1 ? '?' : '&') + 'IFramed=1&IsDlg=1';
            var subClass = isOnIFrame ? "sub-iframe-popup" : "";
            var $iframe = $('<iframe id="current-popup" class="iframe-popup " src="' + url + '" frameBorder="0"></iframe>');
            notifyOpenParent();

            var $overlay = $('<div class="overlay background-grey ' + subClass + '" ></div>');
            var $background = $('<div class="background-grey"></div>');
            var $div = $('<div class="iframe-bloc"></div>');
            $overlay.append($div);
            $overlay.append($background);

            $body.append($overlay);

            $loader = $("<div class='loader' id='loader'><span></span><span></span><span></span></div>");

            $div.append($loader);
            $div.append($iframe);
            $('body').css('overflow', 'hidden');

            $close = $("<div class='popup-close'></div>");
            $close.html("X");

            $div.append($close);

            var forceClose = function () {
                setTimeout(function () {
                    window.top.onbeforeunload = undefined;

                    if ($(reloadButton)[0]) {
                        $(reloadButton).click();
                    }
                    else {
                        window.location = window.location.href;
                    }
                    notifyCloseParent();

                }, 500);
            };

            var close = function () {
                if (forceReload || $iframe.hasClass('force-close-dialog') || popReload && $iframe.contents().find('.vdd-form .confirmation').length > 0 || $iframe.contents().find('.force-close-dialog').length > 0) {
                    forceClose();
                }
                $('body').css('overflow', 'auto');
                $overlay.remove();
                notifyCloseParent();
            };

            //event                
            $close.click(function () {
                close();
            });

            $iframe.onunload = function () {
                $iframe.hide();
            };

            $iframe.load(function () {
                $iframe.contents().find('body').attr('scroll', 'yes');
                $icon = $iframe.contents().find('#siteIcon');
                if ($icon[0]) {
                    $icon.hide();
                }

                if ($iframe.contents().find('.force-close-dialog').length > 0) {
                    forceClose();
                }
                else {
                    var $quit = $('<a href=\"#close\">Fermer cette fenêtre</a>');
                    $quit.click(function () { close(); });
                    $iframe.contents().find('.vdd-form .confirmation').append('<br />').append($quit);
                }
                $background.fadeOut();

            });

            return $div;

        }

        function initPopups() {
            var $body = $(document.body);
            $body.on('click', 'a.popupable', function () {
                var $this = $(this);
                var url = $this.attr('href');

                displayPopup(url, $this.hasClass('pop-reload'), $('.searchcontrolset .lvc-search .buttons :first-child'), $this.hasClass('pop-force-reload'));
                return false;
            });
        }

        function addParamTo(url, param) {
            if (url.indexOf(param) > 0) {
                return url;
            }
            if (url.indexOf('?') > 0) {
                url = url + "&" + param;
            } else {
                url = url + "?" + param;
            }
            return url;
        }

        function initExpandablesGroupingResults() {
            var $headers = $('.lvs-result-grouping-header.collapsable');
            $headers.css({ cursor: 'pointer' });
            $headers.click(function () {
                $(this).next().slideToggle();
                return true;
            });
        }

        function initClientSelection() {
            var SEP = ';';
            var DATA_ATTR = 'selectionId';

            $('.MultiSelectionSearchControlSetBox .searchcontrolset').each(function () {
                var $this = $(this);
                var $idsHid = $('.MultiSelectionSearchControlSetBox input.search-result');
                if ($idsHid.length) {
                    var updateSelectionFromChecks = function () {
                        var $checkboxes = $this.find('.checkbox input');

                        var ids = $checkboxes.filter(':checked').map(function (ix, elem) {
                            return $(elem).parent().data(DATA_ATTR);
                        }).get();
                        $idsHid.val(ids.join(SEP));
                    };

                    $this.on('change', '.checkbox input', updateSelectionFromChecks);
                }
            });

            $('.searchcontrolset').each(function () {
                var $this = $(this);
                if ($this.find('input.selected-ids').length) {

                    var updateSelectionFromChecks = function () {
                        var ids = $this.find('.checkbox input').filter(':checked').map(function (ix, elem) {
                            return $(elem).parent().data(DATA_ATTR);
                        }).get();

                        $this.find('input.selected-ids').val(ids.join(SEP));
                    };

                    $this.on('change', '.checkbox input', updateSelectionFromChecks);

                    var idsToSelect = $this.find('input.selected-ids').val().split(SEP);
                    $this.find('.checkbox input').each(function () {
                        var $check = $(this);
                        $check.prop('checked', idsToSelect.indexOf($check.parent().data(DATA_ATTR).toString()) >= 0);
                    });

                    // enlève les items potentiellement sélectionnés avant un filtrage de la sélection client.
                    updateSelectionFromChecks();

                    $this.on('click', '.select-all, .deselect-all', function () {
                        var select = $(this).hasClass('deselect-all');
                        $this.find('.checkbox input').prop('checked', select);
                        updateSelectionFromChecks();
                        if (select) {
                            $(this).removeClass('deselect-all').addClass('select-all');
                            $('.fa-square-o').removeClass('fa-square-o').addClass('fa-check-square-o');
                        }
                        else {
                            $(this).removeClass('select-all').addClass('deselect-all');
                            $('.fa-check-square-o').removeClass('fa-check-square-o').addClass('fa-square-o');
                        }
                        return false;
                    });
                }
            });
        }

        function initFullSizeIframeDisplay() {
            $('iframe.full-size').load(function () {
                setTimeout(function () {

                    var $this = $(this);
                    var iframe = $(this)[0];
                    var iframewindow = iframe.contentWindow ? iframe.contentWindow : iframe.contentDocument.defaultView;
                    $(iframewindow).resize(function () {
                        $this.height($this.contents().find("body").height() + 20);
                    });
                    $(iframewindow).resize();

                }, 200);

            });
            $('iframe.iframeIntraccess').load(function () {
                var eventName = 'DOMSubtreeModified';
                var iframe = this;
                var $this = $(this);
                var $iframewindow = $(iframe.contentWindow ? iframe.contentWindow : iframe.contentDocument.defaultView);

                var disableEvent = function () {
                    $iframewindow.off(eventName);
                };

                var enableEvent;
                var eventFunc = function () {
                    disableEvent();
                    var tempScrollTop = $(window.top).scrollTop();
                    var $body = $this.contents().find("body");
                    $body.css({ 'overflow': 'hidden' });
                    $this.height($body[0].scrollHeight + 50);
                    $(window.top).scrollTop(tempScrollTop);
                    setTimeout(enableEvent, 500);
                };

                enableEvent = function () {
                    $iframewindow.on(eventName, eventFunc);
                };

                enableEvent();
                $iframewindow.trigger(eventName);
            });
        }


        function initIFrameDisplay() {
            Dijon.notifyHeight = function (frameName, frameHeight) {
                $('iframe[name="' + frameName + '"]').height(Math.max($('.fullpage .searchcontrolset .results').height(), 400));
            };

            var params = Dijon.Utils.getUrlParams();
            if (typeof params['IFramed'] != 'undefined' && params['IFramed'] == '1'
                || typeof params['IsDlg'] != 'undefined' && params['IsDlg'] == '1') {
                $(document.body).addClass('iframed');
                $(window).resize(function () {
                    $("#s4-workspace").height(window.parent.$("#current-popup").height());
                });
                $(window).resize();
            }
        }

        function initButton() {
            $(document).ready(function () {
                $('.class_group_intern  .vdd-base-button:not(.ready)').each(function () {
                    var $a = $(this);
                    var $container = $("<span></span>");
                    $container.attr("class", $a.attr("class") + " ready ");
                    $container.attr("disabled", $a.attr("disabled"));
                    if ($a.hasClass("popupable")) {
                        $a.attr("class", "btn-dijon-label popupable pop-reload").wrap($container);
                    }
                    else {
                        $a.attr("class", "btn-dijon-label").wrap($container);
                    }
                });
            });

        }

        function initConfirmableButton() {
            $('.vdd-confirmable').each(function () {
                $(this).click(function () {
                    if ($(this).hasClass("vdd-bypass-confirmable")) {
                        return true;
                    }

                    showConfirmationDialog($(this));
                    return false;
                });
            });
        }

        function showConfirmationDialog($input) {
            var form = $('form:first');
            var title = $input[0].defaultValue;
            dlg = $('<div id="confirmation-dialog" title="Confirmation ?" />');
            dlg.append('<p>Êtes-vous sûr(e) de vouloir ' + title + ' ?</p>');
            form.append(dlg);
            dlg.dialog({
                resizable: false,
                width: 500,
                modal: true,
                buttons: {
                    'Oui': function () { $input.toggleClass("vdd-bypass-confirmable"); $(this).dialog("close"); $input.click(); },
                    'Non': function () { $(this).dialog("close"); hideWaiting(); },
                },
                open: function (event, ui) {
                    $('.ui-dialog').css('z-index', 9003);
                    $('.ui-widget-overlay').css('z-index', 9002);
                },
                close: function (event, ui) {
                    hideWaiting();
                },

            });

            return false;
        }

        function initPlaceholders() {
            $('.inlinemultivaluebox > .control').each(function () {
                var $this = $(this);
                $this.find('input[type="text"]').attr('placeholder', $this.data('placeholder'));
            });
        }

        function initMap() {
            $('div.google-address').each(function () {
                initialiseMap($(this));

            });
        }

        function initialiseMap($control) {
            var $geocoder = new google.maps.Geocoder();
            var $infowindow = new google.maps.InfoWindow();

            var torun = new google.maps.LatLng(47.33, 5.04);
            var $marker = new google.maps.Marker({
                position: torun,
                map: null
            });
            var $canvas = $('.map_canvas', $control);
            var $map = new google.maps.Map($canvas[0],
                {
                    mapTypeId: google.maps.MapTypeId.ROADMAP,
                    center: torun,
                    zoom: 15
                });
            google.maps.event.addListener($map, 'click', function (e) {
                $geocoder.geocode(
                    { 'latLng': e.latLng },
                    function (results, status) {
                        updateMapAndFields($control, $map, $infowindow, $marker, status, results[0], false);
                    }
                );
            });

            var $ActionButton = $('.action', $control);
            $ActionButton.on('click', function () {
                var $formated = $('.formated input', $control);
                var address = $formated.val() + ",Dijon, France";
                $geocoder.geocode({ 'address': address },
                    function (results, status) {
                        updateMapAndFields($control, $map, $infowindow, $marker, status, results[0], true);
                    }
                );
            });

            var $formated = $('.formated input', $control);
            $formated.keypress(function (event) {
                if (event.which == 13) {
                    var address = $formated.val() + ",Dijon, France";
                    $geocoder.geocode({ 'address': address },
                        function (results, status) {
                            updateMapAndFields($control, $map, $infowindow, $marker, status, results[0], true);
                        }
                    );
                }
            });

            var $lat = $('.lat input', $control);
            var $long = $('.long input', $control);
            if (typeof $lat != 'undefined' && $lat != null && typeof $long != 'undefined' && $long != null) {
                var lt = $lat.val();
                var lg = $long.val();
                if (lt != "" && lg != "") {
                    var latlng = new google.maps.LatLng(lt, lg);
                    $geocoder.geocode({ 'latLng': latlng },
                        function (results, status) {
                            updateMapAndFields($control, $map, $infowindow, $marker, status, results[0], true);
                        }
                    );
                }
            }
        }

        function updateMapAndFields($control, $map, $infowindow, $marker, status, result, isSearch) {
            if (status == google.maps.GeocoderStatus.OK) {
                if (result) {

                    $marker.setPosition(result.geometry.location);
                    $marker.setMap($map);

                    $infowindow.setContent(result.formatted_address);
                    $infowindow.open($map, $marker);
                    var $lat = $('.lat input', $control);
                    var $long = $('.long input', $control);
                    $lat.val(result.geometry.location.lat());
                    $long.val(result.geometry.location.lng());

                    var numero = "";
                    var voie = "";
                    var codepostal = "";
                    var localite = "";
                    var pays = "";

                    for (var i = 0; i < result.address_components.length; i++) {
                        for (var j = 0; j < result.address_components[i].types.length; j++) {
                            if (result.address_components[i].types[j] == "street_number") { numero = result.address_components[i].long_name; }
                            if (result.address_components[i].types[j] == "route") { voie = result.address_components[i].long_name; }
                            if (result.address_components[i].types[j] == "postal_code") { codepostal = result.address_components[i].long_name; }
                            if (result.address_components[i].types[j] == "locality") { localite = result.address_components[i].long_name; }
                            if (result.address_components[i].types[j] == "country") { pays = result.address_components[i].long_name; }
                        }
                    }
                    var $numero = $('.numero input', $control);
                    var $voie = $('.voie input', $control);
                    var $codepostal = $('.codepostal input', $control);
                    var $localite = $('.localite input', $control);
                    var $pays = $('.pays input', $control);
                    $numero.val(numero);
                    $voie.val(voie);
                    $codepostal.val(codepostal);
                    $localite.val(localite);
                    $pays.val(pays);

                    var $formated = $('.formated input', $control);
                    $formated.val(result.formatted_address);


                    if (isSearch) {
                        $map.setCenter(result.geometry.location, 16);
                    }
                } else {
                    var $formated = $('.formated input', $control);
                    $formated.val("Aucune localisation trouvée");
                }
            } else {
                var $formated = $('.formated input', $control);
                $formated.val("Echec du positionnenment : " + status);
            }
        }

        function initAuthentification() {
            $('div.authentificationwpc').each(function () {
                var $control = $(this);
                var $button = $('.action', $control);

                $button.click(function () {
                    WsAuthentificationServiceCall($control);
                    return false;
                });
                $(".connexion-panel input", $control).keyup(function (event) {
                    if (event.keyCode == 13) {
                        $button.click();
                    }
                });
            });

            // V2 sans ADFS uniquement
            function checkLoginPass($control) {
                var mail = $('.mail', $control).val();
                var pwd = $('.pwd', $control).val();

                var $error = $('.error', $control)

                if (!mail) {
                    $error.html("L'adresse e-mail n'est pas renseignée.");
                    return;
                }

                if (!pwd) {
                    $error.html("Le mot de passe n'est pas renseigné.");
                    return;
                }

                $.ajax({
                    type: "POST",
                    url: '/_layouts/WebServicesAsync/AuthV2WS.asmx/TryConnect',
                    data: JSON.stringify({ email: mail, password: pwd }),
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    success: function (data) {
                        if (data.Status != "Success") {
                            $error.html(data.Message);
                        }
                        else {
                            location = Dijon.Utils.getUrlParams()["returnUrl"] || "https://www.dijon.fr";
                        }
                    },
                    error: function (e) {
                        console.error("Error " + e.responseText);
                        $error.html("La connexion est temporairement indisponible ; veuillez réessayer dans un instant.");
                    }
                });
            };

            $('.myauthv2wpc').each(function () {
                var $control = $(this);
                var $button = $('.action', $control);
                var $error = $('.error', $control);

                $button.click(function () {
                    $error.html('Chargement...');
                    checkLoginPass($control);
                    return false;
                });

                $(".connexion-panel input", $control).keyup(function (event) {
                    if (event.keyCode == 13)
                        $button.click();
                });
            });
        }

        function autoPost($control, postUrl) {
            if ($control.parents(".globaleauthentificationwpc")[0]) {
                window.location.href = postUrl.replace("https%3a%2f%2fteleservices.dijon.fr%2fPages%2fconnexion%2ffinalisation.aspx", encodeURI(window.location.href));
            }
            else {
                $control.html('<div class="inprogress"><h2>Identification réussie</h2><img src="../images/form/loading-icon.gif"><p class="connexion">Connexion en cours.</p><div style="display:none" class="finalize"><a href="/_layouts/15/Authenticate.aspx">Pour finaliser votre connexion, cliquez ici</a> </div><iframe style="display:none" src="' + postUrl + '"></iframe></div>');

                $("div.finalize", $control).delay(2000).fadeIn();
                setTimeout(function () {
                    location.reload();
                }, 4000);
            }
        }


        //[Obsolete]
        function WsAuthentificationServiceCall($control) {
            var mail = $('.mail', $control).val();
            var pwd = $('.pwd', $control).val();

            var $error = $('.error', $control)

            if (!mail) {
                $error.html("L'adresse e-mail n'est pas renseigné.");
                return;
            }

            if (!pwd) {
                $error.html("Le mot de passe n'est pas renseigné.");
                return;
            }

            $.ajax({
                type: "POST",
                url: '/_LAYOUTS/WebServicesAuthentification/WsAuthentification.asmx/Check',
                data: "{'adressMail':'" + mail + "','pwd':'" + pwd + "'}",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (msg) {
                    var data = msg.d;
                    if (data.Statut == "0") {
                        $error.html(data.Message);
                    }

                    if (data.Statut == "1") {
                        autoPost($control, data.Url);
                    }

                },
                error: function (e) {
                    alert("Error " + e.responseText);
                }
            });
        }

        function initItemConsult(divClass) {
            $(divClass).each(function () {
                var $span = $(this);
                if (!$span.hasClass('delimiter')) {
                    if (!$span.find('span.descriptif').text()) {
                        $span.css('display', 'none');
                        $span.prev('.delimiter').css('display', 'none');
                    }
                }
            });
        }

        function initConsultControlImpl() {
            initItemConsult('.consult-subtitle > span');
            initItemConsult('.consult-content > span');
        }

        function initFontAwesomeClick() {
            $('.fa').click(function () {
                $(this).parent().prev('input.vdd-base-button,.btn-dijon').click();
                if ($(this).parent().prev('input.vdd-base-button,.btn-dijon').length === 0)
                    $(this).parent().prev().children('.btn-dijon-label').click();
            });
        }

        function initParameterizedFooterAction() {
            $('.parameterized.selectable-footer-action').each(function () {
                var $container = $(this);
                var $button = $container.children('.vdd-base-button,.btn-dijon');
                var $params = $container.children('.parameters');
                $params.hide().removeClass('hidden');

                $button.click(function () {
                    $params.closest('.executors').find('.parameters').slideUp('fast');
                    if (!$params.is(':visible'))
                        $params.slideToggle('fast');
                    return false;
                });

                var $cancelButton = $params.children('.cancel');
                $cancelButton.click(function () {
                    $params.slideUp('fast');
                    return false;
                });
            });
        }

        function initImagePicker() {
            $('.imagepickerbox').each(function () {
                root = $(this);
                $('span.search-action', root).click(function () {
                    var USERNAME = 'camilledarnet';
                    var API_KEY = '85c03a53840f50b69f14';
                    var URL = "https://pixabay.com/api/?lang=fr&username=" + USERNAME + "&key=" + API_KEY + "&q=" + encodeURIComponent($("input.search-box", root).val());

                    $.getJSON(URL, function (data) {
                        if (parseInt(data.totalHits) > 0) {
                            result = $('ul.result', root);
                            result.empty();
                            $.each(data.hits, function (i, hit) {
                                var r = calculateAspectRatioFit(hit.webformatWidth, hit.webformatHeight, 150, 150)
                                li = $('<li>');
                                li.css('background-image', 'url("' + hit.webformatURL + '")');
                                li.css('background-size', r.width + 'px ' + r.height + 'px');
                                li.attr('rel', "RemoteHttpTemporaryFile;" + hit.webformatURL);
                                li.click(function () {
                                    cli = $(this);
                                    cli.siblings(".selected").toggleClass('selected');
                                    $("input.search-result", root).val(cli.attr("rel"));
                                    $(".display", root).css('background-image', cli.css('background-image')).css('background-size', cli.css('background-size'));
                                    cli.toggleClass('selected');
                                    $('.display', root)
                                });
                                result.append(li);
                            });
                        }
                    });
                });
            });
        }

        function initCKEditor() {
            $('.ckeditorbox').each(function () {
                var $control = $(this);
                var $src = $('.editor-data', $control);
                var $edit = $('.editor', $control);

                if ($edit[0] != null) {
                    globalThis.CKEDITORS[$edit[0].id].setData($src.val());

                    globalThis.CKEDITORS[$edit[0].id].model.document.on('change:data', () => {
                        console.log('change' + globalThis.CKEDITORS[$edit[0].id].getData());
                        $src.val(globalThis.CKEDITORS[$edit[0].id].getData());
                    });
                }
            });
        }

        function initTabBar() {
            $('ul.tab-head li, ul.tab-foot li').click(function () {
                var $current = $(this);
                var id = $current.data("tab");
                $('.tab-bar input[data-tab="' + id + '"]').click();

            });
        }

        function initSearch() {
            $('div.search-engine').each(function () {
                var $control = $(this);
                var $input = $('input', $control);
                var $button = $('.trigg-search', $control);

                function send() {
                    var val = $input.val();
                    var url = $control.attr("action") + val;
                    window.location = url;

                }

                $button.click(function (event) {
                    event.preventDefault();
                    send();
                });
                $input.keyup(function (event) {
                    if (event.keyCode == 13) {
                        event.preventDefault();
                        send();
                    }
                });
            });
        }

        function calculateAspectRatioFit(srcWidth, srcHeight, maxWidth, maxHeight) {

            var ratio = Math.max(maxWidth / srcWidth, maxHeight / srcHeight);

            return { width: srcWidth * ratio, height: srcHeight * ratio, marginH: srcWidth - srcWidth * ratio, marginV: srcWidth - srcWidth * ratio };
        }

        function initDiaryAppointmentsControls() {
            $(".diarycontrol").each(function () {
                var $control = $(this);
                var $calendar = $control.find(".weeks-calendar");
                if ($calendar.length > 0) {
                    var multiple = $control.data("multiple");
                    var $tables = $calendar.find(".week");
                    var $as = $control.find("ul li a");
                    for (var i = 0; i < $tables.length; ++i) {
                        var tid = $control.data("bindingId") + "-w" + i;
                        $tables.eq(i).attr("id", tid);
                        $as.eq(i).attr("href", "#" + tid);
                    }

                    var appHeight = $calendar.find(".hours div").eq(1).innerHeight(); // px

                    $calendar.find(".appointments").each(function () { // chaque jour
                        var z = 1000;
                        $(this).find(".hour-blank").each(function () {
                            $(this).css({ "z-index": z-- });
                        });
                    });

                    $calendar.find(".appointment").each(function () {
                        var $app = $(this);
                        var start = $app.data("start").split(":"); // hh:mm
                        var end = $app.data("end").split(":");
                        var duration = end[0] - start[0] + (end[1] - start[1]) / 60;
                        // table-cell : height auto. Pour activer la durée, décommenter au dessus et remplacer .appointment display table cell par display block
                        // Cela empêche l'affichage correct des groupes parallèles (rdv concurrent/simultanés)
                        $app.css({ height: (appHeight * duration) + "px", "line-height": (appHeight * duration) + "px" });
                    });

                    // data binding
                    var $select = $control.find(".appid-cb");
                    $calendar.on("click", ".appointment", function () {
                        var $app = $(this);

                        if ($app.hasClass("close"))
                            return;

                        if (!multiple)
                            $control.find(".appointment.current").removeClass("current");


                        var selected = $app.hasClass("current");
                        $app.toggleClass("current", !selected);

                        if (multiple) {
                            var ids = $control.find(".appointment.current").map(function () {
                                //return this.dataset.appid; // IE11+
                                return $(this).data("appid");
                            }).get();

                            $control.find(".appid-cb input").each(function () {
                                var $check = $(this);
                                $check.prop("checked", ids.indexOf($check.val()) >= 0);
                            });
                        }
                        else
                            $select.val($app.data("appid")).change();
                    });
                }

                var $filter = $control.find(".filter-calendar");
                if ($filter.length > 0) {
                    multiple = $control.data("multiple");
                    $select = $control.find(".appid-cb");

                    $datas = $filter.find(".filter-data");
                    $datas.hide();
                    $selector = $filter.find(".filter-day");

                    var datas = $('option', $datas).clone();

                    $selector.change(function () {
                        $select.val("-- Choisir --").change();
                        var val = $(this).val();
                        $datas.empty();
                        datas.filter(function (idx, el) {
                            return $(el).val() === '-- Choisir--' || $(el).attr('rel') === val;
                        }).appendTo($datas);
                        $datas.show();
                    });
                    // data binding
                    $datas.change(function () {
                        var val = $(this).val();

                        $select.val(val).change();
                    });

                }
                var $filterRadio = $control.find(".filter-radio-calendar");

                if ($filterRadio.length > 0) {
                    multiple = $control.data("multiple");
                    $select = $control.find(".appid-cb");
                    var nullValue = '-- Choisir--';
                    $(".filter-hour", $filterRadio).hide();
                    $("[name='day']", $filterRadio).change(function (e) {
                        $(".filter-hour", $filterRadio).show();
                        $(".filter-hour .line", $filterRadio).hide();
                        $(".filter-hour .line[rel='" + this.value + "']", $filterRadio).show();
                        $('[name=hour]:checked', $filterRadio).prop('checked', false);
                        $select.val(nullValue);
                    });

                    $("[name='hour']", $filterRadio).change(function (e) {
                        $select.val(this.value);
                    });

                }

                $(".filter-day span.line").click(function () {
                    $(this).children().filter(':checked').parent().after($(".filter-hour"));
                });

                if (multiple) {
                    $('.root-week').each(function () {
                        var $root = $(this);
                        $root.append('<div class="divCheckbox"><input type="checkbox" class="myCheckbox" /><span class="spanCheck">Cocher tous les créneaux</span></div>');
                        $('.myCheckbox', $root).change(function () {
                            if (this.checked) {
                                $(".appointment:not(.current):not(.close)", $root).click();
                                $(".spanCheck", $root).text("Décocher tous les créneaux");
                            }
                            else {
                                $(".appointment.current:not(.close)", $root).click();
                                $(".spanCheck").text("Cocher tous les créneaux");
                            }
                        });
                    });
                }

            });

        }

        function initAppointmentsControls() {
            $(".agendacontrol").each(function () {
                var $control = $(this);
                var $calendar = $control.find(".weeks-calendar");
                if ($calendar.length > 0) {
                    var multiple = $control.data("multiple");
                    var $tables = $calendar.find(".week");
                    var $as = $control.find("ul li a");
                    for (var i = 0; i < $tables.length; ++i) {
                        var tid = $control.data("bindingId") + "-w" + i;
                        $tables.eq(i).attr("id", tid);
                        $as.eq(i).attr("href", "#" + tid);
                    }

                    var appHeight = $calendar.find(".hours div").eq(1).outerHeight(); // px

                    $calendar.find(".appointments").each(function () { // chaque jour
                        var z = 1000;
                        $(this).find(".hour-blank").each(function () {
                            $(this).css({ "z-index": z-- });
                        });
                    });

                    $calendar.find(".appointment").each(function () {
                        var $app = $(this);
                        var start = $app.data("start").split(":"); // hh:mm
                        var end = $app.data("end").split(":");
                        var duration = end[0] - start[0] + (end[1] - start[1]) / 60;
                        // table-cell : height auto. Pour activer la durée, décommenter au dessus et remplacer .appointment display table cell par display block
                        // Cela empêche l'affichage correct des groupes parallèles (rdv concurrent/simultanés)
                        $app.css({ top: (start[1] / 60 * appHeight) + "px", height: (appHeight * duration) + "px" });
                    });

                    // data binding
                    var $select = $control.find(".appid-cb");
                    $calendar.on("click", ".appointment", function () {
                        var $app = $(this);

                        if ($app.hasClass("close"))
                            return;

                        if (!multiple)
                            $control.find(".appointment.current").removeClass("current");


                        var selected = $app.hasClass("current");
                        $app.toggleClass("current", !selected);

                        if (multiple) {
                            var ids = $control.find(".appointment.current").map(function () {
                                //return this.dataset.appid; // IE11+
                                return $(this).data("appid");
                            }).get();

                            $control.find(".appid-cb input").each(function () {
                                var $check = $(this);
                                $check.prop("checked", ids.indexOf($check.val()) >= 0);
                            });
                        }
                        else
                            $select.val($app.data("appid")).change();
                    });
                }

                var $filter = $control.find(".filter-calendar");
                if ($filter.length > 0) {
                    var multiple = $control.data("multiple");
                    var $select = $control.find(".appid-cb");

                    $datas = $filter.find(".filter-data");
                    $datas.hide();
                    $selector = $filter.find(".filter-day");

                    var datas = $('option', $datas).clone();

                    $selector.change(function () {
                        $select.val("-- Choisir --").change();
                        var val = $(this).val();
                        $datas.empty();
                        datas.filter(function (idx, el) {
                            return $(el).val() === '-- Choisir--' || $(el).attr('rel') === val;
                        }).appendTo($datas);
                        $datas.show();
                    });
                    // data binding
                    $datas.change(function () {
                        var val = $(this).val();

                        $select.val(val).change();
                    });

                }
                var $filterRadio = $control.find(".filter-radio-calendar");

                if ($filterRadio.length > 0) {
                    var multiple = $control.data("multiple");
                    var $select = $control.find(".appid-cb");
                    var nullValue = '-- Choisir--';
                    $(".filter-hour", $filterRadio).hide();
                    $("[name='day']", $filterRadio).change(function (e) {
                        $(".filter-hour", $filterRadio).show();
                        $(".filter-hour .line", $filterRadio).hide();
                        $(".filter-hour .line[rel='" + this.value + "']", $filterRadio).show();
                        $('[name=hour]:checked', $filterRadio).prop('checked', false);
                        $select.val(nullValue);
                    });

                    $("[name='hour']", $filterRadio).change(function (e) {
                        $select.val(this.value);
                    });

                }

                if (multiple) {
                    $('.root-week').each(function () {
                        var $root = $(this);
                        $root.append('<div class="divCheckbox"><input type="checkbox" class="myCheckbox" /><span class="spanCheck">Cocher tous les créneaux</span></div>');
                        $('.myCheckbox', $root).change(function () {
                            if (this.checked) {
                                $(".appointment:not(.current):not(.close)", $root).click();
                                $(".spanCheck", $root).text("Décocher tous les créneaux");
                            }
                            else {
                                $(".appointment.current:not(.close)", $root).click();
                                $(".spanCheck").text("Cocher tous les créneaux");
                            }
                        });
                    });
                }

            });
        }

        function initSmartMultipleSelectBox() {
            $(".smartmultipleselectbox select").each(function () {
                $(this).multi({
                    'enable_search': true,
                    'search_placeholder': 'Recherche...',
                    'to_select_title': 'Eléments à sélectionner',
                    'selected_title': 'Eléments sélectionnés'
                });
            });

            $(".smartmultipleselectbox").each(function () {
                var $root = $(this);
                var url = $root.data('administration-url');
                if (url) {
                    var $a = $("<a />", {
                        class: 'edit-list',
                        title: 'Gérer les éléments de la liste',
                        href: url
                    });
                    var $img = $("<i class='fa fa-cog' />");
                    $a.append($img);

                    $a.click(function (event) {
                        var wrapper = displayPopup(url, false);
                        $(".popup-close", $(wrapper)).click(function () {
                            $(".refresh.vdd-base-button", $root).click();
                        });
                        event.preventDefault();
                    });

                    $(".multi-wrapper .search-input", $root).after($a);
                }

            });

        }

        function initCombobox() {
            $(".combobox").each(function () {
                var $root = $(this);
                var url = $root.data('administration-url');
                if (url) {
                    var $a = $("<a />", {
                        class: 'edit-list',
                        title: 'Gérer les éléments de la liste',
                        href: url
                    });
                    var $img = $("<i class='edit-list-icon fal fa-cog' />");
                    $a.append($img);

                    $a.click(function (event) {
                        var wrapper = displayPopup(url, false);
                        $(".popup-close", $(wrapper)).click(function () {
                            $(".refresh", $root).click();
                        });
                        event.preventDefault();
                    });

                    $(".custom-combobox .custom-combobox-input", $root).after($a);
                }

            });

        }

        function initWarningAccount() {
            $(".account-mail-warning").each(function () {
                var h = "+=" + $(this).height() + "px";
                $(this).animate({ bottom: h }, 1500);
                $("footer").animate({ bottom: h }, 1500);
                $("#skipToContent").animate({ marginBottom: h }, 1500);
            });
        }
        function initServiceHeader() {
            var $root = $('.cygnus');
            if ($root[0]) {
                var $title = $(".eserviceheader .title", $root);
                if ($title.html() === '') {
                    var $h2Title = $(".root-dijon.content h2:first", $root);
                    $title.html($h2Title.html());
                }
            }

        }

        function initSmartPeopleEditorbox() {
            $('.vdd-form .smartpeopleeditorbox ').each(function () {
                var $this = $(this);
                var $result = $(".selected-box", $this);
                var $search = $(".search-box", $this);
                var $postback = $(".post-back-btn", $this);
                var searchEmployeeOnly = $this.data("search-employee-only");

                $search.focus(function () {
                    $(this).autocomplete({
                        source: function (request, response) {
                            $result.val("");
                            var data = JSON.stringify({
                                'Key': "9DB1F04F-6D36-4049-BD83-9CA15B48A5E6",
                                'Pattern': request.term,
                                'EmployeeOnly': searchEmployeeOnly
                            });

                            $.ajax({
                                type: 'POST',
                                url: window.Dijon.Utils.GetWsBaseUrl() + '/Common/DirectoryService.svc/SearchPeople',
                                data: data,
                                contentType: 'application/json',
                                dataType: 'json',
                                success: function (result) {
                                    var tmp = result.People.map(function (current) {
                                        return {
                                            label: current.DisplayName,
                                            value: current.LoginName
                                        };
                                    });
                                    response(tmp);
                                },
                                error: function (result, statut, error) {
                                    alert(error);
                                }
                            });
                        },
                        minLength: 2,
                        select: function (event, ui) {
                            $result.val(ui.item.value);
                            $search.val(ui.item.label);
                            $postback.click();
                            return false;
                        },
                    });
                });
            });

            $('.vdd-form .smartpeopleeditorbox').each(function () {
                var $root = $(this);
                var $input = $("input", $root);
                var $select = $("select", $root);
                var val = $input.val();
                if (val) {
                    var login = val.split('@')[0];
                    var display = val.split('@')[1];
                    $select.append('<option value="' + login + '">' + display + '</option>');

                }

            });

            $.widget("custom.combobox", {
                _create: function () {
                    this.wrapper = $("<span>")
                        .addClass("custom-combobox")
                        .insertAfter(this.element);

                    this.element.hide();
                    this._createAutocomplete();
                },

                _createAutocomplete: function () {
                    var selected = this.element.children(":selected"),
                        value = selected.val() ? selected.text() : "";

                    this.input = $("<input>")
                        .appendTo(this.wrapper)
                        .val(value)
                        .attr("title", "")
                        .addClass("custom-combobox-input ui-widget ui-widget-content ui-state-default ui-corner-left")
                        .autocomplete({
                            delay: 0,
                            minLength: 0,
                            source: $.proxy(this, "_source")
                        })
                        .tooltip({
                            classes: {
                                "ui-tooltip": "ui-state-highlight"
                            }
                        });

                    this._on(this.input, {
                        autocompleteselect: function (event, ui) {
                            ui.item.option.selected = true;
                            this._trigger("select", event, {
                                item: ui.item.option
                            });
                        },

                        autocompletechange: "_removeIfInvalid"
                    });
                },

                _createShowAllButton: function () {
                    var input = this.input,
                        wasOpen = false;

                    $("<a>")
                        .attr("tabIndex", -1)
                        .attr("title", "Show All Items")
                        .tooltip()
                        .appendTo(this.wrapper)
                        .button({
                            icons: {
                                primary: "ui-icon-triangle-1-s"
                            },
                            text: false
                        })
                        .removeClass("ui-corner-all")
                        .addClass("custom-combobox-toggle ui-corner-right")
                        .on("mousedown", function () {
                            wasOpen = input.autocomplete("widget").is(":visible");
                        })
                        .on("click", function () {
                            input.trigger("focus");

                            // Close if already visible
                            if (wasOpen) {
                                return;
                            }

                            // Pass empty string as value to search for, displaying all results
                            input.autocomplete("search", "");
                        });
                },

                _source: function (request, response) {

                    var data = JSON.stringify({
                        'key': "9DB1F04F-6D36-4049-BD83-9CA15B48A5E6",
                        'Pattern': request.term,
                    });

                    $.ajax({
                        type: 'POST',
                        url: window.Dijon.Utils.GetWsBaseUrl() + '/Common/DirectoryService.svc/SearchPeople',
                        data: data,
                        contentType: 'application/json',
                        dataType: 'json',
                        success: function (result) {
                            response(result.people.map(function (current) {

                                return {
                                    label: current.DisplayName,
                                    value: current.Key,
                                    option: this
                                };
                            }));
                        },
                        error: function (result, statut, error) {
                            alert(error);
                        }
                    });
                },

                _removeIfInvalid: function (event, ui) {

                    // Selected an item, nothing to do
                    if (ui.item) {
                        return;
                    }

                    // Search for a match (case-insensitive)
                    var value = this.input.val(),
                        valueLowerCase = value.toLowerCase(),
                        valid = false;
                    this.element.children("option").each(function () {
                        if ($(this).text().toLowerCase() === valueLowerCase) {
                            this.selected = valid = true;
                            return false;
                        }
                    });

                    // Found a match, nothing to do
                    if (valid) {
                        return;
                    }

                    // Remove invalid value
                    this.input
                        .val("")
                        .attr("title", " Impossible de trouver :'" + value + "'dans l'annuaire")
                        .tooltip("open");
                    this.element.val("");
                    this._delay(function () {
                        this.input.tooltip("close").attr("title", "");
                    }, 2500);
                    this.input.autocomplete("instance").term = "";
                },

                _destroy: function () {
                    this.wrapper.remove();
                    this.element.show();
                }
            });
        }

        function initQuestionHelper() {
            $('.vdd-form .helper .question').each(function () {
                var $this = $(this);
                $this.tooltip({
                    content: function () {
                        return $this.parent().find('.helper-contents').html();
                    },

                    position: {
                        my: "right+50 bottom-20",
                        at: "center top",
                        using: function (position, feedback) {
                            $(this).css(position);
                            $('<div>')
                                .addClass('arrow')
                                .addClass(feedback.vertical)
                                .addClass(feedback.horizontal)
                                .appendTo(this);
                        }
                    }
                }).click(function () {
                    $this.parent().toggleClass("active");
                });
            });

            $('.vdd-form .helper .helper-contents:not(:empty)').parent().css('visibility', 'visible');
        }

        function initQuestionHelperExpandable() {
            $('.cygnus .vdd-form .helper .question').each(function () {
                var $this = $(this);

                $this.click(function () {
                    $(".helper-contents", $this.parent()).addClass("display");
                    $("body").css("overflow", "hidden");
                });
            });
            $('.cygnus .vdd-form .helper .helper-contents').each(function () {
                var $this = $(this);
                $this.click(function () {
                    $this.removeClass("display");
                    $("body").css("overflow", "auto");
                });
            });
            $('.cygnus .vdd-form .helperExt .question').each(function () {
                var $this = $(this);

                $this.click(function () {
                    $(".helper-contents", $this.parent()).addClass("display");
                    $("body").css("overflow", "hidden");
                });
            });
            $('.cygnus .vdd-form .helperExt .helper-contents').each(function () {
                var $this = $(this);
                $this.click(function () {
                    $this.removeClass("display");
                    $("body").css("overflow", "auto");
                });
            });
        }

        function InitExtendableHelper() {
            var $root = $('.cygnus');
            if ($root[0]) {
                var $webPart = $(".vdd-form", $root);

                if ($webPart[0]) {
                    var $helpers = $(".form-group .form-group-helper.to-expand", $webPart);

                    $helpers.each(function () {

                        var $t = $(this);

                        var $modal = $(".form-group-helper-expanded", $t.parent());

                        if ($modal[0]) {
                            $t.click(function () {
                                $("body").css("overflow", "hidden");
                                $modal.addClass("display");
                            });
                        }
                    });
                    var $helpersExtended = $(".form-group .form-group-helper-expanded", $webPart);
                    $helpersExtended.each(function () {
                        var $t = $(this);
                        $t.click(function () {
                            $("body").css("overflow", "auto");
                            $t.removeClass("display");
                        });
                    });
                }
            }
        }

        function initOpeningPopUp() {
            //$("header .myDijonSSO.account.anonymus a").click(function () {
            //    $(".connect").show();
            //    $(".connect input").removeAttr('disabled');
            //    return false;
            //});
        }

        function initConnectionPopUp() {
            var $popUp = $(".connect");
            var $connectionButton = $(".connection a", $popUp);
            var $buttonClose = $(".connect-button-close", $popUp);

            $connectionButton.click(function () {
                var $loader = $(".loader", $popUp);
                $loader.show();
                var $button = $(this);
                $button.addClass("remove");

                var defaultConnectionUrl = $connectionButton.attr('href');
                var login = $(".connect-body-login input", $popUp).val();
                var pwd = $(".connect-body-password input", $popUp).val();
                var $error = $(".connect-body .error", $popUp)
                var urlToCall = $(this).data('url');


                var data = JSON.stringify({
                    'Key': "C47F923A-5C60-49AF-996B-0CF4F112B029",
                    'Mail': login,
                    'Password': pwd,
                    'ReturnUrl': defaultConnectionUrl
                });

                //Remplacer url par ça :
                $.ajax({
                    type: 'POST',
                    url: urlToCall,
                    data: data,
                    contentType: 'application/json',
                    dataType: 'json',
                    success: function (data) {
                        if (data.StatusMessages[0].Key != "000") {
                            $error.html(data.StatusMessages[0].Value);
                            $error.show();
                        }
                        else {
                            window.location.href = data.AuthenticationUrl;
                        }
                        $loader.hide();
                        $button.removeClass("remove");
                    },
                    error: function (result, statut, error) {
                        alert(error);
                        $loader.hide();
                        $button.removeClass("remove");
                    }
                });
                return false;
            });

            $buttonClose.click(function () {
                $("input", $popUp).attr('disabled', 'disabled');
                $popUp.hide();
            });

            //click a l'exterieur de la popup
            $popUp.click(function (event) {
                if (!$(event.target).closest('.connect-content').length) {
                    $("input", $popUp).attr('disabled', 'disabled');

                    $popUp.hide();
                }
            });

            //Clic bouton entrée
            var $button = $(".vdd-form.connexionwpc .authentification .footer input");
            $(".vdd-form.connexionwpc .authentification input").keyup(function (event) {
                if (event.keyCode == 13) {
                    $button.click();
                }
            });

            //Clic bouton entrée
            var $buttonPopUp = $(".connect .connect-content .connect-footer .connection a");
            $(".connect .connect-content .connect-body input").keyup(function (event) {
                if (event.keyCode == 13) {
                    $buttonPopUp.click();
                }
            });
        }

        function initMobileMenuNavigation() {
            $("header .header .open-mobile-navigation").click(function () {
                $("nav.mobile-nav").addClass("navigation");
            });

            $("nav.mobile-nav .close-navigation").click(function () {
                $("nav.mobile-nav").removeClass("navigation");
            });
        }

        this.initialize = function () {
            $form = $('.vdd-form');
            initAutocompleteCombos();

            if (Dijon.ajax !== true) {
                initUploads();
            }

            var isCygnus = $(".cygnus")[0];

            initNumberBoxesFormatChecker();
            initDatepickers();
            initAdvancedStyles();
            initSmartAdresses();
            initSummary();
            initOneToMany();
            initPopups();
            initExpandablesGroupingResults();
            initClientSelection();
            initPlaceholders();
            initMap();
            initButton();
            initConfirmableButton();
            initFullSizeIframeDisplay();
            initAuthentification();
            initConsultControlImpl();
            initFontAwesomeClick();
            initParameterizedFooterAction();
            initImagePicker();
            initCKEditor();
            initSearch();
            initAppointmentsControls();
            initDiaryAppointmentsControls();
            initSmartMultipleSelectBox();
            initFilterMailer();
            initTabBar();
            initServiceHeader();
            InitExtendableHelper();
            initOpeningPopUp();
            initConnectionPopUp();
            initSmartPeopleEditorbox();
            initCombobox();
            initMobileMenuNavigation();

            if (isCygnus) {
                initQuestionHelperExpandable();
            }
            else {
                initQuestionHelper();
            }
        }
    }

    function initFilterMailer() {
        $('.combobox-filter-button').on('change', function () {
            if ($('.combobox-filter-button').children().first().val() == '-1') {
                $('.mail-template-button').each(function () { $(this).attr('href', $(this).attr('href').replace(/configId=(.*)/, "configId=")) });
            }
            else {
                $('.mail-template-button').each(function () { $(this).attr('href', $(this).attr('href').replace(/configId=(.*)/, "configId=" + $('.combobox-filter-button').children().first().val())); $(this).disabled = false; });
            }
        });
        if ($('.combobox-filter-button').children().first().val() == '-1') {
            $('.mail-template-button').each(function () { $(this).attr('href', $(this).attr('href').replace(/configId=(.*)/, "configId=")) });
        }
        else {
            $('.mail-template-button').each(function () {
                $(this).attr('href', $(this).attr('href') + $('.combobox-filter-button').children().first().val());
            });
        }
    }

    function Pagination() {
        function displayCurrentItems(Selector, CurrentPage, ElementPerPage) {
            var min = (CurrentPage - 1) * ElementPerPage;
            var max = CurrentPage * ElementPerPage;
            $(Selector).hide();
            $(Selector).slice(min, max).show();
        }

        this.initialize = function () {
            $('.Client-Side-Pagination .pagination-settings').each(function () {
                var $control = $(this);
                var obj = jQuery.parseJSON($control.text());

                var nbElement = $(obj.selector).length;

                var element = $control.parent().find("ul");

                var options = {
                    bootstrapMajorVersion: 3,
                    currentPage: obj.CurrentPage,
                    numberOfPages: 10,
                    totalPages: Math.ceil(nbElement / obj.ElementPerPage),
                    alignment: 'center',
                    onPageClicked: function (e, originalEvent, type, page) {
                        displayCurrentItems(obj.selector, page, obj.ElementPerPage);
                    },
                    tooltipTitles: function (type, page, current) {
                        switch (type) {
                            case "prev":
                                return "Page précédente";
                            case "next":
                                return "Page suivante";
                            case "page":
                                return "Page n° " + page + " ";
                        }
                    },
                    shouldShowPage: function (type, page, current) {
                        switch (type) {
                            case "first":
                            case "last":
                                return false;
                            default:
                                return true;
                        }
                    },
                    itemTexts: function (type, page, current) {
                        switch (type) {
                            case "prev":
                                return "&laquo;";
                            case "next":
                                return "&raquo;";
                            case "page":
                                return "" + page;
                        }
                    }
                };

                element.bootstrapPaginator(options);
                displayCurrentItems(obj.selector, obj.CurrentPage, obj.ElementPerPage);
            });
        };
    }

    window.PeopleEditorBox = {
        OnValueChanged: function (id) {
            var $entityData = $('#' + id + " .ms-entity-resolved");
            if ($entityData.length > 0) {
                var $formentry = $entityData.closest(".singlepeopleeditorbox");
                var $content = $entityData.children('span');

                var $textBox = $formentry.find(".textBoxValue");
                $textBox.val($entityData.attr("title") + ";#" + $content.text());
            }
        }
    };

    window.Dijon = new DijonConstructor();

    Dijon.Utils =
    {
        GetCdnUrl: function () {
            var baseUrl = $('div.vdd-form').data('cdn-url');
            return baseUrl;
        },
        GetWsBaseUrl: function () {
            var baseUrl = $('div.vdd-form').data('ws-url');
            return baseUrl;
        },
        GetWsContextUrl: function () {
            var baseUrl = $('div.vdd-form').data('ws-context-url');
            return baseUrl;
        },
        GetApiKey: function () {
            var baseUrl = $('div.vdd-form').data('ws-api-key');
            return baseUrl;
        },
        GetHeader: function () {
            return { 'x-gravitee-api-key': Dijon.Utils.GetApiKey() };
        },
        parseUrl: function parseUrl(url) {
            var a = document.createElement('a');
            a.href = url;
            return a;
        },
        parseDateTime: function (str) {
            if ((str || null) == null)
                return null;

            var matches = str.match(/([0-9]{1,2})\/([0-9]{1,2})\/([0-9]{4})( ([0-9]{1,2}):([0-9]{1,2}))?/);
            return new Date(parseInt(matches[3]), parseInt(matches[2]) - 1, parseInt(matches[1]), parseInt(matches[5]), parseInt(matches[6]));
        },
        getUrlParams: function () {
            var query = location.search.substr(1);
            var data = query.split("&");
            var result = {};

            for (var i = 0; i < data.length; ++i) {
                var item = data[i].split("=");
                result[decodeURIComponent(item[0])] = decodeURIComponent(item[1]);
            }

            return result;
        },
        callFunctionByName: function (functionName) {
            var args = Array.prototype.slice.call(arguments, 1);
            var namespaces = functionName.split('.');
            var func = namespaces.pop();
            var context = window;

            for (var i = 0; i < namespaces.length; i++) {
                context = context[namespaces[i]];
            }

            if (context[func]) {
                return context[func].apply(this, args);
            }
        },
        boolValue: function (strOrBool) {
            if (typeof strOrBool == 'undefined' || strOrBool == null) {
                return false;
            }

            if (typeof strOrBool == 'boolean') {
                return strOrBool;
            }

            var str = strOrBool.toString().toLowerCase();

            return str === '1' || str === 'true';
        },
        ensureArray: function (obj) {
            return typeof obj === 'undefined' ? [] : (typeof obj.length === 'undefined' || typeof obj === 'string' ? [obj] : obj);
        },
        postData: function (url, data) {
            var form = document.createElement("form");
            form.setAttribute("method", "post");
            form.setAttribute("action", url);

            for (var key in data) {
                var val = data[key];

                if (typeof val !== "undefined") {
                    var input = document.createElement("input");
                    input.setAttribute("type", "hidden");
                    input.setAttribute("name", key);
                    input.setAttribute("value", val);
                    form.appendChild(input);
                }
            }

            document.body.appendChild(form);
            form.submit();
        },
        iframeAutoHeight: function (id) {
            var $iFrame = $('#' + id);
            $iFrame.height($iFrame.contents().find("html").height() + 20);
        }
    };

    var pagination = new Pagination;
    Dijon.addInitFunc(pagination.initialize);

    $(Dijon.initialize);

})(jQuery);

(function ($) {
    'use strict';

    var arrayForTranslation = {};
    arrayForTranslation['Contenant'] = 'contenant la valeur renseignée';
    arrayForTranslation['Équivalent(e)'] = 'équivalent(e) à la valeur renseignée';
    arrayForTranslation['Non renseigné(e)'] = 'étant non renseigné(e)';
    arrayForTranslation['Postérieur(e)'] = 'postérieur(e) à la valeur renseignée';
    arrayForTranslation['Antérieur(e)'] = 'antérieur(e) à la valeur renseignée';
    arrayForTranslation['Différent(e)'] = 'différent(es) des valeurs choisies';
    arrayForTranslation['Ou'] = 'ayant au moins une des valeurs choisies';
    arrayForTranslation['Et'] = 'ayant toutes les valeurs choisies';
    arrayForTranslation['Entre'] = 'contenu(e) dans l\'intervalle renseigné';

    var arrayForMethods = {};
    arrayForMethods['Contains'] = 'Contenant';
    arrayForMethods['Equal'] = 'Équivalent(e)';
    arrayForMethods['IsNull'] = 'Non renseigné(e)';
    arrayForMethods['Greater'] = 'Postérieur(e)';
    arrayForMethods['Lesser'] = 'Antérieur(e)';
    arrayForMethods['Not'] = 'Différent(e)';
    arrayForMethods['Or'] = 'Ou';
    arrayForMethods['And'] = 'Et';
    arrayForMethods['InBetween'] = 'Entre';
    arrayForMethods['Undefined'] = '-1';

    $(function () {
        $('.fieldsetfilterconfiguration > legend, .fieldsetfilterresult > legend').click(function () {
            $(this).parent().find('.scrollpanel').slideToggle("slow");
        });

        $('.rangecontainercontrol select').change(function () {
            var $this = $(this);
            var $rangeContainer = $this.closest('.rangecontainercontrol');

            var inputMax = $rangeContainer.find('.Max').find('input');
            var inputMin = $rangeContainer.find('.Min').find('input');
            var datePickerMax = $rangeContainer.find('.Max').find('.datepickerwrap');
            var datePickerMin = $rangeContainer.find('.Min').find('.datepickerwrap');
            var inputFieldsetName = $rangeContainer.find('fieldset legend');
            var labelFilterInfo = $rangeContainer.find('.labelfilterinfo');

            inputMax.prop('disabled', $this.val() === arrayForMethods['IsNull']);
            inputMin.prop('disabled', $this.val() === arrayForMethods['IsNull']);
            datePickerMax.show();
            datePickerMin.show();

            if ($this.val() === arrayForMethods['IsNull']) {
                datePickerMax.hide();
                datePickerMin.hide();
            }
            else if ($this.val() !== arrayForMethods['InBetween'] && $this.val() !== arrayForMethods['Undefined']) {
                inputMax.prop('disabled', true);
                datePickerMax.hide();
            }

            labelFilterInfo.text('');

            if ($this.val() !== arrayForMethods['Undefined']) {
                labelFilterInfo.text(inputFieldsetName.text() + ' ' + arrayForTranslation[$this.val()]);
            }
        });

        $('.simplecontainercontrol select').change(function () {
            var $this = $(this);
            var $simpleContainer = $this.closest('.simplecontainercontrol');
            var inputFieldsetName = $simpleContainer.find('fieldset legend');
            var labelFilterInfo = $simpleContainer.find('.labelfilterinfo');

            $simpleContainer.find('.textbox input').prop('disabled', $this.val() === arrayForMethods['IsNull']);
            $simpleContainer.find('.radiobuttonbox input').prop('disabled', $this.val() === arrayForMethods['IsNull']);

            labelFilterInfo.text('');

            if ($this.val() !== arrayForMethods['Undefined']) {
                labelFilterInfo.text(inputFieldsetName.text() + ' ' + arrayForTranslation[$this.val()]);
            }
        });

        $('.multicontainercontrol select').change(function () {
            var $this = $(this);
            var $multiContainer = $this.closest('.multicontainercontrol');
            var inputFieldsetName = $multiContainer.find('fieldset legend');
            var labelFilterInfo = $multiContainer.find('.labelfilterinfo');
            var inputCheckBoxList = $multiContainer.find('.checkboxlist input');

            inputCheckBoxList.off('click');
            inputCheckBoxList.prop('disabled', false);
            inputCheckBoxList.prop('checked', false);

            inputCheckBoxList.prop('disabled', $this.val() === arrayForMethods['IsNull']);

            if ($this.val() === arrayForMethods['Equal'] || $this.val() === arrayForMethods['Not']) {
                inputCheckBoxList.on("click", function () {
                    inputCheckBoxList.prop('checked', false);
                    $(this).prop('checked', true);
                });
            }

            labelFilterInfo.text('');

            if ($this.val() !== arrayForMethods['Undefined']) {
                labelFilterInfo.text(inputFieldsetName.text() + ' ' + arrayForTranslation[$this.val()]);
            }
        });

        $(".searchcontrolset .lvc-search .form-entry .textbox input").keyup(function (event) {
            if (event.keyCode === 13) {
                $(".searchcontrolset .lvc-search .buttons :first-child").click();
            }
        });

        window.WebForm_SaveScrollPositionSubmit = function () { };
        window.WebForm_SaveScrollPositionOnSubmit = function () { };
    });
})(jQuery);

var Base64 = (function () {
    "use strict";
    var _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";

    var _utf8_encode = function (string) {
        var utftext = "", c, n;
        string = string.replace(/\r\n/g, "\n");

        for (n = 0; n < string.length; n++) {
            c = string.charCodeAt(n);

            if (c < 128) {
                utftext += String.fromCharCode(c);
            }
            else if ((c > 127) && (c < 2048)) {
                utftext += String.fromCharCode((c >> 6) | 192);
                utftext += String.fromCharCode((c & 63) | 128);
            }
            else {
                utftext += String.fromCharCode((c >> 12) | 224);
                utftext += String.fromCharCode(((c >> 6) & 63) | 128);
                utftext += String.fromCharCode((c & 63) | 128);
            }
        }

        return utftext;
    };

    var _utf8_decode = function (utftext) {
        var string = "", i = 0, c = 0, c1 = 0, c2 = 0;

        while (i < utftext.length) {
            c = utftext.charCodeAt(i);

            if (c < 128) {
                string += String.fromCharCode(c);
                ++i;
            }
            else if ((c > 191) && (c < 224)) {
                c1 = utftext.charCodeAt(i + 1);
                string += String.fromCharCode(((c & 31) << 6) | (c1 & 63));
                i += 2;
            }
            else {
                c1 = utftext.charCodeAt(i + 1);
                c2 = utftext.charCodeAt(i + 2);
                string += String.fromCharCode(((c & 15) << 12) | ((c1 & 63) << 6) | (c2 & 63));
                i += 3;
            }
        }

        return string;
    };

    var encode = function (input) {
        var output = "", chr1, chr2, chr3, enc1, enc2, enc3, enc4, i = 0;
        input = _utf8_encode(input);

        while (i < input.length) {
            chr1 = input.charCodeAt(i++);
            chr2 = input.charCodeAt(i++);
            chr3 = input.charCodeAt(i++);

            enc1 = chr1 >> 2;
            enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
            enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
            enc4 = chr3 & 63;

            if (isNaN(chr2)) {
                enc3 = enc4 = 64;
            }
            else if (isNaN(chr3)) {
                enc4 = 64;
            }

            output += _keyStr.charAt(enc1);
            output += _keyStr.charAt(enc2);
            output += _keyStr.charAt(enc3);
            output += _keyStr.charAt(enc4);
        }

        return output;
    };

    var decode = function (input) {
        var output = "", chr1, chr2, chr3, enc1, enc2, enc3, enc4, i = 0;
        input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");

        while (i < input.length) {
            enc1 = _keyStr.indexOf(input.charAt(i++));
            enc2 = _keyStr.indexOf(input.charAt(i++));
            enc3 = _keyStr.indexOf(input.charAt(i++));
            enc4 = _keyStr.indexOf(input.charAt(i++));

            chr1 = (enc1 << 2) | (enc2 >> 4);
            chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
            chr3 = ((enc3 & 3) << 6) | enc4;

            output += String.fromCharCode(chr1);

            if (enc3 !== 64) {
                output += String.fromCharCode(chr2);
            }

            if (enc4 !== 64) {
                output += String.fromCharCode(chr3);
            }
        }

        return _utf8_decode(output);
    };

    return {
        'encode': encode,
        'decode': decode
    };
}());

function ResetScroll() {
    var oldWebForm_RestoreScrollPosition = WebForm_RestoreScrollPosition;
    WebForm_RestoreScrollPosition = (function () {
            var $byPassScrool = $("#__BYPASSSCROLLPOSITIONY");

    if ($byPassScrool.val() === "1") {
        var selector = $("#__BYPASSSCROLLPOSITIONY_SELECTOR").val();
        var y = 0; 

        if (selector !== "") {
            y = $(selector).first().offset().top;
        }

        var $yScrool = $("#__SCROLLPOSITIONY");
        $yScrool.val(y);
    }
    if (typeof WebForm_RestoreScrollPosition !== 'undefined') {
        oldWebForm_RestoreScrollPosition();
    }
    });
};

(function ($) {
    'use strict';

    $(document).ready(function () {

        $('.Counter-data').on('keyup change', function () {
            var $divcount = $(this).parent('.textcounter');

            var $divCounter = $divcount.children('.Counter-div');
            var $spanCountmax = $divcount.children('.Counter-max');
            var max = $spanCountmax.text();
            var $spanCpt = $divCounter.children('.Counter');
            var nbcar = $(this).val().length;
            var nbrc = $(this).val().split("\n").length - 1;
            var nbFilled = nbcar + nbrc;
            var txtTc = ' caractère(s) autorisé(s)';

            if ($(this).hasClass('overFlow')) {
                txtTc = ' caractère(s) conseillé(s)';
            }

            if (nbFilled > max && !($(this).hasClass('overFlow'))) {
                $(this).val($(this).val().substring(0, max));
            }
            else {
                var treste = nbFilled + "/" + max + txtTc;
                $spanCpt.text(treste);
            }
        });
    });
})(jQuery);