var divStart,divEnd,datestart,dateend,format_date,lhost2,lcountry,lstate,lcountry_code,llanguage,lfirstdayofweek,lmin_date,lmax_date,lstart,current_color,ltitle,isDragging=!1,isEditing=!1,isGrabbingStart=!1,isGrabbingEnd=!1,idStart=-1,idEnd=-1,optimization_over=!1;function delCookie(e){document.cookie=e+"=; expires=Thu, 01 Jan 1970 00:00:01 GMT;path=/"}function setCookie(e,t,o){delCookie(e);var r=new Date,r=(r.setTime(r.getTime()),new Date(r.getTime()+864e5*o));document.cookie=e+"="+t+";expires="+r.toUTCString()+";path=/",console.log("set cookie "+t.length)}var lmobile=0;function create_date_pickers(){var e,t="",t="US"==lcountry_code?"mm/dd/yyyy":"CN"==lcountry_code?"yyyy/mm/dd":"dd/mm/yyyy";t=lmobile?(console.log("datepicker mobile format_date"+format_date),e={date_format:""+t,language:llanguage,weekend:lchomes,public_holidays_country_code:lcountry_code,public_holidays_configuration:lstate,display_week_number:1,align:"center",first_day_of_week:lfirstdayofweek,id_picto:"small_cal1",public_holidays_enabled:1,month_selectable:0,year_selectable:0,days_in_other_months:1,min_date:lmin_date,mobile:1,selecting_period:1,label_selected_date:1,id_other:"to",footer_bar:1,header:""+translate("start date"),profile_id:""+getProfileId()},{date_format:""+t,language:llanguage,weekend:lchomes,public_holidays_country_code:lcountry_code,public_holidays_configuration:lstate,display_week_number:1,align:"center",first_day_of_week:lfirstdayofweek,id_picto:"small_cal2",month_selectable:0,year_selectable:0,days_in_other_months:1,min_date:lstart,max_date:lmax_date,mobile:1,selecting_period:1,label_selected_date:1,id_other:"from",footer_bar:1,header:""+translate("end date"),profile_id:""+getProfileId()}):(console.log("datepicker desktop "+t),e={date_format:""+t,language:llanguage,weekend:lchomes,public_holidays_country_code:lcountry_code,public_holidays_configuration:lstate,display_week_number:1,align:"center",first_day_of_week:lfirstdayofweek,id_picto:"small_cal1",public_holidays_enabled:1,month_selectable:0,year_selectable:0,days_in_other_months:1,min_date:lmin_date,profile_id:""+getProfileId()},{date_format:""+t,language:llanguage,weekend:lchomes,public_holidays_country_code:lcountry_code,public_holidays_configuration:lstate,display_week_number:1,align:"center",first_day_of_week:lfirstdayofweek,id_picto:"small_cal2",month_selectable:0,year_selectable:0,days_in_other_months:1,min_date:lstart,max_date:lmax_date,profile_id:""+getProfileId()}),workingdays_datepicker("from",e),workingdays_datepicker("to",t)}function idtoindex(e){for(var t=0;t<jours.length-1;t++)if(e==dates[t])return t;return-1}function mouseover(e,t){var o;optimization_over?(o=idtoindex(e.id),"V"==jours[o]&&"0"==jours_initial[o]?document.getElementsByTagName("body")[0].style.cursor="url('cursor_remove2.png'),default":"0"==jours[o]&&(document.getElementsByTagName("body")[0].style.cursor="url('cursor_add7.png'),default")):isDragging||isEditing||(document.getElementById(e.id).style.border="2px solid #8ACAAF",document.getElementsByTagName("body")[0].style.cursor="pointer")}function mousemove(e,t){var o,r;optimization_over||isDragging&&(idEnd=e.id,divEnd=e,e=parseInt(idEnd.substring(0,2),10),o=parseInt(idEnd.substring(2,4),10),r=parseInt(idEnd.substring(4,8),10),(dateend=new Date).setFullYear(r,o-1,e),dateend.setHours(0,0,0,0),console.log("dateend="+dateend),highlight_period())}function dateJStoddmmyyy(e){var t=e.getFullYear(),o=e.getMonth();return((e=e.getDate())<=9?"0"+e:""+e)+(++o<=9?"0"+o:""+o)+(""+t)}function restoreOrignalColors(){for(console.log("restoreOrignalColors"+dates[0]+" "+dates[dates.length-1]),i=0;i<dates.length;i++)document.getElementById(dates[i]).style.border="1px solid white"}function highlight_period(){var e,t;for(restoreOrignalColors(),t=datestart<=dateend?(e=datestart,dateend):(e=dateend,datestart),console.log("highlight_period from "+e+" to "+t),(datecourante=new Date).setFullYear(e.getFullYear(),e.getMonth(),e.getDate()),datecourante.setHours(0,0,0,0),console.log("datecourante="+datecourante+" "+dateJStoddmmyyy(datecourante)),document.getElementById(dateJStoddmmyyy(datecourante))?document.getElementById(dateJStoddmmyyy(datecourante)).style.border="2px solid #8ACAAF":console.log("error !!! div existe pas "+dateJStoddmmyyy(datecourante));datecourante<t;)datecourante.setDate(datecourante.getDate()+1),document.getElementById(dateJStoddmmyyy(datecourante))?document.getElementById(dateJStoddmmyyy(datecourante)).style.border="2px solid #8ACAAF":console.log("error !!! div existe pas "+dateJStoddmmyyy(datecourante))}function mouseout(e,t){optimization_over?(e.children[7].style.visibility="hidden",e.children[8].style.visibility="hidden",document.getElementsByTagName("body")[0].style.cursor="auto"):isDragging||isEditing||(document.getElementById(e.id).style.border="1px solid white",document.getElementsByTagName("body")[0].style.cursor="auto")}function mousedown(e,t){var o,r;optimization_over?change_statut_after_optimization(e):(console.log("mousedown "+e.id),isDragging=!0,idStart=e.id,idEnd=(divStart=e).id,divEnd=e,e=parseInt(idStart.substring(0,2),10),o=parseInt(idStart.substring(2,4),10),r=parseInt(idStart.substring(4,8),10),(datestart=new Date).setFullYear(r,o-1,e),datestart.setHours(0,0,0,0),(dateend=new Date).setFullYear(r,o-1,e),dateend.setHours(0,0,0,0),console.log("datestart="+datestart),document.getElementsByTagName("body")[0].style.cursor="w-resize",highlight_period())}function inverseStartEnd(){var e;dateend<datestart&&(e=divStart,divStart=divEnd,divEnd=e,e=idStart,idStart=idEnd,idEnd=e)}function mouseup(e,t){var o,r;console.log("mouseup "+e.id),optimization_over||(idEnd=e.id,divEnd=e,e=parseInt(idEnd.substring(0,2),10),o=parseInt(idEnd.substring(2,4),10),r=parseInt(idEnd.substring(4,8),10),(dateend=new Date).setFullYear(r,o-1,e),dateend.setHours(0,0,0,0),console.log("mouseup dateend="+dateend),isDragging&&(isDragging=!1,show_edit_box_period(divEnd,idStart,idEnd)),document.getElementsByTagName("body")[0].style.cursor="auto")}function cancel_edit_box_period(){isEditing=isDragging=!1,restoreOrignalColors(),document.getElementById("editboxperiod_holidays").style.visibility="hidden"}function show_edit_box_period(e,t,o){isEditing=(lmobile?(document.getElementById("editboxperiod_holidays").style.display="block",console.log("!!!!!!!!!mobile"),MyScrollTo(document.getElementById(t).offsetTop-150),document.getElementById("editboxperiod_holidays").style.marginLeft="5%",document.getElementById("editboxperiod_holidays").style.marginTop=340+e.offsetTop-document.getElementById("editboxperiod_holidays").offsetHeight+"px",document.getElementById("editboxperiod_holidays").style.visibility="visible",document.getElementById("datestart").innerHTML=capitalizeFirstLetter(formatDateLong(datestart))):(console.log("!!!!!!!!!desk"),document.getElementById("editboxperiod_holidays").style.display="block",document.getElementById("editboxperiod_holidays").style.marginLeft=-30+e.offsetLeft-(document.getElementById("editboxperiod_holidays").offsetWidth-e.offsetWidth)/2+"px",document.getElementById("editboxperiod_holidays").style.marginTop=-90+e.offsetTop-document.getElementById("editboxperiod_holidays").offsetHeight+"px",document.getElementById("editboxperiod_holidays").style.visibility="visible",document.getElementById("datestart").innerHTML=formatDateLong(datestart)),document.getElementById("dateend").innerHTML=formatDateLong(dateend),!0)}function MyScrollTo(e){window.scrollTo({top:e,behavior:"smooth"})}function setCharAt(e,t,o){return t>e.length-1?e:e.substr(0,t)+o+e.substr(t+1)}function change_statut_after_optimization(e){idStart=e.id,e=parseInt(idStart.substring(0,2),10),o=parseInt(idStart.substring(2,4),10),t=parseInt(idStart.substring(4,8),10),(datestart=new Date).setFullYear(t,o-1,e),datestart.setHours(0,0,0,0),console.log("change_statut_after_optimization "+datestart);var t=dateJStoddmmyyy(datestart),o=parseInt(document.getElementById(""+t).children[4].innerHTML,10),e=jours[o],t=jours_initial[o];if(console.log("thejour="+e+" \tthejourinitial="+t+" index="+o),"0"==e){console.log("jours avant="+jours);var r=parseInt(document.getElementById("jour_a_poser").value,10);for(r++,document.getElementById("jour_a_poser").value=""+r,jours=setCharAt(jours,o,"V");bonus();)bonus();console.log("jours apres="+jours),numerote_vacances(),styleJourAposer(dates[o]),document.getElementsByTagName("body")[0].style.cursor="url('cursor_remove2.png'),default",remplit_days_to_take(),vacation_length()}else"V"==e&&"0"==t&&(console.log("jours avant="+jours),r=parseInt(document.getElementById("jour_a_poser").value,10),r--,document.getElementById("jour_a_poser").value=""+r,jours=setCharAt(jours,o,"0"),unbonus(),console.log("jours apres="+jours),numerote_vacances(),styleJourNeutre(dates[o]),document.getElementsByTagName("body")[0].style.cursor="url('cursor_add7.png'),default",remplit_days_to_take(),vacation_length())}function work_there(e){var t,o=datestart<=dateend?(t=datestart,dateend):(t=dateend,datestart);for(console.log("work_there from "+t+" to "+o+" param="+e),(datecourante=new Date).setFullYear(t.getFullYear(),t.getMonth(),t.getDate()),datecourante.setHours(0,0,0,0),jour_a_poser=parseInt(document.getElementById("jour_a_poser").value,10);datecourante<=o;){var r=dateJStoddmmyyy(datecourante),s=parseInt(document.getElementById(""+r).children[4].innerHTML,10);jours[s],jours_initial[s];document.getElementById(r)?1==e?(document.getElementById(""+r).children[2].style.visibility="visible",document.getElementById(""+r).children[3].style.visibility="hidden",jours=setCharAt(jours,s,"3")):2==e?(document.getElementById(""+r).children[2].style.visibility="hidden",document.getElementById(""+r).children[3].style.visibility="visible",jours=setCharAt(jours,s,"V")):3==e?(document.getElementById(""+r).children[2].style.visibility="hidden",document.getElementById(""+r).children[3].style.visibility="hidden",jours=setCharAt(jours,s,jours_initial[s])):4==e?(document.getElementById(""+r).children[2].style.visibility="hidden",document.getElementById(""+r).children[3].style.visibility="hidden",document.getElementById(""+r).style.backgroundColor="#A0A0A0",document.getElementById(""+r).style.color="white",jours=setCharAt(jours,s,"1"),jours_initial=setCharAt(jours_initial,s,"1")):5==e?(document.getElementById(""+r).children[2].style.visibility="hidden",document.getElementById(""+r).children[3].style.visibility="hidden",document.getElementById(""+r).style.backgroundColor="white",document.getElementById(""+r).style.color="#363636",jours=setCharAt(jours,s,"0"),jours_initial=setCharAt(jours_initial,s,"0")):6==e&&(document.getElementById(""+r).children[2].style.visibility="hidden",document.getElementById(""+r).children[3].style.visibility="hidden",document.getElementById(""+r).style.backgroundColor="#DE5723",document.getElementById(""+r).style.color="white",jours=setCharAt(jours,s,"2"),jours_initial=setCharAt(jours_initial,s,"0")):console.log("error !!! div existe pas "+dateJStoddmmyyy(datecourante)),datecourante.setDate(datecourante.getDate()+1)}for(i=jours_travail=jour_vacances_forcees=0;i<jours.length;i++)"V"==jours[i]?jour_vacances_forcees++:"3"==jours[i]&&jours_travail++;document.getElementById("days_at_work").innerHTML=jours_travail,0<(document.getElementById("known_holidays").innerHTML=jour_vacances_forcees)?(t=jour_a_poser-jour_vacances_forcees,document.getElementById("optimize_it_number").innerHTML=" ("+t+")"):document.getElementById("optimize_it_number").innerHTML="",cancel_edit_box_period()}function mouseup_body(){document.getElementById("containerCalendar").style.cursor="pointer",(isGrabbingStart||isGrabbingEnd||isDragging)&&cancel_edit_box_period()}function setCharAt(e,t,o){return t>e.length-1?e:e.substr(0,t)+o+e.substr(t+1)}var jour_a_poser=0,jour_vacances_forcees=0,jours_travail=0,optimized=!1;function traite_vacances_connnues(){for(i=0;i<jours.length;i++)"V"==jours[i]&&"0"==jours_initial[i]?styleJourAposer(dates[i]):"V"!=jours[i]||"1"!=jours_initial[i]&&"2"!=jours_initial[i]||styleBonus(dates[i])}function optimize(){optimization_over=!0,document.getElementById("play_opti").style.display="none",document.getElementById("wait_opti").style.display="block",traite_vacances_connnues(),document.getElementById("optim").onclick=!1,document.getElementById("optim").style.cursor="auto",document.getElementById("optim").style.opacity="0.2",jour_a_poser=parseInt(document.getElementById("jour_a_poser").value,10)-jour_vacances_forcees,optimized=!0,0==jour_a_poser&&(todo="bonus"),(document.getElementById("onechunk").checked?all_at_once:step)()}var duration_step=0,duration_step2=0,duration_step3=3e3,debug=!1;function step(){var e;debug&&(document.getElementById("debug_div").style.display="block",duration_step=500),console.log("step jour_a_poser="+jour_a_poser),nextstep(),0<jour_a_poser||"bonus"==todo?setTimeout(function(){step()},duration_step):(numerote_vacances(),remplit_days_to_take(),console.log("fin jour_a_poser="+jour_a_poser),e=document.getElementById("results").offsetTop-10,window.scrollTo({top:e,behavior:"smooth"}))}var todo="chercheGap",Gap=1;function compress_phrase(e){for(var t=e.split(","),o=[],r=0;r<t.length-1;r++){var s=t[r].trim().split(" ");o.push([s[0],s[1]])}for(var a="",r=1;r<o.length;r++)o[r-1][1]==o[r][1]&&(o[r-1][1]="");for(r=0;r<o.length;r++)""===o[r][1]?a+=o[r][0]+", ":a+=r==o.length-1?o[r][0]+" "+o[r][1]:o[r][0]+" "+o[r][1]+", ";return a}function save_as_custom_dates(){var e=getCookie("email"),t=getCookie("shared_profile_id"),o=getCookie("access_token");if(null!=t&&""!=t&&null==o)return console.log("read only mode"),setCookie("premiermessage",getCookie("name")+" ("+getCookie("email")+") "+translate("has shared with you this calendar as read-only.")),document.location.reload(),0;t=0,o=t=null!=custom_dates_array?custom_dates_array.length:t;if(100<o&&null==e)document.getElementById("divsignin").className="signin_alert",display_message(max1_custom_dates,6e3),cancel_edit_box_period(),setTimeout(function(){document.getElementById("divsignin").className="signin"},6e3);else if(200<o&&null!=e&&!unlimited_custom_dates)display_message(max2_custom_dates,9e3),cancel_edit_box_period(),setTimeout(function(){show_premium()},9e3);else{console.log("email="+e),console.log("dates"),console.log(dates);for(var r,s=0;s<jours.length;s++)"0"==jours_initial[s]&&"V"==jours[s]&&(console.log("create new custom date x="+s+" dates[x]="+dates[s]),r=dates[s],statut=4,document.getElementById("period_newlibelledate").value=ltitle,document.getElementById("period_newlibelledate").value=ltitle,remov2(r),insert(r,statut));null==e&&(setCookie("custom_dates",custom_dates,300),setCookie("custom_libelles",custom_libelles,300),setCookie("custom_status",custom_status,300),setCookie("custom_colors",custom_colors,300),setCookie("custom_workedhours",custom_workedhours,300),setCookie("custom_schedules",custom_schedules,300),setCookie("custom_salaries",custom_salaries,300),console.log("au moment du save inject cook custom_teleworking="+custom_teleworking),setCookie("custom_teleworking",custom_teleworking,300),setCookie("custom_notifications",custom_notifications,300)),needReload=!1;setCookie("premiermessage",saveintheCloud()?translate("Custom date saved on your account.")+reminder_confirmation:translate("Custom dates saved on this computer.<br><br>Sign in to save them securely on our servers.")),window.scroll(0,0),document.location.reload()}}function remplit_days_to_take(){console.log("remplit_days_to_take "+jours_initial+" "+jours),document.getElementById("results").style.display="block";var e,t=new Date,t=(t.setTime(t.getTime()),new Date(t.getTime()+864e5)),o=(document.cookie="jours="+jours+";expires="+t.toUTCString()+";path=/",document.getElementById("days_to_take").innerHTML="",0),r=document.getElementById("days_to_take_invisible").innerHTML="",s=-1,a=-1,n=0;for(i=0;i<jours.length;i++)"0"==jours_initial[i]&&"V"==jours[i]&&(n++,r+=libelleDateShort(dates[i])+", "),jours[i],(0==i&&"V"==jours[i]||0<i&&"V"==jours[i]&&("0"==jours[i-1]||"3"==jours[i-1]))&&(s=i),0<(a=("V"!=jours[i]||"0"!=jours[i+1]&&"3"!=jours[i+1])&&i!=jours.length-1?a:i)&&(r="("+(r=compress_phrase(r))+")",e=a-s+1,console.log("remplit_days_to_take period found "+s+" "+a),o++,1<n?document.getElementById("days_to_take").innerHTML+="<div class=bloc_resultat onclick=\"scrollToDate2('"+dates[i]+"')\" ><b>"+translate("Vacation period")+"#"+o+"</b>: "+translate("Take")+" "+n+" "+translate("days off")+" "+r+" "+translate("and enjoy")+" "+e+" "+translate("days of rest")+" "+translate("From").toLowerCase()+" "+libelleDate(dates[s])+" "+translate("to")+" "+libelleDate(dates[a])+"</div>":1==n&&(document.getElementById("days_to_take").innerHTML+="<div  class=bloc_resultat  onclick=\"scrollToDate2('"+dates[i]+"')\" ><b>"+translate("Vacation period")+"#"+o+"</b>:"+translate("Take")+" "+n+" "+translate("day off")+" "+r+" "+translate("and enjoy")+" "+e+"  "+translate("days of rest")+" "+translate("From").toLowerCase()+" "+libelleDate(dates[s])+" "+translate("to")+" "+libelleDate(dates[a])+"</div>"),1<n?document.getElementById("days_to_take_invisible").innerHTML+=translate("Vacation period")+"#"+o+": "+translate("Take")+" "+n+" "+translate("days off")+" "+r+" "+translate("and enjoy")+" "+e+" "+translate("days of rest")+" "+translate("From").toLowerCase()+" "+libelleDate(dates[s])+" "+translate("to")+" "+libelleDate(dates[a])+"\n":1==n&&(document.getElementById("days_to_take_invisible").innerHTML+=translate("Vacation period")+" #"+o+": "+translate("Take")+" "+n+" "+translate("day off")+" "+r+" "+translate("and enjoy")+" "+e+" "+translate("days of rest")+" "+translate("From").toLowerCase()+" "+libelleDate(dates[s])+" "+translate("to")+" "+libelleDate(dates[a])+"\n"),a=-1,n=0,r="");document.getElementById("optim").style.display="none",document.getElementById("jour_a_poser").disabled=!0,document.getElementById("from").disabled=!0,document.getElementById("to").disabled=!0,document.getElementById("onechunk").disabled=!0,document.getElementById("try_again_haut").style.display="block",document.getElementById("results").style.display="block",document.getElementById("save_as_custom_dates").style.display=lmobile?"flex":"block"}function copy(){document.getElementById("days_to_take_invisible").select(),document.execCommand("copy")}function numerote_vacances(){var e,t=1,o=1;for(i=0;i<jours.length;i++)"V"==jours[i]&&(e=dates[i],document.getElementById(e).children[1].style.visibility="visible",document.getElementById(e).children[1].innerHTML=t,t++),"V"==jours[i]&&"0"==jours_initial[i]&&(document.getElementById(e).children[9].style.visibility="visible",document.getElementById(e).children[10].style.visibility="visible",document.getElementById(e).children[10].innerHTML=o,o++)}function nextstep(){if(console.log("nextstep todo="+todo+"  Gap="+Gap),document.getElementById("info_debug").innerHTML="nextstep="+todo+" Gap="+Gap+"<br> jour_a_poser="+jour_a_poser,"chercheGap"==todo){if(1==Gap&&1<=jour_a_poser){if(foundGap1())return void(todo="bonus");Gap++}if(2==Gap&&2<=jour_a_poser){if(foundGap2())return void(todo="bonus");Gap++}if(3==Gap&&2<=jour_a_poser&&(document.getElementById("info_debug").innerHTML="cherche bigwe jour_a_poser="+jour_a_poser,foundBigWeekEnd()))todo="bonus";else{if(3==Gap&&3<=jour_a_poser){if(foundGap3())return void(todo="bonus");Gap++}if(4==Gap&&4<=jour_a_poser){if(foundGap4())return void(todo="bonus");Gap++}if(5==Gap&&5<=jour_a_poser){if(foundGap5())return void(todo="bonus");Gap++}0<jour_a_poser&&(document.getElementById("info_debug").innerHTML="cherche bigwe jour_a_poser="+jour_a_poser,foundBigWeekEnd())?todo="bonus":0<jour_a_poser&&(complete(),todo="bonus")}}else"bonus"==todo&&(todo=bonus()?"bonus":"chercheGap")}function vacation_length(){console.log("vacation_length jours="+jours);var e=jours.split("V").length-1;document.getElementById("holidays_length").innerHTML=e;var t=parseInt(document.getElementById("jour_a_poser").value,10)-jour_a_poser,e=(document.getElementById("took").innerHTML=t,Math.round(e/t*100));document.getElementById("factor").innerHTML=e+"%"}function complete(){console.log("complete reste jour_a_poser="+jour_a_poser),console.log("complete reste jours="+jours),document.getElementById("info_debug").innerHTML="complete <br> jour_a_poser="+jour_a_poser;var e,t,o="";1==jour_a_poser?(e="0V",o=-1==(t=jours.indexOf(e))?(e="01",-1==(t=jours.indexOf(e))&&(e="02",t=jours.indexOf(e)),jours.replace(e,"V1")):jours.replace(e,"VV"),styleJourAposer(dates[t]),jours=o,jour_a_poser--):2==jour_a_poser?(e="00V",o=-1==(t=jours.indexOf(e))?(e="001",t=jours.indexOf(e),jours.replace(e,"VV1")):jours.replace(e,"VVV"),styleJourAposer(dates[t]),styleJourAposer(dates[t+1]),jours=o,jour_a_poser--,jour_a_poser--):3==jour_a_poser?(e="000V",o=-1==(t=jours.indexOf(e))?(e="0001",t=jours.indexOf(e),jours.replace(e,"VVV1")):jours.replace(e,"VVVV"),styleJourAposer(dates[t]),styleJourAposer(dates[t+1]),styleJourAposer(dates[t+2]),jours=o,jour_a_poser--,jour_a_poser--,jour_a_poser--):4==jour_a_poser?(e="0000V",o=-1==(t=jours.indexOf(e))?(e="00001",t=jours.indexOf(e),jours.replace(e,"VVVV1")):jours.replace(e,"VVVVV"),styleJourAposer(dates[t]),styleJourAposer(dates[t+1]),styleJourAposer(dates[t+2]),styleJourAposer(dates[t+3]),jours=o,jour_a_poser--,jour_a_poser--,jour_a_poser--,jour_a_poser--):5<=jour_a_poser&&(e="00000V",o=-1==(t=jours.indexOf(e))?(e="000001",t=jours.indexOf(e),jours.replace(e,"VVVVV1")):jours.replace(e,"VVVVVV"),styleJourAposer(dates[t]),styleJourAposer(dates[t+1]),styleJourAposer(dates[t+2]),styleJourAposer(dates[t+3]),styleJourAposer(dates[t+4]),jours=o,jour_a_poser--,jour_a_poser--,jour_a_poser--,jour_a_poser--,jour_a_poser--),vacation_length()}function scrollToDate(e){e=document.getElementById(e).offsetTop-300;$("html, body").animate({scrollTop:e},3*duration_step,"easeOutExpo")}function scrollToDate2(e){e=document.getElementById(e).offsetTop-300;window.scrollTo({top:e,behavior:"smooth"})}function unbonus(){for(var e=0;e<jours.length-3;e++)"0"==jours.charAt(e)&&"V"==jours.charAt(e+1)&&"1"==jours_initial.charAt(e+1)&&"V"==jours.charAt(e+2)&&"1"==jours_initial.charAt(e+2)&&"0"==jours.charAt(e+3)&&(jours=setCharAt(jours,e+1,"1"),jours=setCharAt(jours,e+2,"1"),console.log(" weekend orphelin at pos "+e),styleJourWeNeutre(dates[e+1]),styleJourWeNeutre(dates[e+2]))}function bonus(){console.log("bonus");var e,t,o=jours.indexOf("1V");return 0<=o?(e=dates[o],console.log("bonus found  1V at pos "+o+" fount at "+e),t=jours.replace("1V","VV"),styleBonus(e),document.getElementById("jours_box").innerHTML+="<br>"+t,jours=t,vacation_length(),!0):0<=(o=jours.indexOf("V1"))?(e=dates[o+1],t=jours.replace("V1","VV"),styleBonus(e),document.getElementById("jours_box").innerHTML+="<br>"+t,jours=t,console.log("jours="+jours),vacation_length(),!0):0<=(o=jours.indexOf("2V"))?(e=dates[o],t=jours.replace("2V","VV"),styleBonus(e),document.getElementById("jours_box").innerHTML+="<br>"+t,jours=t,vacation_length(),!0):0<=(o=jours.indexOf("V2"))&&(e=dates[o+1],t=jours.replace("V2","VV"),styleBonus(e),document.getElementById("jours_box").innerHTML+="<br>"+t,jours=t,vacation_length(),!0)}function setCharAt(e,t,o){return t>e.length-1?e:e.substr(0,t)+o+e.substr(t+1)}function styleJourNeutre(e){document.getElementById(e).children[1].style.visibility="hidden",document.getElementById(e).children[9].style.visibility="hidden",document.getElementById(e).children[10].style.visibility="hidden",document.getElementById(e).style.backgroundColor="white",document.getElementById(e).style.color="#363636",document.getElementById(e).style.border="0px solid #FFC20F"}function styleJourWeNeutre(e){document.getElementById(e).children[1].style.visibility="hidden",document.getElementById(e).style.backgroundColor="#A0A0A0",document.getElementById(e).style.color="white",document.getElementById(e).style.border="1px solid white"}function styleJourAposer(e){0<document.getElementById(e).classList.toString().indexOf("vacances")?(document.getElementById(e).style.backgroundImage="url('stripe_bleu.png')",document.getElementById(e).style.className="mondiv month_day"):(document.getElementById(e).style.className="mondiv month_day white",document.getElementById(e).style.backgroundImage="url('')",document.getElementById(e).style.backgroundColor="#80BFF8"),document.getElementById(e).style.color="white",document.getElementById(e).style.border="3px solid #FFC20F",document.getElementById(e).title+="\n"+capitalizeFirstLetter(translate("Days to take:")).replaceAll(":","")}function styleBonus(e){console.log("!!!!! styleBonus "+e),document.getElementById(e).style.border="3px solid #FFC20F"}function MyDayofWeek(e){return 0==e?translate("sunday"):1==e?translate("monday"):2==e?translate("tuesday"):3==e?translate("wednesday"):4==e?translate("thursday"):5==e?translate("friday"):translate("saturday")}function MyMonthLong(e){return 1==++e?translate("january"):2==e?translate("february"):3==e?translate("march"):4==e?translate("april"):5==e?translate("may"):6==e?translate("june"):7==e?translate("july"):8==e?translate("august"):9==e?translate("september"):10==e?translate("october"):11==e?translate("november"):translate("december")}function formatDateLong(e,t){return 0==t?MyDayofWeek(e.getDay())+", "+e.getDate()+" "+MyMonthLong(e.getMonth())+", "+e.getFullYear():2==t?MyDayofWeek(e.getDay())+", "+e.getFullYear()+", "+MyMonthLong(e.getMonth())+", "+e.getDate():MyDayofWeek(e.getDay())+", "+MyMonthLong(e.getMonth())+" "+e.getDate()+", "+e.getFullYear()}function formatDateShort(e,t){if(0==t)return e.getDate()+" "+MyMonthLong(e.getMonth())}function libelleDate(t){try{var e=parseInt(t.substring(0,2),10),o=parseInt(t.substring(2,4),10),r=parseInt(t.substring(4,8),10),s=new Date;return s.setFullYear(r,o-1,e),formatDateLong(s,0)}catch(e){alert("exception lors du libelleDate dategap="+t+" "+e.stack)}}function libelleDateShort(e){try{var t=parseInt(e.substring(0,2),10),o=parseInt(e.substring(2,4),10),r=parseInt(e.substring(4,8),10),s=new Date;return s.setFullYear(r,o-1,t),formatDateShort(s,0)}catch(e){alert("exception lors du libelleDate "+e.stack)}}function foundGap1(){console.log("foundGap1");for(var e,t=0;t<jours.length-2;t++)if("0"!=jours.charAt(t)&&"3"!=jours.charAt(t)&&"0"==jours.charAt(t+1)&&"0"!=jours.charAt(t+2)&&"3"!=jours.charAt(t+2))return search=t+1,e=dates[search],console.log("gap1 found "+search+" at pos "+search+" fount at "+e),jours=setCharAt(jours,search,"V"),jour_a_poser--,console.log("position="+document.getElementById(e).offsetTop),document.getElementById(e).offsetTop,debug&&window.scrollTo(0,document.getElementById(e).offsetTop-300),styleJourAposer(e),document.getElementById("jours_box").innerHTML+="<br>"+jours,!0;return!1}function foundGap2(){console.log("foundGap2");for(var e,t=0;t<jours.length-3;t++)if("0"!=jours.charAt(t)&&"3"!=jours.charAt(t)&&"0"==jours.charAt(t+1)&&"0"==jours.charAt(t+2)&&"0"!=jours.charAt(t+3)&&"3"!=jours.charAt(t+3))return search=t+1,e=dates[search],console.log("gap2 found "+search+" at pos "+search+" fount at "+e),document.getElementById(e).offsetTop,jours=setCharAt(jours,search,"V"),jour_a_poser--,styleJourAposer(e),search=t+2,e=dates[search],console.log("gap2 found "+search+" at pos "+search+" fount at "+e),jours=setCharAt(jours,search,"V"),jour_a_poser--,styleJourAposer(e),debug&&(console.log("position="+document.getElementById(e).offsetTop),window.scrollTo(0,document.getElementById(e).offsetTop-300)),document.getElementById("jours_box").innerHTML+="<br>"+jours,!0;return!1}function foundGap3(){console.log("foundGap2");for(var e,t=0;t<jours.length-4;t++)if("0"!=jours.charAt(t)&&"3"!=jours.charAt(t)&&"0"==jours.charAt(t+1)&&"0"==jours.charAt(t+2)&&"0"==jours.charAt(t+3)&&"0"!=jours.charAt(t+4)&&"3"!=jours.charAt(t+4))return search=t+1,e=dates[search],console.log("gap2 found "+search+" at pos "+search+" fount at "+e),document.getElementById(e).offsetTop,jours=setCharAt(jours,search,"V"),jour_a_poser--,styleJourAposer(e),search=t+2,e=dates[search],console.log("gap3 found "+search+" at pos "+search+" fount at "+e),jours=setCharAt(jours,search,"V"),jour_a_poser--,styleJourAposer(e),search=t+3,e=dates[search],console.log("gap2 found "+search+" at pos "+search+" fount at "+e),jours=setCharAt(jours,search,"V"),jour_a_poser--,styleJourAposer(e),debug&&(console.log("position="+document.getElementById(e).offsetTop),window.scrollTo(0,document.getElementById(e).offsetTop-300)),document.getElementById("jours_box").innerHTML+="<br>"+jours,!0;return!1}function foundBigWeekEnd(){for(var e=0;e<jours.length-3;e++)if(!("0"!=jours.charAt(e)||"1"!=jours.charAt(e+1)&&"2"!=jours.charAt(e+1)||"1"!=jours.charAt(e+2)&&"2"!=jours.charAt(e+2)||"2"!=jours.charAt(e+3)))return search=e,t=dates[search],console.log("bigwe found at pos "+search+" fount at "+t),jours=setCharAt(jours,search,"V"),jour_a_poser--,debug&&(console.log("position="+document.getElementById(t).offsetTop),window.scrollTo(0,document.getElementById(t).offsetTop-300)),styleJourAposer(t),document.getElementById("jours_box").innerHTML+="<br>"+jours,!0;for(var t,e=0;e<jours.length-3;e++)if(!("2"!=jours.charAt(e)||"1"!=jours.charAt(e+1)&&"2"!=jours.charAt(e+1)||"1"!=jours.charAt(e+2)&&"2"!=jours.charAt(e+2)||"0"!=jours.charAt(e+3)))return search=e+3,t=dates[search],console.log("bigwe found at pos "+search+" fount at "+t),jours=setCharAt(jours,search,"V"),jour_a_poser--,debug&&(console.log("position="+document.getElementById(t).offsetTop),window.scrollTo(0,document.getElementById(t).offsetTop-300)),styleJourAposer(t),document.getElementById("jours_box").innerHTML+="<br>"+jours,!0;return!1}function foundGap4(){console.log("chercheGap4");for(var e,t=0;t<jours.length-5;t++)if("0"!=jours.charAt(t)&&"3"!=jours.charAt(t)&&"0"==jours.charAt(t+1)&&"0"==jours.charAt(t+2)&&"0"==jours.charAt(t+3)&&"0"==jours.charAt(t+4)&&"0"!=jours.charAt(t+5)&&"3"!=jours.charAt(t+5))return search=t+1,e=dates[search],console.log("gap4 found "+search+" at pos "+search+" fount at "+e),document.getElementById(e).offsetTop,jours=setCharAt(jours,search,"V"),jour_a_poser--,styleJourAposer(e),search=t+2,e=dates[search],console.log("gap2 found "+search+" at pos "+search+" fount at "+e),jours=setCharAt(jours,search,"V"),jour_a_poser--,styleJourAposer(e),search=t+3,e=dates[search],console.log("gap2 found "+search+" at pos "+search+" fount at "+e),jours=setCharAt(jours,search,"V"),jour_a_poser--,styleJourAposer(e),search=t+4,e=dates[search],console.log("gap2 found "+search+" at pos "+search+" fount at "+e),jours=setCharAt(jours,search,"V"),jour_a_poser--,styleJourAposer(e),debug&&(console.log("position="+document.getElementById(e).offsetTop),window.scrollTo(0,document.getElementById(e).offsetTop-300)),document.getElementById("jours_box").innerHTML+="<br>"+jours,!0;return console.log("aucun Gap4"),!1}function foundGap5(){console.log("foundGap5");for(var e,t=0;t<jours.length-6;t++)if("V"==jours.charAt(t)&&"0"==jours.charAt(t+1)&&"0"==jours.charAt(t+2)&&"0"==jours.charAt(t+3)&&"0"==jours.charAt(t+4)&&"0"==jours.charAt(t+5)&&"0"!=jours.charAt(t+6)&&"3"!=jours.charAt(t+6))return search=t+1,e=dates[search],console.log("gap2 found "+search+" at pos "+search+" fount at "+e),document.getElementById(e).offsetTop,jours=setCharAt(jours,search,"V"),jour_a_poser--,styleJourAposer(e),search=t+2,e=dates[search],console.log("gap2 found "+search+" at pos "+search+" fount at "+e),jours=setCharAt(jours,search,"V"),jour_a_poser--,styleJourAposer(e),search=t+3,e=dates[search],console.log("gap2 found "+search+" at pos "+search+" fount at "+e),jours=setCharAt(jours,search,"V"),jour_a_poser--,styleJourAposer(e),search=t+4,e=dates[search],console.log("gap2 found "+search+" at pos "+search+" fount at "+e),jours=setCharAt(jours,search,"V"),jour_a_poser--,styleJourAposer(e),search=t+5,e=dates[search],console.log("gap2 found "+search+" at pos "+search+" fount at "+e),jours=setCharAt(jours,search,"V"),jour_a_poser--,styleJourAposer(e),debug&&(console.log("position="+document.getElementById(e).offsetTop),window.scrollTo(0,document.getElementById(e).offsetTop-300)),document.getElementById("jours_box").innerHTML+="<br>"+jours,!0;return!1}function all_at_once(){console.log("all_at_once jours.length="+jours.length),console.log("all_at_once "+jour_a_poser);for(var e=0,t=0,o="",r=0,e=0;e<jours.length;e++){console.log("i="+e+" jours.charAt(i)="+jours.charAt(e));for(var s=0,a=e,n=!0;n&&(console.log("j="+a+" jours.charAt(j)="+jours.charAt(a)),"3"!=jours.charAt(a))&&("0"==jours.charAt(a)&&s++,a!=jours.length-1);)jour_a_poser<=s&&"0"==jours.charAt(a+1)?(n=!1,console.log("on arrete joursAposer="+s)):(s<jour_a_poser&&console.log("goon car joursAposer<jour_a_poser"),"0"!=jours.charAt(a+1)&&console.log("goon car jours.charAt(j+1)!='0'"),a++);var l=a-e+1;console.log("duree trouvée="+l+" at pos "+e),t<l?(t=l,o=dates[e],r=e,console.log(" un max trouvé at pos i="+e)):l==t&&(o+=" "+dates[e],console.log(" un autre max trouvé at pos i="+e)),console.log(""),console.log("")}console.log("max="+t+" bestdates="+o);for(n=!0,a=r,s=0;n;)"0"==jours.charAt(a)&&(s++,console.log("on note à V. J="+a),jours=setCharAt(jours,a,"V")),s==jour_a_poser&&(n=!1),a++;for(;bonus();)bonus();jour_a_poser=0,vacation_length(),numerote_vacances(),traite_vacances_connnues(),remplit_days_to_take(),console.log("fin jour_a_poser="+jour_a_poser);var d=document.getElementById("results").offsetTop-10;window.scrollTo({top:d,behavior:"smooth"})}function changeBG(e){document.getElementById(""+e).checked?document.getElementById("td_"+e).style.backgroundColor="gray":document.getElementById("td_"+e).style.backgroundColor="white"}function computedatejs_hol(){var e,t,o,r=document.getElementById("from").value.split("/");0==format_date?(e=parseInt(r[0],10),t=parseInt(r[1],10),o=parseInt(r[2],10),setCookie("f",""+r[2]+r[1]+r[0],.3)):2==format_date?(t=parseInt(r[1],10),e=parseInt(r[2],10),o=parseInt(r[0],10),setCookie("f",""+r[0]+r[1]+r[2],.3)):(t=parseInt(r[0],10),e=parseInt(r[1],10),o=parseInt(r[2],10),setCookie("f",""+r[2]+r[0]+r[1],.3)),(datefromJS=new Date).setFullYear(o,t-1,e),datefromJS.setHours(0,0,0,0),console.log("!!!!!!!!!!!!!!!!!! datefromJS ="+datefromJS),r=document.getElementById("to").value.split("/"),0==format_date?(e=parseInt(r[0],10),t=parseInt(r[1],10),o=parseInt(r[2],10),setCookie("t",""+r[2]+r[1]+r[0],.3)):2==format_date?(t=parseInt(r[1],10),e=parseInt(r[2],10),o=parseInt(r[0],10),setCookie("t",""+r[0]+r[1]+r[2],.3)):(t=parseInt(r[0],10),e=parseInt(r[1],10),o=parseInt(r[2],10),setCookie("t",""+r[2]+r[0]+r[1],.3)),(datetoJS=new Date).setFullYear(o,t-1,e),datetoJS.setHours(0,0,0,0),console.log("!!!!!!!!!!!!!!!!!! datetoJS ="+datetoJS)}function change_a_date(){document.getElementById("jour_a_poser").value;computedatejs_hol(),document.location=lmobile?"mobile_holidays-optimizer.php":"holidays-optimizer.php"}function transformDate(e){if(8!==e.length)throw new Error("La date doit être au format ddmmyyyy avec 8 caractères.");var t=e.slice(0,2),o=e.slice(2,4);return e.slice(4)+`-${o}-`+t}function transformDateBack(e){var[e,t,o]=e.split("-");return""+o+t+e}function index_of_date(e){for(var t=transformDateBack(e),o=(found=!1,0);!found;){if(dates[o]==t)return o;o++}}function sleep(t){return new Promise(e=>setTimeout(e,t))}function methode_bt(){for(var e=document.getElementById("number_of_periods").value,t=(console.log(e),a=null,transformDate(dates[0])),o=transformDate(dates[dates.length-1]),s=(console.log("startDate="+t),console.log("endDate="+o),console.log("jour_a_poser="+jour_a_poser),[]),a=[],r=[],n=0;n<jours_initial.length;n++)"2"===jours_initial[n]&&s.push(transformDate(dates[n]));for(n=0;n<jours.length;n++)"3"===jours[n]?a.push(transformDate(dates[n])):"V"===jours[n]&&r.push(transformDate(dates[n]));console.log(`Jours fériés entre ${t} et ${o} :
`),s.forEach(e=>{console.log(e)}),console.log("\n");var{selectedIntervals:t,vacationDaysUsed:o}=optimizeVacationPeriods(t,o,s,jour_a_poser,e,a,r),e=(jour_a_poser-=o,console.log("selectedIntervals="+t),console.log("vacationDaysUsed="+o),t.forEach(e=>{console.log(`Du ${e.start} au `+e.end),console.log(`Durée totale de repos : ${e.rest_days} jours`),console.log(`Jours de congés à poser : ${e.working_days_to_take} jours`),console.log("XXXXXXXXXXXXXX scroll to "+transformDateBack(e.start)),scrollToDate(transformDateBack(e.start));for(var t=new Date(e.start),o=new Date(e.end);t<=o;){var r=t.toISOString().split("T")[0];jours=setCharAt(jours,index_of_date(r),"V"),t.setDate(t.getDate()+1)}e=getVacationDaysToTake(e.start,e.end,s,a);console.log("Dates des jours de congés à poser :"),e.forEach(e=>{console.log(e),styleJourAposer(transformDateBack(e))}),console.log("")}),console.log("à la fin jours="+jours),numerote_vacances(),traite_vacances_connnues(),remplit_days_to_take(),vacation_length(),document.getElementById("results").offsetTop-10);window.scrollTo({top:e,behavior:"smooth"})}function optimizeVacationPeriods(e,t,o,s,r,a,n){let l=generatePotentialIntervals(e,t,o,a);(l=l.filter(e=>e.working_days_to_take<=s)).sort((e,t)=>new Date(e.end)-new Date(t.end));var d=l.length;var i=[];for(let t=0;t<=d;t++){i[t]=[];for(let e=0;e<=s;e++)i[t][e]={numPeriods:0,totalRestDays:0,vacation_days:0,intervals:[]}}for(let r=1;r<=d;r++){var u=l[r-1],c=u.working_days_to_take,m=u.rest_days;for(let o=0;o<=s;o++){var _,g,y,p,h=i[r-1][o];let e=null;c<=o&&(g=(_=(0<=(_=function(t){for(let e=t-1;0<=e;e--)if(new Date(l[e].end)<new Date(l[t].start))return e;return-1}(r-1))?i[_+1]:i[0])[o-c]).numPeriods+1,y=_.totalRestDays+m,(p=_.vacation_days+c)<=s)&&(e={numPeriods:g,totalRestDays:y,vacation_days:p,intervals:_.intervals.concat(r-1)});let t;t=e&&(e.numPeriods>h.numPeriods||e.numPeriods===h.numPeriods&&(e.vacation_days>h.vacation_days||e.vacation_days===h.vacation_days&&e.totalRestDays>h.totalRestDays))?e:h,i[r][o]=t}}let f=null;for(let e=s;0<=e;e--){var j=i[d][e];j.vacation_days===s&&j.numPeriods<=r&&(null===f||j.numPeriods>f.numPeriods||j.numPeriods===f.numPeriods&&j.totalRestDays>f.totalRestDays)&&(f=j)}if(!f)for(let e=s;0<=e;e--){var b=i[d][e];b.numPeriods<=r&&(null===f||b.vacation_days>f.vacation_days||b.vacation_days===f.vacation_days&&b.numPeriods>f.numPeriods||b.vacation_days===f.vacation_days&&b.numPeriods===f.numPeriods&&b.totalRestDays>f.totalRestDays)&&(f=b)}return f&&0!==f.numPeriods?(e=f.numPeriods,{selectedIntervals:f.intervals.map(e=>l[e]),vacationDaysUsed:f.vacation_days,periodsUsed:e}):{selectedIntervals:[],vacationDaysUsed:0,periodsUsed:0}}function generatePotentialIntervals(e,o,r,s,a=20){for(var n=[],l=new Date(e);l<=new Date(o);){var t=formatDateX(l);if(!isWeekend(l)&&!r.includes(t)&&!s.includes(t))for(let t=1;t<=a;t++){var d=new Date(l);if(d.setDate(d.getDate()+t-1),d>new Date(o))break;let e=!1;for(var i,u,c=new Date(l);c<=d;){var m=formatDateX(c);if(s.includes(m)){e=!0;break}c.setDate(c.getDate()+1)}e||(i=getWorkingDays(formatDateX(l),formatDateX(d),r,s),u=countTotalDays(formatDateX(l),formatDateX(d)),0<i&&n.push({start:formatDateX(l),end:formatDateX(d),rest_days:u,working_days_to_take:i}))}l.setDate(l.getDate()+1)}return n}function isWeekend(e){e=e.getDay();return 0===e||6===e}function getWorkingDays(e,t,o,r){let s=0;for(var a=new Date(e);a<=new Date(t);){var n=formatDateX(a);isWeekend(a)||o.includes(n)||r.includes(n)||s++,a.setDate(a.getDate()+1)}return s}function formatDateX(e){return e.getFullYear()+`-${String(e.getMonth()+1).padStart(2,"0")}-`+String(e.getDate()).padStart(2,"0")}function countTotalDays(e,t){e=new Date(e),t=new Date(t);return Math.floor((t-e)/864e5)+1}function getVacationDaysToTake(e,t,o,r){for(var s=[],a=new Date(e),n=new Date(t);a<=n;){var l=formatDateX(a);isWeekend(a)||o.includes(l)||r.includes(l)||s.push(l),a.setDate(a.getDate()+1)}return s}