Element.implement({
	delegateEvent: function(type, rules, prevent, propagate){
		return this.addEvent(type, function(e) {
			var event = new Event(e);
			var target = $(event.target);
			var prevent = prevent || false;
			var propagate = propagate || true; 

			for (var selector in rules) {
				if (target.match(selector)) {
					if (prevent) event.preventDefault();
					if (!propagate) event.stopPropagation();
					if (rules[selector].apply) return rules[selector].apply(target, $A(arguments));
				}
			}
		});
	}
});