PageSourceSearch

https://www.bison-fute.gouv.fr/extensions/bisonfute/_js/bf_jsaccueil_web.js

js bison-fute.gouv.fr collected 2026-10-01 10:43:19 UTC 234,631 bytes, 5,298 lines download raw bytes

1!function(i){"use strict";"function"==typeof define&&define.amd?define(["jquery"],i):"undefined"!=typeof exports?module.exports=i(require("jquery")):i(jQuery)}(function(i){"use strict";var e=window.Slick||{};(e=function(){var e=0;return function(t,o){var s,n=this;n.defaults={accessibility:!0,adaptiveHeight:!1,appendArrows:i(t),appendDots:i(t),arrows:!0,asNavFor:null,prevArrow:'<button class="slick-prev" aria-label="Previous" type="button">Previous</button>',nextArrow:'<button class="slick-next" aria-label="Next" type="button">Next</button>',autoplay:!1,autoplaySpeed:3e3,centerMode:!1,centerPadding:"50px",cssEase:"ease",customPaging:function(e,t){return i('<button type="button" />').text(t+1)},dots:!1,dotsClass:"slick-dots",draggable:!0,easing:"linear",edgeFriction:.35,fade:!1,focusOnSelect:!1,focusOnChange:!1,infinite:!0,initialSlide:0,lazyLoad:"ondemand",mobileFirst:!1,pauseOnHover:!0,pauseOnFocus:!0,pauseOnDotsHover:!1,respondTo:"window",responsive:null,rows:1,rtl:!1,slide:"",slidesPerRow:1,slidesToShow:1,slidesToScroll:1,speed:500,swipe:!0,swipeToSlide:!1,touchMove:!0,touchThreshold:5,useCSS:!0,useTransform:!0,variableWidth:!1,vertical:!1,verticalSwiping:!1,waitForAnimate:!0,zIndex:1e3},n.initials={animating:!1,dragging:!1,autoPlayTimer:null,currentDirection:0,currentLeft:null,currentSlide:0,direction:1,$dots:null,listWidth:null,listHeight:null,loadIndex:0,$nextArrow:null,$prevArrow:null,scrolling:!1,slideCount:null,slideWidth:null,$slideTrack:null,$slides:null,sliding:!1,slideOffset:0,swipeLeft:null,swiping:!1,$list:null,touchObject:{},transformsEnabled:!1,unslicked:!1},i.extend(n,n.initials),n.activeBreakpoint=null,n.animType=null,n.animProp=null,n.breakpoints=[],n.breakpointSettings=[],n.cssTransitions=!1,n.focussed=!1,n.interrupted=!1,n.hidden="hidden",n.paused=!0,n.positionProp=null,n.respondTo=null,n.rowCount=1,n.shouldClick=!0,n.$slider=i(t),n.$slidesCache=null,n.transformType=null,n.transitionType=null,n.visibilityChange="visibilitychange",n.windowWidth=0,n.windowTimer=null,s=i(t).data("slick")||{},n.options=i.extend({},n.defaults,o,s),n.currentSlide=n.options.initialSlide,n.originalSettings=n.options,void 0!==document.mozHidden?(n.hidden="mozHidden",n.visibilityChange="mozvisibilitychange"):void 0!==document.webkitHidden&&(n.hidden="webkitHidden",n.visibilityChange="webkitvisibilitychange"),n.autoPlay=i.proxy(n.autoPlay,n),n.autoPlayClear=i.proxy(n.autoPlayClear,n),n.autoPlayIterator=i.proxy(n.autoPlayIterator,n),n.changeSlide=i.proxy(n.changeSlide,n),n.clickHandler=i.proxy(n.clickHandler,n),n.selectHandler=i.proxy(n.selectHandler,n),n.setPosition=i.proxy(n.setPosition,n),n.swipeHandler=i.proxy(n.swipeHandler,n),n.dragHandler=i.proxy(n.dragHandler,n),n.keyHandler=i.proxy(n.keyHandler,n),n.instanceUid=e++,n.htmlExpr=/^(?:\s*(<[\w\W]+>)[^>]*)$/,n.registerBreakpoints(),n.init(!0)}}()).prototype.activateADA=function(){this.$slideTrack.find(".slick-active").attr({"aria-hidden":"false"}).find("a, input, button, select").attr({tabindex:"0"})},e.prototype.addSlide=e.prototype.slickAdd=function(e,t,o){var s=this;if("boolean"==typeof t)o=t,t=null;else if(t<0||t>=s.slideCount)return!1;s.unload(),"number"==typeof t?0===t&&0===s.$slides.length?i(e).appendTo(s.$slideTrack):o?i(e).insertBefore(s.$slides.eq(t)):i(e).insertAfter(s.$slides.eq(t)):!0===o?i(e).prependTo(s.$slideTrack):i(e).appendTo(s.$slideTrack),s.$slides=s.$slideTrack.children(this.options.slide),s.$slideTrack.children(this.options.slide).detach(),s.$slideTrack.append(s.$slides),s.$slides.each(function(e,t){i(t).attr("data-slick-index",e)}),s.$slidesCache=s.$slides,s.reinit()},e.prototype.animateHeight=function(){var i=this;if(1===i.options.slidesToShow&&!0===i.options.adaptiveHeight&&!1===i.options.vertical){var e=i.$slides.eq(i.currentSlide).outerHeight(!0);i.$list.animate({height:e},i.options.speed)}},e.prototype.animateSlide=function(e,t){var o={},s=this;s.animateHeight(),!0===s.options.rtl&&!1===s.options.vertical&&(e=-e),!1===s.transformsEnabled?!1===s.options.vertical?s.$slideTrack.animate({left:e},s.options.speed,s.options.easing,t):s.$slideTrack.animate({top:e},s.options.speed,s.options.easing,t):!1===s.cssTransitions?(!0===s.options.rtl&&(s.currentLeft=-s.currentLeft),i({animStart:s.currentLeft}).animate({animStart:e},{duration:s.options.speed,easing:s.options.easing,step:function(i){i=Math.ceil(i),!1===s.options.vertical?(o[s.animType]="translate("+i+"px, 0px)",s.$slideTrack.css(o)):(o[s.animType]="translate(0px,"+i+"px)",s.$slideTrack.css(o))},complete:function(){t&&t.call()}})):(s.applyTransition(),e=Math.ceil(e),!1===s.options.vertical?o[s.animType]="translate3d("+e+"px, 0px, 0px)":o[s.animType]="translate3d(0px,"+e+"px, 0px)",s.$slideTrack.css(o),t&&setTimeout(function(){s.disableTransition(),t.call()},s.options.speed))},e.prototype.getNavTarget=function(){var e=this,t=e.options.asNavFor;return t&&null!==t&&(t=i(t).not(e.$slider)),t},e.prototype.asNavFor=function(e){var t=this.getNavTarget();null!==t&&"object"==typeof t&&t.each(function(){var t=i(this).slick("getSlick");t.unslicked||t.slideHandler(e,!0)})},e.prototype.applyTransition=function(i){var e=this,t={};!1===e.options.fade?t[e.transitionType]=e.transformType+" "+e.options.speed+"ms "+e.options.cssEase:t[e.transitionType]="opacity "+e.options.speed+"ms "+e.options.cssEase,!1===e.options.fade?e.$slideTrack.css(t):e.$slides.eq(i).css(t)},e.prototype.autoPlay=function(){var i=this;i.autoPlayClear(),i.slideCount>i.options.slidesToShow&&(i.autoPlayTimer=setInterval(i.autoPlayIterator,i.options.autoplaySpeed))},e.prototype.autoPlayClear=function(){var i=this;i.autoPlayTimer&&clearInterval(i.autoPlayTimer)},e.prototype.autoPlayIterator=function(){var i=this,e=i.currentSlide+i.options.slidesToScroll;i.paused||i.interrupted||i.focussed||(!1===i.options.infinite&&(1===i.direction&&i.currentSlide+1===i.slideCount-1?i.direction=0:0===i.direction&&(e=i.currentSlide-i.options.slidesToScroll,i.currentSlide-1==0&&(i.direction=1))),i.slideHandler(e))},e.prototype.buildArrows=function(){var e=this;!0===e.options.arrows&&(e.$prevArrow=i(e.options.prevArrow).addClass("slick-arrow"),e.$nextArrow=i(e.options.nextArrow).addClass("slick-arrow"),e.slideCount>e.options.slidesToShow?(e.$prevArrow.removeClass("slick-hidden").removeAttr("aria-hidden tabindex"),e.$nextArrow.removeClass("slick-hidden").removeAttr("aria-hidden tabindex"),e.htmlExpr.test(e.options.prevArrow)&&e.$prevArrow.prependTo(e.options.appendArrows),e.htmlExpr.test(e.options.nextArrow)&&e.$nextArrow.appendTo(e.options.appendArrows),!0!==e.options.infinite&&e.$prevArrow.addClass("slick-disabled").attr("aria-disabled","true")):e.$prevArrow.add(e.$nextArrow).addClass("slick-hidden").attr({"aria-disabled":"true",tabindex:"-1"}))},e.prototype.buildDots=function(){var e,t,o=this;if(!0===o.options.dots){for(o.$slider.addClass("slick-dotted"),t=i("<ul />").addClass(o.options.dotsClass),e=0;e<=o.getDotCount();e+=1)t.append(i("<li />").append(o.options.customPaging.call(this,o,e)));o.$dots=t.appendTo(o.options.appendDots),o.$dots.find("li").first().addClass("slick-active")}},e.prototype.buildOut=function(){var e=this;e.$slides=e.$slider.children(e.options.slide+":not(.slick-cloned)").addClass("slick-slide"),e.slideCount=e.$slides.length,e.$slides.each(function(e,t){i(t).attr("data-slick-index",e).data("originalStyling",i(t).attr("style")||"")}),e.$slider.addClass("slick-slider"),e.$slideTrack=0===e.slideCount?i('<div class="slick-track"/>').appendTo(e.$slider):e.$slides.wrapAll('<div class="slick-track"/>').parent(),e.$list=e.$slideTrack.wrap('<div class="slick-list"/>').parent(),e.$slideTrack.css("opacity",0),!0!==e.options.centerMode&&!0!==e.options.swipeToSlide||(e.options.slidesToScroll=1),i("img[data-lazy]",e.$slider).not("[src]").addClass("slick-loading"),e.setupInfinite(),e.buildArrows(),e.buildDots(),e.updateDots(),e.setSlideClasses("number"==typeof e.currentSlide?e.currentSlide:0),!0===e.options.draggable&&e.$list.addClass("draggable")},e.prototype.buildRows=function(){var i,e,t,o,s,n,r,l=this;if(o=document.createDocumentFragment(),n=l.$slider.children(),l.o
1ptions.rows>1){for(r=l.options.slidesPerRow*l.options.rows,s=Math.ceil(n.length/r),i=0;i<s;i++){var d=document.createElement("div");for(e=0;e<l.options.rows;e++){var a=document.createElement("div");for(t=0;t<l.options.slidesPerRow;t++){var c=i*r+(e*l.options.slidesPerRow+t);n.get(c)&&a.appendChild(n.get(c))}d.appendChild(a)}o.appendChild(d)}l.$slider.empty().append(o),l.$slider.children().children().children().css({width:100/l.options.slidesPerRow+"%",display:"inline-block"})}},e.prototype.checkResponsive=function(e,t){var o,s,n,r=this,l=!1,d=r.$slider.width(),a=window.innerWidth||i(window).width();if("window"===r.respondTo?n=a:"slider"===r.respondTo?n=d:"min"===r.respondTo&&(n=Math.min(a,d)),r.options.responsive&&r.options.responsive.length&&null!==r.options.responsive){s=null;for(o in r.breakpoints)r.breakpoints.hasOwnProperty(o)&&(!1===r.originalSettings.mobileFirst?n<r.breakpoints[o]&&(s=r.breakpoints[o]):n>r.breakpoints[o]&&(s=r.breakpoints[o]));null!==s?null!==r.activeBreakpoint?(s!==r.activeBreakpoint||t)&&(r.activeBreakpoint=s,"unslick"===r.breakpointSettings[s]?r.unslick(s):(r.options=i.extend({},r.originalSettings,r.breakpointSettings[s]),!0===e&&(r.currentSlide=r.options.initialSlide),r.refresh(e)),l=s):(r.activeBreakpoint=s,"unslick"===r.breakpointSettings[s]?r.unslick(s):(r.options=i.extend({},r.originalSettings,r.breakpointSettings[s]),!0===e&&(r.currentSlide=r.options.initialSlide),r.refresh(e)),l=s):null!==r.activeBreakpoint&&(r.activeBreakpoint=null,r.options=r.originalSettings,!0===e&&(r.currentSlide=r.options.initialSlide),r.refresh(e),l=s),e||!1===l||r.$slider.trigger("breakpoint",[r,l])}},e.prototype.changeSlide=function(e,t){var o,s,n,r=this,l=i(e.currentTarget);switch(l.is("a")&&e.preventDefault(),l.is("li")||(l=l.closest("li")),n=r.slideCount%r.options.slidesToScroll!=0,o=n?0:(r.slideCount-r.currentSlide)%r.options.slidesToScroll,e.data.message){case"previous":s=0===o?r.options.slidesToScroll:r.options.slidesToShow-o,r.slideCount>r.options.slidesToShow&&r.slideHandler(r.currentSlide-s,!1,t);break;case"next":s=0===o?r.options.slidesToScroll:o,r.slideCount>r.options.slidesToShow&&r.slideHandler(r.currentSlide+s,!1,t);break;case"index":var d=0===e.data.index?0:e.data.index||l.index()*r.options.slidesToScroll;r.slideHandler(r.checkNavigable(d),!1,t),l.children().trigger("focus");break;default:return}},e.prototype.checkNavigable=function(i){var e,t;if(e=this.getNavigableIndexes(),t=0,i>e[e.length-1])i=e[e.length-1];else for(var o in e){if(i<e[o]){i=t;break}t=e[o]}return i},e.prototype.cleanUpEvents=function(){var e=this;e.options.dots&&null!==e.$dots&&(i("li",e.$dots).off("click.slick",e.changeSlide).off("mouseenter.slick",i.proxy(e.interrupt,e,!0)).off("mouseleave.slick",i.proxy(e.interrupt,e,!1)),!0===e.options.accessibility&&e.$dots.off("keydown.slick",e.keyHandler)),e.$slider.off("focus.slick blur.slick"),!0===e.options.arrows&&e.slideCount>e.options.slidesToShow&&(e.$prevArrow&&e.$prevArrow.off("click.slick",e.changeSlide),e.$nextArrow&&e.$nextArrow.off("click.slick",e.changeSlide),!0===e.options.accessibility&&(e.$prevArrow&&e.$prevArrow.off("keydown.slick",e.keyHandler),e.$nextArrow&&e.$nextArrow.off("keydown.slick",e.keyHandler))),e.$list.off("touchstart.slick mousedown.slick",e.swipeHandler),e.$list.off("touchmove.slick mousemove.slick",e.swipeHandler),e.$list.off("touchend.slick mouseup.slick",e.swipeHandler),e.$list.off("touchcancel.slick mouseleave.
1slick",e.swipeHandler),e.$list.off("click.slick",e.clickHandler),i(document).off(e.visibilityChange,e.visibility),e.cleanUpSlideEvents(),!0===e.options.accessibility&&e.$list.off("keydown.slick",e.keyHandler),!0===e.options.focusOnSelect&&i(e.$slideTrack).children().off("click.slick",e.selectHandler),i(window).off("orientationchange.slick.slick-"+e.instanceUid,e.orientationChange),i(window).off("resize.slick.slick-"+e.instanceUid,e.resize),i("[draggable!=true]",e.$slideTrack).off("dragstart",e.preventDefault),i(window).off("load.slick.slick-"+e.instanceUid,e.setPosition)},e.prototype.cleanUpSlideEvents=function(){var e=this;e.$list.off("mouseenter.slick",i.proxy(e.interrupt,e,!0)),e.$list.off("mouseleave.slick",i.proxy(e.interrupt,e,!1))},e.prototype.cleanUpRows=function(){var i,e=this;e.options.rows>1&&((i=e.$slides.children().children()).removeAttr("style"),e.$slider.empty().append(i))},e.prototype.clickHandler=function(i){!1===this.shouldClick&&(i.stopImmediatePropagation(),i.stopPropagation(),i.preventDefault())},e.prototype.destroy=function(e){var t=this;t.autoPlayClear(),t.touchObject={},t.cleanUpEvents(),i(".slick-cloned",t.$slider).detach(),t.$dots&&t.$dots.remove(),t.$prevArrow&&t.$prevArrow.length&&(t.$prevArrow.removeClass("slick-disabled slick-arrow slick-hidden").removeAttr("aria-hidden aria-disabled tabindex").css("display",""),t.htmlExpr.test(t.options.prevArrow)&&t.$prevArrow.remove()),t.$nextArrow&&t.$nextArrow.length&&(t.$nextArrow.removeClass("slick-disabled slick-arrow slick-hidden").removeAttr("aria-hidden aria-disabled tabindex").css("display",""),t.htmlExpr.test(t.options.nextArrow)&&t.$nextArrow.remove()),t.$slides&&(t.$slides.removeClass("slick-slide slick-active slick-center slick-visible slick-current").removeAttr("aria-hidden").removeAttr("data-slick-index").each(function(){i(this).attr("style",i(this).data("originalStyling"))}),t.$slideTrack.children(this.options.slide).detach(),t.$slideTrack.detach(),t.$list.detach(),t.$slider.append(t.$slides)),t.cleanUpRows(),t.$slider.removeClass("slick-slider"),t.$slider.removeClass("slick-initialized"),t.$slider.removeClass("slick-dotted"),t.unslicked=!0,e||t.$slider.trigger("destroy",[t])},e.prototype.disableTransition=function(i){var e=this,t={};t[e.transitionType]="",!1===e.options.fade?e.$slideTrack.css(t):e.$slides.eq(i).css(t)},e.prototype.fadeSlide=function(i,e){var t=this;!1===t.cssTransitions?(t.$slides.eq(i).css({zIndex:t.options.zIndex}),t.$slides.eq(i).animate({opacity:1},t.options.speed,t.options.easing,e)):(t.applyTransition(i),t.$slides.eq(i).css({opacity:1,zIndex:t.options.zIndex}),e&&setTimeout(function(){t.disableTransition(i),e.call()},t.options.speed))},e.prototype.fadeSlideOut=function(i){var e=this;!1===e.cssTransitions?e.$slides.eq(i).animate({opacity:0,zIndex:e.options.zIndex-2},e.options.speed,e.options.easing):(e.applyTransition(i),e.$slides.eq(i).css({opacity:0,zIndex:e.options.zIndex-2}))},e.prototype.filterSlides=e.prototype.slickFilter=function(i){var e=this;null!==i&&(e.$slidesCache=e.$slides,e.unload(),e.$slideTrack.children(this.options.slide).detach(),e.$slidesCache.filter(i).appendTo(e.$slideTrack),e.reinit())},e.prototype.focusHandler=function(){var e=this;e.$slider.off("focus.slick blur.slick").on("focus.slick blur.slick","*",function(t){t.stopImmediatePropagation();var o=i(this);setTimeout(function(){e.options.pauseOnFocus&&(e.focussed=o.is(":focus"),e.autoPlay())},0)})},e.prototype.getCurrent=e.prototype.slickCurrentSlide=function(){return this.currentSlide},e.prototype.getDotCount=function(){var i=this,e=0,t=0,o=0;if(!0===i.options.infinite)if(i.slideCount<=i.options.slidesToShow)++o;else for(;e<i.slideCount;)++o,e=t+i.options.slidesToScroll,t+=i.options.slidesToScroll<=i.options.slidesToShow?i.options.slidesToScroll:i.options.slidesToShow;else if(!0===i.options.centerMode)o=i.slideCount;else if(i.options.asNavFor)for(;e<i.slideCount;)++o,e=t+i.options.slidesToScroll,t+=i.options.slidesToScroll<=i.options.slidesToShow?i.options.slidesToScroll:i.options.slidesToShow;else o=1+Math.ceil((i.slideCount-i.options.slidesToShow)/i.options.slidesToScroll);return o-1},e.prototype.getLeft=function(i){var e,t,o,s,n=this,r=0;return n.slideOffset=0,t=n.$slides.first().outerHeight(!0),!0===n.options.infinite?(n.slideCount>n.options.slidesToShow&&(n.slideOffset=n.slideWidth*n.options.slidesToShow*-1,s=-1,!0===n.options.vertical&&!0===n.options.centerMode&&(2===n.options.slidesToShow?s=-1.5:1===n.options.slidesToShow&&(s=-2)),r=t*n.options.slidesToShow*s),n.slideCount%n.options.slidesToScroll!=0&&i+n.options.slidesToScroll>n.slideCount&&n.slideCount>n.options.slidesToShow&&(i>n.slideCount?(n.slideOffset=(n.options.slidesToShow-(i-n.slideCount))*n.slideWidth*-1,r=(n.options.slidesToShow-(i-n.slideCount))*t*-1):(n.slideOffset=n.slideCount%n.options.slidesToScroll*n.slideWidth*-1,r=n.slideCount%n.options.slidesToScroll*t*-1))):i+n.options.slidesToShow>n.slideCount&&(n.slideOffset=(i+n.options.slidesToShow-n.slideCount)*n.slideWidth,r=(i+n.options.slidesToShow-n.slideCount)*t),n.slideCount<=n.options.slidesToShow&&(n.slideOffset=0,r=0),!0===n.options.centerMode&&n.slideCount<=n.options.slidesToShow?n.slideOffset=n.slideWidth*Math.floor(n.options.slidesToShow)/2-n.slideWidth*n.slideCount/2:!0===n.options.centerMode&&!0===n.options.infinite?n.slideOffset+=n.slideWidth*Math.floor(n.options.slidesToShow/2)-n.slideWidth:!0===n.options.centerMode&&(n.slideOffset=0,n.slideOffset+=n.slideWidth*Math.floor(n.options.slidesToShow/2)),e=!1===n.options.vertical?i*n.slideWidth*-1+n.slideOffset:i*t*-1+r,!0===n.options.variableWidth&&(o=n.slideCount<=n.options.slidesToShow||!1===n.options.infinite?n.$slideTrack.children(".slick-slide").eq(i):n.$slideTrack.children(".slick-slide").eq(i+n.options.slidesToShow),e=!0===n.options.rtl?o[0]?-1*(n.$slideTrack.width()-o[0].offsetLeft-o.width()):0:o[0]?-1*o[0].offsetLeft:0,!0===n.options.centerMode&&(o=n.slideCount<=n.options.slidesToShow||!1===n.options.infinite?n.$slideTrack.children(".slick-slide").eq(i):n.$slideTrack.children(".slick-slide").eq(i+n.options.slidesToShow+1),e=!0===n.options.rtl?o[0]?-1*(n.$slideTrack.width()-o[0].offsetLeft-o.width()):0:o[0]?-1*o[0].offsetLeft:0,e+=(n.$list.width()-o.outerWidth())/2)),e},e.prototype.getOption=e.prototype.slickGetOption=function(i){return this.options[i]},e.prototype.getNavigableIndexes=function(){var i,e=this,t=0,o=0,s=[];for(!1===e.options.infinite?i=e.slideCount:(t=-1*e.options.slidesToScroll,o=-1*e.options.slidesToScroll,i=2*e.slideCount);t<i;)s.push(t),t=o+e.options.slidesToScroll,o+=e.options.slidesToScroll<=e.options.slidesToShow?e.options.slidesToScroll:e.options.slidesToShow;return s},e.prototype.getSlick=function(){return this},e.prototype.getSlideCount=function(){var e,t,o=this;return t=!0===o.options.centerMode?o.slideWidth*Math.floor(o.options.slidesToShow/2):0,!0===o.options.swipeToSlide?(o.$slideTrack.find(".slick-slide").each(function(s,n){if(n.offsetLeft-t+i(n).outerWidth()/2>-1*o.swipeLeft)return e=n,!1}),Math.abs(i(e).attr("data-slick-index")-o.currentSlide)||1):o.options.slidesToScroll},e.prototype.goTo=e.prototype.slickGoTo=function(i,e){this.changeSlide({data:{message:"index",index:
1parseInt(i)}},e)},e.prototype.init=function(e){var t=this;i(t.$slider).hasClass("slick-initialized")||(i(t.$slider).addClass("slick-initialized"),t.buildRows(),t.buildOut(),t.setProps(),t.startLoad(),t.loadSlider(),t.initializeEvents(),t.updateArrows(),t.updateDots(),t.checkResponsive(!0),t.focusHandler()),e&&t.$slider.trigger("init",[t]),!0===t.options.accessibility&&t.initADA(),t.options.autoplay&&(t.paused=!1,t.autoPlay())},e.prototype.initADA=function(){var e=this,t=Math.ceil(e.slideCount/e.options.slidesToShow),o=e.getNavigableIndexes().filter(function(i){return i>=0&&i<e.slideCount});e.$slides.add(e.$slideTrack.find(".slick-cloned")).attr({"aria-hidden":"true",tabindex:"-1"}).find("a, input, button, select").attr({tabindex:"-1"}),null!==e.$dots&&(e.$slides.not(e.$slideTrack.find(".slick-cloned")).each(function(t){var s=o.indexOf(t);i(this).attr({role:"tabpanel",id:"slick-slide"+e.instanceUid+t,tabindex:-1}),-1!==s&&i(this).attr({"aria-describedby":"slick-slide-control"+e.instanceUid+s})}),e.$dots.attr("role","tablist").find("li").each(function(s){var n=o[s];i(this).attr({role:"presentation"}),i(this).find("button").first().attr({role:"tab",id:"slick-slide-control"+e.instanceUid+s,"aria-controls":"slick-slide"+e.instanceUid+n,"aria-label":s+1+" of "+t,"aria-selected":null,tabindex:"-1"})}).eq(e.currentSlide).find("button").attr({"aria-selected":"true",tabindex:"0"}).end());for(var s=e.currentSlide,n=s+e.options.slidesToShow;s<n;s++)e.$slides.eq(s).attr("tabindex",0);e.activateADA()},e.prototype.initArrowEvents=function(){var i=this;!0===i.options.arrows&&i.slideCount>i.options.slidesToShow&&(i.$prevArrow.off("click.slick").on("click.slick",{message:"previous"},i.changeSlide),i.$nextArrow.off("click.slick").on("click.slick",{message:"next"},i.changeSlide),!0===i.options.accessibility&&(i.$prevArrow.on("keydown.slick",i.keyHandler),i.$nextArrow.on("keydown.slick",i.keyHandler)))},e.prototype.initDotEvents=function(){var e=this;!0===e.options.dots&&(i("li",e.$dots).on("click.slick",{message:"index"},e.changeSlide),!0===e.options.accessibility&&e.$dots.on("keydown.slick",e.keyHandler)),!0===e.options.dots&&!0===e.options.pauseOnDotsHover&&i("li",e.$dots).on("mouseenter.slick",i.proxy(e.interrupt,e,!0)).on("mouseleave.slick",i.proxy(e.interrupt,e,!1))},e.prototype.initSlideEvents=function(){var e=this;e.options.pauseOnHover&&(e.$list.on("mouseenter.slick",i.proxy(e.interrupt,e,!0)),e.$list.on("mouseleave.slick",i.proxy(e.interrupt,e,!1)))},e.prototype.initializeEvents=function(){var e=this;e.initArrowEvents(),e.initDotEvents(),e.initSlideEvents(),e.$list.on("touchstart.slick mousedown.slick",{action:"start"},e.swipeHandler),e.$list.on("touchmove.slick mousemove.slick",{action:"move"},e.swipeHandler),e.$list.on("touchend.slick mouseup.slick",{action:"end"}
1,e.swipeHandler),e.$list.on("touchcancel.slick mouseleave.slick",{action:"end"},e.swipeHandler),e.$list.on("click.slick",e.clickHandler),i(document).on(e.visibilityChange,i.proxy(e.visibility,e)),!0===e.options.accessibility&&e.$list.on("keydown.slick",e.keyHandler),!0===e.options.focusOnSelect&&i(e.$slideTrack).children().on("click.slick",e.selectHandler),i(window).on("orientationchange.slick.slick-"+e.instanceUid,i.proxy(e.orientationChange,e)),i(window).on("resize.slick.slick-"+e.instanceUid,i.proxy(e.resize,e)),i("[draggable!=true]",e.$slideTrack).on("dragstart",e.preventDefault),i(window).on("load.slick.slick-"+e.instanceUid,e.setPosition),i(e.setPosition)},e.prototype.initUI=function(){var i=this;!0===i.options.arrows&&i.slideCount>i.options.slidesToShow&&(i.$prevArrow.show(),i.$nextArrow.show()),!0===i.options.dots&&i.slideCount>i.options.slidesToShow&&i.$dots.show()},e.prototype.keyHandler=function(i){var e=this;i.target.tagName.match("TEXTAREA|INPUT|SELECT")||(37===i.keyCode&&!0===e.options.accessibility?e.changeSlide({data:{message:!0===e.options.rtl?"next":"previous"}}):39===i.keyCode&&!0===e.options.accessibility&&e.changeSlide({data:{message:!0===e.options.rtl?"previous":"next"}}))},e.prototype.lazyLoad=function(){function e(e){i("img[data-lazy]",e).each(function(){var e=i(this),t=i(this).attr("data-lazy"),o=i(this).attr("data-srcset"),s=i(this).attr("data-sizes")||n.$slider.attr("data-sizes"),r=document.createElement("img");r.onload=function(){e.animate({opacity:0}
vendor: 5,619 bytes, line 1
1,100,function(){o&&(e.attr("srcset",o),s&&e.attr("sizes",s)),e.attr("src",t).animate({opacity:1},200,function(){e.removeAttr("data-lazy data-srcset data-sizes").removeClass("slick-loading")}),n.$slider.trigger("lazyLoaded",[n,e,t])})},r.onerror=function(){e.removeAttr("data-lazy").removeClass("slick-loading").addClass("slick-lazyload-error"),n.$slider.trigger("lazyLoadError",[n,e,t])},r.src=t})}var t,o,s,n=this;if(!0===n.options.centerMode?!0===n.options.infinite?s=(o=n.currentSlide+(n.options.slidesToShow/2+1))+n.options.slidesToShow+2:(o=Math.max(0,n.currentSlide-(n.options.slidesToShow/2+1)),s=n.options.slidesToShow/2+1+2+n.currentSlide):(o=n.options.infinite?n.options.slidesToShow+n.currentSlide:n.currentSlide,s=Math.ceil(o+n.options.slidesToShow),!0===n.options.fade&&(o>0&&o--,s<=n.slideCount&&s++)),t=n.$slider.find(".slick-slide").slice(o,s),"anticipated"===n.options.lazyLoad)for(var r=o-1,l=s,d=n.$slider.find(".slick-slide"),a=0;a<n.options.slidesToScroll;a++)r<0&&(r=n.slideCount-1),t=(t=t.add(d.eq(r))).add(d.eq(l)),r--,l++;e(t),n.slideCount<=n.options.slidesToShow?e(n.$slider.find(".slick-slide")):n.currentSlide>=n.slideCount-n.options.slidesToShow?e(n.$slider.find(".slick-cloned").slice(0,n.options.slidesToShow)):0===n.currentSlide&&e(n.$slider.find(".slick-cloned").slice(-1*n.options.slidesToShow))},e.prototype.loadSlider=function(){var i=this;i.setPosition(),i.$slideTrack.css({opacity:1}),i.$slider.removeClass("slick-loading"),i.initUI(),"progressive"===i.options.lazyLoad&&i.progressiveLazyLoad()},e.prototype.next=e.prototype.slickNext=function(){this.changeSlide({data:{message:"next"}})},e.prototype.orientationChange=function(){var i=this;i.checkResponsive(),i.setPosition()},e.prototype.pause=e.prototype.slickPause=function(){var i=this;i.autoPlayClear(),i.paused=!0},e.prototype.play=e.prototype.slickPlay=function(){var i=this;i.autoPlay(),i.options.autoplay=!0,i.paused=!1,i.focussed=!1,i.interrupted=!1},e.prototype.postSlide=function(e){var t=this;t.unslicked||(t.$slider.trigger("afterChange",[t,e]),t.animating=!1,t.slideCount>t.options.slidesToShow&&t.setPosition(),t.swipeLeft=null,t.options.autoplay&&t.autoPlay(),!0===t.options.accessibility&&(t.initADA(),t.options.focusOnChange&&i(t.$slides.get(t.currentSlide)).attr("tabindex",0).focus()))},e.prototype.prev=e.prototype.slickPrev=function(){this.changeSlide({data:{message:"previous"}})},e.prototype.preventDefault=function(i){i.preventDefault()},e.prototype.progressiveLazyLoad=function(e){e=e||1;var t,o,s,n,r,l=this,d=i("img[data-lazy]",l.$slider);d.length?(t=d.first(),o=t.attr("data-lazy"),s=t.attr("data-srcset"),n=t.attr("data-sizes")||l.$slider.attr("data-sizes"),(r=document.createElement("img")).onload=function(){s&&(t.attr("srcset",s),n&&t.attr("sizes",n)),t.attr("src",o).removeAttr("data-lazy data-srcset data-sizes").removeClass("slick-loading"),!0===l.options.adaptiveHeight&&l.setPosition(),l.$slider.trigger("lazyLoaded",[l,t,o]),l.progressiveLazyLoad()},r.onerror=function(){e<3?setTimeout(function(){l.progressiveLazyLoad(e+1)},500):(t.removeAttr("data-lazy").removeClass("slick-loading").addClass("slick-lazyload-error"),l.$slider.trigger("lazyLoadError",[l,t,o]),l.progressiveLazyLoad())},r.src=o):l.$slider.trigger("allImagesLoaded",[l])},e.prototype.refresh=function(e){var t,o,s=this;o=s.slideCount-s.options.slidesToShow,!s.options.infinite&&s.currentSlide>o&&(s.currentSlide=o),s.slideCount<=s.options.slidesToShow&&(s.currentSlide=0),t=s.currentSlide,s.destroy(!0),i.extend(s,s.initials,{currentSlide:t}),s.init(),e||s.changeSlide({data:{message:"index",index:t}},!1)},e.prototype.registerBreakpoints=function(){var e,t,o,s=this,n=s.options.responsive||null;if("array"===i.type(n)&&n.length){s.respondTo=s.options.respondTo||"window";for(e in n)if(o=s.breakpoints.length-1,n.hasOwnProperty(e)){for(t=n[e].breakpoint;o>=0;)s.breakpoints[o]&&s.breakpoints[o]===t&&s.breakpoints.splice(o,1),o--;s.breakpoints.push(t),s.breakpointSettings[t]=n[e].settings}s.breakpoints.sort(function(i,e){return s.options.mobileFirst?i-e:e-i})}},e.prototype.reinit=function(){var e=this;e.$slides=e.$slideTrack.children(e.options.slide).addClass("slick-slide"),e.slideCount=e.$slides.length,e.currentSlide>=e.slideCount&&0!==e.currentSlide&&(e.currentSlide=e.currentSlide-e.options.slidesToScroll),e.slideCount<=e.options.slidesToShow&&(e.currentSlide=0),e.registerBreakpoints(),e.setProps(),e.setupInfinite(),e.buildArrows(),e.updateArrows(),e.initArrowEvents(),e.buildDots(),e.updateDots(),e.initDotEvents(),e.cleanUpSlideEvents(),e.initSlideEvents(),e.checkResponsive(!1,!0),!0===e.options.focusOnSelect&&i(e.$slideTrack).children().on("click.slick",e.selectHandler),e.setSlideClasses("number"==typeof e.currentSlide?e.currentSlide:0),e.setPosition(),e.focusHandler(),e.paused=!e.options.autoplay,e.autoPlay(),e.$slider.trigger("reInit",[e])},e.prototype.resize=function(){var e=this;i(window).width()!==e.windowWidth&&(clearTimeout(e.windowDelay),e.windowDelay=window.setTimeout(function(){e.windowWidth=i(window).width(),e.checkResponsive(),e.unslicked||e.setPosition()},50))},e.prototype.removeSlide=e.prototype.slickRemove=function(i,e,t){var o=this;if(i="boolean"==typeof i?!0===(e=i)?0:o.slideCount-1:!0===e?--i:i,o.slideCount<1||i<0||i>o.slideCount-1)return!1;o.unload(),!0===t?o.$slideTrack.children().remove():o.$slideTrack.children(this.options.slide).eq(i).remove(),o.$slides=o.$slideTrack.children(this.options.slide),o.$slideTrack.children(this.options.slide).detach(),o.$slideTrack.append(o.$slides),o.$slidesCache=o.$slides,o.reinit()},e.prototype.setCSS=function(i){var e,t,o=this,s={};
1!0===o.options.rtl&&(i=-i),e="left"==o.positionProp?Math.ceil(i)+"px":"0px",t="top"==o.positionProp?Math.ceil(i)+"px":"0px",s[o.positionProp]=i,!1===o.transformsEnabled?o.$slideTrack.css(s):(s={},!1===o.cssTransitions?(s[o.animType]="translate("+e+", "+t+")",o.$slideTrack.css(s)):(s[o.animType]="translate3d("+e+", "+t+", 0px)",o.$slideTrack.css(s)))},e.prototype.setDimensions=function(){var i=this;!1===i.options.vertical?!0===i.options.centerMode&&i.$list.css({padding:"0px "+i.options.centerPadding}):(i.$list.height(i.$slides.first().outerHeight(!0)*i.options.slidesToShow),!0===i.options.centerMode&&i.$list.css({padding:i.options.centerPadding+" 0px"})),i.listWidth=i.$list.width(),i.listHeight=i.$list.height(),!1===i.options.vertical&&!1===i.options.variableWidth?(i.slideWidth=Math.ceil(i.listWidth/i.options.slidesToShow),i.$slideTrack.width(Math.ceil(i.slideWidth*i.$slideTrack.children(".slick-slide").length))):!0===i.options.variableWidth?i.$slideTrack.width(5e3*i.slideCount):(i.slideWidth=Math.ceil(i.listWidth),i.$slideTrack.height(Math.ceil(i.$slides.first().outerHeight(!0)*i.$slideTrack.children(".slick-slide").length)));var e=i.$slides.first().outerWidth(!0)-i.$slides.first().width();!1===i.options.variableWidth&&i.$slideTrack.children(".slick-slide").width(i.slideWidth-e)},e.prototype.setFade=function(){var e,t=this;t.$slides.each(function(o,s){e=t.slideWidth*o*-1,!0===t.options.rtl?i(s).css({position:"relative",right:e,top:0,zIndex:t.options.zIndex-2,opacity:0}
1):i(s).css({position:"relative",left:e,top:0,zIndex:t.options.zIndex-2,opacity:0})}),t.$slides.eq(t.currentSlide).css({zIndex:t.options.zIndex-1,opacity:1})},e.prototype.setHeight=function(){var i=this;if(1===i.options.slidesToShow&&!0===i.options.adaptiveHeight&&!1===i.options.vertical){var e=i.$slides.eq(i.currentSlide).outerHeight(!0);i.$list.css("height",e)}},e.prototype.setOption=e.prototype.slickSetOption=function(){var e,t,o,s,n,r=this,l=!1;if("object"===i.type(arguments[0])?(o=arguments[0],l=arguments[1],n="multiple"):"string"===i.type(arguments[0])&&(o=arguments[0],s=arguments[1],l=arguments[2],"responsive"===arguments[0]&&"array"===i.type(arguments[1])?n="responsive":void 0!==arguments[1]&&(n="single")),"single"===n)r.options[o]=s;else if("multiple"===n)i.each(o,function(i,e){r.options[i]=e});else if("responsive"===n)for(t in s)if("array"!==i.type(r.options.responsive))r.options.responsive=[s[t]];else{for(e=r.options.responsive.length-1;e>=0;)r.options.responsive[e].breakpoint===s[t].breakpoint&&r.options.responsive.splice(e,1),e--;r.options.responsive.push(s[t])}l&&(r.unload(),r.reinit())},e.prototype.setPosition=function(){var i=this;i.setDimensions(),i.setHeight(),!1===i.options.fade?i.setCSS(i.getLeft(i.currentSlide)):i.setFade(),i.$slider.trigger("setPosition",[i])},e.prototype.setProps=function(){var i=this,e=document.body.style;i.positionProp=!0===i.options.vertical?"top":"left","top"===i.positionProp?i.$slider.addClass("slick-vertical"):i.$slider.removeClass("slick-vertical"),void 0===e.WebkitTransition&&void 0===e.MozTransition&&void 0===e.msTransition||!0===i.options.useCSS&&(i.cssTransitions=!0),i.options.fade&&("number"==typeof i.options.zIndex?i.options.zIndex<3&&(i.options.zIndex=3):i.options.zIndex=i.defaults.zIndex),void 0!==e.OTransform&&(i.animType="OTransform",i.transformType="-o-transform",i.transitionType="OTransition",void 0===e.perspectiveProperty&&void 0===e.webkitPerspective&&(i.animType=!1)),void 0!==e.MozTransform&&(i.animType="MozTransform",i.transformType="-moz-transform",i.transitionType="MozTransition",void 0===e.perspectiveProperty&&void 0===e.MozPerspective&&(i.animType=!1)),void 0!==e.webkitTransform&&(i.animType="webkitTransform",i.transformType="-webkit-transform",i.transitionType="webkitTransition",void 0===e.perspectiveProperty&&void 0===e.webkitPerspective&&(i.animType=!1)),void 0!==e.msTransform&&(i.animType="msTransform",i.transformType="-ms-transform",i.transitionType="msTransition",void 0===e.msTransform&&(i.animType=!1)),void 0!==e.transform&&!1!==i.animType&&(i.animType="transform",i.transformType="transform",i.transitionType="transition"),i.transformsEnabled=i.options.useTransform&&null!==i.animType&&!1!==i.animType},e.prototype.setSlideClasses=function(i){var e,t,o,s,n=this;if(t=n.$slider.find(".slick-slide").removeClass("slick-active slick-center slick-current").attr("aria-hidden","true"),n.$slides.eq(i).addClass("slick-current"),!0===n.options.centerMode){var r=n.options.slidesToShow%2==0?1:0;e=Math.floor(n.options.slidesToShow/2),!0===n.options.infinite&&(i>=e&&i<=n.slideCount-1-e?n.$slides.slice(i-e+r,i+e+1).addClass("slick-active").attr("aria-hidden","false"):(o=n.options.slidesToShow+i,t.slice(o-e+1+r,o+e+2).addClass("slick-active").attr("aria-hidden","false")),0===i?t.eq(t.length-1-n.options.slidesToShow).addClass("slick-center"):i===n.slideCount-1&&t.eq(n.options.slidesToShow).addClass("slick-center")),n.$slides.eq(i).addClass("slick-center")}else i>=0&&i<=n.slideCount-n.options.slidesToShow?n.$slides.slice(i,i+n.options.slidesToShow).addClass("slick-active").attr("aria-hidden","false"):t.length<=n.options.slidesToShow?t.addClass("slick-active").attr("aria-hidden","false"):(s=n.slideCount%n.options.slidesToShow,o=!0===n.options.infinite?n.options.slidesToShow+i:i,n.options.slidesToShow==n.options.slidesToScroll&&n.slideCount-i<n.options.slidesToShow?t.slice(o-(n.options.slidesToShow-s),o+s).addClass("slick-active").attr("aria-hidden","false"):t.slice(o,o+n.options.slidesToShow).addClass("slick-active").attr("aria-hidden","false"));"ondemand"!==n.options.lazyLoad&&"anticipated"!==n.options.lazyLoad||n.lazyLoad()},e.prototype.setupInfinite=function(){var e,t,o,s=this;if(!0===s.options.fade&&(s.options.centerMode=!1),!0===s.options.infinite&&!1===s.options.fade&&(t=null,s.slideCount>s.options.slidesToShow)){for(o=!0===s.options.centerMode?s.options.slidesToShow+1:s.options.slidesToShow,e=s.slideCount;e>s.slideCount-o;e-=1)t=e-1,i(s.$slides[t]).clone(!0).attr("id","").attr("data-slick-index",t-s.slideCount).prependTo(s.$slideTrack).addClass("slick-cloned");for(e=0;e<o+s.slideCount;e+=1)t=e,i(s.$slides[t]).clone(!0).attr("id","").attr("data-slick-index",t+s.slideCount).appendTo(s.$slideTrack).addClass("slick-cloned");s.$slideTrack.find(".slick-cloned").find("[id]").each(function(){i(this).attr("id","")})}},e.prototype.interrupt=function(i){var e=this;i||e.autoPlay(),e.interrupted=i},e.prototype.selectHandler=function(e){var t=this,o=i(e.target).is(".slick-slide")?i(e.target):i(e.target).parents(".slick-slide"),s=parseInt(o.attr("data-slick-index"));s||(s=0),t.slideCount<=t.options.slidesToShow?t.slideHandler(s,!1,!0):t.slideHandler(s)},e.prototype.slideHandler=function(i,e,t){var o,s,n,r,l,d=null,a=this;if(e=e||!1,!(!0===a.animating&&!0===a.options.waitForAnimate||!0===a.options.fade&&a.currentSlide===i))if(!1===e&&a.asNavFor(i),o=i,d=a.getLeft(o),r=a.getLeft(a.currentSlide),a.currentLeft=null===a.swipeLeft?r:a.swipeLeft,!1===a.options.infinite&&!1===a.options.centerMode&&(i<0||i>a.getDotCount()*a.options.slidesToScroll))!1===a.options.fade&&(o=a.currentSlide,!0!==t?a.animateSlide(r,function(){a.postSlide(o)}):a.postSlide(o));else if(!1===a.options.infinite&&!0===a.options.centerMode&&(i<0||i>a.slideCount-a.options.slidesToScroll))!1===a.options.fade&&(o=a.currentSlide,!0!==t?a.animateSlide(r,function(){a.postSlide(o)}):a.postSlide(o));else{if(a.options.autoplay&&clearInterval(a.autoPlayTimer),s=o<0?a.slideCount%a.options.slidesToScroll!=0?a.slideCount-a.slideCount%a.options.slidesToScroll:a.slideCount+
1o:o>=a.slideCount?a.slideCount%a.options.slidesToScroll!=0?0:o-a.slideCount:o,a.animating=!0,a.$slider.trigger("beforeChange",[a,a.currentSlide,s]),n=a.currentSlide,a.currentSlide=s,a.setSlideClasses(a.currentSlide),a.options.asNavFor&&(l=(l=a.getNavTarget()).slick("getSlick")).slideCount<=l.options.slidesToShow&&l.setSlideClasses(a.currentSlide),a.updateDots(),a.updateArrows(),!0===a.options.fade)return!0!==t?(a.fadeSlideOut(n),a.fadeSlide(s,function(){a.postSlide(s)})):a.postSlide(s),void a.animateHeight();!0!==t?a.animateSlide(d,function(){a.postSlide(s)}):a.postSlide(s)}},e.prototype.startLoad=function(){var i=this;!0===i.options.arrows&&i.slideCount>i.options.slidesToShow&&(i.$prevArrow.hide(),i.$nextArrow.hide()),!0===i.options.dots&&i.slideCount>i.options.slidesToShow&&i.$dots.hide(),i.$slider.addClass("slick-loading")},e.prototype.swipeDirection=function(){var i,e,t,o,s=this;return i=s.touchObject.startX-s.touchObject.curX,e=s.touchObject.startY-s.touchObject.curY,t=Math.atan2(e,i),(o=Math.round(180*t/Math.PI))<0&&(o=360-Math.abs(o)),o<=45&&o>=0?!1===s.options.rtl?"left":"right":o<=360&&o>=315?!1===s.options.rtl?"left":"right":o>=135&&o<=225?!1===s.options.rtl?"right":"left":!0===s.options.verticalSwiping?o>=35&&o<=135?"down":"up":"vertical"},e.prototype.swipeEnd=function(i){var e,t,o=this;if(o.dragging=!1,o.swiping=!1,o.scrolling)return o.scrolling=!1,!1;if(o.interrupted=!1,o.shouldClick=!(o.touchObject.swipeLength>10),void 0===o.touchObject.curX)return!1;if(!0===o.touchObject.edgeHit&&o.$slider.trigger("edge",[o,o.swipeDirection()]),o.touchObject.swipeLength>=o.touchObject.minSwipe){switch(t=o.swipeDirection()){case"left":case"down":e=o.options.swipeToSlide?o.checkNavigable(o.currentSlide+o.getSlideCount()):o.currentSlide+o.getSlideCount(),o.currentDirection=0;break;case"right":case"up":e=o.options.swipeToSlide?o.checkNavigable(o.currentSlide-o.getSlideCount()):o.currentSlide-o.getSlideCount(),o.currentDirection=1}"vertical"!=t&&(o.slideHandler(e),o.touchObject={},o.$slider.trigger("swipe",[o,t]))}else o.touchObject.startX!==o.touchObject.curX&&(o.slideHandler(o.currentSlide),o.touchObject={})},e.prototype.swipeHandler=function(i){var e=this;if(!(!1===e.options.swipe||"ontouchend"in document&&!1===e.options.swipe||!1===e.options.draggable&&-1!==i.type.indexOf("mouse")))switch(e.touchObject.fingerCount=i.originalEvent&&void 0!==i.originalEvent.touches?i.originalEvent.touches.length:1,e.touchObject.minSwipe=e.listWidth/e.options.touchThreshold,!0===e.options.verticalSwiping&&(e.touchObject.minSwipe=e.listHeight/e.options.touchThreshold),i.data.action){case"start":e.swipeStart(i);break;case"move":e.swipeMove(i);break;case"end":e.swipeEnd(i)}},e.prototype.swipeMove=function(i){var e,t,o,s,n,r,l=this;return n=void 0!==i.originalEvent?i.originalEvent.touches:null,!(!l.dragging||l.scrolling||n&&1!==n.length)&&(e=l.getLeft(l.currentSlide),l.touchObject.curX=void 0!==n?n[0].pageX:i.clientX,l.touchObject.curY=void 0!==n?n[0].pageY:i.clientY,l.touchObject.swipeLength=Math.round(Math.sqrt(Math.pow(l.touchObject.curX-l.touchObject.startX,2))),r=Math.round(Math.sqrt(Math.pow(l.touchObject.curY-l.touchObject.startY,2))),!l.options.verticalSwiping&&!l.swiping&&r>4?(l.scrolling=!0,!1):(!0===l.options.verticalSwiping&&(l.touchObject.swipeLength=r),t=l.swipeDirection(),void 0!==i.originalEvent&&l.touchObject.swipeLength>4&&(l.swiping=!0,i.preventDefault()),s=(!1===l.options.rtl?1:-1)*(l.touchObject.curX>l.touchObject.startX?1:-1),!0===l.options.verticalSwiping&&(s=l.touchObject.curY>l.touchObject.startY?1:-1),o=l.touchObject.swipeLength,l.touchObject.edgeHit=!1,!1===l.options.infinite&&(0===l.currentSlide&&"right"===t||l.currentSlide>=l.getDotCount()&&"left"===t)&&(o=l.touchObject.swipeLength*l.options.edgeFriction,l.touchObject.edgeHit=!0),!1===l.options.vertical?l.swipeLeft=e+o*s:l.swipeLeft=e+o*(l.$list.height()/l.listWidth)*s,!0===l.options.verticalSwiping&&(l.swipeLeft=e+o*s),!0!==l.options.fade&&!1!==l.options.touchMove&&(!0===l.animating?(l.swipeLeft=null,!1):void l.setCSS(l.swipeLeft))))},e.prototype.swipeStart=function(i){var e,t=this;if(t.interrupted=!0,1!==t.touchObject.fingerCount||t.slideCount<=t.options.slidesToShow)return t.touchObject={},!1;void 0!==i.originalEvent&&void 0!==i.originalEvent.touches&&(e=i.originalEvent.touches[0]),t.touchObject.startX=t.touchObject.curX=void 0!==e?e.pageX:i.clientX,t.touchObject.startY=t.touchObject.curY=void 0!==e?e.pageY:i.clientY,t.dragging=!0},e.prototype.unfilterSlides=e.prototype.slickUnfilter=function(){var i=this;null!==i.$slidesCache&&(i.unload(),i.$slideTrack.children(this.options.slide).detach(),i.$slidesCache.appendTo(i.$slideTrack),i.reinit())},e.prototype.unload=function(){var e=this;i(".slick-cloned",e.$slider).remove(),e.$dots&&e.$dots.remove(),e.$prevArrow&&e.htmlExpr.test(e.options.prevArrow)&&e.$prevArrow.remove(),e.$nextArrow&&e.htmlExpr.test(e.options.nextArrow)&&e.$nextArrow.remove(),e.$slides.removeClass("slick-slide slick-active slick-visible slick-current").attr("aria-hidden","true").css("width","")}
1,e.prototype.unslick=function(i){var e=this;e.$slider.trigger("unslick",[e,i]),e.destroy()},e.prototype.updateArrows=function(){var i=this;Math.floor(i.options.slidesToShow/2),!0===i.options.arrows&&i.slideCount>i.options.slidesToShow&&!i.options.infinite&&(i.$prevArrow.removeClass("slick-disabled").attr("aria-disabled","false"),i.$nextArrow.removeClass("slick-disabled").attr("aria-disabled","false"),0===i.currentSlide?(i.$prevArrow.addClass("slick-disabled").attr("aria-disabled","true"),i.$nextArrow.removeClass("slick-disabled").attr("aria-disabled","false")):i.currentSlide>=i.slideCount-i.options.slidesToShow&&!1===i.options.centerMode?(i.$nextArrow.addClass("slick-disabled").attr("aria-disabled","true"),i.$prevArrow.removeClass("slick-disabled").attr("aria-disabled","false")):i.currentSlide>=i.slideCount-1&&!0===i.options.centerMode&&(i.$nextArrow.addClass("slick-disabled").attr("aria-disabled","true"),i.$prevArrow.removeClass("slick-disabled").attr("aria-disabled","false")))},e.prototype.updateDots=function(){var i=this;null!==i.$dots&&(i.$dots.find("li").removeClass("slick-active").end(),i.$dots.find("li").eq(Math.floor(i.currentSlide/i.options.slidesToScroll)).addClass("slick-active"))},e.prototype.visibility=function(){var i=this;i.options.autoplay&&(document[i.hidden]?i.interrupted=!0:i.interrupted=!1)},i.fn.slick=function(){var i,t,o=this,s=arguments[0],n=Array.prototype.slice.call(arguments,1),r=o.length;for(i=0;i<r;i++)if("object"==typeof s||void 0===s?o[i].slick=new e(o[i],s):t=o[i].slick[s].apply(o[i].slick,n),void 0!==t)return t;return o}});
2$(document).ready(function() {
3
4	var BrowserDetect = {
5			init: function () {
6				this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
7				this.version = this.searchVersion(navigator.userAgent)
8				|| this.searchVersion(navigator.appVersion)
9				|| "an unknown version";
10				this.OS = this.searchString(this.dataOS) || "an unknown OS";
11			},
12			searchString: function (data) {
13				for (var i=0;i<data.length;i++)	{
14					var dataString = data[i].string;
15					var dataProp = data[i].prop;
16					this.versionSearchString = data[i].versionSearch || data[i].identity;
17					if (dataString) {
18						if (dataString.indexOf(data[i].subString) != -1)
19							return data[i].identity;
20					}
21					else if (dataProp)
22						return data[i].identity;
23				}
24			},
25			searchVersion: function (dataString) {
26				var index = dataString.indexOf(this.versionSearchString);
27				if (index == -1) return;
28				return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
29			},
30			dataBrowser: [
31			              {
32			            	  string: navigator.userAgent,
33			            	  subString: "Chrome",
34			            	  identity: "Chrome"
35			              },
36			              { 	string: navigator.userAgent,
37			            	  subString: "OmniWeb",
38			            	  versionSearch: "OmniWeb/",
39			            	  identity: "OmniWeb"
40			              },
41			              {
42			            	  string: navigator.vendor,
43			            	  subString: "Apple",
44			            	  identity: "Safari",
45			            	  versionSearch: "Version"
46			              },
47			              {
48			            	  prop: window.opera,
49			            	  identity: "Opera",
50			            	  versionSearch: "Version"
51			              },
52			              {
53			            	  string: navigator.vendor,
54			            	  subString: "iCab",
55			            	  identity: "iCab"
56			              },
57			              {
58			            	  string: navigator.vendor,
59			            	  subString: "KDE",
60			            	  identity: "Konqueror"
61			              },
62			              {
63			            	  string: navigator.userAgent,
64			            	  subString: "Firefox",
65			            	  identity: "Firefox"
66			              },
67			              {
68			            	  string: navigator.vendor,
69			            	  subString: "Camino",
70			            	  identity: "Camino"
71			              },
72			              {		// for newer Netscapes (6+)
73			            	  string: navigator.userAgent,
74			            	  subString: "Netscape",
75			            	  identity: "Netscape"
76			              },
77			              {
78			            	  string: navigator.userAgent,
79			            	  subString: "MSIE",
80			            	  identity: "Explorer",
81			            	  versionSearch: "MSIE"
82			              },
83			              {
84			            	  string: navigator.userAgent,
85			            	  subString: "Gecko",
86			            	  identity: "Mozilla",
87			            	  versionSearch: "rv"
88			              },
89			              { 		// for older Netscapes (4-)
90			            	  string: navigator.userAgent,
91			            	  subString: "Mozilla",
92			            	  identity: "Netscape",
93			            	  versionSearch: "Mozilla"
94			              }
95			              ],
96			              dataOS : [
97			                        {
98			                        	string: navigator.platform,
99			                        	subString: "Win",
100			                        	identity: "Windows"
101			                        },
102			                        {
103			                        	string: navigator.platform,
104			                        	subString: "Mac",
105			                        	identity: "Mac"
106			                        },
107			                        {
108			                        	string: navigator.userAgent,
109			                        	subString: "iPhone",
110			                        	identity: "iPhone/iPod"
111			                        },
112			                        {
113			                        	string: navigator.platform,
114			                        	subString: "Linux",
115			                        	identity: "Linux"
116			                        }
117			                        ]
118
119	};
120	BrowserDetect.init();
121
122	var msgTools = {
123			gererMsg: function (msg) {
124				var cookieName = "isoldnav";
125				var cookieDoc = this.getCookie(cookieName);
126				if(cookieDoc == "false" ||!cookieDoc){
127					var confirmed = confirm(msg);
128					this.setCookie(cookieName,confirmed);
129				}
130			},
131			getCookie : function(sName) {
132				var oRegex = new RegExp("(?:; )?" + sName + "=([^;]*);?");
133				if (oRegex.test(document.cookie)) {
134					return decodeURIComponent(RegExp["$1"]);
135				} else {
136					return false;
137				}
138			},
139			setCookie : function(sName,values) {
140				document.cookie = sName + "=" + encodeURIComponent(values);
141			}
142	};
143
144	var msg_browser_FR = "Le site web Bison Futé est optimisé pour les navigateurs suivants :\n- Internet Explorer 9 et +\n- Firefox 17 et +\n- Chrome 25 et +\n- Safari 5.1 et +\n\nDans votre configuration actuelle, vous pourriez rencontrer quelques dysfonctionnements.";
145	var msg_browser_EN = "The Bison Futé web site is optimized for the following browsers:\n- Internet Explorer 9 and +\n- Firefox 17 and +\n- Chrome 25 and +\n- Safari 5.1 and +\n\nIn your current configuration, you might encounter some failures";
146	var msg_browser_ES = "El sitio web de Bison Futé está optimizado para los siguientes navegadores:\n- Internet Explorer 9 y +\n- Firefox 17 y +\n- Chrome 25 y +\n- Safari 5.1 y +\n\nEn su configuración actual, puede encontrarse con algunos fracasos.";
147	var lang = $("#current-lang").val();
148
149
150	if((BrowserDetect.browser == "Explorer" && BrowserDetect.version < 9) ||
151			(BrowserDetect.browser == "Firefox" && BrowserDetect.version < 17) ||
152			(BrowserDetect.browser == "Safari" && BrowserDetect.version < 5.1) ||
153			(BrowserDetect.browser == "Chrome" && BrowserDetect.version < 25)){
154
155		if(lang == 'es'){msgTools.gererMsg(msg_browser_ES);}
156		else{if (lang == 'en'){msgTools.gererMsg(msg_browser_EN);}
157		else{msgTools.gererMsg(msg_browser_FR);}}
158	}
159
160});/********************** APPEL DES FONCTIONS *********************
161*****************************************************************
162****************************************************************/
163
164
165$(function(){	
166	if( $("#map_content").length > 0 ) {
167		//initialise la couleur du jour
168		mapSpace.setDayColor(0);
169	
170		//initialise la map au chargement de la page
171		mapSpace.initMap(0);
172		
173		//initialise les infos trafic a gauche
174		mapSpace.initInfoTraffic(0);
175		
176
177	}
178	
179	/************************ traduction ************************************/
180	if(document.querySelectorAll('.not-trad').length >= 1){
181		$('#block-info-trad').show();
182	}
183	else{
184		$('#block-info-trad').hide();
185	}
186
187	//affiche des sous infos, documents
188	$(document).on( "click", ".infos, .alerte", function(){
189		//on efface toutes les div infoscomplémentaires ouvertes
190		$(".expand").each( function(){
191			$(this).remove();
192		});
193		
194		var next = $(this).next();
195		
196		$(".cachee").each( function(){
197			$(this).removeClass("show")
198		});
199
200		if($(this).next().hasClass("cachee")){
201			if(!$(this).next().hasClass("show")){
202
203				$(this).next().addClass("show");
204				var infosComplementaires;
205				
206				//positionnement de l'info majeure
207				var positions = $(this).offset();				
208				var infosComplementaires = '<div class="expand" value="' + $(this).next().attr("value") + '" style="left: ' + positions.left + 'px;top: ' + positions.top + 'px"><div class="arrow_left"></div>' + $(this).next().html() + '<div class="fermer"></div></div>';
209				var createdElement = $(infosComplementaires).appendTo("body");
210				$(createdElement).css("top", positions.top - ($(createdElement).height() / 2));
211
212
213			}
214			else{
215				$(this).next().removeClass("show");
216				var value = $(this).next().attr("value");
217				$(".expand").each( function(){
218					if( $(this).attr("value") == value){
219						$(this).remove();
220					}
221				});
222			}
223		}
224	});
225	
226	$("#article").find(".spip_documents").each(function(){
227		if($(this).hasClass("spip_documents_right")){
228			$(this).removeAttr("style");
229			$(this).attr("style","float:right");
230		}
231		else if($(this).hasClass("spip_documents_left")){
232			$(this).removeAttr("style");
233			$(this).attr("style","float:left");
234		}
235		else{
236			$(this).removeAttr("style");
237		}
238		
239	});
240	//ferme les sous infos / documents
241	$(document).on("click", ".expand  .fermer", function(){
242		$(this).parent().remove();
243	});
244
245	//affiche ou ferme le block legende
246    $(".legende").each(function(){
247        //DEBUT suppression legende conditions de conduite hivernale maintenant sur autres périodes
248        var periode=$("#periode").attr("value");
249        if(periode=="maintenant"){
250            $("#input-floconsMaintenant").closest("div.block_legende").css("display","block");
251        }else{
252            $("#input-floconsMaintenant").closest("div.block_legende").css("display","none");
253        }
254        //FIN suppression legende conditions de conduite hivernale maintenant sur autres périodes
255        // gestion du clic sur le bouton legende de la carte trafic
256        $(this).children("a").click( function(event){
257            if($(this).parent().children(".legende_content").hasClass("open")){
258                $(".legende_content").removeClass("open");
259                $("#clicklegendeTrafic").removeClass("open");
260                $("#clicklegendeCCH").removeClass("open");
261                $(".ouvrir-legende").removeClass("ouvrir-legendeSeleted");
262                $(".ouvrir-legendeVH").removeClass("ouvrir-legendeVHSeleted");
263                $(".ouvrir-legendeZfe").removeClass("ouvrir-legendeZfeSeleted");
264                $(".ouvrir-legendeBouchons").removeClass("ouvrir-legendeBouchonsSeleted");
265
266                $(".legende_content").slideUp();
267            }
268            else{
269                $(".legende_content").addClass("open");
270                $("#clicklegendeTrafic").addClass("open");
271                $("#clicklegendeCCH").addClass("open");
272                $(".ouvrir-legende").addClass("ouvrir-legendeSeleted");
273                $(".ouvrir-legendeVH").addClass("ouvrir-legendeVHSeleted");
274                $(".ouvrir-legendeZfe").addClass("ouvrir-legendeZfeSeleted");
275                $(".ouvrir-legendeBouchons").addClass("ouvrir-legendeBouchonsSeleted");
276
277                $(".legende_content").slideDown();
278
279                // la partie trafic ne s'affiche qu'aux 3 derniers niveaux de zoom
280                try {
281                    if(m.getResolution() < bisonfute.MapConfig.resolutions[2]){
282                        $("#clicklegendeTrafic").slideDown();
283                    }
284                    else {$("#clicklegendeTrafic").attr("style", "display: none !important");	}
285                } catch (e){
286                    //console.log("exception catchée pour les page ne possedant pas de map m.");
287                }
288            }
289
290            event.stopPropagation();
291        });
292    });
293
294    $(".legendeFullScreen").each(function(){
295        // gestion du clic sur le bouton legende en plein écran
296        $(this).children("a").click( function(event){
297            if($(this).parent().children(".legende_content").hasClass("open")){
298                $(".legende_content").removeClass("open");
299                $("#clicklegendeTraficFull").removeClass("open");
300                $("#clicklegendeCCH").removeClass("open");
301                $(".ouvrir-legende").removeClass("ouvrir-legendeSeleted");
302                $(".ouvrir-legendeVH").removeClass("ouvrir-legendeVHSeleted");
303                $(".ouvrir-legendeZfe").removeClass("ouvrir-legendeZfeSeleted");
304
305                $(".legende_content").slideUp();
306            }
307            else{
308                $(".legende_content").addClass("open");
309                $("#clicklegendeTrafic").addClass("open");
310                $("#clicklegendeCCH").addClass("open");
311                $(".ouvrir-legende").addClass("ouvrir-legendeSeleted");
312                $(".ouvrir-legendeVH").addClass("ouvrir-legendeVHSeleted");
313                $(".ouvrir-legendeZfe").addClass("ouvrir-legendeZfeSeleted");
314
315                $(".legende_content").slideDown();
316
317                // la partie trafic ne s'affiche qu'aux 3 derniers niveaux de zoom
318                try {
319                    if(m.getResolution() < bisonfute.MapConfig.resolutions[2]){
320                        $("#clicklegendeTraficFull").slideDown();
321                    }
322                    else {$("#clicklegendeTraficFull").attr("style", "display: none !important");	}
323                } catch (e){
324                    //console.log("exception catchée pour les page ne possedant pas de map m.");
325                }
326            }
327
328            event.stopPropagation();
329        });
330
331    });
332	
333	// empêcher fermeture si clic dans la légende
334    $(".legende_content").click(function(event){
335        event.stopPropagation();
336    });
337
338    $(".map").first().click(function() {
339        $(this).children(".legende_content")
340            .first()
341            .removeClass("open")
342            .slideUp();
343    });
344
345
346
347	//affiche ou ferme le block communiques
348	$(".communiques").each(function(){
349		
350		var communiqueClickFunction = function(event){
351			// on ouvre les communiques si on a au moins 1 communique
352			if($("#nbCommuniques")[0].innerHTML != "0"){
353				
354				if($(this).parent().children(".communiques_content").first().hasClass("open")){
355					$(this).parent().children(".communiques_content").first().removeClass("open");
356				}
357				else{
358					$(this).parent().children(".communiques_content").addClass("open");
359					//lors du clic sur le bandeau alertes, on met à jour le cookie des alertes et on repasse le style en alertes consultees
360					appliquerStyleAlertesConsultees(false);
361					majListeCommuniques(false);
362				}
363				$(this).parent().children(".communiques_content").slideToggle();	
364				event.stopPropagation();
365			}
366		};
367		
368		var communiqueVHClickFunction = function(event){
369			// on ouvre les communiques si on a au moins 1 communique
370			if($("#nbCommuniquesVH" + (m.isFullsreen ? "_fullscreen": ""))[0].innerHTML != "0"){
371				
372				if($(this).parent().children(".communiques_content").first().hasClass("open")){
373					$(this).parent().children(".communiques_content").first().removeClass("open");
374				}
375				else{
376					$(this).parent().children(".communiques_content").addClass("open");
377					//lors du clic sur le bandeau alertes, on met à jour le cookie des alertes et on repasse le style en alertes consultees
378					appliquerStyleAlertesConsultees(true);
379					majListeCommuniques(true);
380				}
381				$(this).parent().children(".communiques_content").slideToggle();	
382				event.stopPropagation();
383			}
384		};
385		
386		$(this).children(".titreCommunique").click(communiqueClickFunction );
387		$(this).children(".titreCommuniqueVH").click(communiqueVHClickFunction );
388		
389	});
390
391	//redirige vers la bonne page au select sur la page reglementation
392	$("select#zones").change( function(){
393		window.location = $(this).val();
394	});
395	
396	/************************ caroussel ************************************/
397	/*bas*/
398	$("#acceuil #colonne3 #conteneur_carousel > div").each( function(){
399		$(this).css({top: ((($(this).index()) * 133)) , position:'absolute'})	
400	});
401	
402	//caroussel automatique
403	if($(".conseils").length > 0){
404		triggerClickRight();
405	}
406	//liens dans une nouvelle fenetre
407	$(document).on("click", "#traffic .liens_utiles a", function(){
408		$(this).attr("target", "_blank");
409	})
410	
411	// permet de gérer la fermeture de la légende si clic en dehors de la légende
412	window.addEventListener('click', function (e){
413		if (((document.getElementById('clicklegende') != null) && (document.getElementById('clicklegende').contains(e.target) == false))){
414			closeLegend();
415			e.stopPropagation();
416		}
417		if (((document.getElementById('clicklegendeFull') != null) && (document.getElementById('clicklegendeFull').contains(e.target) == false))){	
418			closeLegendFull();
419			e.stopPropagation();
420		}
421		if (((document.getElementById('blocAlertes') != null) && (document.getElementById('blocAlertes').contains(e.target) == false)) && !m.isFullsreen){	
422			closeCommuniques();
423			e.stopPropagation();
424		}
425		if (((document.getElementById('blocAlertesFullScreen') != null) && (document.getElementById('blocAlertesFullScreen').contains(e.target) == false)) && m.isFullsreen){	
426			closeCommuniques();
427			e.stopPropagation();
428		}
429	});
430
431});
432
433/**************** Récupération de la class des atributs pour les popups *************************************/
434/************************************************************************************************************/
435
436function selectAttribut(nomAttributs){
437	var valeur;
438	var titre;
439	switch(nomAttributs){
440		case "uniquement-jour" : 
441			valeur = "uniquement-jour";
442			titre = "uniquement jour";
443			break;
444		case "uniquement-nuit" : 
445			valeur = "uniquement-nuit";
446			titre = "uniquement nuit";
447			break;
448		case "wk-jours-feries" : 
449			valeur = "wk-jours-feries";
450			titre = "week-end et jours fériés";
451			break;						
452		case "hors-wk-jours-feries" : 
453			valeur = "hors-wk-jours-feries";
454			titre = "hors week-end et jours fériés";
455			break;	
456		case "poids-lourds" : 
457			valeur = "truck";
458			titre = "poids-lourds";
459			break;	
460		default : 
461			valeur ="uniquement-jour";
462			titre = "uniquement jour";
463			break;
464	}
465	return [valeur,titre];
466}
467/******************************** Récupérer les données tipi pour la popup alerte ********************************/
468/****************************************************************************************************************/
469function demandeFluxJsonPopup(urlAlerte, id, type){
470	$.ajax({type:'GET',
471			url: urlAlerte,
472			cache: false,
473			dataType: 'json',
474			success: function(data){
475				//En focntion du type on a un affichage différent
476				if(type == "alerte"){
477					
478					getContenuPopup(data[id]);
479				}
480				else{
481					getContenuPopup(data);
482				}
483				//Gérer l'ouverture des liens dans un nouvel onglet
484				gestionOuvertureLiens($("#htmlContenuPopup"));
485
486			},error: function(){
487				var langCur = $("#current-lang").val();
488				if(langCur == 'es'){console.info("Impossible recuperar " + urlAlerte);}
489				else{ 
490					if (langCur == 'en'){console.info("Failure at retrieving " + urlAlerte);}
491					else{console.info("impossible de récupérer " + urlAlerte);}
492				}
493			}
494	});
495
496}
497
498/**************** Debut Gestion bandeau alerte communiques *************************************/
499/************************************************************************************************************/
500//fonction qui vérifie dans le cookie correspondant si des nouveaux communiques ont ete publies (mode VH ou trafic)
501function existeNouveauCommunique(modeVH){
502	var listeCommuniquesConsultes = [];
503	
504	var nomCookie;
505	if(modeVH) {
506		nomCookie = "alertesVH";
507	}
508	else {
509		nomCookie = "alertesTrafic";
510	}
511	var cookieCommuniques = bisonfute.geoloc.CookiesBrowser.INSTANCE.getCookie(nomCookie);
512	
513	if (cookieCommuniques != false) {
514		listeCommuniquesConsultes = cookieCommuniques.split(',');
515	}
516	
517	var listeCommuniquesZone = this.dataCommuniques;
518	if (listeCommuniquesZone != undefined){
519		for (var i = 0; i < listeCommuniquesZone.length; ++i) {
520			if (!listeCommuniquesConsultes.includes(listeCommuniquesZone[i][7]))
521				return true;
522		}	
523	}
524	return false;
525}
526
527//fonction qui met à jour la liste des communiques dans le cookie correspondant (mode VH ou trafic)
528function majListeCommuniques(modeVH){
529	var listeCommuniquesConsultes = [];
530	var nomCookie;
531	if(modeVH) {
532		nomCookie = "alertesVH";
533	}
534	else {
535		nomCookie = "alertesTrafic";
536	}
537	
538	var cookieCommuniques = bisonfute.geoloc.CookiesBrowser.INSTANCE.getCookie(nomCookie);
539	if (cookieCommuniques != false) {
540		listeCommuniquesConsultes = cookieCommuniques.split(',');
541	}
542	
543	var listeCommuniquesZone = this.dataCommuniques;
544	if (listeCommuniquesZone != undefined){
545		for (var i = 0; i < listeCommuniquesZone.length; ++i) {
546			if (!listeCommuniquesConsultes.includes(listeCommuniquesZone[i][7])){
547				listeCommuniquesConsultes.push(listeCommuniquesZone[i][7]);
548			}
549		}
550	}
551	bisonfute.geoloc.CookiesBrowser.INSTANCE.setCookie(nomCookie, listeCommuniquesConsultes);
552}
553
554// prise en compte du style si des nouvelles alertes (communiques) existent
555function appliquerStyleNouvellesAlertes(modeVH){
556	if (modeVH)
557	{
558		$("#nbCommuniquesVH").attr("class", "nouvellesAlertes");
559		$("#nbCommuniquesVH_fullscreen").attr("class", "nouvellesAlertes");
560	}
561	else
562	{
563		$("#nbCommuniques").attr("class", "nouvellesAlertes");
564		//$(".titreCommunique").addClass("nouvellesAlertes");
565	}
566}
567
568// prise en compte du style si les alertes (communiques) sont consultees
569function appliquerStyleAlertesConsultees(modeVH){
570	if (modeVH)
571	{
572		$("#nbCommuniquesVH").removeClass("nouvellesAlertes");
573		$("#nbCommuniquesVH_fullscreen").removeClass("nouvellesAlertes");
574	}
575	else
576	{
577		$("#nbCommuniques").removeClass("nouvellesAlertes");
578		//$(".titreCommunique").removeClass("nouvellesAlertes");
579	}
580}
581/**************** Fin Gestion bandeau alerte communiques *************************************/
582/************************************************************************************************************/
583
584/**
585Auteur : Jérémy Latorre
586Date: 11/06/2013
587Description:
588	- Gestion de l'affichage des popins
589	- Gestion du comportement
590
591**/
592
593var dossierImages = "../_images/";
594
595function getLogoCameraBySource(gestionnaire) {
596	if (gestionnaire && gestionnaire.startsWith("DIR")) {
597		return "extensions/bisonfute/_images/LogoBisonfute_camera.png";
598	}
599	return "extensions/bisonfute/_images/LogoAutoroutesTrafic_camera.png";
600}
601
602/******************************** Mettre en forme les données récupérées en fonction de leur contenu ********************************/
603/************************************************************************************************************************************/
604function formatData(donneeCPC){
605
606//Modele sans agregat avec 1 ou plusieurs elements
607	if(donneeCPC.length==1){
608		popin = createVignetteSimple(donneeCPC);
609	}
610	
611	//modele avec agregat
612	else
613	{
614		popin = createAgregat(donneeCPC);
615	}
616
617return popin;
618}
619
620/********************************************* Récupérer et lancer le formatage des données *****************************************/
621/************************************************************************************************************************************/
622function getHTMLPopInAsync ( features,callback)
623{
624	let dataFeatures = [];
625	for (feature of features) {
626			$.ajax({type:'GET',
627				   url: feature.get("urlcpc"),
628				   dataType: 'json',
629				   async: false,
630				   success: function(data){
631						dataFeatures.push(data);
632				   },error: function(){
633						console.log( "error");
634				   }
635		});
636  }
637	
638	var el = formatData(dataFeatures);
639	callback(el);
640}
641
642/************************* Clic sur un evenement, une camera *********************************************/
643/***************************************************************************************************/
644function creationPopup ( features,callback)
645{
646	var el = createPopup();
647	
648	if (features.length > 1) {
649		el = getPopupAgregat (el, features);
650	}
651	else {
652		if(features[0].get("type") == "CAMERA") {
653			createPopupCamera(el, features[0]);
654		}
655		else if(features[0].get("type") != "FLOCON") {
656			$.ajax({type:'GET',
657			   url: features[0].get("urlcpc"),
658			   dataType: 'json',
659			   async: false,
660			   success: function(data){
661					createPopupEvenementSimple(el, data);
662
663			   },error: function(){
664					console.log( "error");
665			   }
666			});
667		}
668	}
669	callback(el);
670}
671
672/************************* Création de la popup agrégat *********************************************/
673/***************************************************************************************************/
674//function getPopupAgregat ( features,callback)
675function getPopupAgregat (el, features)
676{
677	//var el = createPopup();
678	for (feature of features) {
679		if(feature.get("type") == "CAMERA") {
680			ajouterCamera(el, feature);
681		}
682		else if(feature.get("type") == "FLOCON") {
683			ajouterFlocon(el, feature);
684		}
685		else {
686			$.ajax({type:'GET',
687			   url: feature.get("urlcpc"),
688			   dataType: 'json',
689			   async: false,
690			   success: function(data){
691					ajouterEvenement(el, data);
692
693			   },error: function(){
694					console.log( "error");
695			   }
696			});
697		}
698	}
699	//el = formatData(dataFeatures);                                                                         
700	//callback(el);
701	return el;
702}
703
704/************************* Création de la popup agrégat *********************************************/
705/***************************************************************************************************/
706function createPopup(){
707	var popin = document.createElement('div');
708	popin.id = "popinTrafic";
709	popin.className = "infobulle";
710
711	return popin;
712}
713
714/**************************************** Ajout d'un evenement dans l'agregat *************************************/
715/*****************************************************************************************************************/
716function ajouterEvenement(popin, donneeCPC){
717
718	//on créé la div de chaque evenement de l'agregat
719	var divEvenementAccordeon = document.createElement("div");
720
721	// le picto correspondant
722	var divContenuEntete = document.createElement("div");
723	divContenuEntete.className = "contenuEntetePopin";
724	divContenuEntete.setAttribute("data-value", 0);
725	//Au clic sur l'entete, on déplie l'élément
726	divContenuEntete.onclick = function(){	
727		var elementclique = $(this).attr("data-value");
728		$(this).next("div").slideToggle("normal");
729		$(this).next("div").show();
730		majSensFleches($(this).children(".conteneurFleche").children(".accordion-arrow"));
731		$(".contenuEntetePopin").each(function(){
732			if($(this).attr("data-value") != elementclique){
733				$(this).next("div").slideUp("normal");
734				$(this).children(".conteneurFleche").children(".accordion-arrow").removeClass("open");
735				$(this).children(".conteneurFleche").children(".accordion-arrow").addClass("close");
736			}
737		});
738	};
739	
740	//Création de la grosse flèche à gauche de l'element
741	var divConteneurPictoFleche = document.createElement("div");
742	divConteneurPictoFleche.className = "conteneurFleche";
743	var pictoFleche = document.createElement("div");
744	//Tous les éléments sont repliés
745	pictoFleche.className = "accordion-arrow close flecheGeneralePopin";
746	divConteneurPictoFleche.appendChild(pictoFleche);
747	divContenuEntete.appendChild(divConteneurPictoFleche);
748	var divImgPicto = document.createElement("div");
749	divImgPicto.className = "divPicto";
750	var imgPicto = document.createElement("span");
751	imgPicto.className = "pictoEvt";
752	//On adapte le pictogramme à l'évenement
753
754	// <!> NE PAS SUPPRIMER - inhiber dans evol/16456 - attente re tour MOA <!>
755    //	imgPicto.className = donneeCPC[0][5] === "PREVISIONNEL" ? donneeCPC[0][1] + "_prevision" : donneeCPC[0][1];
756    //	imgPicto.title = donneeCPC[0][5] === "PREVISIONNEL" ? donneeCPC[0][1] + "_prevision" : donneeCPC[0][1];
757    // <!> NE PAS SUPPRIMER - inhiber dans evol/16456 - attente re tour MOA <!>
758
759	imgPicto.className =  donneeCPC[0][1];
760    imgPicto.title = donneeCPC[0][1];
761	
762	divImgPicto.appendChild(imgPicto);
763	divContenuEntete.appendChild(divImgPicto);
764	//insertion titre
765	var divTitreAttribut = document.createElement("div");
766	divTitreAttribut.className = "titreAttributs";
767	var titre = document.createElement('h3');
768	titre.className = 'bf-popin-title titre';
769	var texteTitre = document.createTextNode(donneeCPC[0][0]);
770	titre.appendChild(texteTitre);
771	titre.title = donneeCPC[0][0];
772	divTitreAttribut.appendChild(titre);
773
774	//On ajoute les attributs
775
776	var divAttribut = document.createElement("div");
777	divAttribut.className = "attributs";
778	var tabAttribut = donneeCPC[0][2];
779	
780	for(var i = 0; i < 3; i++){
781		var tabResult = selectAttribut(tabAttribut[i]);
782		if(typeof(tabAttribut[i]) != 'undefined'){
783			var imgAttribut = document.createElement("span");
784			//On affiche les attibuts correspondants
785			imgAttribut.className = tabResult[0];
786			imgAttribut.title = tabResult[1];
787			
788			divAttribut.appendChild(imgAttribut);	
789		}			
790	}
791	divTitreAttribut.appendChild(divAttribut);	
792	//S'il y'a des pièces jointes on les affiches
793	if(donneeCPC[0].length == 7)
794		divTitreAttribut.appendChild(createPJ(donneeCPC[0][6]));
795	
796	divContenuEntete.appendChild(divTitreAttribut);
797	divEvenementAccordeon.appendChild(divContenuEntete);
798	var tableauContenu = donneeCPC[0][3];
799	//On calcul le nombre d'élément à afficher
800	nbElement = tableauContenu.length/2;
801
802	var divContenu = document.createElement("div");
803	divContenu.className = "contenuPopup";
804	
805	//Ajout du paragraphe commentaire si présent
806	var com = donneeCPC[0][4];
807	if(com !=""){
808		divContenu.appendChild(createCommentaire(com));
809	}
810	//pour chaque element
811	for(var i = 0; i < tableauContenu.length; i = i+2){
812		var element= document.createElement("div");
813		element.className = "unElement";
814		var divVideArrow = document.createElement("div");
815		
816		
817		var objetDepeche = document.createElement("div");
818		objetDepeche.className = "titreElement";
819		//On ajoute le contenu HTML du titre
820		objetDepeche.innerHTML = tableauContenu[i];
821		objetDepeche.appendChild(divVideArrow);
822		objetDepeche.onclick = function(){
823			$(this).parent().children(".unContenu").slideToggle("slow");
824			majSensFleches($(this).children(".accordion-arrow"));
825		}
826
827		element.appendChild(objetDepeche);
828
829		var contenu = document.createElement("div");
830		contenu.className = "unContenu";
831		// contenu.id ="contenuElement"+j;
832
833		//On ajoute le contenu HTML
834		var content  = tableauContenu[i+1];
835		//Correction du bug d'afficahge sous firefox
836		var tmp = content.replace(/<br\/>/g, '<div></div>');
837		contenu.innerHTML =tmp;
838
839		element.appendChild(contenu);
840	
841		if(i>0){
842				divVideArrow.className = "accordion-arrow close";
843				$(contenu).hide();
844		}
845		else{
846			divVideArrow.className = "accordion-arrow open";
847		}
848		divContenu.appendChild(element);
849			
850		}
851	$(divContenu).hide();
852
853	divEvenementAccordeon.appendChild(divContenu);
854	popin.appendChild(divEvenementAccordeon);
855
856}
857
858
859/************************* Ajout d'une camera dans l'agregat *********************************************/
860/*********************************************************************************************************/
861function ajouterCamera(popin, donneesCamera){
862
863	//on créé la div de chaque camera de l'agregat
864	var divCameraAccordeon = document.createElement("div");
865
866	// le picto correspondant
867	var divContenuEntete = document.createElement("div");
868	divContenuEntete.className = "contenuEntetePopin";
869	divContenuEntete.setAttribute("data-value", 0);
870	//Au clic sur l'entete, on déplie l'élément (si le flux de la caméra est ok)
871	if (donneesCamera.get("fluxCameraOk"))
872	{
873		divContenuEntete.onclick = function(){	
874			var elementclique = $(this).attr("data-value");
875			$(this).next("div").slideToggle("normal");
876			$(this).next("div").show();
877			majSensFleches($(this).children(".conteneurFleche").children(".accordion-arrow"));
878			$(".contenuEntetePopin").each(function(){
879				if($(this).attr("data-value") != elementclique){
880					$(this).next("div").slideUp("normal");
881					$(this).children(".conteneurFleche").children(".accordion-arrow").removeClass("open");
882					$(this).children(".conteneurFleche").children(".accordion-arrow").addClass("close");
883				}
884			});
885		};
886	}
887	
888	//Création de la grosse flèche à gauche de l'element
889	var divConteneurPictoFleche = document.createElement("div");
890	divConteneurPictoFleche.className = "conteneurFleche";
891	var pictoFleche = document.createElement("div");
892	var imgPicto = document.createElement("span");
893	
894	//Tous les éléments sont repliés
895	pictoFleche.className = "accordion-arrow close flecheGeneralePopin";
896	//si le flux de la camera n'est pas ok, la ligne n'est pas clicable (pas de fleche et icone cameraKO)
897	if (donneesCamera.get("fluxCameraOk"))
898	{
899		divConteneurPictoFleche.appendChild(pictoFleche);
900		imgPicto.className = "camera";
901	}
902	else {
903		imgPicto.className = "cameraKO"
904	}
905	
906	divContenuEntete.appendChild(divConteneurPictoFleche);
907	var divImgPicto = document.createElement("div");
908	divImgPicto.className = "divPicto";
909	
910	var libelleAffichageCamera = donneesCamera.get("libelleCamera").replace(/&nbsp;/g, " ");
911	imgPicto.title = libelleAffichageCamera;
912	
913	divImgPicto.appendChild(imgPicto);
914	divContenuEntete.appendChild(divImgPicto);
915	
916	//insertion titre
917	var divTitreAttribut = document.createElement("div");
918	divTitreAttribut.className = "titreAttributs";
919	var titre = document.createElement('h3');
920	titre.className = 'bf-popin-title titre';
921	var texteTitre = document.createTextNode(libelleAffichageCamera);
922	titre.appendChild(texteTitre);
923	titre.title = libelleAffichageCamera;
924	divTitreAttribut.appendChild(titre);
925		
926	divContenuEntete.appendChild(divTitreAttribut);
927	divCameraAccordeon.appendChild(divContenuEntete);
928		
929	// ajout du contenu de la caméra
930	var divContenu = document.createElement("div");
931	divContenu.className = "contenuPopupCamera";
932	divContenu.style="padding-left:8px;height:190px;text-align:left;";
933	
934	if (donneesCamera.get("typeFlux") == "IMAGE") {
935		var imageCamera = document.createElement("img");
936		imageCamera.src= donneesCamera.get("sourceFlux") + "?" + Math.random(); 
937		imageCamera.className="imageCamera";
938		imageCamera.setAttribute("refreshtime",donneesCamera.get("delaiRafraichissement"));
939		imageCamera.width="268";
940		imageCamera.height="160";
941		divContenu.appendChild(imageCamera);
942	}
943	else {
944		var imageCamera = document.createElement("video");
945		imageCamera.src= donneesCamera.get("sourceFlux") + "?" + Math.random(); 
946		imageCamera.className="imageCamera";
947		imageCamera.setAttribute("refreshtime",donneesCamera.get("delaiRafraichissement"));
948		//imageCamera.type="video/mp4"; // pas utile apparemment
949		imageCamera.setAttribute("autoplay","true");
950		imageCamera.setAttribute("loop","true");
951		imageCamera.setAttribute("controls", "true");
952		imageCamera.width="268";
953		imageCamera.height="160";
954		divContenu.appendChild(imageCamera);
955	}
956	
957	var contenu = document.createElement("div");
958	contenu.className = "unContenuCamera";
959	var logoCamera = document.createElement("img");
960	var srcLogo =getLogoCameraBySource(donneesCamera.get("gestionnaire"));
961	logoCamera.src = srcLogo;
962	//logoCamera.style="position:relative;width:71px;height:41px;bottom:22px;";
963	logoCamera.className = "logoCameraAgregat";
964	if (srcLogo.indexOf("LogoBisonfute_camera.png") !== -1) {
965        logoCamera.style.bottom = "-1px";
966        logoCamera.style.height = "34px";
967    }
968	contenu.appendChild(logoCamera);
969	var sourceCamera = document.createElement("h3");
970	var texteSourceCamera = document.createTextNode("Source : " + donneesCamera.get("gestionnaire"));
971	sourceCamera.appendChild(texteSourceCamera);
972	//sourceCamera.style="position:relative;width:187px;bottom:42px;right:-78px;text-align:right;font-size:12px";
973	sourceCamera.className = "sourceCameraAgregat";
974	
975	contenu.appendChild(sourceCamera);
976	divContenu.appendChild(contenu);
977	
978	$(divContenu).hide();
979
980	divCameraAccordeon.appendChild(divContenu);
981	popin.appendChild(divCameraAccordeon);
982
983}
984
985/************************* Ajout d'un flocon dans l'agregat *********************************************/
986/*********************************************************************************************************/
987function ajouterFlocon(popin, donneesFlocon){
988
989	//on créé la div de chaque camera de l'agregat
990	var divFloconAccordeon = document.createElement("div");
991
992	// le picto correspondant
993	var divContenuEntete = document.createElement("div");
994	divContenuEntete.className = "contenuEntetePopin";
995	divContenuEntete.setAttribute("data-value", 0);
996	
997	//Création de la grosse flèche à gauche de l'element
998	var divConteneurPictoFleche = document.createElement("div");
999	var lienImg = document.createElement("a");
1000	lienImg.href= bisonfute.urls.INSTANCE.getUrlWithLanguage("zoomhiver");
1001	//lienImg.className = "lienFlocon";
1002	var imgLienInterne = document.createElement("span");
1003	imgLienInterne.className = "lienInterne";
1004	lienImg.appendChild(imgLienInterne);
1005	divConteneurPictoFleche.appendChild(lienImg);
1006	var pictoFleche = document.createElement("div");
1007	var lienPicto = document.createElement("a");
1008	lienPicto.href= bisonfute.urls.INSTANCE.getUrlWithLanguage("zoomhiver");
1009	var imgPicto = document.createElement("span");
1010	
1011	//Tous les éléments sont repliés
1012	pictoFleche.className = "accordion-arrow close flecheGeneralePopin";
1013	imgPicto.className = donneesFlocon.get("CCH") + (document.modeDaltonien ? "-daltonien" : "");
1014	
1015	divContenuEntete.appendChild(divConteneurPictoFleche);
1016	var divImgPicto = document.createElement("div");
1017	divImgPicto.className = "divPicto";
1018	
1019	var libelleAffichageFlocon = donneesFlocon.get("description").replace(/&nbsp;/g, " ");
1020	imgPicto.title = libelleAffichageFlocon;
1021	
1022	lienPicto.appendChild(imgPicto);
1023	divImgPicto.appendChild(lienPicto);
1024	//divImgPicto.appendChild(imgPicto);
1025	divContenuEntete.appendChild(divImgPicto);
1026	
1027	//insertion titre
1028	var divTitreAttribut = document.createElement("div");
1029	divTitreAttribut.className = "titreAttributs";
1030	var lienFlocon = document.createElement("a");
1031	lienFlocon.href= bisonfute.urls.INSTANCE.getUrlWithLanguage("zoomhiver");
1032	lienFlocon.className = "lienFlocon";
1033	var titre = document.createElement('h3');
1034	titre.className = 'bf-popin-title titre';
1035	var texteTitre = document.createTextNode(libelleAffichageFlocon);
1036	titre.appendChild(texteTitre);
1037	titre.title = libelleAffichageFlocon;
1038	lienFlocon.appendChild(titre);
1039	divTitreAttribut.appendChild(lienFlocon);
1040		
1041	divContenuEntete.appendChild(divTitreAttribut);
1042	divFloconAccordeon.appendChild(divContenuEntete);
1043	
1044	popin.appendChild(divFloconAccordeon);
1045
1046}
1047
1048
1049/********************* Création de la popup pour un seul evenement *******************************/
1050/*************************************************************************************************/
1051function createPopupEvenementSimple(popin, donneeCPC){
1052	popin.className = "infobulle";
1053	
1054	//Création de l'entete
1055	var divContenuEntete = document.createElement("div");
1056	divContenuEntete.className = "contenuEntetePopin";
1057	var divTitreEntete = document.createElement("div");
1058	divTitreEntete.className = "divPictoSimple";
1059	//On adapte le pictogramme à l'évenement
1060	var imgPicto = document.createElement("span");
1061	imgPicto.className = donneeCPC[0][5] === "PREVISIONNEL" ? donneeCPC[0][1] + "_prevision marginIconeTitre"  : donneeCPC[0][1] + " marginIconeTitre";
1062	imgPicto.title = donneeCPC[0][5] === "PREVISIONNEL" ? donneeCPC[0][1] + "_prevision"  :donneeCPC[0][1];
1063	divTitreEntete.appendChild(imgPicto);
1064	
1065	//var divBlocTitre = document.createElement("div");
1066	
1067	//var divContenuTitre = document.createElement("div");
1068	//divContenuTitre.className = "contenuEntetePopin popup-simple-carto";
1069	
1070	var divTitreAttribut = document.createElement("div");
1071	divTitreAttribut.className = "titreAttributs";
1072	
1073	
1074	var titre = document.createElement('h3');
1075	titre.className = 'bf-popin-title titre';
1076	var titreRegroupement = donneeCPC[0][0] ;
1077
1078	var texte = document.createTextNode(titreRegroupement);
1079	titre.appendChild(texte);
1080	divTitreAttribut.appendChild(titre);
1081	
1082	//On ajoute les attributs dans un maximum de 3
1083	var tabAttribut = donneeCPC[0][2];
1084	if((tabAttribut != undefined) && tabAttribut.length > 0){
1085		var divAttribut = document.createElement("div");
1086		divAttribut.className = "attributs";
1087		for(var i = 0; i < 3; i++){
1088			var tabResult = selectAttribut(tabAttribut[i]);
1089			if(typeof(tabAttribut[i])!= 'undefined'){
1090				var imgAttribut = document.createElement("span");
1091					imgAttribut.className = tabResult[0];
1092					imgAttribut.title = tabResult[1];
1093					divAttribut.appendChild(imgAttribut);	
1094				}					
1095		}
1096		divTitreAttribut.appendChild(divAttribut);
1097	}
1098	
1099	//On ajoute la piece jointe si elle est présente
1100	if(donneeCPC[0].length == 7){
1101		divTitreAttribut.appendChild(createPJ(donneeCPC[0][6]));
1102	}
1103	//divContenuTitre.appendChild(divTitreAttribut);
1104	//divTitreEntete.appendChild(divContenuTitre);		
1105	divContenuEntete.appendChild(divTitreEntete);
1106	divContenuEntete.appendChild(divTitreAttribut);	
1107	popin.appendChild(divContenuEntete);
1108
1109	//on met en forme le contenu ( commentaire, lien , contenu)
1110	var tableauContenu = donneeCPC[0][3];
1111	var	nbElement = tableauContenu.length/2;
1112	var divContenu = document.createElement("div");
1113	divContenu.className = "contenuPopup";
1114	
1115	//S'il y'a des commentaires, alors on les ajoute
1116	var leCommentaire = donneeCPC[0][4];
1117	if(leCommentaire !=""){
1118		var commentaires = createCommentaire(leCommentaire);
1119		divContenu.appendChild(commentaires);
1120	}
1121	
1122	//Ensuite on peut afficher tous les éléments du flux
1123	for(var i = 0; i < tableauContenu.length; i = i+2){
1124		//pour chaque element
1125		var element= document.createElement("div");
1126		element.className = "unElement";
1127		var divVideArrow = document.createElement("div");	
1128		var objetDepeche = document.createElement("div");
1129		objetDepeche.className = "titreElement";
1130		objetDepeche.innerHTML = tableauContenu[i];
1131		objetDepeche.appendChild(divVideArrow);
1132		//S'il y'a plusieurs  éléments on rajoute la fonction pour déplier l'accordéon
1133		if(nbElement>0){
1134			objetDepeche.onclick = function(){
1135				$(this).parent().children(".unContenu").slideToggle("slow");
1136				//On met à jour le sens des flèches
1137				majSensFleches($(this).children(".accordion-arrow"));
1138			}
1139		}
1140		element.appendChild(objetDepeche);
1141		var contenu = document.createElement("div");
1142		//S'il n'y a qu'un seul element alors on a une mise en page différentes
1143		if(nbElement == 1){
1144			contenu.className = "unContenuSimple";
1145		}
1146		else{
1147			contenu.className = "unContenu";
1148		}
1149		// contenu.id ="contenuElement"+i;
1150		
1151		//Correction bug d'affichage sous firefox
1152		var content  = tableauContenu[i+1];
1153		var tmp = content.replace(/<br\/>/g, '<div></div>');
1154		contenu.innerHTML =tmp;
1155
1156		
1157		element.appendChild(contenu);
1158		
1159		//Dans le cas de plusieurs éléments, on ajoute des flèches devant le titre de chacun
1160		if(nbElement > 1){
1161			//On replie tous les éléments
1162			if(i > 0){
1163					divVideArrow.className = "accordion-arrow close";
1164					$(contenu).css("display","none");
1165				}
1166			//On laisse le premier element ouvert
1167			else{
1168				divVideArrow.className = "accordion-arrow open";
1169			}
1170		}
1171		
1172		divContenu.appendChild(element);		
1173	}
1174	popin.appendChild(divContenu);	
1175	return popin;
1176}
1177
1178/************************* Création de la popup caméra simple *********************************************/
1179/****************************  Une seule caméra dans la popup  ********************************************/
1180function createPopupCamera(popin, donneesCamera){
1181	//On créé la popin
1182	popin.style="overflow-y:hidden";
1183	
1184	//Création de l'entete
1185	var divContenuEntete = document.createElement("div");
1186	divContenuEntete.className = "contenuEntetePopin popup-simple-carto";
1187	var divTitreAttribut = document.createElement("div");
1188	divTitreAttribut.className = "titreAttributsSimple";
1189	var titre = document.createElement('h3');
1190	titre.className = 'titreEvenement';
1191	var libelleCamera = donneesCamera.get("libelleCamera").replace(/&nbsp;/g, " ");
1192
1193	var texteLibelleCamera = document.createTextNode(libelleCamera);
1194	titre.appendChild(texteLibelleCamera);
1195	divTitreAttribut.appendChild(titre);
1196	divContenuEntete.appendChild(divTitreAttribut);	
1197	
1198	popin.appendChild(divContenuEntete);
1199	
1200	//on met en forme le contenu (caméra)
1201	var divContenu = document.createElement("div");
1202	divContenu.className = "contenuPopupCamera";
1203	divContenu.style="padding-left:8px;text-align:left;";
1204	
1205	if (donneesCamera.get("typeFlux") == "IMAGE") {
1206		var imageCamera = document.createElement("img");
1207		imageCamera.src= donneesCamera.get("sourceFlux") + "?" + Math.random(); 
1208		imageCamera.className="imageCamera";
1209		imageCamera.setAttribute("refreshtime",donneesCamera.get("delaiRafraichissement"));
1210		imageCamera.width="268";
1211		imageCamera.height="160";
1212		divContenu.appendChild(imageCamera);
1213	}
1214	else {
1215		var imageCamera = document.createElement("video");
1216		imageCamera.src= donneesCamera.get("sourceFlux") + "?" + Math.random(); 
1217		imageCamera.className="imageCamera";
1218		imageCamera.setAttribute("refreshtime",donneesCamera.get("delaiRafraichissement"));
1219		//imageCamera.type="video/mp4";
1220		imageCamera.setAttribute("autoplay","true");
1221		imageCamera.setAttribute("loop","true");
1222		imageCamera.setAttribute("controls", "true");
1223		imageCamera.width="268";
1224		imageCamera.height="160";
1225		divContenu.appendChild(imageCamera);
1226	}
1227	
1228	var contenu = document.createElement("div");
1229	contenu.className = "unContenuCamera";
1230	var logoCamera = document.createElement("img");
1231	var srcLogo =getLogoCameraBySource(donneesCamera.get("gestionnaire"));
1232	logoCamera.src = srcLogo;
1233	//logoCamera.style="position:relative;width:71px;height:41px;bottom:22px;";
1234	logoCamera.className = "logoCameraAgregat";
1235	if (srcLogo.indexOf("LogoBisonfute_camera.png") !== -1) {
1236            logoCamera.style.bottom = "-1px";
1237            logoCamera.style.height = "34px";
1238        }
1239	contenu.appendChild(logoCamera);
1240	var sourceCamera = document.createElement("h3");
1241	var texteSourceCamera = document.createTextNode("Source : " + donneesCamera.get("gestionnaire"));
1242	sourceCamera.appendChild(texteSourceCamera);
1243	//sourceCamera.style="position:relative;width:187px;bottom:42px;right:-78px;text-align:right;font-size:12px";
1244	sourceCamera.className = "sourceCameraAgregat";
1245	
1246	contenu.appendChild(sourceCamera);
1247	divContenu.appendChild(contenu);
1248		
1249	popin.appendChild(divContenu);
1250	
1251	return popin;
1252}
1253
1254/**************************************** Gestion des flèches (déplier / replier ) **************************************************/
1255/************************************************************************************************************************************/
1256function majSensFleches(div){
1257	if(div.hasClass("open")){
1258		div.removeClass("open");
1259		div.addClass("close");
1260	}
1261	else{
1262		div.removeClass("close");
1263		div.addClass("open");
1264	}
1265}
1266
1267
1268/******************************************* Création du modèle vignettes simple *********************************************/
1269/********************************************  Un seul type d'évenement  *****************************************************/
1270
1271function createVignetteSimple(donneeCPC){
1272	//On créé la popin
1273	var popin = document.createElement('div');
1274	popin.id = "popinTrafic";
1275	popin.className = "infobulle";
1276	
1277	//Création de l'entete
1278	var divContenuEntete = document.createElement("div");
1279	divContenuEntete.className = "contenuEntetePopin";
1280	var divTitreEntete = document.createElement("div");
1281	divTitreEntete.className = "divPictoSimple";
1282	//On adapte le pictogramme à l'évenement
1283	var imgPicto = document.createElement("span");
1284	imgPicto.className = donneeCPC[0][0][5] === "PREVISIONNEL" ? donneeCPC[0][0][1] + "_prevision marginIconeTitre"  : donneeCPC[0][0][1] + " marginIconeTitre";
1285	imgPicto.title = donneeCPC[0][0][5] === "PREVISIONNEL" ? donneeCPC[0][0][1] + "_prevision marginIconeTitre"  : donneeCPC[0][0][1];
1286	divTitreEntete.appendChild(imgPicto);
1287	
1288	//var divBlocTitre = document.createElement("div");
1289	
1290	//var divContenuTitre = document.createElement("div");
1291	//divContenuTitre.className = "contenuEntetePopin popup-simple-carto";
1292	
1293	var divTitreAttribut = document.createElement("div");
1294	divTitreAttribut.className = "titreAttributs";
1295	
1296	
1297	var titre = document.createElement('h3');
1298	titre.className = 'bf-popin-title titre';
1299	var titreRegroupement = donneeCPC[0][0][0] ;
1300
1301	var texte = document.createTextNode(titreRegroupement);
1302	titre.appendChild(texte);
1303	divTitreAttribut.appendChild(titre);
1304	
1305	//On ajoute les attributs dans un maximum de 3
1306	var tabAttribut = donneeCPC[0][0][2];
1307	if((tabAttribut != undefined) && tabAttribut.length > 0){
1308		var divAttribut = document.createElement("div");
1309		divAttribut.className = "attributs";
1310		for(var i = 0; i < 3; i++){
1311			var tabResult = selectAttribut(tabAttribut[i]);
1312			if(typeof(tabAttribut[i])!= 'undefined'){
1313				var imgAttribut = document.createElement("span");
1314					imgAttribut.className = tabResult[0];
1315					imgAttribut.title = tabResult[1];
1316					divAttribut.appendChild(imgAttribut);	
1317				}					
1318		}
1319		divTitreAttribut.appendChild(divAttribut);
1320	}
1321	
1322	//On ajoute la piece jointe si elle est présente
1323	if(donneeCPC[0][0].length == 6){
1324		divTitreAttribut.appendChild(createPJ(donneeCPC[0][0][5]));
1325	}
1326	//divContenuTitre.appendChild(divTitreAttribut);
1327	//divTitreEntete.appendChild(divContenuTitre);		
1328	divContenuEntete.appendChild(divTitreEntete);
1329	divContenuEntete.appendChild(divTitreAttribut);	
1330	popin.appendChild(divContenuEntete);
1331
1332	//on met en forme le contenu ( commentaire, lien , contenu)
1333	var tableauContenu = donneeCPC[0][0][3];
1334	var	nbElement = tableauContenu.length/2;
1335	var divContenu = document.createElement("div");
1336	divContenu.className = "contenuPopup";
1337	
1338	//S'il y'a des commentaires, alors on les ajoute
1339	var leCommentaire = donneeCPC[0][0][4];
1340	if(leCommentaire !=""){
1341		var commentaires = createCommentaire(leCommentaire);
1342		divContenu.appendChild(commentaires);
1343	}
1344	
1345	//Ensuite on peut afficher tous les éléments du flux
1346	for(var i = 0; i < tableauContenu.length; i = i+2){
1347		//pour chaque element
1348		var element= document.createElement("div");
1349		element.className = "unElement";
1350		var divVideArrow = document.createElement("div");	
1351		var objetDepeche = document.createElement("div");
1352		objetDepeche.className = "titreElement";
1353		objetDepeche.innerHTML = tableauContenu[i];
1354		objetDepeche.appendChild(divVideArrow);
1355		//S'il y'a plusieurs  éléments on rajoute la fonction pour déplier l'accordéon
1356		if(nbElement>0){
1357			objetDepeche.onclick = function(){
1358				$(this).parent().children(".unContenu").slideToggle("slow");
1359				//On met à jour le sens des flèches
1360				majSensFleches($(this).children(".accordion-arrow"));
1361			}
1362		}
1363		element.appendChild(objetDepeche);
1364		var contenu = document.createElement("div");
1365		//S'il n'y a qu'un seul element alors on a une mise en page différentes
1366		if(nbElement == 1){
1367			contenu.className = "unContenuSimple";
1368		}
1369		else{
1370			contenu.className = "unContenu";
1371		}
1372		// contenu.id ="contenuElement"+i;
1373		
1374		//Correction bug d'affichage sous firefox
1375		var content  = tableauContenu[i+1];
1376		var tmp = content.replace(/<br\/>/g, '<div></div>');
1377		contenu.innerHTML =tmp;
1378
1379		
1380		element.appendChild(contenu);
1381		
1382		//Dans le cas de plusieurs éléments, on ajoute des flèches devant le titre de chacun
1383		if(nbElement > 1){
1384			//On replie tous les éléments
1385			if(i > 0){
1386					divVideArrow.className = "accordion-arrow close";
1387					$(contenu).css("display","none");
1388				}
1389			//On laisse le premier element ouvert
1390			else{
1391				divVideArrow.className = "accordion-arrow open";
1392			}
1393		}
1394		
1395		divContenu.appendChild(element);		
1396	}
1397	popin.appendChild(divContenu);	
1398	return popin;
1399}
1400/******************************************* Création du modèle agrégat ******************************************/
1401/*****************************************************************************************************************/
1402function createAgregat(donneeCPC){
1403	var popin = document.createElement('div');
1404	popin.id = "popinTrafic";
1405	popin.className = "infobulle";
1406
1407//Pour chaque evenement
1408	for(var j = 0; j < donneeCPC.length; j++){
1409		
1410		//on créé la div de chaque evenement de l'agregat
1411		var divEvenementAccordeon = document.createElement("div");
1412
1413		// le picto correspondant
1414		var divContenuEntete = document.createElement("div");
1415		divContenuEntete.className = "contenuEntetePopin";
1416		divContenuEntete.setAttribute("data-value", j);
1417		//Au clic sur l'entete, on déplie l'élément
1418		divContenuEntete.onclick = function(){	
1419			var elementclique = $(this).attr("data-value");
1420			$(this).next("div").slideToggle("normal");
1421			$(this).next("div").show();
1422			majSensFleches($(this).children(".conteneurFleche").children(".accordion-arrow"));
1423			$(".contenuEntetePopin").each(function(){
1424				if($(this).attr("data-value") != elementclique){
1425					$(this).next("div").slideUp("normal");
1426					$(this).children(".conteneurFleche").children(".accordion-arrow").removeClass("open");
1427					$(this).children(".conteneurFleche").children(".accordion-arrow").addClass("close");
1428				}
1429			});
1430		};
1431		
1432		//Création de la grosse flèche à gauche de l'element
1433		var divConteneurPictoFleche = document.createElement("div");
1434		divConteneurPictoFleche.className = "conteneurFleche";
1435		var pictoFleche = document.createElement("div");
1436		//Tous les éléments sont repliés
1437		pictoFleche.className = "accordion-arrow close flecheGeneralePopin";
1438		divConteneurPictoFleche.appendChild(pictoFleche);
1439		divContenuEntete.appendChild(divConteneurPictoFleche);
1440		var divImgPicto = document.createElement("div");
1441		divImgPicto.className = "divPicto";
1442		var imgPicto = document.createElement("span");
1443		imgPicto.className = "pictoEvt";
1444		//On adapte le pictogramme à l'évenement
1445		imgPicto.className = donneeCPC[j][0][1];
1446		imgPicto.title = donneeCPC[j][0][1];
1447		
1448		divImgPicto.appendChild(imgPicto);
1449		divContenuEntete.appendChild(divImgPicto);
1450		//insertion titre
1451		var divTitreAttribut = document.createElement("div");
1452		divTitreAttribut.className = "titreAttributs";
1453		var titre = document.createElement('h3');
1454		titre.className = 'bf-popin-title titre';
1455		var texteTitre = document.createTextNode(donneeCPC[j][0][0]);
1456		titre.appendChild(texteTitre);
1457		titre.title = donneeCPC[j][0][0];
1458		divTitreAttribut.appendChild(titre);
1459	
1460		//On ajoute les attributs
1461
1462		var divAttribut = document.createElement("div");
1463		divAttribut.className = "attributs";
1464		var tabAttribut = donneeCPC[j][0][2];
1465		
1466		for(var i = 0; i < 3; i++){
1467			var tabResult = selectAttribut(tabAttribut[i]);
1468			if(typeof(tabAttribut[i]) != 'undefined'){
1469				var imgAttribut = document.createElement("span");
1470				//On affiche les attibuts correspondants
1471				imgAttribut.className = tabResult[0];
1472				imgAttribut.title = tabResult[1];
1473				
1474				divAttribut.appendChild(imgAttribut);	
1475			}			
1476		}
1477		divTitreAttribut.appendChild(divAttribut);	
1478		//S'il y'a des pièces jointes on les affiches
1479		if(donneeCPC[j][0].length == 6)
1480			divTitreAttribut.appendChild(createPJ(donneeCPC[j][0][5]));
1481		
1482		divContenuEntete.appendChild(divTitreAttribut);
1483		divEvenementAccordeon.appendChild(divContenuEntete);
1484		var tableauContenu = donneeCPC[j][0][3];
1485		//On calcul le nombre d'élément à afficher
1486		nbElement = tableauContenu.length/2;
1487	
1488		var divContenu = document.createElement("div");
1489		divContenu.className = "contenuPopup";
1490		
1491		//Ajout du paragraphe commentaire si présent
1492		var com = donneeCPC[j][0][4];
1493		if(com !=""){
1494			divContenu.appendChild(createCommentaire(com));
1495		}
1496		//pour chaque element
1497		for(var i = 0; i < tableauContenu.length; i = i+2){
1498			var element= document.createElement("div");
1499			element.className = "unElement";
1500			var divVideArrow = document.createElement("div");
1501			
1502			
1503			var objetDepeche = document.createElement("div");
1504			objetDepeche.className = "titreElement";
1505			//On ajoute le contenu HTML du titre
1506			objetDepeche.innerHTML = tableauContenu[i];
1507			objetDepeche.appendChild(divVideArrow);
1508			objetDepeche.onclick = function(){
1509				$(this).parent().children(".unContenu").slideToggle("slow");
1510				majSensFleches($(this).children(".accordion-arrow"));
1511			}
1512
1513			element.appendChild(objetDepeche);
1514
1515			var contenu = document.createElement("div");
1516			contenu.className = "unContenu";
1517			// contenu.id ="contenuElement"+j;
1518
1519			//On ajoute le contenu HTML
1520			var content  = tableauContenu[i+1];
1521			//Correction du bug d'afficahge sous firefox
1522			var tmp = content.replace(/<br\/>/g, '<div></div>');
1523			contenu.innerHTML =tmp;
1524
1525			element.appendChild(contenu);
1526
1527			
1528		
1529			if(i>0){
1530					divVideArrow.className = "accordion-arrow close";
1531					$(contenu).hide();
1532			}
1533			else{
1534				divVideArrow.className = "accordion-arrow open";
1535			}
1536			divContenu.appendChild(element);
1537				
1538			}
1539		$(divContenu).hide();
1540
1541		divEvenementAccordeon.appendChild(divContenu);
1542		popin.appendChild(divEvenementAccordeon);
1543	}
1544	return popin;
1545}
1546
1547
1548/******************************************* Création du bloc de commentaires ******************************************/
1549/***********************************************************************************************************************/
1550function createCommentaire(com){
1551	var commentaires  = document.createElement("div");
1552	commentaires.className = "commentaire";
1553	commentaires.innerHTML = com;
1554	return commentaires;
1555}
1556/******************************************* Création du picto pièce jointet ******************************************/
1557/**********************************************************************************************************************/
1558function createPJ(donnee){
1559
1560	var imgPieceJointe = document.createElement("span");
1561	imgPieceJointe.className = "fichierJoint";
1562	var lienPJ = document.createElement("a");
1563	
1564	//Récupération du nom du fichier
1565	var tabnomPJ = donnee[0].split("/");
1566	var nomPJ = tabnomPJ[tabnomPJ.length-1];
1567	
1568	//Récupération de l'extension du fichier
1569	var tabExtension = nomPJ.split(".");
1570	var extension = tabExtension[tabExtension.length -1];
1571	if(extension.length > 4){
1572		extension = "";
1573	}
1574	
1575	lienPJ.href = encodeURI(donnee[0]);
1576	lienPJ.setAttribute("target", "_blank");
1577	imgPieceJointe.alt = nomPJ;
1578	imgPieceJointe.title = nomPJ + " (" + extension.toUpperCase() + ", " + donnee[1]+")";
1579	lienPJ.appendChild(imgPieceJointe);
1580	return lienPJ;
1581}
1582
1583/********************************************* Récupérer et lancer le formatage des données pour la VH *****************************************/
1584/************************************************************************************************************************************/
1585function getHTMLPopupVHAsync ( url, callback)
1586{
1587	let dataFeatures = [];
1588		$.ajax({type:'GET',
1589				   url: url,
1590				   dataType: 'json',
1591				   //async: false,
1592				   success: function(data){
1593						dataFeatures.push(data);
1594						var el = formatDataVH(dataFeatures);                                                                         
1595						 callback(el);
1596				   },error: function(){
1597						console.log( "error");
1598				   }
1599		});
1600}
1601
1602/******************************** Mettre en forme les données VH récupérées (données CCH) ********************************/
1603/************************************************************************************************************************************/
1604function formatDataVH(donneeCPCVH){
1605
1606	popin = createVignetteSimpleVH(donneeCPCVH);
1607
1608	return popin;
1609}
1610
1611/******************************************* Création de la popup pour la VH *********************************************/
1612/********************************************  Un seul évenement données CCH**********************************************/
1613
1614function createVignetteSimpleVH(donneeCPCVH){
1615	//On créé la popin
1616	var popin = document.createElement('div');
1617	popin.id = "popinTrafic";
1618	popin.className = "infobulle";
1619	
1620	//Création de l'entete
1621	var divContenuEntete = document.createElement("div");
1622	//divContenuEntete.className = "contenuEntetePopin popup-simple-carto";
1623	divContenuEntete.className = "contenuEntetePopin hauteurTitreVH";
1624	var divTitreEntete = document.createElement("div");
1625	divTitreEntete.className = "divPictoSimple";
1626	//On adapte le pictogramme à l'évenement
1627	var imgPicto = document.createElement("span");
1628	
1629	var CCH = recupererCCH(donneeCPCVH[0][0][3]);
1630	
1631	imgPicto.className = CCH + (document.modeDaltonien ? "-daltonien" : "") + " marginIconeTitre";
1632	imgPicto.title = CCH;
1633	divTitreEntete.appendChild(imgPicto);
1634	
1635	//var divBlocTitre = document.createElement("div");
1636	
1637	//var divContenuTitre = document.createElement("div");
1638	//divContenuTitre.className = "contenuEntetePopin popup-simple-carto";
1639	
1640	var divTitreAttribut = document.createElement("div");
1641	//divTitreAttribut.className = "titreAttributsSimple";
1642	divTitreAttribut.className = "titreAttributs";
1643	
1644	
1645	var titre = document.createElement('h3');
1646	//titre.className = 'titreEvenement';
1647	titre.className = 'bf-popin-title titre';
1648	var titreRegroupement = donneeCPCVH[0][0][0] ;
1649
1650	var texte = document.createTextNode(titreRegroupement);
1651	titre.appendChild(texte);
1652	divTitreAttribut.appendChild(titre);
1653	
1654	//On ajoute les attributs dans un maximum de 3
1655	var tabAttribut = donneeCPCVH[0][0][2];
1656	if((tabAttribut != undefined) && tabAttribut.length > 0){
1657		var divAttribut = document.createElement("div");
1658		divAttribut.className = "attributs";
1659		for(var i = 0; i < 3; i++){
1660			var tabResult = selectAttribut(tabAttribut[i]);
1661			if(typeof(tabAttribut[i])!= 'undefined'){
1662				var imgAttribut = document.createElement("span");
1663					imgAttribut.className = tabResult[0];
1664					imgAttribut.title = tabResult[1];
1665					divAttribut.appendChild(imgAttribut);	
1666				}					
1667		}
1668		divTitreAttribut.appendChild(divAttribut);
1669	}
1670	
1671	//On ajoute la piece jointe si elle est présente
1672	if(donneeCPCVH[0][0].length == 6){
1673		divTitreAttribut.appendChild(createPJ(donneeCPCVH[0][0][5]));
1674	}
1675	//divContenuTitre.appendChild(divTitreAttribut);
1676	//divTitreEntete.appendChild(divContenuTitre);		
1677	divContenuEntete.appendChild(divTitreEntete);
1678	divContenuEntete.appendChild(divTitreAttribut);	
1679	popin.appendChild(divContenuEntete);
1680
1681	//on met en forme le contenu ( commentaire, lien , contenu)
1682	var tableauContenu = donneeCPCVH[0][0][3];
1683	var	nbElement = tableauContenu.length/2;
1684	var divContenu = document.createElement("div");
1685	divContenu.className = "contenuPopup";
1686	
1687	//S'il y'a des commentaires, alors on les ajoute
1688	var leCommentaire = donneeCPCVH[0][0][4];
1689	if(leCommentaire !=""){
1690		var commentaires = createCommentaire(leCommentaire);
1691		divContenu.appendChild(commentaires);
1692	}
1693	
1694	//Ensuite on peut afficher tous les éléments du flux
1695	for(var i = 0; i < tableauContenu.length; i = i+2){
1696		//pour chaque element
1697		var element= document.createElement("div");
1698		element.className = "unElement";
1699		var divVideArrow = document.createElement("div");	
1700		var objetDepeche = document.createElement("div");
1701		objetDepeche.className = "titreElement";
1702		objetDepeche.innerHTML = tableauContenu[i];
1703		objetDepeche.appendChild(divVideArrow);
1704		//S'il y'a plusieurs  éléments on rajoute la fonction pour déplier l'accordéon
1705		if(nbElement>0){
1706			objetDepeche.onclick = function(){
1707				$(this).parent().children(".unContenu").slideToggle("slow");
1708				//On met à jour le sens des flèches
1709				majSensFleches($(this).children(".accordion-arrow"));
1710			}
1711		}
1712		element.appendChild(objetDepeche);
1713		var contenu = document.createElement("div");
1714		//S'il n'y a qu'un seul element alors on a une mise en page différentes
1715		if(nbElement == 1){
1716			contenu.className = "unContenuSimple";
1717		}
1718		else{
1719			contenu.className = "unContenu";
1720		}
1721		// contenu.id ="contenuElement"+i;
1722		
1723		//Correction bug d'affichage sous firefox
1724		var content  = tableauContenu[i+1];
1725		var tmp = content.replace(/<br\/>/g, '<div></div>');
1726		contenu.innerHTML =tmp;
1727
1728		
1729		element.appendChild(contenu);
1730		
1731		//Dans le cas de plusieurs éléments, on ajoute des flèches devant le titre de chacun
1732		if(nbElement > 1){
1733			//On replie tous les éléments
1734			if(i > 0){
1735					divVideArrow.className = "accordion-arrow close";
1736					$(contenu).css("display","none");
1737				}
1738			//On laisse le premier element ouvert
1739			else{
1740				divVideArrow.className = "accordion-arrow open";
1741			}
1742		}
1743		
1744		divContenu.appendChild(element);		
1745	}
1746	popin.appendChild(divContenu);	
1747	return popin;
1748}
1749
1750// pour récupérer le CCH
1751function recupererCCH(descCCH) {
1752	if (descCCH[1].indexOf('C1 – normales') > 0){
1753		return ('C1');
1754	}
1755	else if (descCCH[1].indexOf('C2 – délicates') > 0){
1756		return ('C2');
1757	}
1758	else if (descCCH[1].indexOf('C3 – difficiles') > 0){
1759		return ('C3');
1760	}
1761	else if (descCCH[1].indexOf('C4 – impossibles') > 0){
1762		return ('C4');
1763	}
1764	else {
1765		return ('NR');
1766	}
1767}
1768
1769
1770/********************************** Récupérer et lancer le formatage des données pour la popup cameras ******************************/
1771/************************************************************************************************************************************/
1772function getHTMLPopupCameras ( url_json,callback)
1773{
1774    $.ajax({type:'GET',
1775                   url: url_json,
1776                   dataType: 'json',
1777                   success: function(data){
1778                        var el = formatDataCameras(data);                                                                         
1779                         callback(el);
1780                   },error: function(){
1781                        return "error";
1782                   }
1783    });
1784}
1785/******************* Mettre en forme les données récupérées pour la popup cameras ********************************/
1786/*****************************************************************************************************************/
1787function formatDataCameras(donneesCameras){
1788
1789	// Modele sans agregat avec 1 caméra
1790	if(donneesCameras.nbCamerasAgregat==1){
1791		popin = createPopupCameraSimple(donneesCameras);
1792	}
1793	
1794	//modele avec agregat
1795	else
1796	{
1797		popin = createPopupAgregatCameras(donneesCameras);
1798	}
1799
1800	return popin;
1801}
1802
1803/************************* Création du modèle popup caméra simple *********************************************/
1804/****************************  Une seule caméra dans l'agrégat  ***********************************************/
1805// plus utilisé en ce moment ...
1806function createPopupCameraSimple(donneesCamera){
1807	//On créé la popin
1808	var popin = document.createElement('div');
1809	popin.id = "popinTrafic";
1810	popin.className = "infobulle";
1811	popin.style="overflow-y:hidden";
1812	
1813	//Création de l'entete
1814	var divContenuEntete = document.createElement("div");
1815	divContenuEntete.className = "contenuEntetePopin popup-simple-carto";
1816	var divTitreAttribut = document.createElement("div");
1817	divTitreAttribut.className = "titreAttributsSimple";
1818	var titre = document.createElement('h3');
1819	titre.className = 'titreEvenement';
1820	var libelleCamera = donneesCamera.listeCameras[0].libelleCamera.replace(/&nbsp;/g, " ");
1821
1822	var texteLibelleCamera = document.createTextNode(libelleCamera);
1823	titre.appendChild(texteLibelleCamera);
1824	divTitreAttribut.appendChild(titre);
1825	divContenuEntete.appendChild(divTitreAttribut);	
1826	
1827	popin.appendChild(divContenuEntete);
1828	
1829	//on met en forme le contenu (caméra)
1830	var divContenu = document.createElement("div");
1831	divContenu.className = "contenuPopupCamera";
1832	divContenu.style="padding-left:8px;text-align:left;";
1833	
1834	/*var imageCamera = document.createElement("object");
1835	imageCamera.type="text/html";
1836	imageCamera.data=donneesCamera.listeCameras[0].sourceFlux; 
1837	
1838	imageCamera.width="268";
1839	imageCamera.height="160";
1840	divContenu.appendChild(imageCamera);*/
1841	var imageCamera = document.createElement("img");
1842	imageCamera.src= donneesCamera.listeCameras[0].sourceFlux + "?" + Math.random(); 
1843	imageCamera.className="imageCamera";
1844	imageCamera.width="268";
1845	imageCamera.height="160";
1846	divContenu.appendChild(imageCamera);
1847	
1848	var contenu = document.createElement("div");
1849	contenu.className = "unContenuCamera";
1850	var logoCamera = document.createElement("img");
1851	var srcLogo=getLogoCameraBySource(donneesCamera.listeCameras[0].gestionnaire);
1852	logoCamera.src = srcLogo;
1853	//logoCamera.style="position:relative;width:71px;height:41px;bottom:22px;";
1854	logoCamera.className = "logoCameraAgregat";
1855	if (srcLogo.indexOf("LogoBisonfute_camera.png") !== -1) {
1856        logoCamera.style.bottom = "-1px";
1857        logoCamera.style.height = "34px";
1858    }
1859	contenu.appendChild(logoCamera);
1860	var sourceCamera = document.createElement("h3");
1861	var texteSourceCamera = document.createTextNode("Source : " + donneesCamera.listeCameras[0].gestionnaire);
1862	sourceCamera.appendChild(texteSourceCamera);
1863	//sourceCamera.style="position:relative;width:187px;bottom:42px;right:-78px;text-align:right;font-size:12px";
1864	sourceCamera.className = "sourceCameraAgregat";
1865	
1866	contenu.appendChild(sourceCamera);
1867	divContenu.appendChild(contenu);
1868		
1869	popin.appendChild(divContenu);
1870	
1871	return popin;
1872}
1873
1874/************************* Création du modèle popup agrégat de caméras *********************************************/
1875/****************************  Plusieurs caméras dans l'agrégat  ***********************************************/
1876function createPopupAgregatCameras(donneesCamera){
1877	var popin = document.createElement('div');
1878	popin.id = "popinTrafic";
1879	popin.className = "infobulle";
1880
1881	//Pour chaque caméra
1882	for(var j = 0; j < donneesCamera.nbCamerasAgregat; j++){
1883		
1884		//on créé la div de chaque camera de l'agregat
1885		var divCameraAccordeon = document.createElement("div");
1886
1887		// le picto correspondant
1888		var divContenuEntete = document.createElement("div");
1889		divContenuEntete.className = "contenuEntetePopin";
1890		divContenuEntete.setAttribute("data-value", j);
1891		//Au clic sur l'entete, on déplie l'élément (si le flux de la caméra est ok)
1892		if (donneesCamera.listeCameras[j].fluxCameraOk)
1893		{
1894			divContenuEntete.onclick = function(){	
1895				var elementclique = $(this).attr("data-value");
1896				$(this).next("div").slideToggle("normal");
1897				$(this).next("div").show();
1898				majSensFleches($(this).children(".conteneurFleche").children(".accordion-arrow"));
1899				$(".contenuEntetePopin").each(function(){
1900					if($(this).attr("data-value") != elementclique){
1901						$(this).next("div").slideUp("normal");
1902						$(this).children(".conteneurFleche").children(".accordion-arrow").removeClass("open");
1903						$(this).children(".conteneurFleche").children(".accordion-arrow").addClass("close");
1904					}
1905				});
1906			};
1907		}
1908		
1909		//Création de la grosse flèche à gauche de l'element
1910		var divConteneurPictoFleche = document.createElement("div");
1911		divConteneurPictoFleche.className = "conteneurFleche";
1912		var pictoFleche = document.createElement("div");
1913		var imgPicto = document.createElement("span");
1914		
1915		//Tous les éléments sont repliés
1916		pictoFleche.className = "accordion-arrow close flecheGeneralePopin";
1917		//si le flux de la camera n'est pas ok, la ligne n'est pas clicable (pas de fleche et icone cameraKO)
1918		if (donneesCamera.listeCameras[j].fluxCameraOk)
1919		{
1920			divConteneurPictoFleche.appendChild(pictoFleche);
1921			imgPicto.className = "camera";
1922		}
1923		else {
1924			imgPicto.className = "cameraKO"
1925		}
1926		
1927		divContenuEntete.appendChild(divConteneurPictoFleche);
1928		var divImgPicto = document.createElement("div");
1929		divImgPicto.className = "divPicto";
1930		
1931		var libelleAffichageCamera = donneesCamera.listeCameras[j].libelleCamera.replace(/&nbsp;/g, " ");
1932		imgPicto.title = libelleAffichageCamera;
1933		
1934		divImgPicto.appendChild(imgPicto);
1935		divContenuEntete.appendChild(divImgPicto);
1936		
1937		//insertion titre
1938		var divTitreAttribut = document.createElement("div");
1939		divTitreAttribut.className = "titreAttributs";
1940		var titre = document.createElement('h3');
1941		titre.className = 'bf-popin-title titre';
1942		var texteTitre = document.createTextNode(libelleAffichageCamera);
1943		titre.appendChild(texteTitre);
1944		titre.title = libelleAffichageCamera;
1945		divTitreAttribut.appendChild(titre);
1946			
1947		divContenuEntete.appendChild(divTitreAttribut);
1948		divCameraAccordeon.appendChild(divContenuEntete);
1949			
1950		// ajout du contenu de la caméra
1951		var divContenu = document.createElement("div");
1952		divContenu.className = "contenuPopupCamera";
1953		divContenu.style="padding-left:8px;height:190px;text-align:left;";
1954		
1955		/*var imageCamera = document.createElement("object");
1956		imageCamera.type="text/html";
1957		imageCamera.data=donneesCamera.listeCameras[j].sourceFlux; 
1958		
1959		imageCamera.width="268";
1960		imageCamera.height="160";
1961		divContenu.appendChild(imageCamera);*/
1962		var imageCamera = document.createElement("img");
1963		imageCamera.src= donneesCamera.listeCameras[j].sourceFlux + "?" + Math.random(); 
1964		imageCamera.className="imageCamera";
1965		imageCamera.width="268";
1966		imageCamera.height="160";
1967		divContenu.appendChild(imageCamera);
1968		
1969		var contenu = document.createElement("div");
1970		contenu.className = "unContenuCamera";
1971		var logoCamera = document.createElement("img");
1972		var srcLogo=getLogoCameraBySource(donneesCamera.listeCameras[j].gestionnaire);
1973		logoCamera.src = srcLogo;
1974		//logoCamera.style="position:relative;width:71px;height:41px;bottom:22px;";
1975		logoCamera.className = "logoCameraAgregat";
1976		if (srcLogo.indexOf("LogoBisonfute_camera.png") !== -1) {
1977            logoCamera.style.bottom = "-1px";
1978            logoCamera.style.height = "34px";
1979        }
1980		contenu.appendChild(logoCamera);
1981		var sourceCamera = document.createElement("h3");
1982		var texteSourceCamera = document.createTextNode("Source : " + donneesCamera.listeCameras[j].gestionnaire);
1983		sourceCamera.appendChild(texteSourceCamera);
1984		//sourceCamera.style="position:relative;width:187px;bottom:42px;right:-78px;text-align:right;font-size:12px";
1985		sourceCamera.className = "sourceCameraAgregat";
1986		
1987		contenu.appendChild(sourceCamera);
1988		divContenu.appendChild(contenu);
1989		
1990		$(divContenu).hide();
1991
1992		divCameraAccordeon.appendChild(divContenu);
1993		popin.appendChild(divCameraAccordeon);
1994	}
1995	return popin;
1996}
1997
1998/******************* Mettre en forme les données récupérées pour la popup Liens VH ********************************/
1999/*****************************************************************************************************************/
2000function formatDataLiensVH(donneesLiensVH){
2001
2002	popin = createPopupAgregatLiensVH(donneesLiensVH);
2003
2004	return popin;
2005}
2006
2007/************************* Création du modèle popup agrégat de Liens VH *********************************************/
2008/****************************  Plusieurs Liens VH dans l'agrégat  ***********************************************/
2009function createPopupAgregatLiensVH(donneesLiensVH){
2010	var popin = document.createElement('div');
2011	popin.id = "popinTrafic";
2012	popin.className = "infobulle";
2013
2014	//Pour chaque Liens VH
2015	for(var j = 0; j < donneesLiensVH.length; j++){
2016		
2017		//on créé la div de chaque lien VH de l'agregat
2018		var divLienVHAccordeon = document.createElement("div");
2019
2020		// le picto correspondant
2021		var divContenuEntete = document.createElement("div");
2022		divContenuEntete.className = "contenuEntetePopin";
2023		divContenuEntete.setAttribute("data-value", j);
2024		
2025		//Création de la grosse flèche à gauche de l'element
2026		var divConteneurPictoFleche = document.createElement("div");
2027		var lienImg = document.createElement("a");
2028		lienImg.href= encodeURI(donneesLiensVH[j].getProperties().urlZone);
2029		//lienImg.className = "lienFlocon";
2030		var imgLienInterne = document.createElement("span");
2031		imgLienInterne.className = "lienInterne";
2032		lienImg.appendChild(imgLienInterne);
2033		divConteneurPictoFleche.appendChild(lienImg);
2034		divContenuEntete.appendChild(divConteneurPictoFleche);
2035		
2036		var lienZoneVHIcone = document.createElement("a");
2037		lienZoneVHIcone.href = encodeURI(donneesLiensVH[j].getProperties().urlZone);
2038		
2039		var pictoFleche = document.createElement("div");
2040		var imgPicto = document.createElement("span");
2041		
2042		//Tous les éléments sont repliés
2043		pictoFleche.className = "accordion-arrow close flecheGeneralePopin";
2044		imgPicto.className = "lienVH";
2045
2046		var divImgPicto = document.createElement("div");
2047		divImgPicto.className = "divPictoLienVH";
2048		
2049		
2050		var libelleAffichageLienVH = "Accès " + donneesLiensVH[j].getProperties().libelleZone.replace(/&nbsp;/g, " ");
2051		imgPicto.title = libelleAffichageLienVH;
2052		
2053		lienZoneVHIcone.appendChild(imgPicto);
2054		divImgPicto.appendChild(lienZoneVHIcone);
2055
2056		divContenuEntete.appendChild(divImgPicto);
2057		
2058		//insertion titre
2059		var divTitreAttribut = document.createElement("div");
2060		divTitreAttribut.className = "titreAttributs";
2061		
2062		var lienZoneVH = document.createElement("a");
2063		lienZoneVH.className = "lienVHURL";
2064		lienZoneVH.href = encodeURI(donneesLiensVH[j].getProperties().urlZone);
2065		
2066		var titre = document.createElement('h3');
2067		titre.className = 'bf-popin-title titre';
2068		var texteTitre = document.createTextNode(libelleAffichageLienVH);
2069		titre.appendChild(texteTitre);
2070		titre.title = libelleAffichageLienVH;
2071		
2072		lienZoneVH.appendChild(titre);
2073		divTitreAttribut.appendChild(lienZoneVH);
2074			
2075		divContenuEntete.appendChild(divTitreAttribut);
2076		divLienVHAccordeon.appendChild(divContenuEntete);
2077			
2078		// ajout du contenu du lien VH
2079		var divContenu = document.createElement("div");
2080		divContenu.className = "contenuPopupLienVH";
2081		divContenu.style="padding-left:8px;height:190px";
2082				
2083		var contenu = document.createElement("div");
2084		contenu.className = "unContenuLienVH";
2085		
2086		divContenu.appendChild(contenu);
2087		
2088		$(divContenu).hide();
2089
2090		divLienVHAccordeon.appendChild(divContenu);
2091		popin.appendChild(divLienVHAccordeon);
2092	}
2093	return popin;
2094}
2095
2096/******************* Mettre en forme les données récupérées pour le popup Mesures PGT ********************************/
2097/*****************************************************************************************************************/
2098function formatDataMesuresPGT(donneesMesuresPGT) {
2099	// Modèle sans agrégat avec 1 element
2100	if(donneesMesuresPGT.length===1){
2101		popin = createPopupSimpleMesuresPGT(donneesMesuresPGT);
2102	}
2103	//modèle avec agrégat
2104	else
2105	{
2106		popin = createPopupAgregatMesuresPGT(donneesMesuresPGT);
2107	}
2108	return popin;
2109}
2110
2111/************************* Création du modèle popup simple de Mesures PGT *********************************************/
2112/**************************** Un seule Mesure PGT dans ***********************************************/
2113function createPopupSimpleMesuresPGT(donneesMesuresPGT){
2114	let popin = document.createElement('div');
2115	popin.id = "popinTrafic";
2116	popin.className = "infobulle";
2117
2118	let type = donneesMesuresPGT[0].getProperties().type;
2119	let etat = donneesMesuresPGT[0].getProperties().etat;
2120	let libelle = donneesMesuresPGT[0].getProperties().libelle;
2121	let capacite = donneesMesuresPGT[0].getProperties().capacite;
2122	let nomAxe = donneesMesuresPGT[0].getProperties().nom_axe;
2123	let restriction = donneesMesuresPGT[0].getProperties().restriction;
2124
2125    // Cas d'une zone de stockage
2126	if ((type && etat && type.trim() && etat.trim()) &&
2127	    (type === bisonfute.EventTypeName.AIRE || type === bisonfute.EventTypeName.PEAGE || type === bisonfute.EventTypeName.PLEINE_VOIE)) {
2128		let affichageType = type;
2129		if(type === bisonfute.EventTypeName.PLEINE_VOIE) {
2130			// Suppression du caractère "_" pour l'affichage dans le cas du PLEINE_VOIE
2131			affichageType = type.replace("_", " ");
2132		}
2133		let elementsLibelle = [affichageType, etat].join(" ");
2134		//Création de l'entêté
2135		let divContenuEntete = document.createElement("div");
2136		divContenuEntete.className = "contenuEntetePopin";
2137		let divTitreEntete = document.createElement("div");
2138		divTitreEntete.className = "divPictoSimple";
2139
2140		// Creation div icone événement en fonction du type
2141		let divImgPicto = createDivImgPicto(type, elementsLibelle);
2142		divTitreEntete.appendChild(divImgPicto);
2143		// Create div titre d'un element PGT
2144		let divTitreAttribut = createDivTitreAttribut(nomAxe, capacite, elementsLibelle);
2145
2146		divContenuEntete.appendChild(divTitreEntete);
2147		divContenuEntete.appendChild(divTitreAttribut);
2148
2149		popin.appendChild(divContenuEntete);
2150
2151		// Ajour le contenu du PGT
2152		let divContenu = document.createElement("div");
2153		divContenu.className = 'bf-popin-contenu contenu-pgt';
2154
2155		let element = document.createElement("div");
2156		element.className = "unElement";
2157		let objetPGT = document.createElement("div");
2158		objetPGT.className = "titreElement";
2159		objetPGT.innerHTML = affichageType;
2160
2161		element.appendChild(objetPGT);
2162
2163		const contenu = createContenuElementPGT(donneesMesuresPGT, 0)
2164
2165		element.appendChild(contenu);
2166		divContenu.appendChild(element);
2167
2168		popin.appendChild(divContenu);
2169
2170    // Cas d'une mesure de trafic
2171	} else if (type && nomAxe && type.trim() && nomAxe.trim() && restriction && restriction.trim()){
2172        //Création de l'entêté
2173        let divContenuEntete = document.createElement("div");
2174        divContenuEntete.className = "contenuEntetePopin";
2175        let divTitreEntete = document.createElement("div");
2176        divTitreEntete.className = "divTitreEnteteSimple";
2177
2178        let divTitreAttribut = createDivTitreAttributMesureTrafic(nomAxe, type, libelle);
2179
2180        divContenuEntete.appendChild(divTitreEntete);
2181        divContenuEntete.appendChild(divTitreAttribut);
2182
2183        popin.appendChild(divContenuEntete);
2184
2185        // Ajour le contenu du PGT
2186        let divContenu = document.createElement("div");
2187        divContenu.className = 'bf-popin-contenu contenu-mesures-trafic';
2188
2189        let element = document.createElement("div");
2190        element.className = "unElementMesuresTrafic";
2191
2192        const contenu = createContenuElementMesuresTrafic(donneesMesuresPGT)
2193
2194        element.appendChild(contenu);
2195        divContenu.appendChild(element);
2196
2197        popin.appendChild(divContenu);
2198    }
2199	return popin;
2200}
2201
2202/************************* Création du modèle popup agrégat de Mesures PGT *********************************************/
2203/****************************  Plusieurs Mesures PGT dans l'agrégat  ***********************************************/
2204function createPopupAgregatMesuresPGT(donneesMesuresPGT){
2205	let popin = document.createElement('div');
2206	popin.id = "popinTrafic";
2207	popin.className = "infobulle";
2208
2209	//Pour chaque Mesure PGT
2210	for(let j = 0; j < donneesMesuresPGT.length; j++) {
2211		let type = donneesMesuresPGT[j].getProperties().type;
2212		let etat = donneesMesuresPGT[j].getProperties().etat;
2213		let capacite = donneesMesuresPGT[j].getProperties().capacite;
2214		let nomAxe = donneesMesuresPGT[j].getProperties().nom_axe;
2215		if (type && etat && type.trim() && etat.trim()) {
2216			let affichageType = type;
2217			if(type === bisonfute.EventTypeName.PLEINE_VOIE) {
2218				// Suppression du caractère "_" pour l'affichage dans le cas du PLEINE_VOIE
2219				affichageType = type.replace("_", " ");
2220			}
2221			let elementsLibelle = [affichageType, etat].join(" ");
2222
2223			//ont créé la div de chaque lien VH de l'agrégat
2224			let divMesuresPGTAccordeon = document.createElement("div");
2225
2226			// le picto correspondant
2227			let divContenuEntete = document.createElement("div");
2228			divContenuEntete.className = "contenuEntetePopin";
2229			divContenuEntete.setAttribute("data-value", j);
2230
2231			divContenuEntete.onclick = function () {
2232				let elementClique = $(this).attr("data-value");
2233				$(this).next("div").slideToggle("normal");
2234				$(this).next("div").show();
2235				majSensFleches($(this).children(".conteneurFleche").children(".accordion-arrow"));
2236				$(".contenuEntetePopin").each(function () {
2237					if ($(this).attr("data-value") !== elementClique) {
2238						$(this).next("div").slideUp("normal");
2239						$(this).children(".conteneurFleche").children(".accordion-arrow").removeClass("open");
2240						$(this).children(".conteneurFleche").children(".accordion-arrow").addClass("close");
2241					}
2242				});
2243			};
2244
2245			//Création de la grosse flèche à gauche de l'élément
2246			let divConteneurPictoFleche = document.createElement("div");
2247			divConteneurPictoFleche.className = "conteneurFleche";
2248			let pictoFleche = document.createElement("div");
2249			//Tous les éléments sont repliés
2250			pictoFleche.className = "accordion-arrow close flecheGeneralePopin";
2251			divConteneurPictoFleche.appendChild(pictoFleche);
2252			divContenuEntete.appendChild(divConteneurPictoFleche);
2253
2254			let divImgPicto = createDivImgPicto(type, elementsLibelle);
2255			divContenuEntete.appendChild(divImgPicto);
2256			// Create div titre d'un element PGT
2257			let divTitreAttribut = createDivTitreAttribut(nomAxe, capacite, elementsLibelle);
2258
2259			divContenuEntete.appendChild(divTitreAttribut);
2260			divMesuresPGTAccordeon.appendChild(divContenuEntete);
2261
2262			// Ajour le contenu du PGT
2263			let divContenu = document.createElement("div");
2264			divContenu.className = 'bf-popin-contenu contenu-pgt';
2265
2266			let element = document.createElement("div");
2267			element.className = "unElement";
2268			let divVideArrow = document.createElement("div");
2269			let objetPGT = document.createElement("div");
2270			objetPGT.className = "titreElement";
2271			objetPGT.innerHTML = affichageType;
2272			objetPGT.appendChild(divVideArrow);
2273			objetPGT.onclick = function () {
2274				$(this).parent().children(".unContenu").slideToggle("slow");
2275				//On met à jour le sens des flèches
2276				majSensFleches($(this).children(".accordion-arrow"));
2277			}
2278			element.appendChild(objetPGT);
2279
2280			let contenu = createContenuElementPGT(donneesMesuresPGT, j);
2281
2282			element.appendChild(contenu);
2283			divVideArrow.className = "accordion-arrow open";
2284			divContenu.appendChild(element);
2285
2286			$(divContenu).hide();
2287
2288			divMesuresPGTAccordeon.appendChild(divContenu);
2289			popin.appendChild(divMesuresPGTAccordeon);
2290		}
2291	}
2292	return popin;
2293}
2294
2295// Creation div icône événement en fonction du type
2296function createDivImgPicto(type, elementsLibelle) {
2297	let divImgPicto = document.createElement("div");
2298	divImgPicto.className = "divPicto";
2299	let imgPicto = document.createElement("span");
2300	imgPicto.className = "pictoEvtPGT " + bisonfute.EventTypeName.ZONEDESTOCKAGEPGT.toLowerCase();
2301	imgPicto.setAttribute("style", "background-image : url(" + bisonfute.ApiRoutes.pgtzonestockage);
2302	imgPicto.title = elementsLibelle;
2303	divImgPicto.appendChild(imgPicto);
2304	return divImgPicto;
2305}
2306
2307// Create div titre d'un element PGT
2308function createDivTitreAttribut(nomAxe, capacite, elementsLibelle){
2309	//insertion titre
2310	let divTitreAttribut = document.createElement("div");
2311	divTitreAttribut.className = "titreAttributs";
2312	let titre = document.createElement("h3");
2313	titre.className = 'bf-popin-title titre-pgt';
2314	let texteTitre = document.createTextNode(elementsLibelle);
2315	titre.appendChild(texteTitre);
2316	divTitreAttribut.appendChild(titre);
2317
2318	let sousTitre = document.createElement("div");
2319	sousTitre.className = 'bf-popin-sous-title sous-titre-pgt';
2320	let elementsSousTitre;
2321	if (nomAxe && nomAxe.trim()) {
2322		elementsSousTitre = [nomAxe, "-", "Capacite :", capacite];
2323	} else {
2324		elementsSousTitre = ["Capacite :", capacite];
2325	}
2326	let texteSousTitre = document.createTextNode(elementsSousTitre.join(" "));
2327	sousTitre.appendChild(texteSousTitre);
2328	divTitreAttribut.appendChild(sousTitre);
2329
2330	return divTitreAttribut;
2331}
2332
2333// Create div du contenu d'un element PGT
2334function createContenuElementPGT(donneesMesuresPGT, j) {
2335	let contenu = document.createElement("div");
2336	contenu.className = "unContenu";
2337
2338	// Bloc validite
2339	let debutValidite = donneesMesuresPGT[j].getProperties().dh_debut;
2340	let finValidite = donneesMesuresPGT[j].getProperties().dh_fin;
2341	if (debutValidite && finValidite && debutValidite.trim() && finValidite.trim()) {
2342
2343		let divDebutValidite = document.createElement("div");
2344		divDebutValidite.className = "debutValiditePGT";
2345		let elementsDebutValidite = ["Début validité :", debutValidite];
2346		let debutVal = document.createTextNode(elementsDebutValidite.join(" "));
2347		divDebutValidite.appendChild(debutVal);
2348
2349		let divFinValidite = document.createElement("div");
2350		let elementsFinValidite = ["Fin de validité :", finValidite];
2351		let finVal = document.createTextNode(elementsFinValidite.join(" "));
2352		divFinValidite.appendChild(finVal);
2353		contenu.appendChild(divDebutValidite);
2354		contenu.appendChild(divFinValidite);
2355	}
2356	// Bloc nombre de PL stockes
2357	let nbrPlStockes = donneesMesuresPGT[j].getProperties().nb_pl_stockes;
2358	if (nbrPlStockes) {
2359		let paragraphNbrPlStockes = document.createElement("div");
2360		paragraphNbrPlStockes.className = "nbrPlStockesPGT";
2361		let elementsNbrPlStockes = ["Nombre de PL stockés :", nbrPlStockes];
2362		const textNbrPlStockes = document.createTextNode(elementsNbrPlStockes.join(" "));
2363		paragraphNbrPlStockes.appendChild(textNbrPlStockes);
2364		contenu.appendChild(paragraphNbrPlStockes);
2365	}
2366	// Bloc taux de remplissage
2367	const tauxRemplissage = donneesMesuresPGT[j].getProperties().taux_remplissage;
2368	if (tauxRemplissage) {
2369		let paragraphTauxRemplissage = document.createElement("div");
2370		paragraphTauxRemplissage.className = "tauxRemplisagePGT";
2371		let elementsTauxRemplissage = ["Taux de remplissage :", tauxRemplissage + "%"];
2372		const textTauxRemplissage = document.createTextNode(elementsTauxRemplissage.join(" "));
2373		paragraphTauxRemplissage.appendChild(textTauxRemplissage);
2374		contenu.appendChild(paragraphTauxRemplissage);
2375	}
2376
2377	// Bloc sens
2378	let sensDe = donneesMesuresPGT[j].getProperties().sens_de;
2379	let sensVers = donneesMesuresPGT[j].getProperties().sens_vers;
2380	if (sensDe && sensVers && sensDe.trim() && sensVers.trim()) {
2381		let divSens = document.createElement("div");
2382		divSens.className = "sensPGT";
2383		let elementsSens = ["Sens : de", sensDe, "à", sensVers]
2384		const sens = document.createTextNode(elementsSens.join(" "));
2385		divSens.appendChild(sens);
2386		contenu.appendChild(divSens);
2387	}
2388
2389	// Bloc localisation
2390	const prDebut = donneesMesuresPGT[j].getProperties().pk_pr_debut;
2391	const prFin = donneesMesuresPGT[j].getProperties().pk_pr_fin;
2392	if (prDebut && prFin && prDebut.trim() && prFin.trim()) {
2393		let paragraphPR = document.createElement("div");
2394		paragraphPR.className = "PR_PGT";
2395		let elementsPR = ["PR début :", prDebut, " - ", "PR fin :", prFin];
2396		const PR = document.createTextNode(elementsPR.join(" "));
2397		paragraphPR.appendChild(PR);
2398		contenu.appendChild(paragraphPR);
2399	}
2400
2401	const axe = donneesMesuresPGT[j].getProperties().nom_axe;
2402	const comm = donneesMesuresPGT[j].getProperties().communes;
2403	const dep = donneesMesuresPGT[j].getProperties().departements;
2404	const codeDep = donneesMesuresPGT[j].getProperties().code_dep;
2405	if (axe && comm && dep && codeDep && axe.trim() && comm.trim() && dep.trim() && codeDep.trim()) {
2406		let paragraphRoute = document.createElement("div");
2407		paragraphRoute.className = "routePGT"
2408		let elementsCodeDep = ["(", donneesMesuresPGT[j].getProperties().code_dep, ")"].join("");
2409		let elementsRoute = [axe, comm, "-", dep, elementsCodeDep];
2410		const route = document.createTextNode(elementsRoute.join(" "));
2411		paragraphRoute.appendChild(route);
2412		contenu.appendChild(paragraphRoute);
2413	}
2414	return contenu;
2415}
2416
2417/******************* Mettre en forme les données récupérées pour le popup Aire services et repos ********************************/
2418/*****************************************************************************************************************/
2419function formatDataAireServicesRepos(donneesMesuresAsr) {
2420    const nonCommunique = "NC";
2421
2422	// Modèle sans agrégat avec 1 element
2423	if(donneesMesuresAsr.length === 1){
2424		popin = createPopupSimpleAireServicesRepos(donneesMesuresAsr, nonCommunique);
2425	}
2426	//modèle avec agrégat
2427	else
2428	{
2429		popin = createPopupAgregatAireServicesEtRepos(donneesMesuresAsr, nonCommunique);
2430	}
2431	return popin;
2432}
2433
2434
2435/************************* Création du modèle popup simple de Aire de services et repos *********************************************/
2436/**************************** Un seule modèle dans Aire de services et repos ***********************************************/
2437function createPopupSimpleAireServicesRepos(donneesAsr, nonCommunique){
2438	let popin = document.createElement('div');
2439	popin.id = "popinTrafic";
2440	popin.className = "infobulle";
2441
2442	let nature = donneesAsr[0].getProperties().nature;
2443	let nom = donneesAsr[0].getProperties().nom;
2444	let sens = donneesAsr[0].getProperties().sens;
2445	let nomAxe = donneesAsr[0].getProperties().axe;
2446	let commune = donneesAsr[0].getProperties().commune;
2447	let departement = donneesAsr[0].getProperties().departement;
2448
2449	if (nature && nom) {
2450		//Création de l'entêté
2451		let divContenuEntete = document.createElement("div");
2452		divContenuEntete.className = "contenuEntetePopin contenuEntetePopinAsr";
2453		let divTitreEntete = document.createElement("div");
2454		divTitreEntete.className = "divPictoSimple";
2455
2456		// Creation div icone événement en fonction du nature
2457		let divImgPicto = createDivImgPictoAsr(nature);
2458		divTitreEntete.appendChild(divImgPicto);
2459		divContenuEntete.appendChild(divTitreEntete);
2460
2461        let divTitreAttribut = createDivTitreAttributAsr(nature, nomAxe, nom, sens, departement, commune, nonCommunique);
2462		divContenuEntete.appendChild(divTitreAttribut);
2463
2464		popin.appendChild(divContenuEntete);
2465
2466		// Ajour le contenu du ASR
2467		let divContenu = document.createElement("div");
2468		divContenu.className = 'bf-popin-contenu contenu-asr';
2469
2470		let element = document.createElement("div");
2471		element.className = "unElement unElementAsr";
2472		const contenu = createContenuElementASR(donneesAsr, 0, nonCommunique)
2473
2474		element.appendChild(contenu);
2475		divContenu.appendChild(element);
2476
2477		popin.appendChild(divContenu);
2478	}
2479	return popin;
2480}
2481
2482/************************* Création du modèle popup agrégat de de Aire de services et repos *********************************************/
2483/****************************  Plusieurs Aire de services et repos dans l'agrégat  ***********************************************/
2484function createPopupAgregatAireServicesEtRepos(donneesAsr, nonCommunique){
2485	let popin = document.createElement('div');
2486	popin.id = "popinTrafic";
2487	popin.className = "infobulle";
2488
2489	//Pour chaque ASR
2490	for(let j = 0; j < donneesAsr.length; j++) {
2491		let nature = donneesAsr[j].getProperties().nature;
2492		let nom = donneesAsr[j].getProperties().nom;
2493		let sens = donneesAsr[j].getProperties().sens;
2494		let nomAxe = donneesAsr[j].getProperties().axe;
2495		let commune = donneesAsr[j].getProperties().commune;
2496		let departement = donneesAsr[j].getProperties().departement;
2497		if (nature && nom) {
2498
2499			//ont créé la div de chaque ASR de l'agrégat
2500			let divASRAccordeon = document.createElement("div");
2501
2502			// le picto correspondant
2503			let divContenuEntete = document.createElement("div");
2504			divContenuEntete.className = "contenuEntetePopin contenuEntetePopinAsr";
2505			divContenuEntete.setAttribute("data-value", j);
2506
2507			divContenuEntete.onclick = function () {
2508				let elementClique = $(this).attr("data-value");
2509				$(this).next("div").slideToggle("normal");
2510				$(this).next("div").show();
2511				majSensFleches($(this).children(".conteneurFleche").children(".accordion-arrow"));
2512				$(".contenuEntetePopin").each(function () {
2513					if ($(this).attr("data-value") !== elementClique) {
2514						$(this).next("div").slideUp("normal");
2515						$(this).children(".conteneurFleche").children(".accordion-arrow").removeClass("open");
2516						$(this).children(".conteneurFleche").children(".accordion-arrow").addClass("close");
2517					}
2518				});
2519			};
2520
2521			//Création de la grosse flèche à gauche de l'élément
2522			let divConteneurPictoFleche = document.createElement("div");
2523			divConteneurPictoFleche.className = "conteneurFleche";
2524			let pictoFleche = document.createElement("div");
2525			//Tous les éléments sont repliés
2526			pictoFleche.className = "accordion-arrow close flecheGeneralePopin";
2527			divConteneurPictoFleche.appendChild(pictoFleche);
2528			divContenuEntete.appendChild(divConteneurPictoFleche);
2529
2530			let divImgPicto = createDivImgPictoAsr(nature);
2531			divContenuEntete.appendChild(divImgPicto);
2532
2533			let divTitreAttribut = createDivTitreAttributAsr(nature, nomAxe, nom, sens, departement, commune, nonCommunique);
2534
2535			divContenuEntete.appendChild(divTitreAttribut);
2536			divASRAccordeon.appendChild(divContenuEntete);
2537
2538			// Ajouter le contenu du ASR
2539			let divContenu = document.createElement("div");
2540			divContenu.className = 'bf-popin-contenu contenu-asr';
2541
2542			let element = document.createElement("div");
2543			element.className = "unElement unElementAsr";
2544			let divVideArrow = document.createElement("div");
2545			let objetAsr = document.createElement("div");
2546			objetAsr.onclick = function () {
2547				$(this).parent().children(".unContenu").slideToggle("slow");
2548				//On met à jour le sens des flèches
2549				majSensFleches($(this).children(".accordion-arrow"));
2550			}
2551			element.appendChild(objetAsr);
2552
2553			let contenu = createContenuElementASR(donneesAsr, j, nonCommunique);
2554
2555			element.appendChild(contenu);
2556			divVideArrow.className = "accordion-arrow open";
2557			divContenu.appendChild(element);
2558
2559			$(divContenu).hide();
2560
2561			divASRAccordeon.appendChild(divContenu);
2562			popin.appendChild(divASRAccordeon);
2563		}
2564	}
2565	return popin;
2566}
2567
2568// Create div titre d'un element ASR
2569function createDivTitreAttributAsr(nature, nomAxe, nom, sens, departement, commune, nonCommunique){
2570
2571    // Create div titre d'un element ASR
2572    let elementsLibelle1 = [nomAxe + " - " + nom];
2573    let elementsLibelle2 = "";
2574    if(commune && commune !== nonCommunique && departement && departement !== nonCommunique) {
2575        elementsLibelle2 = commune + " (" + departement + ")";
2576    } else if (departement && departement !== nonCommunique) {
2577        elementsLibelle2 = "(" + departement + ")";
2578    } else if (commune && commune !== nonCommunique) {
2579        elementsLibelle2 = commune;
2580    }
2581    if(sens && sens !== nonCommunique) {
2582        if (elementsLibelle2) {
2583            elementsLibelle2 += ",<br>";
2584        }
2585        elementsLibelle2 += "Sens : " + sens;
2586    }
2587	//insertion titre
2588	let divTitreAttribut = document.createElement("div");
2589	divTitreAttribut.className = "titreAttributs";
2590	let titre = document.createElement("h3");
2591	titre.className = 'bf-popin-title titre-asr';
2592	let texteTitre;
2593	switch (nature) {
2594		case bisonfute.EventTypeName.REPOS:
2595			texteTitre = document.createTextNode("Aire de repos");
2596			break;
2597		case bisonfute.EventTypeName.SERVICE:
2598			texteTitre = document.createTextNode("Aire de services");
2599			break;
2600	}
2601	titre.appendChild(texteTitre);
2602	divTitreAttribut.appendChild(titre);
2603
2604	let sousTitre1 = document.createElement("div");
2605	sousTitre1.className = 'bf-popin-sous-title sous-titre-asr';
2606	let texteSousTitre1 = document.createTextNode(elementsLibelle1);
2607	sousTitre1.appendChild(texteSousTitre1);
2608	divTitreAttribut.appendChild(sousTitre1);
2609
2610	let sousTitre2 = document.createElement("div");
2611	sousTitre2.className = 'bf-popin-sous-title sous-titre-asr';
2612	sousTitre2.innerHTML = elementsLibelle2;
2613	divTitreAttribut.appendChild(sousTitre2);
2614
2615	return divTitreAttribut;
2616}
2617
2618// Create div du contenu d'un element Aire services et repos
2619function createContenuElementASR(donneesAsr, j, nonCommunique) {
2620	let contenu = document.createElement("div");
2621	contenu.className = "unContenu";
2622
2623	// Bloc nombre de places
2624	let nbPlacesVl = donneesAsr[j].getProperties().nombre_de_places_vl;
2625	let nbPlacesPl = donneesAsr[j].getProperties().nombre_de_places_pl;
2626	let nbPlacesCampingCars = donneesAsr[j].getProperties().nombre_de_places_camping_cars;
2627	let nbPlacesPMR = donneesAsr[j].getProperties().nombre_de_places_pmr;
2628
2629    let divNbPlaces = document.createElement("div");
2630    divNbPlaces.className = "nbPlaces";
2631    let titreNbPlaces = document.createElement("div");
2632    titreNbPlaces.className = "titreBloc";
2633    titreNbPlaces.textContent = "Nombre de places";
2634    contenu.appendChild(titreNbPlaces);
2635    divNbPlaces.appendChild(titreNbPlaces);
2636
2637    //VL
2638    let contenuVl = document.createElement("div");
2639    let texteNbPlacesVl = nbPlacesVl || nonCommunique;
2640    contenuVl.textContent = "VL : " + texteNbPlacesVl;
2641    divNbPlaces.appendChild(contenuVl);
2642
2643    //PL
2644    let contenuPl = document.createElement("div");
2645    let texteNbPlacesPl = nbPlacesPl || nonCommunique;
2646    contenuPl.textContent = "PL : " + texteNbPlacesPl;
2647    divNbPlaces.appendChild(contenuPl);
2648
2649    //Camping Cars
2650    let contenuCampingCars = document.createElement("div");
2651    let texteNbPlacesCampingCars = nbPlacesCampingCars || nonCommunique;
2652    contenuCampingCars.textContent = "Camping-cars : " + texteNbPlacesCampingCars;
2653    divNbPlaces.appendChild(contenuCampingCars);
2654
2655    //PMR
2656    let contenuPmr = document.createElement("div");
2657    let texteNbPlacesPMR = nbPlacesPMR || nonCommunique;
2658    contenuPmr.textContent = "PMR : " + texteNbPlacesPMR;
2659    divNbPlaces.appendChild(contenuPmr);
2660
2661    contenu.appendChild(divNbPlaces);
2662
2663	let borneRechargeElectrique = donneesAsr[j].getProperties().bornes_de_recharge_electrique;
2664	let stationGonflable = donneesAsr[j].getProperties().station_de_gonflage;
2665	let douches = donneesAsr[j].getProperties().douches;
2666	let serviceEnseigneRestau = donneesAsr[j].getProperties().services_enseignes_restauration;
2667
2668    let divServices = document.createElement("div");
2669    divServices.className = "listeServices";
2670    let titreListeServices = document.createElement("div");
2671    titreListeServices.className = "titreBloc";
2672    titreListeServices.textContent = "Liste des services disponibles";
2673    contenu.appendChild(titreListeServices);
2674    divServices.appendChild(titreListeServices);
2675
2676	//Bornes de recharge électrique
2677    let contenuBRE = document.createElement("div");
2678    let texteBorneRechargeElectrique = borneRechargeElectrique || nonCommunique;
2679    contenuBRE.textContent = "Bornes de recharge électrique : " + texteBorneRechargeElectrique;
2680    divServices.appendChild(contenuBRE);
2681
2682    //Station de gonflage
2683    let contenuSG = document.createElement("div");
2684    let texteStationGonflable = stationGonflable || nonCommunique;
2685    contenuSG.textContent = "Station de gonflage : " + texteStationGonflable;
2686    divServices.appendChild(contenuSG);
2687
2688    //Douches
2689    let contenuDouches = document.createElement("div");
2690    let texteDouches = douches || nonCommunique;
2691    contenuDouches.textContent = "Douches : " + texteDouches;
2692    divServices.appendChild(contenuDouches);
2693
2694    //Services/Enseignes/Restauration
2695    let contenuSER = document.createElement("div");
2696    let texteServiceEnseigneRestau = serviceEnseigneRestau || nonCommunique;
2697    contenuSER.textContent = "Services/Enseignes/Restauration : " + texteServiceEnseigneRestau;
2698    divServices.appendChild(contenuSER);
2699
2700    contenu.appendChild(divServices);
2701
2702	return contenu;
2703}
2704
2705// Creation div icône événement en fonction du type
2706function createDivImgPictoAsr(nature) {
2707	let divImgPicto = document.createElement("div");
2708	divImgPicto.className = "divPicto";
2709	let imgPicto = document.createElement("span");
2710	imgPicto.className = "pictoEvtASR";
2711
2712	switch (nature) {
2713		case bisonfute.EventTypeName.REPOS:
2714			imgPicto.className = bisonfute.EventTypeName.REPOS.toLowerCase();
2715			imgPicto.setAttribute("style", "background-image : url(" + bisonfute.ApiRoutes.airerepos);
2716			break;
2717		case bisonfute.EventTypeName.SERVICE:
2718			imgPicto.className = bisonfute.EventTypeName.SERVICE;
2719			imgPicto.setAttribute("style", "background-image : url(" + bisonfute.ApiRoutes.aireservices);
2720			break;
2721	}
2722	imgPicto.title = nature;
2723
2724	divImgPicto.appendChild(imgPicto);
2725
2726	return divImgPicto;
2727}
2728
2729// Create div titre d'un element mesure trafic
2730function createDivTitreAttributMesureTrafic(nomAxe, type, libelle){
2731
2732    let elementsLibelle1 = [nomAxe + ", " + type];
2733    let elementsLibelle2 = "";
2734    if(libelle && libelle !== "undefined") {
2735        elementsLibelle2 = libelle;
2736    }
2737	// Create div titre d'un element mesure trafic
2738	let divTitreAttribut = document.createElement("div");
2739	divTitreAttribut.className = "titreAttributs";
2740	let titre = document.createElement("h3");
2741	titre.className = 'bf-popin-title titre-mesures-trafic';
2742    let texteTitre = document.createTextNode(elementsLibelle1);
2743    titre.appendChild(texteTitre);
2744    divTitreAttribut.appendChild(titre);
2745
2746    // Create div sous-titre d'un element mesure trafic
2747	let sousTitre = document.createElement("div");
2748	sousTitre.className = 'bf-popin-sous-title sous-titre-mesures-trafic';
2749	let texteSousTitre = document.createTextNode(elementsLibelle2);
2750	sousTitre.appendChild(texteSousTitre);
2751	divTitreAttribut.appendChild(sousTitre);
2752
2753	return divTitreAttribut;
2754}
2755
2756// Create div du contenu d'un element Aire services et repos
2757function createContenuElementMesuresTrafic(donneesMesuresPGT) {
2758	let contenu = document.createElement("div");
2759	contenu.className = "unContenu";
2760
2761	// Bloc validite
2762	let debutValidite = donneesMesuresPGT[0].getProperties().dh_debut;
2763	let finValidite = donneesMesuresPGT[0].getProperties().dh_fin;
2764	if(debutValidite && finValidite) {
2765	    let contenuDebutValidite = document.createElement("div");
2766	    contenuDebutValidite.textContent = "Début validité : " + debutValidite;
2767        let contenuFinValidite = document.createElement("div");
2768        contenuFinValidite.textContent = "Fin validité : " + finValidite;
2769	    contenu.appendChild(contenuDebutValidite);
2770	    contenu.appendChild(contenuFinValidite);
2771	}
2772
2773	let evenementGenerateur = donneesMesuresPGT[0].getProperties().evenement_generateur;
2774
2775	if(evenementGenerateur && evenementGenerateur !=="AUCUN"){
2776	    let contenuElGen = document.createElement("div");
2777	    contenuElGen.textContent = "Evenement : " + evenementGenerateur;
2778	    contenu.appendChild(contenuElGen);
2779	}
2780
2781    let restriction = donneesMesuresPGT[0].getProperties().restriction;
2782
2783    if(restriction && restriction !=="AUCUNE"){
2784		let restrictionName = bisonfute.RestrictionTypeName[restriction] || restriction;
2785
2786		let contenuRestriction = document.createElement("div");
2787        contenuRestriction.textContent = "Restriction : " + restrictionName;
2788        contenu.appendChild(contenuRestriction);
2789    }
2790
2791    let limVitessePl = donneesMesuresPGT[0].getProperties().limitation_vitesse_pl;
2792
2793    if(limVitessePl){
2794        let contenuLimVitessePl = document.createElement("div");
2795        contenuLimVitessePl.textContent = "Lim. vitesse PL : " + limVitessePl+" Km/h";
2796        contenu.appendChild(contenuLimVitessePl);
2797    }
2798
2799    let limVitesseVl = donneesMesuresPGT[0].getProperties().limitation_vitesse_vl;
2800
2801    if(limVitesseVl){
2802        let contenuLimVitesseVl = document.createElement("div");
2803        contenuLimVitesseVl.textContent = "Lim. vitesse VL : " + limVitesseVl+" Km/h";
2804        contenu.appendChild(contenuLimVitesseVl);
2805    }
2806
2807    let intDep = donneesMesuresPGT[0].getProperties().interdiction_depassement;
2808
2809    if(intDep && intDep !== "NON"){
2810        let contenuIntDep = document.createElement("div");
2811        contenuIntDep.textContent = "Interdiction dépassement : " + intDep;
2812        contenu.appendChild(contenuIntDep);
2813    }
2814
2815    let sens = generateSens(donneesMesuresPGT);
2816
2817    if(sens) {
2818        let contenuSens = document.createElement("div");
2819        contenuSens.className = "sensMesuresTrafic";
2820        contenuSens.textContent = sens;
2821        contenu.appendChild(contenuSens);
2822    }
2823
2824	return contenu;
2825}
2826
2827// Create div du sens d'un element Mesures Trafic PGT
2828
2829
2830
2831function generateSens(donneesMesuresPGT) {
2832    let comDeb = donneesMesuresPGT[0].getProperties().sens_de;
2833    let comFin = donneesMesuresPGT[0].getProperties().sens_vers;
2834
2835    if(comDeb && comFin) {
2836        return `Sens : de ${comDeb} à ${comFin}`;
2837    }
2838
2839    let codesDep = donneesMesuresPGT[0].getProperties().code_dep;
2840    let communes = donneesMesuresPGT[0].getProperties().communes;
2841    let depDeb;
2842    let depFin;
2843
2844    if(communes) {
2845        let arrCommunes = communes.split(",").map(comm => comm.trim());
2846
2847        if (arrCommunes.length == 1) {
2848            comDeb = arrCommunes[0];
2849            comFin = arrCommunes[0];
2850        } else if (arrCommunes.length > 1) {
2851            comDeb = arrCommunes[0];
2852            comFin = arrCommunes[arrCommunes.length - 1];
2853        }
2854    }
2855
2856    if(codesDep) {
2857        let arrCodesDep = codesDep.split(",").map(dep => dep.trim());
2858
2859        if (arrCodesDep.length == 1) {
2860            depDeb = arrCodesDep[0];
2861            depFin = arrCodesDep[0];
2862        } else if (arrCodesDep.length > 1) {
2863            depDeb = arrCodesDep[0];
2864            depFin = arrCodesDep[arrCodesDep.length - 1];
2865        }
2866    }
2867
2868    return comDeb && comFin && depDeb && depFin ? `Sens : de ${comDeb} (${depDeb}) à ${comFin} (${depFin})` : "";
2869}
2870/*
2871 ### jQuery XML to JSON Plugin v1.2 - 2013-02-18 ###
2872 * http://www.fyneworks.com/ - [email protected]
2873	* Licensed under http://en.wikipedia.org/wiki/MIT_License
2874 ###
2875 Website: http://www.fyneworks.com/jquery/xml-to-json/
2876*//*
2877 # INSPIRED BY: http://www.terracoder.com/
2878           AND: http://www.thomasfrank.se/xml_to_json.html
2879											AND: http://www.kawa.net/works/js/xml/objtree-e.html
2880*//*
2881 This simple script converts XML (document of code) into a JSON object. It is the combination of 2
2882 'xml to json' great parsers (see below) which allows for both 'simple' and 'extended' parsing modes.
2883*/
2884// Avoid collisions
2885;if(window.jQuery) (function($){
2886 
2887 // Add function to jQuery namespace
2888 $.extend({
2889  
2890  // converts xml documents and xml text to json object
2891  xml2json: function(xml, extended) {
2892   if(!xml) return {}; // quick fail
2893   
2894   //### PARSER LIBRARY
2895   // Core function
2896   function parseXML(node, simple){
2897    if(!node) return null;
2898    var txt = '', obj = null, att = null;
2899    var nt = node.nodeType, nn = jsVar(node.localName || node.nodeName);
2900    var nv = node.text || node.nodeValue || '';
2901    /*DBG*/ //if(window.console) console.log(['x2j',nn,nt,nv.length+' bytes']);
2902    if(node.childNodes){
2903     if(node.childNodes.length>0){
2904      /*DBG*/ //if(window.console) console.log(['x2j',nn,'CHILDREN',node.childNodes]);
2905      $.each(node.childNodes, function(n,cn){
2906       var cnt = cn.nodeType, cnn = jsVar(cn.localName || cn.nodeName);
2907       var cnv = cn.text || cn.nodeValue || '';
2908       /*DBG*/ //if(window.console) console.log(['x2j',nn,'node>a',cnn,cnt,cnv]);
2909       if(cnt == 8){
2910        /*DBG*/ //if(window.console) console.log(['x2j',nn,'node>b',cnn,'COMMENT (ignore)']);
2911        return; // ignore comment node
2912       }
2913       else if(cnt == 3 || cnt == 4 || !cnn){
2914        // ignore white-space in between tags
2915        if(cnv.match(/^\s+$/)){
2916         /*DBG*/ //if(window.console) console.log(['x2j',nn,'node>c',cnn,'WHITE-SPACE (ignore)']);
2917         return;
2918        };
2919        /*DBG*/ //if(window.console) console.log(['x2j',nn,'node>d',cnn,'TEXT']);
2920        txt += cnv.replace(/^\s+/,'').replace(/\s+$/,'');
2921								// make sure we ditch trailing spaces from markup
2922       }
2923       else{
2924        /*DBG*/ //if(window.console) console.log(['x2j',nn,'node>e',cnn,'OBJECT']);
2925        obj = obj || {};
2926        if(obj[cnn]){
2927         /*DBG*/ //if(window.console) console.log(['x2j',nn,'node>f',cnn,'ARRAY']);
2928         
2929									// http://forum.jquery.com/topic/jquery-jquery-xml2json-problems-when-siblings-of-the-same-tagname-only-have-a-textnode-as-a-child
2930									if(!obj[cnn].length) obj[cnn] = myArr(obj[cnn]);
2931									obj[cnn] = myArr(obj[cnn]);
2932         
2933									obj[cnn][ obj[cnn].length ] = parseXML(cn, true/* simple */);
2934         obj[cnn].length = obj[cnn].length;
2935        }
2936        else{
2937         /*DBG*/ //if(window.console) console.log(['x2j',nn,'node>g',cnn,'dig deeper...']);
2938         obj[cnn] = parseXML(cn);
2939        };
2940       };
2941      });
2942     };//node.childNodes.length>0
2943    };//node.childNodes
2944    if(node.attributes){
2945     if(node.attributes.length>0){
2946      /*DBG*/ //if(window.console) console.log(['x2j',nn,'ATTRIBUTES',node.attributes])
2947      att = {}; obj = obj || {};
2948      $.each(node.attributes, function(a,at){
2949       var atn = jsVar(at.name), atv = at.value;
2950       att[atn] = atv;
2951       if(obj[atn]){
2952        /*DBG*/ //if(window.console) console.log(['x2j',nn,'attr>',atn,'ARRAY']);
2953        
2954								// http://forum.jquery.com/topic/jquery-jquery-xml2json-problems-when-siblings-of-the-same-tagname-only-have-a-textnode-as-a-child
2955								//if(!obj[atn].length) obj[atn] = myArr(obj[atn]);//[ obj[ atn ] ];
2956        obj[cnn] = myArr(obj[cnn]);
2957								
2958								obj[atn][ obj[atn].length ] = atv;
2959        obj[atn].length = obj[atn].length;
2960       }
2961       else{
2962        /*DBG*/ //if(window.console) console.log(['x2j',nn,'attr>',atn,'TEXT']);
2963        obj[atn] = atv;
2964       };
2965      });
2966      //obj['attributes'] = att;
2967     };//node.attributes.length>0
2968    };//node.attributes
2969    if(obj){
2970     obj = $.extend( (txt!='' ? new String(txt) : {}),/* {text:txt},*/ obj || {}/*, att || {}*/);
2971     txt = (obj.text) ? (typeof(obj.text)=='object' ? obj.text : [obj.text || '']).c
2971oncat([txt]) : txt;
2972     if(txt) obj.text = txt;
2973     txt = '';
2974    };
2975    var out = obj || txt;
2976    //console.log([extended, simple, out]);
2977    if(extended){
2978     if(txt) out = {};//new String(out);
2979     txt = out.text || txt || '';
2980     if(txt) out.text = txt;
2981     if(!simple) out = myArr(out);
2982    };
2983    return out;
2984   };// parseXML
2985   // Core Function End
2986   // Utility functions
2987   var jsVar = function(s){ return String(s || '').replace(/-/g,"_"); };
2988   
2989			// NEW isNum function: 01/09/2010
2990			// Thanks to Emile Grau, GigaTecnologies S.L., www.gigatransfer.com, www.mygigamail.com
2991			function isNum(s){
2992				// based on utility function isNum from xml2json plugin (http://www.fyneworks.com/ - [email protected])
2993				// few bugs corrected from original function :
2994				// - syntax error : regexp.test(string) instead of string.test(reg)
2995				// - regexp modified to accept  comma as decimal mark (latin syntax : 25,24 )
2996				// - regexp modified to reject if no number before decimal mark  : ".7" is not accepted
2997				// - string is "trimmed", allowing to accept space at the beginning and end of string
2998				var regexp=/^((-)?([0-9]+)(([\.\,]{0,1})([0-9]+))?$)/
2999				return (typeof s == "number") || regexp.test(String((s && typeof s == "string") ? jQuery.trim(s) : ''));
3000			};
3001			// OLD isNum function: (for reference only)
3002			//var isNum = function(s){ return (typeof s == "number") || String((s && typeof s == "string") ? s : '').test(/^((-)?([0-9]*)((\.{0,1})([0-9]+))?$)/); };
3003																
3004   var myArr = function(o){
3005    
3006				// http://forum.jquery.com/topic/jquery-jquery-xml2json-problems-when-siblings-of-the-same-tagname-only-have-a-textnode-as-a-child
3007				//if(!o.length) o = [ o ]; o.length=o.length;
3008    if(!$.isArray(o)) o = [ o ]; o.length=o.length;
3009				
3010				// here is where you can attach additional functionality, such as searching and sorting...
3011    return o;
3012   };
3013   // Utility functions End
3014   //### PARSER LIBRARY END
3015   
3016   // Convert plain text to xml
3017   if(typeof xml=='string') xml = $.text2xml(xml);
3018   
3019   // Quick fail if not xml (or if this is a node)
3020   if(!xml.nodeType) return;
3021   if(xml.nodeType == 3 || xml.nodeType == 4) return xml.nodeValue;
3022   
3023   // Find xml root node
3024   var root = (xml.nodeType == 9) ? xml.documentElement : xml;
3025   
3026   // Convert xml to json
3027   var out = parseXML(root, true /* simple */);
3028   
3029   // Clean-up memory
3030   xml = null; root = null;
3031   
3032   // Send output
3033   return out;
3034  },
3035  
3036  // Convert text to XML DOM
3037  text2xml: function(str) {
3038   // NOTE: I'd like to use jQuery for this, but jQuery makes all tags uppercase
3039   //return $(xml)[0];
3040   var out;
3041   try{
3042    var xml = ((!$.support.opacity && !$.support.style))?new ActiveXObject("Microsoft.XMLDOM"):new DOMParser();
3043    xml.async = false;
3044   }catch(e){ throw new Error("XML Parser could not be instantiated") };
3045   try{
3046    if((!$.support.opacity && !$.support.style)) out = (xml.loadXML(str))?xml:false;
3047    else out = xml.parseFromString(str, "text/xml");
3048   }catch(e){ throw new Error("Error parsing XML string") };
3049   return out;
3050  }
3051		
3052 }); // extend $
3053
3054})(jQuery);
3055/**
3056Auteur : Jérémy Latorre
3057Date: 11/06/2013
3058Description:
3059	- Gestion du fonctionnement du carousel
3060**/
3061
3062
3063//Verrou pour eviter les conflict entre l'animation et l'action d'un user
3064var lock = false;
3065//Methode event de scroll auto dans le menu - descente
3066function triggerClickLeft() {
3067	
3068}
3069
3070//Methode event de scroll auto dans le menu - monté
3071function triggerClickRight() {
3072	
3073}
3074
3075
3076//Methode réalisant la translation des articles vers le haut
3077function slideToTop() {
3078	if ((parseInt($(".vignette_carousel:first-child").css("top")) !=0 ) && (lock == false) && (parseInt($(".vignette_carousel:first-child").css("top"))+133 <= 1 ) ) {
3079
3080		//verrouille l'acces à la méthode
3081		lock = true;
3082		$("#acceuil #colonne3 #conteneur_carousel > .vignette_carousel").each(function() {
3083			var position = parseInt($(this).css("top"));
3084			$(this).animate({
3085				position : 'absolute',
3086				top : (position + 133)
3087			}, 100, function() {//action déclanchée à la fin de l'animation
3088				//libération du verrou
3089				lock = false;
3090			});
3091		});
3092	}
3093}
3094
3095//Methode réalisant la translation des articles vers le bas
3096function slideToBottom() {
3097	if ((parseInt($(".vignette_carousel:last-child").css("top")) >= parseInt($("#acceuil #colonne3 #conteneur_carousel").css("height"))) && (lock == false)) {
3098
3099		//verrouille l'acces à la méthode
3100		lock = true;
3101		var total = $(".vignette_carousel:last-child").outerHeight() + $(".vignette_carousel:last-child").offset().top;
3102		$("#acceuil #colonne3 #conteneur_carousel > .vignette_carousel").each(function() {
3103			var position = parseInt($(this).css("top"));
3104			$(this).animate({
3105				position : 'absolute',
3106				top : (position - 133)
3107			}, 100, function() {//action déclanchée à la fin de l'animation
3108				//libération du verrou
3109				lock = false;
3110			});
3111		});
3112	}
3113}
3114function getParameterByName(name, url) {
3115    if (!url) {
3116      url = window.location.href;
3117    }
3118    name = name.replace(/[\[\]]/g, "\\$&");
3119    var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
3120        results = regex.exec(url);
3121    if (!results) return null;
3122    if (!results[2]) return '';
3123    return decodeURIComponent(results[2].replace(/\+/g, " "));
3124}
3125
3126(function(a,b){if(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|kfapwi|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od|ad)|iris|kindle|lge |maemo|midp|mmp|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|phone)|android|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))){
3127	var lastInDays = 7;
3128		var fromMobileParam = getParameterByName("fromMobile");
3129		var desktopParam = getParameterByName("desktop");
3130		var mobileParam = getParameterByName("smartphone");
3131		// Récupération de la valeur du cookie à setter via les paramètres d'urls du côté de l'application Web
3132		if (mobileParam != null && mobileParam=="true") {
3133			// Set le cookie
3134			bisonfute.geoloc.CookiesBrowser.INSTANCE.setCookie('smartphone',true,lastInDays);
3135			bisonfute.geoloc.CookiesBrowser.INSTANCE.setCookie('desktop',false,lastInDays);
3136			bisonfute.geoloc.CookiesBrowser.INSTANCE.setCookie('fromMobile',false,lastInDays);
3137			// Redirige vers la version mobile
3138			window.location=b;
3139		    
3140		} else if(desktopParam != null && desktopParam=="true"){
3141			// Set le cookie
3142			bisonfute.geoloc.CookiesBrowser.INSTANCE.setCookie('desktop',true,lastInDays);
3143			bisonfute.geoloc.CookiesBrowser.INSTANCE.setCookie('smartphone',false,lastInDays);
3144			bisonfute.geoloc.CookiesBrowser.INSTANCE.setCookie('fromMobile',false,lastInDays);
3145
3146			// Reste sur la version desktop
3147			
3148		} else if(fromMobileParam != null && fromMobileParam=="true"){
3149			// Set le cookie
3150			bisonfute.geoloc.CookiesBrowser.INSTANCE.setCookie('fromMobile',true,lastInDays);
3151			bisonfute.geoloc.CookiesBrowser.INSTANCE.setCookie('desktop',false,lastInDays);
3152			bisonfute.geoloc.CookiesBrowser.INSTANCE.setCookie('smartphone',false,lastInDays);
3153
3154			// Reste sur la version desktop
3155			
3156		};
3157		
3158		var x = bisonfute.geoloc.CookiesBrowser.INSTANCE.getCookie('smartphone');// si déjà choisi mobile à true
3159		var y = bisonfute.geoloc.CookiesBrowser.INSTANCE.getCookie('desktop');// si déjà choisi ordinateur à true
3160		var fromMobile = bisonfute.geoloc.CookiesBrowser.INSTANCE.getCookie('fromMobile');
3161		if(fromMobile=="true"){
3162			bisonfute.geoloc.CookiesBrowser.INSTANCE.removeCookie('fromMobile');
3163			bisonfute.geoloc.CookiesBrowser.INSTANCE.removeCookie('smartphone');
3164			bisonfute.geoloc.CookiesBrowser.INSTANCE.removeCookie('desktop');
3165		}
3166		else{
3167			if(x == "true"){
3168				window.location=b;
3169			} else if(y == "true"){
3170				// On reste sur cette page (index.html)
3171			}
3172			else{
3173				// Si pas de coockie , on le redirige vers le mobile avec le choix à faire	
3174				 if ((sessionStorage.getItem('tabletSessionWeb')== 'true') || bisonfute.geoloc.CookiesBrowser.INSTANCE.getCookie('tabletWeb') == 'true') {
3175						}
3176				else {
3177					window.location=b+"#viewport";
3178					}
3179			}
3180		}
3181	}})(navigator.userAgent||navigator.vendor||window.opera, bisonfute.core.INSTANCE.getUrls().mobile);/**
3182Auteur : Jérémy Latorre
3183Date: 11/06/2013
3184Description:
3185	- Gestion de la géolocalisation et de l'affichage de la carte de la page d'accueil
3186**/
3187
3188//On garde en mémoire la localisation de l'utilisateur et l'url de la carte
3189var localisation;
3190var urlCarteAccueil;
3191$(document).ready(function() {
3192	
3193	/*//au chargement de la page on instancie la carte en fonction de la zone de geolocalisation
3194	urlCarteAccueil = bisonfute.urls.INSTANCE.getCarteAccueil("fr");
3195	var carteAccueil = document.createElement("img");
3196	carteAccueil.alt = "Accédez au trafic en temps réel";
3197	carteAccueil.src = urlCarteAccueil;
3198	$("#mapAccueil").append(carteAccueil);
3199
3200	//Récupération de la position de l'utilisateur via l'api de geoloc
3201	
3202	// Callback donc asynchrone.
3203	var id = function(xy) {
3204		// retour du callback, et c'est à ce moment qu'on affecte la nouvelle valeur et qu'on modifie l'img dans le dom.
3205		urlCarteAccueil = bisonfute.urls.INSTANCE.getCarteAccueil(xy.id);
3206		carteAccueil.alt = "Accédez au trafic en temps réel";
3207		carteAccueil.src = urlCarteAccueil;
3208		$("#mapAccueil").append(carteAccueil);
3209	};
3210	
3211	// Appel de la geoloc qui prend un callback en param. 
3212	bisonfute.geoloc.getLocalisation(id,this);*/
3213	
3214	//positionnement de la carte par défaut pour le premier affichage avant géoloc
3215	fullLoc = "" + '571284.41' + "-" + '6744675.57' + "-" + 2300.0;
3216	bisonfute.geoloc.CookiesBrowser.INSTANCE.setCookie(bisonfute.env.cookies.name, fullLoc);
3217			
3218	m = new bisonfute.map.Map("map", {
3219			periode: 'accueil',
3220			cpcRenderer: creationPopup,
3221			vhRenderer: getHTMLPopupVHAsync,
3222			travauxRenderer: formatData,
3223			camerasRenderer: formatDataCameras,
3224			liensVHRenderer: formatDataLiensVH,
3225		});
3226	
3227	// Callback donc asynchrone.
3228	var id = function(xy) {
3229		// retour du callback, et c'est à ce moment qu'on positionne la carte en fonction du choix utilisateur sur la geoloc
3230		$("#map").empty();
3231		//si il n'accepte pas la geoloc, on cale la carte sur la position suivante
3232		if (xy.id == 'fr') {
3233			fullLoc = "" + '571284.41' + "-" + '6744675.57' + "-" + 2300.0;
3234			bisonfute.geoloc.CookiesBrowser.INSTANCE.setCookie(bisonfute.env.cookies.name, fullLoc);
3235		}
3236		//sinon, on place la carte en fonction de sa position
3237		else  {
3238			fullLoc = "" + xy.x + "-" + xy.y + "-" + 250.0;
3239			bisonfute.geoloc.CookiesBrowser.INSTANCE.setCookie(bisonfute.env.cookies.name, fullLoc);
3240		}
3241		
3242		m = new bisonfute.map.Map("map", {
3243			periode: 'accueil',
3244			cpcRenderer: creationPopup,
3245			vhRenderer: getHTMLPopupVHAsync,
3246			travauxRenderer: formatData,
3247			camerasRenderer: formatDataCameras,
3248			liensVHRenderer: formatDataLiensVH,
3249		});
3250	};
3251	
3252	// Appel de la geoloc qui prend un callback ci-dessus en param. 
3253	bisonfute.geoloc.getLocalisation(id,this);
3254	
3255});/**
3256 * Auteur : Jérémy Latorre Date: 11/06/2013 Description: - Fichier appelé sur
3257 * toutes les pages - Gère la conservation de la langue entre les pages -
3258 * Recherche site dans le header Modification; 26/3/2015 hugues lienAcceuil
3259 * facultatif pour traficolor
3260 */
3261
3262$(document).ready(function() {
3263	// On associe la touche entrer au lancement de la recherche dans l'entete
3264	$("#search").keypress(function(event) {
3265		if (event.keyCode == 13) {
3266			location.href = rechercher();
3267		}
3268	});
3269
3270	// On récupère l'ensemble des liens externes
3271	$(".sites_gouv").each(function() {
3272		all_a = $(this).find("a");
3273		// On les forces dans un nouvel onglet
3274		for (i = 0; i < all_a.length; i++) {
3275			all_a[i].setAttribute("target", "_blank");
3276		}
3277	});
3278	// Gestion des langues dans le footer, et correction des anomalies
3279	gestionLang();
3280	// On tronque certains texte
3281	/*
3282	 * $(".textBandeau").each(function(){ $(this).trunk8({ lines:20,
3283	 * tooltip:false }); });
3284	 */
3285	$("#block_superpose").children(".block_superpose_texte").each(function() {
3286		$(this).trunk8({
3287			lines : 8,
3288			tooltip : false
3289		});
3290	});
3291	gestionOuvertureLiens($("#article"));
3292	gestionOuvertureLiens($("#rubrique"));
3293	gestionOuvertureLiens($("#contenu-ctx-vertical"));
3294	gestionOuvertureLiens($("#contenu-ctx-horizontal"));
3295	// Au clic sur le fond gris des popup, cela ferme la popup
3296	$("#black_popup").click(function() {
3297		fadeOut(500);
3298	});
3299});
3300
3301/**
3302 * ****************************** Positionner le popup au centre de la page
3303 * *******************************
3304 */
3305/** ******************************************************************************************************** */
3306function positionPopup() {
3307
3308	if (!$("#popup").is(':visible')) {
3309		return;
3310	}
3311	$("#popup").css({
3312		left : ($(window).width() - $('#popup').width()) / 2,
3313		top : ($(window).height() - $('#popup').height()) / 7,
3314		position : 'absolute'
3315	});
3316
3317	window.scrollTo(0, 0);
3318}
3319
3320/**
3321 * ************************** On gère l'ouverture des liens dans un nouvel
3322 * onglet ***************************
3323 */
3324/** ********************************************************************************************************** */
3325function gestionOuvertureLiens(element) {
3326	element.find("a").each(
3327			function() {
3328				if (!$(this).hasClass("article-institu")
3329						&& !$(this).hasClass("lienCodeContact")) {
3330					if ($(this).hasClass("LienTelecharg")
3331							|| $(this).hasClass("spip_out")) {
3332						$(this).attr("target", "_blank");
3333					}
3334				}
3335			});
3336
3337}
3338
3339/**
3340 * **************On génère le nouveau href du bouton recherher en fonction de la
3341 * recherche dans le header ******************
3342 */
3343/** ************************************************************************************************************************* */
3344function rechercher() {
3345	var motscle = $("#search").val();
3346	var tmp = motscle.replace(/\s/g, '_');
3347	var tmp2 = remplacerAccent(tmp);
3348	var lang = $("#current-lang").val();
3349	if (lang != "") {
3350		var nouvelleAdresse = "recherche,lang" + lang + ".html";
3351	} else {
3352		var nouvelleAdresse = "recherche.html";
3353	}
3354	sessionStorage.setItem("motscle", tmp);
3355	sessionStorage.setItem("lang", lang);
3356	sessionStorage.setItem("page", 1);
3357
3358	$("#search-button").attr("href", nouvelleAdresse);
3359	return nouvelleAdresse;
3360}
3361
3362/**
3363 * ************************** On vide la barre de recherche dans le header
3364 * ***************************
3365 */
3366/** *************************************************************************************************** */
3367function videBarre() {
3368	$("#search").val("");
3369}
3370/**
3371 * ************************** Gestion des liens dans le footer pour conserver la lang ***********************
3372 */
3373/** ********************************************************************************************************** */
3374function gestionLang() {
3375	// On récupère la langue
3376	var lang = $("#current-lang").val();
3377	// S'il y'a besoin on modifie les liens
3378	if (lang != "") {
3379		// On récupère les liens du footer
3380		var listeLiens = $("#article").find("a").each(
3381				function() {
3382					// si ce ne sont pas des liens externes alors on rajoute la
3383					// langue courrante en parametre pour la garder lors de la
3384					// navigation
3385					if ($(this).attr("href").lastIndexOf("http") == -1
3386							&& $(this).attr("href").lastIndexOf("IMG") == -1
3387							&& $(this).attr("href").lastIndexOf("lang") == -1
3388							&& $(this).id != "mapAccueil"
3389							&& !$(this).hasClass("url-calendrier")
3390							&& !$(this).parent().hasClass("onglet")
3391							&& !$(this).hasClass("lienAriane")) {
3392						var href = $(this).attr("href").replace('.html', '');
3393						var nouveauLien = href + ',lang' + lang + '.html';
3394						$(this).attr('href', nouveauLien);
3395
3396					}
3397				});
3398
3399		var listeLiens = $(".full").find("a").each(
3400				function() {
3401					// si ce ne sont pas des liens externes alors on rajoute la
3402					// langue courrante en parametre pour la garder lors de la
3403					// navigation
3404					if($(this).attr("href") != undefined)
3405						{if ($(this).attr("href").lastIndexOf("http") == -1
3406							&& $(this).attr("href").lastIndexOf("lang") == -1
3407							&& $(this).id != "mapAccueil"
3408							&& $(this).hasClass("spip_in")
3409							&& !$(this).parent().hasClass("onglet")
3410							&& !$(this).hasClass("lienAriane")) {
3411						var href = $(this).attr("href").replace('.html', '');
3412						var nouveauLien = href + ',lang' + lang + '.html';
3413						$(this).attr('href', nouveauLien);
3414
3415					}}
3416				});
3417		var listeLiens = $(".contenu-ctx-vertical").find("a").each(
3418				function() {
3419					// si ce ne sont pas des liens externes alors on rajoute la
3420					// langue courrante en parametre pour la garder lors de la
3421					// navigation
3422					if ($(this).attr("href").lastIndexOf("http") == -1
3423							&& $(this).attr("href").lastIndexOf("lang") == -1
3424							&& $(this).id != "mapAccueil"
3425							&& $(this).hasClass("spip_in")
3426							&& !$(this).parent().hasClass("onglet")
3427							&& !$(this).hasClass("lienAriane")) {
3428						var href = $(this).attr("href").replace('.html', '');
3429						var nouveauLien = href + ',lang' + lang + '.html';
3430						$(this).attr('href', nouveauLien);
3431
3432					}
3433				});
3434
3435		var listeLiens = $(".footer").find("a").each(function() {
3436			// si ce ne sont pas des liens externes alors on rajoute la langue
3437			// courrante en parametre pour la garder lors de la navigation
3438			if ($(this).attr("href").lastIndexOf("http") == -1) {
3439				if (!$(this).hasClass("lien-mobile")) {
3440					var href = $(this).attr("href").replace('.html', '');
3441					var nouveauLien = href + ',lang' + lang + '.html';
3442					$(this).attr('href', nouveauLien);
3443				}
3444			}
3445		});
3446
3447		var listeLiens = $(".article-liste").find(".texte").find("a").each(
3448				function() {
3449					// si ce ne sont pas des liens externes alors on rajoute la
3450					// langue courrante en parametre pour la garder lors de la
3451					// navigation
3452					if ($(this).attr("href").lastIndexOf("http") == -1
3453							&& $(this).attr("href").lastIndexOf("IMG") == -1
3454							&& $(this).attr("href").lastIndexOf("lang") == -1) {
3455						var href = $(this).attr("href").replace('.html', '');
3456						var nouveauLien = href + ',lang' + lang + '.html';
3457						$(this).attr('href', nouveauLien);
3458
3459					}
3460				});
3461
3462		var listeLiens = $("#logo_bison_fute").find("a").each(function() {
3463			// si ce ne sont pas des liens externes alors on rajoute la langue
3464			// courrante en parametre pour la garder lors de la navigation
3465			if ($(this).attr("href").lastIndexOf("http") == -1) {
3466				var href = $(this).attr("href").replace('.html', '');
3467				var nouveauLien = href + ',lang' + lang + '.html';
3468				$(this).attr('href', nouveauLien);
3469
3470			}
3471		});
3472
3473		// lien accueil facultatif
3474		if ($("#lienAccueil")) {
3475			if ($("#lienAccueil").attr("href")) {
3476				var href = $("#lienAccueil").attr("href").replace('.html', '');
3477				var nouveauLien = href + ',lang' + lang + '.html';
3478				$("#lienAccueil").attr('href', nouveauLien);
3479			}
3480		}
3481
3482		var listeLiens = $(".show-more").each(
3483				function() {
3484					// si ce ne sont pas des liens externes alors on rajoute la
3485					// langue courrante en parametre pour la garder lors de la
3486					// navigation
3487					if ($(this).attr("href").lastIndexOf("http") == -1
3488							&& $(this).attr("href").lastIndexOf("#") == -1) {
3489						var href = $(this).attr("href").replace('.html', '');
3490						var nouveauLien = href + ',lang' + lang + '.html';
3491						$(this).attr('href', nouveauLien);
3492
3493					}
3494				});
3495
3496		var listeLiens = $(".show-more-vignette").each(
3497				function() {
3498					// si ce ne sont pas des liens externes alors on rajoute la
3499					// langue courrante en parametre pour la garder lors de la
3500					// navigation
3501					if ($(this).attr("href").lastIndexOf("http") == -1
3502							&& $(this).attr("href").lastIndexOf("lang") == -1) {
3503						var href = $(this).attr("href").replace('.html', '');
3504						var nouveauLien = href + ',lang' + lang + '.html';
3505						$(this).attr('href', nouveauLien);
3506
3507					}
3508				});
3509
3510	}
3511
3512	var listeLiens = $(".footer").find("a").each(function() {
3513		// si ce ne sont pas des liens externes alors on rajoute la langue
3514		// courrante en parametre pour la garder lors de la navigation
3515		if ($(this).attr("href").lastIndexOf("http") != -1) {
3516			var curTitle = $(this).attr("title");
3517			var nouveauTitle = curTitle + ", nouvelle fenêtre";
3518			$(this).attr("title", nouveauTitle);
3519		} else {
3520			if (!$(this).hasClass("lien-mobile")) {
3521				var curTitle = $(this).attr("title");
3522				var nouveauTitle = "Afficher la page " + curTitle;
3523				$(this).attr("title", nouveauTitle);
3524			}
3525		}
3526	});
3527
3528	if (lang == "en") {
3529		open_ext_link_en();
3530		translate_title_link_en();
3531	} else {
3532		if (lang == "es") {
3533			open_ext_link_es();
3534			translate_title_link_es();
3535		} else {
3536			open_ext_link_fr();
3537			translate_title_link_fr();
3538		}
3539	}
3540}
3541
3542function remplacerAccent(chaine) {
3543	var tmp = chaine.replace(/é/g, '351');
3544	tmp = tmp.replace(/è/g, '352');
3545	tmp = tmp.replace(/ê/g, '353');
3546	tmp = tmp.replace(/à/g, '354');
3547	tmp = tmp.replace(/ù/g, '355');
3548	tmp = tmp.replace(/\'/g, '356');
3549	tmp = tmp.replace(/,/g, '357');
3550	tmp = tmp.replace(/ï/g, '358');
3551	tmp = tmp.replace(/î/g, '359');
3552	tmp = tmp.replace(/ë/g, '360');
3553	tmp = tmp.replace(/â/g, '361');
3554	return tmp;
3555}
3556
3557function open_ext_link_fr() {
3558	var liens = document.getElementsByTagName('a');
3559	// On recupere tous les liens (<a>) du document dans une variable (un
3560	// array), ici liens.
3561	// Une boucle qui parcourt le tableau (array) liens du debut a la fin.
3562	for (var i = 0; i < liens.length; ++i) {
3563		var varClassName = liens[i].className;
3564
3565		// Si les liens ont un nom de class egal a spip_out, alors on agit.
3566		if (!(varClassName instanceof SVGAnimatedString)
3567				&& varClassName.substring(0, 8) == 'spip_out') {
3568			if (liens[i].title == "")
3569				liens[i].title = 'Ouverture dans une nouvelle fenetre';
3570
3571			liens[i].target = '_blank';
3572		}
3573		// Si les liens ont un nom de class egal a LienTelecharg, document ou
3574		// imprimer, alors on agit.
3575		if (liens[i].className == 'LienTelecharg'
3576				|| liens[i].className == 'document'
3577				|| liens[i].className == 'imprimer'
3578				|| liens[i].type == 'application/pdf') {
3579			if (liens[i].title == "") {
3580				liens[i].title = 'Ouverture dans une nouvelle fenetre';
3581			}
3582			liens[i].target = '_blank';
3583		}
3584		// Ajout lien si c'est un SVG
3585		if (varClassName instanceof SVGAnimatedString) {
3586			if (liens[i].title == undefined) {
3587				liens[i].title = 'Ouverture dans une nouvelle fenetre';
3588			}
3589			liens[i].target = '_blank';
3590		}
3591
3592	}
3593}
3594function open_ext_link_en() {
3595	var liens = document.getElementsByTagName('a');
3596	// On recupere tous les liens (<a>) du document dans une variable (un
3597	// array), ici liens.
3598	// Une boucle qui parcourt le tableau (array) liens du debut a la fin.
3599	for (var i = 0; i < liens.length; ++i) {
3600		var varClassName = liens[i].className;
3601
3602		// Si les liens ont un nom de class egal a spip_out, alors on agit.
3603		if (!(varClassName instanceof SVGAnimatedString)
3604				&& varClassName.substring(0, 8) == 'spip_out') {
3605			if (liens[i].title == "")
3606				liens[i].title = 'Open new window';
3607			liens[i].target = '_blank';
3608		}
3609		// Si les liens ont un nom de class egal a LienTelecharg, document ou
3610		// imprimer, alors on agit.
3611		if (liens[i].className == 'LienTelecharg'
3612				|| liens[i].className == 'document'
3613				|| liens[i].className == 'imprimer'
3614				|| liens[i].type == 'application/pdf') {
3615			if (liens[i].title == "") {
3616				liens[i].title = 'Open new window';
3617			}
3618			liens[i].target = '_blank';
3619		}
3620		// Ajout lien si c'est un SVG
3621		if (varClassName instanceof SVGAnimatedString) {
3622			if (liens[i].title == undefined) {
3623				liens[i].title = 'Open new window';
3624			}
3625			liens[i].target = '_blank';
3626		}
3627	}
3628}
3629function open_ext_link_es() {
3630	var liens = document.getElementsByTagName('a');
3631	// On recupere tous les liens (<a>) du document dans une variable (un
3632	// array), ici liens.
3633	// Une boucle qui parcourt le tableau (array) liens du debut a la fin.
3634	for (var i = 0; i < liens.length; ++i) {
3635		var varClassName = liens[i].className;
3636
3637		// Si les liens ont un nom de class egal a spip_out, alors on agit.
3638		if (!(varClassName instanceof SVGAnimatedString)
3639				&& varClassName.substring(0, 8) == 'spip_out') {
3640			if (liens[i].title == "")
3641				liens[i].title = 'apertura de una nueva ventana';
3642			liens[i].target = '_blank';
3643		}
3644		// Si les liens ont un nom de class egal a LienTelecharg, document ou
3645		// imprimer, alors on agit.
3646		if (liens[i].className == 'LienTelecharg'
3647				|| liens[i].className == 'document'
3648				|| liens[i].className == 'imprimer'
3649				|| liens[i].type == 'application/pdf') {
3650			if (liens[i].title == "") {
3651				liens[i].title = 'apertura de una nueva ventana';
3652			}
3653			liens[i].target = '_blank';
3654		}
3655		// Ajout lien si c'est un SVG
3656		if (varClassName instanceof SVGAnimatedString) {
3657			if (liens[i].title == undefined) {
3658				liens[i].title = 'apertura de una nueva ventana';
3659			}
3660			liens[i].target = '_blank';
3661		}
3662	}
3663}
3664
3665function translate_title_link_fr() {
3666	var liens = document.getElementsByTagName('a');
3667	for (var i = 0; i < liens.length; ++i) {
3668		liens[i].title = liens[i].title.replace('undefined, ', 'e-regie, ');
3669	}
3670}
3671function translate_title_link_en() {
3672	var liens = document.getElementsByTagName('a');
3673	var btns = document.getElementsByTagName('button');
3674
3675	for (var i = 0; i < liens.length; ++i) {
3676		liens[i].title = liens[i].title.replace('Ouvrir le document',
3677				'Open the document');
3678		liens[i].title = liens[i].title.replace('dans une nouvelle fenêtre',
3679				'in a new window');
3680		liens[i].title = liens[i].title.replace('nouvelle fenêtre',
3681				'new window');
3682		liens[i].title = liens[i].title.replace('Afficher la page de détail',
3683				'View detail page');
3684		liens[i].title = liens[i].title.replace('Afficher la page',
3685				'Display the page');
3686		liens[i].title = liens[i].title.replace('Passer en langue',
3687				'Skip language');
3688		liens[i].title = liens[i].title.replace('Langue sélectionnée',
3689				'Selected language');
3690		liens[i].title = liens[i].title.replace('rubrique active',
3691				'active section');
3692		liens[i].title = liens[i].title.replace('Consulter la page',
3693				'See the page');
3694		liens[i].title = liens[i].title.replace('Afficher/Réduire l\'article',
3695				'View/Reduce the article');
3696		liens[i].title = liens[i].title.replace('Imprimer l\'article',
3697				'Print the article');
3698
3699		liens[i].title = liens[i].title.replace(
3700				'Afficher/Modifier la légende de la carte',
3701				'View/Edit the legend of the map');
3702		liens[i].title = liens[i].title.replace(
3703				'Mettre la carte en plein écran', 'Put the map in full screen');
3704		liens[i].title = liens[i].title.replace('Lancer la recherche',
3705				'Start the search');
3706		liens[i].title = liens[i].title.replace(
3707				'Afficher le communiqué de presse', 'View the press release');
3708		liens[i].title = liens[i].title.replace(
3709				'Afficher les prévisions de circulation nationales',
3710				'Show the national circulation forecast');
3711		liens[i].title = liens[i].title.replace(
3712				'Afficher les conditions de circulation nationales',
3713				'Show the national circulation conditions');
3714		liens[i].title = liens[i].title.replace(
3715				'Ouvrir le calendrier Bison Futé',
3716				'Open the Bison Futé calendar');
3717		liens[i].title = liens[i].title.replace('Accueil du site Bison Futé',
3718				'Home page of the Bison Futé website');
3719		liens[i].title = liens[i].title.replace('undefined, ', 'e-regie, ');
3720	}
3721
3722	for (var i = 0; i < btns.length; ++i) {
3723		liens[i].title = liens[i].title.replace('Lancer la recherche',
3724				'Start the search');
3725	}
3726
3727	$(".icon-color").each(
3728			function() {
3729				var this_title = $(this).attr('title');
3730				this_title = this_title.replace('Couleur de départ',
3731						'Departures color');
3732				this_title = this_title.replace('Couleur de retour',
3733						'Returns color');
3734				this_title = this_title.replace('vert', 'green');
3735				this_title = this_title.replace('orange', 'orange');
3736				this_title = this_title.replace('rouge', 'red');
3737				this_title = this_title.replace('noir', 'black');
3738
3739				$(this).attr('title', this_title);
3740			});
3741}
3742function translate_title_link_es() {
3743	var liens = document.getElementsByTagName('a');
3744	var btns = document.getElementsByTagName('button');
3745
3746	for (var i = 0; i < liens.length; ++i) {
3747		liens[i].title = liens[i].title.replace('Ouvrir le document',
3748				'Abra el documento');
3749		liens[i].title = liens[i].title.replace('dans une nouvelle fenêtre',
3750			
3750	'en una nueva ventana');
3751		liens[i].title = liens[i].title.replace('nouvelle fenêtre',
3752				'nueva ventana');
3753		liens[i].title = liens[i].title.replace('Afficher la page de détail',
3754				'Ver página de detalles');
3755		liens[i].title = liens[i].title.replace('Afficher la page',
3756				'Viendo página');
3757		liens[i].title = liens[i].title.replace('Passer en langue',
3758				'Saltar idioma');
3759		liens[i].title = liens[i].title.replace('Langue sélectionnée',
3760				'Idioma seleccionado');
3761		liens[i].title = liens[i].title.replace('rubrique active',
3762				'sección activa');
3763		liens[i].title = liens[i].title.replace('Consulter la page',
3764				'Consulte la página');
3765		liens[i].title = liens[i].title.replace('Afficher/Réduire l\'article',
3766				'Ver/Reducir el artículo');
3767		liens[i].title = liens[i].title.replace('Imprimer l\'article',
3768				'Imprimir el artículo');
3769
3770		liens[i].title = liens[i].title.replace(
3771				'Afficher/Modifier la légende de la carte',
3772				'Ver/Cambiar leyenda del mapa');
3773		liens[i].title = liens[i].title.replace(
3774				'Mettre la carte en plein écran',
3775				'Ponga el mapa en pantalla completa');
3776		liens[i].title = liens[i].title.replace('Lancer la recherche',
3777				'Iniciar la búsqueda');
3778		liens[i].title = liens[i].title.replace(
3779				'Afficher le communiqué de presse',
3780				'Ver el comunicado de prensa');
3781		liens[i].title = liens[i].title.replace(
3782				'Afficher les prévisions de circulation nationales',
3783				'Pronóstico de circulación nacional');
3784		liens[i].title = liens[i].title.replace(
3785				'Afficher les conditions de circulation nationales',
3786				'Ver las condiciones de circulación nacional');
3787		liens[i].title = liens[i].title.replace(
3788				'Ouvrir le calendrier Bison Futé',
3789				'Abre el Bison Futé calendario');
3790		liens[i].title = liens[i].title.replace('Accueil du site Bison Futé',
3791				'Página de inicio');
3792		liens[i].title = liens[i].title.replace('undefined, ', 'e-regie, ');
3793	}
3794
3795	for (var i = 0; i < btns.length; ++i) {
3796		liens[i].title = liens[i].title.replace('Lancer la recherche',
3797				'Iniciar la búsqueda');
3798	}
3799
3800	$(".icon-color").each(function() {
3801		var this_title = $(this).attr('title');
3802		this_title = this_title.replace('Couleur de départ', 'Salidas color');
3803		this_title = this_title.replace('Couleur de retour', 'Vueltas color');
3804		this_title = this_title.replace('vert', 'verde');
3805		this_title = this_title.replace('orange', 'naranja');
3806		this_title = this_title.replace('rouge', 'rojo');
3807		this_title = this_title.replace('noir', 'negro');
3808
3809		$(this).attr('title', this_title);
3810	});
3811}
3812
3813/**
3814Auteur : Jérémy Latorre
3815Date: 11/06/2013
3816Description:
3817	- Gestion de la partie recherche sur l'onglet Autre Date
3818	- Remplissage des listes déroulantes et mise en place des règles de gestion sur les priorités
3819	- Gestion du calendrier 
3820	- Récupération de l'url Json correspondant à la recherche effectuée
3821**/
3822
3823//Dossier des images liées à tipi
3824var dossierImages = "./extensions/bisonfute/_images/";
3825var type;
3826//Stocker les urls des communiqués
3827var cc;
3828var wc;
3829var pc;
3830var langCur;
3831
3832//récupération des données tipi pour remplir les cc
3833$(document).ready(function(){
3834	langCur = $("#current-lang").val();
3835	$(".tipi-flow").click(function(){
3836	});
3837	//Si les blocs sont affichés alors on les remplis avec des données tipi correspondantes
3838	if($("#cc").length >0){
3839		demandeFluxJsonCC();
3840	}
3841	if($("#wc").length >0){
3842		demandeFluxJsonWC();
3843	}
3844	if($("#pc").length >0){
3845		demandeFluxJsonPC();
3846	}
3847});		
3848/********************   Récupération flux Conditions de circulations ********************/
3849/****************************************************************************************/
3850function demandeFluxJsonCC(){
3851	$.ajax({type:'GET',
3852			url: cc,
3853			dataType: 'json',
3854			success: function(data){
3855					$("#cc").append(data[5]);
3856					$("#cc").trunk8({
3857						title:"Conditions de circulation",
3858						lines:4
3859					});
3860			}
3861			,error: function(){
3862
3863			}
3864	});
3865}
3866/********************   Récupération flux Week end coloré ********************/
3867/*****************************************************************************/
3868function demandeFluxJsonWC(){
3869	$.ajax({type:'GET',
3870			url: wc,
3871			dataType: 'json',
3872			success: function(data){
3873						$("#wc").append(data[5]);
3874						$("#wc").trunk8({
3875							title:"Week-end coloré",
3876							lines:4
3877						});
3878	
3879			},error: function(){
3880			}
3881	});
3882}
3883/********************   Récupération flux Prévisions de circulations ********************/
3884/****************************************************************************************/
3885function demandeFluxJsonPC(){
3886	$.ajax({type:'GET',
3887			url: pc,
3888			dataType: 'json',
3889			success: function(data){
3890					$("#pc").append(data[5]);
3891					$("#pc").trunk8({
3892						title:"Prévision de circulation",
3893						lines:4
3894					});
3895		}
3896		,error: function(){
3897			}
3898	});
3899}
3900/********************   Factoriser l'effet fadeIn ********************/
3901/*********************************************************************/
3902function fadeIn(duree){
3903		$("#black_popup").fadeIn(duree);
3904		$("#popup").fadeIn(duree);
3905}
3906
3907/********************   Factoriser l'effet fadeOut ********************/
3908/*********************************************************************/
3909function fadeOut(duree){
3910		$("#black_popup").fadeOut(duree);
3911		$("#popup").fadeOut(duree);
3912		$("#divPopup").remove();
3913}
3914
3915
3916/********************   Gérer la fermeture des popups ********************/
3917/*************************************************************************/
3918function boutonFermer(){
3919	//On créér les différents éléments
3920	var imgFermer = document.createElement("span");
3921	imgFermer.className = "imgFermer";
3922
3923	//On créé le liens pour fermer la popup
3924	var lienFermer = document.createElement("a");
3925	lienFermer.appendChild(imgFermer);
3926	lienFermer.onclick = function(){
3927		fadeOut(500);
3928	};
3929	return lienFermer;
3930}
3931
3932/********************   Créer le bandeau d'entete de toutes les popups ********************/
3933/******************************************************************************************/
3934function createBandeau(data){
3935	var bandeau = document.createElement("div");
3936	bandeau.className="bandeau";
3937	var lienFermer = boutonFermer(); 	
3938	
3939	var imgEvenement = document.createElement("img");
3940	//En fonction du type d'évenements on affiche différentes images
3941	switch(data[2]){
3942	case "flash" :
3943	    imgEvenement.src = data[3] === 'meteo' ? dossierImages+"alerte-meteo.png" : dossierImages+"flash.png";
3944        imgEvenement.alt = data[3] === 'meteo' ? "alerte-meteo" : "flash";
3945    	break;
3946	default: imgEvenement.src = dossierImages+"condition_circulation.png";
3947				imgEvenement.alt = "condition_circulation";
3948		break;
3949	}
3950	imgEvenement.className = "imgEvenement";
3951		
3952	var titreEntete = document.createElement("h2");
3953	titreEntete.appendChild(document.createTextNode(data[0]));
3954	bandeau.appendChild(imgEvenement);
3955	bandeau.appendChild(lienFermer);
3956	bandeau.appendChild(titreEntete);
3957	return bandeau;
3958}
3959/********************   Insérer le contenu de la popup ********************/
3960/**************************************************************************/
3961function getContenuPopup(data)
3962{
3963	var divPopUp = document.createElement("div");
3964	divPopUp.id="divPopup";
3965	
3966	//Creation du bandeau d'entete
3967	var lebandeau = createBandeau(data);
3968
3969	divPopUp.appendChild(lebandeau);
3970	
3971
3972		//creation du contenu
3973	var contenu = document.createElement("div");
3974	contenu.className = "contenuPopup";
3975		//Gestion liste des attributs
3976	var listeDesAttributs = data[4];
3977	if(listeDesAttributs.length >0){
3978		var listeAttributs = document.createElement("div");
3979		listeAttributs.className = "listeAttributs";
3980		for(var k = 0; k < data[4].length; k++){
3981			var spanImg = document.createElement("span");
3982			var tabResult = selectAttribut(data[4][k]);
3983			spanImg.className = tabResult[0];
3984			spanImg.title = tabResult[1];
3985			listeAttributs.appendChild(spanImg);
3986		}
3987		contenu.appendChild(listeAttributs);
3988	}
3989	//Gestion du titre
3990	var titreh3 = document.createElement("h3");
3991	titreh3.appendChild(document.createTextNode(data[1]));
3992	contenu.appendChild(titreh3);
3993	//On rajoute un paragraphe
3994	var paragraphe = document.createElement("p");
3995	paragraphe.id="htmlContenuPopup";
3996	paragraphe.innerHTML = data[5];
3997	contenu.appendChild(paragraphe);
3998	
3999	//S'il y'a des pièces jointes, on les affiches
4000	if(data[6].length){
4001		var divLien = document.createElement("p");
4002		divLien.className = "listePJ";
4003		var spanPicto = document.createElement("span");
4004		spanPicto.className = "fichierJoint";
4005		spanPicto.title = "pièces jointes";
4006		divLien.appendChild(spanPicto);
4007		var text;
4008		if(langCur == 'es'){text = document.createTextNode("Adjunto: ");}
4009		else{ 
4010			if (langCur == 'en'){text = document.createTextNode("Attached files: ");}
4011			else{text = document.createTextNode("Pièce(s) jointe(s) : ");}
4012		}
4013		divLien.appendChild(text);
4014		for(var k = 0; k < data[6].length; k++){
4015	
4016			var spanPJ = document.createElement("span");
4017			spanPJ.className ="elementPJ";
4018			
4019			var dataPJ = data[6][k][0];
4020			var tabnomPJ = dataPJ.split("/");
4021			var nomPJ = tabnomPJ[tabnomPJ.length-1];
4022			var lienPJ = document.createElement("a");
4023			var tabSplit = dataPJ.split(".");
4024			var formatPj = "";
4025			var lastIndex = tabSplit.length -1;
4026			if(tabSplit.length > 1 && tabSplit[lastIndex].length < 4){
4027				formatPj = tabSplit[lastIndex];
4028			}
4029			lienPJ.href = encodeURI(dataPJ);
4030			var taillePJ = document.createTextNode("( "+ formatPj.toUpperCase() +", " + data[6][k][1] + " ) ");
4031			//on force l'ouverture des pièces jointes dans un nouvel onglet
4032			lienPJ.setAttribute("target","_blank");
4033
4034			var texteLien = document.createTextNode("- " + nomPJ);
4035	
4036			lienPJ.appendChild(texteLien);
4037			spanPJ.appendChild(lienPJ);
4038			spanPJ.appendChild(taillePJ);
4039			divLien.appendChild(spanPJ);
4040		}
4041		contenu.appendChild(divLien);
4042	}
4043	divPopUp.appendChild(contenu);
4044	$("#popup").append(divPopUp);
4045
4046}
4047
4048/******************** Récupérer le contenu de la popup ********************/
4049/**************************************************************************/
4050function demandeFluxJsonPopupBandeau(type){
4051	var url;
4052	//On récupère l'adresse que l'on avait déjà pré-enregistrée auparavant en fonction du type
4053	switch(type){
4054		case "cc" : url = cc;
4055			break;
4056		case "pc" : url = pc;
4057			break;
4058		case "wc" : url = wc;
4059			break;
4060		default : return false;
4061
4062	}
4063	$(".popupDocument").remove();
4064	//On effectue notre requête AJAX
4065	$.ajax({type:'GET',
4066			url: url,
4067			dataType: 'json',
4068			success: function(data){
4069				if(data.length == 0 ){return false;}
4070				else{
4071					fadeIn(500);
4072					positionPopup();
4073					getContenuPopup(data);
4074					gestionOuvertureLiens($("#htmlContenuPopup"));
4075				}
4076			},error: function(){
4077				console.info("Erreur dans la récupération du flux JSON ");
4078			}
4079	});
4080}
4081
4082
4083/**
4084 * Auteur : Jérémy Latorre Date: 11/06/2013 Description: Fichier gérant les
4085 * alertes dans le carousel sur la page d'accueil
4086 */
4087
4088// variables globales
4089var dossierImages = "./extensions/bisonfute/_images/";
4090// Verrou pour eviter d'initialiser plusieurs fois
4091var init_done = false;
4092var nbAlerte = 0;
4093var langCur;
4094
4095$(document).ready(function() {
4096	
4097	$('.bandeau-h').slick({
4098		infinite: true,
4099		slidesToShow: 3,
4100		slidesToScroll: 1,
4101		variableWidth: true,
4102		prevArrow: $('#Bt_right'),
4103		nextArrow:$('#Bt_left'),
4104		draggable:false,
4105		autoplay: true,
4106		autoplaySpeed: 10000,
4107	});
4108
4109	$('.bandeau-accueil').slick({
4110		infinite: true,
4111		slidesToShow: 3,
4112		slidesToScroll: 1,
4113		variableWidth: true,
4114		prevArrow: $('#Bt_left'),
4115		nextArrow:$('#Bt_right'),
4116		draggable:false,
4117		autoplay: true,
4118		autoplaySpeed: 10000,
4119	});
4120
4121	langCur = $("#current-lang").val();
4122	$(".alerte").each(function() {
4123		$(this).hide();
4124	});
4125	try {
4126		demandeFluxJsonAlerte(bisonfute.urls.INSTANCE.getFlash());
4127	} catch (Exception) {
4128	}
4129	// open popup
4130	$(".alerte").click(function() {
4131		fadeIn(500);
4132		positionPopup();
4133
4134		var flash = bisonfute.urls.INSTANCE.getFlash();
4135		demandeFluxJsonPopup(flash, $(this).data('value'), "alerte");
4136		xt_med('C', '0', 'Flash_national', 'A');
4137	});
4138	// ouverture de la popup sur le clique d'une alerte ou d'un cc
4139
4140	// maintain the popup at center of the page when browser resized
4141	$(window).bind('resize', positionPopup);
4142	$(".vignette_carousel").each(function() {
4143		$(this).find(".conseils_txt").first().trunk8({
4144			lines : 4
4145		});
4146
4147	});
4148
4149});
4150
4151/**
4152 * ****************************** Récupérer les données tipi pour le bloc alerte
4153 * *******************************
4154 */
4155/** ************************************************************************************************************* */
4156function demandeFluxJsonAlerte(urlAlerte) {
4157	$.ajax({
4158				type : 'GET',
4159				url : urlAlerte,
4160				dataType : 'json',
4161				success : function(data) {
4162					if (data.length != 0) {
4163						if (data.length == 0
4164								|| typeof (data[0]) == 'undefined'
4165								|| (data[0][2] != "flash" && data[0][2] != "alerte-meteo")) {
4166							$(".alerte").each(function() {
4167								$(this).hide();
4168							});
4169						} else if (typeof (data[0]) != 'undefined') {
4170							fillAlert(data);
4171						}
4172					} else {
4173						$(".alerte").each(function() {
4174							$(this).hide();
4175						});
4176					}
4177					initCarrousel();
4178				},
4179				error : function() {
4180				}
4181			});
4182}
4183// Initialisation de la taille du carrousel
4184function initCarrousel() {
4185	if (!init_done) {
4186
4187		$("#conteneur_carousel").height(399 - (nbAlerte * 133));
4188		//gestionFlecheCarousel();
4189		init_done = true;
4190	}
4191}
4192function gestionFlecheCarousel() {
4193	// event click du bouton droite et gauche permettant de scroller vers le
4194	// haut ou vers le bas
4195	$("#carrousel_nav").children("a").each(function() {
4196		if ($(this).hasClass("right")) {
4197			$(this).attr("onclick", "slideToBottom()");
4198		} else {
4199			$(this).attr("onclick", "slideToTop()");
4200		}
4201		return null;
4202	});
4203
4204}
4205/**
4206 * *********************** Remplir les blocs alertes du carousel avec les
4207 * données tipi *************************
4208 */
4209/**
4210 * ******************** Création de tous les éléments HTML pour les insérer dans
4211 * la page ***********************
4212 */
4213
4214function fillAlert(data) {
4215	var nbDonnees = data.length;
4216	var numeroAlerte = 0;
4217	// On ne garde que 2 alertes au maximum
4218	if (nbDonnees > 2) {
4219		nbDonnees = 2;
4220	}
4221	var listeDivAlert = $(".alerte");
4222	for (var i = 0; i < nbDonnees; i++) {
4223		// on vérifie s''il s'agit d'un flash ou d'une alerte météo pour les placer au bon endroit
4224        if (data[i][2] == "flash") {
4225            divAlerte = listeDivAlert[i];
4226            divAlerte.setAttribute("data-value", numeroAlerte);
4227            numeroAlerte++;
4228            if(data[i][3] === 'meteo') {
4229                divAlerte.className = divAlerte.className + " alerteMeteo";
4230                $(".alerteMeteo").each(function() {
4231                    $(this).show();
4232                });
4233            } else {
4234                divAlerte.className = divAlerte.className + " alerteCirculation";
4235                $(".alerteCirculation").each(function() {
4236                    $(this).show();
4237                });
4238            }
4239            nbAlerte = nbAlerte + 1;
4240        }
4241		// On créé les différents éléments de chaque alerte
4242		var chapeau = document.createElement("div");
4243		chapeau.className = "chapeauAlerte";
4244
4245		var blocPicto = document.createElement("div");
4246		blocPicto.className = "pictoAlerte";
4247
4248		var titre = document.createElement("div");
4249		var texteAlert;
4250		if (langCur == 'es') {
4251			texteAlert = document.createTextNode("Alerta");
4252		} else {
4253			if (langCur == 'en') {
4254				texteAlert = document.createTextNode("Alert");
4255			} else {
4256				texteAlert = document.createTextNode("Alerte");
4257			}
4258		}
4259		titre.appendChild(texteAlert);
4260
4261        // Dans le cas d'un flash national / flash meteo : En fonction du type, on adapte le pictogramme correspondant
4262		var imgPicto = document.createElement("img");
4263        if (data[i][2] == "flash") {
4264            imgPicto.src = data[i][3] === 'meteo' ? dossierImages + "alerte-meteo.png" : dossierImages + "flash.png";
4265            imgPicto.alt = data[i][3] === 'meteo' ? "alerte-meteo" : "flash";
4266        }
4267
4268		// Affichage des attributs
4269		var listeDesAttributs = data[i][4];
4270		if (listeDesAttributs.length > 0) {
4271			var listeAttributs = document.createElement("div");
4272			listeAttributs.className = "listeAttributs";
4273			for (var k = 0; k < 3; k++) {
4274				if (typeof (data[4]) != 'undefined') {
4275					var spanImg = document.createElement("span");
4276					var tabResult = selectAttribut(data[4][k]);
4277					spanImg.className = tabResult[0];
4278					spanImg.title = tabResult[1];
4279					listeAttributs.appendChild(spanImg);
4280				}
4281			}
4282			chapeau.appendChild(listeAttributs);
4283		}
4284		// On remplit le contenu avec interprétation des balises qu'il peut y
4285		// avoir dans le contenu
4286		// corps HTML
4287		var divContenu = document.createElement("div");
4288		divContenu.className = "contenuAlerteAccueil";
4289		divContenu.innerHTML = "<b>" + data[i][1]
4290				+ "</b><span style=\"display:block;\"></span>" + data[i][5];
4291		blocPicto.appendChild(imgPicto);
4292		chapeau.appendChild(blocPicto);
4293		chapeau.appendChild(titre);
4294		divAlerte.appendChild(chapeau);
4295		divAlerte.appendChild(divContenu);
4296	}
4297	// On rajoute le texte en savoir plus sur les 2 alertes
4298	$(".contenuAlerteAccueil").each(function() {
4299		var pText = document.createElement("div");
4300		pText.className = "ensavoirplus";
4301		var text;
4302		if (langCur == 'es') {
4303			text = document.createTextNode("Leer más");
4304		} else {
4305			if (langCur == 'en') {
4306				text = document.createTextNode("Read more");
4307			} else {
4308				text = document.createTextNode("En savoir plus");
4309			}
4310		}
4311		pText.appendChild(text);
4312		// On tronque le texte de l'alerte s'il est trop long
4313		$(this).trunk8({
4314			title : "Alerte Nationale",
4315			lines : 3
4316		});
4317		$(this).append(pText);
4318	});
4319 
4320  moveVignettes(nbDonnees)
4321
4322}
4323
4324/**
4325 * Déplace les vignettes dissumlées par les alertes
4326 */
4327function moveVignettes(nbDonnees) {
4328  let vignettesCachés = $('#conteneur_carousel').children().slice(3-nbDonnees)
4329
4330  for(element of vignettesCachés.toArray()) {
4331    let vignette = extractVignetteData(element)
4332    // ajout de la vignette formatée dans le bandeau horizontal et retour au début
4333    $('.bandeau-accueil').slick('slickAdd',createSlideFromVignette(vignette),true)
4334  };
4335}
4336/**
4337 * Méthode d'extraction des données de la vignette
4338 * @param {*} vignette 
4339 * @returns Tableau contenant les données de la vignette
4340 */
4341function extractVignetteData(vignette) {
4342  let data = {
4343    "link" : "",
4344    "titlelink": "",
4345    "title": "",
4346    "image": "",
4347    "imagetitle":"",
4348    "content": "",
4349    "actus": ""
4350  }
4351
4352  data.link = $(vignette).find('.lien_vignette_carousel').attr('href')
4353  data.titlelink = $(vignette).find('.lien_vignette_carousel').attr('title')
4354  data.title = $(vignette).find('h2').html()
4355  data.image = $(vignette).find('img').attr("src")
4356  data.imagetitle = $(vignette).find('img').attr("title")
4357  data.content = $(vignette).find('.conseils_txt').html()
4358  data.actus = $(vignette).find('.info_actus > p').html()
4359  
4360  return data;
4361}
4362
4363function createSlideFromVignette(vignette){
4364  let slide = $(`<div class="bloc-vignette">`)
4365  let linkContainer =$('<a class="lien-actu">')
4366  let vignetteContainer = $('<div class="vignette">')
4367  let title = $('<h3>').html(vignette.title)
4368  let image = $('<img>').attr({
4369    "src": `${vignette.image}`,
4370    "alt": `${vignette.title}`,
4371  })
4372  let imgContainer = $('<div class="img-vignette">')
4373  let txtContainer = $('<div class="bloc-text-vignette">')
4374  let content = vignette.content ? $('<p class="intro-vignette">').html(vignette.content) : $('<p class="intro-vignette">').html(vignette.actus)
4375
4376  linkContainer.attr({
4377    "href": `${vignette.link}`,
4378    "title": `${vignette.titlelink}`
4379  })
4380  let lienActuContainer = $('<div class="bloc-lien-actu">')
4381  let btnActu = $('<btn class="btn-lien-actu">').attr({
4382    "href": `${vignette.link}`,
4383    "title": `Affichez la page de détail ${vignette.titlelink}`
4384  }).html("En savoir plus")
4385  lienActuContainer.append(btnActu)
4386  imgContainer.append(image)
4387  vignetteContainer.append(imgContainer)
4388  txtContainer.append(title)
4389  txtContainer.append(content)
4390  txtContainer.append(lienActuContainer)
4391  vignetteContainer.append(txtContainer)
4392  linkContainer.append(vignetteContainer)
4393  slide.append(linkContainer)
4394
4395  return slide
4396}
4397
4398// fin alerteAccueil
4399
4400/**
4401 * Auteur : Jérémy Latorre Date: 11/06/2013 Description: - Gestion de la
4402 * fraicheur des données tipi
4403 * Modification:
4404 * 	23/8/2016 Hugues roché: displayVHDate, formatDate
4405 * 
4406 */
4407$(document).ready(function() {
4408
4409	// Appel du core pour récupérér le fichier de configuration et l'horodate
4410	this.core = bisonfute.core.INSTANCE;
4411	var currentHorodate = jQuery.extend(true, {}, this.core.getHorodate());
4412	var config  = jQuery.extend(true, {}, this.core.getConfiguration());
4413	checkExprirationJsonHorodatage(currentHorodate,config);
4414	if(typeof displayVHDate == 'function'){displayVHDate();}
4415});
4416
4417/**
4418 * ****************************** Retourner le différence entre maintenant et la
4419 * date reçue ****************************************
4420 */
4421/** ********************************************************************************************************************************* */
4422function betweenTwoDatesMs(date2) {
4423	var now = new Date().getTime();
4424	// Calculate the difference in milliseconds
4425	var difference_ms = now - date2;
4426	return difference_ms;
4427}
4428/**
4429 * ***************************************** Récupérer le flux Json contenant
4430 * l'horodatage *****************************************
4431 */
4432/** ********************************************************************************************************************************* */
4433function checkExprirationJsonHorodatage(horodate,config) {
4434	var exprirationInterval;
4435	if(config && config.dataCheck && config.dataCheck.expirationInterval){
4436		// Présence de expirationInterval dans le fichier config.json
4437		exprirationInterval = config.dataCheck.expirationInterval;
4438	} else {
4439		// Par défault 30 minute
4440		exprirationInterval = 30 * 60 * 1000;
4441	}
4442	// On formate les données pour les rendres compréhensibles
4443	var date = new Date(horodate.date);
4444	var minutes = date.getMinutes();
4445	var month = parseInt(date.getMonth()) + 1;
4446	// Si la différences est supérieure à exprirationInterval min alors on affichage un message
4447	// spécifique
4448	if (betweenTwoDatesMs(date) > (exprirationInterval)) {
4449		$("#block-info-refresh").attr("style", "display:block;");
4450		if (parseInt(minutes) < 10) {
4451			minutes = "0" + date.getMinutes();
4452		}
4453		$("#info-refresh-date").append(
4454				date.getDate() + "/" + month + "/" + date.getFullYear() + " "
4455						+ date.getHours() + ":" + minutes);
4456	} else {
4457		$("#block-info-refresh").attr("style", "display:none;");
4458	}
4459}
4460
4461/**
4462format une date au format JJ/MM/YY HH:MM 
4463**/
4464function formatDate(dateToFormat){
4465	var date = new Date(dateToFormat);
4466	var minutes = date.getMinutes();
4467	var month = parseInt(date.getMonth()) + 1;
4468	if(month<10){
4469		month = "0" + month;
4470	}
4471	if (parseInt(minutes) < 10) {
4472		minutes = "0" + date.getMinutes();
4473	}
4474	return date.getDate() + "/" + month + "/" + date.getFullYear() + " "
4475						+ date.getHours() + ":" + minutes;
4476
4477}
4478$(document).ready(function(){
4479	// Déclaration des variables
4480	var lienAccueil = "";
4481	var lienMobile = "";
4482	var langCur;
4483	langCur = $("#current-lang").val();		// On récupère la langue courante
4484	
4485	// permet de récupérer l’url pointant sur le site mobile (Par défaut « ./mobile.html »)
4486	var urlmobile = bisonfute.core.INSTANCE.getUrls().mobile;
4487	// de la même manière pour le site desktop (Par défaut « ./index.html »)
4488	var urldesktop = bisonfute.core.INSTANCE.getUrls().desktop;
4489		
4490	if(urldesktop != "undefined" || urldesktop != null || urldesktop != ""){
4491		if(langCur!=""){
4492			lienAccueil = urldesktop.split(".html")[0] + ",lang" + langCur + ".html";
4493		}else{
4494			lienAccueil = urldesktop;
4495		}
4496	}
4497	if(urlmobile != "undefined" || urlmobile != null || urlmobile != ""){
4498		lienMobile = urlmobile;
4499	}
4500	
4501	if(document.getElementById("lienAccueil")){
4502		document.getElementById("lienAccueil").href = lienAccueil; 
4503	}
4504	if(document.getElementById("lienAccueil_menu")){
4505		document.getElementById("lienAccueil_menu").href = lienAccueil; 
4506	}
4507	if(document.getElementById("lien_accueil_logo")){
4508		document.getElementById("lien_accueil_logo").href = lienAccueil; 
4509	}
4510	if(document.getElementById("lien-bf-mobile")){
4511		document.getElementById("lien-bf-mobile").href = lienMobile; 
4512	}
4513});
4514/**
4515Auteur : Jérémy Latorre
4516Date: 11/06/2013
4517Description:
4518	- Gestion de la partie recherche sur l'onglet Autre Date
4519	- Remplissage des listes déroulantes et mise en place des règles de gestion sur les priorités
4520	- Gestion du calendrier 
4521	- Récupération de l'url Json correspondant à la recherche effectuée
4522**/
4523
4524// Pou réutilisation dans la seconde liste déroulante
4525
4526
4527var bool = false;
4528//Gestion des erreur tipi
4529var erreurTipi = false;
4530var langCur;
4531//Ensemble des messages à afficher en cas d'erreurs
4532var messageErreurDonneesTipi = "Une erreur est survenue lors de la récupération des informations";
4533var messageErreurDonneesTipi_en = "An error occurs while retrieving information";
4534var messageErreurDonneesTipi_es = "Se ha producido un error al recuperar la información";
4535var imageCalendrier = "extensions/bisonfute/_images/calendar_icon.png";
4536var imageCalendrierHover = "extensions/bisonfute/_images/calendar_icon_hover.png";
4537var messageErreurDate = " Veuillez indiquer une date de recherche";
4538var messageErreurDate_en = " Please enter a date for your search";
4539var messageErreurDate_es = " Por favor, introduzca una fecha de búsqueda";
4540var tab_jour=new Array("Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi");
4541var tab_jour_en=new Array("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday");
4542var tab_jour_es=new Array("Domingo", "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado");
4543var previsions;
4544
4545var shortDays;
4546
4547var indexCurrentPrevisionDate;
4548
4549var indexPrevision;
4550	
4551
4552$(document).ready(function(){
4553	langCur = $("#current-lang").val();
4554	if(langCur == 'es'){
4555		shortDays =[ "Dom", "Lun", "Mar", "Mie", "Jue", "Vie", "Sa" ];
4556	}
4557	else if (langCur == 'en'){
4558		shortDays =[ "Su", "Mo", "Tu", "We", "Th", "Fr", "Sa" ];
4559	}
4560	else{
4561		shortDays =[ "Dim", "Lun", "Mar", "Mer", "Jeu", "Ven", "Sa" ];
4562	}
4563	
4564	
4565	chargerJson("previsions/previsions.json");
4566	chargerJsonPrevisionDetaillees("mobile/previsionIndex.json");
4567
4568	//S'il y'a eu une erreur lors de la récupération des données, on affiche un message d'erreur
4569	if(erreurTipi){
4570		if(langCur == 'es'){affichagePopupErreur(messageErreurDonneesTipi_es);}
4571		else{ 
4572			if (langCur == 'en'){affichagePopupErreur(messageErreurDonneesTipi_en);}
4573			else{affichagePopupErreur(messageErreurDonneesTipi);}
4574		}
4575	}
4576
4577	
4578});
4579
4580/***************    Fonction permettant de lire un cookie  *************************/
4581function getCookie (sName) {
4582	var oRegex = new RegExp("(?:; )?" + sName + "=([^;]*);?");
4583	if (oRegex.test(document.cookie)) {
4584		return decodeURIComponent(RegExp["$1"]);
4585	} else {
4586		return false;
4587	}
4588}
4589
4590/***************    Fonction permettant de vérifier si le mode daltonien est actif (dans les cookies)  *************************/
4591function verifierModeDaltonien() {
4592	var nomCookie = "modeDaltonien";
4593	
4594	var cookieDaltonien = this.getCookie(nomCookie);
4595	if (cookieDaltonien != false) {
4596		if (cookieDaltonien == "true") {
4597			$("#daltonienON").removeClass("invisible");
4598			$("#daltonienOFF").addClass("invisible");
4599			document.modeDaltonien = true;
4600		}
4601		else {
4602			$("#daltonienON").addClass("invisible");
4603			$("#daltonienOFF").removeClass("invisible");
4604			document.modeDaltonien = false;
4605		}
4606	}
4607	
4608}
4609
4610
4611/***********************    Creation du calendrier avec les dates  **************************************/
4612function createDatePicker(){
4613	//Insertion du calendrier jQuery-ui
4614	// - date saisissable aujourd'hui à +31 jours
4615	// - format de date jj/mm/aa
4616	// - ouverture sur le clic du bouton ou du champs texte ( showOn)
4617	
4618	var tabMois;
4619	var titleNext = "";
4620	var titlePrev = "";
4621	if(langCur == 'es'){
4622		tabMois = [ "Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre" ];
4623		titleNext = "Siguiente";
4624		titlePrev = "Anter";
4625	}
4626	else if (langCur == 'en'){
4627		tabMois = [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "
4627November", "December" ];
4628		titleNext = "Next";
4629		titlePrev = "Prev";
4630	}
4631	else{
4632		tabMois = [ "Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre" ];
4633		titleNext = "Après";
4634		titlePrev = "Avant";
4635	}
4636	
4637	var eventDates = {};
4638	constructDates(eventDates);
4639	
4640	var suffixeDaltonien = document.modeDaltonien ? "Daltonien" : "";
4641		
4642	$( "#datepicker" ).datepicker({
4643      showOn: "both",
4644      buttonImage: imageCalendrier,
4645	  minDate: new Date(),
4646	  maxDate: new Date(dateToISO(previsions.days[previsions.days.length-1])),
4647	  dateFormat: "dd/mm/yy",
4648	  monthNames: tabMois ,
4649	  dayNamesMin:shortDays,
4650	  navigationAsDateFormat: true, 
4651	  nextText: titleNext, 
4652	  prevText: titlePrev,
4653      buttonImageOnly: true,
4654      firstDay: 1,
4655      onSelect : function(dateText, inst) {
4656    	  afficherPrevisions(dateText) ;	
4657      },
4658      beforeShowDay: function( date ) {
4659
4660    	  convertedDate = convert(date);
4661    	  convertedDate = new Date(dateToISO(convertedDate));
4662    	  var highlight = eventDates[convertedDate];
4663    	  if( highlight ) {
4664
4665    		  var eventName = "event";
4666    		  switch(highlight.color){ 
4667    		  case "Black":
4668    			  eventName = eventName + "Black" + suffixeDaltonien;
4669    			  break;
4670
4671    		  case "Red":
4672    			  eventName = eventName + "Red" + suffixeDaltonien;
4673    			  break;
4674
4675    		  case "Orange":
4676    			  eventName = eventName + "Orange" + suffixeDaltonien;
4677    			  break;
4678
4679    		  case "Green":
4680    			  eventName = eventName + "Green" + suffixeDaltonien;
4681    			  break;						
4682    		  }
4683
4684    		  return [true, eventName, highlight.myDate];
4685    	  } else {
4686    		  return [true, '', ''];
4687    	  }			
4688      }	  
4689	});
4690	
4691    
4692	function convert(str) {
4693		var date = new Date(str),
4694		mnth = ("0" + (date.getMonth()+1)).slice(-2),
4695		day  = ("0" + date.getDate()).slice(-2);
4696
4697		return [ day, mnth, date.getFullYear() ].join("/");
4698	}
4699	//Consruct colored date array
4700	function constructDates(eventDates){
4701
4702		var days = previsions.days;
4703		var values = previsions.values;
4704		var daysLength = days.length;
4705		var valuesLength = values.length;
4706
4707		if(days != null && values != null && daysLength == valuesLength){
4708			
4709
4710			for (var i = 0; i < days.length; i++) {
4711				
4712				var v = values[i].slice(0,values[i].length-2);
4713
4714				var color = v.toString();
4715				var varDate = new Date(dateToISO(days[i]));
4716				 if(color.indexOf("N") > -1){
4717				 eventDates[varDate] = {myDate : varDate, color : "Black" };
4718					 
4719				 }
4720				 else if(color.indexOf("R") > -1 ){
4721				 eventDates[varDate] = {myDate : varDate, color : "Red" };
4722					 
4723				 }
4724				 else if(color.indexOf("O") > -1 ){
4725				 eventDates[varDate] = {myDate : varDate, color : "Orange" };
4726					 
4727				 }
4728				 
4729				 else if(color.indexOf("V") > -1){
4730				 eventDates[varDate] = {myDate : varDate, color : "Green" };
4731				 }
4732			}
4733		}
4734		
4735	}
4736	//Gestion du hover en js car c'est une image
4737	$(".ui-datepicker-trigger").mouseenter(function(){
4738		$(this).attr('src',imageCalendrierHover);
4739	
4740	});
4741	$(".ui-datepicker-trigger").mouseleave(function(){
4742		$(this).attr('src',imageCalendrier);
4743	
4744	});
4745	// On rajoute un tooltip au calendrier pour l'accessibilité
4746	var title_datepicker = "";
4747	if(langCur == 'es'){title_datepicker = "Seleccione la fecha de la búsqueda";}
4748	else{ 
4749		if (langCur == 'en'){title_datepicker = "Choose a research date";}
4750		else{title_datepicker = "choisissez une date de recherche";}
4751	}
4752	$(".ui-datepicker-trigger").attr("title", title_datepicker);
4753}
4754
4755/********************  Gérer la récupération des paramètres de recherche pour récupérer l'url ********************/
4756/***********************    Gestion des erreurs des paramètres de recherche **************************************/
4757
4758function sendRecherchePrevision(){
4759	
4760	//Vérification de la validité de la date
4761	var valDate= $("#datepicker").val();
4762	if( valDate == "dd/mm/yyyy" || valDate == "jj/mm/aaaa" || valDate == "dd/mm/aaaa"){	
4763		if(langCur == 'es'){affichagePopupErreur(messageErreurDate_es);}
4764		else{ 
4765			if (langCur == 'en'){affichagePopupErreur(messageErreurDate_en);}
4766			else{affichagePopupErreur(messageErreurDate);}
4767		}
4768		return;
4769	}
4770	
4771	// S'il n'y a pas d'erreur de paramètres, on va vérifier dans quel cas on se trouve et appeler la bonne fonction avec les bons paramètres
4772	//On récupère la date
4773	var date = $("#datepicker").val();
4774	//date = date.replace(/\//g,'');
4775	effacerMessageErreur();
4776
4777	paramsRecherche = {
4778		'date': date,
4779	};
4780	
4781	//console.log(date);
4782	afficherPrevisions(date) ;	
4783}	
4784
4785/**************************** recherche des données de previsions demandées **
4785********************************/
4786/************************************************************************************************************/
4787function afficherPrevisions(date){
4788	 var indexDate = previsions.days.indexOf(date);
4789	 afficherPrevisionsParIndex(indexDate);
4790}
4791
4792
4793/**************************** recherche des données de previsions demandées **********************************/
4794/************************************************************************************************************/
4795function afficherPrevisionsParIndex(indexDate){
4796	indexCurrentPrevisionDate = indexDate;
4797     var values = previsions.values[indexDate];
4798     
4799     var dateString = previsions.days[indexDate];
4800     var date = new Date(dateToISO(dateString));
4801	    if(document.body.attributes.class.value != "bf-accueil"){
4802  if(langCur == 'es'){
4803	    	 document.getElementById("dateCourante").innerHTML=tab_jour_es[date.getDay()]+" "+ dateString;
4804	    } 
4805	     else { 
4806				if (langCur == 'en'){
4807					document.getElementById("dateCourante").innerHTML=tab_jour_en[date.getDay()]+" "+ dateString;
4808				}
4809				else {
4810					document.getElementById("dateCourante").innerHTML=tab_jour[date.getDay()]+" "+ dateString;
4811				}
4812		}
4813  }
4814
4815     colorerDepartements(previsions.deptsLine,values);
4816	 var dateCouranteElt =document.getElementById("dateCourante");
4817	 if(dateCouranteElt !== null) {
4818		document.getElementById("dateCourante").innerHTML=tab_jour[date.getDay()]+" "+ dateString;
4819	 }
4820			
4821		 		 if(  document.body.attributes.class.value != "bf-accueil"){
4822    	 miseAjourBoutons();
4823     }
4824
4825}
4826
4827
4828/**************************** afficher jour suivant **********************************/
4829/************************************************************************************************************/
4830function afficherPrevisionsJourSuivant(){
4831	indexDate = indexCurrentPrevisionDate+1;
4832	 afficherPrevisionsParIndex(indexDate);
4833}
4834
4835
4836/**************************** afficher jour precedent **********************************/
4837/************************************************************************************************************/
4838function afficherPrevisionsJourPrecedent(){
4839	if(indexCurrentPrevisionDate > 0){
4840		indexDate = indexCurrentPrevisionDate - 1;
4841		afficherPrevisionsParIndex(indexDate);
4842	} 	
4843}
4844
4845/**************************** Mise à jour du fond des boutons **********************************/
4846/************************************************************************************************************/
4847
4848function miseAjourBoutons(){
4849	$("#jour-precedent").removeClass("precedent-inactif");
4850	$("#jour-precedent").addClass("precedent-actif");
4851	document.getElementById("jour-precedent-bouton").disabled = false;
4852	
4853	$("#jour-suivant").removeClass("suivant-inactif");
4854	$("#jour-suivant").addClass("suivant-actif");
4855	document.getElementById("jour-suivant-bouton").disabled = false;
4856	
4857    var indexOfToday = previsions.days.indexOf(parseDate(new Date()));
4858    
4859	if(indexCurrentPrevisionDate == indexOfToday){
4860		$("#jour-precedent").removeClass("precedent-actif");
4861		$("#jour-precedent").addClass("precedent-inactif");
4862		document.getElementById("jour-precedent-bouton").disabled = true;
4863	} 
4864	else if(indexCurrentPrevisionDate == (previsions.days.length-1)) {
4865		$("#jour-suivant").removeClass("suivant-actif");
4866		$("#jour-suivant").addClass("suivant-inactif");
4867		document.getElementById("jour-suivant-bouton").disabled = true;
4868	}
4869}
4870 /************************  Effacer le message d'erreur affiché **************************/
4871/*****************************************************************************************/
4872 function effacerMessageErreur(){
4873	 $("#popupErreur").empty();
4874	 $("#popupErreur").hide();
4875 }
4876 
4877 
4878
4879 /************************  Afficher **************************/
4880/*****************************************************************************************/
4881 function colorerDepartements (depts, couleurs) {
4882	  for(i=0; i < depts.length; i++) {
4883		  var couleurJour = couleurs[i].split(',')
4884		 $('#depart-'+ depts[i]).css({'fill':  getCouleurJour(couleurJour[0])});
4885		 $('#retour-'+ depts[i]).css({'fill':  getCouleurJour(couleurJour[1])});
4886		}
4887 }
4888 
4889 
4890function getCouleurJour(couleur) {
4891	if (!document.modeDaltonien) {
4892		switch (couleur) {
4893			case 'V':
4894				return '#92d050';
4895			case 'O':
4896				return '#fec002';
4897			case 'R':
4898				return '#e10010';
4899			case 'N':
4900				 return 'black';
4901			default:
4902				return 'grey';
4903		}
4904	}
4905	else {
4906		switch (couleur) {
4907			case 'V':
4908				return '#5EA9DE';
4909			case 'O':
4910				return '#F7A523';
4911			case 'R':
4912				return '#951F82';
4913			case 'N':
4914				 return 'black';
4915			default:
4916				return 'grey';
4917		}
4918	}
4919}
4920 
4921function dateToISO (dateAsString) {
4922     var day = dateAsString.slice(0, 2);
4923     var month = dateAsString.slice(3, 5);
4924     var year = dateAsString.slice(6, 10);
4925     var dateISO = year + "-" + month + "-" + day;
4926     return dateISO;
4927 }
4928
4929function parseDate(date) {
4930    return ('0' + date.getDate()).slice(-2) + '/' + ('0' + (date.getMonth() + 1)).slice(-2) + '/' + date.getFullYear();
4931}
4932
4933
4934function colorerAujourdhui() {
4935	 var today = new Date();
4936     var indexOfToday = previsions.days.indexOf(parseDate(today));
4937     var values = previsions.values[indexOfToday];
4938     colorerDepartements(previsions.deptsLine,values)
4939}
4940
4941function getColoredDays(days, display) {
4942     var today = new Date();
4943     var coloredDays = new Array(); // liste des jours colorés
4944     var indexOfToday = days.indexOf(parseDate(today));
4945     var weekend = new Array();
4946     var previous = 0;
4947     for (var i = indexOfToday; i < days.length; i++) {
4948         if (display[i] == 1) {
4949             weekend.push(i);
4950             previous = 1;
4951             if (i == days.length - 1) {
4952                 coloredDays.push(weekend);
4953             }
4954         }
4955         if (display[i] == 0) {
4956             if (previous == 1) {
4957                 coloredDays.push(weekend);
4958                 previous = 0;
4959                 weekend = new Array();
4960             }
4961             previous = 0;
4962         }
4963     }
4964     return coloredDays;
4965 }
4966
4967function formatDatePrevision(date) {
4968	var dateCpns = new Object();
4969	var stringDate = "";
4970	dateCpns.nomJour = date.getDay();
4971	dateCpns.jour = ('0' + date.getDate()).slice(-2);
4972	dateCpns.mois = ('0' + (date.getMonth() + 1)).slice(-2);
4973	dateCpns.annee = date.getFullYear();
4974	dateCpns.stringDate = shortDays[dateCpns.nomJour] + " " + dateCpns.jour
4975			+ "/" + dateCpns.mois;
4976	return dateCpns;
4977}
4978	
4979 function getWeekendsColors (nextWeekends, values, national) {
4980     var weekendsColors = new Array();
4981//     console.log(nextWeekends[1][0]);
4982//     console.log("nextWeekends.length>"+nextWeekends.length);
4983     for (var i = 0; i < nextWeekends.length; i++) {
4984         var weekend = new Array();
4985        // console.log("$scope.nextWeekends[i].length>"+nextWeekends[i].length);
4986         for (var j = 0; j < nextWeekends[i].length; j++) {
4987             //console.log("$scope.nextWeekends[i][j]>"+$scope.nextWeekends[i][j]);
4988             //console.log("$scope.days[$scope.nextWeekends[i][j]]>"+$scope.days[$scope.nextWeekends[i][j]]);
4989             dayColor = new Object();
4990             // dayColor.date = $scope.formatDateShort(new Date($scope.dateToISO($rootScope.days[$scope.nextWeekends[i][j]])));
4991             dayColor.date = formatDatePrevision(new Date(dateToISO(previsions.days[nextWeekends[i][j]])));
4992             //console.log(new Date(dateToISO(previsions.days[nextWeekends[i][j]])));
4993             dayColor.index = nextWeekends[i][j];
4994           //  console.log(previsions.values[i]);
4995             couleurs = national[nextWeekends[i][j]].split(',');
4996             dayColor.colorAller = couleurs[0];
4997             dayColor.colorRetour = couleurs[1];
4998             couleursMax = getDayMaxColor(values[nextWeekends[i][j]]);
4999             dayColor.colorAllerMax = couleursMax[0];
5000             dayColor.colorRetourMax = couleursMax[1];
5001			  //console.log(dayColor);
5002             weekend.push(dayColor);
5003         }
5004         weekendsColors.push(weekend);
5005     }
5006     return weekendsColors
5007 }
5008 
5009 
5010 function getDayMaxColor (colors) {
5011     var maxColor = ['G', 'G'];
5012     for (var i = 0; i < colors.length; i++) {
5013         color = colors[i].split(',');
5014         for (j = 0; j < color.length; j++) {
5015             switch (color[j]) {
5016                 case 'N':
5017                     if (maxColor[j] !== 'N')
5018                         maxColor[j] = 'N';
5019                 case 'R':
5020                     if (maxColor[j] !== 'R' && maxColor[j] !== 'N')
5021                         maxColor[j] = 'R';
5022                 case 'O':
5023                     if (maxColor[j] !== 'O' && maxColor[j] !== 'R' && maxColor[j] !== 'N')
5024                         maxColor[j] = 'O';
5025                 case 'V':
5026                     if (maxColor[j] !== 'V' && maxColor[j] !== 'O' && maxColor[j] !== 'R' && maxColor[j] !== 'N')
5027                         maxColor[j] = 'V';
5028             }
5029         }
5030     }
5031     return maxColor;
5032 }
5033
5034 
5035 
5036 function paginerTableau(){
5037     var table = $("#myTable");
5038     $(table).remove();
5039     var tr = $("<tr></tr>");
5040     $("<td></td>").html('Test').appendTo(tr);
5041     $("<td></td>").html('test').appendTo(tr);
5042     $("<td></td>").html('[email protected]').appendTo(tr);
5043     $("<td></td>").html('$5.00').appendTo(tr);
5044     $("<td></td>").html('http://www.test.com').appendTo(tr);
5045     $(tr).appendTo(table);
5046     $(table).appendTo($('#tableholer'));
5047     $("#tableholer table").tablesorter();
5048 }
5049 
5050  function lengthWeekendColor(items) {
5051        var width = 0;
5052        for (weekend in items) {
5053            width += 10 + (items[weekend].length * 40); // marge:10 cell:40
5054        }
5055        return width;
5056    }
5057   
5058   function createProchainJour(prochainsJours) {
5059   
5060   
5061   }
5062   
5063   function creerTableauPrevisions() {
5064		var nextWeekends = getColoredDays(previsions.days,previsions.display);
5065		var tableValues = getWeekendsColors (nextWeekends, previsions.values, previsions.national);
5066		var contenu = $("#contenuprochainsjours");
5067
5068		var divInner = $('<div style="height:130px;float:left;" />')
5069		var tableContenu  = $("<table style='height:120px; text-align:'center';'  />")
5070		var width = 0;
5071
5072		for(i=0;i<tableValues.length;i++){
5073			width += 10 + (tableValues[i].length * 40);
5074			var table = $('<table style="float:left" class="prochainsJours">');
5075			var tr1 = $('<tr>');
5076			table.append(tr1);
5077			var tr2 = $('<tr>');
5078			table.append(tr2);
5079			var tr3 = $('<tr>');
5080			table.append(tr3);
5081
5082			for(j=0;j<tableValues[i].length;j++){
5083
5084				var indexOfDay = previsions.days.indexOf(tableValues[i][j].date.jour+'/'+tableValues[i][j].date.mois+'/'+tableValues[i][j].date.annee);
5085				var day = tableValues[i][j].date.jour+'/'+tableValues[i][j].date.mois+'/'+tableValues[i][j].date.annee;
5086
5087				// header
5088				var th = $('<th onclick="afficherPrevisionsParIndex('+indexOfDay+');" style="text-align:center;">'+ tableValues[i][j].date.stringDate+'</th>');
5089				tr1.append(th);
5090
5091				// 2e ligne
5092				var td1 = $('<td align="right" onclick="afficherPrevisionsParIndex('+indexOfDay+');" style="vertical-align: bottom;background-color:'+ getCouleurJour(tableValues[i][j].colorAller) +'"></td>');
5093				var td1max = $('<div style="width:50%;height:45%;background-color:'+ getCouleurJour(tableValues[i][j].colorAllerMax) +'"></div>');
5094				td1
5095				td1.append(td1max);
5096				tr2.append(td1);
5097
5098				// 3e ligne
5099				var td2 = $('<td align="right" onclick="afficherPrevisionsParIndex('+indexOfDay+');" style="vertical-align: bottom;background-color:'+ getCouleurJour(tableValues[i][j].colorRetour) +'"></td>');
5100				var td2max = $('<div style="width:50%;height:45%;background-color:'+ getCouleurJour(tableValues[i][j].colorRetourMax) +'"></div>');
5101				td2.append(td2max);
5102				tr3.append(td2);
5103			}
5104			divInner.append(table);
5105		}
5106
5107		divInner.css('width', width+'px');
5108		$('#prochainsjoursTable').after(divInner);
5109
5110		 $(divInner).appendTo(contenu);
5111	}
5112
5113
5114function chargerJson(url){
5115		//On vide la liste de résultats avant l'envoie d'une nouvelle requête
5116		//$("#tableau-previsions").empty();
5117		lang= $("#current-lang").val();
5118		//envoie de la requête
5119		//url sera à remplacer par l'adresse récupérer suite à l'envoi des paramètres d'entrée
5120		if(!bool){
5121			bool =true;
5122		$.ajax({type:'GET',
5123					url: url,
5124					dataType: 'json',
5125					contentType :'application/json',
5126					success: function(data){
5127					previsions = data;
5128					var aujourdhui = new Date();
5129					afficherPrevisions(parseDate(aujourdhui));
5130					//colorerAujourdhui();
5131					bool = false;
5132
5133  if(document.title.indexOf("Accueil") == -1 ){
5134  creerTableauPrevisions();
5135						createDatePicker();
5136					}
5137					//	bandeauPagination(data);
5138					
5139					//En cas d'erreur de récupération des données on affiche le message suivant
5140					},error: function(){					
5141						var texteErreur;
5142						if(lang == 'es'){texteErreur = '"Información no disponible en este momento. Por favor, actualice la página en el navegador dentro de unos minutos."';}
5143						else{ 
5144							if (lang == 'en'){texteErreur = '"Data not available for the moment. Please refresh your page in the browser in a few minutes"';}
5145							else{texteErreur = '"Données indisponibles pour le moment. Veuillez rafraîchir votre page dans le navigateur dans quelques instants"';}
5146						}
5147						var divTextErreur = document.createElement("div");
5148						divTextErreur.className = "no-result";
5149						divTextErreur.appendChild(document.createTextNode(texteErreur));
5150						$("#liste-resultat").append(divTextErreur);
5151						bool = false;
5152					}
5153			});
5154		}
5155	}
5156
5157function chargerJsonPrevisionDetaillees(url){
5158	//On vide la liste de résultats avant l'envoie d'une nouvelle requête
5159	//$("#tableau-previsions").empty();
5160	lang= $("#current-lang").val();
5161	bool = false;
5162	//envoie de la requête
5163	//url sera à remplacer par l'adresse récupérer suite à l'envoi des paramètres d'entrée
5164	if(!bool){
5165		bool =true;
5166	$.ajax({type:'GET',
5167				url: url,
5168				dataType: 'json',
5169				contentType :'application/json',
5170				success: function(data){
5171				indexPrevision = data;
5172				},error: function(){					
5173					var texteErreur;
5174					if(lang == 'es'){texteErreur = '"Información no disponible en este momento. Por favor, actualice la página en el navegador dentro de unos minutos."';}
5175					else{ 
5176						if (lang == 'en'){texteErreur = '"Data not available for the moment. Please refresh your page in the browser in a few minutes"';}
5177						else{texteErreur = '"Données indisponibles pour le moment. Veuillez rafraîchir votre page dans le navigateur dans quelques instants"';}
5178					}
5179					var divTextErreur = document.createElement("div");
5180					divTextErreur.className = "no-result";
5181					divTextErreur.appendChild(document.createTextNode(texteErreur));
5182					$("#liste-resultat").append(divTextErreur);
5183					bool = false;
5184				}
5185		});
5186	}
5187}
5188
5189
5190function removeWord(searchWord, str){
5191    var n = str.search(searchWord);
5192    while(str.search(searchWord) > -1){
5193        n = str.search(searchWord);
5194        str = str.substring(0, n) + str.substring(n + searchWord.length, str.length);
5195    }
5196    return str;
5197}
5198
5199function checkLanguage(urlHtml){		
5200	var urlHtmlSplited = urlHtml.split(".html");
5201	var urlHtmlWithoutLang = urlHtmlSplited[0];
5202	
5203	if (urlHtmlWithoutLang.indexOf('langes') > -1){
5204		urlHtmlWithoutLang = this.removeWord(",langes", urlHtmlWithoutLang);
5205	}else if(urlHtmlWithoutLang.indexOf('langen') > -1){
5206		urlHtmlWithoutLang = this.removeWord(",langen", urlHtmlWithoutLang);
5207	}
5208	return urlHtmlWithoutLang;
5209}
5210
5211// sensPrevisions = depart / retour
5212function previsionsDetailleesClick(sensPrevisions){
5213	var langCur = $("#current-lang").val();
5214	var dateCourante= document.getElementById("dateCourante").innerHTML;
5215	var valDate = dateCourante.split(" ");
5216	var indexDate = previsions.days.indexOf(valDate[1]);
5217	var values = previsions.values[indexDate];
5218	var newdate = valDate[1].split("/").reverse().join("");
5219	var dates = [];
5220	var datesList =
5221		sensPrevisions == 'depart' ? indexPrevision.indexPrevisionDepart :
5222		sensPrevisions == 'retour' ? indexPrevision.indexPrevisionRetour :
5223		[];
5224	var flag = false;
5225	var urlHtmlWithoutLang;
5226	for(j=0;j<datesList.length;j++){
5227		dates.push(datesList[j].date);
5228	}
5229	if(dates.indexOf(newdate) !== -1){
5230		for(i=0;i<datesList.length;i++){
5231			if(datesList[i].date === newdate){
5232				urlHtmlWithoutLang = this.checkLanguage(datesList[i].urlHtml);
5233				if (langCur === "es"){
5234					window.location.href = urlHtmlWithoutLang + ",langes.html";
5235					break;
5236				}else if(langCur === "en"){
5237					window.location.href = urlHtmlWithoutLang + ",langen.html";
5238					break;
5239				}else{
5240					window.location.href = urlHtmlWithoutLang + ".html";
5241					break;
5242				}	
5243			}
5244		}
5245	}else{
5246		for(i=0; i < values.length; i++) {
5247				var couleurJour = values[i].split(',')
5248				if(couleurJour[0] === "O" || couleurJour[0] === "R" || couleurJour[0] === "N" || couleurJour[1] === "O" || couleurJour[1] === "R" || couleurJour[1] === "N"){
5249					flag = false;
5250					window.location.href = "/previsions-non-disponibles.html";
5251					break;
5252				}else{
5253					flag = true;
5254				}
5255		}
5256		if(flag){
5257			window.location.href = "/pas-de-previsions.html";
5258		}
5259	}
5260}
5261
5262$(document).ready(function(){
5263	// Déclaration des variables
5264	var lienAccueil = "";
5265	var lienMobile = "";
5266	var langCur;
5267	langCur = $("#current-lang").val();		// On récupère la langue courante
5268	
5269	// permet de récupérer l’url pointant sur le site mobile (Par défaut « ./mobile.html »)
5270	var urlmobile = bisonfute.core.INSTANCE.getUrls().mobile;
5271	// de la même manière pour le site desktop (Par défaut « ./index.html »)
5272	var urldesktop = bisonfute.core.INSTANCE.getUrls().desktop;
5273		
5274	if(urldesktop != "undefined" || urldesktop != null || urldesktop != ""){
5275		if(langCur!=""){
5276			lienAccueil = urldesktop.split(".html")[0] + ",lang" + langCur + ".html";
5277		}else{
5278			lienAccueil = urldesktop;
5279		}
5280	}
5281	if(urlmobile != "undefined" || urlmobile != null || urlmobile != ""){
5282		lienMobile = urlmobile;
5283	}
5284  if(document.title.indexOf("Accueil")== -1 ){
5285  if(document.getElementById("lienAccueil")){
5286			document.getElementById("lienAccueil").href = lienAccueil; 
5287		}
5288		if(document.getElementById("lienAccueil_menu")){
5289			document.getElementById("lienAccueil_menu").href = lienAccueil; 
5290		}
5291		if(document.getElementById("lien_accueil_logo")){
5292			document.getElementById("lien_accueil_logo").href = lienAccueil; 
5293		}
5294		if(document.getElementById("lien-bf-mobile")){
5295			document.getElementById("lien-bf-mobile").href = lienMobile; 
5296		}
5297  }
5298});

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.