var xmlHttp

function exercise_detail(user_id, day, exe_id)
{
  xmlHttp=GetXmlHttpObject()
  if (xmlHttp==null)
  {
    alert ("Browser does not support HTTP Request")
    return
  } 
  var url="aja_get_exe_detail.php"

  url=url+"?uid="+user_id
  url=url+"&day="+day
  url=url+"&exe_id="+exe_id

  url=url+"&sid="+Math.random()
  xmlHttp.onreadystatechange=exercise_changed
  xmlHttp.open("GET",url,true)
  xmlHttp.send(null)
} 

function exercise_changed() 
{ 
  if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
  { document.getElementById("tip_exe").innerHTML=xmlHttp.responseText } 
} 

function period_detail(user_id, min_day, max_day, title)
{
  xmlHttp=GetXmlHttpObject()
  if (xmlHttp==null)
  {
    alert ("Browser does not support HTTP Request")
    return
  } 
  var url="aja_get_exes_sums.php"

  url=url+"?uid="+user_id
  url=url+"&min_day="+min_day
  url=url+"&max_day="+max_day
  url=url+"&title="+title

  url=url+"&sid="+Math.random()
  xmlHttp.onreadystatechange=period_changed
  xmlHttp.open("GET",url,true)
  xmlHttp.send(null)
} 

function period_changed() 
{ 
  if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
  { document.getElementById("tip_period").innerHTML=xmlHttp.responseText } 
} 

function GetXmlHttpObject()
{ 
  var objXMLHttp=null

  if (window.XMLHttpRequest)
  { objXMLHttp=new XMLHttpRequest() }
  else if (window.ActiveXObject)
  { objXMLHttp=new ActiveXObject("Microsoft.XMLHTTP") }

  return objXMLHttp
}

var dw_event =
{
  add: function(obj, etype, fp, cap)
  {
    cap = cap || false;
    if (obj.addEventListener)
    { obj.addEventListener(etype, fp, cap); }
    else
    {
      if (obj.attachEvent)
      { obj.attachEvent("on" + etype, fp); }
    }
  }, 
  remove: function(obj, etype, fp, cap)
  {
    cap = cap || false;
    if (obj.removeEventListener)
    { obj.removeEventListener(etype, fp, cap); }
    else
    {
      if (obj.detachEvent)
      { obj.detachEvent("on" + etype, fp); }
    }
  }, 
  DOMit: function(e)
  { 
    e = e? e: window.event;
    e.tgt = e.srcElement? e.srcElement: e.target;
    
    if (!e.preventDefault) e.preventDefault = function ()
    { return false; }
    if (!e.stopPropagation) e.stopPropagation = function ()
    {
      if (window.event)
      { window.event.cancelBubble = true; }
    }
        
    return e;
  }
  
}

var viewport =
{
  getWinWidth: function ()
  {
    this.width = 0;
    if (window.innerWidth)
    { this.width = window.innerWidth - 18; }
    else if (document.documentElement && document.documentElement.clientWidth) 
    { this.width = document.documentElement.clientWidth; }
    else if (document.body && document.body.clientWidth) 
    { this.width = document.body.clientWidth; }
  },
  getWinHeight: function ()
  {
    this.height = 0;
    if (window.innerHeight)
    { this.height = window.innerHeight - 18; }
    else if (document.documentElement && document.documentElement.clientHeight) 
    { this.height = document.documentElement.clientHeight; }
    else if (document.body && document.body.clientHeight) 
    { this.height = document.body.clientHeight; }
  },
  getScrollX: function ()
  {
    this.scrollX = 0;
    if (typeof window.pageXOffset == "number")
    { this.scrollX = window.pageXOffset; }
    else if (document.documentElement && document.documentElement.scrollLeft)
    { this.scrollX = document.documentElement.scrollLeft; }
    else if (document.body && document.body.scrollLeft) 
    { this.scrollX = document.body.scrollLeft; }
    else if (window.scrollX)
    { this.scrollX = window.scrollX; }
  },
  getScrollY: function ()
  {
    this.scrollY = 0;    
    if (typeof window.pageYOffset == "number")
    { this.scrollY = window.pageYOffset; }
    else if (document.documentElement && document.documentElement.scrollTop)
    { this.scrollY = document.documentElement.scrollTop; }
    else if (document.body && document.body.scrollTop) 
    { this.scrollY = document.body.scrollTop; }
    else if (window.scrollY)
    { this.scrollY = window.scrollY; }
  },
  getAll: function ()
  {
    this.getWinWidth();
    this.getWinHeight();
    this.getScrollX();
    this.getScrollY();
  }
}

