/**
 * This class represent multiple listeners.
 * @package DHL::EVENT
 * @author Inoveo technologie inc.
 */
if (DHL == undefined) var DHL = {};
if (DHL.EVENT == undefined) DHL.EVENT = {};
(DHL.EVENT.LISTENERS = function () {
	
	this.aListener = new Array();

	DHL.EVENT.LISTENERS.prototype.notify = function(a, b, c, d) {
		var bReturn = true;
		for(i in this.aListener) {
			var bRet = this.aListener[i](a, b, c, d);
			if (typeof(bRet) == 'boolean') {
				bReturn &= bRet;
			}
		}
		return (bReturn ? true : false);
	}

	DHL.EVENT.LISTENERS.prototype.registerListener = function(fListener) {
		this.aListener.push(fListener);
	}

	DHL.EVENT.LISTENERS.prototype.count = function() {
		return this.aListener.length;
	}
	

	if (DHL.EVENT.LISTENERS.prototype.className == undefined) {

		/**
		 * Retrieve listeners from specified target object / event.
		 * @param object oTarget
		 * @param string sTargetEvent
		 * @return DHL.EVENT.LISTENERS
		 */
		DHL.EVENT.LISTENERS.getInstanceFrom = function(oTarget, sTargetEvent) {
			return oTarget.oDHLEventListeners[sTargetEvent];
		}

		/**
		 * STATIC register / replace current listener with multiple listeners.
		 * @param object oTarget
		 * @param string sTargetEvent
		 * @param string fListener
		 * @return DHL.EVENT.LISTENERS
		 */
		DHL.EVENT.LISTENERS.register = function(oTarget, sTargetEvent, fListener) {
			if (oTarget.oDHLEventListeners == undefined) {
				oTarget.oDHLEventListeners = new Object();
			}

			if (oTarget.oDHLEventListeners[sTargetEvent] == undefined) {
				oTarget.oDHLEventListeners[sTargetEvent] = new DHL.EVENT.LISTENERS();
				if (oTarget[sTargetEvent] != null) {
					oTarget['o' + sTargetEvent] = oTarget[sTargetEvent];
					oTarget.oDHLEventListeners[sTargetEvent].registerListener(
						function(a, b, c, d) { return oTarget['o' + sTargetEvent](a, b, c, d); }
					);
				}
				oTarget[sTargetEvent] = function(a, b, c, d) {
					return oTarget.oDHLEventListeners[sTargetEvent].notify(a, b, c, d);
				}
			} 
			oTarget.oDHLEventListeners[sTargetEvent].registerListener(fListener);
			return oTarget.oDHLEventListeners[sTargetEvent];
		};
	
		
		DHL.EVENT.LISTENERS.prototype.className = 'DHL.EVENT.LISTENER';
	}

})();
