/**
 * @author carrillos
 * @version 1.0, 03/05/2009
 */
if(typeof NickProxy == "undefined" || !NickProxy) var NickProxy = {};

function ObserverSwf() {
    this.listeners;
    this.swfId;
    this.swf;
}

ObserverSwf.prototype = {
	init:function(swfId) {
		this.swfId = swfId;
		this.swf = NickProxy.getSwf(this.swfId);
	},
    addListener:function(listener) {
    	if(listener == null) return;
    	if(this.listeners == null) this.listeners = [];

        this.listeners.push(listener);
    },
    removeListener:function(listener) {
    	if(listener == null || this.listeners == null) return;

		for(var i = 0; i < this.listeners.length; i++) {
			if(this.listeners[i] == listener) {
				this.listeners.splice(i, 1);
			}
		}
    },
    dispatch : function(listener) {
		if(this.swf == null) {
        	NickProxy.doLog("SWF: distpatch: no swf found!: "+this.swfId);
        	return;
        }

		for(var i = 0; i < this.listeners.length; i++) {
			if(this.listeners[i] == listener) {
				//NickProxy.doLog("SWF: dispatch: "+listener);
				this.swf[listener].apply(this.swf, this.getDispatchArgs(arguments));
			}
		}
    },
    // A Function's 'arguments' property is not a real array. No easy way to remove an element like 'shift'
	getDispatchArgs:function(args) {
		var res = [];
		// Note: skipping element zero which is our service listener
		for(var i = 1; i < args.length; i++) {
			res.push(args[i]);
		}
		return res;
	}
};
