// hasEvent
[Element, Window, Document].invoke('implement', {
	hasEvent: function(type) {
		var events = this.retrieve('events', {});
		if (events && events[type]) {
			return true;
		} else {
			return false;
		}
	}
}); 

String.prototype.ltrim = function(what) {
     if(arguments.length === 0)
          return this.replace(/^\s*/g, '');
     what = what.toString();
     what = what.substring(1, what.length - 1);
     what = new RegExp('^[' + what + ']*', 'g');
     return this.replace(what, '');
};

String.prototype.rtrim = function(what) {
     if(arguments.length === 0)
          return this.replace(/\s*$/g, '');
     what = what.toString();
     what = what.substring(1, what.length - 1);
     what = new RegExp('[' + what + ']*$', 'g');
     return this.replace(what, '');
};

/*
$extend(Element.NativeEvents, {
    'paste': 2, 'input': 2
});
Element.Events.paste = {
    base : (Browser.Engine.presto || (Browser.Engine.gecko && Browser.Engine.version < 19))? 'input': 'paste',
    condition: function(e){
        this.fireEvent('paste', e, 1);
        return false;
    }
};
*/
