var AL = function (type, url, callback) {
	var el, doc = document;
	switch (type) {
		case 'js':
		case 'jsw':
			el = doc.createElement('script');

			el.src = url;
			break;
		case 'css':
			el = doc.createElement('link');
			el.href = url;
			el.rel = 'stylesheet';
			break;
		default:
			return;
	}
	el.className = 'AL' + type;

	if (callback)
		el.addEventListener('load', function (e) { callback(e); }, false);
	if (type === 'jsw')
		doc.getElementsByTagName('body')[0].appendChild(el);
	else
		doc.getElementsByTagName('head')[0].appendChild(el);
}
//Taille réel du viewport
function viewport() {
	var e = window,
		a = 'inner';
	if (!window.hasOwnProperty('innerWidth')) {
		a = 'client';
		e = document.documentElement || document.body;
	}
	return { width: e[a + 'Width'], height: e[a + 'Height'] };
}

//Function toggle

//reset for the desktop accessibility
function resetToggleControls(listElements) {
	listElements.forEach(function (element) {
		var target = element.attributes['aria-controls'].value;
		if (element.attributes['aria-expanded'].value === 'false') {
			element.setAttribute('aria-expanded', 'true');
			$(element).removeClass('active');
			$('#' + target).removeClass('opened');
			$('#' + target).removeAttr('hidden');
			$('body').removeClass('menu-opened');
			$('body').removeClass('search-opened');
		}
	});
}

function resetItem(element, target) {
	element.setAttribute('aria-expanded', 'false');
	$('#' + target).attr('hidden', 'true');
	$(element).removeClass('active');
	$('#' + target).removeClass('opened');
}

function checkSpecialElement(element, target) {
	switch (target) {
		case 'menu':
			resetItem($('[aria-controls="search"')[0], 'search');
			$('body').removeClass('search-opened');
			$('body').toggleClass('menu-opened');


			break;
		case 'search':
			resetItem($('[aria-controls="menu"]')[0], 'menu');
			$('body').toggleClass('search-opened');
			$('body').removeClass('menu-opened');
	}
}

function toggleItem(element, target, e) {
	e.stopPropagation();
	$(element).toggleClass('active');
	$('#' + target).toggleClass('opened');
	if (element.attributes['aria-expanded'].value === 'true') {
		element.setAttribute('aria-expanded', 'false');
		$('#' + target).attr('hidden', 'true');
	} else {
		element.setAttribute('aria-expanded', 'true');
		$('#' + target).removeAttr('hidden');
	}
	checkSpecialElement(element, target);
}

function initToggleControls(listElements, attacheEvent) {
	listElements.forEach(function (element) {
		var target = element.attributes['aria-controls'].value;
		resetItem(element, target);

		if (attacheEvent === false) {
			eventCreated = true;
			element.addEventListener('click', function (e) {
				toggleItem(element, target, e);

			});
		}
	});
	$('#menu').click(function (e) {
		toggleItem(document.getElementById('button_burger'), 'menu', e);
	});
}
function isDesktop(listElements, attacheEvent) {
	if (viewport().width <= 649 && !isMobile) {
		initToggleControls(listElements, attacheEvent);
		isMobile = true;
	}
	if (viewport().width >= 650) {
		resetToggleControls(listElements);
		isMobile = false;
	}
}
var toggleList;
var eventCreated = false;
var isMobile;

$('document').ready(function () {
	toggleList = document.querySelectorAll('.button_toggle');
	window.addEventListener('resize', function () {
		isDesktop(toggleList, eventCreated);
	});
	//Init mobile toggle control
	isDesktop(toggleList, eventCreated);


	$('#cookieBox').each(function (index, el) {
		var cookie = Cookies.get("chcoo");
		$el = $(el);
		$el.toggle(!cookie);
		$el.find('.accept').on('click', function () {
			$el.hide();
			Cookies.set("chcoo", 1);
		});
	});
	$('.btn-modal').each(function () {
        var $myBtn = $(this);
        $myBtn.click(function () {
			var $dialogCtn = $($(this).attr('dialog-rel'));
			$dialogCtn.modal({
				closeExisting: false,    // Close existing modals. Set this to false if you need to stack multiple modal instances.
				escapeClose: false,      // Allows the user to close the modal by pressing `ESC`
				clickClose: false,       // Allows the user to close the modal by clicking the overlay
				closeText: '',     // Text content for the close <a> tag.
				closeClass: '',         // Add additional class(es) to the close <a> tag.
				showClose: false,        // Shows a (X) icon/link in the top-right corner
				modalClass: "modal-container",    // CSS class added to the element being displayed in the modal.
				blockerClass: "modal-container",  // CSS class added to the overlay (blocker).
			  
				// HTML appended to the default spinner during AJAX requests.
				spinnerHtml: '<div class="rect1"></div><div class="rect2"></div><div class="rect3"></div><div class="rect4"></div>',
			  
				showSpinner: false,      // Enable/disable the default spinner during AJAX requests.
				fadeDuration: null,     // Number of milliseconds the fade transition takes (null means no transition)
				fadeDelay: 1.0          // Point during the overlay's fade-in that the modal begins to fade in (.5 = 50%, 1.5 = 150%, etc.)
			  });
        });
	});
	$('.btn-modal-close').click(function(){
		$.modal.close();
	})
});

/* Show news slides */

let newsInterval;
let isAnimating = false; // Track animation status

// Function to navigate to the next slide
function nextSlide() {
	if (isAnimating) return; // Prevent overlapping animations
	isAnimating = true;
	
	const slideshowContainer = $('.slideshow_container.news_container');
	slideshowContainer.animate({ marginLeft: '-100%' }, 800, function() {
		$(this).css({ marginLeft: 0 }).find('.slide_container.news_div:last').after($(this).find('.slide_container.news_div:first'));
		isAnimating = false;
	});
}

// Function to navigate to the previous slide
function prevSlide() {
	if (isAnimating) return; // Prevent overlapping animations
	isAnimating = true;
	
	const slideshowContainer = $('.slideshow_container.news_container');
	slideshowContainer.css({ marginLeft: '-100%' }).find('.slide_container.news_div:first').before(slideshowContainer.find('.slide_container.news_div:last'));
	slideshowContainer.animate({ marginLeft: 0 }, 800, function() {
		isAnimating = false;
	});
}

// Start the slideshow with automatic sliding
function startSlideshow() {
  	newsInterval = setInterval(nextSlide, 4000); // Slide every 4 seconds
}

// Stop the slideshow
function stopSlideshow() {
  	clearInterval(newsInterval);
}

// Bind click event to next and previous slide buttons
$('.next_slide').on('click', function() {
	stopSlideshow(); // Stop automatic sliding when using buttons
	nextSlide();
	startSlideshow(); // Restart automatic sliding
});

$('.prev_slide').on('click', function() {
	stopSlideshow(); // Stop automatic sliding when using buttons
	prevSlide();
	startSlideshow(); // Restart automatic sliding
});

// Start the slideshow initially
startSlideshow();


/* Show Blocks slide */

$('.slideshow_container.news_container').each(function() {
	const length = $(this).find('.slide_container.news_div').length;
	console.log(length)
	$(this).css('width', `${length*100}%`);
	$(this).find('.slide_container').css('width', `${100/length}%`);
});

$('.slideshow_container.blocks_container').each(function() {
	const length = $(this).find('.slide_container.blocks_div').length;
	$(this).css('width', `${length*100}%`);
	$(this).find('.slide_container').css('width', `${100/length}%`);
});

$('.next_block_slide').on('click', function (e) {
	e.preventDefault()
	const slideshowContainer = $('.slideshow_container.blocks_container');
	slideshowContainer.animate({ marginLeft: '-100%' }, 800, function() {
		$(this).css({ marginLeft: 0 }).find('.slide_container.blocks_div:last').after($(this).find('.slide_container.blocks_div:first'));
	});
})

$('.prev_block_slide').on('click', function (e) {
	e.preventDefault()
	const slideshowContainer = $('.slideshow_container.blocks_container');
	slideshowContainer.css({ marginLeft: '-100%' }).find('.slide_container.blocks_div:first').before(slideshowContainer.find('.slide_container.blocks_div:last'));
	slideshowContainer.animate({ marginLeft: 0 }, 800);
})

/* Swap category by arrow click */

$('.next_category').on('click', function (e) {
	e.preventDefault();
	const movePixel = $(this).attr('class').includes('small_move') ? 120 : 480;
	$(this).siblings('.prev_category').css('display', 'block');
	// Get current left location of list item group
	let currentValue = $(this).siblings('ul.list_new_category').css("transform").split(',')[4];
	// Get full block width
	let divWidth = $(this).parent().width();
	// Get width of list item group and calculate the distance for relocation
	let maxWidth = $(this).siblings('ul.list_new_category').width()-divWidth;
	let newLeft = 0
	// If the distance is bigger than 0, set relocation
	if (maxWidth > 0) {
		newLeft = parseFloat(currentValue) - movePixel;
		if (newLeft <= -maxWidth) {
			newLeft = -maxWidth;
			$(this).css('display', 'none');
		}
	}
	$(this).siblings('ul.list_new_category').css('transform', 'translateX(' + newLeft + 'px)');
})

