PageSourceSearch

https://www.gites-de-france-22-35-56.fr/lib_2/js/foncs/calendrier.js

js gites-de-france-22-35-56.fr collected 2026-10-07 13:38:52 UTC 26,838 bytes, 688 lines download raw bytes

1/* 
2 * Gestion des datepickers et des calendriers
3 */
4
5// Adrien 10/05/23 : Attention, ce fichier n'est plus utilisé sur la majorité des sites web excepté sur le compte client et le script de résa
6
7/**
8 * Fonction permettant d'initialiser 2 datepickers pour sélectionner des dates de séjour
9 */
10function initDatePickers_datesSejour(){
11    (function($){
12        //si on est sur la fiche, on a pas initialisé la langue
13        var langue = initLangueForDatePicker();
14        $.datepicker.setDefaults($.datepicker.regional[langue]);
15    })(jQuery);
16    
17    // TODO : vérifier si on a des dates de sélectionnées dans les champs input
18    // Si c'est le cas il faut lancer un verifDates directement
19
20    jQuery('#inpt_resaDateDebCal').unbind('click');
21    jQuery('#inpt_resaDateDebCal').bind('click', function (e) {
22        ouvreDatepickerDeb();
23        e.stopPropagation();
24    });
25
26    jQuery('#inpt_resaDateFinCal').unbind('click');
27    jQuery('#inpt_resaDateFinCal').bind('click', function (e) {
28        var dateArrivee = jQuery('#inpt_resaDateDebCal').val();
29        var regexDate = new RegExp("[0-9]{2}\/[0-9]{2}\/[0-9]{4}");
30        if (regexDate.test(dateArrivee)) {
31            ouvreDatepickerFin();
32        } else {
33            ouvreDatepickerDeb();
34        }
35        e.stopPropagation();
36    });
37
38    if (jQuery('#inpt_resaDateFinCal').length === 0) {
39        initInputDateDeb();
40        initInputDateFin();
41    }
42}
43
44function initInputDateDeb(){
45    var langue = initLangueForDatePicker();
46    jQuery.datepicker.setDefaults(jQuery.datepicker.regional[langue]);
47    
48    ouvreDatepickerDeb();
49    return false;
50}
51
52function ouvreDatepickerDeb(){
53    (function($){
54        var params = {
55            action: 'getPlanningDebPourDatepicker',
56            ident: $('#div_choixDates_packDivDatesTarifs').attr('data-ident')
57        };
58        if ($('.inpt_modeVte').length>0){
59            params.modeResa=$('.inpt_modeVte:checked').val();
60        }
61        //370230
62        if(window.location.href.indexOf('modeResa=G')>0){
63            params.modeResa='G';
64        }
65        if(window.location.href.indexOf('modeResa=H')>0){
66            params.modeResa='H';
67        }
68        $.ajax({
69            type: 'POST',
70            url: '/lib_2/ajax/gereCalendrier.php',
71            dataType: 'json',
72            data: params,
73            beforeSend: function(){
74                $('#div_calendrierFin').hide().removeClass('open');
75                $('#div_roueDatepickerDeb').show();
76            },
77            complete: function(){
78                $('#div_calendrierDeb').show().addClass('open');
79                $('#div_roueDatepickerDeb').hide();
80            },
81            success: function(JSONResult){
82                initDatepickerDateDeb(JSONResult);
83                jQuery('#inpt_resaDateDebCal').addClass("focus");
84                jQuery('#inpt_resaDateFinCal').removeClass("focus");
85            },
86            error: function(xhr, errorText, errorStatus){
87                $('#div_calendrierDeb').hide().removeClass('open');
88                $('#div_roueDatepickerDeb').hide();
89            }
90        });
91    })(jQuery);
92}
93
94function initInputDateFin(){
95    (function($){
96        var langue = initLangueForDatePicker();
97        $.datepicker.setDefaults($.datepicker.regional[langue]);
98
99        var dateArrivee = $('#inpt_resaDateDebCal').val();
100        var regexDate = new RegExp("[0-9]{2}\/[0-9]{2}\/[0-9]{4}");
101        if (regexDate.test(dateArrivee)) {
102            ouvreDatepickerFin();
103        } else {
104            ouvreDatepickerDeb();
105        }
106        return false;
107    })(jQuery);
108}
109
110function ouvreDatepickerFin(){
111    (function($){
112        $('#div_calendrierDeb').hide().removeClass('open');
113        var params = {
114            action: 'getPlanningFinPourDatepicker',
115            ident: $('#div_choixDates_packDivDatesTarifs').attr('data-ident'),
116            dateDeb: $('#inpt_resaDateDebCal').val()
117        };
118        if ($('.inpt_modeVte').length>0){
119            params.modeResa=$('.inpt_modeVte:checked').val();
120        }
121        if(window.location.href.indexOf('modeResa=G')>0){
122            params.modeResa='G';
123        }
124        if(window.location.href.indexOf('modeResa=H')>0){
125            params.modeResa='H';
126        }
127        $.ajax({
128            type: 'POST',
129            url: '/lib_2/ajax/gereCalendrier.php',
130            dataType: 'json',
131            data: params,
132            beforeSend: function(){    
133                $('#div_roueDatepickerFin').show();
134            },
135            complete: function(){
136                $('#div_roueDatepickerFin').hide();
137                $('#div_calendrierFin').show().addClass('open');
138            },
139            success: function(JSONResult){
140                initDatepickerDateFin(JSONResult);
141                jQuery('#inpt_resaDateDebCal').removeClass("focus");
142                jQuery('#inpt_resaDateFinCal').addClass("focus");
143            },
144            error: function(xhr, errorText, errorStatus){
145                $('#div_calendrierFin').hide().removeClass('open');
146                $('#div_roueDatepickerFin').hide();
147            }
148        });
149    })(jQuery);
150}
151
152function initDatepickerDateDeb(JSONResult){
153    (function($){
154        var date = $('#inpt_resaDateDebCal').val();
155        if ($('#inpt_resaDateDebCal').attr('data-dateposition')) {
156            date = $('#inpt_resaDateDebCal').attr('data-dateposition');
157        }
158        $('#div_datepickerDeb').datepicker('destroy');
159        $('#div_datepickerDeb').addClass('notranslate');
160        $('#div_datepickerDeb').datepicker({
161            numberOfMonths: [1, 1],
162            dateFormat: 'dd/mm/yy',
163            minDate: JSONResult.dateDeb,
164            maxDate: JSONResult.dateFin,
165            defaultDate: date,
166            beforeShowDay: function (date) {
167                // 327548
168                var objDateFin = new Date(JSONResult.dateFin.substr(6,4), JSONResult.dateFin.substr(3,2)-1, JSONResult.dateFin.substr(0,2));
169                if(date.getTime() > objDateFin.getTime()){
170                    return '';
171                }
172                return setJourDatepicker(date, JSONResult.dateDeb, JSONResult.chaineDispo, true);
173            },
174            onSelect: function (dateDeb) {
175                setInputDateDeb(dateDeb);
176            }
177        });
178    })(jQuery);
179}
180
181function initDatepickerDateFin(JSONResult){
182    (function($){
183        // La date minimale du datepicker doit correspondre à la date de début plus un jour
184        var dateDeb = $('#inpt_resaDateDebCal').val();
185        var objDateDeb = new Date(dateDeb.substr(6,4), parseInt(dateDeb.substr(3,2))-1, parseInt(dateDeb.substr(0,2))+1);
186        $("#div_datepickerFin").datepicker('destroy');
187        $('#div_datepickerFin').addClass('notranslate');
188        $("#div_datepickerFin").datepicker({
189            numberOfMonths: [1, 1],
190            dateFormat: 'dd/mm/yy',
191            minDate: objDateDeb,
192            maxDate: JSONResult.dateFin,
193            beforeShowDay: function (date) {
194                // 327548
195                var objDateFin = new Date(JSONResult.dateFin.substr(6,4), JSONResult.dateFin.substr(3,2)-1, JSONResult.dateFin.substr(0,2));
196                if(date.getTime() > objDateFin.getTime()){
197                    return '';
198                }
199                return setJourDatepicker(date, JSONResult.dateDeb, JSONResult.chaineDispo);
200            },
201            onSelect: function (dateFin) {
202                setInputDateFin(dateFin);
203                if (typeof foncQdFiniSelectDatepickerDateFin === 'function') {
204                    foncQdFiniSelectDatepickerDateFin();
205                }
206            }
207        });
208    })(jQuery);
209}
210
211function setJourDatepicker(date, dateDebPlanning, chainePlanning, datepickerDeb){
212    var objDateDebPlanning = new Date(dateDebPlanning.substr(6,4), dateDebPlanning.substr(3,2)-1, dateDebPlanning.substr(0,2));
213    var ecart = Math.round(ecartDate(date, objDateDebPlanning));
214    var caractere = chainePlanning.charAt(ecart);
215    var sejour = '';
216    
217    
218    // TODO : ajout de la classe sur les dates sélectionnées
219    var dateDeb = jQuery('#inpt_resaDateDeb').val();
220    var dateFin = jQuery('#inpt_resaDateFin').val();
221    if (jQuery('#inpt_resaDateDebCal').length>0) {
222        dateDeb = jQuery('#inpt_resaDateDebCal').val();
223        dateFin = jQuery('#inpt_resaDateFinCal').val();
224    }    
225    var autoriseClicSejourNonReservable = true;
226    if(jQuery('#inpt_resaDateDebCal').length>0 && jQuery('#inpt_resaDateDebCal').attr('data-autoriseDemandeNonReservable') == 'false'){
227        autoriseClicSejourNonReservable = false;
228    }
229    
230    var regexDate = new RegExp("[0-9]{2}\/[0-9]{2}\/[0-9]{4}");
231    if (regexDate.test(dateDeb) && regexDate.test(dateFin)) {
232        var objDateDeb = new Date(dateDeb.substr(6,4), dateDeb.substr(3,2)-1, dateDeb.substr(0,2));
233        var objDateFin = new Date(dateFin.substr(6,4), dateFin.substr(3,2)-1, dateFin.substr(0,2));
234        var ecartDateDeb = Math.round(ecartDate(objDateDeb, objDateDebPlanning));
235        var ecartDateFin = Math.round(ecartDate(objDateFin, objDateDebPlanning));
236        if (ecartDateDeb <= ecart && ecartDateFin >= ecart){
237            sejour = 'sejour';
238            if(ecart === ecartDateDeb){
239                sejour+= ' dateArrivee';
240            }
241            if(ecart === ecartDateFin){
242                sejour+= ' dateFin';
243            }
244        }
245    }
246    
247    var classe = sejour+' ';
248    
249    var caracterePrecedent = chainePlanning.charAt(ecart-1);
250    var caractereSuivant = chainePlanning.charAt(ecart+1);
251    var tabCaracteresNonCliquables = ['i', 'o', 'r', 'n', 'd','e'];
252    if (caractere.length>0 && caracterePrecedent.length>0) {
253        if (datepickerDeb===true && (!jQuery('#inpt_affichePlanningsIdentiques') || jQuery('#inpt_affichePlanningsIdentiques').length===0)) {
254            if (jQuery.inArray(caractere, tabCaracteresNonCliquables)>-1 && jQuery.inArray(caracterePrecedent, tabCaracteresNonCliquables)===-1) {
255                classe += 'debutResa ';
256            }
257            if (jQuery.inArray(caractere, tabCaracteresNonCliquables)===-1 && jQuery.inArray(caracterePrecedent, tabCaracteresNonCliquables)>-1) {
258                classe += 'finResa ';
259            }
260        } else {
261            if (jQuery.inArray(caractere, tabCaracteresNonCliquables)===-1 && jQuery.inArray(caractereSuivant, tabCaracteresNonCliquables)>-1) {
262                classe += 'debutResa ';
263            }
264            if (jQuery('#inpt_affichePlanningsIdentiques').length>0 && jQuery.inArray(caractere, tabCaracteresNonCliquables)===-1 && jQuery.inArray(caracterePrecedent, tabCaracteresNonCliquables)>-1) {
265                classe += 'finResa ';
266            }
267        }
268    }
269    
270    var nonCliquable = estSurBureauPropOuITEA(); // cliquable quand on est sur le bureau ITEA ou Prop
271    // 328809 : dans le cas des dates supérieures à celles qu'on reçoit, on autorise également pour le buro prop
272    var nonCliquableExeNonOuvertWeb = estSurBureauITEA() || estResaBureauProp();
273    
274    if (caractere==='A' || caractere==='.') {
275        classe += 'cliquable';
276        return [true, classe];
277    } else if (caractere==='L' || caractere==='l') {
278        classe += 'libre';
279        return [autoriseClicSejourNonReservable, classe];
280    }  else if (caractere === '?'|| caractere === 'a') {
281        classe += 'inconnu';
282        return [true, classe];
283    } else if (caractere === 'r' || caractere === 'R'){
284        classe += 'resa';
285        return [nonCliquable,classe];
286    } else if (caractere === 'o'|| caractere === 'O'){
287        classe += 'option';
288        return [nonCliquable, classe];
289    } else if (caractere === 'i'){
290        classe += 'intention';
291        return [nonCliquable, classe];
292    } else if (caractere === 'n' || caractere === 'e' || caractere === 'd'){
293        classe += 'occupe';
294        return [nonCliquable, classe];
295    } else if (caractere === "j") {
296        //CORR 229745
297        classe+='dateArrivee';
298        return [nonCliquable, classe];
299    } else if(caractere == "f"){
300        classe+='forcage';
301        return [true, classe];
302    } else if(!caractere && ecart>=chainePlanning.length){
303        //classe+='inconnu'; // fiche 242595
304        classe+='occupe plusDePlanning';
305        return [nonCliquableExeNonOuvertWeb, classe];
306    } else if (ecart>=0){
307        return [nonCliquable, "inconnu"];
308    } else {
309        return [nonCliquable, "avantDatesPossibles"];
310    }
311}
312
313function setInputDateDeb(date){
314    (function($){
315        $('#inpt_resaDateDebCal').val(date);
316        jQuery('#inpt_resaDateDebCal').removeClass("focus");
317        ouvreDatepickerFin();
318    })(jQuery);
319}
320
321function setInputDateFin(date){
322    (function($){
323        $('#inpt_resaDateFinCal').val(date);
324        $('#div_calendrierFin').hide().removeClass('open');
325        jQuery('#inpt_resaDateFinCal').removeClass("focus");
326
327        var dateDeb = $('#inpt_resaDateDebCal').val();
328        var dateFin = date;
329
330        if ($('#div_choixDates_packDivDatesTarifs').attr('data-gestprod')) {
331            $('.div_btnResa a').each(function () {
332                var href = $(this).attr('href') + '&date_deb=' + dateDeb.toString() + '&date_fin=' + dateFin.toString();
333                $(this).attr('href', href);
334            });
335            return;
336        }
337        if ($('#div_choixModeResaGEGS').length>0) {
338            var modeResa = $('.inpt_modeVte:checked').val();
339        }
340
341        // Affichage du message de confirmation/erreur en fonction des dates choisies
342        var tabData = {type: 'verifDates',
343            dateDeb: dateDeb,
344            dateFin: dateFin,
345            ident : $('#div_choixDates_packDivDatesTarifs').attr('data-ident'),
346            instance : $('#div_choixDates_packDivDatesTarifs').attr('data-instance'),
347            exercice : $('#div_choixDates_packDivDatesTarifs').attr('data-exercice'),
348            estPresentSurFiche : true,
349            avecQTipFD : $('#sp_infoBulleAideFraisDossiers').length,
350            modeResa: modeResa};
351        // TODO : enlever cette variable globale!
352        modeCalculPrixSurFiche = true;
353        if ($('#widgetFNGF_selectCapacite').length > 0) {
354            $('#widgetFNGF_selectCapacite').attr('updated', 'N');
355        }
356        ajaxVerifDates(tabData);
357    })(jQuery);
358}
359
360function getValInputDateDebFiche() {
361    if (jQuery('#inpt_resaDateDeb').length>0) {
362        return jQuery('#inpt_resaDateDeb').val();
363    }
364    return jQuery('#inpt_resaDateDebCal').val();
365}
366function getValInputDateFinFiche() {
367    if (jQuery('#inpt_resaDateFin').length>0) {
368        return jQuery('#inpt_resaDateFin').val();
369    }
370    return jQuery('#inpt_resaDateFinCal').val();
371}
372function dateDebEtFin_VideOuDefault() {
373    if (jQuery('#inpt_resaDateDeb').length==0 && jQuery('#inpt_resaDateDebCal').length==0) {
374        return false;
375    }
376    if (jQuery('#inpt_resaDateFin').length==0 && jQuery('#inpt_resaDateFinCal').length==0) {
377        return false;
378    }
379    if (jQuery('#inpt_resaDateDeb').length>0) {
380        var dateDebDefault = jQuery('#inpt_resaDateDeb').attr('data-lblDefautArrivee');
381    } else if (jQuery('#inpt_resaDateDebCal').length>0) {
382        var dateDebDefault = jQuery('#inpt_resaDateDebCal').attr('data-lblDefautArrivee');
383    }
384    
385    if (jQuery('#inpt_resaDateFin').length>0) {
386        var dateFinDefault = jQuery('#inpt_resaDateFin').attr('data-lblDefautDepart');
387    } else if (jQuery('#inpt_resaDateFinCal').length>0) {
388        var dateFinDefault = jQuery('#inpt_resaDateFinCal').attr('data-lblDefautDepart');
389    }
390
391    if (getValInputDateDebFiche() == "" || getValInputDateFinFiche() == "" || getValInputDateDebFiche() == dateDebDefault || getValInputDateFinFiche() == dateFinDefault) {
392        return true;
393    }
394    return false;
395}
396function btnReserverFicheCalendrier(element){
397    (function ($) {
398        if (dateDebEtFin_VideOuDefault()) { // que ce soit widget fngf ou site normal on ouvre le calendrier pour que le bouton se mette à jour ensuite. 465225
399            initInputDateDeb();
400        } else {
401            majHrefBoutonReserver(true);
402            if(window.dataLayer){
403                var tabParamsGTM = JSON.parse($(element).attr('data-paramsTrackEvent'));
404                  
405                dataLayer.push({
406                    'Label_Event': tabParamsGTM.label,
407                    'Categorie_Event': tabParamsGTM.categorie,
408                    'event': tabParamsGTM.action
409                });
410
411                var prix = $(element).attr('data-prix');
412                var TransactionId = tabParamsGTM.prefixe+tabParamsGTM.label;
413                dataLayer.push({
414                    'Transaction_Id': TransactionId,
415                    'Product_Id': tabParamsGTM.ident,
416                    'Price': prix,
417                    'event': 'Criteo_Contact'
418                });
419            }
420        }     
421    })(jQuery);
422}
423
424function initDatepickersResa(){
425    jQuery('#inpt_resaDateDeb').unbind('click');
426    jQuery('#inpt_resaDateDeb').bind('click', function(e){
427        ouvreDatepickerDebResa();
428        e.stopPropagation();
429    });
430    jQuery('#inpt_resaDateFin').unbind('click');
431    jQuery('#inpt_resaDateFin').bind('click', function(e){
432        ouvreDatepickerFinResa();
433        e.stopPropagation();
434    });
435    jQuery('.sp_fermerCal').click(function(){
436        jQuery(this).parents(".div_calendDateDebFin").hide();
437    });
438    initDatepickersDateNaissance();
439}
440
441function initDatepickersDateNaissance(){
442    if (jQuery('.inpt_dateNaissance').length===0) {
443        return;
444    }
445    jQuery('.inpt_dateNaissance').datepicker('destroy');
446    if (jQuery('#inpt_resaDateDeb').val()==='' || jQuery('#inpt_resaDateDeb').val()==='Arrivée') {
447        return;
448    }
449    var dateNaissanceMinEnfants =  getObjDateNaissanceMin('enfant');
450    var dateNaissanceMaxEnfants =  getObjDateNaissanceMax('enfant');
451    var dateNaissanceMinBebes =  getObjDateNaissanceMin('bebe');
452    var dateNaissanceMaxBebes =  getObjDateNaissanceMax('bebe');
453    
454    var paramsBouton = {};
455    if (estResaBureauProp() || estResaBureauGestloc()) {
456        paramsBouton = {
457            showOn: 'button',
458            buttonImage: '/css_defaut/v5/resa/bureau/images/calend.png',
459            buttonImageOnly: true,
460            buttonText: 'Sélectionner une date'
461        };
462    }
463    
464    jQuery('.inpt_dateNaissance.enfant').datepicker(jQuery.extend({}, {
465        numberOfMonths: [1, 2],
466        dateFormat: 'dd/mm/yy',
467        minDate: dateNaissanceMinEnfants.toString('dd/mm/yyyy'),
468        maxDate: dateNaissanceMaxEnfants.toString('dd/mm/yyyy'),
469        changeMonth: true,
470        changeYear: true,
471        yearRange: dateNaissanceMinEnfants.getAnnee()+':'+dateNaissanceMaxEnfants.getAnnee(),
472        beforeShow: function(){jQuery('#ui-datepicker-div').addClass('notranslate');}
473    }, paramsBouton));
474    
475    jQuery('.inpt_dateNaissance.bebe').datepicker(jQuery.extend({}, {
476        numberOfMonths: [1, 2],
477        dateFormat: 'dd/mm/yy',
478        minDate: dateNaissanceMinBebes.toString('dd/mm/yyyy'),
479        maxDate: dateNaissanceMaxBebes.toString('dd/mm/yyyy'),
480        changeMonth: true,
481        changeYear: true,
482        yearRange: dateNaissanceMinBebes.getAnnee()+':'+dateNaissanceMaxBebes.getAnnee(),
483        beforeShow: function(){jQuery('#ui-datepicker-div').addClass('notranslate');}
484    }, paramsBouton));
485    
486    if (estResaBureauProp() || estResaBureauGestloc()) {
487        jQuery('.inpt_dateNaissance.enfant').unbind('change');
488        jQuery('.inpt_dateNaissance.enfant').bind('change', function(){
489            corrigeSaisieDateNaissance(this, 'enfant');
490        });
491    }
492}
493
494function ouvreDatepickerDebResa(){
495    (function($){
496        $("#div_calendrierDeb").show().addClass('open');
497        $("#div_calendrierFin").hide().removeClass("open");
498        // On créé la requête ajax permettant de récupérer les disponibilités de cette structure
499        $.ajax({
500            type: 'POST',
501            url: urlAJAX,
502            data: {
503                type : 'getPlanningDebResa',
504                modeResa : $('input:radio[name=modeResa]:checked').val()
505            },
506            dataType: 'json',
507            beforeSend: function(){
508                $('#div_roueDatepickerDeb').show();
509            },
510            // Quand la requête Ajax s'est terminée correctement,
511            // On met à jour chainePlanning et dateDebPlanning pour paramétrer les datepicker
512            success: function(JSONResult){
513                if (JSONResult.code == 'dossierNull') {
514                    retourEtape1(JSONResult.msg);
515                } else if (JSONResult.errTechnq) {
516                    afficheMsgErrTechnq(JSONResult.msg, JSONResult.titre, JSONResult.ident, true);
517                } else if (JSONResult.code == 'OK'){
518                    initDatePickerDebResa(JSONResult);
519                } else {
520                    alertAMalibu(JSONResult.msg);
521                    $("#div_calendrierDeb").hide().removeClass("open");
522                    $("#div_uneEtape_date").find(".inpt_validEtape").val("Non");
523                }
524                $("#div_roueDatepickerDeb").hide();
525            }
526        });
527    })(jQuery);
528}
529
530function fermeDatepickerDebResa(){
531    (function($){
532        $("#div_calendrierDeb").hide().removeClass('open');
533    })(jQuery);
534}
535
536function ouvreDatepickerFinResa(){
537    (function($){
538        var regexDate = new RegExp("[0-9]{2}\/[0-9]{2}\/[0-9]{4}");
539        if (!regexDate.test($('#inpt_resaDateDeb').val())) {
540            ouvreDatepickerDebResa();
541            return;
542        }
543        $('#div_calendrierDeb').hide().removeClass('open');
544        $("#div_calendrierFin").show().addClass('open');
545        $.ajax({
546            type: 'POST',
547            url: urlAJAX,
548            dataType: 'json',
549            async: false,   // Nécessaire quand on arrive sur la page avec des dates et qu'on simule la sélection des dates
550            data: {
551                type: 'getPlanningFinResa',
552                dateDeb: $('#inpt_resaDateDeb').val()
553            },
554            beforeSend: function(){    
555                $('#div_roueDatepickerFin').show();
556            },
557            complete: function(){
558                $('#div_roueDatepickerFin').hide();
559                $('#div_calendrierFin').show().addClass('open');
560            },
561            success: function(JSONResult){
562                initDatePickerFinResa(JSONResult);
563            },
564            error: function(xhr, errorText, errorStatus){
565                $('#div_calendrierFin').hide().removeClass('open');
566                $('#div_roueDatepickerFin').hide();
567            }
568        });
569    })(jQuery);
570}
571
572function fermeDatepickerFinResa(){
573    (function($){
574        $("#div_calendrierFin").hide().removeClass('open');
575    })(jQuery);
576}
577
578function initDatePickerDebResa(JSONResult){
579    (function($){
580        $('#div_datepickerDeb').datepicker('destroy');
581        $('#div_datepickerDeb').datepicker({
582            numberOfMonths: [1, 2],
583            dateFormat: 'dd/mm/yy',
584            minDate: JSONResult.dateDeb,
585            maxDate: JSONResult.dateFin,
586            defaultDate: $('#inpt_resaDateDeb').val(),
587            beforeShowDay: function (date) {
588                return setJourDatepicker(date, JSONResult.dateDeb, JSONResult.chaineDispo);
589            },
590            onSelect: function (dateDeb) {
591                setInputDateDebResa(dateDeb);
592                initDatepickersDateNaissance();
593            }
594        });
595    })(jQuery);
596}
597
598function setInputDateDebResa(date){
599    (function($){
600        $('#inpt_resaDateDeb').val(date);
601        ouvreDatepickerFinResa();
602    })(jQuery);
603}
604
605function initDatePickerFinResa(JSONResult){
606    (function($){
607        // La date minimale du datepicker doit correspondre à la date de début plus un jour
608        var dateDeb = $('#inpt_resaDateDeb').val();
609        var objDateDeb = new Date(dateDeb.substr(6,4), parseInt(dateDeb.substr(3,2))-1, parseInt(dateDeb.substr(0,2))+1);
610        $("#div_datepickerFin").datepicker('destroy');
611        $("#div_datepickerFin").datepicker({
612            numberOfMonths: [1, 2],
613            dateFormat: 'dd/mm/yy',
614            minDate: objDateDeb,
615            defaultDate: objDateDeb,
616            maxDate: JSONResult.dateFin,
617            beforeShowDay: function (date) {
618                return setJourDatepicker(date, JSONResult.dateDeb, JSONResult.chaineDispo);
619            },
620            onSelect: function (dateFin) {
621                setInputDateFinResa(dateFin);
622            }
623        });
624    })(jQuery);
625}
626
627function setInputDateFinResa(date){
628    (function($){
629        $('#inpt_resaDateFin').val(date);
630        $('#div_calendrierFin').hide().removeClass('open');
631        var dateDeb = $('#inpt_resaDateDeb').val();
632        var dateFin = date;
633
634        // Affichage du message de confirmation/erreur en fonction des dates choisies
635        var tabData = {type: 'verifDates', dateDeb: dateDeb, dateFin: dateFin};
636        ajaxVerifDates(tabData);
637    })(jQuery);
638}
639
640function initDatepickersLies(idElemDateDeb, idElemDateFin, tabOptions) {
641    (function($) {
642        if (!idElemDateDeb || $('#'+idElemDateDeb).length === 0 
643            || !idElemDateFin || $('#'+idElemDateFin).length === 0 ) {
644            return;
645        }
646        
647        $.datepicker.setDefaults($.datepicker.regional[initLangueForDatePicker()]);
648        
649        if (tabOptions.dateDeb) {
650            var objDateDeb = new OBJDate(tabOptions.dateDeb);
651            $('#'+idElemDateDeb).val(objDateDeb.toString());
652            if (tabOptions.dureeSejour) {
653                var objDateFin = new OBJDate(tabOptions.dateDeb);
654                objDateFin.ajoutJour(tabOptions.dureeSejour);
655                $('#'+idElemDateFin).val(objDateFin.toString());
656                delete objDateFin;
657            }
658        }
659        
660        $('#'+idElemDateDeb).datepicker({minDate: 0, dateFormat: 'dd/mm/yy', firstDay: 1});
661        $('#'+idElemDateFin).datepicker({minDate: 0, dateFormat: 'dd/mm/yy', firstDay: 1});
662        
663        if (objDateDeb) {
664            $('#'+idElemDateFin).datepicker('option', 'minDate', objDateDeb.toString());
665        }
666        
667        $('#'+idElemDateDeb).datepicker('option', 'onSelect', function (selectedDate) {
668            var dateDebut = new OBJDate(selectedDate);
669            dateDebut.ajoutJour(1);
670            // on fait en sorte de ne pas choisir une date de fin inférieure à la date de début
671            $('#'+idElemDateFin).datepicker('option', 'minDate', dateDebut.toString());
672//            $('#inpt_formPropmailDateFin').datepicker('setDate', dateDebut.toString());
673            delete dateDebut;
674            setTimeout(function () {
675                $('#'+idElemDateFin).focus();
676            }, 0);
677        });
678        
679        $('.datepicker').datepicker({minDate: 0,
680            dateFormat: 'dd/mm/yy',
681            firstDay: 1
682        });
683    })(jQuery);
684}
685
686function test_alljs_20190430_4(){
687    console.log('ok test_alljs_20190430_4');
688}

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.