;
(function($) {
	'use strict';
	/**
	 * evenements.js 0.1
	 *
	 *
	 * @version  0.1
	 */
	var date = new Date();
	var plugin = {};
	var defaults = {
		jsonPathRoot: "/themes/visitez/data/",
		jsonFileCalendar: "calendrier.json?v=" + date.getFullYear(),
		jsonFileEvents: "evenements.json?v=202206",
		display: "calendar", // calendrier / liste /
		displayPage: "calendar",
		maxItemsDisplayList: 100,
		maxPagerItems: 6,
		calendarSelector: ".site-calendar",
		defaultLanguage: "fr",
		siteLang: $('html').attr('lang'),
		installation: null,
		dayTreshold: [3, 25],
		hideOpenClose: false,
		hidePastEvent: false,
		// Default class
		styleMonthDefault: "closed",
		styleMonthGroup: "group_only",
		styleMonthPublic: "open",
		noEventsMessage: {
			fr: "Il n'y a aucun événement pour le moment.",
			en: "There is no event at the moment."
		},
		scolaireParam: "scolaire=1"
	}
	$.fn.hqEvenements = function(options) {
		if (this.length == 0) return this;
		// support mutltiple elements
		if (this.length > 1) {
			this.each(function() {
				$(this).hqEvenements(options)
			});
			return this;
		}
		// create a namespace to be used throughout the plugin
		var evenement = {};
		// set a reference to our slider element
		var el = this;
		plugin.el = this;
		var items = Array(),
			g_events = Array(),
			config = Array(),
			evenements_data = Array();
		/*-------------------------
			PRIVATE FUNCTIONS
		---------------------------*/
		var init = function() {
			evenement.settings = $.extend({}, defaults, options);
			// Set language for moment.js
			moment.locale(evenement.settings.siteLang);
			moment.locale('fr', {
				ordinal: function(number, token) {
					var output = (number === 1) ? '<sup>er</sup>' : '';
					return number + output;
				}
			});
			// initialize the calendar object
			evenement.calendar = $('<ul class="year" />');
			evenement.calendarMonth = $('');
			evenement.mois = $('');
			evenement.list_tooltip = $('<div class="row site-event" />');
			evenement.tooltip_event_el = $('<ul />');
			evenement.list_tooltip.button = $('<button class="close_popup" type="button" style="display:none">X</button>');
			var jqxhr = $.getJSON(evenement.settings.jsonPathRoot + evenement.settings.jsonFileCalendar, function(data) {
					if (data.results.length > 0) {
						for (var i = 0; i < data.results.length; i++) {
							items.push(data.results[i]);
						}
					}
					config = data.config;
				})
				.done(function() {
					loadJsonEvents();
				})
				.fail(function() {
					/*console.log( "error" );*/ })
		}
		var setup = function() {
			if (evenement.settings.display == 'calendar') {
				setCalendarView();
				activateEvent();
			}
			if (evenement.settings.display == 'events_list') eventListView();
		}
		var loadJsonEvents = function() {
			var jqxhr = $.getJSON(evenement.settings.jsonPathRoot + evenement.settings.jsonFileEvents, function(data) {
					if (data.results.length > 0) {
						for (var i = 0; i < data.results.length; i++) {
							g_events.push(data.results[i]);
						}
					}
				})
				.done(function() {
					setup();
				})
				.fail(function() {
					/*console.log( "error" );*/ })
		}
		/*
			Set the calendar View
		*/
		var setCalendarView = function() {
			var month_class,
				class_highlight,
				html5_data;
			for (var i = 0; i < _e(config.mois).length; i++) {
				var full_month = _e(config.mois)[i][0];
				var short_month = _e(config.mois)[i][1];
				html5_data = ''; // reset
				// html5 data
				html5_data = 'data-event-id="#' + el.attr("id") + "-" + i + '"';
				html5_data += 'data-event-side="left"';
				evenement.calendarMonth = $('<li class="month" ' + html5_data + ' />');
				setMoisCalendar(i);
				class_highlight = highlightCurrentMonth(i);
				evenement.calendarMonth.append('<abbr title="' + full_month + '" class="' + class_highlight + '">' + short_month + '</abbr>');
				evenement.calendar.append(evenement.calendarMonth);
			}
			$(el).find(evenement.settings.calendarSelector).html(evenement.calendar);
		}
		/*
			Set the apparence of a month
			@param: mois	(number)
		*/
		var setMoisCalendar = function(mois) {
			var classe,
				day_treshold = evenement.settings.dayTreshold,
				event_class = '',
				out_class = [];
			out_class.length = 0;
			if (evenement.settings.installation != null) { // Cherche l'info dans une  installation
				for (var i = 0; i < items.length; i++) {
					if (items[i].installation == evenement.settings.installation) {
						// Groupe
						var groupe_start = [new Date(items[i].horaire.groupe_debut).getMonth(), new Date(items[i].horaire.groupe_debut).getDate()];
						var groupe_end = [new Date(items[i].horaire.groupe_fin).getMonth(), new Date(items[i].horaire.groupe_fin).getDate()];
						// Public
						var public_start = [new Date(items[i].horaire.public_debut).getMonth(), new Date(items[i].horaire.public_debut).getDate()];
						var public_end = [new Date(items[i].horaire.public_fin).getMonth(), new Date(items[i].horaire.public_fin).getDate()];
						// Check if month is between
						classe = evenement.settings.styleMonthDefault; //Default class
						// First Group - class="group_only"
						if (groupe_start[0] > groupe_end[0]) { // Si debut plus grand que la fin. Se rend au 12e mois et recommence au 1er mois jusqu'au mois de fin
							classe = ((mois <= groupe_end[0]) || (mois >= groupe_start[0])) ? evenement.settings.styleMonthGroup : classe;
						} else {
							classe = ((mois >= groupe_start[0]) && (mois <= groupe_end[0])) ? evenement.settings.styleMonthGroup : classe;
							if (mois == groupe_start[0] || mois == groupe_end[0])
								event_class = (groupe_end[0] - groupe_start[0] != 11) ? ' has-events' : '';
						}
						// Store the initial class before the overight
						var classe_before = classe;
						// Second public - class="open"
						if (public_start[0] > public_end[0]) { // Si debut plus grand que la fin. Se rend au 12e mois et recommence au 1er mois jusqu'au mois de fin
							classe = ((mois <= public_end[0]) || (mois >= public_end[0])) ? evenement.settings.styleMonthPublic : classe;
						} else {
							classe = ((mois >= public_start[0]) && (mois <= public_end[0])) ? evenement.settings.styleMonthPublic : classe;
							// Si ouverture du site ne dure pas 1 an
							if ((mois == public_start[0] || mois == public_end[0]) && (public_end[0] - public_start[0] != 11)) {
								event_class = ' has-events';
							}
							// Si journée se trouve dans le treshold
							if (mois == public_start[0])
								classe = ((public_start[1] >= day_treshold[0]) && (public_start[1] <= day_treshold[1])) ? classe_before + '-' + evenement.settings.styleMonthPublic : classe;
							else if (mois == public_end[0])
								classe = ((public_end[1] >= day_treshold[0]) && (public_end[1] <= day_treshold[1])) ? evenement.settings.styleMonthPublic + '-' + classe_before : classe;
						}
						// Créer la liste des événements
						//if(event_class == " has-events")
						setTooltipOfMonth(mois, items[i]);
					}
				}
			}
			evenement.calendarMonth.addClass(classe)
			if (evenement.settings.hideOpenClose == false) {
				evenement.calendarMonth.addClass(event_class);
				if (event_class == " has-events") {
					$(evenement.calendarMonth).append(evenement.calendar.button);
					bindMonth();
					bindTooltip();
				}
			}
			// Display
			$(el).append(evenement.list_tooltip);
		}
		/*
			Set events tooltip on calendar
			@param:
		*/
		var setTooltipOfMonth = function(mois, obj) {
			var name_id = el.attr("id") + "-" + mois,
				bloc = [];
			evenement.calendar.button = $('<button class="icon icon-event-monthly" />');
			evenement.list_tooltip.wrapper = $('<li class="span6 site-event-monthly" id="' + name_id + '" style="display:none;" />');
			$(evenement.list_tooltip.wrapper).prepend(evenement.list_tooltip.button);
			$(evenement.list_tooltip.wrapper).append(setEventsCalendar(mois, obj));
			$(evenement.list_tooltip).prepend(evenement.list_tooltip.wrapper);
		}
		/*
			Set events on calendar
			@param:
		*/
		var setEventsCalendar = function(mois, obj) {
			var bloc = [],
				bloc_html = '';
			// Groupe
			var groupe_start = [new Date(obj.horaire.groupe_debut).getMonth(), new Date(obj.horaire.groupe_debut).getDate(), new Date(obj.horaire.groupe_debut)];
			var groupe_end = [new Date(obj.horaire.groupe_fin).getMonth(), new Date(obj.horaire.groupe_fin).getDate(), new Date(obj.horaire.groupe_fin)];
			// Public
			var public_start = [new Date(obj.horaire.public_debut).getMonth(), new Date(obj.horaire.public_debut).getDate(), new Date(obj.horaire.public_debut)];
			var public_end = [new Date(obj.horaire.public_fin).getMonth(), new Date(obj.horaire.public_fin).getDate(), new Date(obj.horaire.public_fin)];
			bloc.push('<button class="close_popup">X</button><div class="site-event-title">' + _e(obj.nom) + '</div>');
			// Ouverture groupe
			bloc.push(setEventStartClose(mois, groupe_start, obj, 'ouverture_groupe'));
			// Fermeture groupe
			bloc.push(setEventStartClose(mois, groupe_end, obj, 'fermeture_groupe'));
			// Ouverture public
			bloc.push(setEventStartClose(mois, public_start, obj, 'ouverture_public'));
			// Fermeture public
			bloc.push(setEventStartClose(mois, public_end, obj, 'fermeture_public'));
			// Événements
			bloc.push(getEventsCalendarFromJson(mois, obj));
			bloc_html = bloc.join("\n");
			return bloc_html;
		}
		/*
			Set the event for open/close of installation
			@params:
			mois	integer
			date	date
			obj		list of items of the JSON (array)
			state	string
		*/
		var setEventStartClose = function(mois, date, obj, state) {
			var bloc = [],
				bloc_html;
			if (mois == date[0]) {
				moment.lang(evenement.settings.siteLang);
				var date = (evenement.settings.siteLang === 'fr') ? moment(date[2]).format("D MMMM") : moment(date[2]).format("MMMM D");
				var out = date + _e(config["2points"]);
				bloc.push('<p>' + out + _e(config[state]) + '</p>');
			}
			bloc_html = bloc.join("\n");
			return bloc_html;
		}
		/*

		*/
		var getEventsCalendarFromJson = function(mois, obj) {
			var bloc = [],
				bloc_html = '',
				event_id,
				event_start,
				event_end,
				date_now;
			for (var i = 0; i < g_events.length; i++) {
				if (g_events[i].installation == obj.installation) {
					//console.log(_e(g_events[i]))
					event_start = new Date(g_events[i]['date_debut']);
					event_end = new Date(g_events[i]['date_fin']);
					date_now = new Date();
					// If range event date is in the month
					if (((event_start.getMonth() <= mois) && (event_end.getMonth() >= mois)) && (moment(date_now).isBefore(event_end) || moment(date_now).isSame(event_end, 'day')) && (typeof _e(g_events[i]) !== 'undefined')) {
						event_id = el.attr("id") + event_start.getTime() + event_end.getTime();
						bloc.push('<p class="" onclick="scrollToEvent(\'' + event_id + '\')"><span class="no-link">' + getEventRangeDate(g_events[i]) + '</span>' + _e(config["2points"]) + _e(g_events[i]).titre + '</p>');
					}
				}
			}
			bloc_html = bloc.join("\n");
			if ((bloc_html != '') && (!checkIfPastEvent(mois))) {
				evenement.calendarMonth.addClass('has-events');
				$(evenement.calendarMonth).prepend(evenement.calendar.button);
				bindMonth();
				bindTooltip();
			}
			return bloc_html;
		}
		var bindMonth = function() {
			var target, targetType, content, targetSide;
			$('body').on('click', '.close_popup', function() {
				$('.close_popup').parent().parent().prev('.site-calendar').find('.year').show();
				$(this).parent().hide();
				$('.active_event').removeClass('active_event');
			})
			$(evenement.calendarMonth).on("mouseenter", function() {
				target = $(this).data('event-id');
				targetType = 'monthly';
				targetSide = $(this).data('event-side');
				if ($(target).length > 0) hasEventPopup = true;
				if (!hasEventPopup) return;
				if (getScrollBarWidth() >= 979) {
					if (targetSide == "left") {
						content = "<div id='event-popup' class='" + targetType + " popup_left'>" + $(target).html() + "</div>";
					} else if (targetSide == "right") {
						content = "<div id='event-popup' class='" + targetType + " popup_right'>" + $(target).html() + "</div>";
					}
					$(this).append(content);
				} else if (Modernizr.touch) {
					if ($(this).hasClass('active_event')) {
						$('.close_popup').hide();
						$(this).removeClass('active_event')
						$(this).prev('site-calendar').show();
						$('.site-event-monthly').hide();
					} else {
						$('.close_popup').show();
						if (getScrollBarWidth() < 767) {
							//$(this).parent().hide();
						}
						$(this).addClass('active_event')
						$('.site-event-monthly').hide();
						$(target).show();
					}
				}
			}).on('mouseleave', function() {
				$('#event-popup').remove();
			}).on('click', function() {
				target = $(this).data('event-id');
				targetType = 'monthly';
				targetSide = $(this).data('event-side');
				if ($(target).length > 0) hasEventPopup = true;
				if (!hasEventPopup) return;
				if (getScrollBarWidth() < 979 && Modernizr.touch == false) {
					if ($(this).hasClass('active_event')) {
						$('.close_popup').hide();
						$(this).removeClass('active_event')
						$(this).prev('site-calendar').show();
						$('.site-event-monthly').hide();
					} else {
						$('.close_popup').show();
						if (getScrollBarWidth() < 767) {
							//$(this).parent().hide();
						}
						$(this).addClass('active_event')
						$('.site-event-monthly').hide();
						$(target).show();
					}
				}
			})
		}
		var bindTooltip = function() {
			var target, targetType, content, targetSide;
			$(evenement.calendar.button).on('focus', function() {
				//console.log("tooltipfocus");
				target = $(this).parent().data('event-id');
				targetType = 'monthly';
				targetSide = $(this).parent().data('event-side');
				if ($(target).length > 0) hasEventPopup = true;
				if (!hasEventPopup) return;
				if (getScrollBarWidth() >= 979) {
					if (targetSide == "left") {
						content = "<div id='event-popup' class='" + targetType + " popup_left'>" + $(target).html() + "</div>";
					} else if (targetSide == "right") {
						content = "<div id='event-popup' class='" + targetType + " popup_right'>" + $(target).html() + "</div>";
					}
					$(this).append(content);
				}
			}).on('focusout', function() {
				$('#event-popup').remove();
			})
		}
		/************************
			DISPLAY EVENTS LIST
		*************************/
		var eventListView = function() {
			// Read data
			getEventsFromJson();
			// Display section fiche-2 before if events
			/*if( (evenements_data.length >= 1) && ( $('.fiche-2').length ) )
				$('.fiche-2').show();*/
			if (evenement.settings.displayPage == 'calendar')
				eventListViewCalendar();
			else if (evenement.settings.displayPage == 'home')
				eventListViewHome();
			else if (evenement.settings.displayPage == 'installation') {
				removeOutdatedEvents();
				// Display section fiche-2 before if events
				if ((evenements_data.length >= 1) && ($('.fiche-2').length))
					$('.fiche-2').show();
				eventListViewInstallation();
				eventListViewInstallationPager();
			}
		}
		var eventListViewCalendar = function() {
			var date_now = new Date(),
				total_links,
				links,
				display_photo,
				alt_image,
				events_empty = true;
			evenement.listView = $('<div />');
			for (var i = 0; i < evenements_data.length; i++) {
				var event_end = new Date(evenements_data[i].date_fin);
				if ((moment(date_now).isBefore(event_end, 'day') || moment(date_now).isSame(event_end, 'day')) && (!jQuery.isEmptyObject(_e(evenements_data[i])))) {
					var links = '';
					events_empty = false;
					if (typeof _e(evenements_data[i]).liens !== "undefined") {
						total_links = _e(evenements_data[i]).liens.length;
						links = '<p class="link">';
						for (var j = 0; j < total_links; j++) {
							links += '<a href="' + _e(evenements_data[i]).liens[j][1] + '" class="arrowsign_link">' + _e(evenements_data[i]).liens[j][0] + '</a>';
							if (j != total_links - 1)
								links += "<br />"
						}
						links += '</p>';
					} else {
						links = '';
					}
					display_photo = (evenements_data[i].photo_thumb) ? evenements_data[i].photo_thumb : evenements_data[i].photo_large;
					alt_image = (typeof evenements_data[i].photo_alt === 'undefined') ? '' : evenements_data[i].photo_alt;
					evenement.listView.append('\
						<div class="row event event-monthly" id="event-' + evenements_data[i].installation + '">\
							<div id="event-' + getEventId(evenements_data[i]) + '" class="span12 block image-left">\
								<div class="image"><img src="' + display_photo + '" alt="' + alt_image + '" width="204"></div>\
								<div class="event-date">' + getEventRangeDate(evenements_data[i]) + '</div>\
								<div class="clearfix"></div>\
								<h3 class="event-title">' + _e(evenements_data[i]).titre + '</h3>\
								<div class="event-region">' + evenements_data[i].region + ' &ndash; ' + _e(evenements_data[i].nom) + '</div>\
								<p class="event-desc">' + _e(evenements_data[i]).descriptif + '<p>\
								<p class="event-sched">' + _e(evenements_data[i]).calendrier_format + '</p>\
								<p class="event-sched">' + _e(evenements_data[i]).fiche_format.col_droite + '</p>\
								<p class="fiche-tel"><span class="v-icon-phone"></span>' + _e(evenements_data[i]).fiche_format.col_tel + '</p>\
								' + links + '\
							</div>\
						</div>\
					')
				}
			}
			// S'il n'ya pas d'événement met le message par defaut
			if (events_empty)
				evenement.listView.append('<p class="message-no-event">' + evenement.settings.noEventsMessage[evenement.settings.siteLang] + '</p>');
			$(el).html(evenement.listView);
			gotoEventLOnLoad();
		}
		var gotoEventLOnLoad = function() {
			var url,
				ancre,
				linkto;
			url = window.location.href;
			ancre = url.split('#')[1];
			if (ancre) {
				linkto = $("#" + ancre);
				$("html, body").animate({
					scrollTop: linkto.offset().top - 60
				}, 500);
			}
		}
		var eventListViewHome = function() {
			var date_now = new Date(),
				max_items_display_list,
				display_photo,
				alt_image,
				events_empty = true;
			// msx items display in loop
			max_items_display_list = (evenement.settings.maxItemsDisplayList < evenements_data.length) ? evenement.settings.maxItemsDisplayList : evenements_data.length;
			evenement.listView = $('<div class="events clearfix owl-carousel" />');
			evenement.noEvent = $('<div class="message-no-event" />');
			if (max_items_display_list > 0) {
				for (var i = 0; i < max_items_display_list; i++) {
					display_photo = (evenements_data[i].photo_thumb) ? evenements_data[i].photo_thumb : evenements_data[i].photo_large;
					alt_image = (typeof evenements_data[i].photo_alt === 'undefined') ? '' : evenements_data[i].photo_alt;
					var event_end = new Date(evenements_data[i].date_fin);
					if ((moment(date_now).isBefore(event_end, 'day') || moment(date_now).isSame(event_end, 'day')) && (!jQuery.isEmptyObject(_e(evenements_data[i])))) {
						events_empty = false;
						//console.log(i);
						evenement.listView.append('\
							<div class="event">\
								<img src="' + display_photo + '" alt="' + alt_image + '" width="204">\
								<div class="event-bloc" style="">\
									<p class="date">' + getEventRangeDate(evenements_data[i]) + '</p>\
								 	<h4>' + _e(evenements_data[i]).titre + '</h4>\
									<p class="event-region">' + evenements_data[i].region + ' &ndash; ' + _e(evenements_data[i].nom) + '</p>\
									<p>' + _e(evenements_data[i]).resume + '</p>\
								</div>\
								<a href="' + _e(config.url_visitez) + '#event-' + getEventId(evenements_data[i]) + '">' + _e(config.savoir_plus) + ' <span class="visuallyhidden">' + _e(evenements_data[i]).titre + '</span></a>\
							</div>\
						')
					}
				}
			}
			// S'il n'ya pas d'événement met le message par defaut
			if (events_empty) {
				evenement.noEvent.append('<p>' + evenement.settings.noEventsMessage[evenement.settings.siteLang] + '</p>');
				$(el).html(evenement.noEvent);
				//$('.all-events').hide();
			} else {
				$(el).html(evenement.listView);
				$(".owl-carousel").owlCarousel({
					navigation: true, // Show next and prev buttons
					rewindNav: false,
					touchDrag: false,
					mouseDrag: false,
					singleItem: false,
					scrollPerPage: false,
					slideSpeed: 700,
					items: 4, //10 items above 1000px browser width
					itemsDesktop: [1000, 3], //5 items between 1000px and 901px
					paginationNumbers: false,
					navigationText: sliderBtnText
				});
			}
		}
		var removeOutdatedEvents = function() {
			var date_now = new Date(),
				index_remove = new Array();
			for (var i = 0; i < evenements_data.length; i++) {
				var event_end = new Date(evenements_data[i].date_fin);
				//if (
				if (moment(event_end).isBefore(date_now, 'day')) {
					index_remove.push(i);
				}
			}
			//var rem = index_remove.join();
			multisplice(evenements_data, index_remove);
		}
		var multisplice = function(array /*, ...args */ ) {
			var args = Array.apply(null, arguments).slice(1);
			//console.log(args[0]);
			args[0].sort(function(a, b) {
				return a - b;
			});
			for (var i = 0; i < args[0].length; i++) {
				var index = args[0][i] - i;
				array.splice(index, 1);
			}
		}
		/*
			FICHE
		*/
		var eventListViewInstallationPager = function() {
			var date_now = new Date(),
				max_pager_items;
			//removeOutdatedEvents();
			// Pager
			evenement.listViewInstall = $();
			evenement.listViewInstall.pager = $('<div class="buttons" />');
			evenement.listViewInstall.pager.prev = $('<button class="prev"><i class="sprite-prev"></i><span class="caption">Précédent</span></button>');
			evenement.listViewInstall.pager.pause = $('<button class="pause" title="Lancement du défilement"><i class="sprite-play-pause"></i><span class="caption">Pause</span></button>');
			evenement.listViewInstall.pager.next = $('<button class="next"><i class="sprite-next"></i><span class="caption">Suivant</span></button>');
			evenement.listViewInstall.pager.append(evenement.listViewInstall.pager.prev).append(evenement.listViewInstall.pager.pause);
			max_pager_items = (evenement.settings.maxPagerItems < evenements_data.length) ? evenement.settings.maxPagerItems : evenements_data.length;
			for (var i = 0; i < max_pager_items; i++) {
				var klass = (i == 0) ? 'active' : '';
				evenement.listViewInstall.pager.append('\
					<button class="btn' + (i + 1) + ' slide ' + klass + '" data-id="' + (i + 1) + '">\
					 <i class="sprite-btn"></i>\
						<span class="caption">' + _e(evenements_data[i]).titre + '</span>\
					</button>\
				')
			}
			evenement.listViewInstall.pager.append(evenement.listViewInstall.pager.next);
			if (evenements_data.length > 1) // Affiche le pager si plus que 1 item
				$('#liste-evenements-pager').html(evenement.listViewInstall.pager)
		}
		var eventListViewInstallation = function() {
			var date_now = new Date(),
				links,
				total_links,
				url_fiche;
			url_fiche = window.location.href;
			evenement.listViewInstall = $();
			// List
			evenement.listViewInstall.items = $('<div class="slides">');
			for (var i = 0; i < evenements_data.length; i++) {
				links = '';
				total_links = _e(evenements_data[i]).liens.length;
				links = '<ul class="ext_list">';
				for (var j = 0; j < total_links; j++) {
					//console.log(pathAndPage(url_fiche) + " - " + pathAndPage(_e(evenements_data[i]).liens[j][1]))
					if (pathAndPage(url_fiche) != pathAndPage(_e(evenements_data[i]).liens[j][1]))
						links += '<li><a href="' + _e(evenements_data[i]).liens[j][1] + '" class="arrow_link">' + _e(evenements_data[i]).liens[j][0] + '</a></li>';
				}
				links += '</ul>';
				var klass = (i == 0) ? 'active' : '';
				evenement.listViewInstall.items.append('\
					<div data-slide="' + (i + 1) + '" class="slide ' + klass + '" >\
						<div class="fiche-block block-image" style="background-image:url(' + evenements_data[i].photo_large + ');"></div>\
						<div class="fiche-block block-content">\
							<time>' + getEventRangeDate(evenements_data[i]) + '</time>\
							<h3>' + _e(evenements_data[i]).titre + '</h3>\
							' + _e(evenements_data[i]).descriptif + '\
							<div class="split-box clearfix">\
								<div>\
									' + _e(evenements_data[i]).fiche_format.col_gauche + '\
								</div>\
								<div>\
									' + _e(evenements_data[i]).fiche_format.col_droite + '\
									' + links + '\
								</div>\
							</div>\
						</div>\
					</div>\
				')
				//console.log(links);
			}
			$(el).html(evenement.listViewInstall.items)
			if (evenements_data.length > 1) {
				$('.slideshow-events').each(function(index, element) {
					$(this).hqSlideshow();
				});
			}
		}
		var pathAndPage = function(url) {
			var patternUrl = /(\w+):\/\/([\w.|\-]*)(\S*)/;
			// modifier pour ajouter le "-"
			//var patternUrl = /(\w+):\/\/([\w.]*)(\S*)/;
			var urlArray = url.match(patternUrl);
			var pathAndPage = urlArray[urlArray.length - 1];
			// Remove anchor and param (# ?)
			pathAndPage = pathAndPage.replace(/[#\?]\S+/, '');
			//
			return pathAndPage;
		}
		var getEventsFromJson = function() {
			for (var i = 0; i < items.length; i++) {
				if ((evenement.settings.installation != null) && (evenement.settings.display == 'calendar')) break;
				if (evenement.settings.installation == null) { // all events
					for (var j = 0; j < g_events.length; j++) {
						if (g_events[j].installation == items[i].installation) {
							g_events[j].installation = items[i].installation;
							g_events[j].region = items[i].region;
							g_events[j].nom = items[i].nom;
							evenements_data.push(g_events[j]);
						}
					}
				} else if (items[i].installation == evenement.settings.installation) {
					for (var j = 0; j < g_events.length; j++) {
						if (g_events[j].installation == items[i].installation) {
							g_events[j].installation = items[i].installation;
							g_events[j].region = items[i].region;
							g_events[j].nom = items[i].nom;
							evenements_data.push(g_events[j]);
						}
					}
				}
			}
			//console.log(evenements_data);
			evenements_data.sort(dynamicSortMultiple("date_debut"));
		}
		var getEventRangeDate = function(obj) {
			var event_start = [new Date(obj.date_debut)],
				event_end = [new Date(obj.date_fin)],
				output;
			moment.lang(evenement.settings.siteLang);
			if ((!moment(event_end[0]).isValid()) || moment(event_start[0]).isSame(event_end[0])) {
				output = (evenement.settings.siteLang === 'fr') ? moment(new Date(event_start[0])).format('Do MMMM YYYY') : moment(new Date(event_start[0])).format('MMMM D, YYYY');
			} else {
				if (evenement.settings.siteLang === 'fr')
					output = sprintf("%s %s %s %s", _e(config.du), moment(new Date(event_start[0])).format('Do MMMM'), _e(config.au), moment(new Date(event_end[0])).format('Do MMMM YYYY'));
				else
					output = sprintf("%s %s %s %s", _e(config.du), moment(new Date(event_start[0])).format('MMMM D'), _e(config.au), moment(new Date(event_end[0])).format('MMMM D, YYYY'));
			}
			return output;
		}
		var getEventId = function(obj) {
			var event_start = [new Date(obj.date_debut).getTime()],
				event_end = [new Date(obj.date_fin).getTime()],
				event_id;
			event_id = obj.installation + event_start[0] + event_end[0];
			return event_id;
		}
		/*
			Check if event is in a past month
		*/
		var checkIfPastEvent = function(mois, type) {
			var current_month,
				state;
			if (type == 'start_close') {
				current_month = new Date().getMonth()
				state = (mois < current_month) ? true : false;
			} else {
				current_month = new Date().getMonth()
				state = (mois < current_month) ? true : false;
			}
			return state;
		}
		/*
			Highlight the current month on calendar
			@param : mois
		*/
		var highlightCurrentMonth = function(mois) {
			var current_month = new Date().getMonth();
			var classe = (mois == current_month) ? 'highlight' : '';
			return classe;
		}
		/*
			Language selector

			@param:
		*/
		var _e = function(elem) {
			var lang;
			lang = $("html").attr("lang");
			if (elem[lang] == "")
				return elem[evenement.settings.defaultLanguage];
			else
				return elem[lang]
		}
		/* Fonctions utilitaires */
		function dynamicSort(property) {
			//console.log(property);
			var sortOrder = 1;
			if (property[0] === "-") {
				sortOrder = -1;
				property = property.substr(1, property.length - 1);
				//console.log(property);
			}
			return function(a, b) {
				var result = (a[property] < b[property]) ? -1 : (a[property] > b[property]) ? 1 : 0;
				return result * sortOrder;
			}
		}

		function dynamicSortMultiple() {
			/*
			 * save the arguments object as it will be overwritten
			 * note that arguments object is an array-like object
			 * consisting of the names of the properties to sort by
			 */
			var props = arguments;
			return function(obj1, obj2) {
				var i = 0,
					result = 0,
					numberOfProperties = props.length;
				/* try getting a different result from 0 (equal)
				 * as long as we have extra properties to compare
				 */
				while (result === 0 && i < numberOfProperties) {
					result = dynamicSort(props[i])(obj1, obj2);
					i++;
				}
				return result;
			}
		}
		Array.prototype.multisplice = function() {
			var args = Array.apply(null, arguments);
			//console.log(args);
			args.sort(function(a, b) {
				return a - b;
			});
			for (var i = 0; i < args.length; i++) {
				var index = args[i] - i;
				this.splice(index, 1);
			}
		}
		/*-------------------------
			PUBLIC FUNCTIONS
		---------------------------*/
		var activateEvent = function() {}
		/*------------------------*/
		init();
		// returns the current jQuery object
		return this;
	}
})(jQuery);
/*! sprintf-js | Alexandru Marasteanu <hello@alexei.ro> (http://alexei.ro/) | BSD-3-Clause */
! function(a) {
	function b() {
		var a = arguments[0],
			c = b.cache;
		return c[a] && c.hasOwnProperty(a) || (c[a] = b.parse(a)), b.format.call(null, c[a], arguments)
	}

	function c(a) {
		return Object.prototype.toString.call(a).slice(8, -1).toLowerCase()
	}

	function d(a, b) {
		return Array(b + 1).join(a)
	}
	var e = {
		not_string: /[^s]/,
		number: /[def]/,
		text: /^[^\x25]+/,
		modulo: /^\x25{2}/,
		placeholder: /^\x25(?:([1-9]\d*)\$|\(([^\)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-fosuxX])/,
		key: /^([a-z_][a-z_\d]*)/i,
		key_access: /^\.([a-z_][a-z_\d]*)/i,
		index_access: /^\[(\d+)\]/,
		sign: /^[\+\-]/
	};
	b.format = function(a, f) {
		var g, h, i, j, k, l, m, n = 1,
			o = a.length,
			p = "",
			q = [],
			r = !0,
			s = "";
		for (h = 0; o > h; h++)
			if (p = c(a[h]), "string" === p) q[q.length] = a[h];
			else if ("array" === p) {
			if (j = a[h], j[2])
				for (g = f[n], i = 0; i < j[2].length; i++) {
					if (!g.hasOwnProperty(j[2][i])) throw new Error(b("[sprintf] property '%s' does not exist", j[2][i]));
					g = g[j[2][i]]
				} else g = j[1] ? f[j[1]] : f[n++];
			if ("function" == c(g) && (g = g()), e.not_string.test(j[8]) && "number" != c(g) && isNaN(g)) throw new TypeError(b("[sprintf] expecting number but found %s", c(g)));
			switch (e.number.test(j[8]) && (r = g >= 0), j[8]) {
				case "b":
					g = g.toString(2);
					break;
				case "c":
					g = String.fromCharCode(g);
					break;
				case "d":
					g = parseInt(g, 10);
					break;
				case "e":
					g = j[7] ? g.toExponential(j[7]) : g.toExponential();
					break;
				case "f":
					g = j[7] ? parseFloat(g).toFixed(j[7]) : parseFloat(g);
					break;
				case "o":
					g = g.toString(8);
					break;
				case "s":
					g = (g = String(g)) && j[7] ? g.substring(0, j[7]) : g;
					break;
				case "u":
					g >>>= 0;
					break;
				case "x":
					g = g.toString(16);
					break;
				case "X":
					g = g.toString(16).toUpperCase()
			}(!r || e.number.test(j[8]) && j[3]) && (s = r ? "+" : "-", g = g.toString().replace(e.sign, "")), l = j[4] ? "0" == j[4] ? "0" : j[4].charAt(1) : " ", m = j[6] - (s + g).length, k = j[6] ? d(l, m) : "", q[q.length] = j[5] ? s + g + k : 0 == l ? s + k + g : k + s + g
		}
		return q.join("")
	}, b.cache = {}, b.parse = function(a) {
		for (var b = a, c = [], d = [], f = 0; b;) {
			if (null !== (c = e.text.exec(b))) d[d.length] = c[0];
			else if (null !== (c = e.modulo.exec(b))) d[d.length] = "%";
			else {
				if (null === (c = e.placeholder.exec(b))) throw new SyntaxError("[sprintf] unexpected placeholder");
				if (c[2]) {
					f |= 1;
					var g = [],
						h = c[2],
						i = [];
					if (null === (i = e.key.exec(h))) throw new SyntaxError("[sprintf] failed to parse named argument key");
					for (g[g.length] = i[1];
						"" !== (h = h.substring(i[0].length));)
						if (null !== (i = e.key_access.exec(h))) g[g.length] = i[1];
						else {
							if (null === (i = e.index_access.exec(h))) throw new SyntaxError("[sprintf] failed to parse named argument key");
							g[g.length] = i[1]
						} c[2] = g
				} else f |= 2;
				if (3 === f) throw new Error("[sprintf] mixing positional and named placeholders is not (yet) supported");
				d[d.length] = c
			}
			b = b.substring(c[0].length)
		}
		return d
	};
	var f = function(a, c, d) {
		return d = (c || []).slice(0), d.splice(0, 0, a), b.apply(null, d)
	};
	"undefined" != typeof exports ? (exports.sprintf = b, exports.vsprintf = f) : (a.sprintf = b, a.vsprintf = f, "function" == typeof define && define.amd && define(function() {
		return {
			sprintf: b,
			vsprintf: f
		}
	}))
}("undefined" == typeof window ? this : window);
//# sourceMappingURL=sprintf.min.map