$('.prev_category').on('click', function (e) {
	e.preventDefault();
	const movePixel = $(this).attr('class').includes('small_move') ? 120 : 480;
	$(this).siblings('.next_category').css('display', 'block');
	let currentValue = $(this).siblings('ul.list_new_category').css("transform").split(',')[4];
	let newLeft = parseFloat(currentValue) + movePixel;
	if (newLeft >= 0) {
		newLeft = 0;
		$(this).css('display', 'none');
	}
	$(this).siblings('ul.list_new_category').css('transform', 'translateX(' + newLeft + 'px)');
})

/**
 * Checks if the window width is less than or equal to 650 and performs the necessary actions.
 */

if ($(window).width() < 650) {
	let categoriesList = $('ul.list_new_category, ol.list_alternative-bg');
	categoriesList.css('transform', 'translateX(0)');

	// Set the width of each list category based on the number of children elements.
	categoriesList.each(function() {
		let totalEventCards = $(this).children().length;
		let firstEventCard = $(this).children().first();
		
		// If the category is not empty
		if (firstEventCard.length > 0) {
			let eventCardWidth = firstEventCard.outerWidth(true); // to get margin
			let categoryListWidth = totalEventCards * eventCardWidth;

			$(this).css('width', `${categoryListWidth}px`);
		}
	});
}

// When hover on logo, shows logo animation

$('#footer_logo_svg').mouseenter(function (e) {
    e.preventDefault();
    startLogoAnimation($(this), 1);
});

// Shows link panel body when click header

if ($(window).width() < 1240) {
    $('footer div.footer_links > div.footer_link > div.footer_link_header').click(function () {
		console.log('clicked');
        $(this).children().eq(1).toggleClass('rotated');
        $(this).next('ul.footer_link_body').slideToggle(300);
    });
}

// Check input in Newsletter

$('footer div.footer_friend_register_button').click(function () {
    const friendMail = $('#friendUser').val();
    const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
    if (emailRegex.test(friendMail)) {
		SubscribeNewsletter(friendMail);
    } else {
        $('footer input.footer_friend_input_form').addClass('error').val('').attr('placeholder', 'Oh oh, cet email est invalide');
    }
});

$('footer input.footer_friend_input_form').click(function (e) {
    e.stopPropagation();
    $(this).removeClass('error').attr('placeholder', 'Allez, entre ton email');
});

function SubscribeNewsletter(friendMail){
    $.post('/',{u:'JSON:SENDEMAIL','Email':friendMail},function(data) {
            if (data.ok) {
                $('footer div.footer_friend_register').hide();
                $('footer input.footer_friend_input_form').css('width', '100%').val('').attr({
                    placeholder: new DOMParser().parseFromString('Bienvenue &#10084;&#65039;', "text/html").documentElement.textContent,
                    disabled: true
                });
            }
            else{
                $('footer input.footer_friend_input_form').addClass('error').val('').attr('placeholder', data.msg);
            }
    },'json');
}

// Function to convert numeric date to French date

function numericDate2French(date) {
    const numericDate = new Date(date);
    const options = { day: 'numeric', month: 'long', year: 'numeric' };

    const frenchDate = numericDate.toLocaleDateString('fr-FR', options);
    return frenchDate;
}

// Show an animation on foolter logo when scroll on that element


if ($('#footer_logo_svg').length > 0) {

	const observer = new IntersectionObserver(entries => {
		entries.forEach(entry => {
			if (entry.isIntersecting) {
				startLogoAnimation($('#footer_logo_svg'), 1);
				return; // if we added the class, exit the function
			}
		});
	});

	observer.observe($('#footer_logo_svg')[0]);
}

function startLogoAnimation(element, type) {
	let color = type === 1 ? '#FF4130' : '#FFFFFF';
	
	// Array of timeouts for each step
	const timeouts = [
		() => element.find('path').eq(0).css('fill', '#0209BD'),
		() => {
			element.find('path').eq(0).css('fill', color);
			element.find('path').eq(5).css('fill', '#FFE039');
			element.find('path').eq(7).css('fill', '#FFE039');
		},
		() => {
			element.find('path').eq(5).css('fill', color);
			element.find('path').eq(7).css('fill', color);
			element.find('path').eq(4).css('fill', '#FEB0E2');
		},
		() => {
			element.find('path').eq(4).css('fill', color);
			element.find('path').eq(1).css('fill', '#7898FF');
		},
		() => {
			element.find('path').eq(1).css('fill', color);
			element.find('path').eq(11).css('fill', '#FFE039');
		},
		() => {
			element.find('path').eq(11).css('fill', color);
			element.find('path').eq(2).css('fill', '#FF7334');
			element.find('path').eq(3).css('fill', '#FF7334');
		},
		() => {
			element.find('path').eq(2).css('fill', color);
			element.find('path').eq(3).css('fill', color);
			element.find('path').eq(8).css('fill', '#0209BD');
		},
		() => {
			element.find('path').eq(8).css('fill', color);
			element.find('path').eq(12).css('fill', '#FEB0E2');
			element.find('path').eq(15).css('fill', '#FEB0E2');
		},
		() => {
			element.find('path').eq(12).css('fill', color);
			element.find('path').eq(15).css('fill', color);
			element.find('path').eq(6).css('fill', '#7898FF');
		},
		() => {
			element.find('path').eq(6).css('fill', color);
			element.find('path').eq(9).css('fill', '#FFE039');
		},
		() => {
			element.find('path').eq(9).css('fill', color);
			element.find('path').eq(10).css('fill', '#FF7334');
		},
		() => element.find('path').eq(10).css('fill', color)
	];

	// Set timeouts for each animation step
	timeouts.forEach((fn, index) => {
		setTimeout(fn, (index + 1) * 100); // Incremental delay
	});

	// Add the footer social icons animation
	for (let i = 0; i < 4; i++) { // Use 'let' to keep the correct value of 'i' in closure
		setTimeout(function () {
			$(`.footer_socials > .footer_social_item:nth-child(${i+1}) img`).addClass("initial_animation");
		}, 1200 + i * 650);
	}

	$(`.footer_socials > .footer_social_item img`).removeClass("initial_animation");
}

/*******************************************************

AutoSuggest - a javascript automatic text input completion component
Copyright (C) 2005 Joe Kepley, The Sling & Rock Design Group, Inc.

This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.

This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

*******************************************************

Please send any useful modifications or improvements via
email to joekepley at yahoo (dot) com

*******************************************************/

