if(typeof rgabridge=="undefined"){var rgabridge=new Object();}
rgabridge.EventBridge = function(){
	if(!document.getElementById){
		return;
	}
	
	this.channel = "external";
	this.setChannel = function(name){
		this.channel = name;
	}
	this.getChannel = function(){
		return this.channel;
	}
	
	/*
	Get a valid reference to Flash Object
	*/
	this.getFlash = function(movieName){
		if (navigator.appName.indexOf("Microsoft") != -1) {
			return window[movieName]
		}
		else {
			return document[movieName]
		}
	}
	this.dispatchEvent = function(evtObj){
		var target;
		var func;
		if(this.listeners[evtObj.type]){
			for (var i in this.listeners[evtObj.type]){
				for( var j in this.listeners[evtObj.type][i]){
					target = this.listeners[evtObj.type][i][j].target;
					func = this.listeners[evtObj.type][i][j].func;
					target[func](evtObj);
				}
			}
		}
	}
	this.listeners = new Object();
	this.addListener = function(type, target, func){
		this.listeners[type] = (this.listeners[type] == null) ? new Object() : this.listeners[type];
	
		this.listeners[type][target] = (this.listeners[type][target] == null) ? new Array() : this.listeners[type][target];
		
		if(this.getFlash(target) == undefined){
			//dom listener
			this.listeners[type][target].push({target:target,func:func});
		}else{
			//flash listener
			this.listeners[type][target].push({target:this.getFlash(target),func:func});
		}
		
	}
	this.registerListener = this.addListener;
	
	this.removeListener = function(type, target, func){
		//get qualified reference
		var brain = (this.getFlash(target)) ? this.getFlash(target) : target;
		//find match and remove
		for(var i in this.listeners[type][target]){
			if(this.listeners[type][target][i].target == target && this.listeners[type][target][i].func == func){	
				this.listeners[type][target].splice(i,1);
			}
		}
	}
	this.removeAllListeners = function(){
		this.listeners = null;
		this.listeners = new Object();
	}
}
//Singleton
if (typeof window.EventBridge == "undefined") window.EventBridge = new rgabridge.EventBridge();
