/*******
cbe_event.js
CrossBrowserElement v3b3 (Events)
Cross-Browser DHTML for IE 4+, NN 4+, Gecko, and Opera 4+
Download the latest version at cross-browser.com
Documentation is in cbe_reference.html

Copyright (c) 2001 by Michael Foster (mfoster@cybrtyme.com)
This is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but without any warranty; without even the implied warranty of
merchantability or fitness for a particular purpose.  see the
GNU General Public License for more details: www.gnu.org
*******/

var cbeEventJsLoaded = true;

function CrossBrowserEvent()
{
  ////// Methods
  this.init = cbeInitEvent;
  this.stopPropagation = cbeStopPropagation;
  this.preventDefault = cbePreventDefault;
  ////// Properties
  //// from DOM2 Interface Event
  this.type = "";
  this.target = null;
  this.currentTarget = null;
  this.eventPhase = 0;
  this.bubbles = true;
  this.cancelable = true;
  this.timeStamp = 0;
  // eventPhase masks
  this.AT_TARGET = 1;
  this.BUBBLING_PHASE = 2;
  this.CAPTURING_PHASE = 3;
  //// from DOM2 Interface MouseEvent : UIEvent
  this.screenX = 0;
  this.screenY = 0;
  this.clientX = 0;
  this.clientY = 0;
  this.ctrlKey = false;
  this.shiftKey = false;
  this.altKey = false;
  this.metaKey = false;
  this.button = 0;
  this.relatedTarget = null;
  // button masks
  this.LEFT = 0;
  this.MIDDLE = 1;
  this.RIGHT = 2;
  ////// from IE4+ Object Model
  this.keyCode = 0;
  this.offsetX = 0;
  this.offsetY = 0;
}

function cbeStopPropagation()
{
  // stub
  return;
}

function cbePreventDefault()
{
  // stub
  return;
}