/********************************************************
 The AutoSuggest class binds to a text input field
 and creates an automatic suggestion dropdown in the style
 of the "IntelliSense" and "AutoComplete" features of some
 desktop apps.
 Parameters:
 elem: A DOM element for an INPUT TYPE="text" form field
 suggestions: an array of strings to be used as suggestions
              when someone's typing.

 Example usage:

 Please enter the name of a fruit.
 <input type="text" id="fruit" name="fruit" />
 <script language="Javascript">
 var fruits=new Array("apple","orange","grape","kiwi","cumquat","banana");
 new AutoSuggest(document.getElementById("fruit",fruits));
 </script>

 Requirements:

 Unfortunately the AutoSuggest class doesn't seem to work
 well with dynamically-created DIVs. So, somewhere in your
 HTML, you'll need to add this:
 <div id="autosuggest"><ul></ul></div>

 Here's a default set of style rules that you'll also want to
 add to your CSS:

 .suggestion_list
 {
 background: white;
 border: 1px solid;
 padding: 4px;
 }

 .suggestion_list ul
 {
 padding: 0;
 margin: 0;
 list-style-type: none;
 }

 .suggestion_list a
 {
 text-decoration: none;
 color: navy;
 }

 .suggestion_list .selected
 {
 background: navy;
 color: white;
 }

 .suggestion_list .selected a
 {
 color: white;
 }

 #autosuggest
 {
 display: none;
 }
*********************************************************/
var defaultDiacriticsRemovalMap = [
    { 'base': 'A', 'letters': '\u0041\u24B6\uFF21\u00C0\u00C1\u00C2\u1EA6\u1EA4\u1EAA\u1EA8\u00C3\u0100\u0102\u1EB0\u1EAE\u1EB4\u1EB2\u0226\u01E0\u00C4\u01DE\u1EA2\u00C5\u01FA\u01CD\u0200\u0202\u1EA0\u1EAC\u1EB6\u1E00\u0104\u023A\u2C6F' },
    { 'base': 'AA', 'letters': '\uA732' },
    { 'base': 'AE', 'letters': '\u00C6\u01FC\u01E2' },
    { 'base': 'AO', 'letters': '\uA734' },
    { 'base': 'AU', 'letters': '\uA736' },
    { 'base': 'AV', 'letters': '\uA738\uA73A' },
    { 'base': 'AY', 'letters': '\uA73C' },
    { 'base': 'B', 'letters': '\u0042\u24B7\uFF22\u1E02\u1E04\u1E06\u0243\u0182\u0181' },
    { 'base': 'C', 'letters': '\u0043\u24B8\uFF23\u0106\u0108\u010A\u010C\u00C7\u1E08\u0187\u023B\uA73E' },
    { 'base': 'D', 'letters': '\u0044\u24B9\uFF24\u1E0A\u010E\u1E0C\u1E10\u1E12\u1E0E\u0110\u018B\u018A\u0189\uA779\u00D0' },
    { 'base': 'DZ', 'letters': '\u01F1\u01C4' },
    { 'base': 'Dz', 'letters': '\u01F2\u01C5' },
    { 'base': 'E', 'letters': '\u0045\u24BA\uFF25\u00C8\u00C9\u00CA\u1EC0\u1EBE\u1EC4\u1EC2\u1EBC\u0112\u1E14\u1E16\u0114\u0116\u00CB\u1EBA\u011A\u0204\u0206\u1EB8\u1EC6\u0228\u1E1C\u0118\u1E18\u1E1A\u0190\u018E' },
    { 'base': 'F', 'letters': '\u0046\u24BB\uFF26\u1E1E\u0191\uA77B' },
    { 'base': 'G', 'letters': '\u0047\u24BC\uFF27\u01F4\u011C\u1E20\u011E\u0120\u01E6\u0122\u01E4\u0193\uA7A0\uA77D\uA77E' },
    { 'base': 'H', 'letters': '\u0048\u24BD\uFF28\u0124\u1E22\u1E26\u021E\u1E24\u1E28\u1E2A\u0126\u2C67\u2C75\uA78D' },
    { 'base': 'I', 'letters': '\u0049\u24BE\uFF29\u00CC\u00CD\u00CE\u0128\u012A\u012C\u0130\u00CF\u1E2E\u1EC8\u01CF\u0208\u020A\u1ECA\u012E\u1E2C\u0197' },
    { 'base': 'J', 'letters': '\u004A\u24BF\uFF2A\u0134\u0248' },
    { 'base': 'K', 'letters': '\u004B\u24C0\uFF2B\u1E30\u01E8\u1E32\u0136\u1E34\u0198\u2C69\uA740\uA742\uA744\uA7A2' },
    { 'base': 'L', 'letters': '\u004C\u24C1\uFF2C\u013F\u0139\u013D\u1E36\u1E38\u013B\u1E3C\u1E3A\u0141\u023D\u2C62\u2C60\uA748\uA746\uA780' },
    { 'base': 'LJ', 'letters': '\u01C7' },
    { 'base': 'Lj', 'letters': '\u01C8' },
    { 'base': 'M', 'letters': '\u004D\u24C2\uFF2D\u1E3E\u1E40\u1E42\u2C6E\u019C' },
    { 'base': 'N', 'letters': '\u004E\u24C3\uFF2E\u01F8\u0143\u00D1\u1E44\u0147\u1E46\u0145\u1E4A\u1E48\u0220\u019D\uA790\uA7A4' },
    { 'base': 'NJ', 'letters': '\u01CA' },
    { 'base': 'Nj', 'letters': '\u01CB' },
    { 'base': 'O', 'letters': '\u004F\u24C4\uFF2F\u00D2\u00D3\u00D4\u1ED2\u1ED0\u1ED6\u1ED4\u00D5\u1E4C\u022C\u1E4E\u014C\u1E50\u1E52\u014E\u022E\u0230\u00D6\u022A\u1ECE\u0150\u01D1\u020C\u020E\u01A0\u1EDC\u1EDA\u1EE0\u1EDE\u1EE2\u1ECC\u1ED8\u01EA\u01EC\u00D8\u01FE\u0186\u019F\uA74A\uA74C' },
    { 'base': 'OI', 'letters': '\u01A2' },
    { 'base': 'OO', 'letters': '\uA74E' },
    { 'base': 'OU', 'letters': '\u0222' },
    { 'base': 'OE', 'letters': '\u008C\u0152' },
    { 'base': 'oe', 'letters': '\u009C\u0153' },
    { 'base': 'P', 'letters': '\u0050\u24C5\uFF30\u1E54\u1E56\u01A4\u2C63\uA750\uA752\uA754' },
    { 'base': 'Q', 'letters': '\u0051\u24C6\uFF31\uA756\uA758\u024A' },
    { 'base': 'R', 'letters': '\u0052\u24C7\uFF32\u0154\u1E58\u0158\u0210\u0212\u1E5A\u1E5C\u0156\u1E5E\u024C\u2C64\uA75A\uA7A6\uA782' },
    { 'base': 'S', 'letters': '\u0053\u24C8\uFF33\u1E9E\u015A\u1E64\u015C\u1E60\u0160\u1E66\u1E62\u1E68\u0218\u015E\u2C7E\uA7A8\uA784' },
    { 'base': 'T', 'letters': '\u0054\u24C9\uFF34\u1E6A\u0164\u1E6C\u021A\u0162\u1E70\u1E6E\u0166\u01AC\u01AE\u023E\uA786' },
    { 'base': 'TZ', 'letters': '\uA728' },
    { 'base': 'U', 'letters': '\u0055\u24CA\uFF35\u00D9\u00DA\u00DB\u0168\u1E78\u016A\u1E7A\u016C\u00DC\u01DB\u01D7\u01D5\u01D9\u1EE6\u016E\u0170\u01D3\u0214\u0216\u01AF\u1EEA\u1EE8\u1EEE\u1EEC\u1EF0\u1EE4\u1E72\u0172\u1E76\u1E74\u0244' },
    { 'base': 'V', 'letters': '\u0056\u24CB\uFF36\u1E7C\u1E7E\u01B2\uA75E\u0245' },
    { 'base': 'VY', 'letters': '\uA760' },
    { 'base': 'W', 'letters': '\u0057\u24CC\uFF37\u1E80\u1E82\u0174\u1E86\u1E84\u1E88\u2C72' },
    { 'base': 'X', 'letters': '\u0058\u24CD\uFF38\u1E8A\u1E8C' },
    { 'base': 'Y', 'letters': '\u0059\u24CE\uFF39\u1EF2\u00DD\u0176\u1EF8\u0232\u1E8E\u0178\u1EF6\u1EF4\u01B3\u024E\u1EFE' },
    { 'base': 'Z', 'letters': '\u005A\u24CF\uFF3A\u0179\u1E90\u017B\u017D\u1E92\u1E94\u01B5\u0224\u2C7F\u2C6B\uA762' },
    { 'base': 'a', 'letters': '\u0061\u24D0\uFF41\u1E9A\u00E0\u00E1\u00E2\u1EA7\u1EA5\u1EAB\u1EA9\u00E3\u0101\u0103\u1EB1\u1EAF\u1EB5\u1EB3\u0227\u01E1\u00E4\u01DF\u1EA3\u00E5\u01FB\u01CE\u0201\u0203\u1EA1\u1EAD\u1EB7\u1E01\u0105\u2C65\u0250' },
    { 'base': 'aa', 'letters': '\uA733' },
    { 'base': 'ae', 'letters': '\u00E6\u01FD\u01E3' },
    { 'base': 'ao', 'letters': '\uA735' },
    { 'base': 'au', 'letters': '\uA737' },
    { 'base': 'av', 'letters': '\uA739\uA73B' },
    { 'base': 'ay', 'letters': '\uA73D' },
    { 'base': 'b', 'letters': '\u0062\u24D1\uFF42\u1E03\u1E05\u1E07\u0180\u0183\u0253' },
    { 'base': 'c', 'letters': '\u0063\u24D2\uFF43\u0107\u0109\u010B\u010D\u00E7\u1E09\u0188\u023C\uA73F\u2184' },
    { 'base': 'd', 'letters': '\u0064\u24D3\uFF44\u1E0B\u010F\u1E0D\u1E11\u1E13\u1E0F\u0111\u018C\u0256\u0257\uA77A' },
    { 'base': 'dz', 'letters': '\u01F3\u01C6' },
    { 'base': 'e', 'letters': '\u0065\u24D4\uFF45\u00E8\u00E9\u00EA\u1EC1\u1EBF\u1EC5\u1EC3\u1EBD\u0113\u1E15\u1E17\u0115\u0117\u00EB\u1EBB\u011B\u0205\u0207\u1EB9\u1EC7\u0229\u1E1D\u0119\u1E19\u1E1B\u0247\u025B\u01DD' },
    { 'base': 'f', 'letters': '\u0066\u24D5\uFF46\u1E1F\u0192\uA77C' },
    { 'base': 'g', 'letters': '\u0067\u24D6\uFF47\u01F5\u011D\u1E21\u011F\u0121\u01E7\u0123\u01E5\u0260\uA7A1\u1D79\uA77F' },
    { 'base': 'h', 'letters': '\u0068\u24D7\uFF48\u0125\u1E23\u1E27\u021F\u1E25\u1E29\u1E2B\u1E96\u0127\u2C68\u2C76\u0265' },
    { 'base': 'hv', 'letters': '\u0195' },
    { 'base': 'i', 'letters': '\u0069\u24D8\uFF49\u00EC\u00ED\u00EE\u0129\u012B\u012D\u00EF\u1E2F\u1EC9\u01D0\u0209\u020B\u1ECB\u012F\u1E2D\u0268\u0131' },
    { 'base': 'j', 'letters': '\u006A\u24D9\uFF4A\u0135\u01F0\u0249' },
    { 'base': 'k', 'letters': '\u006B\u24DA\uFF4B\u1E31\u01E9\u1E33\u0137\u1E35\u0199\u2C6A\uA741\uA743\uA745\uA7A3' },
    { 'base': 'l', 'letters': '\u006C\u24DB\uFF4C\u0140\u013A\u013E\u1E37\u1E39\u013C\u1E3D\u1E3B\u017F\u0142\u019A\u026B\u2C61\uA749\uA781\uA747' },
    { 'base': 'lj', 'letters': '\u01C9' },
    { 'base': 'm', 'letters': '\u006D\u24DC\uFF4D\u1E3F\u1E41\u1E43\u0271\u026F' },
    { 'base': 'n', 'letters': '\u006E\u24DD\uFF4E\u01F9\u0144\u00F1\u1E45\u0148\u1E47\u0146\u1E4B\u1E49\u019E\u0272\u0149\uA791\uA7A5' },
    { 'base': 'nj', 'letters': '\u01CC' },
    { 'base': 'o', 'letters': '\u006F\u24DE\uFF4F\u00F2\u00F3\u00F4\u1ED3\u1ED1\u1ED7\u1ED5\u00F5\u1E4D\u022D\u1E4F\u014D\u1E51\u1E53\u014F\u022F\u0231\u00F6\u022B\u1ECF\u0151\u01D2\u020D\u020F\u01A1\u1EDD\u1EDB\u1EE1\u1EDF\u1EE3\u1ECD\u1ED9\u01EB\u01ED\u00F8\u01FF\u0254\uA74B\uA74D\u0275' },
    { 'base': 'oi', 'letters': '\u01A3' },
    { 'base': 'ou', 'letters': '\u0223' },
    { 'base': 'oo', 'letters': '\uA74F' },
    { 'base': 'p', 'letters': '\u0070\u24DF\uFF50\u1E55\u1E57\u01A5\u1D7D\uA751\uA753\uA755' },
    { 'base': 'q', 'letters': '\u0071\u24E0\uFF51\u024B\uA757\uA759' },
    { 'base': 'r', 'letters': '\u0072\u24E1\uFF52\u0155\u1E59\u0159\u0211\u0213\u1E5B\u1E5D\u0157\u1E5F\u024D\u027D\uA75B\uA7A7\uA783' },
    { 'base': 's', 'letters': '\u0073\u24E2\uFF53\u00DF\u015B\u1E65\u015D\u1E61\u0161\u1E67\u1E63\u1E69\u0219\u015F\u023F\uA7A9\uA785\u1E9B' },
    { 'base': 't', 'letters': '\u0074\u24E3\uFF54\u1E6B\u1E97\u0165\u1E6D\u021B\u0163\u1E71\u1E6F\u0167\u01AD\u0288\u2C66\uA787' },
    { 'base': 'tz', 'letters': '\uA729' },
    { 'base': 'u', 'letters': '\u0075\u24E4\uFF55\u00F9\u00FA\u00FB\u0169\u1E79\u016B\u1E7B\u016D\u00FC\u01DC\u01D8\u01D6\u01DA\u1EE7\u016F\u0171\u01D4\u0215\u0217\u01B0\u1EEB\u1EE9\u1EEF\u1EED\u1EF1\u1EE5\u1E73\u0173\u1E77\u1E75\u0289' },
    { 'base': 'v', 'letters': '\u0076\u24E5\uFF56\u1E7D\u1E7F\u028B\uA75F\u028C' },
    { 'base': 'vy', 'letters': '\uA761' },
    { 'base': 'w', 'letters': '\u0077\u24E6\uFF57\u1E81\u1E83\u0175\u1E87\u1E85\u1E98\u1E89\u2C73' },
    { 'base': 'x', 'letters': '\u0078\u24E7\uFF58\u1E8B\u1E8D' },
    { 'base': 'y', 'letters': '\u0079\u24E8\uFF59\u1EF3\u00FD\u0177\u1EF9\u0233\u1E8F\u00FF\u1EF7\u1E99\u1EF5\u01B4\u024F\u1EFF' },
    { 'base': 'z', 'letters': '\u007A\u24E9\uFF5A\u017A\u1E91\u017C\u017E\u1E93\u1E95\u01B6\u0225\u0240\u2C6C\uA763' }
];

