﻿var flashMP3 = null;

function PlayerCallback(eventName,id) {
    if(eventName == "initialized") {
        flashMP3 = document.getElementById("audioplayer");
        setTimeout("AudioPlayer.getInstance().play()", 100);
    }
}

function AudioItem(id, url) {
    this.id = id;
    this.url = url;
};

AudioItem.prototype = {
    id: null,
    url: null,
    index: -1,
    isLast: false,
    isFirst: false
}

function AudioPlayer() {
    if(AudioPlayer.caller != AudioPlayer.getInstance)
        throw "AudioPlayer can't be instancied. Use the static getInstance method.";
    this.initialize();
};

AudioPlayer.instance = null;
AudioPlayer.getInstance = function() {
    if(this.instance == null)
        this.instance = new AudioPlayer();
    return this.instance;
}

AudioPlayer.prototype = {
    _media: [],
    _keys: [],
    _playingId: null,
    _songToPlay: null,
    initialize: function() {
        this._media = [];
        this._keys = [];
        this._lastPlayingId = null;
        this._playingId = null;
        
        var flashObject = new SWFObject(fnacImagePath + 'flash/players/AudioPlayer.swf', 'audioplayer', '1', '1', '7', '#FFFFFF');
        flashObject.addParam("wmode", "transparent");
        flashObject.addVariable("menu", "false");
        flashObject.addVariable("play", "true");
        flashObject.addParam("allowScriptAccess", "always");
        flashObject.addParam("quality", "autohigh");
        flashObject.write("lecteurMp3");
    },
    addTrack: function(id, url) {
        var item = new AudioItem(id.toString(), url);
        this._media[item.id] = item;
        if (this._keys.length == 0)
            item.isFirst = true;
        if (this._keys.length > 0)
            this._keys[this._keys.length - 1].isLast = false;
        item.isLast = true;
        this._keys.push(item);
    },
    play: function() {
        this._playByItem(this._songToPlay);
    },
    playProxy: function(id, url) {
        $.ajax({
            url: url,
            success: function(data) {
            AudioPlayer.getInstance().playTrack(id, data);
            }
        });
    },
    playTrack: function(id, url) {
        this.addTrack(id, url);
        this.playById(id);
    },
    playById: function(id) {
        var item = this._media[id];
        this._playByItem(item);
    },
    playByIndex: function(index) {
        var item = this._keys[index];
        this._playByItem(item);
    },
    _playByItem: function(item) {
        if (item) {
            this.stop();
            if(flashMP3) {
                flashMP3.LoadSong(item.url, item.id);
                this._playingId = item.id;
            }
            else
                this._songToPlay = item;
        }
    },
    stop: function() {
        if (this._playingId != null)
            flashMP3.StopSong(this._playingId);
    }
}
