SWFPlayer = new Class({
    Extends: Swiff,
    Implements: [Events, Options],
                                        
    options: {
        width: 583,
        height: 527,
        container: $('player'),
        params: {
            allowScriptAccess: 'sameDomain',
            allowFullScreen: true,
            quality: 'high',
            swLiveConnect: true,
            wMode: 'transparent'
        },
        callBacks: {},
        vars: {
            instance: '',
            autostart: false,
            autonext: false
        }
    },
    initialize: function(path,options) {
        if(Browser.Engine.trident && Browser.Engine.trident4) {
            window.fireEvent('onError', ["Bạn đang dùng trình duyệt IE6, chúng tôi khuyến cáo bạn <a href='http://www.microsoft.com/windows/internet-explorer/download-ie.aspx' target='_blank'>nâng cấp trình duyệt</a>.","Trình duyệt không hỗ trợ"]);
        }
        if(Browser.Plugins.Flash.version <9 ) {
            if($('player')) {
                var temp = new Element('div',{ 'html': 'Phiên bản Flash Player trên máy bạn nhỏ hơn <b>10</b>. Xin vui lòng cập nhật <a href="http://www.adobe.com/products/flashplayer" target="_blank">tại đây</a>', 'id': 'oldflash'});
                $('player').adopt(temp);
            }
            return false;
        } else if (Browser.Plugins.Flash.version < 10) {
            var temp = new Element('div',{ 'html': 'Phiên bản Flash Player trên máy bạn nhỏ hơn <b>10</b>. Xin vui lòng cập nhật <a href="http://www.adobe.com/products/flashplayer" target="_blank">tại đây</a>', 'id': 'oldflash'});
            LBP.Modal.handler.inline.generate(temp, 'Có lỗi >> Phiên bản Flash Player chưa cập nhật',{ size: { x: 300, y: 120}});
        }
        this.setOptions(options);
        if (!path.contains('?')) path += '?noCache=' + $time();
        this.parent(path);
        return this;
    }                        
});   
function playerReady(obj) {
    var id = obj['id'];
    var player = $(id);
    LBP.Player.onPlayerLoad(id, player,obj['container']);
}
LBP.Player = new Hash({
    presets: {},
    initialize: function(options) {
        options = options || {};
        this.options = $merge(this.presets, options);
    },
    clearPlayer: function() {
        if(this.players) this.players.empty();
    },
    setFlag: function(val) {
        this.sflag = (val)? true: false;
    },
    remove: function(id) {
    },
    onAlert: function(msg, title, obj) {
        window.fireEvent('onError', [msg, 'alert', title || 'Thông báo']);
    },
    onPlayerLoad: function(id, player, container) {
        this.player = player;
        var fnStr = 'LBP.Player.on';
        //controllerListener: mute
        ['Item','Play','Playlist','Quality','Resize','Seek','Stop', 'Volume'].each(function(fn){
            if(this['on'+fn]) { player.addControllerListener(fn, fnStr+fn); }            
        }.bind(this)); 
        //viewListener: fullscreen, load, mute, next, prev, quality, resize, seek, stop, volume, return, enlarge
        ['Link', 'Trace', 'Next', 'Fullscreen'].each(function(fn){            
            if(this['on'+fn]) { player.addViewListener(fn, fnStr+fn); }
        }.bind(this));
        //modelListener: buffer, loaded, time
        ['Error', 'Meta', 'State'].each(function(fn){
            if(this['on'+fn]) { player.addModelListener(fn, fnStr+fn); }
        }.bind(this)); 
    },
    onFullscreen: function(data, data2) {},
    //fire when player trace out something
    onTrace: function(data) {},
    //fire when user requests to navigate to a link
    onLink: function(data) {},
    //fire when player state change: BUFFERING, PAUSED, COMPLETED, IDLE, PLAYING
    onState: function(data) {},
    //fire when meta data is received from video
    onMeta: function(data){},
    
    //fire when an error occur within player
    onError: function(data) {
        this.isPlaying = false;
        this.isBuffering = false;
        this.activePlayer = null;
        var dialog = "\273 <b>Mã số</b>: "+data.code+ "<br> \273 <b>Nội dung</b>: Phim đang được kiểm duyệt, xin bạn vui lòng quay trở lại sau.";//data.message;
        this.onAlert(dialog, 'Có lỗi', data);
    },
    onNext: function(data) {},
    //fire when play/pause button is pressed
    onPlay: function(data) {},
    
    sendReq: function(url, caller) {
        new Request({ 
            'url': url ,
            'caller': caller,
            async: false,
            autoCancel: true,
                onRequest: function() {},
                onSuccess: function(response){
                    try {  
                        LBP.Media.distributeHTML(response);
                        LBP.runProcesses();
                    } catch(e){}
                },
                onFailure: function(instance) {}
            }).send('sendby=' + caller + '&dmode=html_ajax');
    },
    //fire when player is start to play an item in list
    onItem: function(data) {
        this.playing = true;
        this.itemCurr = data['item'];
        var id = data['id'];
        var baseUrl = 'http://fansub.acc.vn/tap/tang-luot-xem/';
        var suffUrl = '';
        if(this.sflag) {
            suffUrl = '/gnt';
            this.setCurrentListItem(this.itemCurr);
        }
        var caller = 'player';
        this.sendReq(baseUrl+this.itemCurr+suffUrl+'.htmx', caller);
    },
    //fire when a playlist is loaded into player
    onPlaylist: function(data) {
        /*if(this.playlist) this.playlist.empty();
        this.playlist = data['playlist'];*/
    },
    listInit:function(lDivCss, lItemCss) {
        this.playlist = $(lDivCss);
        if(!this.playlist) return;
        this.list = this.playlist.getElements('.'+lItemCss);
        this.scrollFx = new Fx.Scroll(this.playlist, { wheelStops: false});
        this.list.each(function(item){
            var itemIdx = item.get('indexeps');
            item.store('itemindex', itemIdx);
            item.removeProperty('itemindex');
            item.addEvent('click', function(event){
                event.stop();
                this.player.sendEvent('item',item.retrieve('itemindex'));
            }.bind(this));
        }.bind(this));
    },
    setCurrentListItem: function(itemId) {
        var currItem = $('list-item-'+itemId);
        if(this.listCurr && this.listCurr.hasClass('current-item')) { this.listCurr.removeClass('current-item'); }
        if(currItem && !currItem.hasClass('current-item')) { 
            currItem.addClass('current-item');
            ourHM.setValues('url', [currItem.get('href'), 'series-view']);
            this.scrollFx.toElement(currItem);
        }
        this.listCurr = currItem;
    },
    //fire when a stop is request
    onStop: function(data) {
    },
    
    //fire when a volume change is request
    onVolume: function(data) {
    },
    //fire when a quality adjustment is set
    onQuality: function(data) {
    },
    
    //fire when player is enter/exit fullscreen or real-time resizing
    onResize: function(data) {        
    },
    
    //fire when player is seeking on timeSlider
    onSeek: function(data) {
    }
});