var diacriticsMap = {};
for (var i = 0; i < defaultDiacriticsRemovalMap.length; i++) {
    var letters = defaultDiacriticsRemovalMap[i].letters;
    for (var j = 0; j < letters.length; j++) {
        diacriticsMap[letters[j]] = defaultDiacriticsRemovalMap[i].base;
    }
}

// "what?" version ... http://jsperf.com/diacritics/12
function removeDiacritics(str) {
    return str.replace(/[^\u0000-\u007E]/g, function (a) {
        return diacriticsMap[a] || a;
    });
}

function AutoSuggest(elem, suggestions) {
    //The 'me' variable allow you to access the AutoSuggest object
    //from the elem's event handlers defined below.
    var me = this;
    var urlredir = null;
    //A reference to the element we're binding the list to.
    this.elem = elem;

    this.suggestions = suggestions;

    //The text input by the user.
    this.inputText = null;

    //A pointer to the index of the highlighted eligible item. -1 means nothing highlighted.
    me.highlighted = -1;

    //A div to use to create the dropdown.
    this.div = document.getElementById("autosuggest");

    this.eligible = new Array();

    //Do you want to remember what keycode means what? Me neither.
    var TAB = 13;
    var ESC = 27;
    var KEYUP = 38;
    var KEYDN = 40;


    //The browsers' own autocomplete feature can be problematic, since it will
    //be making suggestions from the users' past input.
    //Setting this attribute should turn it off.
    elem.setAttribute("autocomplete", "off");

    //We need to be able to reference the elem by id. If it doesn't have an id, set one.
    if (!elem.id) {
        var id = "autosuggest" + idCounter;
        idCounter++;

        elem.id = id;
    }


	/********************************************************
	onkeydown event handler for the input elem.
	Tab key = use the highlighted suggestion, if there is one.
	Esc key = get rid of the autosuggest dropdown
	Up/down arrows = Move the highlight up and down in the suggestions.
	********************************************************/
    elem.onkeydown = function (ev) {
        var key = me.getKeyCode(ev);
        //alert(key);
        switch (key) {
            case TAB:
                me.useSuggestion();
                break;

            case ESC:
                me.hideDiv();
                break;

            case KEYUP:
                if (me.highlighted > -1) {
                    me.highlighted--;
                }
                me.changeHighlight(key);
                break;

            case KEYDN:
                if (me.highlighted < (me.eligible.length - 1)) {
                    me.highlighted++;
                }
                me.changeHighlight(key);
                break;
        }
    };

	/********************************************************
	onkeyup handler for the elem
	If the text is of sufficient length, and has been changed,
	then display a list of eligible suggestions.
	********************************************************/
    elem.onkeyup = function (ev) {
        var key = me.getKeyCode(ev);
        switch (key) {
            //The control keys were already handled by onkeydown, so do nothing.
            case TAB:
            case ESC:
            case KEYUP:
            case KEYDN:
                return;
            default:

                if (this.value !== me.inputText && this.value.length > 1) {
                    me.inputText = this.value;
                    clearTimeout(timersugg);
                    timersugg = setTimeout('autosu.getEligible()', 100);
                    //me.createDiv();
                    //me.positionDiv();
                    //me.showDiv();
                }

                if (this.value.length < 1) {
                    me.hideDiv();
                }
        }
    };

    this.makeandshowDiv = function () {
        me.createDiv();
        //me.positionDiv();
        me.showDiv();
    }

	/********************************************************
	Insert the highlighted suggestion into the input box, and
	remove the suggestion dropdown.
	********************************************************/
    this.useSuggestion = function () {
        console.log(this.highlighted);
        if (this.highlighted > -1) {

            var choisi = me.eligible[this.highlighted]
            if (choisi.t != 20)
                this.elem.value = HtmlDecode(choisi.l);
            this.hideDiv();
            if (choisi.u) {
                document.location.href = choisi.u;
            }
            setTimeout("document.getElementById('" + this.elem.id + "').focus()", 0);
            return false;
        }
        this.hideDiv();
        document.forms['recherche'].onsubmit = function () { return true; };
        document.forms['recherche'].submit();
    };

	/********************************************************
	Display the dropdown. Pretty straightforward.
	********************************************************/
    this.showDiv = function () {
        this.div.style.display = 'block';
    };

	/********************************************************
	Hide the dropdown and clear any highlight.
	********************************************************/
    this.hideDiv = function () {
        this.div.style.display = 'none';
        this.highlighted = -1;
    };

	/********************************************************
	Modify the HTML in the dropdown to move the highlight.
	********************************************************/
    this.changeHighlight = function () {
        var lis = this.div.getElementsByTagName('LI');
        for (i in lis) {
            var li = lis[i];

            if (this.highlighted === parseInt(i)) {
                if (li) li.className = "selected";
            }
            else {
                if (li) li.className = "";
            }
        }
    };

	/********************************************************
	Position the dropdown div below the input text field.
	********************************************************/
    this.positionDiv = function () {
        var el = this.elem;
        var x = 0;
        var y = el.offsetHeight;

        //Walk up the DOM and add up all of the offset positions.
        while (el.offsetParent && el.tagName.toUpperCase() !== 'BODY') {
            x += el.offsetLeft;
            y += el.offsetTop;
            el = el.offsetParent;
        }

        x += el.offsetLeft;
        y += el.offsetTop;

        this.div.style.left = x + 'px';
        this.div.style.top = y + 'px';
    };

	/********************************************************
	Build the HTML for the dropdown div
	********************************************************/
    this.createDiv = function () {
        var ul = document.createElement('ul');
        var dispnd = false;
        //Create an array of LI's for the words.
        //for (i in eligible)
        for (i = 0; i < me.eligible.length; i++) {
            var elig = me.eligible[i];
            if (elig.l !== null) {

                var word = "<b>" + elig.l + "</b>";

                var photo = elig.ph;
                if (photo !== undefined && photo.indexOf("https://") === 0) {
                    word = "<img src='" + photo + "' / height=45 height=45 align=left hspace=5 />" + word;
                }
                else {
                    if (elig.phu) {
                        word = "<img src='https://www.billetreduc.com/zg/r45-45-0/vz-" + elig.phu + ".jpeg' / height=45 height=45 align=left hspace=5 />" + word;
                    }
                    if (elig.ph) {
                        word = "<img src='https://www.billetreduc.com/zg/r45-45-0/" + photo + ".jpeg' / height=45 height=45 align=left hspace=5 />" + word;
                    }
                }
                if (elig.salle) {
                    word += "<br/>" + elig.salle + " " + elig.cp + " " + elig.ville;
                } else if (elig.cp) {
                    word += "<br/>" + elig.cp + " " + elig.ville;
                }
                if (word !== null) {
                    var li = document.createElement('li');
                    if (elig.nd && dispnd === false) {
                        li.innerHTML = '<b style="margin-top:5px;border-bottom:1px dotted #eee;display:block;color:#090;">Ev&egrave;nements anciennement propos&eacute;s</b>';
                        dispnd = true;
                    }
                    var a = document.createElement('a');
                    if (elig.u)
                        a.href = elig.u;
                    //else
                    //	a.href='se.htm?ar='+elig.l;
                    a.innerHTML = word;
                    li.appendChild(a);
                    if (elig.t === 10)
                        a.className = "aspect";
                    else if (elig.t === 16)
                        a.className = "asalle";
                    else if (elig.t === 20)
                        a.className = "anext";
                    if (me.highlighted === i) {
                        li.className = "selected";
                    }
                    else
                        li.className = "";

                    ul.appendChild(li);
                }
            }
        }

        this.div.replaceChild(ul, this.div.childNodes[0]);


		/********************************************************
		mouseover handler for the dropdown ul
		move the highlighted suggestion with the mouse
		********************************************************/
        ul.onmouseover = function (ev) {
            //Walk up from target until you find the LI.
            var target = me.getEventSource(ev);
            while (target.parentNode && target.tagName.toUpperCase() !== 'LI') {
                target = target.parentNode;
            }

            var lis = me.div.getElementsByTagName('LI');


            for (i in lis) {
                var li = lis[i];
                if (li === target) {
                    me.highlighted = i;
                    break;
                }
            }
            me.changeHighlight();
        };

		/********************************************************
		click handler for the dropdown ul
		insert the clicked suggestion into the input
		********************************************************/
        ul.onclick = function (ev) {
            me.useSuggestion();
            me.hideDiv();
            me.cancelEvent(ev);
            return false;
        };

        this.div.className = "suggestion_list";
        //this.div.style.position = 'absolute';

    };
    this.setEligible = function (arr) {
        me.eligible = arr;
    };

    this.parseData = function (data) {
        this.setEligible(data);
        this.makeandshowDiv();

    };
	/********************************************************
	determine which of the suggestions matches the input
	********************************************************/
    this.getEligible = function () {
        $.get('/cgi/api/web/search/autocomplete/v2?s=' + escape(removeDiacritics(this.inputText)),
            function (data) {
                autosu.parseData(data);
            });
        //sndReq('/cgi/api/web/search/autocomplete?s='+this.inputText+'&rnd='+Math.random())
    };




	/********************************************************
	Helper function to determine the keycode pressed in a
	browser-independent manner.
	********************************************************/
    this.getKeyCode = function (ev) {
        if (ev)			//Moz
        {
            return ev.keyCode;
        }
        if (window.event)	//IE
        {
            return window.event.keyCode;
        }
    };

	/********************************************************
	Helper function to determine the event source element in a
	browser-independent manner.
	********************************************************/
    this.getEventSource = function (ev) {
        if (ev)			//Moz
        {
            return ev.target;
        }

        if (window.event)	//IE
        {
            return window.event.srcElement;
        }
    };

	/********************************************************
	Helper function to cancel an event in a
	browser-independent manner.
	(Returning false helps too).
	********************************************************/
    this.cancelEvent = function (ev) {
        if (ev)			//Moz
        {
            ev.preventDefault();
            ev.stopPropagation();
        }
        if (window.event)	//IE
        {
            window.event.returnValue = false;
        }
    }
}