function cbeInitEvent(e)
{
  if (is.ie) {
    // from DOM2 Interface Event
    cbeEvent.type = window.event.type;
    cbeEvent.target = window.event.srcElement;
    cbeEvent.currentTarget = window.event.toElement; //?
//    cbeEvent.eventPhase = 0;
    cbeEvent.bubbles = window.event.cancelBubble;
//    cbeEvent.cancelable = false;
//    cbeEvent.timeStamp = 0;
    // from DOM2 Interface MouseEvent : UIEvent
    cbeEvent.screenX = window.event.screenX;
    cbeEvent.screenY = window.event.screenY;
    cbeEvent.clientX = window.event.clientX;
    cbeEvent.clientY = window.event.clientY;
    cbeEvent.ctrlKey = window.event.ctrlKey;
    cbeEvent.shiftKey = window.event.shiftKey;
    cbeEvent.altKey = window.event.altKey;
//    cbeEvent.metaKey = 0;
    if (window.event.button == 1)
      cbeEvent.button = cbeEvent.LEFT;
    else if (window.event.button == 4)
      cbeEvent.button = cbeEvent.MIDDLE;
    else if (window.event.button == 2)
      cbeEvent.button = cbeEvent.RIGHT;
    cbeEvent.relatedTarget = window.event.fromElement; //?
    // from IE4+ Object Model
    cbeEvent.keyCode = window.event.keyCode;
    cbeEvent.offsetX = window.event.offsetX;
    cbeEvent.offsetY = window.event.offsetY;
  }  
  else if (is.gecko) {
    // from DOM2 Interface Event
    cbeEvent.type = e.type;
    cbeEvent.target = e.target;
    cbeEvent.currentTarget = e.currentTarget;
    cbeEvent.eventPhase = e.eventPhase;
    cbeEvent.bubbles = e.bubbles;
    cbeEvent.cancelable = e.cancelable;
    cbeEvent.timeStamp = e.timeStamp;
    // from DOM2 Interface MouseEvent : UIEvent
    cbeEvent.screenX = e.screenX;
    cbeEvent.screenY = e.screenY;
    cbeEvent.clientX = e.clientX;
    cbeEvent.clientY = e.clientY;
    cbeEvent.ctrlKey = e.ctrlKey;
    cbeEvent.shiftKey = e.shiftKey;
    cbeEvent.altKey = e.altKey;
    cbeEvent.metaKey = e.metaKey;
    if (e.button == 1)
      cbeEvent.button = cbeEvent.LEFT;
    else if (e.button == 2)
      cbeEvent.button = cbeEvent.MIDDLE;
    else if (e.button == 3)
      cbeEvent.button = cbeEvent.RIGHT;
    cbeEvent.relatedTarget = e.relatedTarget;
    // from IE4+ Object Model
    cbeEvent.keyCode = e.which;
    cbeEvent.offsetX = e.layerX;
    cbeEvent.offsetY = e.layerY;
  }
  else if (is.nav) {
    // from DOM2 Interface Event
    cbeEvent.type = e.type;
    cbeEvent.target = e.target;
//    cbeEvent.currentTarget = e.currentTarget;
//    cbeEvent.eventPhase = e.eventPhase;
//    cbeEvent.bubbles = e.bubbles;
//    cbeEvent.cancelable = e.cancelable;
//    cbeEvent.timeStamp = 0;
    // from DOM2 Interface MouseEvent : UIEvent
    cbeEvent.screenX = e.screenX;
    cbeEvent.screenY = e.screenY;
    cbeEvent.clientX = e.pageX;
    cbeEvent.clientY = e.pageY;
    cbeEvent.ctrlKey = (e.modifiers & Event.CONTROL_MASK) != 0;
    cbeEvent.shiftKey = (e.modifiers & Event.SHIFT_MASK) != 0; 
    cbeEvent.altKey = (e.modifiers & Event.ALT_MASK) != 0;     
//    cbeEvent.metaKey = e.metaKey;
    if (e.which == 1)
      cbeEvent.button = cbeEvent.LEFT;
    else if (e.which == 2)
      cbeEvent.button = cbeEvent.MIDDLE;
    else if (e.which == 3)
      cbeEvent.button = cbeEvent.RIGHT;
//    cbeEvent.relatedTarget = e.relatedTarget;
    // from IE4+ Object Model
    cbeEvent.keyCode = e.which;
    cbeEvent.offsetX = e.layerX;
    cbeEvent.offsetY = e.layerY;
  }  
  else if (is.opera) {
    // from DOM2 Interface Event
    cbeEvent.type = e.type;
    cbeEvent.target = e.target;
    cbeEvent.currentTarget = e.currentTarget;
//    cbeEvent.eventPhase = e.eventPhase;
//    cbeEvent.bubbles = e.bubbles;
//    cbeEvent.cancelable = e.cancelable;
//    cbeEvent.timeStamp = 0;
    // from DOM2 Interface MouseEvent : UIEvent
    cbeEvent.screenX = e.screenX;
    cbeEvent.screenY = e.screenY;
    cbeEvent.clientX = e.clientX;
    cbeEvent.clientY = e.clientY;
    cbeEvent.ctrlKey = e.ctrlKey;
    cbeEvent.shiftKey = e.shiftKey;
    cbeEvent.altKey = e.altKey;
//    cbeEvent.metaKey = e.metaKey;
    if ((e.type == 'click' && e.which == 0) || ((e.type == 'mousedown' || e.type == 'mouseup') && e.which == 1))
      cbeEvent.button = cbeEvent.LEFT;
    cbeEvent.relatedTarget = e.relatedTarget;
    // from IE4+ Object Model
    cbeEvent.keyCode = e.which;
//    cbeEvent.offsetX = e.layerX;
//    cbeEvent.offsetY = e.layerY;
  }
}

function _cbeAddEventListener(type, listener, capture)     // cbe method
{
  cbeAddEventListener(this.ele, type, listener, capture); 
}

function cbeAddEventListener(obj, type, listener, capture) // global
{
  var eh = "obj.on" + type.toLowerCase() + "=" + listener;

  if (obj.addEventListener) {
    obj.addEventListener(type, listener, capture);
  }
  else if (obj.captureEvents) {
    if (capture) obj.captureEvents(eval("Event." + type.toUpperCase()));
    eval(eh);
  }
  else {
    eval(eh);
  }
}

function _cbeRemoveEventListener(type, listener)
{
  cbeRemoveEventListener(this.ele, type, listener);
}

function cbeRemoveEventListener(obj, type, listener)
{
  var eh = "obj.on" + type.toLowerCase() + "=null";

  if (obj.removeEventListener) {
    obj.removeEventListener(type, listener, false);
  }
  else if (obj.releaseEvents) {
    obj.releaseEvents(eval("Event." + type.toUpperCase()));
    eval(eh);
  }
  else {
    eval(eh);
  }
}


// End cbe_event.js
