var SS_TIP_MOUSE = 1;
var SS_TIP_KBD   = 2;

function twToolTipManager() {
    
  var self = this;
  var tooltip = null;
  var coords         = {left:0,top:0};
  var tooltip_offset = {left:-10,top:20};
  var current_tip = null;
  var interval_id = null;
  var locked = false;
    
  var __construct = function() {
    tooltip = create("div");
    tooltip.appendChild(create("div"));
    tooltip.id = "tip";
    get("body")(0).appendChild(tooltip);        
    EventManager.Add(document, 'mousemove', function(evt) {
      var c;
      if(!evt)evt=window.event;
      if (locked ^ SS_TIP_KBD) {
        c=getPosEvtScr(evt);     
        coords.left=c.x;
        coords.top=c.y;
      }
      if (locked & SS_TIP_MOUSE) {
     	  tooltip.style.top = (coords.top+tooltip_offset.top) + "px";
     	  tooltip.style.left = (coords.left+tooltip_offset.left) + "px";          
      }      
    });  
    EventManager.Add(document, 'mousemove', function() {
      document.getElementById("debug").innerHTML = "(" + coords.left + ", " + coords.top + ")";    
    });
  }

  this.register = function(elem) {
    elem.tip = new String(elem.getAttribute('title'));
    elem.setAttribute('title', '');
    EventManager.Add(elem, 'mouseover', function() {
      if (!locked) {
        locked = SS_TIP_MOUSE;
        window.clearTimeout(interval_id);  
        current_tip = elem.tip;
        interval_id = window.setTimeout(function() {self.repaint()},400);
      }
    });
    EventManager.Add(elem, 'mouseout', function() {if (locked&SS_TIP_MOUSE){locked=false;self.repaint();}});
    EventManager.Add(elem, 'focus', function() {
      if (!locked) {
        locked = SS_TIP_KBD;
        var obj_coords=getPosObj(elem);
        var obj_size=getObjSize(elem);
        coords.left=obj_coords.x + obj_size.w;
        coords.top=obj_coords.y;
        current_tip = elem.tip;
        interval_id = window.setTimeout(function() {self.repaint()},500);      
      }
    });    
    EventManager.Add(elem, 'blur', function() {if(locked&SS_TIP_KBD){locked=false;self.repaint();}});
  }

  this.repaint = function() {
    if (locked) {
   	  tooltip.style.top =  (coords.top+tooltip_offset.top) + "px";
   	  tooltip.style.left = (coords.left+tooltip_offset.left) + "px";  
   	  tooltip.firstChild.innerHTML = current_tip;  	 

      tooltip.style.display = "block";     
      interval_id = window.setTimeout(function() {locked=false;self.repaint()},55000);      
    }
    else {
      tooltip.style.display = "none";
      current_tip = null;
      window.clearTimeout(interval_id);          
    }
  }
 
  __construct();
      
}


EventManager.Add(window, 'load', function() {
  var tooltipManager = new twToolTipManager(); 

  (function(elem){if(elem.title.length>0){tooltipManager.register(elem);}}).Iterate(get('A')());  
});