function HtmlDecode(s) {
    var out = "";
    if (s === null) return;
    var l = s.length;
    for (var i = 0; i < l; i++) {
        var ch = s.charAt(i);
        if (ch === '&') {
            var semicolonIndex = s.indexOf(';', i + 1);
            if (semicolonIndex > 0) {
                var entity = s.substring(i + 1, semicolonIndex);
                if (entity.length > 1 && entity.charAt(0) == '#') {
                    if (entity.charAt(1) == 'x' || entity.charAt(1) == 'X')
                        ch = String.fromCharCode(eval('0' + entity.substring(1)));
                    else
                        ch = String.fromCharCode(eval(entity.substring(1)));
                }
                i = semicolonIndex;
            }
        }
        out += ch;
    }
    return out;
}


//counter to help create unique ID's
var idCounter = 0;
var timersugg = null;
var inputR = document.getElementById('inputRecherche');
if (inputR) {
    var autosu = new AutoSuggest(document.getElementById('inputRecherche'), null);
    var formRecherche = document.forms['recherche'];
    if (formRecherche !== undefined)
        document.forms['recherche'].onsubmit = function () { return false; };
}

var brapp = Cookies.get('brappl');
brdata=brdata || {};
var deeplink = deeplink || {};
brdata.platform=  { ios: /iPhone|iPod/.test(navigator.platform),android:/Android/.test(navigator.userAgent)};
brdata.platform.mobile=brdata.platform.ios || brdata.platform.android;

function checkAppConsent() {
	if (brdata.appconsent && brdata.platform.mobile) {
		if (!brapp) {
			var m = Math.random()*100;
            var mpc = brdata.apppercent || 10;
            // on déploie ce cookie que sur un % des utilisateurs.
			if (m<mpc) {
                if (!brdata.appsource) brdata.appsource = 'default';

                loadPluginOrCookie('AppliMobileCookie');
				//if (confirm("Voulez vous utiliser l'application mobile ?")) {
				//	launchAppTrack();
				//}
			}
        }
        else {
			var appi = document.getElementById('appInfo');
			if( appi) {
				appi.style.display='inline';
				trackEvent('appinfo','showinfo-'+brdata.appsource);
				setTimeout(function() {document.getElementById('appInfo').style.display='none';},10000 );
				$(appi).bind('click',launchAppTrack).bind('touchstart',launchAppTrack);
			}
		}
	}
}
setTimeout(checkAppConsent,1000);
function launchAppTrack() {
	trackEvent('appinfo','click-'+brdata.appsource);
	setTimeout(launchApp,200);
}
function launchApp(siInstall,track) {
	if (siInstall==undefined) siInstall=true;
	if (siInstall)
		document.location.href='/openapp.htm?s='+brdata.appsource+'&d='+encodeURI(brdata.deeplink)+'&evtid='+brdata.evtid;
	else if ( brdata.deeplink)
		doDeepLink(brdata.deeplink);
}
function doDeepLink(dl) {
		if(brdata.platform.mobile)
			document.location.href='billetreduc://dl/'+dl;
}

