audioPlayer = function(player_id)
{
    this.tracks = new Array();
    this.currentTrack = 1;
    this.firstTrack = 1;
    this.init = false;
    this.object = false;
    this.player_div = document.getElementById('audioPlayer_'+player_id);

    /**
     * Initialisation
     */
    this.onInit = function()
    {
        this.position = 0;
        this.getElementsByClassName(this.player_div, 'controls')[0].style.visibility = "visible";
        this.object = document.getElementById('audioPlayerObject_'+player_id);
        this.object.width = 1;
        this.object.height = 1;
        this.loaded = 1;
    };

    this.onInitFail = function()
    {
        document.getElementById('audioPlayerObject_'+player_id).style.display = "none";
    };

    this.getElementsByClassName = function (oElm, strClassName)
    {
        if (document.getElementsByClassName)
        {
            return oElm.getElementsByClassName(strClassName);
        }

        var strTagName = "*";
        var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName);
        var arrReturnElements = new Array();

        strClassName = strClassName.replace(/\-/g, "\\-");

        var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
        var oElement;

        for (var i=0; i<arrElements.length; i++)
        {
            oElement = arrElements[i];
            if(oRegExp.test(oElement.className))
            {
                arrReturnElements.push(oElement);
            }
        }

        return (arrReturnElements);
    };

    this.humanTime = function(milli)
    {
        var min = Math.floor(milli / (1000 * 60));
        var sec = Math.floor(milli / 1000) % 60;
        return ( (min < 10) ? "0" + min : min ) + ":" + ( (sec < 10) ? "0" + sec : sec );
    };

    this.onID3 = function() { };

    this.onUpdate = function()
    {
        this.player_div.className = this.player_div.className.replace(/[ ]*(paused|playing|waiting|$)/, this.isPlaying ? " playing" : " paused");

        this.getElementsByClassName(this.player_div, "progress_play")[0].style.width = Math.round((this.position / this.duration) * 100) + "%";
        this.getElementsByClassName(this.player_div, "progress_load")[0].style.width = this.bytesPercent + "%";
        this.player_div.getElementsByTagName("h4")[0].innerHTML = this.isPlaying ? "Lecture - " + this.humanTime(this.position) + " / " + this.humanTime(this.duration) : "En pause";
    };

    this.onSoundComplete = function()
    {
        this.next();
    };

    this.playPause = function(Id)
    {
        if (!this.object) return true;

        if (Id == false && this.init == false)
        {
            Id = this.firstTrack;
        }

        if (Id == false)
        {
            if (this.isPlaying)
            {
                this.object.SetVariable("method:pause", "");
            }
            else
            {
                this.object.SetVariable("method:play", "");
                this.player_div.getElementsByTagName("h4")[0].innerHTML = "Lecture";
            }
        }
        else
        {
            var currentRow = this.getElementsByClassName(this.player_div, "track_"+this.currentTrack)[0];
            currentRow.className = currentRow.className.replace(/[ ]*(current)[ ]*/, '');
            this.object.SetVariable("method:setUrl", this.tracks[Id][0]);
            this.object.SetVariable("method:play", "");
            this.player_div.getElementsByTagName("h4")[0].innerHTML = "Lecture";
            this.currentTrack = Id;
            this.getElementsByClassName(this.player_div, "track_"+this.currentTrack)[0].className += " current";

            if (this.init == false)
            {
                this.init = true;
            }
        }

        return false;
    };

    this.next = function()
    {
        var next = false;
        var last_id = false;

        for (id in this.tracks)
        {
            if (last_id == this.currentTrack)
                next = id;

            last_id = id;
        }

        if (!next)
            next = this.firstTrack;

        this.playPause(next);
    };

    this.previous = function()
    {
        var prev = false;
        var last_id = false;

        for (id in this.tracks)
        {
            if (id == this.currentTrack)
                prev = last_id;

            last_id = id;
        }

        if (!prev)
            prev = last_id;

        this.playPause(prev);
    };

    this.setPosition = function(e, o)
    {
        if (!this.object) return false;

        var curleft = 0;
        var curwidth = o.offsetWidth;

        if (o.offsetParent) {
            while (o.offsetParent) {
                curleft += o.offsetLeft;
                o = o.offsetParent;
            }
        }
        else if (o.x) curleft += o.x;

        var percent = ((e.clientX - curleft) / curwidth);
        var pos = Math.round(this.duration * percent);
        this.object.SetVariable("method:setPosition", pos);
    };
};