var events = new Object();

events.addListener = function(element,type,fcn)
{
  if (!element.addEventListener && !element.attachEvent) return false;
  if (element.addEventListener) element.addEventListener(type,fcn,false);
  else if (element.attachEvent)
  {
    element.attachEvent('on' + type,function(event) {
	var objEvent = new Object();
	objEvent.type = event.type;
	objEvent.target = event.srcElement;
	objEvent.currentTarget = element;
	objEvent.eventPhase = (objEvent.target == objEvent.currentTarget ? 2 : 3);
	objEvent.button = (event.button == 2 || event.button == 6 ? 2 : event.button == 4 ? 1 : event.button == 0 ? null : 0);
	objEvent.altKey = event.altKey;
	objEvent.ctrlKey = event.ctrlKey;
	objEvent.shiftKey = event.shiftKey;
	objEvent.metaKey = false;
	objEvent.clientX = event.clientX;
	objEvent.clientY = event.clientY;
	objEvent.relatedTarget = (objEvent.type == 'mouseover' ? event.fromElement : objEvent.type == 'mouseout' ? event.toElement : null);
	objEvent.stopPropagation = function() { event.cancelBubble = true; };
	objEvent.preventDefault = function() { event.returnValue = (objEvent.type == 'mouseover' && (objEvent.target.tagName.toLowerCase() == 'a' || objEvent.target.tagName.toLowerCase() == 'area') ? true : false); };
	objEvent.AT_TARGET = 2;
	objEvent.BUBBLING_PHASE = 3;
	
    objEvent.keyCode = event.keyCode;
	objEvent.charCode = event.keyCode;
	objEvent.offsetX = event.offsetX;
	objEvent.offsetY = event.offsetY;
	objEvent.x = event.x;
	objEvent.y = event.y;
	fcn(objEvent);
	})
  }
  return true;
};

events.removeListener = function(element,type,fcn)
{
  if (!element.removeEventListener && !element.detachEvent) return false;
  if (element.removeEventListener) element.removeEventListener(type,fcn,false);
  else if (element.detachEvent) element.detachEvent('on' + type,fcn);
  return true;
};

events.listenersArray = new Array();

events.addListeners = function()
{
  var i, element, repeat = false;
  for (i = 0; i < events.listenersArray.length; i++)
  {
    element = (events.listenersArray[i].element != '' ? eval(events.listenersArray[i].element) : false);
    if (element)
	{
	  events.addListeners.able = events.addListener(element,events.listenersArray[i].type,events.listenersArray[i].fcn);
	  events.listenersArray[i].element = '';
	}
	else if (events.listenersArray[i].element != '') repeat = true;
  }
  if (repeat) setTimeout('events.addListeners()',1000);
  else events.addListeners.done = true;
};