(function(){
	/**
	 * Listeners class for creating named listener queues 
	 */
	function Listeners()
	{
		this.lAArr = {};
	}
	Listeners.prototype = {
		lAArr: null,
		
		add: function(name, handler)
		{
			var lAArr = this.lAArr;
			
			if (lAArr[name] === undefined) {
				lAArr[name] = [];
			}
			lAArr[name].push(handler); 
		},
		
		run: function(name, obj, params)
		{
			var lArr,
				lAArr = this.lAArr,
				applyObj = obj || window,
				applyParams = params || [],
				i = 0,
				l = 0;

			// run all listeners for given name or drop silently if none exists 
			lArr = lAArr[name] || [];
			for (i = 0, l = lArr.length; i < l; i++) {
				lArr[i].apply(applyObj, applyParams);
			}
		}
	};

	// makes class available within the WN.Patterns namespace
	WN.ns("Patterns.Listeners", Listeners);
})();


