function DocumentProperties()
{
  this.onMouseMove   = new REvent(this);
  this.onMouseDown   = new REvent(this);
  this.onMouseUp     = new REvent(this);
  this.onKeyPress    = new REvent(this);
  this.onKeyDown    = new REvent(this);

  this.document = document;
  this.document.onmousemove = DocumentProperties.statics.onMouseMove;
  this.document.onmousedown = DocumentProperties.statics.onMouseDown;
  this.document.onmouseup   = DocumentProperties.statics.onMouseUp;
  this.document.onkeypress  = DocumentProperties.statics.onKeyPress;
  this.document.onkeydown   = DocumentProperties.statics.onKeyDown;
}
DocumentProperties.statics = new Object();

DocumentProperties.statics.onMouseMove = function(e)
{
  var doc = DocumentProperties.statics.getInstance();
  doc.updateMousePos(e);
  doc.onMouseMove.trigger(doc.getMouseX(), doc.getMouseY());
}
DocumentProperties.statics.onMouseDown = function(e)
{
  var doc = DocumentProperties.statics.getInstance();
  doc.onMouseDown.trigger(e);
}
DocumentProperties.statics.onMouseUp = function(e)
{
  var doc = DocumentProperties.statics.getInstance();
  doc.onMouseUp.trigger();
}

DocumentProperties.statics.getInstance = function()
{
  if (DocumentProperties.statics.instance == null)
    DocumentProperties.statics.instance = new DocumentProperties();
  return DocumentProperties.statics.instance;
}
DocumentProperties.statics.getAbsoluteOffsetLeft = function(o)
{
  var offset=0;
  for (; o; o=o.parentNode)
    if (o.offsetLeft)
      offset += o.offsetLeft;
  return offset;
}
DocumentProperties.statics.getAbsoluteOffsetTop = function(o)
{
  var offset=0;
  for (; o; o=o.parentNode)
    if (o.offsetTop)
      offset += o.offsetTop;
  return offset;
}
DocumentProperties.statics.cursor =
{
  Default         : "",
  Move            : "move",
  MoveLeftOrRight : "e-resize",
  MoveUpOrDown    : "n-resize"
}
DocumentProperties.prototype.setCursor = function(c)
{
  this.document.documentElement.style.cursor = c;
}
DocumentProperties.prototype.getMouseX = function()
{
  return this.mouseX;
}
DocumentProperties.prototype.getMouseY = function()
{
  return this.mouseY;
}
DocumentProperties.prototype.updateMousePos = function(e)
{
  var x,y;
  if (document.all)
  {
    x = event.x;
    y = event.y;
  }
  else
  {
    x = e.pageX;
    y = e.pageY;
  }
  this.mouseX = x;
  this.mouseY = y;
}


DocumentProperties.statics.onKeyPress = function(e) { return DocumentProperties.statics.keyEventDispatch("onKeyPress", e); }
DocumentProperties.statics.onKeyDown  = function(e) { return DocumentProperties.statics.keyEventDispatch("onKeyDown", e); }
DocumentProperties.statics.keyEventDispatch = function(eventName, e)
{
  var doc = DocumentProperties.statics.getInstance();
  if (!e)
    e = window.event;
 
  var key = null;
  if(window.event)
    key = e.keyCode
  else if(e.which)
    key = e.which

  if (null!=key)
    return doc[eventName].trigger(key, e);
  return true;
}