IxTooltip = Class.create({
  initialize: function(){
    this.domNode = $(document.createElement("div"));
    this.domNode.addClassName('IxTooltip');
    
    this._nwC = $(document.createElement("div"));
    this._nwC.addClassName('nwC');
    this.domNode.appendChild(this._nwC);
    
    this._nC = $(document.createElement("div"));
    this._nC.addClassName('nC');
    this.domNode.appendChild(this._nC);
    
    this._neC = $(document.createElement("div"));
    this._neC.addClassName('neC');
    this.domNode.appendChild(this._neC);
    
    this._eC = $(document.createElement("div"));
    this._eC.addClassName('eC');
    this.domNode.appendChild(this._eC);
    
    this._seC = $(document.createElement("div"));
    this._seC.addClassName('seC');
    this.domNode.appendChild(this._seC);
    
    this._sC = $(document.createElement("div"));
    this._sC.addClassName('sC');
    this.domNode.appendChild(this._sC);
    
    this._swC = $(document.createElement("div"));
    this._swC.addClassName('swC');
    this.domNode.appendChild(this._swC);
    
    this._wC = $(document.createElement("div"));
    this._wC.addClassName('wC');
    this.domNode.appendChild(this._wC);
    
    this._arr = $(document.createElement("div"));
    this._arr.addClassName('arr');
    this.domNode.appendChild(this._arr);
    
    this._messageContent = $(document.createElement("div"));
    this._messageContent.addClassName('IxTooltipContent');
    
    this.domNode.appendChild(this._messageContent);
    this._onDOM = false;
  },
  openTooltip: function(message, x, y){
    
    if (this._onDOM != true) {
      var bodyElement = document.getElementsByTagName('body')[0];
      bodyElement.appendChild(this.domNode);
      this._onDOM = true;
    }

    this._messageContent.innerHTML = message;
    this.domNode.setStyle({
      top: y + 'px',
      left: x + 'px',
      'visibility': 'visible' 
    });
  },
  hideTooltip: function(){
    this.domNode.setStyle({
      'visibility': 'hidden' 
    });
  },
  moveTooltip: function(x, y){
    this.domNode.setStyle({
      top: y + 'px',
      left: x + 'px'
    });
  }
});

var _TooltipInstance = new IxTooltip();

function _tooltipMouseMove(event){
  _TooltipInstance.moveTooltip(Event.pointerX(event), Event.pointerY(event));
}

function _tooltipMouseOut(event){
  var e = Event.element(event);
  Event.stopObserving(e, "mouseout", _tooltipMouseOut);
  Event.stopObserving(e, "mousemove", _tooltipMouseMove);
  _TooltipInstance.hideTooltip();
}

function showIxTooltip(event){
  var e = Event.element(event);
  var text = e.getAttribute('tooltip');
  _TooltipInstance.openTooltip(text, Event.pointerX(event), Event.pointerY(event));
  Event.observe(e, "mouseout", _tooltipMouseOut);
  Event.observe(e, "mousemove", _tooltipMouseMove);  
}
