//+ Carlos R. L. Rodrigues
//@ http://jsfromhell.com/geral/event-listener [v1.4]

addEvent = function(o, e, f, s){
	var r = (o[e = "on" + e] && o[e]._) || (o[e] ? [[o[e], o]] : []), a, c, d;
	(o[e] && o[e]._ || ((o[e] = function(e){
		(e = e || (window.event ? (arguments = [].slice.call(arguments)).unshift(e = event) || 1 && e : {})).preventDefault || (e.preventDefault = function(){e.returnValue = false;});
		e.stopPropagation || (e.stopPropagation = function(){e.cancelBubble = true;});
		e.target || (e.target = e.srcElement || null);
		e.key = (e.which + 1 || e.keyCode + 1) - 1 || 0;
		for(d = 1, f = r.length; f; r[--f] && (a = r[f][0], o = r[f][1], c = a.apply(o, arguments), d &= c !== false));
		return e = null, !!d;
	})._ = r))[r.length] = [f, s || o];
};

removeEvent = function(o, e, f, s){
	for(var i = (e = o[e = "on" + e] && o[e]._ || []).length; i;)
		if(e[--i] && e[i][0] == f && (s || o) == e[i][1])
			return delete e[i];
	return false;
};