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();
					return rules[selector].apply(target, $A(arguments));
				}
			}
		});
	}
});

Array.implement({
	delegateEvent: function(type, rules, prevent, propagate) {
		return this.each(function(o, i) {
			o.delegateEvents(type, rules, prevent, propagate);
		});
	},
	addClass: function(key) {
		return this.each(function(o, i) {
			o.addClass(key);
		});
	},
	removeClass: function(key) {
		return this.each(function(o, i) {
			o.removeClass(key);
		});
	},
	setStyle: function(key, value) {
		return this.each(function(o, i) {
			o.setStyle(key, value);
		});
	},
	setStyles: function(value) {
		return this.each(function(o, i) {
			o.setStyles(value);
		});
	}
});