function launchApp2(siInstall) {
	if (!siInstall) siInstall=true;
	if (deeplink && deeplink.setup && brdata.evtid) {

		deeplink.setup({
			iOS: {storeUrl:brdata.applink},
			delay:5000,
			androidDisabled:true,
			fallback:siInstall
		});
		if (!brdata.deeplink && brdata.evtid)
			brdata.deeplink='billetreduc://dl/?aid='+brdata.evtid;
		if (brdata.deeplink) deeplink.open('billetreduc://dl/?aid='+brdata.evtid);
	}
	else {
		if (siInstall) setTimeout(function() {document.location.href=brdata.applink;},1000);
	}
}

var fcbk= null;
  window.fbAsyncInit = function() {
    FB.init({appId: '107683430897', status: true, cookie: true,xfbml: true,channelUrl:'//www.billetreduc.com/cgi/FacebookChannel.aspx'});
	try {

		FB.getLoginStatus(function(resp) {
			console.log(resp);
      if (resp.session)  {
				fcbk.respStatus = resp;
				if (resp.session || resp.status == "notConnected")
					fcbk.hasFb = true;
				else
					fcbk.hasFb =false;
				console.log('retfb',fcbk.hasFb);
			}
		});
	}
	catch(err) {
		fcbk.hasFb =false;
		console.log('errFb');
		console.log(err);
	}

fcbk = {
	hasFb : false,
	hasperm : function(perm) {
		console.log(fcbk.respStatus);
		if (fcbk.respStatus && fcbk.respStatus.perms && fcbk.respStatus.perms.indexOf(perm)>-1)
			return true;
		else
			return false;
	},
  checklike: function() {
    var query = FB.Data.query( "select page_id from page_fan where uid=me() and page_id ='246618820595'");
    query.wait( function(rows) {
    if(rows.length) {
        // User already likes the page
    }
  });

  },
	onlog : function(resp) {
	if (resp.session) {
		var fbsql={query:"select {0} from user where uid = {1} limit 1",fieldslist:['email','sex','last_name','first_name','current_location','hometown_location','username','birthday_date','pic_big_with_logo','pic_small_with_logo','pic_square_with_logo'],uid:resp.session.uid};
		var query=FB.Data.query(fbsql.query,fbsql.fieldslist.join(','),fbsql.uid);
		query.wait(function(rows){
			console.log(rows);
		});
	}},
login: function(callback,perm) {
	if (!perm) perm='user_birthday,user_location,email';
	FB.login(function(response) {
	        if (response.session) {
	            fcbk.respStatus=response;
	            console.log(response);
	            if (callback) callback();
	        }
	    }, {perms:perm});	
},

 sendpost : function(x) {
 if (!fcbk.hasperm('publish_stream')) {
 	fcbk.login(function() {fcbk.sendpost(x)},'publish_stream');
 	return;
 }

	 var publish =null;
	 if (x && x.srcElement) {
	 	publish = brdata['postfb'+$(x.srcElement).attr('rel')];
	 }


   FB.api('/me/feed', 'POST', publish, function(response) {  
   		if (response && response.id) {
   			spalert('Votre commentaire &agrave; &eacute;t&eacute; ajout&eacute; sur facebook');
   			trackEvent('facebook','critique');
   			if(x && x.srcElement) {
   				$(x.srcElement).replaceWith('Commentaire post&eacute; sur Facebook');
   			}
   		}
   		else
   			spalert('Erreur: le commentaire n\'a pas &eacute;t&eacute; publi&eacute;');
   });
	}
};
$('.fcbk').css('display','block');
$('.sendfcbk').click(fcbk.sendpost);
   	
};

   (function(d, s, id){
    if (brdata.fcbk && brdata.cnil) {
       var js, fjs = d.getElementsByTagName(s)[0];
       if (d.getElementById(id)) {return;}
       js = d.createElement(s); js.id = id;
       js.src = "//connect.facebook.net/fr_FR/all.js";
       fjs.parentNode.insertBefore(js, fjs);
    }
   }(document, 'script', 'facebook-jssdk'));




/*!
 * jQuery blockUI plugin
 * Version 2.70.0-2014.11.23
 * Requires jQuery v1.7 or later
 *
 * Examples at: http://malsup.com/jquery/block/
 * Copyright (c) 2007-2013 M. Alsup
 * Dual licensed under the MIT and GPL licenses:
 * http://www.opensource.org/licenses/mit-license.php
 * http://www.gnu.org/licenses/gpl.html
 *
 * Thanks to Amir-Hossein Sobhi for some excellent contributions!
 */

