Ext.ResourcePlayer = function(config)
{
	Ext.apply(this, config);
	Ext.ResourcePlayer.superclass.constructor.call(this);
	
	this.addEvents({
		"CurrentPositionChange" : true,
        "StateChange" : true,
        "Error" : true
    });
};

Ext.extend(Ext.ResourcePlayer, Ext.util.Observable, {
	_player: null,
	_players: null,
	_realtime: false,
	_winclosed: false,
	_hasstarted: false,
	_timeoutid: 0,

	setPlayers: function(players, realtime) {
		_players = players;
		_realtime = realtime;		
		if (_players.length) {
			//_player = _players[0];
			if (_players.length > 1) _player = _players[1];
			else _player = _players[0];
			
			var c = this;
			_player.attachEvent('playStateChange', function(newstate) {
				if (!c._winclosed) {
					var state = c.getPlayerState();
					c.fireEvent('StateChange', state);
				}
			});
			this.fireEvent('StateChange', 'video_cued');
		} else {
			_player = null;
			this.fireEvent('ended', this);
		}
	},
	playerAvailable: function() {
		return _player != null;
	},
	isRealtime: function() { 
		return _realtime;
	},	
	seekTo: function(pos){
		for(i = 0; i < _players.length; ++i) _players[i].seekTo(pos);
	},
	setVolume: function(vol){
		//for(i = 0; i < _players.length; ++i) _players[i].setVolume(vol);
		if (_player) return _player.setVolume(vol);
	},
	getVolume: function() {
		if (_player) return _player.getVolume();
		else return 0;
	},
	mute: function(ismute){
		if (_player) _player.mute(ismute);
		//if (_players.length > 1) _players[1].mute(ismute);
		//else if (_players.length > 0) _players[0].mute(ismute);
	},
	getPlayerState: function(){
		if (_player) {
			return _player.getState();
		}
		else return 'unknown';
	},
	hasStarted: function() {
		return this._hasstarted;
	},
	pauseVideo: function(){
		for(i = 0; i < _players.length; ++i) _players[i].pause();
		//for(i = 0; i < _players.length; ++i) _players[i].pause();
	},
	playVideo: function(){
		this._timeoutid = 0;
		if (_player && _player.isflash && Ext.flashreadycount < 10) {
			Ext.flashplayerwrapper = this;
			this._timeoutid = setTimeout("Ext.flashplayerwrapper.playVideo();",100);
		} else {			
			this._hasstarted = true;
			this.fireEvent('StateChange', 'video_cued');
			//for(i = 0; i < _players.length; ++i) _players[i].play();
			for(var i = 0; i < _players.length; ++i) _players[i].play();
			
			var c = this;
			Ext.getBody().on("unload", function(){ c._winclosed = true; c.stopVideo();});
		}
	},
	stopVideo: function(){
		this._hasstarted = false;
		if (this._timeoutid) clearTimeout(this._timeoutid);
		this.fireEvent('CurrentPositionChange', -1);
		for(i = 0; i < _players.length; ++i) {			
			_players[i].stop();
		}
	},
	getCurrentTime: function() {
		if (_player) return _player.getCurrentPosition();
		else return 0;
	},
	getDuration: function() {
		if (_player) return _player.getDuration();
		else return 0;
	}	
});


