var lastObj = null;
var lastOpacity = 100;
var noHide = false;
var timeout = null;
var timeout2 = null;
var sliderHidden = true;

function totalElementXYOffset(obj) 
{
  var xOffset, yOffset, elParent;

  if (obj) {
    if (typeof obj.offsetTop == 'number') {
      yOffset = obj.offsetTop || 0;
      xOffset = obj.offsetLeft || 0;
      elParent = obj.offsetParent;

      while (elParent) {
        yOffset += elParent.offsetTop || 0;
        xOffset += elParent.offsetLeft || 0;
        elParent = elParent.offsetParent;
      }

    } else if (typeof obj.top == 'number') {
      yOffset = obj.top;
      xOffset = obj.left;

    } else if (typeof obj.y == 'number') {
      yOffset = obj.y;
      xOffset = obj.x;

    } else {
      return null;

    }
    return {x:xOffset, y:yOffset};
  }
}



function position_slider(obj)
{
  if (timeout != null) {
    clearTimeout (timeout);
    timeout = null;
  }

  gentle = !sliderHidden;
  restore_slider();
  sliderHidden = false;
  lastObj = obj;
  var pos = totalElementXYOffset(obj);
  var slider = oFind('slider');
  oShow(slider);
  shiftX(slider, pos.x - 43);
  if (!gentle)
    shiftY(slider, pos.y + 3);

  else {
    if (timeout2 != null) {
      clearTimeout (timeout2);
      timeout2 = null;
    }
    slideToY(pos.y + 3, -1);
  }

}

function slideToY(y, total)
{
  var slider = oFind('slider');
  var sliderY = oTop(slider);
  var dist = Math.abs(sliderY - y);

  if (total == -1)
    total = dist;

  var offset = 40.0 * parseFloat(dist / total) * parseFloat(dist / total) + 5;

  if (dist < 6) {
    shiftY(slider, y);
    return;

  } else if (sliderY > y)
    shiftY(slider, sliderY - offset);

  else
    shiftY(slider, sliderY + offset);

  timeout2 = setTimeout('slideToY(' + y + ', ' + total + ')', 30);

}

function blur_slider(obj)
{
  if (obj == lastObj)
    timeout = setTimeout('hide_gentle()', 300);

  lastObj = null;
}

function restore_slider()
{
  var slider = oFind('slider');
  lastOpacity = 100;
  slider.style.filter = 'alpha(opacity=100)';
}

function hide_gentle()
{
  var slider = oFind('slider');
  if (lastOpacity == 0) {
    oHide(slider);
    restore_slider();
    timeout = null;
    sliderHidden = true;

  } else {
    lastOpacity -= 10;
    slider.style.filter = 'alpha(opacity=' + lastOpacity + ')';
    sAlpha(slider, lastOpacity);
    timeout = setTimeout('hide_gentle()', 100);
  }
}


function onresizeHandler()
{
  if (lastObj != null)
    position_slider(lastObj);
}

window.onresize = onresizeHandler;
onresizeHandler();