;(function() {
/*jshint eqeqeq:false curly:false latedef:false */
"use strict";

	function setup($) {
		$.fn._fadeIn = $.fn.fadeIn;

		var noOp = $.noop || function() {};

		// this bit is to ensure we don't call setExpression when we shouldn't (with extra muscle to handle
		// confusing userAgent strings on Vista)
		var msie = /MSIE/.test(navigator.userAgent);
		var ie6  = /MSIE 6.0/.test(navigator.userAgent) && ! /MSIE 8.0/.test(navigator.userAgent);
		var mode = document.documentMode || 0;
		var setExpr = $.isFunction( document.createElement('div').style.setExpression );

		// global $ methods for blocking/unblocking the entire page
		$.blockUI   = function(opts) { install(window, opts); };
		$.unblockUI = function(opts) { remove(window, opts); };

		// convenience method for quick growl-like notifications  (http://www.google.com/search?q=growl)
		$.growlUI = function(title, message, timeout, onClose) {
			var $m = $('<div class="growlUI"></div>');
			if (title) $m.append('<h1>'+title+'</h1>');
			if (message) $m.append('<h2>'+message+'</h2>');
			if (timeout === undefined) timeout = 3000;

			// Added by konapun: Set timeout to 30 seconds if this growl is moused over, like normal toast notifications
			var callBlock = function(opts) {
				opts = opts || {};

				$.blockUI({
					message: $m,
					fadeIn : typeof opts.fadeIn  !== 'undefined' ? opts.fadeIn  : 700,
					fadeOut: typeof opts.fadeOut !== 'undefined' ? opts.fadeOut : 1000,
					timeout: typeof opts.timeout !== 'undefined' ? opts.timeout : timeout,
					centerY: false,
					showOverlay: false,
					onUnblock: onClose,
					css: $.blockUI.defaults.growlCSS
				});
			};

			callBlock();
			var nonmousedOpacity = $m.css('opacity');
			$m.mouseover(function() {
				callBlock({
					fadeIn: 0,
					timeout: 30000
				});

				var displayBlock = $('.blockMsg');
				displayBlock.stop(); // cancel fadeout if it has started
				displayBlock.fadeTo(300, 1); // make it easier to read the message by removing transparency
			}).mouseout(function() {
				$('.blockMsg').fadeOut(1000);
			});
			// End konapun additions
		};

		// plugin method for blocking element content
		$.fn.block = function(opts) {
			if ( this[0] === window ) {
				$.blockUI( opts );
				return this;
			}
			var fullOpts = $.extend({}, $.blockUI.defaults, opts || {});
			this.each(function() {
				var $el = $(this);
				if (fullOpts.ignoreIfBlocked && $el.data('blockUI.isBlocked'))
					return;
				$el.unblock({ fadeOut: 0 });
			});

			return this.each(function() {
				if ($.css(this,'position') == 'static') {
					this.style.position = 'relative';
					$(this).data('blockUI.static', true);
				}
				this.style.zoom = 1; // force 'hasLayout' in ie
				install(this, opts);
			});
		};

		// plugin method for unblocking element content
		$.fn.unblock = function(opts) {
			if ( this[0] === window ) {
				$.unblockUI( opts );
				return this;
			}
			return this.each(function() {
				remove(this, opts);
			});
		};

		$.blockUI.version = 2.70; // 2nd generation blocking at no extra cost!

		// override these in your code to change the default behavior and style
		$.blockUI.defaults = {
			// message displayed when blocking (use null for no message)
			message:  '<h1>Please wait...</h1>',

			title: null,		// title string; only used when theme == true
			draggable: true,	// only used when theme == true (requires jquery-ui.js to be loaded)

			theme: false, // set to true to use with jQuery UI themes

			// styles for the message when blocking; if you wish to disable
			// these and use an external stylesheet then do this in your code:
			// $.blockUI.defaults.css = {};
			css: {
				padding:	0,
				margin:		0,
				width:		'30%',
				top:		'40%',
				left:		'35%',
				textAlign:	'center',
				color:		'#000',
				border:		'3px solid #aaa',
				backgroundColor:'#fff',
				cursor:		'wait'
			},

			// minimal style set used when themes are used
			themedCSS: {
				width:	'30%',
				top:	'40%',
				left:	'35%'
			},

			// styles for the overlay
			overlayCSS:  {
				backgroundColor:	'#000',
				opacity:			0.6,
				cursor:				'wait'
			},

			// style to replace wait cursor before unblocking to correct issue
			// of lingering wait cursor
			cursorReset: 'default',

			// styles applied when using $.growlUI
			growlCSS: {
				width:		'350px',
				top:		'10px',
				left:		'',
				right:		'10px',
				border:		'none',
				padding:	'5px',
				opacity:	0.6,
				cursor:		'default',
				color:		'#fff',
				backgroundColor: '#000',
				'-webkit-border-radius':'10px',
				'-moz-border-radius':	'10px',
				'border-radius':		'10px'
			},

			// IE issues: 'about:blank' fails on HTTPS and javascript:false is s-l-o-w
			// (hat tip to Jorge H. N. de Vasconcelos)
			/*jshint scripturl:true */
			iframeSrc: /^https/i.test(window.location.href || '') ? 'javascript:false' : 'about:blank',

			// force usage of iframe in non-IE browsers (handy for blocking applets)
			forceIframe: false,

			// z-index for the blocking overlay
			baseZ: 1000,

			// set these to true to have the message automatically centered
			centerX: true, // <-- only effects element blocking (page block controlled via css above)
			centerY: true,

			// allow body element to be stetched in ie6; this makes blocking look better
			// on "short" pages.  disable if you wish to prevent changes to the body height
			allowBodyStretch: true,

			// enable if you want key and mouse events to be disabled for content that is blocked
			bindEvents: true,

			// be default blockUI will supress tab navigation from leaving blocking content
			// (if bindEvents is true)
			constrainTabKey: true,

			// fadeIn time in millis; set to 0 to disable fadeIn on block
			fadeIn:  200,

			// fadeOut time in millis; set to 0 to disable fadeOut on unblock
			fadeOut:  400,

			// time in millis to wait before auto-unblocking; set to 0 to disable auto-unblock
			timeout: 0,

			// disable if you don't want to show the overlay
			showOverlay: true,

			// if true, focus will be placed in the first available input field when
			// page blocking
			focusInput: true,

            // elements that can receive focus
            focusableElements: ':input:enabled:visible',

			// suppresses the use of overlay styles on FF/Linux (due to performance issues with opacity)
			// no longer needed in 2012
			// applyPlatformOpacityRules: true,

			// callback method invoked when fadeIn has completed and blocking message is visible
			onBlock: null,

			// callback method invoked when unblocking has completed; the callback is
			// passed the element that has been unblocked (which is the window object for page
			// blocks) and the options that were passed to the unblock call:
			//	onUnblock(element, options)
			onUnblock: null,

			// callback method invoked when the overlay area is clicked.
			// setting this will turn the cursor to a pointer, otherwise cursor defined in overlayCss will be used.
			onOverlayClick: null,

			// don't ask; if you really must know: http://groups.google.com/group/jquery-en/browse_thread/thread/36640a8730503595/2f6a79a77a78e493#2f6a79a77a78e493
			quirksmodeOffsetHack: 4,

			// class name of the message block
			blockMsgClass: 'blockMsg',

			// if it is already blocked, then ignore it (don't unblock and reblock)
			ignoreIfBlocked: false
		};

		// private data and functions follow...

		var pageBlock = null;
		var pageBlockEls = [];

		function install(el, opts) {
			var css, themedCSS;
			var full = (el == window);
			var msg = (opts && opts.message !== undefined ? opts.message : undefined);
			opts = $.extend({}, $.blockUI.defaults, opts || {});

			if (opts.ignoreIfBlocked && $(el).data('blockUI.isBlocked'))
				return;

			opts.overlayCSS = $.extend({}, $.blockUI.defaults.overlayCSS, opts.overlayCSS || {});
			css = $.extend({}, $.blockUI.defaults.css, opts.css || {});
			if (opts.onOverlayClick)
				opts.overlayCSS.cursor = 'pointer';

			themedCSS = $.extend({}, $.blockUI.defaults.themedCSS, opts.themedCSS || {});
			msg = msg === undefined ? opts.message : msg;

			// remove the current block (if there is one)
			if (full && pageBlock)
				remove(window, {fadeOut:0});

			// if an existing element is being used as the blocking content then we capture
			// its current place in the DOM (and current display style) so we can restore
			// it when we unblock
			if (msg && typeof msg != 'string' && (msg.parentNode || msg.jquery)) {
				var node = msg.jquery ? msg[0] : msg;
				var data = {};
				$(el).data('blockUI.history', data);
				data.el = node;
				data.parent = node.parentNode;
				data.display = node.style.display;
				data.position = node.style.position;
				if (data.parent)
					data.parent.removeChild(node);
			}

			$(el).data('blockUI.onUnblock', opts.onUnblock);
			var z = opts.baseZ;

			// blockUI uses 3 layers for blocking, for simplicity they are all used on every platform;
			// layer1 is the iframe layer which is used to supress bleed through of underlying content
			// layer2 is the overlay layer which has opacity and a wait cursor (by default)
			// layer3 is the message content that is displayed while blocking
			var lyr1, lyr2, lyr3, s;
			if (msie || opts.forceIframe)
				lyr1 = $('<iframe class="blockUI" style="z-index:'+ (z++) +';display:none;border:none;margin:0;padding:0;position:absolute;width:100%;height:100%;top:0;left:0" src="'+opts.iframeSrc+'"></iframe>');
			else
				lyr1 = $('<div class="blockUI" style="display:none"></div>');

			if (opts.theme)
				lyr2 = $('<div class="blockUI blockOverlay ui-widget-overlay" style="z-index:'+ (z++) +';display:none"></div>');
			else
				lyr2 = $('<div class="blockUI blockOverlay" style="z-index:'+ (z++) +';display:none;border:none;margin:0;padding:0;width:100%;height:100%;top:0;left:0"></div>');

			if (opts.theme && full) {
				s = '<div class="blockUI ' + opts.blockMsgClass + ' blockPage ui-dialog ui-widget ui-corner-all" style="z-index:'+(z+10)+';display:none;position:fixed">';
				if ( opts.title ) {
					s += '<div class="ui-widget-header ui-dialog-titlebar ui-corner-all blockTitle">'+(opts.title || '&nbsp;')+'</div>';
				}
				s += '<div class="ui-widget-content ui-dialog-content"></div>';
				s += '</div>';
			}
			else if (opts.theme) {
				s = '<div class="blockUI ' + opts.blockMsgClass + ' blockElement ui-dialog ui-widget ui-corner-all" style="z-index:'+(z+10)+';display:none;position:absolute">';
				if ( opts.title ) {
					s += '<div class="ui-widget-header ui-dialog-titlebar ui-corner-all blockTitle">'+(opts.title || '&nbsp;')+'</div>';
				}
				s += '<div class="ui-widget-content ui-dialog-content"></div>';
				s += '</div>';
			}
			else if (full) {
				s = '<div class="blockUI ' + opts.blockMsgClass + ' blockPage" style="z-index:'+(z+10)+';display:none;position:fixed"></div>';
			}
			else {
				s = '<div class="blockUI ' + opts.blockMsgClass + ' blockElement" style="z-index:'+(z+10)+';display:none;position:absolute"></div>';
			}
			lyr3 = $(s);

			// if we have a message, style it
			if (msg) {
				if (opts.theme) {
					lyr3.css(themedCSS);
					lyr3.addClass('ui-widget-content');
				}
				else
					lyr3.css(css);
			}

			// style the overlay
			if (!opts.theme /*&& (!opts.applyPlatformOpacityRules)*/)
				lyr2.css(opts.overlayCSS);
			lyr2.css('position', full ? 'fixed' : 'absolute');

			// make iframe layer transparent in IE
			if (msie || opts.forceIframe)
				lyr1.css('opacity',0.0);

			//$([lyr1[0],lyr2[0],lyr3[0]]).appendTo(full ? 'body' : el);
			var layers = [lyr1,lyr2,lyr3], $par = full ? $('body') : $(el);
			$.each(layers, function() {
				this.appendTo($par);
			});

			if (opts.theme && opts.draggable && $.fn.draggable) {
				lyr3.draggable({
					handle: '.ui-dialog-titlebar',
					cancel: 'li'
				});
			}

			// ie7 must use absolute positioning in quirks mode and to account for activex issues (when scrolling)
			var expr = setExpr && (!$.support.boxModel || $('object,embed', full ? null : el).length > 0);
			if (ie6 || expr) {
				// give body 100% height
				if (full && opts.allowBodyStretch && $.support.boxModel)
					$('html,body').css('height','100%');

				// fix ie6 issue when blocked element has a border width
				if ((ie6 || !$.support.boxModel) && !full) {
					var t = sz(el,'borderTopWidth'), l = sz(el,'borderLeftWidth');
					var fixT = t ? '(0 - '+t+')' : 0;
					var fixL = l ? '(0 - '+l+')' : 0;
				}

				// simulate fixed position
				$.each(layers, function(i,o) {
					var s = o[0].style;
					s.position = 'absolute';
					if (i < 2) {
						if (full)
							s.setExpression('height','Math.max(document.body.scrollHeight, document.body.offsetHeight) - (jQuery.support.boxModel?0:'+opts.quirksmodeOffsetHack+') + "px"');
						else
							s.setExpression('height','this.parentNode.offsetHeight + "px"');
						if (full)
							s.setExpression('width','jQuery.support.boxModel && document.documentElement.clientWidth || document.body.clientWidth + "px"');
						else
							s.setExpression('width','this.parentNode.offsetWidth + "px"');
						if (fixL) s.setExpression('left', fixL);
						if (fixT) s.setExpression('top', fixT);
					}
					else if (opts.centerY) {
						if (full) s.setExpression('top','(document.documentElement.clientHeight || document.body.clientHeight) / 2 - (this.offsetHeight / 2) + (blah = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + "px"');
						s.marginTop = 0;
					}
					else if (!opts.centerY && full) {
						var top = (opts.css && opts.css.top) ? parseInt(opts.css.top, 10) : 0;
						var expression = '((document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + '+top+') + "px"';
						s.setExpression('top',expression);
					}
				});
			}

			// show the message
			if (msg) {
				if (opts.theme)
					lyr3.find('.ui-widget-content').append(msg);
				else
					lyr3.append(msg);
				if (msg.jquery || msg.nodeType)
					$(msg).show();
			}

			if ((msie || opts.forceIframe) && opts.showOverlay)
				lyr1.show(); // opacity is zero
			if (opts.fadeIn) {
				var cb = opts.onBlock ? opts.onBlock : noOp;
				var cb1 = (opts.showOverlay && !msg) ? cb : noOp;
				var cb2 = msg ? cb : noOp;
				if (opts.showOverlay)
					lyr2._fadeIn(opts.fadeIn, cb1);
				if (msg)
					lyr3._fadeIn(opts.fadeIn, cb2);
			}
			else {
				if (opts.showOverlay)
					lyr2.show();
				if (msg)
					lyr3.show();
				if (opts.onBlock)
					opts.onBlock.bind(lyr3)();
			}

			// bind key and mouse events
			bind(1, el, opts);

			if (full) {
				pageBlock = lyr3[0];
				pageBlockEls = $(opts.focusableElements,pageBlock);
				if (opts.focusInput)
					setTimeout(focus, 20);
			}
			else
				center(lyr3[0], opts.centerX, opts.centerY);

			if (opts.timeout) {
				// auto-unblock
				var to = setTimeout(function() {
					if (full)
						$.unblockUI(opts);
					else
						$(el).unblock(opts);
				}, opts.timeout);
				$(el).data('blockUI.timeout', to);
			}
		}

		// remove the block
		function remove(el, opts) {
			var count;
			var full = (el == window);
			var $el = $(el);
			var data = $el.data('blockUI.history');
			var to = $el.data('blockUI.timeout');
			if (to) {
				clearTimeout(to);
				$el.removeData('blockUI.timeout');
			}
			opts = $.extend({}, $.blockUI.defaults, opts || {});
			bind(0, el, opts); // unbind events

			if (opts.onUnblock === null) {
				opts.onUnblock = $el.data('blockUI.onUnblock');
				$el.removeData('blockUI.onUnblock');
			}

			var els;
			if (full) // crazy selector to handle odd field errors in ie6/7
				els = $('body').children().filter('.blockUI').add('body > .blockUI');
			else
				els = $el.find('>.blockUI');

			// fix cursor issue
			if ( opts.cursorReset ) {
				if ( els.length > 1 )
					els[1].style.cursor = opts.cursorReset;
				if ( els.length > 2 )
					els[2].style.cursor = opts.cursorReset;
			}

			if (full)
				pageBlock = pageBlockEls = null;

			if (opts.fadeOut) {
				count = els.length;
				els.stop().fadeOut(opts.fadeOut, function() {
					if ( --count === 0)
						reset(els,data,opts,el);
				});
			}
			else
				reset(els, data, opts, el);
		}

		// move blocking element back into the DOM where it started
		function reset(els,data,opts,el) {
			var $el = $(el);
			if ( $el.data('blockUI.isBlocked') )
				return;

			els.each(function(i,o) {
				// remove via DOM calls so we don't lose event handlers
				if (this.parentNode)
					this.parentNode.removeChild(this);
			});

			if (data && data.el) {
				data.el.style.display = data.display;
				data.el.style.position = data.position;
				data.el.style.cursor = 'default'; // #59
				if (data.parent)
					data.parent.appendChild(data.el);
				$el.removeData('blockUI.history');
			}

			if ($el.data('blockUI.static')) {
				$el.css('position', 'static'); // #22
			}

			if (typeof opts.onUnblock == 'function')
				opts.onUnblock(el,opts);

			// fix issue in Safari 6 where block artifacts remain until reflow
			var body = $(document.body), w = body.width(), cssW = body[0].style.width;
			body.width(w-1).width(w);
			body[0].style.width = cssW;
		}

		// bind/unbind the handler
		function bind(b, el, opts) {
			var full = el == window, $el = $(el);

			// don't bother unbinding if there is nothing to unbind
			if (!b && (full && !pageBlock || !full && !$el.data('blockUI.isBlocked')))
				return;

			$el.data('blockUI.isBlocked', b);

			// don't bind events when overlay is not in use or if bindEvents is false
			if (!full || !opts.bindEvents || (b && !opts.showOverlay))
				return;

			// bind anchors and inputs for mouse and key events
			var events = 'mousedown mouseup keydown keypress keyup touchstart touchend touchmove';
			if (b)
				$(document).bind(events, opts, handler);
			else
				$(document).unbind(events, handler);

		// former impl...
		//		var $e = $('a,:input');
		//		b ? $e.bind(events, opts, handler) : $e.unbind(events, handler);
		}

		// event handler to suppress keyboard/mouse events when blocking
		function handler(e) {
			// allow tab navigation (conditionally)
			if (e.type === 'keydown' && e.keyCode && e.keyCode == 9) {
				if (pageBlock && e.data.constrainTabKey) {
					var els = pageBlockEls;
					var fwd = !e.shiftKey && e.target === els[els.length-1];
					var back = e.shiftKey && e.target === els[0];
					if (fwd || back) {
						setTimeout(function(){focus(back);},10);
						return false;
					}
				}
			}
			var opts = e.data;
			var target = $(e.target);
			if (target.hasClass('blockOverlay') && opts.onOverlayClick)
				opts.onOverlayClick(e);

			// allow events within the message content
			if (target.parents('div.' + opts.blockMsgClass).length > 0)
				return true;

			// allow events for content that is not being blocked
			return target.parents().children().filter('div.blockUI').length === 0;
		}

		function focus(back) {
			if (!pageBlockEls)
				return;
			var e = pageBlockEls[back===true ? pageBlockEls.length-1 : 0];
			if (e)
				e.focus();
		}

		function center(el, x, y) {
			var p = el.parentNode, s = el.style;
			var l = ((p.offsetWidth - el.offsetWidth)/2) - sz(p,'borderLeftWidth');
			var t = ((p.offsetHeight - el.offsetHeight)/2) - sz(p,'borderTopWidth');
			if (x) s.left = l > 0 ? (l+'px') : '0';
			if (y) s.top  = t > 0 ? (t+'px') : '0';
		}

		function sz(el, p) {
			return parseInt($.css(el,p),10)||0;
		}

	}


	/*global define:true */
	if (typeof define === 'function' && define.amd && define.amd.jQuery) {
		define(['jquery'], setup);
	} else {
		setup(jQuery);
	}

})();
$('.showVideo').click(function () {
    var idvideo = $(this).attr('rel');
    if (idvideo.length == 0) return false;
    trackEvent('video', idvideo);
    $.get(
        '/' + idvideo + '/extraitvideo.htm?filter=1',
        function (xdata) {
            //xdata='<h4>Video</h4><a href=# id="closePop" style="float:right;" class="abtnsmall" >Fermer X</a>'+xdata;
            brdata.blockUIOneClick = true;
            $.blockUI({
                'message': xdata,
                'css': {
                    'width': '650px',
                    'top': '10%'
                }
            });
        }
    );
    return false;
});

var trackEvent = function (cat, act) {
    ga('send', 'event', cat, act);
};

$('#closePop').on('click', function () {
    $.unblockUI();
    return false;
});


$('.blockOverlay,.blockPage').on('click', 'div', function () {
    if (!brdata.blockUIOneClick) return;
    $.unblockUI();
    brdata.blockUIOneClick = false;
    return false;
});
$(document).keydown(function (e) {
    if (e.which == 27) { // escape, close box
        $.unblockUI();
    }
});
