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;
	}
	
	/*
	 * debugMode is used to send messages to a specifically named textarea/form.  
	 * If you would like to turn on debugging, call EventBridge.setMode("debug")
	 * and copy and paste the html below into your document
	 * <form name="eventbridge_debug_form">
			<textarea rows="20" cols="75" name="eventbridge_debug_txt" style="width:620"></textarea>
		</form>
	 */
	this.mode = "normal";
	this.setMode = function(mode){
		this.mode = mode;
	}
	this.getMode = function(mode){
		return this.mode;
	}
	
	/*
	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;
		//debug call
		var prefix = "dispatchEvent ";
		this.debug(prefix + "TYPE : " + evtObj.type + " DATA : " + evtObj.data);
		
		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){
		var prefix = "addListener : ";
		this.listeners[type] = (this.listeners[type] == null) ? new Object() : this.listeners[type];
		
		//debug call
		this.debug(prefix + "TYPE : " + type + " - TARGET : " + target + " FUNCTION : " + func);
		
		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});
		}
		
	}
	//changed register to add just keeping backwards compatibility
	this.registerListener = this.addListener;
	
	this.removeListener = function(type, target, func){
		var prefix = "removeListener ";
		this.debug(prefix + "TYPE : " + type + " - TARGET : " + target + " FUNCTION : " + 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.id == target && this.listeners[type][target][i].func == func){	
				this.listeners[type][target].splice(i,1);
			}
		}
	}
	this.hasListener = function(type, target, func){
		var brain = (this.getFlash(target)) ? this.getFlash(target) : target;
		if(func){
			for(var i in this.listeners[type][target]){
				if((this.listeners[type][target][i].target.id == brain.id || this.listeners[type][target][i].target == target)  && this.listeners[type][target][i].func == func){
					this.debug("hasListener TYPE : " + type + " TARGET : " + target + " FUNCTION : " + func);
					return true;
				}
			}
			this.debug("hasListener false");
			return false;
		}else{
			this.debug("hasListener : " + (this.listeners[type][target] != null));
			return (this.listeners[type][target] != null);
		}
	}
	this.removeAllListeners = function(){
		this.listeners = null;
		this.listeners = new Object();
	}
	this.debug = function(msg){
		if (document.eventbridge_debug_form && this.mode == "debug") {
			document.eventbridge_debug_form.eventbridge_debug_txt.value += (msg + "\n");
		}
	}
}
//Singleton
if (typeof window.EventBridge == "undefined") window.EventBridge = new rgabridge.EventBridge();