function doAjaxExeInfo(style, e, user_id, day, exe_id)
{
  if ( typeof Tooltip == "undefined" || !Tooltip.ready )
  { return; }
  Tooltip.show('exe', style, e, null, user_id, day, null, exe_id, null);
}

function doAjaxPeriodInfo(style, e, user_id, min_day, max_day, title)
{
  if ( typeof Tooltip == "undefined" || !Tooltip.ready )
  { return; }
  Tooltip.show('period', style, e, null, user_id, min_day, max_day, null, title);
}

function doAjaxText(style, e, msg)
{
  if ( typeof Tooltip == "undefined" || !Tooltip.ready )
  { return; }
  Tooltip.show('text', style, e, msg, null, null, null, null, null);
}

function closeAjax()
{
  if ( typeof Tooltip == "undefined" || !Tooltip.ready )
  { return; }
  Tooltip.hide();
}

var Tooltip =
{
  followMouse: true,
  offX: 8,
  offY: 12,
  tipID: "tipDiv",
  showDelay: 100,
  hideDelay: 200,
  
  ready:false, timer:null, tip:null, 

  init: function()
  {  
    if ( document.createElement && document.body && typeof document.body.appendChild != "undefined" )
    {
      if ( !document.getElementById(this.tipID) )
      {
	var el = document.createElement("DIV");
	el.id = this.tipID; document.body.appendChild(el);
      }
      this.ready = true;
    }
  },
  show: function(tip_type, style, e, msg, user_id, day1, day2, exe_id, title)
  {
    this.tipID = style;
    if ( document.createElement && document.body && typeof document.body.appendChild != "undefined" )
    {
      if ( !document.getElementById(this.tipID) )
      {
	var el = document.createElement("DIV");
	el.id = this.tipID; document.body.appendChild(el);
      }
      this.ready = true;
    }
    if (this.timer)
    { clearTimeout(this.timer);	this.timer = 0; }
    this.tip = document.getElementById( this.tipID );
    if (this.followMouse)
    { dw_event.add( document, "mousemove", this.trackMouse, true ); }
    this.writeTip("");
    if (tip_type == 'exe')
    { exercise_detail(user_id, day1, exe_id); }
    else
    {
      if (tip_type == 'period')
      { period_detail(user_id, day1, day2, title); }
      else
      { this.writeTip(msg); }
    }
    viewport.getAll();
    this.positionTip(e);
    this.timer = setTimeout("Tooltip.toggleVis('" + this.tipID + "', 'visible')", this.showDelay);
  },
  writeTip: function(msg)
  {
    if ( this.tip && typeof this.tip.innerHTML != "undefined" ) this.tip.innerHTML = msg;
  },
  positionTip: function(e)
  {
    if ( this.tip && this.tip.style )
    {
      var x = e.pageX? e.pageX: e.clientX + viewport.scrollX;
      var y = e.pageY? e.pageY: e.clientY + viewport.scrollY;

      if ( x + this.tip.offsetWidth + this.offX > viewport.width + viewport.scrollX )
      {
	x = x - this.tip.offsetWidth - this.offX;
	if ( x < 0 ) x = 0;
      }
      else
      { x = x + this.offX; }
  
      if ( y + this.tip.offsetHeight + this.offY > viewport.height + viewport.scrollY )
      {
	y = y - this.tip.offsetHeight - this.offY;
	if ( y < viewport.scrollY ) y = viewport.height + viewport.scrollY - this.tip.offsetHeight;
      }
      else
      { y = y + this.offY; }
      
      this.tip.style.left = x + "px"; this.tip.style.top = y + "px";
    }
  },
  hide: function()
  {
    if (this.timer)
    { clearTimeout(this.timer);	this.timer = 0; }
    this.timer = setTimeout("Tooltip.toggleVis('" + this.tipID + "', 'hidden')", this.hideDelay);
    if (this.followMouse)
    { dw_event.remove( document, "mousemove", this.trackMouse, true ); }
    this.tip = null; 
  },
  toggleVis: function(id, vis)
  {
    var el = document.getElementById(id);
    if (el) el.style.visibility = vis;
  },
  trackMouse: function(e)
  {
    e = dw_event.DOMit(e);
    Tooltip.positionTip(e);
  }
}

