var swfobject = function () { var D = "undefined", r = "object", S = "Shockwave Flash", W = "ShockwaveFlash.ShockwaveFlash", q = "application/x-shockwave-flash", R = "SWFObjectExprInst", x = "onreadystatechange", O = window, j = document, t = navigator, T = false, U = [h], o = [], N = [], I = [], l, Q, E, B, J = false, a = false, n, G, m = true, M = function () { var aa = typeof j.getElementById != D && typeof j.getElementsByTagName != D && typeof j.createElement != D, ah = t.userAgent.toLowerCase(), Y = t.platform.toLowerCase(), ae = Y ? /win/.test(Y) : /win/.test(ah), ac = Y ? /mac/.test(Y) : /mac/.test(ah), af = /webkit/.test(ah) ? parseFloat(ah.replace(/^.*webkit\/(\d+(\.\d+)?).*$/, "$1")) : false, X = ! +"\v1", ag = [0, 0, 0], ab = null; if (typeof t.plugins != D && typeof t.plugins[S] == r) { ab = t.plugins[S].description; if (ab && !(typeof t.mimeTypes != D && t.mimeTypes[q] && !t.mimeTypes[q].enabledPlugin)) { T = true; X = false; ab = ab.replace(/^.*\s+(\S+\s+\S+$)/, "$1"); ag[0] = parseInt(ab.replace(/^(.*)\..*$/, "$1"), 10); ag[1] = parseInt(ab.replace(/^.*\.(.*)\s.*$/, "$1"), 10); ag[2] = /[a-zA-Z]/.test(ab) ? parseInt(ab.replace(/^.*[a-zA-Z]+(.*)$/, "$1"), 10) : 0 } } else { if (typeof O.ActiveXObject != D) { try { var ad = new ActiveXObject(W); if (ad) { ab = ad.GetVariable("$version"); if (ab) { X = true; ab = ab.split(" ")[1].split(","); ag = [parseInt(ab[0], 10), parseInt(ab[1], 10), parseInt(ab[2], 10)] } } } catch (Z) { } } } return { w3: aa, pv: ag, wk: af, ie: X, win: ae, mac: ac} } (), k = function () { if (!M.w3) { return } if ((typeof j.readyState != D && j.readyState == "complete") || (typeof j.readyState == D && (j.getElementsByTagName("body")[0] || j.body))) { f() } if (!J) { if (typeof j.addEventListener != D) { j.addEventListener("DOMContentLoaded", f, false) } if (M.ie && M.win) { j.attachEvent(x, function () { if (j.readyState == "complete") { j.detachEvent(x, arguments.callee); f() } }); if (O == top) { (function () { if (J) { return } try { j.documentElement.doScroll("left") } catch (X) { setTimeout(arguments.callee, 0); return } f() })() } } if (M.wk) { (function () { if (J) { return } if (!/loaded|complete/.test(j.readyState)) { setTimeout(arguments.callee, 0); return } f() })() } s(f) } } (); function f() { if (J) { return } try { var Z = j.getElementsByTagName("body")[0].appendChild(C("span")); Z.parentNode.removeChild(Z) } catch (aa) { return } J = true; var X = U.length; for (var Y = 0; Y < X; Y++) { U[Y]() } } function K(X) { if (J) { X() } else { U[U.length] = X } } function s(Y) { if (typeof O.addEventListener != D) { O.addEventListener("load", Y, false) } else { if (typeof j.addEventListener != D) { j.addEventListener("load", Y, false) } else { if (typeof O.attachEvent != D) { i(O, "onload", Y) } else { if (typeof O.onload == "function") { var X = O.onload; O.onload = function () { X(); Y() } } else { O.onload = Y } } } } } function h() { if (T) { V() } else { H() } } function V() { var X = j.getElementsByTagName("body")[0]; var aa = C(r); aa.setAttribute("type", q); var Z = X.appendChild(aa); if (Z) { var Y = 0; (function () { if (typeof Z.GetVariable != D) { var ab = Z.GetVariable("$version"); if (ab) { ab = ab.split(" ")[1].split(","); M.pv = [parseInt(ab[0], 10), parseInt(ab[1], 10), parseInt(ab[2], 10)] } } else { if (Y < 10) { Y++; setTimeout(arguments.callee, 10); return } } X.removeChild(aa); Z = null; H() })() } else { H() } } function H() { var ag = o.length; if (ag > 0) { for (var af = 0; af < ag; af++) { var Y = o[af].id; var ab = o[af].callbackFn; var aa = { success: false, id: Y }; if (M.pv[0] > 0) { var ae = c(Y); if (ae) { if (F(o[af].swfVersion) && !(M.wk && M.wk < 312)) { w(Y, true); if (ab) { aa.success = true; aa.ref = z(Y); ab(aa) } } else { if (o[af].expressInstall && A()) { var ai = {}; ai.data = o[af].expressInstall; ai.width = ae.getAttribute("width") || "0"; ai.height = ae.getAttribute("height") || "0"; if (ae.getAttribute("class")) { ai.styleclass = ae.getAttribute("class") } if (ae.getAttribute("align")) { ai.align = ae.getAttribute("align") } var ah = {}; var X = ae.getElementsByTagName("param"); var ac = X.length; for (var ad = 0; ad < ac; ad++) { if (X[ad].getAttribute("name").toLowerCase() != "movie") { ah[X[ad].getAttribute("name")] = X[ad].getAttribute("value") } } P(ai, ah, Y, ab) } else { p(ae); if (ab) { ab(aa) } } } } } else { w(Y, true); if (ab) { var Z = z(Y); if (Z && typeof Z.SetVariable != D) { aa.success = true; aa.ref = Z } ab(aa) } } } } } function z(aa) { var X = null; var Y = c(aa); if (Y && Y.nodeName == "OBJECT") { if (typeof Y.SetVariable != D) { X = Y } else { var Z = Y.getElementsByTagName(r)[0]; if (Z) { X = Z } } } return X } function A() { return !a && F("6.0.65") && (M.win || M.mac) && !(M.wk && M.wk < 312) } function P(aa, ab, X, Z) { a = true; E = Z || null; B = { success: false, id: X }; var ae = c(X); if (ae) { if (ae.nodeName == "OBJECT") { l = g(ae); Q = null } else { l = ae; Q = X } aa.id = R; if (typeof aa.width == D || (!/%$/.test(aa.width) && parseInt(aa.width, 10) < 310)) { aa.width = "310" } if (typeof aa.height == D || (!/%$/.test(aa.height) && parseInt(aa.height, 10) < 137)) { aa.height = "137" } j.title = j.title.slice(0, 47) + " - Flash Player Installation"; var ad = M.ie && M.win ? "ActiveX" : "PlugIn", ac = "MMredirectURL=" + O.location.toString().replace(/&/g, "%26") + "&MMplayerType=" + ad + "&MMdoctitle=" + j.title; if (typeof ab.flashvars != D) { ab.flashvars += "&" + ac } else { ab.flashvars = ac } if (M.ie && M.win && ae.readyState != 4) { var Y = C("div"); X += "SWFObjectNew"; Y.setAttribute("id", X); ae.parentNode.insertBefore(Y, ae); ae.style.display = "none"; (function () { if (ae.readyState == 4) { ae.parentNode.removeChild(ae) } else { setTimeout(arguments.callee, 10) } })() } u(aa, ab, X) } } function p(Y) { if (M.ie && M.win && Y.readyState != 4) { var X = C("div"); Y.parentNode.insertBefore(X, Y); X.parentNode.replaceChild(g(Y), X); Y.style.display = "none"; (function () { if (Y.readyState == 4) { Y.parentNode.removeChild(Y) } else { setTimeout(arguments.callee, 10) } })() } else { Y.parentNode.replaceChild(g(Y), Y) } } function g(ab) { var aa = C("div"); if (M.win && M.ie) { aa.innerHTML = ab.innerHTML } else { var Y = ab.getElementsByTagName(r)[0]; if (Y) { var ad = Y.childNodes; if (ad) { var X = ad.length; for (var Z = 0; Z < X; Z++) { if (!(ad[Z].nodeType == 1 && ad[Z].nodeName == "PARAM") && !(ad[Z].nodeType == 8)) { aa.appendChild(ad[Z].cloneNode(true)) } } } } } return aa } function u(ai, ag, Y) { var X, aa = c(Y); if (M.wk && M.wk < 312) { return X } if (aa) { if (typeof ai.id == D) { ai.id = Y } if (M.ie && M.win) { var ah = ""; for (var ae in ai) { if (ai[ae] != Object.prototype[ae]) { if (ae.toLowerCase() == "data") { ag.movie = ai[ae] } else { if (ae.toLowerCase() == "styleclass") { ah += ' class="' + ai[ae] + '"' } else { if (ae.toLowerCase() != "classid") { ah += " " + ae + '="' + ai[ae] + '"' } } } } } var af = ""; for (var ad in ag) { if (ag[ad] != Object.prototype[ad]) { af += '<param name="' + ad + '" value="' + ag[ad] + '" />' } } aa.outerHTML = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"' + ah + ">" + af + "</object>"; N[N.length] = ai.id; X = c(ai.id) } else { var Z = C(r); Z.setAttribute("type", q); for (var ac in ai) { if (ai[ac] != Object.prototype[ac]) { if (ac.toLowerCase() == "styleclass") { Z.setAttribute("class", ai[ac]) } else { if (ac.toLowerCase() != "classid") { Z.setAttribute(ac, ai[ac]) } } } } for (var ab in ag) { if (ag[ab] != Object.prototype[ab] && ab.toLowerCase() != "movie") { e(Z, ab, ag[ab]) } } aa.parentNode.replaceChild(Z, aa); X = Z } } return X } function e(Z, X, Y) { var aa = C("param"); aa.setAttribute("name", X); aa.setAttribute("value", Y); Z.appendChild(aa) } function y(Y) { var X = c(Y); if (X && X.nodeName == "OBJECT") { if (M.ie && M.win) { X.style.display = "none"; (function () { if (X.readyState == 4) { b(Y) } else { setTimeout(arguments.callee, 10) } })() } else { X.parentNode.removeChild(X) } } } function b(Z) { var Y = c(Z); if (Y) { for (var X in Y) { if (typeof Y[X] == "function") { Y[X] = null } } Y.parentNode.removeChild(Y) } } function c(Z) { var X = null; try { X = j.getElementById(Z) } catch (Y) { } return X } function C(X) { return j.createElement(X) } function i(Z, X, Y) { Z.attachEvent(X, Y); I[I.length] = [Z, X, Y] } function F(Z) { var Y = M.pv, X = Z.split("."); X[0] = parseInt(X[0], 10); X[1] = parseInt(X[1], 10) || 0; X[2] = parseInt(X[2], 10) || 0; return (Y[0] > X[0] || (Y[0] == X[0] && Y[1] > X[1]) || (Y[0] == X[0] && Y[1] == X[1] && Y[2] >= X[2])) ? true : false } function v(ac, Y, ad, ab) { if (M.ie && M.mac) { return } var aa = j.getElementsByTagName("head")[0]; if (!aa) { return } var X = (ad && typeof ad == "string") ? ad : "screen"; if (ab) { n = null; G = null } if (!n || G != X) { var Z = C("style"); Z.setAttribute("type", "text/css"); Z.setAttribute("media", X); n = aa.appendChild(Z); if (M.ie && M.win && typeof j.styleSheets != D && j.styleSheets.length > 0) { n = j.styleSheets[j.styleSheets.length - 1] } G = X } if (M.ie && M.win) { if (n && typeof n.addRule == r) { n.addRule(ac, Y) } } else { if (n && typeof j.createTextNode != D) { n.appendChild(j.createTextNode(ac + " {" + Y + "}")) } } } function w(Z, X) { if (!m) { return } var Y = X ? "visible" : "hidden"; if (J && c(Z)) { c(Z).style.visibility = Y } else { v("#" + Z, "visibility:" + Y) } } function L(Y) { var Z = /[\\\"<>\.;]/; var X = Z.exec(Y) != null; return X && typeof encodeURIComponent != D ? encodeURIComponent(Y) : Y } var d = function () { if (M.ie && M.win) { window.attachEvent("onunload", function () { var ac = I.length; for (var ab = 0; ab < ac; ab++) { I[ab][0].detachEvent(I[ab][1], I[ab][2]) } var Z = N.length; for (var aa = 0; aa < Z; aa++) { y(N[aa]) } for (var Y in M) { M[Y] = null } M = null; for (var X in swfobject) { swfobject[X] = null } swfobject = null }) } } (); return { registerObject: function (ab, X, aa, Z) { if (M.w3 && ab && X) { var Y = {}; Y.id = ab; Y.swfVersion = X; Y.expressInstall = aa; Y.callbackFn = Z; o[o.length] = Y; w(ab, false) } else { if (Z) { Z({ success: false, id: ab }) } } }, getObjectById: function (X) { if (M.w3) { return z(X) } }, embedSWF: function (ab, ah, ae, ag, Y, aa, Z, ad, af, ac) { var X = { success: false, id: ah }; if (M.w3 && !(M.wk && M.wk < 312) && ab && ah && ae && ag && Y) { w(ah, false); K(function () { ae += ""; ag += ""; var aj = {}; if (af && typeof af === r) { for (var al in af) { aj[al] = af[al] } } aj.data = ab; aj.width = ae; aj.height = ag; var am = {}; if (ad && typeof ad === r) { for (var ak in ad) { am[ak] = ad[ak] } } if (Z && typeof Z === r) { for (var ai in Z) { if (typeof am.flashvars != D) { am.flashvars += "&" + ai + "=" + Z[ai] } else { am.flashvars = ai + "=" + Z[ai] } } } if (F(Y)) { var an = u(aj, am, ah); if (aj.id == ah) { w(ah, true) } X.success = true; X.ref = an } else { if (aa && A()) { aj.data = aa; P(aj, am, ah, ac); return } else { w(ah, true) } } if (ac) { ac(X) } }) } else { if (ac) { ac(X) } } }, switchOffAutoHideShow: function () { m = false }, ua: M, getFlashPlayerVersion: function () { return { major: M.pv[0], minor: M.pv[1], release: M.pv[2]} }, hasFlashPlayerVersion: F, createSWF: function (Z, Y, X) { if (M.w3) { return u(Z, Y, X) } else { return undefined } }, showExpressInstall: function (Z, aa, X, Y) { if (M.w3 && A()) { P(Z, aa, X, Y) } }, removeSWF: function (X) { if (M.w3) { y(X) } }, createCSS: function (aa, Z, Y, X) { if (M.w3) { v(aa, Z, Y, X) } }, addDomLoadEvent: K, addLoadEvent: s, getQueryParamValue: function (aa) { var Z = j.location.search || j.location.hash; if (Z) { if (/\?/.test(Z)) { Z = Z.split("?")[1] } if (aa == null) { return L(Z) } var Y = Z.split("&"); for (var X = 0; X < Y.length; X++) { if (Y[X].substring(0, Y[X].indexOf("=")) == aa) { return L(Y[X].substring((Y[X].indexOf("=") + 1))) } } } return "" }, expressInstallCallback: function () { if (a) { var X = c(R); if (X && l) { X.parentNode.replaceChild(l, X); if (Q) { w(Q, true); if (M.ie && M.win) { l.style.display = "block" } } if (E) { E(B) } } a = false } } } } ();

(function ($) {
    var controlbars ={};
    var controlbar;
  
    var container= {};
    var controlbarElement= {};
    var superiorcontrolbarElement= {};
    var inferiorcontrolbarElement= {};
    var superiorcontrolbar= {};
    var inferiorcontrolbar= {};
	var displayMode= 'block';
    var renderMode = 'none'; /*'none' 'default','radio','stream','extatique' */
   

    /** Hooking the bapplayerControlbar up to jQuery. **/
    $.fn.bapplayerControlbar = function (player) {
      
        controlbars[player.id] = $.extend({}, $.fn.bapplayerControlbar.defaults, player.config.plugins.controlbar);
        container[player.id] = $('#' + player.id +'_btmcontainer');
        superiorcontrolbarElement[player.id] = '<div id="' + player.id + '_superiorcontrolbar" class="superiorControlbar"></div>';
        inferiorcontrolbarElement[player.id] = '<div id="' + player.id + '_inferiorcontrolbar" class="inferiorControlbar"></div>';
        controlbarElement[player.id] = $('<div id="' + player.id + '_controlbar" class="controlbar"></div>');
		renderMode = 'none';
        
   };
   $.fn.bapplayerControlbar.getRenderMode = function(){
	   return renderMode;
   };

    /* Layout par Défaut: tous sauf IceCast */
    $.fn.bapplayerControlbar.buildDefault = function (player) {
        buildDefaultElements(player);
		renderMode = 'default';
    };

    /* Layout IceCast */
   $.fn.bapplayerControlbar.buildRadio = function (player) {
        buildRadioElements(player);
		renderMode = 'radio';
    };
    /* Layout IceCast */
   $.fn.bapplayerControlbar.buildStream = function (player) {
        buildStreamElements(player);
		renderMode = 'stream';
    };
    /* Layout IceCast */
   $.fn.bapplayerControlbar.buildStreamExtatique = function (player) {
        buildStreamElements(player);
		renderMode = 'extatique';
    };


    $.fn.bapplayerControlbar.positions = {
        BOTTOM: 'BOTTOM',
        TOP: 'TOP',
        OVER: 'OVER'
    };


    /** Map with config for the bapplayerControlbar plugin. **/
    $.fn.bapplayerControlbar.defaults = {
        fontsize: 10,
        fontcolor: '000000',
        position: $.fn.bapplayerControlbar.positions.BOTTOM,
        leftmargin: 0,
        rightmargin: 0
    };

    $.fn.bapplayerControlbar.remove = function (player) {
        controlbarElement[player.id].empty();
        controlbarElement[player.id].remove();
		renderMode = 'none';
    }

	/*$.fn.bapplayerControlbar.hideProgressBar = function (id) {
		//hide children to keep height of parent
		$('#'+id + '_superiorcontrolbar').children('div').each(function(){
			displayMode = 'none';
			$(this).hide();
		});
    }
	$.fn.bapplayerControlbar.showProgressBar = function (id) {
      $('#'+id + '_superiorcontrolbar').children('div').each(function(){
		  displayMode = 'block';
			$(this).show();
		});
    }*/

    //Elements from default layout
    function buildDefaultElements(player) {
        controlbarElement[player.id].append(superiorcontrolbarElement[player.id]);
        controlbarElement[player.id].append(inferiorcontrolbarElement[player.id]);
        container[player.id].append(controlbarElement[player.id]);
        superiorcontrolbar = $('#' + player.id + '_superiorcontrolbar');
        inferiorcontrolbar = $('#' + player.id + '_inferiorcontrolbar');

        //TOP
        buildElapsedText(player);
        buildTimeSliderRail(player);
        buildTotalText(player);
      

        //BOTTOM
        buildPlayPauseButton(player);
        buildNextPreviousButton(player);
        buildMuteUnmuteButton(player);
        buildMuteVolumeSlider(player);

        //events
        buildDefaultHandlers(player);
    }

    //Elements from radio layout
    function buildRadioElements(player) {
        controlbarElement[player.id].append(inferiorcontrolbarElement[player.id]);
        container[player.id].append(controlbarElement[player.id]);
        inferiorcontrolbar = $('#' + player.id + '_inferiorcontrolbar');
        //BOTTOM
        buildPlayPauseButton(player);
        buildMuteUnmuteButton(player);
        buildMuteVolumeSlider(player);

        //events
       buildRadioHandlers(player);
       //css
       inferiorcontrolbar.addClass('radio');
    }

    //Elements from stream layout
    function buildStreamElements(player) {
        controlbarElement[player.id].append(superiorcontrolbarElement[player.id]);
        controlbarElement[player.id].append(inferiorcontrolbarElement[player.id]);
        container[player.id].append(controlbarElement[player.id]);
        superiorcontrolbar = $('#' + player.id + '_superiorcontrolbar');
        inferiorcontrolbar = $('#' + player.id + '_inferiorcontrolbar');
      
	    //TOP
        buildElapsedText(player);
        buildTimeSliderRail(player);
        buildTotalText(player);
      
        //BOTTOM
        buildPlayPauseButton(player);
        buildNextPreviousButton(player);
        buildMuteUnmuteButton(player);
        buildMuteVolumeSlider(player);

        //events
		if(renderMode == 'default')
			buildDefaultHandlers(player);
		else
			buildRadioHandlers(player);
       // buildStreamHandlers(player);
	   //hide superiorcontrolbar
	    $('#' + player.id + '_superiorcontrolbar').hide();
    }


    /***********************************************/
    //   SUPERIOR CONTROLBAR SECTION
    /***********************************************/
    /** ELAPSED TEXT */
    function buildElapsedText(player) {
        var nam = player.id + '_' + 'elapsedText';
        superiorcontrolbar.append('<div id="' + nam + '"></div>');
        $('#' + nam).html('00:00');
        $('#' + nam).addClass('time');

    }
    /** TOTAL TEXT */
    function buildTotalText(player) {
        var nam = player.id + '_' + 'durationText';
        superiorcontrolbar.append('<div id="' + nam + '"></div>');
        $('#' + nam).html('00:00');
        $('#' + nam).addClass('durationText');

    }
    /** TIME SLIDER RAIL  */
    function buildTimeSliderRail(player) {
        var nam = player.id + '_' + 'timeSliderRail';
        superiorcontrolbar.append('<div id="' + nam + '"></div>');

        $('#' + nam).addClass('timeSliderRail');

        /** TIME SLIDER BUFFER  */
        nam = player.id + '_' + 'timeSliderBuffer';
        superiorcontrolbar.append('<div id="' + nam + '"></div>');

        $('#' + nam).addClass('timeSliderBuffer');
        $('#' + nam).css('display', displayMode);

        /** TIME SLIDER PROGRESS  */
        nam = player.id + '_' + 'timeSliderProgress';
        superiorcontrolbar.append('<div id="' + nam + '"><div>');

        $('#' + nam).addClass('timeSliderProgress');
        $('#' + nam).css('display',displayMode);

        /** TIME SLIDER THUMB  */
        nam = player.id + '_' + 'timeSliderThumb';
        superiorcontrolbar.append('<div id="' + nam + '"><div>');

        $('#' + nam).addClass('timeSliderThumb');
        $('#' + nam).css('display', displayMode);
    }
   

    /***********************************************/
    //   INFERIOR CONTROLBAR SECTION  
    /***********************************************/
     /** MUTE BUTTON   */
    function buildMuteUnmuteButton(player) {
        var nam = player.id + '_' + 'muteButton';
        inferiorcontrolbar.append ('<div id="' +player.id + '_volumecontainer" class="volumeControlsContainer"></div>');
        $('<div id="' + nam + '" class="volumeControls"></div>').appendTo($('#'+player.id + '_volumecontainer'));
        $('#' + nam).addClass('mute');

        var nam = player.id + '_' + 'unmuteButton';
       $('<div id="' + nam + '" class="volumeControls"></div>').appendTo($('#'+player.id + '_volumecontainer'));

        $('#' + nam).addClass('unmute');
        $('#' + nam).css('display', 'none');
    }

    /** VOLUME SLIDER   */
    function buildMuteVolumeSlider(player) {
        var nam = player.id + '_' + 'volumeSliderRail';
        $('<div id="' + nam + '" class="volumeControls"></div>').appendTo($('#'+player.id + '_volumecontainer'));
        $('#' + nam).addClass('volumeSliderRail');

        var nam = player.id + '_' + 'volumeSliderProgress';
       $('<div id="' + nam + '" class="volumeControls"></div>').appendTo($('#'+player.id + '_volumecontainer'));

        $('#' + nam).addClass('volumeSliderProgress');
    }


    /** PLAY PAUSE BUTTON */
    function buildPlayPauseButton(player) {
        var nam = player.id + '_' + 'playButton';
        inferiorcontrolbar.append('<div id="' + nam + '"></div>');

        $('#' + nam).addClass('bouton');
        $('#' + nam).addClass('play2');

        nam = player.id + '_' + 'pauseButton';
        inferiorcontrolbar.append('<div id="' + nam + '"></div>');

        $('#' + nam).addClass('bouton');
        $('#' + nam).addClass('pause2');
        $('#' + nam).css('display', 'none');

    }

    /** NEXT PREVIOUS BUTTON */
    function buildNextPreviousButton(player) {
        var nam = player.id + '_' + 'nextButton';
        inferiorcontrolbar.append('<div id="' + nam + '"></div>');

        $('#' + nam).addClass('bouton');
        $('#' + nam).addClass('next');

        nam = player.id + '_' + 'previousButton';
        inferiorcontrolbar.append('<div id="' + nam + '"></div>');

        $('#' + nam).addClass('bouton');
        $('#' + nam).addClass('previous');
    }


    /***********************************************/
    //   TOP CONTROLBAR
    /***********************************************/
    /** Add interactivity to the bapplayerControlbar elements. **/
    function buildDefaultHandlers(player) {
        // Register events with the buttons.
        buildHandler('playButton', 'play',player);
        buildHandler('pauseButton', 'pause',player);
        buildHandler('muteButton', 'mute', player,true);
        buildHandler('unmuteButton', 'mute', player, false);
        buildHandler('fullscreenButton', 'fullscreen', player, true);
        buildHandler('normalscreenButton', 'fullscreen', player, false);
        buildNextPrevHandler('nextButton', 'next',player);
        buildNextPrevHandler('previousButton', 'previous',player);

        addTimeSlider(player);
        addVolumeSlider(player);
        // Register events with the player.
        player.buffer(bufferHandler);
        player.state(stateHandler);
       
        player.mute(muteHandler);
        player.volume(volumeHandler);
        player.complete(completeHandler);
        addTimeHandler(player);
        // Trigger a few events so the bar looks good on startup.
        resizeHandler({
            id: player.id,
            fulscreen: player.fullscreen(),
            width: player.width(),
            height: player.height(),
            player: player
        });
       
        bufferHandler({
            id: player.id,
            bufferProgress: 0
        });
        muteHandler({
            id: player.id,
            mute: player.mute()
        });
        stateHandler({
            id: player.id,
            newstate: $.fn.bapplayer.states.IDLE
        });
        volumeHandler({
            id: player.id,
            volume: player.volume()
        });
    }

    /** Add interactivity to the bapplayerControlbar elements for Radio Layout. **/
    function buildRadioHandlers(player) {
        // Register events with the buttons.
        buildHandler('playButton', 'play',player);
        buildHandler('pauseButton', 'pause',player);
        buildHandler('muteButton', 'mute', player,true);
        buildHandler('unmuteButton', 'mute', player, false);
        buildHandler('fullscreenButton', 'fullscreen', player, true);
        buildHandler('normalscreenButton', 'fullscreen', player, false);

        addVolumeSlider(player);
        // Register events with the player.
        player.buffer(bufferHandler);
        player.state(stateHandler);
       
        player.mute(muteHandler);
        player.volume(volumeHandler);
        player.complete(completeHandler);
        // Trigger a few events so the bar looks good on startup.
        resizeHandler({
            id: player.id,
            fulscreen: player.fullscreen(),
            width: player.width(),
            height: player.height(),
            player: player
        });
       
        bufferHandler({
            id: player.id,
            bufferProgress: 0
        });
        muteHandler({
            id: player.id,
            mute: player.mute()
        });
        stateHandler({
            id: player.id,
            newstate: $.fn.bapplayer.states.IDLE
        });
        volumeHandler({
            id: player.id,
            volume: player.volume()
        });
    }

    /** Add interactivity to the bapplayerControlbar elements for REGULAR Stream. **/
    function buildStreamHandlers(player) {
        // Register events with the buttons.
        buildHandler('playButton', 'play',player);
        buildHandler('pauseButton', 'pause',player);
        buildHandler('muteButton', 'mute', player,true);
        buildHandler('unmuteButton', 'mute', player, false);

        addVolumeSlider(player);

        player.state(stateHandler);
        player.mute(muteHandler);
        player.volume(volumeHandler);
        removeTimeHandler(player);

       muteHandler({
            id: player.id,
            mute: player.mute()
        });
        stateHandler({
            id: player.id,
            newstate: $.fn.bapplayer.states.IDLE
        });
        volumeHandler({
            id: player.id,
            volume: player.volume()
        });
    }


    function buildNextPrevHandler(element,handler,player) {
        var nam = player.id + '_' + element;
        $('#' + nam).css('cursor', 'pointer');
        $('#' + nam).bind('click', function (evt) {
            evt.stopPropagation();
            if (handler == 'next') {
                $.fn.bapplayerPlaylist.setCurrentIndex(($.fn.bapplayerPlaylist.getCurrentIndex(player) + 1),player);
            } else if (handler == 'previous') {
                $.fn.bapplayerPlaylist.setCurrentIndex(($.fn.bapplayerPlaylist.getCurrentIndex(player) - 1),player);
            }
            $.fn.bapplayerPlaylist.loadItem($.fn.bapplayerPlaylist.getCurrentIndex(player),$.fn.bapplayerPlaylist.getCurrentId(player),player);
        });
    }

    function removeTimeHandler(player) {
        player.removeEventListener($.fn.bapplayer.events.BAPPLAYER_MEDIA_TIME, timeHandler);
    };
    function addTimeHandler(player) {
            player.time(timeHandler);
            timeHandler({
                id: player.id,
                duration: player.duration(),
                position: 0
            });
    };

    /** Set a single button handler. **/
    function buildHandler(element, handler,player, args) {
        var nam = player.id + '_' + element;
        $('#' + nam).css('cursor', 'pointer');
        if (handler == 'fullscreen') {
            $('#' + nam).click(function (evt) {
                evt.stopPropagation();
                player.fullscreen(!player.fullscreen());
                resizeHandler({
                    id: player.id,
                    fullscreen: player.fullscreen(),
                    width: player.width(),
                    height: player.height(),
                    player: player
                });
            });
        } else {
            $('#' + nam).click(function (evt) {
                evt.stopPropagation();
                if (!$.fn.bapplayerUtils.isNull(args)) {
                    player[handler](args);
                } else {
                    player[handler]();
                }

            });
        }
    }
      /** Set the time drag handler. **/
    function addTimeSlider(player) {
        var bar = '#' + player.id + '_superiorcontrolbar';
        var trl = '#' + player.id + '_timeSliderRail';
		var offset = ($.fn.bapplayerUtils.isNull(window.pageXOffset))? document.documentElement.scrollLeft:window.pageXOffset;

        $(bar).css('cursor', 'pointer');
        $(trl).css('cursor', 'pointer');

        $(bar).mousedown(function (evt) {
            controlbars[player.id].scrubber = 'time';
       });

        $(bar).mouseup(function (evt) {
            evt.stopPropagation();
            sliderUp(evt.pageX,player);
        });

        $(bar).mousemove(function (evt) {
            if (controlbars[player.id].scrubber == 'time') {
                controlbars[player.id].mousedown = true;
                var xps = evt.pageX - $(trl).offset().left  -offset;
                $('#' + player.id + '_timeSliderThumb').css('left', xps);
            }
        });
    }

    /** Set the volume drag handler. **/
    function addVolumeSlider(player) {
       var bar = '#' + player.id + '_volumecontainer';
       $(bar).css('cursor', 'pointer');

       $(bar).mousedown(function (evt) {
           var m =(evt.target.id.match(/(volumeSliderRail|volumeSliderProgress)/));
           if(m){
                controlbars[player.id].scrubber = 'volume';
            }
       });

       $(bar).mouseup(function (evt) {
           var m =(evt.target.id.match(/(volumeSliderRail|volumeSliderProgress)/));
           if(m){
                evt.stopPropagation();
                sliderUp(evt.pageX,player);
            }
        });
    }


    /** The slider has been moved up. **/
    function sliderUp(msx,player) {
        controlbars[player.id].mousedown = false;
		var offset = ($.fn.bapplayerUtils.isNull(window.pageXOffset))? document.documentElement.scrollLeft:window.pageXOffset;
        if (controlbars[player.id].scrubber == 'time') {
			
            var xps = msx - $('#' + player.id + '_timeSliderRail').offset().left +offset;
            var wid = $('#' + player.id + '_timeSliderRail').width();
            var pos = xps / wid * controlbars[player.id].currentDuration;
            if (pos < 0) {
                pos = 0;
            } else if (pos > controlbars[player.id].currentDuration) {
                pos = controlbars[player.id].currentDuration-3;
            }
            player.seek(pos);
            if (player.model.state != $.fn.bapplayer.states.PLAYING) {
                player.play();
            }
        } else if (controlbars[player.id].scrubber == 'volume') {
            var xps = msx - $('#' + player.id + '_volumecontainer').offset().left - offset;
            var wid = $('#' + player.id + '_volumeSliderRail').width();
            var pct = Math.round(xps / wid * 100);
            if (pct < 0) {
                pct = 0;
            } else if (pct > 100) {
                pct = 100;
            }
            if (player.model.mute) {
                player.mute(false);
            }
            player.volume(pct);
        }
        controlbars[player.id].scrubber = 'none';
    }


    /** Update the buffer percentage. **/
    function bufferHandler(event) {
        if (!$.fn.bapplayerUtils.isNull(event.bufferPercent)) {
            controlbars[event.id].currentBuffer = event.bufferPercent;
        }
        var wid = $('#' + event.id + '_timeSliderRail').width();
        var bufferWidth = isNaN(Math.round(wid * controlbars[event.id].currentBuffer / 100)) ? 0 : Math.round(wid * controlbars[event.id].currentBuffer / 100);
        $('#' + event.id + '_timeSliderBuffer').css('width', bufferWidth);
    }


    /** Update the mute state. **/
    function muteHandler(event) {
        if (event.mute) {
            $('#' + event.id + '_muteButton').css('display', 'none');
            $('#' + event.id + '_unmuteButton').css('display', 'block');
            $('#' + event.id + '_volumeSliderProgress').css('display', 'none');
        } else {
            $('#' + event.id + '_muteButton').css('display', 'block');
            $('#' + event.id + '_unmuteButton').css('display', 'none');
            $('#' + event.id + '_volumeSliderProgress').css('display', 'block');
        }
    }

    /** Update the playback state. **/
    function stateHandler(event) {
		bap.stateListener(event.oldstate,event.newstate);
        // Handle the play / pause button
        if (event.newstate == $.fn.bapplayer.states.BUFFERING || event.newstate == $.fn.bapplayer.states.PLAYING) {
            $('#' + event.id + '_pauseButton').css('display', 'block');
            $('#' + event.id + '_playButton').css('display', 'none');
        } else {
            $('#' + event.id + '_pauseButton').css('display', 'none');
            $('#' + event.id + '_playButton').css('display', 'block');
        }

		if ($.fn.bapplayerControlbar.getRenderMode() == 'default') {
            // Show / hide progress bar
            if (event.newstate == $.fn.bapplayer.states.IDLE) {
                $('#' + event.id + '_timeSliderBuffer').css('display', 'none');
                $('#' + event.id + '_timeSliderProgress').css('display', 'none');
                $('#' + event.id + '_timeSliderThumb').css('display', 'none');
            } else {
                $('#' + event.id + '_timeSliderBuffer').css('display', 'block');
                if (event.newstate != $.fn.bapplayer.states.BUFFERING) {
                    $('#' + event.id + '_timeSliderProgress').css('display', 'block');
                    $('#' + event.id + '_timeSliderThumb').css('display', 'block');
                }
            }
        }
    }

    /** Handles event completion **/
    function completeHandler(event) {
        timeHandler($.extend(event, {
            position: 0,
            duration: controlbars[event.id].currentDuration
        }));
    }

    /** Update the playback time. **/
    function timeHandler(event) {
        if ($.fn.bapplayerControlbar.getRenderMode() == 'default') {
            if (!$.fn.bapplayerUtils.isNull(event.position)) {
                controlbars[event.id].currentPosition = event.position;
            }
            if (!$.fn.bapplayerUtils.isNull(event.duration)) {
                controlbars[event.id].currentDuration = event.duration;
            }
        try{
                var progress = (controlbars[event.id].currentPosition === controlbars[event.id].currentDuration === 0) ? 0 : controlbars[event.id].currentPosition / controlbars[event.id].currentDuration;
                var railWidth = $('#' + event.id + '_timeSliderRail').width();
                var thumbWidth = $('#' + event.id + '_timeSliderThumb').width();
                //  var railLeft = $('#' + event.id + '_timeSliderRail').position().left;
                var railLeft = 55;
                var progressWidth = isNaN(Math.round(railWidth * progress)) ? 0 : Math.round(railWidth * progress);
                var thumbPosition = railLeft + progressWidth;
                $('#' + event.id + '_timeSliderProgress').css('width', progressWidth);
                if (!controlbars[event.id].mousedown) {
                    $('#' + event.id + '_timeSliderThumb').css('left', thumbPosition);
                }
                $('#' + event.id + '_durationText').html(timeFormat(controlbars[event.id].currentDuration));
                $('#' + event.id + '_elapsedText').html(timeFormat(controlbars[event.id].currentPosition));
                //ad timeevent to playlist
               if( $.fn.bapplayerPlaylist.getType(event) != 'multitracks'){
                    $.fn.bapplayerPlaylist.showDefaultItemProgress(event);
               }else{
                    $.fn.bapplayerPlaylist.showMultiTrackItemProgress(event);
               }
                
            }catch(e){
                 $.fn.bapplayerUtils.log('!!!!!!!!!error in timeHandler',e);
            }
        }
    }

    /** Format the elapsed / remaining text. **/
    function timeFormat(sec) {
        str = '00:00';
        if (sec > 0) {
            str = Math.floor(sec / 60) < 10 ? '0' + Math.floor(sec / 60) + ':' : Math.floor(sec / 60) + ':';
            str += Math.floor(sec % 60) < 10 ? '0' + Math.floor(sec % 60) : Math.floor(sec % 60);
        }
        return str;
    }

    /** Flip the player size to/from full-browser-screen. **/
    function resizeHandler(event) {
        controlbars[event.id].width = event.width;
        controlbars[event.id].fullscreen = event.fullscreen;
        if (event.fullscreen) {
            $('#' + event.id + '_normalscreenButton').css('display', 'block');
            $('#' + event.id + '_fullscreenButton').css('display', 'none');
            // TODO
            /* if (true) {
            $(window).resize(function () {
            resizeBar(event.player);
            });
            }*/
        } else {
            $('#' + event.id + '_normalscreenButton').css('display', 'none');
            $('#' + event.id + '_fullscreenButton').css('display', 'block');
            // TODO
            // if (true) {
            // $(window).resize(null);
            // }
        }
        resizeBar(event);
        timeHandler(event);
        bufferHandler(event);
    }

    /** Resize the bapplayerControlbar. **/
    function resizeBar(event) {
        var lft = controlbars[event.id].left;
        var top = controlbars[event.id].top;
        var wid = controlbars[event.id].width;
        var hei = $('#' + event.id + '_controlbar').height();
        if (controlbars[event.id].position == 'over') {
            lft += 1 * controlbars[event.id].margin;
            top -= 1 * controlbars[event.id].margin + hei;
            wid -= 2 * controlbars[event.id].margin;
        }
        if (controlbars[event.id].fullscreen) {
            lft = controlbars[event.id].margin;
            top = $(window).height() - controlbars[event.id].margin - hei;
            wid = $(window).width() - 2 * controlbars[event.id].margin;
            $('#' + event.id + '_controlbar').css('z-index', 99);
        } else {
            $('#' + event.id + '_controlbar').css('z-index', 97);
        }
        $('#' + event.id + '_controlbar').css('left', lft);
        $('#' + event.id + '_controlbar').css('top', top);
    }


    /** Update the volume level. **/
    function volumeHandler(event) {
		
        try{
            var progress = isNaN(event.volume) ? 1 : event.volume / 100;
            var railWidth = $('#' + event.id + '_volumeSliderRail').width();
			railWidth=  (isNaN(Math.round(railWidth))|| railWidth == 0 ) ? 26 :railWidth;
            var railRight =  0;
            var progressWidth =  Math.round(railWidth * progress);
            $('#' + event.id + '_volumeSliderProgress').css('width', progressWidth);
            $('#' + event.id + '_volumeSliderProgress').css('right', (railWidth + railRight - progressWidth));
        }catch(e){
            $.fn.bapplayerUtils.log('!!!!!!!!!error in volumeHnadler',e);
         }
    }
  
})(jQuery);

/**
* CONTROLLER COMPONENT
*
* @author zach
* @version 1.0alpha
* @lastmodifieddate 2010-04-11
*/
(function ($) {

    var mediaParams = function () {
        return {
            volume: 100,
            fullscreen: false,
            mute: false,
            width: 640,
            height: 360,
            duration: 0,
            source: 0,
            sources: [],
            buffer: 0,
            position: 0,
            state: $.fn.bapplayer.states.IDLE
        };
    };

    $.fn.bapplayerController = function (player) {
        return {
            play: play(player),
            pause: pause(player),
            seek: seek(player),
            stop: stop(player),
            volume: volume(player),
            mute: mute(player),
            resize: resize(player),
            fullscreen: fullscreen(player),
            load: load(player),
            mediaInfo: mediaInfo(player),
            addEventListener: addEventListener(player),
            removeEventListener: removeEventListener(player),
            sendEvent: sendEvent(player)
        };
    };

    function play(player) {
        return function () {
            try {
                switch (player.model.state) {
                    case $.fn.bapplayer.states.IDLE:
                      if (bap.nav.currentMimeType ==  bap.mimeTypes.VideoStream || bap.nav.currentMimeType ==bap.mimeTypes.AudioStream) {//tweaking for stream pause
                            player.media.play();
                        } else {
                          // player.addEventListener($.fn.bapplayer.events.BAPPLAYER_MEDIA_BUFFER_FULL, player.media.play);
                          // player.media.load(player.model.sources);
						   player.media.play();
                    }
                        break;
                    case $.fn.bapplayer.states.PAUSED:
                        player.media.play();
                        break;
                   
                }

                return $.bapplayer(player.id);
            } catch (err) {
                player.sendEvent($.fn.bapplayer.events.BAPPLAYER_ERROR, err);
            }
            return false;
        };
    }

    /** Switch the pause state of the player. **/
    function pause(player) {
        return function () {
            try {
                switch (player.model.state) {
                    case $.fn.bapplayer.states.PLAYING:
                    case $.fn.bapplayer.states.BUFFERING:
                        player.media.pause();
                        break;
                }
                return $.bapplayer(player.id);
            } catch (err) {
                player.sendEvent($.fn.bapplayer.events.BAPPLAYER_ERROR, err);
            }
            return false;
        };
    }

    /** Seek to a position in the video. **/
    function seek(player) {

        return function (position) {
            try {
                switch (player.model.state) {
                    case $.fn.bapplayer.states.PLAYING:
                    case $.fn.bapplayer.states.PAUSED:
                    case $.fn.bapplayer.states.BUFFERING:
                        player.media.seek(position);
                        break;
                     case $.fn.bapplayer.states.IDLE:  
                        player.model.seekPosition = position;
                        player.media.play();
                        break;
                }
                return $.bapplayer(player.id);
            } catch (err) {
                player.sendEvent($.fn.bapplayer.events.BAPPLAYER_ERROR, err);
            }
            return false;
        };
    }

    /** Stop playback and loading of the video. **/
    function stop(player) {
        return function () {
            try {
                player.media.stop();
                return $.bapplayer(player.id);
            } catch (err) {
                player.sendEvent($.fn.bapplayer.events.BAPPLAYER_ERROR, err);
            }
            return false;
        };
    }

    /** Get / set the video's volume level. **/
    function volume(player) {
        return function (arg) {
            try {
                switch ($.fn.bapplayerUtils.typeOf(arg)) {
                    case "function":
                        player.addEventListener($.fn.bapplayer.events.BAPPLAYER_MEDIA_VOLUME, arg);
                        break;
                    case "number":
                        player.media.volume(arg);
                        return true;
                    case "string":
                        player.media.volume(parseInt(arg, 10));
                        return true;
                    default:
                        return player.model.volume;
                }
                return $.bapplayer(player.id);
            } catch (err) {
                player.sendEvent($.fn.bapplayer.events.BAPPLAYER_ERROR, err);
            }
            return false;
        };
    }

    /** Get / set the mute state of the player. **/
    function mute(player) {
        return function (arg) {
            try {
                switch ($.fn.bapplayerUtils.typeOf(arg)) {
                    case "function":
                        player.addEventListener($.fn.bapplayer.events.BAPPLAYER_MEDIA_MUTE, arg);
                        break;
                    case "boolean":
                        player.media.mute(arg);
                        break;
                    default:
                        return player.model.mute;
                }
                return $.bapplayer(player.id);
            } catch (err) {
                player.sendEvent($.fn.bapplayer.events.BAPPLAYER_ERROR, err);
            }
            return false;
        };
    }

    /** Resizes the video **/
    function resize(player) {
        return function (arg1, arg2) {
            try {
                switch ($.fn.bapplayerUtils.typeOf(arg1)) {
                    case "function":
                        player.addEventListener($.fn.bapplayer.events.BAPPLAYER_RESIZE, arg1);
                        break;
                    case "number":
                        player.media.resize(arg1, arg2);
                        break;
                    case "string":
                        player.media.resize(arg1, arg2);
                        break;
                    default:
                        break;
                }
                return $.bapplayer(player.id);
            } catch (err) {
                player.sendEvent($.fn.bapplayer.events.BAPPLAYER_ERROR, err);
            }
            return false;
        };
    }

    /** Jumping the player to/from fullscreen. **/
    function fullscreen(player) {
        return function (arg) {
            try {
                switch ($.fn.bapplayerUtils.typeOf(arg)) {
                    case "function":
                        player.addEventListener($.fn.bapplayer.events.BAPPLAYER_FULLSCREEN, arg);
                        break;
                    case "boolean":
                        player.media.fullscreen(arg);
                        break;
                    default:
                        return player.model.fullscreen;
                }
                return $.bapplayer(player.id);
            } catch (err) {
                player.sendEvent($.fn.bapplayer.events.BAPPLAYER_ERROR, err);
            }
            return false;
        };
    }

    /** Loads a new video **/
    function load(player) {
        $.fn.bapplayerUtils.log('in load controller', '');
        return function (arg) {
            try {
                switch ($.fn.bapplayerUtils.typeOf(arg)) {
                    case "function":
                        player.addEventListener($.fn.bapplayer.events.BAPPLAYER_MEDIA_LOADED, arg);
                        break;
                    default:
                        player.media.load(arg);
                        break;
                }
                return $.bapplayer(player.id);
            } catch (err) {

                player.sendEvent($.fn.bapplayer.events.BAPPLAYER_ERROR, err);
            }
            return false;
        };
    }

    /** Returns the meta **/
    function mediaInfo(player) {
        return function () {
            try {
                var result = {};
                for (var mediaParam in mediaParams()) {
                    result[mediaParam] = player.model[mediaParam];
                }
                return result;
            } catch (err) {
                $.fn.bapplayerUtils.log("error", err);
            }
            return false;
        };
    }

    /** Add an event listener. **/
    function addEventListener(player) {
        return function (type, listener, count) {
            try {
                if (player.listeners[type] === undefined) {
                    player.listeners[type] = [];
                }
                player.listeners[type].push({
                    listener: listener,
                    count: count
                });
            } catch (err) {
                $.fn.bapplayerUtils.log("error", err);
            }
            return false;
        };
    }

    /** Remove an event listener. **/
    function removeEventListener(player) {
        return function (type, listener) {
            try {
                var test = player.listeners[type];
                for (var listenerIndex in test) {
                    if (test[listenerIndex].listener == listener) {
                        player.listeners[type].splice(listenerIndex, 1);
                        break;
                    }
                }
            } catch (err) {
                $.fn.bapplayerUtils.log("error", err);
            }
            return false;
        };
    }

    /** Send an event **/
    function sendEvent(player) {
		
        return function (type, data) {
            data = $.extend({
                id: player.id,
                version: player.version
            }, data);
            for (var listenerIndex in player.listeners[type]) {
                try {
                    player.listeners[type][listenerIndex].listener(data);
                } catch (err) {
                    $.fn.bapplayerUtils.log("There was an error while handling a listener" + type + ' - ' + data.position, err);
                }
                if (player.listeners[type][listenerIndex].count === 1) {
                    delete player.listeners[type][listenerIndex];
                } else if (player.listeners[type][listenerIndex].count > 0) {
                    player.listeners[type][listenerIndex].count = player.listeners[type][listenerIndex].count - 1;
                }
            }
        };
    }
})(jQuery);


/**
* CORE COMPONENT (initialization, API).
*
* @author jeroen
* @version 1.0alpha
* @lastmodifiedauthor zach
* @lastmodifieddate 2010-04-11
*/
(function ($) {

    /** Map with all players on the page. **/
    var players = {};

    /** Hooking the controlbar up to jQuery. **/
    $.fn.bapplayer = function (opt) {
        return this.each(function () {
            opt.id = this.id;
            return setupBAPPlayer($(this), 0, opt);
        });
    };

    function setupBAPPlayer(player, step, options) {
        try {
            switch (step) {
                case 0:
                    var model = $.fn.bapplayerModel(player, options);
                    var bapplayer = {
                        model: model,
                        listeners: {}
                    };
                    return setupBAPPlayer(bapplayer, step + 1,options);
                case 1: //create Controller
                    $.fn.bapplayerUtils.log("setupJWPlayer", "step 1");
                    player.controller = $.fn.bapplayerController(player);
                    players[player.model.config.id] = player;
                    setupBAPPlayer($.extend(player, api(player)), step + 1,options);
                    return player;
                case 2: //create View
                    $.fn.bapplayerUtils.log("setupJWPlayer", "step 2");
                    $.fn.bapplayerView(player);
                    setupBAPPlayer(player, step + 1,options);
                    break;
                case 3: //set the player
                    $.fn.bapplayerUtils.log("setupJWPlayer", "step 3");
                    $.fn.bapplayerModel.setActiveMediaProvider(player);
                    setupBAPPlayer(player, step + 1,options);
                     break;
             case 4: //set the ImagHolder
                    $.fn.bapplayerUtils.log("setupJWPlayer", "step 4");
                    $.fn.bapplayerImageViewer($.bapplayer(player.id));
                    setupBAPPlayer(player, step + 1,options);
                    break;
                case 5: //create Topbar
                    $.fn.bapplayerUtils.log("setupJWPlayer", "step 5");
                    $.fn.bapplayerTopBar($.bapplayer(player.id));
                    setupBAPPlayer(player, step + 1,options);
                    break;
               case 6: //create Playlist
                    $.fn.bapplayerUtils.log("setupJWPlayer", "step 6");
                    $.fn.bapplayerPlaylist($.bapplayer(player.id));
                    setupBAPPlayer(player, step + 1,options);
                    break;
               case 7: //create  ControlBar
                   $.fn.bapplayerUtils.log("setupJWPlayer", "step 7");
                    $.fn.bapplayerControlbar($.bapplayer(player.id));
                    setupBAPPlayer(player, step + 1,options);
                    break;
                 case 8: //create InfoBar
                    $.fn.bapplayerUtils.log("setupJWPlayer", "step 8");
                    $.fn.bapplayerInfoBar($.bapplayer(player.id));
                    setupBAPPlayer(player, step + 1,options);
                    break;
                case 9:
                    $.fn.bapplayerUtils.log("setupJWPlayer Last step", "step 9");
                    player.sendEvent($.fn.bapplayer.events.BAPPLAYER_READY);
                    break;
           
            }
        } catch (err) {
            $.fn.bapplayerUtils.log("Setup failed at step " + step, err);
        }
    }

    /** Map with config for the controlbar plugin. **/
    $.fn.bapplayer.defaults = {
        controlbar: 'none',
        autostart: false,
        height: 360,
        volume: 100,
        width: 640,
        mute: false,
        bufferlength: 5,
        start: 0,
        position: 0,
        allowfullscreen: true,
        background: 'http://static.src.bap/swf/transparent_bg.png',
        backcolor:'FFFFFF',
		screencolor: '',
        debug: 'none',
        repeat: true,
        playerready: '$.fn.bapplayerMediaFlash.playerReady',
        stretching: 'exactfit',
		'rtmp.subscribe':true
    };


    /** A factory for API calls that either set listeners or return data **/
    function dataListenerFactory(player, dataType, eventType) {
        return function (arg) {
            switch ($.fn.bapplayerUtils.typeOf(arg)) {
                case "function":
                    if (!$.fn.bapplayerUtils.isNull(eventType)) {
                        player.addEventListener(eventType, arg);
                    }
                    break;
                default:
                    if (!$.fn.bapplayerUtils.isNull(dataType)) {
                        return player.controller.mediaInfo()[dataType];
                    }
                    return player.controller.mediaInfo();
            }
            return $.bapplayer(player.id);
        };
    }

    function api(player) {
        if (!$.fn.bapplayerUtils.isNull(player.id)) {
            return player;
        }
        return {
            play: player.controller.play,
            pause: player.controller.pause,
            stop: player.controller.stop,
            seek: player.controller.seek,

            resize: player.controller.resize,
            fullscreen: player.controller.fullscreen,
            volume: player.controller.volume,
            mute: player.controller.mute,
            load: player.controller.load,

            addEventListener: player.controller.addEventListener,
            removeEventListener: player.controller.removeEventListener,
            sendEvent: player.controller.sendEvent,

            ready: dataListenerFactory(player, null, $.fn.bapplayer.events.BAPPLAYER_READY),
            error: dataListenerFactory(player, null, $.fn.bapplayer.events.BAPPLAYER_ERROR),
            complete: dataListenerFactory(player, null, $.fn.bapplayer.events.BAPPLAYER_MEDIA_COMPLETE),
            state: dataListenerFactory(player, 'state', $.fn.bapplayer.events.BAPPLAYER_PLAYER_STATE),
            buffer: dataListenerFactory(player, 'buffer', $.fn.bapplayer.events.BAPPLAYER_MEDIA_BUFFER),
            time: dataListenerFactory(player, null, $.fn.bapplayer.events.BAPPLAYER_MEDIA_TIME),
            position: dataListenerFactory(player, 'position'),
            duration: dataListenerFactory(player, 'duration'),
            width: dataListenerFactory(player, 'width'),
            height: dataListenerFactory(player, 'height'),
            meta: dataListenerFactory(player, null, $.fn.bapplayer.events.BAPPLAYER_MEDIA_META),

            id: player.model.config.id,
            config: player.model.config,
            version: '0.1-alpha'
        };
    }

    function bapplayer(selector) {
        if ($.fn.bapplayerUtils.isNull(selector)) {
            for (var player in players) {
                return api(players[player]);
            }
        } else {
            if (selector.indexOf('#') === 0) {
                selector = selector.substr(1, selector.length);
            }
            return api(players[selector]);
        }
        return null;
    }
    
    /* Fonction appelée par bap (clique sur un chapitre d'une entrée de contenu)  pour accéder directement à un chapitre */
    function seekTo(obj,id){
           $.fn.bapplayerPlaylist.loadItem(obj.item,obj.Id,players[id]);
    }

    function togglePlay(id){
		players[id].model.domelement[0].sendEvent("PLAY")

    }

    function forceState(id,state){
		if( players[id].model.domelement[0].sendEvent){
			if(state){
				players[id].model.domelement[0].sendEvent('PLAY',state);
			}else{
					 if( bap.nav.main.match(/(direct|special|continu)/))
						players[id].model.domelement[0].sendEvent('STOP');
					else
						players[id].model.domelement[0].sendEvent('PLAY',state);
			}
		}
    }

/* Fonction appelée par bap pour afficher les métas radio*/
    function loadMeta(meta,id){
          $.fn.bapplayerInfoBar.updateMetaRadio(players[id],meta);
    }

	$.fn.bapplayer.getPlayer= function (id){
            return players[id];
    }

    $.fn.bapplayer.states = {
        IDLE: 'IDLE',
        BUFFERING: 'BUFFERING',
        PLAYING: 'PLAYING',
        PAUSED: 'PAUSED'
    };

    $.fn.bapplayer.events = {
        BAPPLAYER_READY: 'bapplayerReady',
        BAPPLAYER_FULLSCREEN: 'bapplayerFullscreen',
        BAPPLAYER_RESIZE: 'bapplayerResize',
        BAPPLAYER_ERROR: 'bapplayerError',
        BAPPLAYER_MEDIA_BUFFER: 'bapplayerMediaBuffer',
        BAPPLAYER_MEDIA_BUFFER_FULL: 'bapplayerMediaBufferFull',
        BAPPLAYER_MEDIA_ERROR: 'bapplayerMediaError',
        BAPPLAYER_MEDIA_LOADED: 'bapplayerMediaLoaded',
        BAPPLAYER_MEDIA_COMPLETE: 'bapplayerMediaComplete',
        BAPPLAYER_MEDIA_TIME: 'bapplayerMediaTime',
        BAPPLAYER_MEDIA_VOLUME: 'bapplayerMediaVolume',
        BAPPLAYER_MEDIA_META: 'bapplayerMediaMeta',
        BAPPLAYER_MEDIA_MUTE: 'bapplayerMediaMute',
        BAPPLAYER_PLAYER_STATE: 'bapplayerPlayerState'
    };

    /** Extending jQuery **/
    $.extend({
        'bapplayer': bapplayer,
        'seekTo':seekTo,
        'loadMeta':loadMeta,
        'togglePlay':togglePlay,
        'forceState':forceState
    });
})(jQuery);


/**
* FLASH MEDIA COMPONENT
*
* @author zach
* @version 1.0alpha
* @lastmodifieddate 2010-04-12
*/
(function ($) {

    var controllerEvents = {
        ERROR: $.fn.bapplayer.events.BAPPLAYER_ERROR,
        ITEM: "ITEM",
        MUTE: $.fn.bapplayer.events.BAPPLAYER_MEDIA_MUTE,
        PLAY: "PLAY",
        PLAYLIST: "PLAYLIST",
        RESIZE: $.fn.bapplayer.events.BAPPLAYER_RESIZE,
        SEEK: "SEEK",
        STOP: "STOP",
        VOLUME: $.fn.bapplayer.events.BAPPLAYER_MEDIA_VOLUME
    };

    var modelEvents = {
        BUFFER: $.fn.bapplayer.events.BAPPLAYER_MEDIA_BUFFER,
        ERROR: $.fn.bapplayer.events.BAPPLAYER_MEDIA_ERROR,
        LOADED: $.fn.bapplayer.events.BAPPLAYER_MEDIA_LOADED,
        META: $.fn.bapplayer.events.BAPPLAYER_MEDIA_META,
        STATE: $.fn.bapplayer.events.BAPPLAYER_PLAYER_STATE,
        TIME: $.fn.bapplayer.events.BAPPLAYER_MEDIA_TIME
    };

    var viewEvents = {
        FULLSCREEN: "FULLSCREEN",
        ITEM: "ITEM",
        LINK: "LINK",
        LOAD: "LOAD",
        MUTE: "MUTE",
        NEXT: "NEXT",
        PLAY: "PLAY",
        PREV: "PREV",
        REDRAW: "REDRAW",
        SEEK: "SEEK",
        STOP: "STOP",
        TRACE: "TRACE",
        VOLUME: "VOLUME"
    };


    $.fn.bapplayerMediaFlash = function (player) {
        var options = {};
        var media = {
            play: play(player),
            pause: pause(player),
            seek: seek(player),
            volume: volume(player),
            mute: mute(player),
            fullscreen: fullscreen(player),
            load: load(player),
            resize: resize(player),
            state: $.fn.bapplayer.states.IDLE,
            hasChrome: true
        };

        player.media = media;
        $.fn.bapplayerView.embedFlash(player, options);
        addEventListeners(player);
    };

    function stateHandler(event, player) {
        player.model.state = event.newstate;
        player.sendEvent($.fn.bapplayer.events.BAPPLAYER_PLAYER_STATE, {
            oldstate: event.oldstate,
            newstate: event.newstate
        });
    }

    function errorHandler(event, player) {
        if (player.model.sources.provider == 'icecast') {
            $.fn.bapplayerUtils.log("Connexion à la radio echoue ", 'ERROR');
            $.fn.bapplayerInfoBar.showRadioError();
        }
    }


    function addEventListeners(player) {
        if (player.model.domelement[0].addControllerListener === undefined) {
            setTimeout(function () {
                addEventListeners(player);
            }, 100);
            return;
        }
        $.fn.bapplayerMediaFlash.forwarders[player.id] = {};
        var video = $("#" + player.id);
        for (var controllerEvent in controllerEvents) {
            $.fn.bapplayerMediaFlash.forwarders[player.id][controllerEvents[controllerEvent]] = forwardFactory(controllerEvents[controllerEvent], player);
            video[0].addControllerListener(controllerEvent, "$.fn.bapplayerMediaFlash.forwarders." + player.id + "." + controllerEvents[controllerEvent]);
        }
        for (var modelEvent in modelEvents) {
            $.fn.bapplayerMediaFlash.forwarders[player.id][modelEvents[modelEvent]] = forwardFactory(modelEvents[modelEvent], player);
            video[0].addModelListener(modelEvent, "$.fn.bapplayerMediaFlash.forwarders." + player.id + "." + modelEvents[modelEvent]);
        }

        $.fn.bapplayerMediaFlash.forwarders[player.id][viewEvents.MUTE] = forwardFactory(viewEvents.MUTE, player);
        video[0].addViewListener(viewEvents.MUTE, "$.fn.bapplayerMediaFlash.forwarders." + player.id + "." + viewEvents.MUTE);
    }

    function forwardFactory(type, player) {
        return function (event) {
            forward(event, type, player);
        };
    }

    $.fn.bapplayerMediaFlash.playerReady = function (evt) {
		addEventListeners($.bapplayer(evt.id));

		$.bapplayer(evt.id).media.load($.bapplayer(evt.id).model.objet) //load par défaut
		//Déclenchement du listener 
		clearInterval(bap.listener.timer);
		bap.listener.listen();
        bap.listener.timer = window.setInterval('bap.listener.listen()', 5000);   
			
	};

    $.fn.bapplayerMediaFlash.forwarders = {};

    function forward(event, type, player) {
        switch (type) {
            case $.fn.bapplayer.events.BAPPLAYER_MEDIA_META:
                player.sendEvent(type, event);
                break;
            case $.fn.bapplayer.events.BAPPLAYER_MEDIA_MUTE:
                player.model.mute = event.state;
                event.mute = event.state;
                player.sendEvent(type, event);
                break;
            case $.fn.bapplayer.events.BAPPLAYER_MEDIA_VOLUME:
                player.model.volume = event.percentage;
                event.volume = event.percentage;
                player.sendEvent(type, event);
                break;
            case $.fn.bapplayer.events.BAPPLAYER_MEDIA_RESIZE:
                player.model.fullscreen = event.fullscreen;
                player.model.height = event.height;
                player.model.width = event.width;
                player.sendEvent(type, event);
                break;
            case $.fn.bapplayer.events.BAPPLAYER_MEDIA_TIME:
                if (player.model.duration === 0) {
                    player.model.duration = event.duration;
                }
				
                if( $.fn.bapplayerImageViewer.getRenderState(player) &&  $.fn.bapplayerImageViewer.getLoadingRendered(player) &&  event.position > 0 ){
                    $.fn.bapplayerImageViewer.removeLoading(player);
                }
                player.model.position = event.position;
                player.sendEvent(type, event);
                break;
            case $.fn.bapplayer.events.BAPPLAYER_PLAYER_STATE:
                  //appelle la méthode de mise à jour de bap.
                if (event.newstate == "COMPLETED") {
                     $.fn.bapplayerPlaylist.goToTop(player);
                     player.sendEvent($.fn.bapplayer.events.BAPPLAYER_MEDIA_COMPLETE, event);
					 $.fn.bapplayerImageViewer.removeLoading(player);
                } else {
                     if(event.oldstate == 'BUFFERING' && event.newstate == 'PLAYING' && player.model.seekPosition != undefined){
                        player.media.seek(player.model.seekPosition);
                        player.model.seekPosition = undefined;
                     }
                     if(event.newstate == 'BUFFERING' && $.fn.bapplayerImageViewer.getRenderState(player) &&  !$.fn.bapplayerImageViewer.getLoadingRendered(player)){
                        $.fn.bapplayerImageViewer.showLoading(player);
                      }
                    stateHandler(event, player);
                }
                break;
            case $.fn.bapplayer.events.BAPPLAYER_MEDIA_BUFFER:
                event.bufferPercent = event.percentage;
                player.model.buffer = event.percentage;
                player.sendEvent(type, event);
                break;
            case $.fn.bapplayer.events.BAPPLAYER_ERROR:
               errorHandler(event,player);
                break;
            default:
                player.sendEvent(type, event);
                break;
        }
    }

    function play(player) {
        return function () {
            player.model.domelement[0].sendEvent("PLAY", true);
        };
    }

    /** Switch the pause state of the player. **/
    function pause(player) {
        return function () {
            player.model.domelement[0].sendEvent("PLAY", false);
        };
    }


    /** Seek to a position in the video. **/
    function seek(player) {
        return function (position) {
            player.model.domelement[0].sendEvent("SEEK", position);
        };
    }

    /** Stop playback and loading of the video. **/
    function stop(player) {
        return function () {
            player.model.domelement[0].sendEvent("STOP");
        };
    }

    /** Change the video's volume level. **/
    function volume(player) {
        return function (position) {
            player.model.domelement[0].sendEvent("VOLUME", position);
        };
    }

    /** Switch the mute state of the player. **/
    function mute(player) {
        return function (state) {
            if (((player.model.domelement[0].getConfig().mute === true) && (state === false)) || state) {
                player.model.domelement[0].sendEvent("MUTE", state);
            }
        };
    }

    /** Switch the fullscreen state of the player. **/
    function fullscreen(player) {
        return function (state) {
            player.model.fullscreen = state;
        };
    }
    /** Load a new video into the player. **/
    function load(player) {
        return function (obj) {
				try{	
					if(obj != undefined){
						$.fn.bapplayerModel.addSource(player, obj);
						try{
							player.model.domelement[0].sendEvent("SUBSCRIBE", obj.subscribe);
						}catch(e){}

						obj.section = (!$.fn.bapplayerUtils.isNull(obj.tracks))?"chambre-d-ecoute":(!$.fn.bapplayerUtils.isNull(obj.section))?obj.section:'icecast';
						if( bap.isCurrentObjectAndExtatique('#play_'+obj.Id +'_0')){ //mode extatique
								$.fn.bapplayerControlbar.remove(player);
								$.fn.bapplayerInfoBar.removeRadio(player);
								//build stream layout
								$.fn.bapplayerControlbar.buildStream(player);
								$.fn.bapplayerInfoBar.buildElements(player);
								$.fn.bapplayerTopBar.showStream(player,obj.Id);
							
						}else{ //mode normal
							if (obj.mimeType == bap.mimeTypes.AudioStream) {//radio
								//previous rendering default|stream
								if ($.fn.bapplayerControlbar.getRenderMode() == 'default' ||  $.fn.bapplayerControlbar.getRenderMode() == 'stream' ||  $.fn.bapplayerControlbar.getRenderMode() == 'none') {//si en cours de lecture ou d'affichage
									//remove 
									$.fn.bapplayerControlbar.remove(player);
									$.fn.bapplayerInfoBar.removeRadio(player);

									//build
									$.fn.bapplayerControlbar.buildRadio(player);
									$.fn.bapplayerInfoBar.buildElements(player);
									
								}
								$.fn.bapplayerTopBar.showRadio(player,obj.Id);

							} else if(obj.mimeType == bap.mimeTypes.VideoStream)  { // stream
								
								if ($.fn.bapplayerControlbar.getRenderMode() == 'default' || $.fn.bapplayerControlbar.getRenderMode() == 'radio' || $.fn.bapplayerControlbar.getRenderMode() == 'none' ){
									//remove
									$.fn.bapplayerControlbar.remove(player);
									$.fn.bapplayerInfoBar.removeRadio(player);
									//build
									$.fn.bapplayerControlbar.buildStream(player);
									$.fn.bapplayerInfoBar.buildElements(player);
								}
								$.fn.bapplayerTopBar.showStream(player,obj.Id);
								

							}else{ //default
								//previous rendering stream|radio
								if ($.fn.bapplayerControlbar.getRenderMode() == 'stream' || $.fn.bapplayerControlbar.getRenderMode() == 'radio'  ||  $.fn.bapplayerControlbar.getRenderMode() == 'none') {
									//remove 
									$.fn.bapplayerControlbar.remove(player);
								   
									//build
									$.fn.bapplayerControlbar.buildDefault(player);
									$.fn.bapplayerInfoBar.buildElements(player);

									$.fn.bapplayerTopBar.showDefault(player,obj.Id);
								}
							}
						}
						//Playlist
						$.fn.bapplayerPlaylist.build(obj,player);
						
						$.fn.bapplayerInfoBar.loadInfos(obj,player);

						//reconstruct an object with specific parameters
						var newObj = new Object();
						newObj.file= obj.file;
						newObj.provider= obj.provider;
						newObj.streamer= obj.streamer;

						//load fichier ou seek à la position désiré (chapitre);

					  (obj.tracks != null)? player.model.domelement[0].sendEvent("LOAD", obj.tracks[0]): player.model.domelement[0].sendEvent("LOAD", newObj);
						//if(obj.provider != "icecast"){
							//player.model.domelement[0].sendEvent("PLAY", true);
						//}
						(obj.section == 'palmares-interactif')? bap.chart.deactivateVote():'';
					}
			}catch(e){
				$.fn.bapplayerUtils.log(' in erreur load:', e.message);
			}
		};
    }
    /** Resizes the video **/
    function resize(player) {
        return function (width, height) {
            player.model.width = width;
            player.model.height = height;
            player.css("width", width);
            player.css("height", height);
            player.sendEvent($.fn.bapplayer.events.BAPPLAYER_MEDIA_RESIZE, {
                width: width,
                hieght: height
            });
        };
    }
})(jQuery);


/**
* PLAYER MODEL COMPONENT
*
* @author zach
* @version 1.0alpha
* @lastmodifieddate 2010-04-11
*/
(function ($) {
    var bapplayerid = 1;
    
    var models={};

    var modelParams = {
        volume: 100,
        fullscreen: false,
        mute: false,
        start: 0,
        width: 640,
        height: 360,
        duration: 0
    };

    function createModel() {
        return {
            sources: {},
            state: $.fn.bapplayer.states.IDLE,
            source: 0,
            buffer: 0,
            type:''
        };
    }

    $.fn.bapplayerModel = function (domElement, options) {
        var model = createModel();
        model.config = $.extend(true, {}, $.fn.bapplayer.defaults, $.fn.bapplayerParse(domElement[0]), options);
      
        if ($.fn.bapplayerUtils.isNull(model.config.id)) {
            model.config.id = "bapplayer_" + bapplayerid++;
        }
        model.objet = options.obj;
        model.sources = model.config.sources;
        delete model.config.sources;
        model.domelement = domElement;
        for (var modelParam in modelParams) {
            if (!$.fn.bapplayerUtils.isNull(model.config[modelParam])) {
                model[modelParam] = model.config[modelParam];
            } else {
                model[modelParam] = modelParams[modelParam];
            }
        }
		models[model.config.id] = model;
       return models[model.config.id];
    };

    $.fn.bapplayerModel.addSource = function (player, obj) {
		models[player.id].objet = obj;
		models[player.id].type = obj.provider;
        models[player.id].sources = obj;
        models[player.id].source = 0;
    }

    $.fn.bapplayerModel.getProvider= function (player){
            return models[player.id].type;

    }

    $.fn.bapplayerModel.setActiveMediaProvider = function (player) {
        if ($.fn.bapplayerUtils.supportsFlash && player.state != $.fn.bapplayer.states.PLAYING) {
            $.fn.bapplayerMediaFlash(player);
            return true;
        }
        return false;
    };
})(jQuery);


/**
* Parser for the JW Player.
*
* @author zach
* @version 1.0alpha
* @lastmodifieddate 2010-04-11
*/
(function ($) {

    var elementAttributes = {
        element: {
            width: 'width',
            height: 'height',
            id: 'id',
            'class': 'className',
            name: 'name'
        },
        media: {
            src: 'file',
            preload: 'preload',
            autoplay: 'autostart',
            loop: 'repeat',
            controls: 'controls'
        },
        source: {
            src: 'file',
            type: 'type',
            media: 'media'
        },
        video: {
            poster: 'image'
        }
    };

    var parsers = {};

    $.fn.bapplayerParse = function (player) {
        return parseElement(player);
    };

    function getAttributeList(elementType, attributes) {
        if (attributes === undefined) {
            attributes = elementAttributes[elementType];
        } else {
            $.extend(attributes, elementAttributes[elementType]);
        }
        return attributes;
    }

    function parseElement(domElement, attributes) {
        if (parsers[domElement.tagName.toLowerCase()] && (attributes === undefined)) {
            return parsers[domElement.tagName.toLowerCase()](domElement);
        } else {
            attributes = getAttributeList('element', attributes);
            var configuration = {};
            for (var attribute in attributes) {
                if (attribute != "length") {
                    var value = $(domElement).attr(attribute);
                    if (!(value === "" || value === undefined)) {
                        configuration[attributes[attribute]] = $(domElement).attr(attribute);
                    }
                }
            }
            configuration.screencolor = (($(domElement).css("background-color") == "transparent") || ($(domElement).css("background-color") == "rgba(0, 0, 0, 0)")) ? "black" : $(domElement).css("background-color");
            configuration.plugins = {};
            return configuration;
        }
    }
})(jQuery);


/**
* UTILS
*
* @author jeroen
* @version 1.0alpha
* @lastmodifiedauthor zach
* @lastmodifieddate 2010-04-11
*/
(function ($) {

    /** Constructor **/
    $.fn.bapplayerUtils = function () {
        return this.each(function () {
        });
    };

    //http://old.nabble.com/jQuery-may-add-$.browser.isiPhone-td11163329s27240.html
    $.fn.bapplayerUtils.isiPhone = function () {
        var agent = navigator.userAgent.toLowerCase();
        return agent.match(/iPhone/i);
    };

    $.fn.bapplayerUtils.isiPad = function () {
        var agent = navigator.userAgent.toLowerCase();
        return agent.match(/iPad/i);
    };

    /** Check if this client supports Flash player 9.0.115+ (FLV/H264). **/
    $.fn.bapplayerUtils.supportsFlash = function () {
        var version = '0,0,0,0';
        try {
            try {
                var axo = new ActiveXObject('ShockwaveFlash.ShockwaveFlash.6');
                try {
                    axo.AllowScriptAccess = 'always';
                } catch (e) {
                    version = '6,0,0';
                }
            } catch (e) {
            }
            version = new ActiveXObject('ShockwaveFlash.ShockwaveFlash').GetVariable('$version').replace(/\D+/g, ',').match(/^,?(.+),?$/)[1];
        } catch (e) {
            try {
                if (navigator.mimeTypes['application/x-shockwave-flash'].enabledPlugin) {
                    version = (navigator.plugins['Shockwave Flash 2.0'] ||
					navigator.plugins['Shockwave Flash']).description.replace(/\D+/g, ",").match(/^,?(.+),?$/)[1];
                }
            } catch (e) {
            }
        }
        var major = parseInt(version.split(',')[0], 10);
        var minor = parseInt(version.split(',')[2], 10);
        if (major > 9 || (major == 9 && minor > 97)) {
            return true;
        } else {
            return false;
        }
    };

    /** Returns the extension of a file name **/
    $.fn.bapplayerUtils.extension = function (path) {
        return path.substr(path.lastIndexOf('.') + 1, path.length);
    };

    $.fn.bapplayerUtils.isNull = function (obj) {
        return ((obj === null) || (obj === undefined) || (obj === ""));
    };

    /** Gets an absolute file path based on a relative filepath **/
    $.fn.bapplayerUtils.getAbsolutePath = function (path) {
        if ($.fn.bapplayerUtils.isNull(path)) {
            return path;
        }
        if (isAbsolutePath(path)) {
            return path;
        }
        var protocol = document.location.href.substr(0, document.location.href.indexOf("://") + 3);
        var basepath = document.location.href.substring(protocol.length, (path.indexOf("/") === 0) ? document.location.href.indexOf('/', protocol.length) : document.location.href.lastIndexOf('/'));
        var patharray = (basepath + "/" + path).split("/");
        var result = [];
        for (var i = 0; i < patharray.length; i++) {
            if ($.fn.bapplayerUtils.isNull(patharray[i]) || patharray[i] == ".") {
                continue;
            } else if (patharray[i] == "..") {
                result.pop();
            } else {
                result.push(patharray[i]);
            }
        }
        return protocol + result.join("/");
    };

    function isAbsolutePath(path) {
        if ($.fn.bapplayerUtils.isNull(path)) {
            return;
        }
        var protocol = path.indexOf("://");
        var queryparams = path.indexOf("?");
        return (protocol > 0 && (queryparams < 0 || (queryparams > protocol)));
    }

    $.fn.bapplayerUtils.mapEmpty = function (map) {
        for (var val in map) {
            return false;
        }
        return true;
    };

    $.fn.bapplayerUtils.mapLength = function (map) {
        var result = 0;
        for (var val in map) {
            result++;
        }
        return result;
    };

    /** Dumps the content of an object to a string **/
    $.fn.bapplayerUtils.dump = function (object, depth) {
        if (object === null) {
            return 'null';
        } else if ($.fn.bapplayerUtils.typeOf(object) != 'object') {
            if ($.fn.bapplayerUtils.typeOf(object) == 'string') {
                return "\"" + object + "\"";
            }
            return object;
        }

        var type = $.fn.bapplayerUtils.typeOf(object);
        depth = (depth === undefined) ? 1 : depth + 1;
        var indent = "";
        for (var i = 0; i < depth; i++) {
            indent += "\t";
        }

        var result = (type == "array") ? "[" : "{";
        result += "\n" + indent;

        for (var i in object) {
            if (type == "object") {
                result += "\"" + i + "\": ";
            }
            result += $.fn.bapplayerUtils.dump(object[i], depth) + ",\n" + indent;
        }

        result = result.substring(0, result.length - 2 - depth) + "\n";

        result += indent.substring(0, indent.length - 1);
        result += (type == "array") ? "]" : "}";

        return result;
    };

    /** Returns the true type of an object **/
    $.fn.bapplayerUtils.typeOf = function (value) {
        var s = typeof value;
        if (s === 'object') {
            if (value) {
                if (value instanceof Array) {
                    s = 'array';
                }
            } else {
                s = 'null';
            }
        }
        return s;
    };

    /** Logger **/
    $.fn.bapplayerUtils.log = function (msg, obj) {
        try {
            if (obj) {
              //  console.log("%s: %o", msg, obj);
            } else {
              //  console.log($.fn.bapplayerUtils.dump(msg));
            }
        } catch (err) {
        }
        return this;
    };

    /**
    * split the id of the playlist item
    * @param id {String} the item
    * @returns {Array} ¸[0]= id [1]= index
    */
    $.fn.bapplayerUtils.splitHref = function (href) {
        var parts = href.split('#');
        var arr = parts[1].split('_');
        return arr;
    }

    /**
    * Deterine whether it is a multipist or single pist
    * @param obj {String} the item
    * @returns {Array} ¸[0]= id [1]= index
    */
    $.fn.bapplayerUtils.isMultiTrack = function (obj) {
        var multitrack = false;
        if ($.fn.bapplayerUtils.isNull(obj.file)) {
            multitrack = true
        }
        return multitrack;
    }
})(jQuery);


/**
* VIEW COMPONENT
*
* @author zach
* @version 1.0alpha
* @lastmodifieddate 2010-04-11
*/
(function ($) {
    $.fn.bapplayer.defaults = {
        controlbar: 'none',
        autostart: false,
        height: 360,
        volume: 100,
        width: 640,
        mute: false,
        bufferlength: 5,
        start: 0,
        position: 0,
        allowfullscreen: true,
        debug: 'none',
        background: 'http://static.src.bap/swf/transparent_bg.png',
        backcolor: 'FFFFFF',
        screencolor: '',
        repeat: true,
        playerready: '$.fn.bapplayerMediaFlash.playerReady',
        stretching: 'exactfit',
		'rtmp.subscribe':true
    };

    $.fn.bapplayer.flashParams = {
        allowscriptaccess: 'always',
        allowfullscreen: 'true',
        wmode: 'transparent'
    };
    var topContainer =  {};
    var btmContainer =  {};
    var playerWrapper =  {};
    var playlistWrapper =  {};


    $.fn.bapplayerView = function (player) {
        topContainer[player.model.config.id] = $("<input type='hidden' id='hidIdChapitre'/><div id='" + player.model.config.id + "_topcontainer' class='bapplayer_topcontainer'></div>");
        btmContainer[player.model.config.id] = $("<div id='" + player.model.config.id + "_btmcontainer' class='bapplayer_btmcontainer'></div>");
        playerWrapper[player.model.config.id] = $("<div id='" + player.model.config.id + "_maincontainer' class='bapplayer_maincontainer'><div id='" + player.model.config.id + "_middlecontainer' class='bapplayer_middlecontainer'><div id='" + player.model.config.id + "_playerwrapper' class='bapplayer_playerwrapper'></div></div></div>");
        playlistWrapper[player.model.config.id] = $("<div id='" + player.model.config.id + "_playlistwrapper' class='jScrollPaneContainer jScrollPaneScrollable bapplayer_playlistwrapper'  ></div>");

        player.model.domelement.wrap(playerWrapper[player.model.config.id]);
        
        $('#'+player.model.config.id+'_maincontainer').prepend(topContainer[player.model.config.id]);
        $('#'+player.model.config.id+'_maincontainer').append(btmContainer[player.model.config.id]);
        $('#'+player.model.config.id + "_middlecontainer").append(playlistWrapper[player.model.config.id]);

        player.model.domelement.parent().css({
            height: player.config.height + 'px',
            width: player.config.width + 'px',
            margin: 'auto',
            padding: 0
        });
		

        var display = ($.fn.bapplayerUtils.isiPhone() || !(navigator.plugins && navigator.mimeTypes && navigator.mimeTypes.length)) ? 'block' : 'none';
        player.model.domelement.css({
            position: 'absolute',
            width: player.model.config.width + 'px',
            height: player.model.config.height + 'px',
            top: 0,
            left: 0,
            'z-index': 0,
            margin: 'auto',
            display: display
        });
    };
	/*Append le c ontainer ON au container middle*/
	$.fn.bapplayerView.embedContainerOn = function () {
		$('#player1_middlecontainer').append('<div id="container_on"></div>');
		$('#container_on').append('<div id="onNext" class="bandeau"></div>');
		$('#container_on').append('<div id="onNow" class="bandeau"></div>');
		$('#onNext').hide();
		$('#onNow').hide();
		$('#container_on').hide();
	}
	$.fn.bapplayerView.showContainerOn = function () {
		$('#container_on').fadeIn('slow');
	}
	$.fn.bapplayerView.hideContainerOn = function () {
		$('#container_on').fadeOut('slow');
	}
	$.fn.bapplayerView.removeContainerOn = function () {
		$('#container_on').remove();
	}

    /** Embeds a Flash Player at the specified location in the DOM. **/
    $.fn.bapplayerView.embedFlash = function (player, options) {
         $.fn.bapplayerUtils.log("In embedFlash ", options);
        swfobject.embedSWF(
           player.model.config.flashplayer,
           player.model.config.id,
           "640",
           "360",
           "10.1.0",
           bap.staticURL + 'swf/expressInstall.swf',
           $.fn.bapplayer.defaults,
           $.fn.bapplayer.flashParams,
           { 'id': player.model.config.id, 'name': player.model.config.id },
            function(e){ 
                if(e.success){
                    player.model.domelement = $('#' + player.model.config.id);
						
                    $("#lecteur_installer").hide();
                     return false;
                }else{
                     $("#lecteur_installer").show();
                     $("#container_swf").hide();
                     return false;
                }
           }
		);
       
      
    };
})(jQuery);


/**
* Playlist
*
* @author dominic Fortin
* @version 1.0alpha
* @lastmodifieddate 2010-08-03
*/
(function ($) {
    var docked ={};
    var chapters ={};
    var totalItems={};
    var currentId={}; 
    var currentIdVote={}; 
    var currentIndex={}; 

    /*elements*/
    var player_container={};
    var playlist_container={};
    var playlist={};
    var type={}; //type default or multitrack
    var buffer={};
    var tab={};
    var nextBtn={};
    var prevBtn={};
    var vote={};

    $.fn.bapplayerPlaylist = function (player) {
        docked[player.id] = false;
        totalItems[player.id]  = 0;
        currentId[player.id] = 0;
        currentIndex[player.id] = 0;

        setElements(player);
    };

    /* Get all the elements of the playlist*/
    function setElements(player) {
        player_container[player.id]  = $('#'+player.id+'_playerwrapper');
        playlist_container[player.id]  = $('#'+player.id+'_playlistwrapper');
        playlist[player.id]  = $('<div id="'+player.id+'_playlist" class="playlist"></div>');
        buffer[player.id]  = '<div class="pl_buffer"></div>';
        tab[player.id]  = $('<div id="'+player.id+'_tab" class="tabIn playlist_tab"></div>');
        chapters[player.id]  = new Array();
    }

    /* Construit la playlist avec l'objet*/
    $.fn.bapplayerPlaylist.build = function (obj,player) {
        type[player.id] = (!$.fn.bapplayerUtils.isNull(obj.tracks))?'multitracks':'default'

        $(".pb").progressbar("option", "value", 0);
        nextBtn[player.id]  = $("#"+player.id+"_nextButton");
        prevBtn[player.id]  = $("#"+player.id+"_previousButton");

        chapters[player.id] = null;
        chapters[player.id] = new Array();
        
        playlist_container[player.id].empty();
        playlist[player.id].empty();
        
        currentIndex[player.id] = 0;
        currentId[player.id] =obj.Id;

        //valide l'item de départ
        obj.item = (obj.item != undefined)?obj.item:0; 
        currentIndex[player.id] =obj.item;

        //assign chapters if any
        if (!$.fn.bapplayerUtils.isNull(obj.chapters)) {
            $(".pb").progressbar("option", "value", 0);
            chapters[player.id] = obj.chapters;
            totalItems[player.id] = chapters[player.id].length;
            buildElements(player);
            show(player);
            updateCurrent(currentIndex[player.id],obj.Id,player);
        } else if(type[player.id] == 'multitracks'){ //si multitrack
             $(".pb").progressbar("option", "value", 0);
            chapters[player.id] = obj.tracks;
            totalItems[player.id] = chapters[player.id].length;
            buildElements(player);
            show(player);
            currentId[player.id] =chapters[player.id][0].Id;
            updateCurrent( currentIndex[player.id], currentId[player.id],player);
        }else{ //or assign the object itself
            chapters[player.id][0] = obj;
            totalItems[player.id] = chapters[player.id].length;
            hide(player); 
           updateCurrent( currentIndex[player.id],obj.Id,player);
        }
         

       if( type[player.id] != 'multitracks' && obj.item != 0){
          player.model.seekPosition = chapters[player.id][currentIndex[player.id]].Integer1;
        }
    }
    

    /* Make the playlist visible */
    function show(player) {
        playlist_container[player.id].show();
        playlist_container[player.id].css('height', '335px');
        player_container[player.id].css('margin-left', '0px');
        playlist[player.id].jScrollPane();

        if (docked[player.id]) {
            playlist_container[player.id].animate({ left: '-=280px' }, 'slow', 'easeOutCubic');
            player_container[player.id].animate({ marginLeft: "0px" }, 'slow', 'easeOutCubic');
            docked[player.id] = false;
        }
    }

    /* Remove the playlist*/
    function hide(player) {
        //set css
        playlist_container[player.id].empty();
        playlist_container[player.id].hide();
		if(bap.nav.currentMimeType !=  bap.mimeTypes.VideoStream){
			player_container[player.id].css('margin', ' 0 0 0 125px');
		}else{
			player_container[player.id].css('margin', '0 0 0 0');
		}
    }

    /* Build the items and assign their events*/
    function buildElements(player) {
        playlist_container[player.id].prepend(tab[player.id]);
        /* TAB */
		tab[player.id].toggle(
					function () {
							playlist_container[player.id].animate({left: '+=280px' }, 'slow', 'easeOutCubic', function (e) { playlist[player.id].hide(); });
									player_container[player.id].animate({ left: "180px" }, 'slow', 'easeOutCubic');
									tab[player.id].removeClass('tabIn');
									tab[player.id].addClass('tabOut');
									docked[player.id] = true;
					},
					function () {
						playlist[player.id].show();
									playlist_container[player.id].animate({ left: '-=280px'  }, 'slow', 'easeOutCubic');
									player_container[player.id].animate({left: "0px" }, 'slow', 'easeOutCubic');
									tab[player.id].removeClass('tabOut');
									tab[player.id].addClass('tabin');
									docked[player.id] = false;
					}
        );

        if(type[player.id] == 'multitracks'){
            buildMutltiTracksPlaylistItems(player);
        }else{
            buildDefaultPlaylistItems(player);
        }
       
        playlist[player.id].append(buffer[player.id]);
        playlist_container[player.id].append(playlist[player.id]);

        //set the progress bar on item
        $(".pb").progressbar();
    }
	

    function buildDefaultPlaylistItems(player){
       /* Build the playlist items */
        for (var i in chapters[player.id]) {
            var contentId = chapters[player.id][i].Id;
            chapters[player.id][i].palmaresId = chapters[player.id][i].Id
            chapters[player.id][i].Id = currentId[player.id];
            var id = "\#" + currentId[player.id] + "_" + i;

            var imageContent = '<img src="' + getImagePath(chapters[player.id][i].ImgURL)+ '" title="" width="60" height="60"/>';
            var title = '<p class="infosTitre">' + chapters[player.id][i].Title1 + '</p>';
            var description = '<p class="infosDescription">' + chapters[player.id][i].Title2 + '</p>';
            var l_item = $('<a href="' + id + '" class="pb" id="'+player.id+'_item' + i + '" rel="' + contentId + '"><span>' + imageContent + title + description + '</span></a>');

            playlist[player.id].append(l_item);
        }
        //kill old event if any
        $('a[id*='+player.id+'_item]').die('click');

        //bind the click event
        $('a[id*='+player.id+'_item]').live('click',function(e){
                var id = $.fn.bapplayerUtils.splitHref(this.href)[0];
                var index = $.fn.bapplayerUtils.splitHref(this.href)[1]
                $.fn.bapplayerUtils.log(' IN click: '+ id, 'currentIndex[player.id]:'+ currentIndex[player.id]+ 'state:'+ player.model.state);
                if (currentId[player.id] == id && currentIndex[player.id] == index) { //same song
                    if (player.model.state != $.fn.bapplayer.states.PLAYING) {
                        player.play();
                    } else if (player.model.state == $.fn.bapplayer.states.PLAYING) {
                        player.pause();
                    }
                } else { //change item
                    $.fn.bapplayerUtils.log(' IN click LESE Chnage item: '+ id, 'currentIndex[player.id]:'+ currentIndex[player.id]+ 'state:'+ player.model.state);
                    $.fn.bapplayerPlaylist.loadItem($.fn.bapplayerUtils.splitHref(this.href)[1],$.fn.bapplayerUtils.splitHref(this.href)[0],player);
                }
                return false;
        });
    }

     function buildMutltiTracksPlaylistItems(player){
         $.fn.bapplayerUtils.log(' IN buildMutltiTracksPlaylistItems','');
       /* Build the playlist items */
        for (var i in chapters[player.id]) {
            var id = "\#" + chapters[player.id][i].Id + "_" + i;

            var imageContent = '<img src="' + getImagePath(chapters[player.id][i].ImgURL)+ '" title="" width="60" height="60"/>';
            var title = '<p class="infosTitre">' + chapters[player.id][i].Title1 + '</p>';
            var description = '<p class="infosDescription">' + chapters[player.id][i].ParentTitle + '</p>';
            var l_item = $('<a href="' + id + '" class="pb" id="'+player.id+'_item' + i + '"><span>' + imageContent + title + description + '</span></a>');

            playlist[player.id].append(l_item);
        }
        //kill old event if any
        $('a[id*='+player.id+'_item]').die('click');
        //bind the click event
        $('a[id*='+player.id+'_item]').live('click', function (e) {
                var id = $.fn.bapplayerUtils.splitHref(this.href)[0];
                var index = $.fn.bapplayerUtils.splitHref(this.href)[1]
                $.fn.bapplayerUtils.log(' IN click Piste: '+ id, 'currentIndex[player.id]:'+ currentIndex[player.id]+ 'state:'+ player.model.state);
                if (currentId[player.id] == id) { //same song
                    if (player.model.state != $.fn.bapplayer.states.PLAYING) {
                        player.play();
                    } else if (player.model.state == $.fn.bapplayer.states.PLAYING) {
                        player.pause();
                    }
                } else { //change item
                    $.fn.bapplayerPlaylist.loadItem($.fn.bapplayerUtils.splitHref(this.href)[1],$.fn.bapplayerUtils.splitHref(this.href)[0],player);
                }
                return false;
        });
    }

    /* seek to an item already loaded*/
    $.fn.bapplayerPlaylist.loadItem = function (index,id,player) {
        updateCurrent(index,id,player);
        if(type[player.id] != 'multitracks'){
            player.seek(chapters[player.id][$.fn.bapplayerPlaylist.getCurrentIndex(player)].Integer1 + .1);
        }else{
			player.model.domelement[0].sendEvent("SUBSCRIBE",$.fn.bapplayerPlaylist.getCurrentItem(player).subscribe);
            $.fn.bapplayerModel.addSource(player, $.fn.bapplayerPlaylist.getCurrentItem(player));
            player.model.domelement[0].sendEvent("LOAD",$.fn.bapplayerPlaylist.getCurrentItem(player));
            player.model.domelement[0].sendEvent("PLAY");
        }
    };

    /* Update the the currentIndex and currentId
    *  Load the information in the InfoBox   
    */
    function updateCurrent(index,id,player) {
		//Listener from bap 
		bap.chapterChangeListener(id+'_'+index);
        currentId[player.id] =id;
        currentIndex[player.id] =index;

        $(".pb").progressbar("option", "value", 0);
        /* Load infos*/
        $.fn.bapplayerInfoBar.loadInfos('none',player);
        if ($.fn.bapplayerImageViewer.getRenderState(player)) {
               $.fn.bapplayerImageViewer.loadImage(player);
        }
        //scrollpane
        if(totalItems[player.id] >1){
            scrollToItem(player);
        }
        manageControlBar(player);
		if(chapters[player.id][currentIndex[player.id]].palmaresId != null){
		 $('#hidIdChapitre').val(chapters[player.id][currentIndex[player.id]].palmaresId);
		}
		validateExclusive(player);
    };


    /* Valide si l'item courant est un "exclusif"
    *  et assigne la variable  bap.widgets.related.playing selon le cas
    */
    function validateExclusive(player) {
		if(chapters[player.id][currentIndex[player.id]].exclusive != undefined){
			bap.widgets.related.playing = chapters[player.id][currentIndex[player.id]].exclusive;
		}
	}

    /* Update the playlist item as current */
    function getItemByTimeline(event) {
		var pos = Math.floor(event.position);
        if (pos < chapters[event.id][$.fn.bapplayerPlaylist.getCurrentIndex(event)].Integer1 || pos > chapters[event.id][$.fn.bapplayerPlaylist.getCurrentIndex(event)].Integer2) { //
            for (var i in chapters[event.id]) {
                if (pos >= chapters[event.id][i].Integer1 && pos < (chapters[event.id][i].Integer2 )) {
					updateCurrent(i,chapters[event.id][i].Id,event);
                    return null;
                }
            }
        }
        //end of playlist
    }

    /*  Listener to the progress event :
    *   Scale loading bar to the current element 
    */
    $.fn.bapplayerPlaylist.showDefaultItemProgress= function (event) {
        getItemByTimeline(event);
        var load = ((event.position - $.fn.bapplayerPlaylist.getCurrentItem(event).Integer1) / ($.fn.bapplayerPlaylist.getCurrentItem(event).Integer2 - $.fn.bapplayerPlaylist.getCurrentItem(event).Integer1)) * 100;
         $('a[href$="#' + currentId[event.id] + '_' + currentIndex[event.id] + '"]').progressbar("option", "value", Math.ceil(load));
    }
    /*  Listener to the progress event :
    *   Scale loading bar to the current element 
    */
    $.fn.bapplayerPlaylist.showMultiTrackItemProgress= function (event) {
        var load = (event.position  / event.duration ) * 100;
        $('a[href$="#' + currentId[event.id] + '_' + currentIndex[event.id] + '"]').progressbar("option", "value", Math.ceil(load));
    }

    $.fn.bapplayerPlaylist.getType = function(player) {
        return type[player.id];
    
    }
    $.fn.bapplayerPlaylist.goToTop = function(player) {
        if((type[player.id] != 'multitracks' && (totalItems[player.id]>1)) ||(type[player.id] == 'multitracks' && currentIndex[player.id] == (totalItems[player.id]-1))){
            $(".pb").progressbar("option", "value", 0);
            var destination = '#'+player.id+'_item0';
            playlist[player.id][0].scrollTo(destination);
            currentIndex[player.id] =0;
            currentId[player.id] =0;
            prevBtn[player.id].css('display', 'none');
            nextBtn[player.id].css('display', 'block');
        }else  if (type[player.id] == 'multitracks' && currentIndex[player.id] < (totalItems[player.id]-1)) {
            $.fn.bapplayerPlaylist.setCurrentIndex($.fn.bapplayerPlaylist.getCurrentIndex(player) + 1,player);
            $.fn.bapplayerPlaylist.loadItem(currentIndex[player.id],currentId[player.id],player);
            manageControlBar(player);
        }
    }

    /* Gère la visibilité des boutons next et previous*/
    function manageControlBar(player) {
        //next
        if (currentIndex[player.id] < totalItems[player.id] - 1) {
            nextBtn[player.id].css('display', 'block');
        } else {
            nextBtn[player.id].css('display', 'none');
        }
        //previous
        if (currentIndex[player.id] > 0) {
            prevBtn[player.id].css('display', 'block');
        } else {
            prevBtn[player.id].css('display', 'none');
        }
    }

    /* make the playlist item to be visible (scrolled)*/
    function scrollToItem(player) {
        var destination = ($.fn.bapplayerPlaylist.getCurrentIndex(player) == 0) ? 0 : '#'+player.id+'_item' + $.fn.bapplayerPlaylist.getCurrentIndex(player);
         playlist[player.id][0].scrollTo(destination);
    }
    /* SETTER & GETTER */
    //currentItem
    $.fn.bapplayerPlaylist.getCurrentItem = function (player) {
        return chapters[player.id][$.fn.bapplayerPlaylist.getCurrentIndex(player)];
    }
    $.fn.bapplayerPlaylist.getCurrentId = function (player) {
        return  parseInt(currentId[player.id]);
    }
    //currentIndex
    $.fn.bapplayerPlaylist.getCurrentIndex = function (player) {
        return parseInt(currentIndex[player.id]);
    }
    $.fn.bapplayerPlaylist.setCurrentIndex = function (index,player) {
        currentIndex[player.id] = index;
        currentId[player.id] = chapters[player.id][currentIndex[player.id]].Id;
    }

    $.fn.bapplayerPlaylist.getTotalItems = function (player) {
        return totalItems[player.id];
    }

    function getImagePath(img) {
        var newImg = bap.staticURL + 'img/spacer.gif';
        if(!$.fn.bapplayerUtils.isNull(img)){
        newImg = img.replace(/(-70\.jpg|\.jpg)/, '-70.jpg');
        }
        return newImg;
    }
})(jQuery);


/**
* INFOBAR
*
* @author dominic Fortin
* @version 1.0alpha
* @lastmodifieddate 2010-08-03
*/
(function ($) {

    /*elements*/
    var controlbar= {};
    var infoBar= {};
    var container_section= {};
    var container_details= {};
    var htmlErreur = '<div class="errorRadio">Désolé, nous éprouvons des difficultés avec cette web radio. Revenez-nous plus tard.</div>';

    var container_position= {};
    var container_vote= {};

    var currentObject= {};
	var displayMode = 'none'; /*'none' 'default','radio','stream','extatique' */

    var urlImg = "../img/chapitre/chaines/";

    $.fn.bapplayerInfoBar = function (player) {
        displayMode='none';
    };

    function setElements(player) {
        controlbar[player.id] = $('#' + player.id + '_controlbar');
        infoBar[player.id] = $('<div id="' + player.id + '_infoBar" class="infoBar"></div>');
        container_section[player.id] = $('<div id="' + player.id + '_infosSection" class="infosSection"></div>');
        container_details[player.id] = $('<div id="' + player.id + '_infosDetails" class="infosDetails"></div>');

        container_position[player.id] = $('<div id="' + player.id + '_infosPosition" class="infosPosition"></div>');
        container_vote[player.id] = $('<div id="' + player.id + '_infosVote" class="infosVote"></div>');
    }

    $.fn.bapplayerInfoBar.buildElements = function (player) {
        setElements(player);
        removeRadioError(player);
        controlbar[player.id].append(infoBar[player.id]);
      
        infoBar[player.id].append(container_section[player.id]);
        infoBar[player.id].append(container_details[player.id]);

		displayMode = $.fn.bapplayerControlbar.getRenderMode();
        
    }

    $.fn.bapplayerInfoBar.loadInfos = function (obj,player) {
        currentObject =  $.fn.bapplayerPlaylist.getCurrentItem(player);
        var html= currentObject.responseHTML;
         if (displayMode == 'radio') {
            removeRadioError();
            if (!infoBar[player.id].hasClass('radio'))
                infoBar[player.id].addClass('radio');
         }
         //valide si palmares ET cookie
         if($.cookie('palmares') != null){
            //change la class du bouton voter
            html = html.replace('votez4','merci');
         }
         try{
             infoBar[player.id].html(html);
             bap.nav.adjustTarget($('#lecteur #player1_infoBar.infoBar'));
         }catch(e){ }
    }

    /* Fonction de mise à jour des metas radio appelée par bap */
    $.fn.bapplayerInfoBar.updateMetaRadio = function (player,meta) {
            if (!infoBar[player.id].hasClass('radio'))
                infoBar[player.id].addClass('radio');
			displayMode='radio';
            infoBar[player.id].html($(meta));
            bap.nav.adjustTarget($('#lecteur #player1_infoBar.infoBar'));
			$('.presentement').css({'width':325});
			if(bap.nav.state.match(/(PLAYING|BUFFERING|IDLE)/) && (bap.nav.main.match(/(direct|special)/))){
				$.fn.bapplayerImageViewer.removeTitre(player);
				switch(bap.widgets.mode.currentDisplay){
					case  bap.displayMode.Video:
						$.fn.bapplayerInfoBar.setVideoDisplay();
						break;
					case  bap.displayMode.Pochette:
						$.fn.bapplayerInfoBar.setPochetteDisplay(player);
						break;
					case  bap.displayMode.Snapshot:
						$.fn.bapplayerInfoBar.setSnapShotDisplay();
						break;
				}
			}
     }
	
    /* Remove all elements Radio from infoBar*/
    $.fn.bapplayerInfoBar.removeRadio = function (player) {
		if(infoBar[player.id]){
			infoBar[player.id].removeClass('radio');
			infoBar[player.id].remove();
			displayMode='none';
		}
    }

    $.fn.bapplayerInfoBar.showRadioError = function (player) {
        $.fn.bapplayerInfoBar[player.id].removeRadio(player);
        $('#'+player.id+'_playButton').css('display', 'none');
        controlbar[player.id].append(infoBar[player.id]);
        infoBar[player.id].append(htmlErreur);
    }
    function removeRadioError(player) {
        try {
            $('#errorRadio').remove();
            $('#'+player.id+'_playButton').css('display', 'block');
        } catch (exc) { }
    }
	/*AJUSTEMENT DU DISPLAY POUR EXTATIQUE*/
	$.fn.bapplayerInfoBar.setVideoDisplay = function(){
		//hide la class sirius (section image)
		$('.gauche a.chaine.sirius').css({'display':'none','opacity':0});
		$('.presentement').css({'width':425});
		//show thumb pochette
		$('#player1_controlbar .presentement img').show();
		//hide la div droite
		$('#player1_controlbar .droite').hide();
		//ajustement de styles
		$('.infoBar').css({'width':440,'margin':'0 0 0 -35px'});
		
	}
	$.fn.bapplayerInfoBar.setSnapShotDisplay = function(){
		//hide la class sirius (section image)
		$('.gauche a.chaine.sirius').css({'display':'none','opacity':0});
		$('.presentement').css({'width':425});
		//show thumb pochette
		$('#player1_controlbar .presentement img').show();
		//hide la div droite
		$('#player1_controlbar .droite').hide();
		
		
		//ajustement de styles
		$('.infoBar').css({'width':440,'margin':'0 0 0 -35px'});
	}
	$.fn.bapplayerInfoBar.setPochetteDisplay = function(player){
			//hide la class sirius (section image)
			$('.gauche a.chaine.sirius').css({'display':'none','opacity':0});
			$('.presentement').css({'width':425});
			//hide thumb pochette
			$('#player1_controlbar .presentement img').hide();
			//hide la div droite
			$('#player1_controlbar .droite').hide();
			//ajustement de styles
			$('.infoBar').css({'width':440,'margin':'0 0 0 -30px'});
			$('.bapplayer_imgHolder').css({'top':0,'left':'120px'});
			img = $('#player1_controlbar .presentement img').attr('src');
			$.fn.bapplayerImageViewer.loadImagePochetteStream(player,img);
	}

})(jQuery);


/**
* IMAGEVIEWER
*
* @author dominic Fortin
* @version 1.0
* @lastmodifieddate 2010-08-03
*/
(function ($) {

    /*elements*/
    var container= {};
    var viewer= {};
    var holder1= {};
    var holder2= {};
    var loading= {};
    var titre= {};
    var loadingRendered= {};
    var render= {};

    $.fn.bapplayerImageViewer = function (player) {
        render[player.id] = false;
        setElements(player);
    };

    function setElements(player) {
        viewer[player.id] = $('<div id="'+player.id+'_viewer" class="bapplayer_viewer"></div>');
        titre[player.id] = $('<div class="titreSection"><div class="titreSectionSecond"></div></div>');

        holder1[player.id] = $('<div id="'+player.id+'_holder1" class="bapplayer_imgHolder"><img src="' + bap.staticURL + 'img/spacer.gif" width="300" height="300" title=""/></div>');
        holder2[player.id] = $('<div id="'+player.id+'_holder2" class="bapplayer_imgHolder"><img src="' + bap.staticURL + 'img/spacer.gif" width="300" height="300" title=""/></div>');
        loading[player.id] =$('<div id="'+player.id+'_loadingHolder" class="loading"><div id="'+player.id+'_loading""></div></div>');
        container[player.id] = $('#'+player.id+'_playerwrapper');
        buildElements(player);
    }

    function embedLoading(player){
        var defaults = {
            height: 50,
            width: 50
        };

        var flashParams = {
            allowscriptaccess: 'always',
            allowfullscreen: 'true',
            wmode: 'transparent'
        };
         swfobject.embedSWF(
           bap.staticURL+'swf/loading.swf',
           player.id+'_loading',
           "50",
           "50",
           "10.1.0",
           bap.staticURL + 'swf/expressInstall.swf',
           defaults,
           flashParams
		);
    }

    function buildElements(player) {
        loading[player.id].appendTo(viewer[player.id]);
        viewer[player.id].append(holder1[player.id]);
        viewer[player.id].append(holder2[player.id]);
        container[player.id].prepend(viewer[player.id]);
        embedLoading(player);
        hide(player);
        
        
    }

	$.fn.bapplayerImageViewer.manage = function(id){
		var player = $.fn.bapplayer.getPlayer(id);
		var obj =   player.model.objet;
		resetImagePaths(player);
		if(obj.provider != 'icecast'){
			if (bap.nav.currentMimeType == bap.mimeTypes.AudioMpeg){
				show(player);
				$.fn.bapplayerImageViewer.loadImage(player);
				if(obj.section == 'palmares-interactif' ||obj.section == 'chambre-d-ecoute'){
					setTitre(player,obj.section);
				}else{
					$.fn.bapplayerImageViewer.removeTitre(player);
				}
			}else{
				hide(player);
				$.fn.bapplayerImageViewer.removeTitre(player);
			}
		}else{
			hide(player);
		}
	}

    function show(player) {
        viewer[player.id].show();
        render[player.id] = true;
    }

    function hide(player) {
        viewer[player.id].hide();
        render[player.id] = false;
    }

	$.fn.bapplayerImageViewer.closeViewer = function (player) {
       hide(player);
    }  

    $.fn.bapplayerImageViewer.getRenderState = function (player) {
        return render[player.id];
    }

   $.fn.bapplayerImageViewer.loadImage = function (player) {
        if ($.fn.bapplayerPlaylist.getCurrentIndex(player) % 2 == 0) { //holder 1
            $('#'+player.id+'_holder1 img').attr('src', getImagePath($.fn.bapplayerPlaylist.getCurrentItem(player).ImgURL));
            $('#'+player.id+'_holder1 img').fadeIn('normal');
            if ($.fn.bapplayerPlaylist.getCurrentIndex(player) != 0 && $.fn.bapplayerPlaylist.getCurrentIndex(player) < $.fn.bapplayerPlaylist.getTotalItems(player)) {
                $('#'+player.id+'_holder2 img').fadeOut('normal');
            }
        } else {
            $('#'+player.id+'_holder2 img').attr('src', getImagePath($.fn.bapplayerPlaylist.getCurrentItem(player).ImgURL));
            $('#'+player.id+'_holder2 img').fadeIn('normal');
            if ($.fn.bapplayerPlaylist.getCurrentIndex(player) < $.fn.bapplayerPlaylist.getTotalItems(player)) {
                $('#'+player.id+'_holder1 img').fadeOut('normal');
            }
        }
    }
   $.fn.bapplayerImageViewer.loadImagePochetteStream = function (player,img) {
		show(player);
		 $.fn.bapplayerImageViewer.removeLoading(player);
        if ( $('#'+player.id+'_holder1 img').is(':hidden')) { //holder 1 caché
            $('#'+player.id+'_holder1 img').attr('src', getImagePath(img));
            $('#'+player.id+'_holder1 img').fadeIn('normal');
            if ($('#'+player.id+'_holder2 img').is(':visible')) {
                $('#'+player.id+'_holder2 img').fadeOut('normal');
            }
        } else {
            $('#'+player.id+'_holder2 img').attr('src', getImagePath(img));
            $('#'+player.id+'_holder2 img').fadeIn('normal');
          if ($('#'+player.id+'_holder1 img').is(':visible')) {
                $('#'+player.id+'_holder1 img').fadeOut('normal');
            }
        }
    }

	function resetImagePaths(player){
		$('#'+player.id+'_holder1 img').attr('src', bap.staticURL + 'img/spacer.gif');
		$('#'+player.id+'_holder2 img').attr('src', bap.staticURL + 'img/spacer.gif');
	}

    function getImagePath(img) {
        var newImg = bap.staticURL + 'img/spacer.gif';
        if(!$.fn.bapplayerUtils.isNull(img)){
        newImg = img.replace(/(-70\.jpg|\.jpg|-300\.jpg|-300c\.jpg)/, '-300c.jpg');
        }
        return newImg;
    }

     $.fn.bapplayerImageViewer.showLoading = function (player) {
         loadingRendered[player.id]=true;
          $.fn.bapplayerUtils.log(' bapplayerImageViewer', ' showLoading');
          loading[player.id].show();
    }
   
     $.fn.bapplayerImageViewer.removeLoading = function (player) {
            loadingRendered[player.id]=false;
          $.fn.bapplayerUtils.log(' bapplayerImageViewer', ' removeLoading');
           loading[player.id].hide();
    }

     $.fn.bapplayerImageViewer.getLoadingRendered = function (player) {
            return loadingRendered[player.id];
    }

	function setTitre(player,section){
        viewer[player.id].prepend(titre[player.id]);
        var second = (section== 'palmares-interactif')?$('#palmares_liens h2 small').html():'En exclusivité à Bande à Part';
        var clsToRemove = (section== 'palmares-interactif')?'titreChambreEcoute':'titrePalmares';
        var clsToAdd = (section== 'palmares-interactif')?'titrePalmares':'titreChambreEcoute';
        $('.titreSection').removeClass(clsToRemove).addClass(clsToAdd);
        $('.titreSectionSecond').html(second);
    }
     $.fn.bapplayerImageViewer.removeTitre= function (player){
        $(titre[player.id]).remove();
    }
   


})(jQuery);


/**
* TOP CONTROLBAR
*
* @author dominic Fortin
* @version 1.0alpha
* @lastmodifieddate 2010-08-03
*/
(function ($) {
    /*elements*/
    var container= {};
    var btnClose={};
    var containerRadio={};

    $.fn.bapplayerTopBar = function (player) {
        setElements(player);
    };

    function setElements(player) {
        btnClose[player.id] = $('<a href="#" class="bouton fermer"><span>Fermer</span></a>');
        container[player.id] = $('#' + player.id + '_topcontainer');
        containerRadio[player.id] = $('<div id="' + player.id + '_topcontainerRadio"></div>');
        buildElements(player);
    }
  
    function buildElements(player) {
      /*  container[player.id].append(containerRadio[player.id]);
        $('<div id="'+player.id+'_enonde" class="enonde enondeRadio"><big>en ondes maintenant</big></div>').appendTo(containerRadio[player.id]);
        $('<div id="'+player.id+'_dernierement" class="dernierement enondeRadio"><big>dernièrement</big></div>').appendTo(containerRadio[player.id]);
        container[player.id].append(btnClose[player.id]);*/
    }

    $.fn.bapplayerTopBar.showDefault = function (pl,id){
		var player = (pl == null)? $.fn.bapplayer.getPlayer('player1'): pl;

		container[player.id].css({width:'50px'}).show();
        btnClose[player.id].show();
        containerRadio[player.id].hide();
    }

    $.fn.bapplayerTopBar.showRadio = function (pl,id) {
		var player = (pl == null)?$.fn.bapplayer.getPlayer('player1'): pl;
		if(bap.isCurrentObjectAndExtatique(id)){
			container[player.id].hide();
			btnClose[player.id].hide();
			containerRadio[player.id].hide();
		}else{
			container[player.id].css({width:'940px'}).show();
			btnClose[player.id].hide();
			containerRadio[player.id].show();
		}
    }
    $.fn.bapplayerTopBar.showStream = function (pl,id) {
		
		var player = (pl == null)?$.fn.bapplayer.getPlayer('player1'): pl;
		if(bap.isCurrentObjectAndExtatique(id)){
			container[player.id].hide();
			btnClose[player.id].hide();
			containerRadio[player.id].hide();
		}
    }


})(jQuery);
