/*
 * Requries: swfobject.js
 * 
 * Handles interfacing with the flash JW FLV Media player
 * Provides functionality for loading, playing, pausing, stoping of tracks in the player.
 */

$.mediaPlayers = {}
var MediaPlayer = function() {
    return this.init.apply(this, arguments);
};
MediaPlayer.prototype = {
    swf_id: 'player1',
    container: 'media-player',
    loaded: false,  // set to true when the swf player is loaded
    width: 400,
    height: 20,

    init: function(swf_file, options) {
        var self = this;
        self.options = $.extend(self, options);

        // Add the swf object for the media player
        var so = new SWFObject(swf_file, self.swf_id, self.width, self.height, '8');
        so.addParam('allowscriptaccess','always');
        so.addParam('allowfullscreen','true');
        so.addVariable('id', self.swf_id);
        so.addVariable('height',self.height);
        so.addVariable('width',self.width);
        so.addVariable('displaywidth','20');
        so.addVariable('usefullscreen','false');
        so.addVariable('showeq','true');
        so.addVariable('searchbar','false');
        so.addVariable('enablejs','true');
        so.addVariable('thumbsinplaylist','false');
        so.addVariable('javascriptid', self.swf_id);
        if (self.playlist_url) {
            so.addVariable('file', self.playlist_url);
        }
        so.write(self.container);

        self.container = $('#' + self.container);

        self.swf = $('#' + self.swf_id)[0];
        $.mediaPlayers[self.swf_id] =  self;

        // Add Listeners
        self.container.one('playerLoaded', function() {
            self.swf.addControllerListener('ITEM', 'itemListener');
            self.swf.addViewListener('PLAY', 'playListener');
        });
        
    },

    // Controls
    loadTrack: function(obj) {
        var self = this;
        if (!self.swf.loadFile) {
            window.setTimeout(function(){self.loadTrack(obj);}, 500);
            return;
        }
        self.swf.loadFile(obj);
    },

    play: function() {
        var self = this;
        self._sendEvent('play', true);
    },

    pause: function() {
        var self = this;
        self._sendEvent('play', false);
    },
    
    stop: function() {
        var self = this;
        self._sendEvent('stop');
    },

    // Playlist
    getPlaylist: function() {
        var self = this;
        return self.swf.getPlaylist();
    },


    // Player Event listeners 
    // (each must have a corresponding global function to interface with swf player)
    
    // Called for each new track that is loaded. 
    itemListener: function(obj) {
        var self = this;
        var index = obj.index;
        var track = self.getPlaylist()[index];
        self.container.trigger('trackLoaded', [track]);
    },

    playListener: function(obj) {
        var self = this;
        self.playing = obj.state;
        self.container.trigger('trackPlay', [obj.state]);
    },
    
    // Send an event to the swf media player
    _sendEvent: function(event, o) {
        var self = this;
        if (self.loaded) {
            self.swf.sendEvent(event, o);
        }
        else {
            self.container.one('playerLoaded', function() {
                window.setTimeout(function() {
                    self._sendEvent(event, o);
                }, 200);
            });
        }
    }
};  
// Return player object based on swf object
function getPlayer(swf_id) {
    return $.mediaPlayers[swf_id];
}

// Global Listeners
function itemListener(obj) {
    getPlayer(obj.id).itemListener(obj);
}
function playListener(obj) {
    getPlayer(obj.id).playListener(obj);
}

function playerReady(obj){
    var player = $.mediaPlayers[obj.id];
    player.loaded = true;
    window.setTimeout(function() {
        player.container.trigger('playerLoaded');
    }, 300);
}
