/* TO DO :
* - $.ajaxSetup: définir les options par défaut des requêtes ajax.
* - Touche enter qui déclenche la recherche
*/

//var _stop_timer; //timer de l'arret du player

(function(window, $) {


    //¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
    // CLASSE BAP
    //______________________________________________________________________________
    function BAP() {

        //Activation ou désactivation du mode asynchrone
        this.async = false;

        //URL de base des pages
        this.baseURL = 'http://www.bandeapart.fm/';
        var m = document.location.href.match(/(http:\/\/[^\/]+)/);
        if (m) { this.baseURL = m[1] + '/'; }

        //URL de base pour les éléments statiques (js, css, images, swf)
        this.staticURL = 'http://static.bandeapart.fm/';
        m = $('#staticURL').val().match(/(http:\/\/[^\/]+)/);
        if (m) { this.staticURL = m[1] + '/'; }

        //Interval de la bapgallery
        this.bapgalleryInterval = 5000;
//        m = $('#bapgalleryInterval').val().match(/d/);
//        if (m) { this.bapgalleryInterval = m[1] + '/'; }

        //URL de la page consultée
        this.url = document.location.href;

        //Variable de contrôle pour l'intervalle de vérification de l'identifiant de session
        this.sessionTimer = null;

        //Liste des types de contenus
        this.contentTypes = {
            ActualiteMusicale: 23796,
            Album: 68,
            Artiste: 67,
            BapSurLeHipHop: 23974,
            BapSurLeRock: 23973,
            BapSurLElectro: 23976,
            BapSurLesCreateurs: 23975,
            Blogue: 20669,
            CeciEstUnTest: 24134,
            Chapitre: 23962,
            Commentaire: 20670,
            Concert: 69,
            Concours: 23983,
            Critique: 75,
            EmissionsSpeciales: 23980,
            Evenement: 24068,
            Les50ArtistesDeLaDecennie: 24038,
            Lien: 74,
            MangeTaVilleMusique: 23968,
            MusiqueEnContinu: 23865,
            PalmaresInteractif: 78,
            Partenaires: 24050,
            Participant: 23984,
            PartyDeCuisine: 72,
            Photo: 24071,
            Piste: 76,
            Portrait: 71,
            LeHardcoreAuQuebec: 24055,
            QcHcCrossover: 24052,
            QcHcCulture: 24051,
            QcHcOldSchool: 24053,
            QcHcPurEtDur: 24054,
            RadioEnDirect: 23966,
            SelecteurInvite: 23867,
            SelectionMusicale: 23797,
            Session: 70,
            SessionRemix: 23979,
            SessionRadio3: 23853,
            Speciaux: 24045,
            TourneePiknic2009: 23969,
            Videoclip: 73
        }
        //Liste de MIME Types supportés
        this.mimeTypes = {
            ImageJpeg: 4,
            ImagePjpeg: 5,
            AudioMpeg: 1,
            AudioXm4a: 2,
            AudioM4a: 9,
            VideoXm4v: 3,
            VideoM4v: 11,
            VideoXflv: 6,
            VideoFlv: 13,
            VideoYoutube: 16,
            AudioStream: 17,
            VideoStream: 18,
            VideoXMsAsf: 27
        }
		this.displayMode = {
			Normal:0, 
			Video:1,
			Snapshot:2,
			Pochette:3
        }
		this.renderMode = { //rendering du player
				'seeking':false,
				'video':{
					'main':{'height':470},
					'wrap':{'height':360,'width':640},
					'player':{'height':360,'width':640},
					'btm':{'height':105,'margin-top':0}
				},
				'radio':{
					'main':{'height':105},
					'wrap':{'height':1,'width':1},
					'player':{'height':1,'width':1},
					'btm':{'height':105,'margin-top':0}
				},
				'extatique_live_video':{
					'main':{'height':380},
					'middle':{'height':300},
					'wrap':{'height':300,'width':534,'margin':0,'left':0},
					'player':{'height':300,'width':534},
					'btm':{'height':70,'margin-top':'5px'}
				},
				'extatique_live_snapshot':{
					'main':{'height':380},
					'wrap':{'height':300,'width':534,'margin':0,'left':0},
					'player':{'height':1,'width':1},
					'btm':{'height':70,'margin-top':'5px'}
				},
				'stream':{
					'main':{'height':445},
					'wrap':{'height':360,'width':640,'margin':'0 0 0 125px'},
					'player':{'height':360,'width':640},
					'btm':{'height':70,'margin-top':'5px'}
				},
				'audio':{
					'main':{'height':470},
					'wrap':{'height':360,'width':640},
					'player':{'height':1,'width':1},
					'btm':{'height':105,'margin-top':0}
				}
		}
		this.lecteurLoaded = false
		this.error={
			'activated':false,
			'message':'Une difficulté temporaire est survenue.<br/><a href="%1" class="%2" title="recharger">recharger</a>',
			'cls':'err_message'
		}
        //¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
        // OBJET NAV. Regroupe les propriétés et les méthodes relatives au bloc de navigation.
        //______________________________________________________________________________
        this.nav = {
            'timer':null,
			'request':null,
            'main': 'direct', //Identifiant de l'onglet de navigation principale consulté par l'internaute
            'secondary': '', //Identifiant de l'onglet de navigation secondaire (web radio ou fichier média) consulté par l'internaute
            'loaded': '', //Identifiant de l'onglet de navigation secondaire (web radio ou fichier média) chargé dans le lecteur
            'state':"IDLE", //Flag sur l'état de lecture d'un fichier (PLAYING-PAUSED-BUFFERING-COMPLETED-IDLE)
			'currentMimeType':null, //identifiant du mime type du fichier téléchargé
			'siriusObject':{ //Objet Sirius radio
                Id : 78611,
                file : "http://bandeapart-128.akacast.akamaistream.net/7/376/94045/v1/rc.akacast.akamaistream.net/bandeapart-128",
                title : "sirius",
                type : "direct",
                provider : "icecast",
                mimeType : 17,
                chapters : undefined,
                subscribe : false,
                responseHTML:'<div class="gauche"><span class="clear"></span><a href="#" class="chaine sirius"></a><div class="presentement">&nbsp;</div></div></div><div class="droite"><span class="clear"></span><div class="presentement"><div class="infos">&nbsp;</div></div></div><span class="clear"></span>'
            },
			'extatiqueObject':{ //Objet Sirius radio
                Id : 36093,
                file : "SP_H264_500p_SRC03@15653",
                title : "extatique",
                streamer : "rtmp://cp66435.live.edgefcs.net/live/",
                type : "direct",
                provider : "rtmp",
                chapters : undefined,
                mimeType : 18,
                subscribe : true,
                responseHTML:'<div class="gauche"><span class="clear"></span><a href="#" class="chaine sirius" style="display:none;"></a><div class="presentement">&nbsp;</div></div></div><div class="droite" style="display:none;"><span class="clear"></span><div class="presentement"><div class="infos">Extatique</div></div></div><span class="clear"></span>'
            },
			'defaultObject': {
			
			
			},
			//========================================================== ** NEW **
            // Remplace la cible des liens de l'élément en paramàtre selon le mode (async ou non)
            //==========================================================
            'adjustTarget':function(element){
                //Si nous sommes en mode asynchrone, ajuster la cible des liens et demander au serveur de retourner la version allégée des pages.
                //Liens externes
                $('a[rel~=externe]', element).each(function (i) {
                    this.target = '_blank';
                });
                if (bap.async) {
                    $('a', element).not('[href*=#],[href*=javascript:],[href*=async],[rel*=externe],[target*=_blank]').each(function (i) {
                        this.href = (this.href.indexOf('?') > -1) ? this.href + '&async=1' : this.href + '?async=1';
                        this.target = 'async';
                    });
                }
            },
			//========================================================== ** NEW **
            // Load le stream par défaut dans le player
            //==========================================================
			'loadDefault':function(firstTime, play, forceLoad, sectionClick){
					this.resetAllMedia();
					this.currentMimeType =this.defaultObject.mimeType;
					this.showLoading(sectionClick);
				if(firstTime){
					this.setMain(this.defaultObject.type,firstTime);
					this.setSecondary(this.loaded,false);
					bap.nav.loadLecteur();
				}else{
					this.setMain("direct",firstTime);
					this.setSecondary('#play_'+this.defaultObject.Id+'_0',false);
				}
				
				//bap.nav.loadFile('#play_'+bap.nav.defaultObject.Id+'_0',forceLoad,play);
			},
			//========================================================== ** NEW **
            // Instanciation du lecteur
            //==========================================================
			'loadLecteur':function(){
				$('div#player1').bapplayer({
					'flashplayer': bap.staticURL + 'swf/player.swf',
					'id': 'player1'
				
				});
				bap.lecteurLoaded = true;
				$('#lecteur').css({opacity:0});
			},

			//========================================================== ** NEW **
            // Instanciation par défaut des elements de la navigation
            //==========================================================
			'init':function(){
				bap.nav.resetAllMedia();
				bap.nav.setLoaded("#play_"+bap.nav.defaultObject.Id+'_0');
				bap.nav.setMain(bap.nav.defaultObject.type,false);
				bap.nav.setSecondary(bap.nav.loaded,false);
				bap.nav.togglePlayerDisplay();
				//bap.renderMode.current.secondary = bap.nav.loaded;
			},
			// MAIN
			//========================================================== ** NEW **
            // Gestion des onglets main
            //==========================================================
            'setMain': function (id,firstime) {
				//remove current highlight on main
				(firstime)?'':$('#'+bap.nav.main).toggleClass('o');	
				//gestion du direct
				if(bap.nav.main.match(/(direct|special)/)){
					$('#special').removeClass('o');
					$('#direct').removeClass('o');
				}
				//toggle current sousmenu 
				//toggle new sousmenu
				$('#'+bap.nav.main+'_sous').slideToggle('300'
														,function(){
															//highlight
															bap.nav.highlightMain();
															$('#'+bap.nav.main+'_sous').slideToggle('300').toggleClass('o current');
														})
											.toggleClass('o current');
				bap.nav.main =id;
			},
			//==========================================================** NEW **
            // Mise en surbrillance du menu actif
            //==========================================================
            'highlightMain': function () {
				//set highlight on current
				$('#'+bap.nav.main).toggleClass('o');	
				if(bap.nav.main.match(/(direct|special)/)){
				$('#special').removeClass('o').addClass('o');
					$('#direct').removeClass('o').addClass('o');
				}
			},
			//========================================================== ** NEW **
            // Reset tous les éléements media sauf la nav
            //==========================================================
			'resetAllMedia':function(){
				bap.chart.reset();
				bap.chapters.reset();
				bap.media.reset();
			},
			//==========================================================** NEW **
            //Clic sur les onglets de navigation principaux (menu - musique en continu - radio en direct - votre sélection - spécial)
            //==========================================================
            'mainClick': function (e) {
				var href = this.href.match(/#(play)_(\d+)(_(\d+))?/);
				//fermeture du menu sur le click des autres onglets ou media
				bap.menu.close();
				if (this.id != bap.nav.main && href && !(this.id == 'special' && bap.nav.main == 'direct') &&  !(this.id == 'direct' && bap.nav.main == 'special')) {
					bap.renderMode.seeking = false;
					bap.nav.showLoading('main');
					var secId= this.href.replace(/[^#]+#/, '#');
					bap.nav.setMain(this.id,false);
					(this.id != "liste")? bap.nav.resetAllMedia():'';

					//Sélectionne le premier sous-menu par défaut
					secId =  ($('#'+this.id+'_sous a').length > 0) ? $('#'+this.id+'_sous a').attr('href').replace(/[^#]+#/, '#') : secId;
					bap.nav.setSecondary(secId,false);

					if (this.id.match(/(continu|direct|special)/)) { 
						bap.nav.loadFile(secId,false,false);
					}else{
						 bap.nav.togglePlayerDisplay();
					}
				}
				return false;
			},

			// SECONDARY
			//========================================================== ** NEW **
            // Gestion des onglets sousmenu
            //==========================================================
            'setSecondary': function (id,cursor) {
				//reset all higlight and cursor
				this.resetSecondary();
				this.secondary =id;
				//highlight
				this.highlightSecondary(cursor);
			},
			//========================================================== ** NEW **
            // Reset les items de menu secondaire 
            //==========================================================
			'resetSecondary': function () {
                $('.soussection').removeClass('o current').children('a').removeClass('o').children('.bouton').hide(); //Témoin de lecture (triangle) des liens des barres de navigation secondaire
			},
			//========================================================== ** NEW **
            // Met en surbrillance le menu secondaire
            //==========================================================
            'highlightSecondary': function (cursor) {
				if(cursor)
					$('.soussection a[href='+this.secondary+']').removeClass('o').addClass('o').children('.bouton').show();
				else
					$('.soussection a[href='+this.secondary+']').removeClass('o').addClass('o');
			},
			//========================================================== ** NEW **
            // Recherche d'un Id dans la liste des sous-menus ou du main
            //==========================================================
            'searchStations': function (main, id) {
				if ($('#'+main+'_sous a[href='+id+']').length >0 || $('#'+main+'[href='+id+']').length > 0) //existe dans les sous-menus ou menu principal
					return true;
				else 
					return false;
			},
			
			//==========================================================** NEW **
            //Clic sur les onglets de navigation secondaire
            //==========================================================
            'secondaryClick': function (e) {
				//fermeture du menu sur le click des autres onglets ou media
				bap.menu.close();
				var id = this.href.replace(/[^#]+#/, '#');
				if (id != bap.nav.secondary ||  bap.error.activated ) {
					bap.renderMode.seeking = false;
					bap.nav.showLoading('media');
					//Set la var secondary
					bap.nav.setSecondary(id,false);
					bap.nav.loadFile(id,false,false);
				 }
				return false;
			},

			//========================================================== ** NEW **
            // Assignation du bap.nav.loaded
            //==========================================================
            'setLoaded': function (id) {
				bap.nav.loaded =id;
				//set le lien sur l'onglet "votre sélection"
				//(bap.nav.main.match(/(direct|continu|special)/))? $('#liste').attr('href','#') : $('#liste').attr('href',bap.nav.loaded);
			},
	
			//==========================================================** NEW **
            // Affichage de triangle et la surbrillance des sousmenus radio en continu
            //==========================================================
			'stateListener':function(){
				if(bap.nav.state =="PLAYING"){
					this.highlightSecondary(true);
					//google tracking
					station = (bap.nav.main.match(/(direct|special)/))? 'sirius' : $('.soussection a[href='+bap.nav.loaded+']').attr('id');
					(window.trackStation)? trackStation(bap.nav.main + ' / ' + station): '';
				}else{
					//reset les curseurs
					$('.soussection a[href='+this.secondary+']').children('.bouton').hide();
				}
			},
            //==========================================================
            //Clic sur les onglets de navigation
            //Clic sur les stations de musique en continu et de radio en direct.
            //Clic sur les liens dont l'attribut href contient un "#play_...".
            //==========================================================
           'loadFile': function (fileId,forceLoad, play) {
			   //Cancel ongoing request
				try{
					 bap.nav.request.abort();
				}catch(e){}
				var fileID = fileId.match(/#(play)_(\d+)(_(\d+))?/);
                 if (fileID && fileID[0] != bap.nav.loaded || bap.isCurrentObjectAndExtatique(fileID[0]) || forceLoad) {
					 var postData = {};
					  postData.fileId = fileID[2];
				
                          bap.nav.request = $.ajax({
									url: '/legacy/getfile/',
									type: 'POST',
									data: JSON.stringify(postData),
									cache: false,
									contentType: 'application/json',
									dataType: 'json',
									timeout: 5000,
                                success: function(data) {
                                 
                                   // if datajson.status === '200') {
                                        var file = data.file; //Récupérer l'objet FileEntity retourné.
                                        var url = file.URL.match(/^(.+\/)([^\/]+)$/); //Séparer le nom du fichier du reste de l'URL
                               
                                        //Construction de l'objet de base à envoyer au lecteur.
                                        //Par défaut, on part du principe que nous avons un stream RTMP sans chapitres, pas exclusif.
                                        var obj = {
                                            Id: fileID[2],
                                            file: url[2],
											debug: 'none',
                                            duration: file.Duration,
                                            provider: 'rtmp',
                                            autostart: true,
                                            streamer: url[1],
                                            mimeType:'',
                                            description: file.Description,
                                            title: file.ContentTitle,
                                            link: file.ContentURL,
                                            ImgURL: (file.ContentImg == null) ? bap.staticURL + 'img/spacer.gif' : file.ContentImg.replace(/(-70\.jpg|-300\.jpg|-300c\.jpg|\.jpg)/, '-300c.jpg'),
                                            section: file.ContentPath,
                                            artist: file.Artist,
                                            artistlink: file.ArtistURL,
                                            item: 0,
                                          //  chapters: undefined,
                                            responseHTML: data.responseHTML,
                                          //  exclusive:(file.Exclusive == null)?false:file.Exclusive
                                        };

                                        //S'il y a des chapitres, les ajouter à l'objet
                                    /*    if (file.Chapters.length > 0) {
                                           obj.chapters = file.Chapters;
                                           if (fileID[4]) {
                                               obj.item = fileID[4];
                                           }
                                        }*/
                                        //S'il ne s'agit pas d'un flux RTMP, enlever le streamer et utiliser l'URL complète vers le fichier
                                        if (file.URL.match(/^http:\/\//)) {
                                            obj.file = file.URL;
                                            obj.streamer = '';
                                        }
                                        //Ajustement du provider selon le type de fichier
                                        switch (file.MimeTypeId) {
                                            case bap.mimeTypes.AudioMpeg:
                                            case bap.mimeTypes.AudioM4a:
                                            case bap.mimeTypes.AudioXm4a:
                                                if (file.URL.match(/^http:\/\//)) { obj.provider = 'sound'; }
                                                break;
                                            case bap.mimeTypes.VideoFlv:
                                            case bap.mimeTypes.VideoXflv:
                                            case bap.mimeTypes.VideoM4v:
                                            case bap.mimeTypes.VideoXm4v:
                                                if (file.URL.match(/^http:\/\//)) { obj.provider = 'video'; }
                                                break;
                                            case bap.mimeTypes.VideoYoutube:
                                                obj.provider = 'youtube';
                                                break;
                                            case bap.mimeTypes.AudioStream:
                                                obj.provider = 'icecast';
                                                obj.file += '?_=' + String(Math.random()).replace('.', '');
                                                obj.image = bap.staticURL + 'img/spacer.gif';
                                                break;
                                            case bap.mimeTypes.VideoStream:
                                                file.URL.match(/^rtmp:\/\/.+live\.edgefcs\.net/) ? obj.subscribe = true : obj.subscribe = false;
                                                break;
                                        }
										obj.mimeType =file.MimeTypeId;
										bap.nav.currentMimeType = obj.mimeType;
										//GESTION DES TRACKS
										 //S'il y a des tracks, les ajouter à l'objet et y intégrer les propriétés 'file,provider,streamer'
									/*	if (file.Tracks.length > 0) {
											obj.tracks = file.Tracks;
											for(var i=0;i < obj.tracks.length;i++){
												//Ajustement du provider et streamer selon le fichier parent
												obj.tracks[i].streamer = obj.streamer;
												obj.tracks[i].provider = obj.provider;
												obj.tracks[i].responseHTML =obj.tracks[i].responseHTML.replace("/piste/", "/extatique/");
												obj.tracks[i].responseHTML =obj.tracks[i].responseHTML.replace("em_piste", "em_extatique");
												
												var fID = [];
												var type = obj.tracks[i].AudioMimeTypeId;
												if(type ==  null){
													type = obj.tracks[i].VideoMimeTypeId;
												}
												switch (type) {
													case bap.mimeTypes.AudioMpeg:
													case bap.mimeTypes.AudioM4a:
													case bap.mimeTypes.AudioXm4a:
														fID = obj.tracks[i].AudioPath.split("\\");
														obj.tracks[i].file = fID[fID.length-1];
														break;
													case bap.mimeTypes.AudioStream:
														obj.tracks[i].provider = 'icecast';
														obj.tracks[i].image = bap.staticURL + 'img/spacer.gif';
														break;
													case bap.mimeTypes.VideoFlv:
													case bap.mimeTypes.VideoXflv:
													case bap.mimeTypes.VideoM4v:
													case bap.mimeTypes.VideoXm4v:
														if (obj.tracks[i].file.URL.match(/^http:\/\//)) { obj.tracks[i].provider = 'video'; }
														break;
													case bap.mimeTypes.VideoYoutube:
														obj.tracks[i].provider = 'youtube';
														break;
													 case bap.mimeTypes.VideoStream:
														file.URL.match(/^rtmp:\/\/.+live\.edgefcs\.net/) ? obj.tracks[i].subscribe = true : obj.tracks[i].subscribe = false;
														break;
												}
												//gestion du exclusive
												obj.tracks[i].mimeType =type;
												obj.tracks[i].exclusive = obj.exclusive;
											}
										}*/
										var loaded = bap.nav.loaded.match(/#(play)_(\d+)(_(\d+))?/);

                                        //Chargement du chapitre dans le lecteur
                                        if (loaded) {
                                            //fichier déjà chargé dans le lecteur
										   if(bap.renderMode.seeking){
												$.seekTo(obj,'player1');
                                            } else {
											   //Chargement un nouveau fichier
                                               $.bapplayer('player1').load(obj);
											   $('#bodyTag').scrollTo(0,200);
                                            }
                                        } else {
											if(!bap.lecteurLoaded) //si le lecteur n'est pas instancié
												bap.nav.loadLecteur();
                                            //Chargement du fichier dans le lecteur
                                            $.bapplayer('player1').load(obj);
											$('#bodyTag').scrollTo(0,200);
                                        }
										//ajustement du loaded selon le fichier avec tracks ou non (related) 
									/*	if ( obj.tracks != null){
											//set var id 
											if(obj.tracks[0].AudioURL != null)
												bap.widgets.related.id = obj.tracks[0].AudioURL;
											else
												bap.widgets.related.id = obj.tracks[0].VideoURL;
											bap.nav.setLoaded(bap.widgets.related.id);
										}else{
											if(obj.exclusive){ //pour le media avec chapitres et exclusive
													bap.widgets.related.id =fileID[0]
											}
											bap.widgets.related.playing = obj.exclusive;*/
											bap.nav.setLoaded(fileID[0]);
											
									//	}
										
										//google tracking
									/*	if(window.trackExclusive){
											(obj.exclusive)? trackExclusive(obj.title + '[' + obj.Id+']'):'';
										}
										//Scroll si pas object par défaut
										if(obj.Id != bap.nav.defaultObject.Id){
											$('#bodyTag').scrollTo(0,200);
										}*/
                                   // }
                                },
								complete: function (req, state) {
									if(state == 'error'){
										bap.error.activated = true;
										message= bap.error.message.replace('%1',fileID[0]).replace('%2',bap.nav.main);
										top = Math.ceil(($('#telechargement').height() /2 ) -20);
										$('.'+bap.error.cls).empty().html(message).css({'margin-top':top}).show();
										//stop la lecture courante
										(bap.lecteurLoaded)? $.forceState('player1',false):'';

									}else{
										//Gestion du play/pause
										var autoplay = false;
										//Gestion de l'autoplay
										if((bap.nav.main.match(/(direct|special)/) &&  bap.widgets.autoplay.activated) || (!bap.nav.main.match(/(direct|continu)/)) || play ){
											autoplay = true;
										}
										$.forceState('player1',autoplay);
										bap.nav.togglePlayerDisplay();
										bap.error.activated = false;
										
									}
									bap.renderMode.seeking = false;
									bap.nav.request = null;
                                }
                            });
						//Fichier déjà téléchargé
						//Toggle play/pause 
					}else if( fileID && fileID[0] == bap.nav.loaded ){

						//exception lors de la déactivation du live et le retour de sirius ( si à pause chez le client) force stop
						if(bap.widgets.mode.currentDisplay == bap.displayMode.Normal || (bap.widgets.mode.currentDisplay != bap.displayMode.Normal && bap.nav.main != 'continu'))
							$.togglePlay('player1'); //sinon play/pause
						
					}
			},
            //==========================================================
            //Clic sur un media
            //==========================================================
            'mediaClick': function (e) {
				//fermeture du menu sur le click des autres onglets ou media
				bap.menu.close();
				var fileID = this.href.match(/#(play)_(\d+)(_(\d+))?/);
				
				if (fileID[0] != bap.nav.secondary  || bap.error.activated) {
					//valide si click sur un chapitre
					bap.renderMode.seeking = false;
					if(bap.nav.loaded != ''){
						bap.renderMode.seeking =(bap.nav.loaded.match(/#(play)_(\d+)(_(\d+))?/)[2] == fileID[2])? true:false;
					}
					bap.nav.showLoading('media');
					bap.nav.resetAllMedia();
					bap.nav.setMain('liste',false);
					bap.nav.setSecondary(fileID[0],true);
				 }
				bap.nav.loadFile(fileID[0],false,true);
				return false;
			},
			
			//==========================================================
            // Affichage de la classe loading
            //==========================================================
            'showLoading': function (sectionClick) {
				$('.'+bap.error.cls).hide();
				if(!bap.renderMode.seeking){
					$('#telechargement').css({'height': $('#lecteur').height()}).stop(true,true).fadeIn(50,function(){
						$('.bapplayer_btmcontainer').stop(true,true).hide();
						$('.bapplayer_topcontainer').stop(true,true).hide();
					});
				}
			},
			//==========================================================
            // Animation des transitions du lecteur
            //==========================================================
            'togglePlayerDisplay': function () {
				var dim;
				//valide si en mode "live" ET chargement du defaultObject
				if(bap.isCurrentObjectAndExtatique()){
						switch(bap.widgets.mode.currentDisplay){
								case bap.displayMode.Snapshot:
								case bap.displayMode.Pochette:
									dim =bap.renderMode.extatique_live_snapshot;
									break;
								case bap.displayMode.Video:
									dim =bap.renderMode.extatique_live_video;
									break;
						}
				}else{//procédure régulière selon le mimetype
					
					$('#lecteur').css({opacity:1});
						switch(bap.nav.currentMimeType){
							case bap.mimeTypes.AudioStream:
									dim =bap.renderMode.radio;
								break;
							case bap.mimeTypes.VideoStream:
									dim = bap.renderMode.stream;
								break;
							case bap.mimeTypes.AudioMpeg:
							case bap.mimeTypes.AudioM4a:
							case bap.mimeTypes.AudioXm4a:
									dim =bap.renderMode.audio;
								break;
							default:
								//dim =bap.renderMode.audio;
								dim =bap.renderMode.video;
						}
				}
                if(!bap.renderMode.seeking){
                    clearTimeout(bap.nav.timer);
                    bap.nav.timer = setTimeout(function(){
                        $('#telechargement').stop(true,true).animate(dim.main,300);
                        $('#lecteur').stop(true,true).animate(
                            dim.main,
                            300,
                            function(){
                                $('.bapplayer_viewer').css(dim.player);
                                $('.bapplayer_playerwrapper').css(dim.wrap);
                                $('#player1').attr(dim.player).css(dim.player);
                                $('.bapplayer_topcontainer').stop(true,true).show();
                                $('.bapplayer_btmcontainer').stop(true,true).show();
                                $('#telechargement').stop(true,true).fadeOut(200);
                            }
                        );
                        bap.widgets.resume();
                    },100);
                }
            },
            //Assignation du defaultObject selon le displayMode
		'setDefaultObject' : function(){
			switch(bap.widgets.mode.currentDisplay){
				case bap.displayMode.Normal:
				case bap.displayMode.Pochette:
				case bap.displayMode.Snapshot:
						bap.nav.loadLecteur();
						bap.nav.defaultObject =bap.nav.siriusObject;
					break;
				case bap.displayMode.Video:
						bap.nav.defaultObject =bap.nav.extatiqueObject;
					break;

			}
			//ajustement du renderMode
			//bap.renderMode.current.secondary = '#play_'+bap.nav.defaultObject.Id+'_0';
			//ajustement des liens du menu special et sirius
		//	$('a#special').attr('href','#play_'+bap.nav.defaultObject.Id+'_0');
		//	$('a#direct').attr('href','#play_'+bap.nav.defaultObject.Id+'_0');

		}
        }
		//¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
        // OBJET MENU . Regroupe les propriétés et les méthodes relatives au menu
        //______________________________________________________________________________
        this.menu = {
			'container':$('#bap_menu'),
			'timer':[],
			'rendered': false, //submenus rendered
			'duration': 300,
			'top': 300,
			'init': function(){
				$(this.container).hide();
				$('.sousmenu').hide();
				$('#menu').bind('click',function(){
									bap.menu.top = $('#container_soussection').height() + $('#container_soussection').offset().top;
									$(bap.menu.container).css('top',bap.menu.top);
									$(bap.menu.container).slideToggle(bap.menu.duration,function(){
																				$('#menu').toggleClass('o');
																				if(!bap.menu.rendered){
																						bap.menu.renderSubmenus();
																						bap.menu.rendered = true;
																				}
																			});
										return false;
									});
				$(this.container).mouseleave(bap.menu.close);
				//création des tabs arvhive/courant du "tab émissions" 
				this.createArchiveTab('#tab_emissions');
			},
			//fermeture du menu 
			'close':function(){
				if(!bap.menu.container.is(':animated') &&  bap.menu.container.is(':visible')){
					$('#menu').removeClass('o');
					bap.menu.container.css('top',bap.menu.top );
					bap.menu.container.hide('slide',{direction:'up'},bap.menu.duration,function(){//$('#lecteur').addClass('overflow')
					});
				}
			},
			//==========================================================
            // Construction des tabs archive/courant pour un tab en particulier
			// doit respecter la structure ul>li
			// doit avoir 2 div "section_container"
            //==========================================================
			'createArchiveTab':function(selector){
				var $items = $(selector +'>ul>li');
				$items.bind('click',function() {
					$items.removeClass('selected');
					$(this).addClass('selected');
					var index = $items.index($(this));
					$(selector +'>div.section_container').hide().eq(index).show();
					return false;
					
				}).eq(0).addClass('selected');
				$('#tab_emissions>div.section_container').eq(0).show();
				$('#tab_emissions>div.section_container').eq(1).hide();

			},
			'renderSubmenus':function(){
				$('#bap_menu .tab').each(function (j) {
						var name = $(this).attr('id');
						//get 2nd line item 
						var rowY= -1;
						var rows= 0;
						var index= 0;
						var cls ='';
						$(this).children('div.section_container').each(function (k) {
									cls = 'ligne_'+k+'_'+name;
									$(this).children('div').each(function (i) {
											index = i;
											//first assignment
											if(i == 0){
												rowY =$(this).offset().top;
												rows++;
											}
											//create temp item
											if($(this).parent().parent().children('.temp').length ==0){
													$(this).parent().parent().append('<div class="temp"></div>');

											}
											if(rowY != $(this).offset().top){  //new row
												//remove the div sousmenu if any, and put it into temp
												//clone temp to index, remove class temp, add new classes
												$(this).parent().children().eq(i).before($(this).parent().parent().children('.temp').clone().removeClass('temp').addClass('ui-corner-all sousmenu_container '+cls+rows));
												//empty temp
												$(this).parent().parent().children('.temp').empty();
												rowY =$(this).offset().top;
												rows++;
											}
											if($(this).children('.sousmenu').length){
													$(this).children('a').addClass(cls+rows).hover(bap.menu.menuOverHandler,bap.menu.menuOutHandler);
													$(this).children('.sousmenu').clone().appendTo($(this).parent().parent().children('.temp')).addClass('ui-corner-all');
													$(this).children('.sousmenu').remove();
											}
										});
										//var ind =( k == 1)? index : index+1;
										//valide si le souemnu est vide
										if($(this).parent().children('.temp').children().length >0){
											$(this).children('div').eq(index).after($(this).parent().children('.temp').clone().removeClass('temp').addClass('ui-corner-all sousmenu_container '+cls+rows));
										}
										$(this).parent().children('.temp').remove();
								});
				})
			},
			'menuOverHandler':function(e){
				if (e.type == 'mouseover' || e.type == 'mouseenter') {
						var id = $(this).parent().attr('id').replace('menu_','');
						var ligne = $(this).attr('class').replace('menuitem ','');
						var sm_container = $('.sousmenu_container.'+ligne);
						clearTimeout(bap.menu.timer[ligne]);
						if ( sm_container.children().is(':visible')){
							var current = sm_container.children(':visible');
							sm_container.css('height',current.height());
						}
						sm_container.stop(true,true);
						sm_container.children().stop(true,true).hide();
						sm_container.animate({'height':$('#sousmenu_'+ id).innerHeight()},bap.menu.duration,function(){
																								$('#sousmenu_'+ id).show();
																								sm_container.css('height','');
																								});
						$('#sousmenu_'+ id).hover(bap.menu.sousmenuOverHandler,bap.menu.sousmenuOutHandler);
				}
			},
			'menuOutHandler':function(e){
				if (e.type == 'mouseout' || e.type == 'mouseleave') {
					var id = $(this).parent().attr('id').replace('menu_','');
					var ligne = $(this).attr('class').replace('menuitem ','');
					var sm_container = $('.sousmenu_container.'+ligne);
					bap.menu.timer[ligne] = setTimeout(function(){
										$('#sousmenu_'+ id).die();
										sm_container.stop(true,true).animate({'height':0},bap.menu.duration,function(){
																						$('#sousmenu_'+ id).hide();
																						});
					},200);
				}
			},
			'sousmenuOverHandler':function(e){
				if (e.type == 'mouseover' || e.type == 'mouseenter') {
					var ligne = $(this).parent().attr('class').replace('ui-corner-all sousmenu_container ','');
					var sm_container = $('.sousmenu_container.'+ligne);
					clearTimeout(bap.menu.timer[ligne]);
					$(this).show();
				}
			},
			'sousmenuOutHandler':function(e){
				if (e.type == 'mouseout' || e.type == 'mouseleave') {
					var me = $(this);
					var ligne = $(this).parent().attr('class').replace('ui-corner-all sousmenu_container ','');
					var sm_container = $('.sousmenu_container.'+ligne);
					clearTimeout(bap.menu.timer[ligne]);
					sm_container.stop(true,true).animate({'height':0},bap.menu.duration, function(){
																me.hide();
														});
				}
			}

		}
		//¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
        // OBJET WIDGETS GAllERY. Regroupe les propriétés et les méthodes relatives à la gallery
        //______________________________________________________________________________
        this.widgets = {
			/*Resume the current state of widgets*/
			resume:function(){
				if(bap.isCurrentObjectAndExtatique()){
					//gallery
					if (this.gallery.rendered){
						this.gallery.toggleVisibility(this.gallery.visible);
					}
					//on
					if (this.on.rendered){
						this.on.toggleVisibility(this.on.visible);
					}
				}
				bap.adjustPlayerDisplay();
			},
			autoplay:{
					activated:false,
					
					/*	Set le valeur du autoplay
					*	Relait l'événement à la fonction dispatch
					*/
					setStatus:function(play){
						if(play){
							if(!this.activated){
								this.dispatch(true);
							}
						}else{
							if(this.activated){
								this.dispatch(false);
							}
						}
					},
					/*	Set la variable activated.
					*	Force la lecture du fichier si 
					*/	
					dispatch:function(autoplay){
						if(!bap.nav.state.match(/(PLAYING|BUFFERING|PAUSED)/) && (bap.nav.main.match(/(direct|special)/)) && !this.activated){
							$.forceState('player1',autoplay);
						}
						this.activated = autoplay;
					}
			},
			mode:{
					currentDisplay: 0,
					previousDiplay: 0,
					//Set les variable relatives au menu "spécial", synthonise sirius
					setStatus:function(mode){
						//Reassignement of vars
						this.previousDisplay = this.currentDisplay;
						this.currentDisplay = mode;
					
						bap.nav.setDefaultObject();

						//remove previous widgets
						//bap.widgets.gallery.remove();
						var mustLoad= true;
						if(this.currentDisplay !=  bap.displayMode.Normal){
							//deactivate gallery
							(this.previousDisplay == bap.displayMode.Snapshot)? bap.widgets.gallery.toggleVisibility(false) : '';
//							//remove teaser
//							this.toggleTeaser(false);
							//si rien en lecture ou sur radio
							mustLoad= (!bap.nav.state.match(/(PLAYING|BUFFERING)/) || (bap.nav.main.match(/(direct|special)/)));
							//si changement de mimetype 
							mustLoad = (((this.previousDisplay == bap.displayMode.Video && this.currentDisplay != bap.displayMode.Video) || (this.previousDisplay != bap.displayMode.Video && this.currentDisplay == bap.displayMode.Video)) || this.previousDisplay == 0);
							//valide si direct en cours de lecteur ou visonnement 
							if(mustLoad){
								bap.nav.loadDefault(false,bap.widgets.autoplay.activated,true,'live');
							}
							//valide le premier appel au changement
							if(this.previousDisplay == bap.displayMode.Normal && this.previousDisplay != this.currentDisplay){
								$('#special').fadeIn('slow',function(){
														if(mustLoad){
															bap.widgets.mode.dispatchDisplay();
														}
								});
							}else{
								this.dispatchDisplay();
							}
						}else{
							
							//remove on 
							bap.widgets.on.remove();
							//remove gallery
							bap.widgets.gallery.remove();
							bap.widgets.related.remove();

//							//add teaser
//							this.toggleTeaser(true);
							//resume l'affichage normal
							if(this.previousDisplay != 0 && this.previousDisplay != this.currentDisplay){
								$('#special').fadeOut('slow',function(){
									$('#special').removeClass('o');
										if(bap.nav.state.match(/(PLAYING|BUFFERING|IDLE)/) && (bap.nav.main.match(/(direct|special)/))){
											bap.nav.loadDefault(false,bap.widgets.autoplay.activated,true,'live'); 
										 }
									});
							}
	
						}
					},
					/*	Redirection var les fonctions diaply selon le type
					*	Fonction séparée pour pouvoir etre utilisée comme callback
					*/
					dispatchDisplay:function(){
						if(bap.nav.state.match(/(PLAYING|BUFFERING|IDLE)/) && (bap.nav.main.match(/(direct|special)/))){
							switch(bap.widgets.mode.currentDisplay){
								case  bap.displayMode.Pochette:
										bap.widgets.gallery.toggleVisibility(false);
										//gérér par le player étant dans le viewer
										(this.previousDisplay == bap.displayMode.Video)? '': bap.adjustPlayerDisplay();
									break;
								case  bap.displayMode.Snapshot:
									
									bap.widgets.gallery.toggleVisibility(true);
									bap.adjustPlayerDisplay();
									break;
							}
							bap.widgets.on.toggleVisibility(true);
						}
					},
					//désactive le menu "spécial",
					deactivate:function(){
						if(bap.widgets.mode.currentDisplay == bap.displayMode.Video || bap.widgets.mode.currentDisplay == bap.displayMode.Pochette || bap.widgets.mode.currentDisplay == bap.displayMode.Snapshot){
							$('#special').fadeOut('slow',function(){
									$('#special').removeClass('o');
										if(bap.nav.state.match(/(PLAYING)/) &&(bap.nav.main == 'direct' || bap.nav.main == 'special') ){
											$.forceState('player1',false);
										 }
									});
							bap.widgets.mode.currentDisplay = bap.displayMode.Normal;
							bap.nav.setDefaultObject();
						}
					}//,
//					/* Gestion de la visibilité du teaser*/
//					toggleTeaser:function(show){
//						if(show){
//							$('#teaser').fadeIn('200');
//						}else{
//							$('#teaser').fadeOut('200');
//						}
//					}
					
			},
			on:{
				rendered:false,
				visible:false,
				showing:null,
				timer:null,
				banners:{
					onNext:{
							'id'		:	'onNext',
							'visible'	:	false,
							'html'		:	'Allo next',
							'duration'	:	3000
							},
					onNow:{
							'id'		:	'onNow',
							'visible'	:	false,
							'html'		:	'Allo now',
							'duration'	:	8000
						}
				},
				// Création des container dans le player
				render:function(){
					if(!this.rendered){
						$.fn.bapplayerView.embedContainerOn();
						this.rendered = true;
					}
					
				},
				toggleVisibility:function(show){
					if(show && !this.rendered)
						this.render();
					this.visible = show;
					(this.visible)?$.fn.bapplayerView.showContainerOn():$.fn.bapplayerView.hideContainerOn();
					this.activateRotation();
				},
				// Set la variable du bandeau 
				activateBanner:function(banner,show){
					if(!this.visible)
						this.toggleVisibility(true);
					if(this.banners[banner].visible != show){
						this.banners[banner].visible = show;	
						this.activateRotation();
					}
				},
				loadText:function(type, jsonObject){
					this.banners[type].html = jsonObject.html.Value;
					this.banners[type].duration = jsonObject.duration  * 1000;
					$('#'+this.banners[type].id).html(this.banners[type].html);
					bap.nav.adjustTarget($('#'+this.banners[type].id));
					this.activateRotation();
				},
				setText:function(){
					if(this.banners['onNext'].html != $('#'+this.banners['onNext'].id).html()){
						$('#'+this.banners['onNext'].id).html(this.banners['onNext'].html);
					bap.nav.adjustTarget($('#'+this.banners['onNext'].id));
					}
					if(this.banners['onNow'].html != $('#'+this.banners['onNow'].id).html()){
						$('#'+this.banners['onNow'].id).html(this.banners['onNow'].html);
						bap.nav.adjustTarget($('#'+this.banners['onNow'].id));
					}
				},
				activateRotation: function () {
					this.setText();
					if(this.rendered){
						clearTimeout(this.timer);
						//validation de plus qu'un bandeau rendred
						if(this.banners['onNow'].visible && this.banners['onNext'].visible){
							this.showing =this.banners['onNow'].id;
							$('#'+this.showing).fadeIn(300,function(){
											bap.widgets.on.timer  =setTimeout(function(){bap.widgets.on.bannerRotate();},bap.widgets.on.banners['onNow'].duration);
										});
						}else if(this.banners['onNow'].visible || this.banners['onNext'].visible){
							if(this.banners['onNow'].visible){
									$('#'+this.banners['onNow'].id).show();
									$('#'+this.banners['onNext'].id).hide();
							}
							if(this.banners['onNext'].visible){
									$('#'+this.banners['onNext'].id).show();
									$('#'+this.banners['onNow'].id).hide();
							}
						}else{
							$('.bandeau').hide();
						}
					}
				},
				bannerRotate: function(){
					var me = this;
					clearTimeout(me.timer);
					$('#'+me.showing).fadeOut(300, function(){
									me.showing = (me.showing == 'onNow')?'onNext':'onNow';
									$('#'+me.showing).fadeIn(300,function(){
										me.timer  =setTimeout(function(){me.bannerRotate();},me.banners[me.showing].duration);
									});
						});
				},
				// Delete completely the widget
				remove:function(){
					$.fn.bapplayerView.removeContainerOn();
					this.banners['onNext'].visible = false;
					this.banners['onNow'].visible = false;
					this.rendered = false;
					this.visible = false;
				}
			},
			gallery:{
					rendered:false,
					visible:false,
					snapshots:[],
					render:function(){
						if(!this.rendered)
							$('#myGallery').bapgallery();
						this.rendered = true;
					},
					toggleVisibility:function(show){
						if(show && !this.rendered)
							this.render();
						this.visible =show;
						$('#myGallery').toggleVisibilityGallery(this.visible);
						
					},
					remove:function(){
						//coder to remove here
						if(this.rendered){
							$('#myGallery').removeGallery();
							this.rendered = false;
							this.visible = false;
						}
					},
					addImage:function(img){
						if(this.rendered){
							$('#myGallery').addImage(img);
						}
					},
					addImageToArray:function(arr){
						$('#myGallery').preloadImages(arr);
					}
			},
			related:{
					id:0,
					rendered:false,
					visible:false,
					txt:'',
					restricted:false,
					playing:false,
					render:function(){
						if(!this.rendered)
							$('#related').bapRelated();
						this.rendered = true;
					},
					toggleVisibility:function(show){
						if(show && !this.rendered)
							this.render();
						this.visible =show;
						if(!this.visible){
							this.manageRestriction();
						}
						$('#related').toggleVisibilityRelated(this.visible);
					},
					manageRestriction:function(){
							if(this.playing && this.restricted){
								bap.nav.loadDefault(false,bap.widgets.autoplay.activated,true,'live');
								switch(bap.widgets.mode.currentDisplay){
									case  bap.displayMode.Video:
											bap.widgets.mode.displayVideo();
										break;
									case  bap.displayMode.Pochette:
											//gérér par le viewer du player
										bap.widgets.gallery.toggleVisibility(false);
										break;
									case  bap.displayMode.Snapshot:
										bap.widgets.gallery.toggleVisibility(true);
										break;
									case  bap.displayMode.Normal:
										
										break;
								}
								bap.widgets.on.toggleVisibility(bap.widgets.on.visible);
							}
		
					},
					remove:function(){
						$('#related').bapRelated_remove();
						this.rendered = false;
						this.visible= false;
					},
					loadText:function(text,restricted,id){
						this.id = id;
						this.restricted = restricted;
						this.txt = text;
						$('#related').bapRelated_loadText(this.txt);
					}
			},
			comments:{
						rendered:false,
						visible:false,
						render	:function(){
							if(!this.rendered){
									$('#comments').bapComments();
								}
							this.rendered = true;
						},
						toggleVisibility:function(show){
							if(show && !this.rendered)
							this.render();
						
							this.visible =show;
							$('#comments').toggleVisibilityComments(this.visible);

						},
						remove:function(){
							$('#comments').bapComments_remove();
						},
						addComments:function(comments){
							if(this.rendered){
								$('#comments').addComments(comments);
							}
						}
					}
		}
        //¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
        // OBJET FEATURE. Regroupe les propriétés et les méthodes relatives aux
        // blocs vedettes principaux, aux blocs vedettes secondaires et aux bandeaux.
        //______________________________________________________________________________
        this.feature = {
            'columns': 2, //Le nombre de colonnes pour les blocs secondaires.
            'fade': true, //Détermine si un effet de fondu-enchaîné doit être appliqué lors du hover pour les blocs vedettes principaux et secondaires.
            'fadeDuration': 400, //Détermine la durée de l'effet de fondu enchaîné en millisecondes.
            'hideDelay': 100, //Détermine la durée du délai avant l'appel de la fonction "hide" lors du mouseout en millisecondes.
            'timer': null, //Variable de contrôle des overs des blocs vedette
            'rotateFade': true, //Détermine si un effet de fondu-enchaîné doit être appliqué lors de la rotation des bandeaux.
            'rotateFadeDuration': 500, //Détermine la durée de l'effet de fondu enchaîné pour les bandeaux en millisecondes.
            'rotateSpeed': 5000, //Détermine la vitesse de rotation des bandeux en millisecondes.
            'rotateTimer': null, //Variable de contrôle pour la rotation des bandeaux.
            //==========================================================
            //Mouseover du bloc vedette principal dans son état normal et son état "off".
            //Mouseout du bloc vedette principal dans son état "over" (sert à retarder la réinitialisation du bloc vedette principal).
            //Mouseover des blocs vedettes secondaires et des bandeaux.
            //Mouseout des blocs vedettes secondaires et des bandeaux (sert à retarder la réinitialisation des blocs vedettes secondaires).
            //==========================================================
            'hover': function (e) {
                var parent = $(this).closest('div'); //Bloc parent.
                //Bloc vedette principal
                if (parent.attr('id').match(/^vedette/)) {
                    if (e.type == 'mouseover' || e.type == 'mouseenter') {
                        clearTimeout(bap.feature.timer); //Annuler tout appel décalé à une fonction
                        if (bap.feature.fade) { $('.v2over1,.v3over1').stop(true, true); } //Stopper les animations en cours
                        $('#vedette_off').hide(); //Cacher l'état "off"
                        $('.v2over1,.v3over1').hide(); //Réinitialiser les blocs vedettes secondaires
                        bap.feature.fade ? $('#vedette_over').fadeIn(bap.feature.fadeDuration) : $('#vedette_over').show(); //Afficher l'état "over"
                    } else if (e.type == 'mouseout' || e.type == 'mouseleave') {
                         bap.feature.timer = setTimeout('bap.feature.hide(\'\')', bap.feature.hideDelay);
                    }
                //Blocs vedettes secondaires et bandeux
                } else {
                    if (e.type == 'mouseover' || e.type == 'mouseenter') {
                        clearTimeout(bap.feature.timer); //Annuler tout appel décalé à une fonction
                        if (bap.feature.fade) { $('.v2over1,.v3over1').stop(true, true); } //Stopper les animations en cours
                        $('#vedette_over').hide(); //Cacher l'état "over" du bloc vedette principal
                        $('.v2over1, .v3over1').not('#'+this.id+'_o').hide(); //Réinitialiser les états actifs des blocs vedettes secondaires (excluant le bloc en cours)
                        if ($('#vedette').length > 0) { //Afficher l'état ombragé du bloc vedette principal
                            if (bap.feature.fade) {
                                $('#vedette_off').fadeIn(bap.feature.fadeDuration);
                            } else {
                                $('#vedette_off').show();
                            }
                        }
                        bap.feature.fade ? $('#'+this.id+'_o').fadeIn(bap.feature.fadeDuration) : $('#'+this.id+'_o').show(); //Afficher l'état actif
                    } else if (e.type == 'mouseout' || e.type == 'mouseleave') {
                         bap.feature.timer = setTimeout('bap.feature.hide(\'' + this.id + '\')', bap.feature.hideDelay);
                    }
                }
            },
            //==========================================================
            //Réinitialisation du bloc vedette principal à son état normal.
            //Réinitialisation des blocs vedettes secondaires et des bandeaux à leur état normal.
            //==========================================================
            'hide': function (id) {
                //Bloc vedette principal
                if (id == '') {
                    bap.feature.fade ? $('#vedette_over').fadeOut(bap.feature.fadeDuration) : $('#vedette_over').hide();
                //Blocs vedettes secondaires et bandeaux
                } else {
                    $('.v2over1, .v3over1').not('#'+id).hide();
                    if (bap.feature.fade) {
                        $('#'+id).fadeOut(bap.feature.fadeDuration);
                        $('#vedette_off').fadeOut(bap.feature.fadeDuration);
                    } else {
                        $('#'+id).hide();
                        $('#vedette_off').hide();
                    }
                }
            },
            //==========================================================
            //Lorsqu'il y a plusieurs bandeaux, afficher ces derniers en boucle à la manière d'un carrousel.
            //==========================================================
            'rotate': function () {
                clearTimeout(bap.feature.rotateTimer); //Annuler l'intervalle de rotation
                var m = false, current = false, next = false, items = 0;
                //Déterminer le nombre total de bandeaux de même que le bandeau qui est affiché présentement.
                $('#vedette3 li').each(function (i) {
                    if ($(this).css('display') != 'none') {
                        m = this.id.match(/(v3_(\d+))_li/);
                    }
                    items++;
                });
                //Déterminer le prochain bandeau à afficher. Revenir au début si c'est le dernier bandeau qui est affiché.
                if (m) {
                    current = m[1];
                    if (m[2] < (items-1)) {
                        var n = new Number(m[2]);
                        next = 'v3_' + (n+1);
                    } else {
                        next = 'v3_0';
                    }
                }
                //Affichage du prochain bandeau
                if (current && next && current != next) {
                    if (bap.feature.rotateFade) {
                        //Si le bandeau présentement affiché est à son état actif
                        if ($('#'+current + '_o').css('display') != 'none') {
                            $('#'+current + '_li').hide(); //Cacher les deux états du bandeau présentement affiché
                            $('#'+current + '_o').fadeOut(bap.feature.rotateFadeDuration);
                            $('#'+next + '_o').fadeIn(bap.feature.rotateFadeDuration); //Afficher les deux états du prochain bandeau
                            $('#'+next + '_li').show();
                        } else {
                            $('#'+current + '_li').fadeOut(bap.feature.rotateFadeDuration);
                            $('#'+next + '_li').fadeIn(bap.feature.rotateFadeDuration);
                        }
                    } else {
                        $('#'+current + '_li').hide();
                        $('#'+next + '_li').show();
                        //Si le bandeau présentement affiché est à son état actif
                        if ($('#'+current + '_o').css('display') != 'none') {
                            $('#'+current + '_o').hide();
                            $('#'+next + '_o').show();
                        }
                    }
                }
                bap.feature.rotateTimer = window.setTimeout('bap.feature.rotate()', bap.feature.rotateSpeed);
            }
        }
		
        //¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
        // OBJET SLIDESHOW. Regroupe les propriétés et les méthodes relatives au slideshow
        // des images d'entrée de contenu
        //______________________________________________________________________________
        this.slideshow = {
			'HOVER_SCALE':2.0,
			'PROXIMITY': 75.0,
			'dock': null,
			'holder': null,
			'total': 0,
			'buffer':{	
				'top':(40 + 70 + 16),//titre height +  navigation height + slideshow padding
				'left': 56
			},
			'current': 0,
            'processing': false,//flag pour le fadein fadeout des vignettes
			/**
			 * Détection de la présence des balises du slideshow dans la page 
			 * Ajout du lien au slideshow à la balise image 
			 */
			'init':function(){
				//suppression de l'ancien dialog(.bapss) si présent
				if($('.bapss').length > 0){
					$('.slideshow').dialog('destroy').remove();
				}
				//création du dialog si la class slideshow est présente
				if($('.slideshow').length > 0){
					$('.slideshow').dialog({
										autoOpen: false,
										modal: true,
										resizable: false,
										draggable: false,
										zIndex: 1200,
										show: 'fade',
										hide: 'fade',
										dialogClass:'bapss',
										height:'auto',
										width:'auto'
									});
					//bind bouton fermer
					$(".slideshow .fermer").bind('click', function() { 
																$('.slideshow').dialog("close"); 
																return false; });
					//set variables
					bap.slideshow.total = $('#navigation_ss ul').children('li').size();
					bap.slideshow.holder= $('#imgHolder');

					//ajout des événements aux controles
					bap.slideshow.controlsHandler();

					//Centrer le dialog au défilement de la page
					$(window).scroll(function () {
							bap.slideshow.resize();
						  
					});
					$(window).resize(function () {
							bap.slideshow.resize();
							
					});
					// Ajout du bouton "Slideshow" aux vignettes
					$('#vignettes .fond').after('<img src="' + bap.staticURL + 'img/slideshow.png" id="slideshow_disp_0" alt="Démarrer le diaporama" title="Démarrer le diaporama"/>');
					
					//Ajout de l'événement "click" (ouverture du slideshow) à l'image vignette et à l'icone
				//	$("img[id*=vignettes_disp_]").css({'cursor':'pointer'});
					$("img[id*=vignettes_disp_], #slideshow_disp_0").hover(function(){
																$("#slideshow_disp_0").css({'opacity':'1','filter':'Alpha(Opacity=100)'});
															},
															function(){
																$("#slideshow_disp_0").css({'opacity':'.5','filter':'Alpha(Opacity=50)'});
															})
															.live('click', bap.slideshow.open);
				}
			},
			'controlsHandler':function(){
				$.each($('.controls'),function(){
						var me = $(this);
						var parent = $(this).parent();
						var id = me.attr('id');
						var index = bap.slideshow.current;
						//hover event
						switch(id){
							case "next":
								if(bap.slideshow.current < bap.slideshow.total-1){
									parent.css({'cursor':'pointer'});
									//add hover
									parent.show().hover(
											function(e){
														me.stop(true,true).fadeIn('fast');
													},
											function(e){
														me.stop(true,true).fadeOut('fast');
													}
										);
									//add click
									me.unbind().bind('click',function(e){
																index++;
																bap.slideshow.controlsClickHandler(index);
															});
								}else{
									parent.hide().unbind().css({'cursor':'default'});
									me.hide().unbind();
								}
								break;
							case "prev":
								if(bap.slideshow.current >= 1){
									parent.css({'cursor':'pointer'});
									//add hover
									parent.show().hover(
											function(e){
														me.stop(true,true).fadeIn('fast');
													},
											function(e){
														me.stop(true,true).fadeOut('fast');
													}
										);
									//add click
									me.unbind().bind('click',function(e){
																index--;
																bap.slideshow.controlsClickHandler(index);
															});
								}else{
									parent.hide().unbind().css({'cursor':'default'});
									me.hide().unbind();
								}
								break;
						}
						
				});
			},
			'deactivateControlsHandler':function(){
					$.each($('.controls'),function(){
						var me = $(this);
						var parent = $(this).parent();
						parent.hide().unbind().css({'cursor':'default'});
						me.hide().unbind();
					})

			},
			/**
			 * Événement "click" sur les thumbnails pour afficher l'image agrandie
			 */
			'clickHandler':function(e){
							$('.icon_enlarge li a').unbind('click');
							var index = parseInt(e.currentTarget.id.replace(/^ss_/, ''));
							bap.slideshow.current = index;
							//load new enlarged image
							bap.slideshow.loadImage(true);
							return false;
							
			},
			/**
			 * Événement "click" sur les thumbnails pour afficher l'image agrandie
			 */
			'controlsClickHandler':function(index){
							bap.slideshow.current = index;
							//load new enlarged image
							bap.slideshow.loadImage(true);
							return false;
			},
			 /**
			 * Calculate the height of an icon based upon its position from the mouse
			 * @param icon
			 * @param mouse position (x only)
			 * @return new width/height
			 */
			 'calculateDockIconSize':function(icon, mousePosX) {
				 //get the distance in x from the mouse to the icon
				 var initWidth = parseInt($(icon).data("initWidth"));
				 var initHeight = parseInt($(icon).data("initHeight"));
				 var newWidth = parseInt($(icon).data("newWidth"));
				 var newHeight = parseInt($(icon).data("newHeight"));
				 var xProximity = Math.abs(mousePosX - $(icon).offset().left - (newWidth/2.0));
				 //if we need to vary the height because the mouse is within range
				 if (xProximity< bap.slideshow.PROXIMITY) {
					 //get the percentage height the icon needs to be
					 var newRatio = (( bap.slideshow.PROXIMITY-xProximity)/ bap.slideshow.PROXIMITY);
					 var additionalWidth = newRatio * (newWidth-initWidth);
					 var additionalHeight = newRatio * (newHeight-initHeight);
					 //add on the additional percentage to the icon
					 return [(initWidth + additionalWidth), (initHeight + additionalHeight)];
				 } else {
					 //otherwise, return the original icon size
					 return [initWidth, initHeight];
				 }
			 },
		
			 'loadImage':function(callback){
				 $('.ui-widget-overlay').css({'width':'100%','height':'100%'});
				 try{
					var image = new Image();
					var newSrc = ($('#ss_'+bap.slideshow.current + ' img').attr('src')).replace('-70.jpg','-slideshow.jpg');
					var destHeight = $('.ui-widget-overlay').height();
					var destWidth = $('.ui-widget-overlay').width();
					//deactivate prev next
					this.deactivateControlsHandler();
					$(image).load(function(){
											var to = {
														width: image.width+bap.slideshow.buffer.left,
														height: image.height +bap.slideshow.buffer.top ,
														top: Math.floor((destHeight -(image.height +bap.slideshow.buffer.top) ) / 2 ),
														left: Math.floor((destWidth -(image.width + bap.slideshow.buffer.left))/ 2 )
													};
											var imgHolder = {
														width: image.width,
														height: image.height 
													};
											$('.slideshow').dialog('widget').data('to',to);
											bap.slideshow.holder.data('info',imgHolder).addClass('telechargement_ss');
											$('#imgHolder img').fadeOut(300,
																		function(){
																					if(!callback){
																						$('#imgHolder img').remove();
																						bap.slideshow.holder.css(bap.slideshow.holder.data('info')).prepend($(image)).animate({'opacity':1},300);
																						bap.slideshow.resize();
																						bap.slideshow.holder.removeClass('telechargement_ss');
																						$('.icon_enlarge li a').unbind('click').bind('click',bap.slideshow.clickHandler);
																					}else{
																						bap.slideshow.holder.animate(bap.slideshow.holder.data('info'),300);	
																						$('.slideshow').dialog('widget').animate(
																											$('.slideshow').dialog('widget').data('to'),
																											300,
																												function(){
																													$('#imgHolder img').remove();
																													bap.slideshow.holder.prepend($(image)).animate({'opacity':1},300);
																													bap.slideshow.resize();
																													$('#imgHolder').removeClass('telechargement_ss');
																													$('.icon_enlarge li a').unbind('click').bind('click',bap.slideshow.clickHandler);
																													}
																											);
																					}
																				}
																		);
										}).attr('src',newSrc)
										 .fadeIn('200');
					bap.slideshow.setCurrent();
					
				 }catch(e){}
			 },
			'setCurrent':function(){
				$('.icon_enlarge li a').removeClass('current');
				$('.icon_enlarge li a#ss_'+bap.slideshow.current).addClass('current');
			 },
			'resize':function(){
				$('.slideshow').dialog("option","position","center");
				$('#previousSide, #nextSide, #prev, #next').css({'width':bap.slideshow.holder.innerWidth()/2,'height':bap.slideshow.holder.height(),'left':'0'});
				$('#nextSide').css({'left': ($('#imgHolder').innerWidth()/2)});
				$(".slideshow").dialog( "option", "position", $( ".slideshow" ).dialog( "option", "position" ) );
				bap.slideshow.controlsHandler();
			 },
			'open':function(){
				$('#imgHolder img').css({'opacity':0});
				$('.slideshow').dialog('open');
				bap.slideshow.current = parseInt($("img[id*=vignettes_disp_]").attr('id').replace(/^(vignettes_disp_|slideshow_disp_)/, ''));
				var dock_icons;
				$(".icon_enlarge").each(function(i) {
					 //private variables
					 bap.slideshow.dock = $(this);
					 dock_icons = bap.slideshow.dock.find("li a");
					 //store the to and from sizes 
					 $.each(dock_icons, function() {
						 $(this).attr('href','#');
						 var initHeight = parseInt($(this).height());
						 var initWidth = parseInt($(this).width());
						 $(this).data("initWidth", initWidth);
						 $(this).data("initHeight", initHeight);
						 $(this).data("newWidth", initWidth * bap.slideshow.HOVER_SCALE);
						 $(this).data("newHeight", initHeight * bap.slideshow.HOVER_SCALE);
						});
					 });
					 $('.icon_enlarge li a').bind('click',bap.slideshow.clickHandler);
					 //event handlers
					 bap.slideshow.dock.bind("mouseleave",function(event) {
						 $.each(dock_icons, function() {
							 $(this).animate({"height": $(this).data("initHeight") + "px", "width": $(this).data("initWidth") + "px"},"fast");
						 });
					 });
					 bap.slideshow.dock.bind("mousemove", function(event) {
						 $.each(dock_icons, function() {
							 var newSize = bap.slideshow.calculateDockIconSize($(this), event.pageX);
							 $(this).stop();
							 $(this).width(newSize[0]);
							 $(this).height(newSize[1]);
						 });
					 });
					//REMPLACEMENT DES HREF SLIDESHOW
					$('#navigation_ss ul li a[href=#]').attr('href', 'javascript:void(0);');
					bap.slideshow.loadImage(false);
				return false;
			}
		}
        //¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
        // OBJET INTERACTIONS. Regroupe les propriétés et les méthodes relatives aux
        // interactions dans le site (commentaires, partage, écrivez-nous, vote dans
        // le palmarès, notes dans les critiques).
        //______________________________________________________________________________
        this.interactions = {
            'defaultCommentText': 'ÉCRIVEZ VOTRE COMMENTAIRE',
            'defaultSendingText': 'Votre commentaire a été envoyé et sera affiché dans quelques instants.',
            //==========================================================
            //Génère un code captcha. Comporte deux modes de fonctionnement. Mode texte ('txt') et mode image ('img').
            //En mode texte, le paramètre "element" doit être un sélecteur jQuery correspondant à un champ caché dont la valeur sera affectée du code retourné.
            //En mode image, le paramètre "element" doit être un sélecteur jQuery correspondant à une image dont la source sera actualisée afin d'afficher un nouveau code.
            //Accepte un 3e paramètre optionnel "callback", valide seulement pour le mode texte, qui sert à définir une fonction à appeler une fois le code de sécurité généré.
            //==========================================================
            'captcha': function (element, mode) {
                //Mode texte.
                if (mode == 'txt') {
                    //Paramètre optionnel "callback"
                    var callback = (arguments.length == 3 && typeof(arguments[2]) == 'function') ? arguments[2] : false;
                    //Générer un code de sécurité
                    $.ajax({
                        url: bap.baseURL + '/api/captcha/txt',
                        type: 'GET',
                        cache: false,
                        dataType: 'text',
                        timeout: 10000,
                        success: function(data) {
                            if (data.match(/^([a-f0-9]{6})$/)) {
                                $(element).val(data);
                                //Appeler la fonction soumise dans le paramètre "callback" s'il y a lieu.
                                if (typeof(callback) == 'function') {
                                    callback();
                                }
                            }
                        },
						error: function (xnr, status, error) {
						}
                    });
                //Mode image.
                } else {
                    $(element).attr('src', bap.baseURL + '/api/captcha/img?r=' + String(Math.random()).replace('.', ''));
                }
                return false;
            },
            //==========================================================
            //Réinitialisation de l'affichage des onglets du formulaire des interactions.
            //==========================================================
            'reset': function () {
                $('#int_onglets a').each(function (i) {
                    var m = this.id.match(/^lnk(\w+)$/);
                    if (m) {
                        $('#int_'+m[1]).hide();
                        this.className = '';
                    }
                });
                $('small[id*=_ERROR_]').hide();
                $('#int_erreur').hide();
            },
            //==========================================================
            //Affichage de la fenêtre des interactions.
            //Changement d'onglet dans la fenêtre des interactions.
            //==========================================================
            'show': function () {
                bap.interactions.reset();
                $('#int_main').show();
                $('#int_succes').hide();
                $('#int_erreur').hide();
                var current = this.rel.match(/^int_/) ? this.rel.replace(/^int_/, '') : this.id.replace(/^lnk/, '');
                var tab = $('#lnk' + current);
                $('#int_current').val(current);
                $('#int_' + current).show();
                tab.addClass('o');
                //Ouverture de la fenêtre s'il y a lieu.
                if (this.rel.match(/^int_/)) {
                    bap.interactions.captcha('#captcha', 'img');
                    $('#interactions').dialog('open');
                }
                return false;
            },
            //==========================================================
            //Noter une critique
            //==========================================================
            'rate': function () {
                bap.interactions.captcha('#hidCodeSecurite', 'txt', function () {
                    //Si nous sommes dans une entrée de contenu, soumettre la note.
                    var m = $('#contentId').val().match(/^(\d+)$/);
                    if (m) {
                        //Définir les données à soumettre
                        var postData = {
                            'ContentID': m[1],
                            'CodeSecurite': $('#hidCodeSecurite').val(),
                            'Methode': 'Noter',
                            'NoteSurDix': $('#noteSurDix').val()
                        }
                        //Envoi de la requête
                        $.ajax({
                            url: bap.baseURL + 'Proxy.ashx?r='+String(Math.random()).replace('.', ''),
                            data: JSON.stringify(postData),
                            type: 'POST',
                            cache: false,
                            contentType: 'application/json',
                            dataType: 'json',
                            timeout: 10000,
                            success: function(data) {
                                var json = data.d;
                                if (json.status === '200') {
                                   $('#appreciation').html('<br /><br />' + json.statusText);
                                    var cookie = $.cookie('critiques');
                                    if (!cookie || typeof(cookie) !== 'object') { cookie = {}; }
                                    cookie[postData.ContentID] = postData.ContentID;
                                    $.setCookie('critiques', cookie, {expires:365});
                                } else {
                                    alert('La note soumise est invalide. Veuillez la corriger et réessayer à nouveau.');
                                }
                            },
                            error: function (xnr, status, error) {
                                if (status == 'timeout') {
                                    alert('Le serveur met trop de temps à répondre. Veuillez réessayer dans quelques instants.');
                                } else {
                                    alert('Nous sommes dans l\'impossibilité de traiter votre demande. Veuillez réessayer dans quelques instants.');
                                }
                            }
                        });
                    }
                });
            },
            //==========================================================
            //Soumission du formulaire des interactions
            //==========================================================
            'submit': function () {
                //Préfixe des champs devant être retranché des paramètres envoyés au service Web
                var m2 = false;
                try { m2 = $('#int_' + $('#int_current').val() + ' input:eq(1)').attr('id').match(/^(txt(Commenter|Partager|Ecrire))(.+)$/); } catch (exc) {}
                if (m2) {
                    var postData = {};
                    postData.ContentID = $('#contentId').val();
                    postData.CodeSecurite = $('#txtCodeSecurite').val();
                    postData.Methode = $('#int_current').val();
                    //Récupération des valeurs du formulaire
                    var input = $('#int_' + $('#int_current').val() + ' input');
                    for (var i = 0; i < input.length; i++) {
                        if (input[i].id != 'permalien') {
                            postData[input[i].id.replace(m2[1], '')] = input[i].value;
                        }
                    }
                    input = $('#int_' + $('#int_current').val() + ' textarea');
                    for (var i = 0; i < input.length; i++) {
                        postData[input[i].id.replace(m2[1], '')] = input[i].value;
                    }
                    //Envoi de la requête
                    $.ajax({
                        url: bap.baseURL + 'Proxy.ashx?r='+String(Math.random()).replace('.', ''),
                        data: JSON.stringify(postData),
                        type: 'POST',
                        cache: false,
                        contentType: 'application/json',
                        dataType: 'json',
                        timeout: 10000,
                        beforeSend: function() {
                            $('#int_erreur').html('&nbsp;');
                            //$('#int_erreur').html('Traitement en cours...');
                            //$('#int_erreur').fadeIn(bap.feature.fadeDuration);
                        },
                        success: function(data) {
                            var json = data.d;
                            $('#interactions small').each(function (i) {
                                this.style.display = 'none';
                            });
                            for (var i = 0; i < json.errors.length; i++) {
                                $('#' + json.errors[i]).fadeIn();
                            }
                            if (json.status === '200') {
                                $('#int_succes').html(json.statusText);
                                $('#int_succes').fadeIn();
                                $('#int_main').hide();
                                $('#int_erreur').hide();
                                $('#int_' + $('#int_current').val() + ' input').each(function (i) {
                                    if (this.id != 'permalien') {
                                        this.value = '';
                                    }
                                });
                                $('#int_' + $('#int_current').val() + ' textarea').each(function (i) {
                                    this.value = '';
                                });
                                $('#txtCodeSecurite').val('');
                                bap.interactions.captcha('#captcha', 'img');
                            } else {
                                $('#int_erreur').html(json.statusText);
                                $('#int_erreur').fadeIn();
                            }
                        },
                        error: function (xnr, status, error) {
                            if (status == 'timeout') {
                                $('small[id*=_ERROR_]').hide();
                                $('#int_erreur').html('Le serveur met trop de temps à répondre. Veuillez réessayer dans quelques instants.');
                                $('#int_erreur').fadeIn();
                            } else {
                                $('small[id*=_ERROR_]').hide();
                                $('#int_erreur').html('Nous sommes dans l\'impossibilité de traiter votre demande. Veuillez réessayer dans quelques instants.');
                                $('#int_erreur').fadeIn();
                            }
                        }
                    });
                }
                return false;
            }
        }

        //¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
        // OBJET CHART. Regroupe les propriétés et les méthodes relatives au palmarès.
        //______________________________________________________________________________
        this.chart = {
            //==========================================================
            //Réinitialisation des positions du palmarès.
            //Réinitialisation du bouton "Écoutez l'émission".
            //==========================================================
            'reset': function () {
               //Liens sur les positions
               $('#palmares_liens a').removeClass('pause_o pause play_o o').addClass('play_o');
               $('span[id*=pb_]').removeClass('pause_o pause play_o o').addClass('');
                //Bouton "Écoutez l'émission"
                $('#pv_0,#pe_0,#pa_0').removeClass('pause_o pause play_o o').addClass('play_o');
            },
            //==========================================================
            // Affichage du bouton play/pause 
            //==========================================================
            'stateListener':function(clsToRemove,clsToAdd){
                bap.chart.reset();

                clsToRemove = (clsToRemove =='')?'play play_o pause pause_o' :clsToRemove;
                //provient du pageInit
                if(clsToAdd ==''){
                    clsToAdd = (bap.nav.state.match(/(PLAYING)/))?'pause' :'play';
                }
                //reset all
                var id = bap.nav.loaded.replace('#play_','');
                if(bap.nav.state.match(/(PLAYING|PAUSED)/)){
                    $('#palmares_liens a[href*='+id+']').addClass('o');	
                    $('#palmares_liens a[href*='+id+'] .bouton').show();
                    $('#palmares_liens a[href*='+id+'] .bouton').removeClass(clsToRemove).addClass(clsToAdd);
                }
            },

            //==========================================================
            // Vote
            //==========================================================
            'vote': function (obj) {
                if($.cookie('palmares') == null) {
                    bap.interactions.captcha('#hidCodeSecurite', 'txt', function () {
                        var fileId =$('#hidIdChapitre').val();
                        var postData = {
                            'Methode': 'Voter',
                            'ContentID': fileId,
                            'CodeSecurite': $('#hidCodeSecurite').val()
                        };
                        //Envoi de la requête
                        $.ajax({
                            url: bap.baseURL + 'Proxy.ashx?r='+String(Math.random()).replace('.', ''),
                            data: JSON.stringify(postData),
                            type: 'POST',
                            cache: false,
                            contentType: 'application/json',
                            dataType: 'json',
                            timeout: 20000,
                            success: function(data) {
                                var json = data.d;
                                if (json.status === '200') {
                                    $.setCookie('palmares', fileId, {expires:1});
                                    bap.chart.deactivateVote();
                                } else {
                                    alert('Une erreur s\'est produite avec le vote. Veuillez réessayer plus tard');
                                }
                            }
                        });
                    });
                }
                return false;
            },
            'deactivateVote':function(){
                if($.cookie('palmares') != null){
                    setTimeout(function(){
                        $('a[rel='+$.cookie('palmares')+']').addClass('star');
                        $('#votez').removeClass('votez4').addClass('merci');
                    }, 1000);
                }
            }
        }



        //¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
        // OBJET CHAPTERS. Regroupe les propriétés et les méthodes relatives aux chapitres.
        //______________________________________________________________________________
        this.chapters = {
            //==========================================================
            //Réinitialisation de la liste de chapitres.
            //Réinitialisation des boutons "Écoutez" et "Regardez".
            //==========================================================
            'reset': function () {
                //fond couleur
                $('#entreeChapitres a').not('#ouvrir, #fermer').removeClass('o').addClass('');
                //bouton play/pause
                $('#entreeChapitres a .bouton').not('#ouvrir, #fermer, .pagesuiv, .fermer2').removeClass('pause pause_o play_o o').addClass('play');
                //Boutons "Écoutez" et "Regardez" dans les entrées de contenu
                $('#cia_0, #civ_0').removeClass('pause3').addClass('play3');
            },
			//==========================================================** NEW **
            // Affichage du bouton play/pause play3/pause3 higlight element
            //==========================================================
			'stateListener':function(clsToRemove,clsToAdd,clsToRemoveBigBtn ,clsToAddBigBtn){
				bap.chapters.reset();
				clsToRemove = (clsToRemove =='')?'play play_o pause pause_o' :clsToRemove;
				clsToRemoveBigBtn = (clsToRemoveBigBtn =='')?'play3 pause3' :clsToRemoveBigBtn;
				//provient du pageInit
				if(clsToAdd ==''){
					clsToAdd = (bap.nav.state.match(/(PLAYING)/))?'pause' :'play';
					clsToAddBigBtn =(bap.nav.state.match(/(PLAYING)/))?'pause3' :'play3';
				}
				$('#entreeChapitres a[href='+bap.nav.loaded+']').not('.play3 pause3').not('#ouvrir, #fermer').removeClass('o').addClass("o");
				$('#entreeChapitres a[href='+bap.nav.loaded+'] span.bouton').not('#ouvrir, #fermer').removeClass(clsToRemove).addClass(clsToAdd);
				$('#cia_0[href*='+bap.nav.loaded+'], #civ_0[href*='+bap.nav.loaded+']').removeClass(clsToRemoveBigBtn).addClass(clsToAddBigBtn);
			},
			
            //==========================================================
            //Développer ou réduire la liste de chapitres
            //==========================================================
            'toggle': function (e) {
				var h = $('#openHide').height(); 
                if ($('#openHide').is(':visible')) {
                    $('#openHide').animate({'height': '0px'},'fast',function(){
																		$(this).css({'height':''});
																		$(this).hide();
																		 $('#ouvrir').html('ouvrir la liste<small class="bouton pagesuiv"></small>');
																		});
                } else {
					 $('#openHide').css({'height':'0px'}).show().animate({'height': h},'fast',function(){
																				$(this).css({'height':''});
																				 $('#ouvrir').html('fermer la liste<small class="bouton fermer2"></small>');
																				});
                }
                return false;
            }
        }

        //¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
        // OBJET MEDIAS. Regroupe les propriétés et les méthodes relatives aux extraits
        //______________________________________________________________________________
        this.media = {
            //==========================================================
            //Réinitialisation des extraits
            //==========================================================
            'reset': function () {
                $('#extraits a, #concours a').removeClass('o');

                //Remix
                $('#concours .bouton,#qchc .bouton,#extraits .bouton').removeClass('pause_o').addClass('play_o');

            },
            //==========================================================** NEW **
            // Affichage du bouton play/pause et higlight element
            //==========================================================
            'stateListener':function(clsToRemove,clsToAdd){
                bap.media.reset();
                clsToRemove = (clsToRemove =='')?'play play_o pause pause_o' :clsToRemove;
                //provient du pageInit
                if(clsToAdd ==''){
                    clsToAdd = (bap.nav.state.match(/(PLAYING)/))?'pause' :'play';
                }
                //extraits hardcore 
                $('#extraits a[href*='+bap.nav.loaded+'],#concours a[href*='+bap.nav.loaded+']').removeClass('o').addClass("o");
                $('#extraits a[href*='+bap.nav.loaded+'] .bouton, #qchc a[href*='+bap.nav.loaded+'] .bouton,#concours a[href*='+bap.nav.loaded+'] .bouton').removeClass(clsToRemove).addClass(clsToAdd);
            }
            
        }
        //¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
        // OBJET COLLABORATORS. Regroupe les propriétés et les méthodes relatives aux collaborateurs
        //______________________________________________________________________________
        this.collaborators = {
  
            'twitInterval':null,
            //==========================================================
            // Set l'interval d'affichage des twits des collaborateurs
            //==========================================================
            'setIntervalTwits': function () {
                bap.collaborators.getUser();
                bap.collaborators.twitInterval = setInterval("bap.collaborators.loadTwits()",10000);
                bap.collaborators.loadTwits();
            },
            //==========================================================
            // Supprime l'interval d'affichage des twits des collaborateurs
            //==========================================================
            'removeIntervalTwits': function () {
                clearInterval( bap.collaborators.twitInterval);
            },

            //==========================================================
            // Retrouve les infromations de l'utilisateur Twitter
            //==========================================================
            'getUser': function () {
                 var screenName = $('#hfScreenName').get(0).value;
                var postData = {
                                Methode: 'GetUser',
                                ScreenName: screenName,
                                CodeSecurite: 'fCD95|0f3D6a2/$'
                            };
                            $.ajax({
                                url: bap.baseURL + 'ProxyTwitter.ashx?r='+String(Math.random()).replace('.', ''),
                                data: JSON.stringify(postData),
                                type: 'POST',
                                cache: false,
                                contentType: 'application/json',
                                dataType: 'json',
                                success: function(data) {
                                 if(data){  
                                    var user = data;
                                      $('#lnkTwitterUser').attr('href','http://www.twitter.com/'+user.screen_name+'/');
                                      $('#imgTwitterUser').attr('src',user.profile_image_url);
                                 }
                               }
                            });
                  
                 },
            //==========================================================
            // Retrouve la liste des twits du collaborateurs.
            //==========================================================
            'loadTwits': function () {
                var baseRetweet = "RT @";
                 var screenName = $('#hfScreenName').get(0).value;
                 if(screenName != ''){
                            var postData = {
                                Methode: 'GetTwits',
                                ScreenName: screenName,
                                CodeSecurite: 'fCD95|0f3D6a2/$'
                            };
                            $.ajax({
                                url: bap.baseURL + 'ProxyTwitter.ashx?r='+String(Math.random()).replace('.', ''),
                                data: JSON.stringify(postData),
                                type: 'POST',
                                cache: false,
                                contentType: 'application/json',
                                dataType: 'json',
                                success: function(data) {
                                    $('#twits').empty();
                                    var json = data;                              
                                            var now = new Date();                                        
                                            var tweets = data.results;
                                            var count = 3;
                                            count = (data.results.length < 3)?data.results.length:count;
                                            if(count > 0){
                                                for (var i = 0; i < 3; i++) {
                                                    var created = new Date(tweets[i].created_at);
                                                    var seconds = Math.ceil((now.getTime() - created.getTime()) / 1000);
                                                    var quand = 'Il y a ';
                                                    if (seconds == 1) {
                                                        quand += '1 seconde';
                                                    } else if (seconds < 60) {
                                                        quand += seconds + ' secondes';
                                                    } else if (seconds >= 60 && seconds < 120) {
                                                        quand += '1 minute';
                                                    } else if (seconds < 3600) {
                                                        quand += parseInt(seconds / 60) + ' minutes';
                                                    } else if (seconds >= 3600 && seconds < 7200) {
                                                        quand += '1 heure';
                                                    } else if (seconds >= 7200 && seconds < 86400) {
                                                        quand += parseInt(seconds / 3600) + ' heures';
                                                    } else if (seconds >= 86400 && seconds < 172800) {
                                                        quand += '1 jour';
                                                    } else {
                                                        quand += parseInt(seconds / 86400) + ' jours';
                                                    }
                                                    var retweet = "<a href='http://twitter.com/home?status=" + baseRetweet + tweets[i].from_user + ": " + tweets[i].text + "' target='_blank' title='Retweet'>Retweet</a>";
                                                    $('#twits').append("<li><p>" + bap.collaborators.replaceURLs(tweets[i].text) + "<br/><small>" + quand + "</small><br/></p><div class=\"retweet\"><span id=\"" + tweets[i].id + "\></span>" + retweet + "</div></span><span class='clear'></span></p></li>");
                                                    $('#gazouillis').show();
                                                }
                                            }else{
                                                    $('#gazouillis').hide();
                                            }
                                          
                               },
                                complete: function () {
                                }
                            });
                     }else{
                         $('#gazouillis').hide();
                            
                     }
                 },
                'replaceURLs': function (text){
                   var httpRegexp = /(.*)(http:\/\/(\S+))(\.*)/g;
                   var hashtagRegexp = /(.*)#(\S+)(.*)/g;
                   var userRegexp = /(.*)(@\S+)(.*)/g;
                   text = text.replace(httpRegexp, '$1<a href="$2" target="_blank">$2</a>$4');
                   text = text.replace(userRegexp, '$1<a href="http://twitter.com/$2" target="_blank">$2</a>$3');
                   text = text.replace(hashtagRegexp, '$1<a href="http://search.twitter.com/search?q=%23$2" target="_blank">#$2</a>$3');
                   return text;
                }
        }

        //¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
        // Initialisation de la page principale. En mode asynchrone, cette méthode
        // est appelée seulement lors du chargement initial du site. Les requêtes subséquentes
        // effectuées en mode asynchrone feront seulement appel à la méthode "bap.initPage()".
        //______________________________________________________________________________
        this.init = function () {
            if ($.browser.msie) { bap.feature.fade = false; } //Désactiver les effets de fondu enchaîné dans IE
            //==========================================================
            //MODE ASYNCHRONE
            //==========================================================
            if (bap.async) {
                var form = $('#form1');
                //Si ce n'est déjà fait, ajouter le paramètre demandant la version allégée du site dans l'action du formulaire
                if (form.attr('action').indexOf('async=1') == -1) {
                    var action = form.attr('action');
                    form.attr('action', (action.indexOf('?') > -1) ? action + '&async=1' : action + '?async=1');
                }
                form.attr('target', 'async'); //Détourner l'action du formulaire vers le iframe
            }
            //==========================================================
            //GÉNÉRATION D'UN IDENTIFIANT DE SESSION
            //==========================================================
            bap.initSession();
            bap.sessionTimer = window.setInterval('bap.initSession()', 5000);
            //==========================================================
            //CLIC DANS LE BLOC DE NAVIGATION
            //==========================================================
            //Onglets de navigation principale
            $('#sections a:not(#menu)').live('click', bap.nav.mainClick);
            //Onglets "votre sélection"
            $('#liste').live('click', bap.menu.close);
            //Onglets de navigation secondaire
            $('.soussection a, a[class=direct],a[class=continu]').live('click', bap.nav.secondaryClick);
            //Liens vers des fichiers médias
            $('a[href*=#play_],a[class=liste]').live('click', bap.nav.mediaClick);

            //slideshow
            $('.images a').live('click', bap.slideshow.open);
            //==========================================================
            //HOVER DES BLOCS VEDETTES PRINCIPAUX ET SECONDAIRES
            //==========================================================
            $('#vedette, #vedette_off, #vedette2 h2, #vedette3 h2').live('mouseover', bap.feature.hover);
            $('#vedette_over').live('mouseover', function (e) { clearTimeout(bap.feature.timer); });
            $('#vedette_over, .v2over1, .v3over1').live('mouseout', bap.feature.hover);
            $('.v2over1, .v3over1').live('mouseover', function(e) {
                clearTimeout(bap.feature.timer); //Annuler tout appel décalé à une fonction
                $('.v2over1, .v3over1').not('#'+this.id).hide(); //Réinitialiser les blocs vedettes secondaires (excluant le bloc en cours)
            });
            //==========================================================
            //HOVER DE L'IMAGE PRINCIPALE ET DU TITRE DE L'ÉTAT ACTIF
            //DES BLOCS VEDETTES PRINCIPAUX ET SECONDAIRES ET DES BANDEAUX
            //==========================================================
            $('.vover a.title, .v2over1 a.title, .v3over1 a.title, .vover a.image, .v2over1 a.image, .v3over1 a.image').live('hover', function (e) {
                var srcEl = $(this);
                var parent = srcEl.closest('div'); //Récupérer le bloc parent.
                var playBtn = $('.play, .play_o', parent); //Bouton play.
                var infoBtn = $('.info, .info_o', parent); //Bouton détails.
                var targetBtn = playBtn; //Bouton à mettre en surbrillance (play par défaut).
                var classToAdd = 'play_o', classToRemove = 'play'; //Classes css à ajouter et à enlever au bouton par défaut.
                //Si le bouton info est présent et que c'est le lien sur le titre qui a déclenché l'événement
                //ou que seulement le bouton info est présent, utiliser le bouton détails.
                if ((infoBtn.length > 0 && srcEl.attr('class') == 'title') || (playBtn.length == 0 && infoBtn.length > 0)) {
                    targetBtn = infoBtn;
                    classToAdd = 'info_o';
                    classToRemove = 'info';
                }
                //S'il s'agit d'un mouseout, intervertir les classes
                if (e.type == 'mouseout' || e.type == 'mouseleave') {
                    classToAdd = classToRemove;
                    classToRemove += '_o';
                }
                targetBtn.removeClass(classToRemove).addClass(classToAdd);
            });
            //=================================================
            //CHAMP DE RECHERCHE
            //=================================================
            $('#btnRecherche').live('click', function (e) {
                $('#form1').submit();
                return false;
            });
            //=================================================
            //LIENS "LIRE LA SUITE" ET "REVENIR AU RÉSUMÉ"
            //=================================================
            $('#liresuite, #revenirres, #qchc .suiv, #qchc .prec').live('click', function (e) {
				var id = this.id.match(/^(liresuite|revenirres)(_\d+)?$/);
				 if (id) {
                    //Lire la suite.
                    if (id[1] == 'liresuite') {
                        if (!id[2]) { //Bios d'artistes ouvrir ET fermer
							var h = $('#suitetexte').height();
							if ($('#suitetexte').is(':visible')) {
								 $('#suitetexte').animate({'height': '0px'},'fast',function(){
																		$(this).css({'height':''});
																		$(this).hide();
																			 $('#liresuite').removeClass('prec').addClass('suiv').html('lire la suite<small class="bouton pagesuiv"></small>');
																		});
							}else{
							
								$('#suitetexte').css({'height':'0px'}).show().animate({'height': h},'fast',function(){
																			$(this).css({'height':''});
																			 $('#liresuite').removeClass('suiv').addClass('prec').html('revenir au résumé<small class="bouton pageprec"></small>');
																			});
							}
                        } else { //Dossier sur le hardcore ouvrir
							h = $('#suite'+id[2]).height();
							//hide btn
							$('#liresuite'+id[2]).fadeOut('fast',function(){
									//show suite- height- 1px animate
									$('#suite'+id[2]).css({'height':'0px'}).show().animate({'height': h},'fast',function(){
																				$(this).css({'height':''});
																				 $('#revenirres'+id[2]).fadeIn('fast');
																				});
							});
                        }
                    //Revenir au résumé.
                    } else {
                        if (id[2]) { //Dossier sur le hardcore fermer
                           //Dossier sur le hardcore
							//show suite- height- 1px animate
							$('#suite'+id[2]).animate({'height': '0px'},'fast',function(){
																		$(this).hide();
																		$(this).css({'height':''});
																		$('#liresuite'+id[2]).fadeIn('fast');
																		});
                        }
                    }
                }
				 return false;
            });
            //=================================================
           //CLIC SUR LES VIGNETTES DANS LES ENTRÉES DE CONTENU
           //=================================================
           $('#vignettes img:not(:#slideshow_disp_0), .thumbs img').stop(true,true).live('click', function () {
				var me = $(this);
				var m = this.src.match(/^.+-70.jpg$/);
				var m2 = this.parentNode.id.match(/^thumbs_(\d+)$/);
				var oldImage;
				var image = new Image();
				var newSrc ='';
				var newId = '';
				var holder = null;

				
				//remove class
				$('#vignettes img, .thumbs img').removeClass('current');
				if (m && m2) {//Dossier sur le hardcore au Québec
					oldImage = $('#img_' + m2[1]);
					newSrc = this.src.replace('-70', '-230');
					holder = $('#img_' + m2[1]).parent().get(0);
					newId = 'img_' + m2[1];
				} else if (m) {//Entrées de contenu
					var index = this.id.match(/(thmb)_(\d+)(_(\d+))?/);
					oldImage =$('#vignette_holder img');
					newSrc = this.src.replace('-70', '-300');
					holder= $('#vignette_holder');
					newId ='vignettes_disp_'+ index[4];
				}
				if($(oldImage).is(':not(animated)') && $(image).is(':not(animated)') && !bap.slideshow.processing ){
					me.addClass('current');
					bap.slideshow.processing = true;
					$(image).load(function(){
										$(oldImage).fadeOut('fast',function(){
																				//$(oldImage).remove();
																				if (m && m2){
																					$(holder).children(':first-child').remove();
																					$(holder).prepend($(image));
																				}else{
																					$(holder).empty().prepend($(image));
																				}
																				
																				$(image).attr('id', newId);
																			});
										}
								).attr('src',newSrc).fadeIn('fast',function(){bap.slideshow.processing = false;
																			});
					me.addClass('current');
				}
				return false;
           });
            //=================================================
            //INTERACTIONS
            //=================================================
            //Fenêtre des interactions.
            $('#interactions').dialog({
                autoOpen: false,
                modal: true,
                resizable: false,
                draggable: false,
                zIndex: 1200,
                show: 'fade',
                hide: 'fade',
				dialogClass:'dialInteractions'
            });
            //Bouton de fermeture de la fenêtre des interactions.
            $('#interactions .fermer').click(function () {
                $('#interactions').dialog('close');
                return false;
            });
                       //Liens faisant appel à la fenêtre des interactions.
            //Onglets de la fenêtre des interactions.
            $('a[rel*=int_], #int_onglets a').live('click', bap.interactions.show);
            //Liens permettant d'actualiser le captcha
            $('a[rel~=captcha]').live('click', function () { return bap.interactions.captcha('#captcha', 'img') });
            //Clic sur le bouton de soumission du formulaire des interactions
            $('#interactions .soumettre').click(bap.interactions.submit);
            //Noter une critique
            $('#noter').live('click', bap.interactions.rate);
            //Voter dans le palmares
            if ($.cookie('palmares') == null) {
                $('#votez').live('click', bap.chart.vote);
            } else {
                bap.chart.deactivateVote();
            }
            //Liens "ouvrir la liste" des chapitres  
            $('#ouvrir').live('click', bap.chapters.toggle);

            //=================================================
            //CALENDRIER DES MUSIQUES DIFFUSÉES
            //=================================================
            $('#selectedDate').datepicker({
                maxDate: new Date(),
                changeMonth: true,
                changeYear: true,
                showOtherMonths: true,
                selectOtherMonths: true,
                showButtonPanel: true,
                onSelect: function(text, inst) {
                    var selectedDate = $('#selectedDate').datepicker('getDate'); //La date sélectionnée dans le calendrier
                    $('#dateRecherchee').html($.datepicker.formatDate('DD d MM yy', selectedDate)); //Affichage de la date sélectionnée dans son format texte.
                    $('#container_dateRecherchee').show();
                    $('#aff_date').show(); //Bouton pour afficher les musiques diffusées pour la date sélectionnée
                    var date = $.datepicker.formatDate('yy-mm-dd', selectedDate); //Date passée en paramètre dans l'URL
                    var station = $('#relies a.chaineCourante').attr('href').match(/^.+(\?|&)c=([^&]+).*$/); //Récupérer la station consultée
                    if (station) { //Ajustement des paramètres du lien "Afficher"
                        $('#aff_date').attr(
                            'href',
                            (bap.async) ? bap.baseURL + 'MusiquesDiffusees.aspx?async=1&c=' + station[2] + '&d=' + date : bap.baseURL + 'MusiquesDiffusees.aspx?c=' + station[2] + '&d=' + date
                        );
                    }
                }
            });
            //Bouton "Choisir une date"
            $('#choisir-date').live('click', function(e) {
                $('#selectedDate').datepicker('show');
                $('#ui-datepicker-div').offset($('#choisir-date').offset());
                return false;
            });
            //Bouton "Fermer" dans le bloc d'affichage du lecteur
            $('.bapplayer_topcontainer .fermer').live('click', function(e) {
				bap.nav.loadDefault(false,false,false,'main');
				//if(bap.widgets.gallery.hide){
					//bap.widgets.gallery.toggleVisibility(false);
				//}
                return false;
            });

//            //Bouton "Fermer3" dans le bloc galerie pour fermer le bandeau #teaser...
//            $('#teaser .fermer3').live('click', function(e) {
//                $('#teaser').hide();
//                return false;
//            });
          
           

			/*TEST NEW MENU*/
		//	bap.menu.init();
			/* assignement de la variable defaultObject */
			bap.nav.setDefaultObject();
			
			$('#lecteur').css({'height':'0px'});
        }

        //¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
        // Génération d'un identifiant de session
        //______________________________________________________________________________
        this.initSession = function () {
            if ($.cookie('BAP_SessionId') == null || ($.cookie('BAP_SessionId') != null && !$.cookie('BAP_SessionId').match(/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/i))) {
                $.ajax({
                    url: bap.baseURL + '/api/session',
                    type: 'GET',
                    cache: false,
                    contentType: 'text/plain',
                    timeout: 10000,
                    success: function(data) {
                        if (data != null && data.id && data.id.match(/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/i)) {
                            var exp = (data.expires && data.expires.match(/^\/Date\(\d+\)\/$/)) ? eval('new ' + data.expires.replace(/\//g, '')) : false;
                            var opt = (exp) ? { expires:exp } : {};
                            $.setCookie('BAP_SessionId', data.id, opt);
                        }
                    }
                });
            }
        }



        //¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
        // Initialisation partielle de la page. Lorsqu'une page est chargée en mode
        // aysnchrone, seulement cette méthode est appelée, évitant ainsi un appel
        // à la méthode "bap.init()".
        //______________________________________________________________________________
        this.initPage = function () {
            //=================================================
            //DÉTOURNEMENT/AJUSTEMENT DE CERTAINS LIENS
            //=================================================
            //Liens externes
            $('a[rel~=externe]').each(function (i) { this.target = '_blank'; });
            //Si nous sommes en mode asynchrone, ajuster la cible des liens et demander au serveur de retourner la version allégée des pages.
            if (bap.async) {
                $('a').not('[href*=#],[href*=async],[href*=javascript:],[rel*=externe],[target*=_blank]').each(function (i) {
                    this.href = (this.href.indexOf('?') > -1) ? this.href + '&async=1' : this.href + '?async=1';
                    this.target = 'async';
                });
            }
			//=================================================
            //INITIALISATION DU BLOC VEDETTE PRINCIPAL
            //=================================================
            if ($('#vedette').length > 0) {
                //Création de l'état en niveaux de gris (le curseur de la souris se trouve au-dessus d'un bloc vedette secondaire)
                $('<div>', {
                    'id': 'vedette_off',
                    'style': 'display: none; visibility: visible;',
                    'class': 'vover',
                    'html': $('#vedette').html().replace('.jpg', '-off.jpg')
                }).appendTo($('#vedettewrap'));
                //Création de l'état actif (le curseur se trouve au-dessus du bloc)
                $('<div>', {
                    'id': 'vedette_over',
                    'style': 'display: none; visibility: visible;',
                    'class': 'vover',
                    'html': $('#vedette').html()
                }).appendTo($('#vedettewrap'));
            }
            //=================================================
            //INITIALISATION DES BLOCS VEDETTES SECONDAIRES
            //=================================================
            if ($('#vedette2').length > 0) {
                bap.feature.columns = parseInt($('#vedette2').attr('class').replace('vedette2Cols_', '')); //Nombre de colonnes à utiliser
                var _top = 0, _width = 242, _height = 133; //Variables de calcul du positionnement des blocs
                $('#vedette2 h2').each(function (i) {
                    if (i%bap.feature.columns == 0 && i > 0) { _top += _height; } //Changement de ligne
                    //Création de l'état actif (le curseur se trouve au-dessus du bloc)
                    $('<div>', {
                        'id': this.id + '_o',
                        'style': 'top: ' + _top + 'px; left: ' + ((i%bap.feature.columns)*_width) + 'px;',
                        'class': 'v2over1',
                        'html': $(this).html().replace('-off', '')
                    }).appendTo($('#vedette2').parent());
                });
            }
            //=================================================
            //INITIALISATION DES BANDEAUX
            //=================================================
            if ($('#vedette3').length > 0) {
                clearTimeout(bap.feature.rotateTimer); //Annuler toute rotation en cours
                $('#vedette3 h2').each(function (i) {
                    //Création de l'état actif (le curseur se trouve au-dessus du bandeau)
                    $('<div>', {
                        'id': this.id+'_o',
                        'class': 'v3over1',
                        'html': this.innerHTML.replace('-off', '')
                    }).appendTo($('#vedette3').parent());
                });
                //Démarrage de la rotation des bandeaux s'il y a lieu
                if ($('#vedette3 h2').length > 1) {
                    bap.feature.rotateTimer = window.setTimeout('bap.feature.rotate()', bap.feature.rotateSpeed);
                }
            }
            //=================================================
            //INITIALISATION DU PALMARÈS, DES CHAPITRES, DES EXTRAITS
            //=================================================
			bap.chart.stateListener('','');
            bap.media.stateListener('','');
			bap.chapters.stateListener('','','','');
            //=================================================
            //EXTRAITS A/V DANS LE DOSSIER SUR LE HARDCORE
            //=================================================
            $('#qchc a[href*=#play_]').not('.extrait, .ecoutez').each(function (i) {
                var id = this.href.match(/^#play_(\d+)$/);
                if (id) {
                    this.id = 'extrait_' + id[1];
                    this.className = 'extrait';
                    $('<small>', {
                        'id': 'extrait_' + id[1] + '_btn',
                        'class': 'bouton play_o'
                    }).prependTo(this);
                }
            });
            //=================================================
            //INTERACTIONS : INITIALISATION DES ONGLETS
            //=================================================
            //Analyse de la page consultée
            var mid = $('#contentId').val().match(/^(\d+)$/); //Entrée de contenu
            var mart = bap.url.match(/\/artistes/); //Fiche d'artiste
            //Initialisation des onglets
            $('#int_onglets a').each(function (i) {
                var m = this.id.match(/^lnk(Commenter|Ecrire|Partager)$/);
                if (m) {
                    //S'il ne s'agit pas d'une entrée de contenu, masquer les onglets "Partager" et "Commenter".
                    //Si nous sommes dans une fiche d'artiste, masquer l'onglet "Commenter".
                    if (((m[1] === 'Commenter' || m[1] === 'Partager') && !mid) || (mid && mart && m[1] === 'Commenter')) {
                        this.style.display = 'none';
                        $('#int_' + m[1]).hide();
                    } else {
                        this.style.display = 'block';
                    }
                }
            });
            //=================================================
            //INTERACTIONS : PARTAGE DES CONTENUS ET PERMALIEN
            //=================================================
            //Afficher le permalien
            $('#permalien').val(bap.url);
            //Récupérer l'identifiant de l'entrée consultée avec exception pour les 50 artistes marquants de la décennie et le dossier sur le hardcore.
            var id = 0;
            if (mid) {
                id = mid[1];
            }
            //Si nous sommes en train de consulter une entrée, définir les liens pour le partage sur les différents réseaux sociaux
            if (id > 0) {
                var longURL = encodeURIComponent(bap.url);
                var shortURL = encodeURIComponent('http://bap.fm/Fw.ashx?q=' + id);
                var title = encodeURIComponent(document.title.replace(' - OBSÉDÉS MUSICAUX ASSUMEZ-VOUS', ''));
                //Twitter
                $('#twitter').attr({
                    'href': 'http://twitter.com/home?status=' + title + ' ' + shortURL,
                    'target': '_blank'
                });
                //Facebook
                $('#facebook').attr({
                    'href': 'http://www.facebook.com/sharer.php?u=' + longURL + '&t=' + title,
                    'target': '_blank'
                });
                //Diggit
                $('#diggit').attr({
                    'href': 'http://digg.com/submit?phase=2&url=' + longURL,
                    'target': '_blank'
                });
                //Delicious
                $('#delicious').attr({
                    'href': 'http://del.icio.us/post?url=' + longURL + '&title=' + title,
                    'target': '_blank'
                });
            }
            //======================================================
            //INTERACTIONS : INITIALISATION DE LA PAGE COLLABORATEUR
            //======================================================
//            //Détection du div "gazoullis"
//            if($('#gazouillis').length > 0){
//                bap.collaborators.removeIntervalTwits();
//                bap.collaborators.setIntervalTwits();
//            }else{
//                bap.collaborators.removeIntervalTwits();
//            }
            $('#gazouillis').hide();
			bap.slideshow.init();
        }
		//======================================================
        //adjustPlayerDisplay :  Ajustement de l'affichage des composantes du lecteur
        //======================================================
		this.adjustPlayerDisplay = function(){
			var player = $.fn.bapplayer.getPlayer('player1');
			if(bap.isCurrentObjectAndExtatique()){ //si c'est l'objet par défaut 
					$.fn.bapplayerImageViewer.removeTitre(player);
					switch (bap.widgets.mode.currentDisplay)	{
						case bap.displayMode.Video: //video
								//infoBar
								$.fn.bapplayerInfoBar.setVideoDisplay();
								//imageViewer
								$.fn.bapplayerImageViewer.closeViewer(player);
								//topBar
								 $.fn.bapplayerTopBar.showStream(player,null);
							break;
						case bap.displayMode.Snapshot: //snapshot
								bap.widgets.gallery.toggleVisibility(true);
								//infoBar
								$.fn.bapplayerInfoBar.setSnapShotDisplay();
								//imageViewer
								$.fn.bapplayerImageViewer.closeViewer(player);
								//topBar
								$.fn.bapplayerTopBar.showStream(player,null);
							break;
						case  bap.displayMode.Pochette: //pochette
								bap.widgets.gallery.toggleVisibility(false);
								//infoBar
								$.fn.bapplayerInfoBar.setPochetteDisplay(player);
								$.fn.bapplayerTopBar.showStream(player,null);
							break;
				}
				bap.widgets.on.toggleVisibility(true);
			}else{
				//widgets
				bap.widgets.on.toggleVisibility(false);
				bap.widgets.gallery.toggleVisibility(false);

				//infoBar
				$('.infoBar.radio').css({'width':840,'margin':'20px 0 0 5px'});

				$('.gauche a.chaine.sirius').css({'display':'block','opacity':1});
				$('#player1_controlbar .presentement img').show();
				$('#player1_controlbar .droite').show();

				//topbar
				if (bap.nav.currentMimeType == bap.mimeTypes.AudioStream) {//radio
				 $.fn.bapplayerTopBar.showRadio(null,null);
				}else{
					$.fn.bapplayerTopBar.showDefault(null,null);
				}
				//viewer
				$('.bapplayer_imgHolder').css({'top':'35px','left':'160px'});
                try { $.fn.bapplayerImageViewer.manage('player1'); }
                catch (e) { }

			}

	 }

       //======================================================
       // Met à jour l'état de tous les boutons play/pause selon ce qui joue dans le lecteur;
       // Méthode appelée par le bapplayer
       //======================================================
       this.stateListener = function(oldState, newState){
		  
            var clsToRemove = "play play_o pause pause_o";
            var clsToRemoveBigBtn = "play3 pause3";
            var clsToAdd = "play" ;
            var clsToAddBigBtn = "play3" ;
            bap.nav.state = newState;
            if(bap.nav.main.match(/(direct|continu|special)/)){
                    bap.nav.stateListener();
            }else{
                if((oldState == 'PLAYING' || newState == 'PAUSED')&& (newState != 'PLAYING' && newState != 'IDLE')){
                    clsToRemoveBigBtn ='pause3';
                    clsToAdd = 'play_o';
                    clsToAddBigBtn = 'play3';
                }else if((oldState == 'PAUSED' && oldState == 'BUFFERING' && oldState == 'PLAYING' ) || newState == 'PLAYING'){
                    clsToRemoveBigBtn ='play3';
                    clsToAdd = 'pause_o';
                    clsToAddBigBtn = 'pause3';
                }
                
                bap.chart.stateListener(clsToRemove,clsToAdd);
                bap.chapters.stateListener(clsToRemove,clsToAdd,clsToRemoveBigBtn,clsToAddBigBtn);
                bap.media.stateListener(clsToRemove,clsToAdd);
            }
       }
      
       //======================================================
       // Met à jour le chapitre selon ce qui joue dans le lecteur;
       // Méthode appelée par le bapplayer
       //======================================================
       this.chapterChangeListener = function(idChapterIndex){
           if( !bap.nav.main.match(/(direct|continu|special)/) ){
                bap.nav.setLoaded('#play_'+idChapterIndex);
                bap.nav.secondary =bap.nav.loaded;

                //trigger le stateListener des chapitres ( entrée de contenu)
                bap.chapters.stateListener('play_o pause_o play pause','pause_o','play3 pause3','pause3');
                //trigger le stateListener du chart
                bap.chart.stateListener('play play_o pause pause_o','pause_o');
           }
       }
		/*Validate if the request is for the defaultObject while in NOT Normal displayMode*/
		this.isCurrentObjectAndExtatique= function(Id){
			fileId =(Id == null)? bap.nav.loaded :Id;
			response = (bap.widgets.mode.currentDisplay != bap.displayMode.Normal &&  (fileId == "#play_"+bap.nav.defaultObject.Id+'_0'))? true :false;
			return response;
		}
		/* Sort the object alphabatically*/
		this.sortObject= function(object){
			var sortable = [];
			for(var i in object){
				sortable.push([i, object[i]]);
			}
			sortable.sort();
				return sortable;
		}
		 //======================================================
        // Listener pour les mises à jour en direct déclenchées par le serveur
        //======================================================
        this.listener = {
            'lastRecId': '',
            'nickname': '',
            'timer': false,
            'listen': function () {
//                //Envoi de la requête
//                $.ajax({
//                    url: bap.baseURL + 'Poll.ashx?id=' + bap.listener.lastRecId,
//                    type: 'GET',
//                    cache: false,
//                    contentType: 'application/json',
//                    dataType: 'json',
//                    timeout: 60000,
//                    success: function(data) {
//                        if (data != null) {
//                            try {
//                                bap.listener.lastRecId = data.lastRecId;
//                                bap.listener.nickname = (data.nickname) ? data.nickname : '';
//							
//                                //--------- DISPLAY
//                                if (data.display != null) {
//									//mode instanciation de tout
//									//valiadtion du premier affichage d'extatique
//									if(data.display.mode != bap.displayMode.Normal && bap.widgets.mode.currentDisplay == bap.displayMode.Normal){
//										//render les widgets principaux , non-visible
//										//on
//										bap.widgets.on.render();
//										//gallery
//										bap.widgets.gallery.render();
//										//related
//										bap.widgets.related.render();
//									}
//                                    //comments
//									bap.widgets.comments.render();
//								}
//								//--------- DATAS
//								//Commandes
//                                if (data.commands.length > 0) {
//                                    $.each(data.commands, function (i, cmd) {
//                                        try { eval(cmd); } catch (e) { }
//                                    });
//                                }
//                                //Images
//                               if (data.snapshots.length > 0 ) {
//									  if(data.snapshots.length == 4){ //premier affichage
//											bap.widgets.gallery.addImageToArray(data.snapshots);
//									  }else{
//											$.each(data.snapshots, function (i, snapshot) {
//												bap.widgets.gallery.addImage(snapshot);
//											});
//									  }
//                                }
//                                //Commentaires
//                                if (data.comments.length > 0) {
//                                        bap.widgets.comments.addComments(data.comments);
//                                }
//                                //Pièces diffusées
//                                if (data.songs.length > 0) {
//                                   $.each(data.songs, function (i, song) {
//                                        if ($('#lecteur .chaine.' + song.streamName).length > 0) {
//                                            $.loadMeta(song.html.Value, 'player1');
//                                        }
//									    if (song.streamName == 'sirius') {
//                                            bap.nav.defaultObject.responseHTML = song.html.Value;
//                                        }
//                                    });
//                                }
//                                //onNext
//                                if (data.onNext != null) {
//                                    bap.widgets.on.loadText('onNext',data.onNext);
//                                }
//                                //onNow
//                                if (data.onNow != null) {
//                                   bap.widgets.on.loadText('onNow',data.onNow);
//                                }
//                                //onNow
//                                if (data.related != null) {
//                                   bap.widgets.related.loadText(data.related.html.Value,data.related.restricted,data.related.id);
//                                }
//
//								//---------AFFCIHAGE
//
//								//AUTOPLAY
//								(bap.widgets.autoplay.activated  == data.display.autoplay )? '' : bap.widgets.autoplay.setStatus(data.display.autoplay);
//
//								//MODE
//								(bap.widgets.mode.currentDisplay  == data.display.mode ) ? '':bap.widgets.mode.setStatus(data.display.mode);
//
//								//ON
//								(bap.widgets.on.banners.onNext.visible  == data.display.onNext ) ? '': bap.widgets.on.activateBanner('onNext',data.display.onNext);
//								(bap.widgets.on.banners.onNow.visible  == data.display.onNow ) ? '': bap.widgets.on.activateBanner('onNow',data.display.onNow);
//
//								//COMMENTS
//								(bap.widgets.comments.visible == data.display.comments )? '':bap.widgets.comments.toggleVisibility(data.display.comments);
//
//								//RELATED
//								(bap.widgets.related.visible &&  data.display.related ) ? '':bap.widgets.related.toggleVisibility(data.display.related);
//						
//                            } catch (e) {
//							}
//                        }
//                    }
//                });
            }
        }
    }


    //¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
    // Traitement effectué lorsque le DOM de la page est prêt
    //______________________________________________________________________________
    $(document).ready(function () {
        var bap = window.bap = new BAP();
        bap.init();
        bap.initPage();

        if ($('#defaultObject').length > 0) {
            bap.nav.defaultObject.responseHTML = $('#defaultObject').html();
        }
		
        bap.nav.loadDefault(true,false,true,'main');
    });
})(window, jQuery);
