String.prototype.trim = function() { return this.replace(/(^\s*)|(\s*$)/g, ""); }

function attach_event(obj, evt, fnc, capture) {
	if (!capture) capture = false;
	if (obj.addEventListener) {
		obj.addEventListener(evt, fnc, capture);
		return true;
	}
	if (obj.attachEvent) return obj.attachEvent("on"+evt, fnc);
	if (!obj.my_events) obj.my_events = {};
	if (!obj.my_events[evt]) obj.my_events[evt] = [];
	var evts = obj.my_events[evt];
	evts[evts.length] = fnc;
	obj['on'+evt] = function() { fire_event(obj, evt) };
} 

function fire_event(obj, evt) {
	if (!obj || !obj.my_events || !obj.my_events[evt]) return;
	var evts = obj.my_events[evt];
	for (var i=0,len=evts.length;i<len;i++) evts[i]();
}
