
$.videoPlayers = {}

var VideoPlayer = function() {
    return this.init.apply(this, arguments);
};

VideoPlayer.prototype = {
    swf_file: '/media/flvplayer/mediaplayer.swf',

    init: function(container_id, swf_id, playlist) {
        var self = this;
        // Object data
        self.container_id = container_id;
        self.swf_id = swf_id;
        if (arguments[3]) {
            self.menu_id = arguments[3];
        }
        
        // Set up SWF 
        var so = new SWFObject(self.swf_file, self.swf_id, '320', '260', '9', '#ffffff', 'true');
        so.addParam('allowFullScreen', 'true');
        so.addParam('wmode', 'opaque');
        so.addVariable('file', playlist);
        so.addVariable('shuffle', 'false');
        so.addVariable('enablejs', 'true');
        so.addVariable('javascriptid', self.swf_id);
        so.addVariable('backcolor', '0x000000');
        so.addVariable('frontcolor', '0xaaaaaa');
        so.addVariable('lightcolor', '0xffffff');
        $( function() {
            // Write SWF object
            so.write(container_id);
            self.swf_obj = $('#'+self.swf_id)[0];
            // Container DOM
            self.container = $('#'+container_id);
            // Menu DOM
            if ( self.menu_id) self.menu = $('#'+self.menu_id);             
            if ( self.menu ) {
                $('li', self.menu).click(function(e) {
                    if (! $(e.target).is('.external-link')) {
                        var link = $(' >a', this)[0];
                        self.selectClip(link.rel);
                        $('li', self.menu).removeClass('selected');
                        $(this).addClass('selected');
                        return false;
                    }
                });
            }
            // Store this videoplayer object with the swf obj for later retrieval.
            $.videoPlayers[self.swf_id] =  self
        });
    },

    selectClip: function(n){
        var self = this;
        // Try until the swf object is ready.
        if (!self.loaded) {
            window.setTimeout(function(){ self.selectClip(n);}, 500);
            return;
        }
        self.swf_obj.sendEvent('playitem', n);
        self._menuSelect(n);        
    },

    _getUpdate: function(type, pr1, pr2) {
        var self = this;
        if (type == 'item') {
            if (!self.loaded) {
                self.loaded = true;
            }
            self._menuSelect(pr1);
        }
    },

    _menuSelect: function(n) {
        var self = this;
        $li = $('li', self.menu).removeClass('selected').eq(n).addClass('selected');
        var offset = $li[0].offsetTop;
        if (self.menu[0] && self.menu[0].scrollTo)
            self.menu[0].scrollTo(offset);
        else
            $(self.menu).animate({scrollTop: offset}, 800);
    }
};

// Return video player object based on swf object
function getPlayer(swf_id) {
    return $.videoPlayers[swf_id];
}

// Handle update callback.
function getUpdate(type,pr1,pr2,pid) {
    var player = getPlayer(pid);
    if (player) {
        player._getUpdate(type, pr1, pr2);
    }
};
