  var g_handlerInfo = new Array();
  function addToGlobalEventHandler( eventType, eventObject, handlerFunction, bCancelBubble ) 
  {
    var nodeName= !eventObject.nodeName ? "window" : eventObject.id ? eventObject.id : (eventObject.nodeName.indexOf('#')>0 ? eventObject.nodeName.substring(1) : eventObject.nodeName );
	   if (!g_handlerInfo[eventType]) g_handlerInfo[eventType] = new Array();
	   if ( !g_handlerInfo[eventType][nodeName] ) { var attachHandler = true; g_handlerInfo[eventType][nodeName] = new Array(); }
				var addHandler = true;
				for ( i = 0; i < g_handlerInfo[eventType][nodeName].length; i++ ) if ( g_handlerInfo[eventType][nodeName][i] == handlerFunction ) addHandler = false;
				if ( addHandler )
				{
	     g_handlerInfo[eventType][nodeName][g_handlerInfo[eventType][nodeName].length]=handlerFunction;
						if ( attachHandler )
	       eventObject[eventType]=function(event) {return globalEventHandler(eventType,nodeName, event, bCancelBubble);}
				}
  }
  
		function modifyHandler( eventType, eventObject, oldHandler, newHandler, runHandler )
		{
		  var nodeName= !eventObject.nodeName ? "window" : eventObject.id ? eventObject.id : (eventObject.nodeName.indexOf('#')>0 ? eventObject.nodeName.substring(1) : eventObject.nodeName );
			var functions = g_handlerInfo[eventType][nodeName];
			if ( functions )
			  for ( f = 0; f < functions.length; f++ )
				  if ( functions[f].indexOf(oldHandler) > -1 )
					{
					  functions[f]=newHandler;
            if ( runHandler )
              try { eval(functions[f]); } catch(e) {}										
						break;
					}
		}

  function removeFromGlobalEventHandler( eventType, eventObject, startOfHandlerFunction) 
		{
    var nodeName= !eventObject.nodeName ? "window" : eventObject.id ? eventObject.id : (eventObject.nodeName.indexOf('#')>0 ? eventObject.nodeName.substring(1) : eventObject.nodeName );
				if ( !g_handlerInfo[eventType] ) return;
    var functions = g_handlerInfo[eventType][nodeName];
	   if ( functions )
	   {
	     for ( f = 0; f < functions.length; f++ ) 
  	   {
	       if ( functions[f].indexOf(startOfHandlerFunction) > -1 ) 
	       {
	         functions.splice(f,1);
	         break;
	       }
	     }
	   }
	   if ( !functions || functions.length == 0 )
	   {
      eventObject[eventType]=null;
						var tempA = new Array();
						for ( eo in g_handlerInfo[eventType] )
						{
						  if ( g_handlerInfo[eventType][eo] != null && g_handlerInfo[eventType][eo].length > 0 ) tempA[eo]=g_handlerInfo[eventType][eo];
						}
						g_handlerInfo[eventType] = tempA;
	   }				
				var tempA = new Array();
				if ( document.all )
				{
				  for ( et in g_handlerInfo )
				    if ( g_handlerInfo[et] != null && new Enumerator(g_handlerInfo[et]).item() ) tempA[et]=g_handlerInfo[et];
				}else
				{
					tempA = g_handlerInfo;
				}
				g_handlerInfo = tempA;				
  }
  function globalEventHandler( eventType, eventObject, e, bCancelBubble ) 
  {						
				var functions = g_handlerInfo[eventType][eventObject].join("@").split("@");
    for ( event_idx = 0; event_idx < functions.length; event_idx++ )
				{
      eval(functions[event_idx]);//execScript only works in IE, might be faster though.  Need to put in browser specific js!!!				
				}
				if ( bCancelBubble )
				{
					  cancelBubble(e);
				}else return true;
  }
		
		
  function debug() 
  {
    if ( event.keyCode == 27 && event.shiftKey ) 
				  if ( confirm('debug?') ) as(); else prompt('test',document.body.innerHTML);
				else return true;
  }
		if (top.g_browser=='IE')
    addToGlobalEventHandler( "onkeydown", document, "debug()" );