var realEventHandler = {};
realEventHandler.attachEvent = function(element,eType,fn){

	// Look for listeners
	var listeners=YAHOO.util.Event.getListeners(element,eType);
	
	// If we have listeners
	if(listeners != null){
	
		// Go through all the listeners
		for(var i=0;i<listeners.length;i++){
		
			// our custom event handler
			if(listeners[i].obj.realEventHandler){
					
				listeners[i].obj.addListener(fn);
				
				return;			
			}
		}
	}
	
	// No realEventHandlers, add our own
	var eventH = new realEventHandler.eventHandler(element,eType);
		eventH.addListener(fn);

};



realEventHandler.removeEvent = function(element,eType,fn){

	// Look for listeners
	var listeners=YAHOO.util.Event.getListeners(element,eType);

	// Loop through all listeners, looking for our realEventHandler	
	for(var x=0;x<listeners.length;x++)
		if(listeners[x].obj.realEventHandler)
			listeners[x].obj.removeListener(fn);	

};




realEventHandler.fireEvent = function(el,eType){
	
	if(!el)
		return;
		
	if(!el.tagName && el.length){
		/*
		for(var i=0;i<el.length;i++)
			realEventHandler.fireEvent(el[i],eType);
		*/
		realEventHandler.fireEvent(el[0],eType);
		return;
	}
	
	if(typeof(eType)=="object" && eType.length){
		for(var i=0;i<eType.length;i++)
			realEventHandler.fireEvent(el,eType[i]);
		return;
	}
	
	var listeners = YAHOO.util.Event.getListeners(el,eType);
	
	if(!listeners) return;	
	
	for (var i=0;i<listeners.length;i++)
		if(listeners[i].fn!=nextQuestionSelect && listeners[i].fn!=nextQuestionRadio && listeners[i].fn!=nextQuestionText){
			listeners[i].fn.call(listeners[i].obj);
	}
}


realEventHandler.eventHandler = function(element,eType,fn){

	this.realEventHandler=true;
	this.eType = eType;
	this.element = element;
	this.functions = [];
	YAHOO.util.Event.addListener(this.element, this.eType, this.execute, this, true);
	
};

realEventHandler.eventHandler.prototype.execute = function(){
	
	for(var i=0;i<this.functions.length;i++){
		this.functions[i].call(this.element);
	}
	
};

realEventHandler.eventHandler.prototype.functionExists = function(fn){

	for(var i=0;i<this.functions.length;i++)
		if(this.functions[i]==fn)
			return true;
	
	return false;
	
}

realEventHandler.eventHandler.prototype.addListener = function(fn){

	if(!this.functionExists());
		this.functions.push(fn);
		
};

realEventHandler.eventHandler.prototype.removeListener = function(fn){
	
	for(var i=0;i<this.functions.length;i++)
		if(this.functions[i]==fn)
			this.functions.splice(i,1);
	
};
