function addEvent(obj, evType, fn, useCapture)
{
	if (obj.addEventListener)
	{
		obj.addEventListener(evType, fn, useCapture);

		return true;
	}
	else if (obj.attachEvent)
	{
		if (useCapture)
		{
//			alert('IE does not support event capturing!');

			return false;
		}
		else
		{
			var tmp = function() { fn.apply(obj, [window.event]); }

			//-- check if handler is not already attached
			if (!obj['ref'+evType]) obj['ref'+evType] = [];
			else
			{
				for (var ref in obj['ref'+evType])
				{
					if (obj['ref'+evType][ref].fn === fn) return false;
				}
			}

			var r = obj.attachEvent('on'+evType, tmp);

			//-- store references
			if (r) obj['ref'+evType].push({fn:fn, tmp:tmp});

			return r;
		}
	}
	else
	{
//		alert('Handler could not be attached');

		return false;
	}
}

function removeEvent(obj, evType, fn, useCapture)
{
	if (obj.removeEventListener)
	{
		obj.removeEventListener(evType, fn, useCapture);

		return true;
	}
	else if (obj.detachEvent)
	{
		if (obj['ref'+evType])
		{
			for (var ref in obj['ref'+evType])
			{
				if (obj['ref'+evType][ref].fn === fn)
				{
					obj.detachEvent('on'+evType, obj['ref'+evType][ref].tmp);

					//-- cleanup
					obj['ref'+evType][ref].fn = null;
					obj['ref'+evType][ref].tmp = null;
					delete obj['ref'+evType][ref];

					return true;
				}
			}
		}

		return false;
	}
	else
	{
//		alert('Handler could not be removed');

		return false;
	}
}
