void nsIDOMEventListener.HandleEvent(nsIDOMEvent e)
        {
            string type;
            using (nsAString str = new nsAString())
            {
                e.GetType(str);
                type = str.ToString();
            }

            GeckoDomEventArgs ea = null;

            switch (type)
            {
                case "keydown": OnDomKeyDown((GeckoDomKeyEventArgs)(ea = new GeckoDomKeyEventArgs((nsIDOMKeyEvent)e))); break;
                case "keyup": OnDomKeyUp((GeckoDomKeyEventArgs)(ea = new GeckoDomKeyEventArgs((nsIDOMKeyEvent)e))); break;

                case "mousedown": OnDomMouseDown((GeckoDomMouseEventArgs)(ea = new GeckoDomMouseEventArgs((nsIDOMMouseEvent)e))); break;
                case "mouseup": OnDomMouseUp((GeckoDomMouseEventArgs)(ea = new GeckoDomMouseEventArgs((nsIDOMMouseEvent)e))); break;
                case "mousemove": OnDomMouseMove((GeckoDomMouseEventArgs)(ea = new GeckoDomMouseEventArgs((nsIDOMMouseEvent)e))); break;
                case "mouseover": OnDomMouseOver((GeckoDomMouseEventArgs)(ea = new GeckoDomMouseEventArgs((nsIDOMMouseEvent)e))); break;
                case "mouseout": OnDomMouseOut((GeckoDomMouseEventArgs)(ea = new GeckoDomMouseEventArgs((nsIDOMMouseEvent)e))); break;
                case "click": OnDomClick(ea = new GeckoDomEventArgs(e)); break;
                case "submit": OnDomSubmit(ea = new GeckoDomEventArgs(e)); break;
            }

            if (ea != null && ea.Cancelable && ea.Handled)
                e.PreventDefault();
        }
		void nsIDOMEventListener.HandleEvent(nsIDOMEvent e)
		{
			string type;
			using (nsAString str = new nsAString())
			{
				e.GetType(str);
				type = str.ToString();
			}
			
			switch (type)
			{
				case "keydown": OnDomKeyDown(new GeckoDomKeyEventArgs((nsIDOMKeyEvent)e)); break;
				case "keyup": OnDomKeyUp(new GeckoDomKeyEventArgs((nsIDOMKeyEvent)e)); break;
				
				case "mousedown": OnDomMouseDown(new GeckoDomMouseEventArgs((nsIDOMMouseEvent)e)); break;
				case "mouseup": OnDomMouseUp(new GeckoDomMouseEventArgs((nsIDOMMouseEvent)e)); break;
				case "mousemove": OnDomMouseMove(new GeckoDomMouseEventArgs((nsIDOMMouseEvent)e)); break;
				case "mouseover": OnDomMouseOver(new GeckoDomMouseEventArgs((nsIDOMMouseEvent)e)); break;
				case "mouseout": OnDomMouseOut(new GeckoDomMouseEventArgs((nsIDOMMouseEvent)e)); break;
				
				case "submit":
					//TEMP: disable this because it's causing crashes
					//MessageBox.Show("Form submission has been disabled to improve stability in this version.", "Gecko", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
					
					//e.PreventDefault();
					//e.StopPropagation();
					break;
			}
		}