var rol = {
  isOpera: function() {
    return navigator.userAgent.indexOf("Opera") >= 0;
  },
  
  getObj: function(o) {
    return document.getElementById(o);
  },

  ObjCtl: function(o,prop,val) {
    rol.getObj(o).style[prop] = val;
  },

  getEvent: function(e)
  {
    return e || window.event;
  },

  removeAllChildren: function (el) {
    var len = el.childNodes.length;
    for (var i = len - 1; i >= 0; --i)
        el.removeChild(el.childNodes[i]);
  },

  topOffset: function (node) {
     var offset = 0;
     while (node) {
       offset += node.offsetTop;
       node = node.offsetParent;
     }
     return offset;
  },

  leftOffset: function (node) {
     var offset = 0;
     while (node) {
       offset += node.offsetLeft;
       node = node.offsetParent;
     }
     return offset;
  },
  
  scrollTop: function() {
    return document.body.scrollTop == 0 ? document.documentElement.scrollTop : document.body.scrollTop;
  },
  
  winHeight: function() {
     return rol.isOpera() ? document.body.clientHeight : document.documentElement.clientHeight
  },
  
  winWidth: function() {
     return rol.isOpera() ? document.body.clientWidth : document.documentElement.clientWidth
  },

  createDelegate: function (instance, method) {
    return function() {
      return method.apply(instance, arguments);
    }
  },
  
  addEventHandler: function(obj, type, handler, useCapture) {
    if (obj.attachEvent)
       obj.attachEvent('on' + type, handler);
    else
       obj.addEventListener(type, handler, useCapture);
  }
};

