// override the Yahoo defaults to avoid errors
YAHOO.widget.Overlay.prototype.hide = function(){
  if(this.cfg){
    this.cfg.setProperty("visible", false);
  }
}
YAHOO.widget.Overlay.prototype.moveTo = function (x, y) {
  if(this.cfg){
    this.cfg.setProperty("xy", [x, y]);
  }
}

YAHOO.widget.Tooltip.prototype.doShow = function (e, context) {
  if(!this.cfg){ return false; }
  var yOffset = 25, me = this;
  if (YAHOO.env.ua.opera && context.tagName && 
    context.tagName.toUpperCase() == "A") {
    yOffset += 12;
  }
  return setTimeout(function () {
    if(!me.cfg){ return false; }
    var txt = me.cfg.getProperty("text");
    if (me._tempTitle && (txt === "" || YAHOO.lang.isUndefined(txt) || YAHOO.lang.isNull(txt))) {
      me.setBody(me._tempTitle);
    } else {
      me.cfg.refireEvent("text");
    }
    me.moveTo(me.pageX, me.pageY + yOffset);
    if (me.cfg.getProperty("preventoverlap")) {
      me.preventOverlap(me.pageX, me.pageY);
    }
    YAHOO.util.Event.removeListener(context, "mousemove", me.onContextMouseMove);
    me.contextTriggerEvent.fire(context);
    me.show();
    me.hideProcId = me.doHide();
  }, this.cfg.getProperty("showdelay"));
}

YAHOO.widget.Overlay.prototype._addToParent = function(parentNode, element){
  if(!parentNode || !element){
    return false;
  }
  if (!this.cfg.getProperty("appendtodocumentbody") && parentNode === document.body && parentNode.firstChild) {
    parentNode.insertBefore(element, parentNode.firstChild);
  } else {
    parentNode.appendChild(element);
  }
}

YAHOO.widget.Tooltip.prototype.onContextMouseOver = function (e, obj) {
  if(!obj.cfg){ return false; }
  var context = this;
  if (context.title) {
    obj._tempTitle = context.title;
    context.title = "";
  }
  if (obj.fireEvent("contextMouseOver", context, e) !== false && !obj.cfg.getProperty("disabled")) {
    if (obj.hideProcId) {
      clearTimeout(obj.hideProcId);
      obj.hideProcId = null;
    }
    YAHOO.util.Event.on(context, "mousemove", obj.onContextMouseMove, obj);
    obj.showProcId = obj.doShow(e, context);
  }
}

YAHOO.widget.Tooltip.prototype.onContextMouseOut = function (e, obj) {
  if(!obj.cfg){ return false; }
  var el = this;
  if (obj._tempTitle) {
    el.title = obj._tempTitle;
    obj._tempTitle = null;
  }
  if (obj.showProcId) {
    clearTimeout(obj.showProcId);
    obj.showProcId = null;
  }
  if (obj.hideProcId) {
    clearTimeout(obj.hideProcId);
    obj.hideProcId = null;
  }
  obj.fireEvent("contextMouseOut", el, e);
  obj.hideProcId = setTimeout(function () {
    obj.hide();
  }, obj.cfg.getProperty("hidedelay"));
}
