if (!onupfunctions)
  var onupfunctions = new Array();

var old_on_up = document.onmouseup;

document.onmouseup = function(e)
{
  for (var i = 0; i < onupfunctions.length; i++)    
    onupfunctions[i](e);
  try {
    old_on_up();
  } catch (e) {}
};

var scrollInterval;


//scroll the window to move a control into view
function scroll_into_view(control_id)
{
  var control = document.getElementById(control_id);
  var top = 0;
  var bottom = 0;
  var tmp = control;
  
  //Walk up the DOM and add up all of the offset positions.
  while (tmp.offsetParent && tmp.tagName.toUpperCase() != 'BODY')
  {
    //if (tmp.id != "lightbox")
      top += tmp.offsetTop;
    tmp = tmp.offsetParent;
  }
  top += tmp.offsetTop;
  bottom = control.clientHeight + top;
  var scroll_top = getScrollOffset().pageYOffset;
  var scroll_left = getScrollOffset().pageXOffset;
  
  var padding = Math.floor((getSize().height - control.clientHeight) / 2);

  var win_top = getLightboxTop();
  
  // if the entire control is visible, don't do anything
  if (scroll_top < top && bottom < getSize().height)
    return;
    
  // visible if scrolled to the top
  if ((bottom - win_top) < getSize().height)
    scrollTo(win_top);
  // if we can center the control
  else if (padding > 0)
    scrollTo(top - padding);
  // the top of the control isn't visible.
  else if (scroll_top > top)
    scrollTo(top);
}

// set the interval to scroll to a y position in 25 steps
function scrollTo(y)
{
  if (y > getMaximumScroll())
  	y = getMaximumScroll()
  step = Math.abs(getScrollOffset().pageYOffset - y) / 25;
  scrollInterval = setInterval("smoothScroll(" + step + "," + y + ")", 5);
  
}

// scroll page by step pixels until we reach dest_y
function smoothScroll(step, dest_y)
{
  var y_pos = getScrollOffset().pageYOffset;
  var new_y;
  if (y_pos > dest_y)
    new_y = Math.max(y_pos - step, dest_y);
  else
    new_y = Math.min(y_pos + step, dest_y);
  window.scroll(0, new_y);
  if (new_y == dest_y)
    clearInterval(scrollInterval);
}

// cross-browser method to get window size
function getSize() {
  var size = new Object();
  size.width = 0;
  size.height = 0;
  if( typeof( window.innerWidth ) == 'number' )
  {
    //Non-IE
    size.width = window.innerWidth;
    size.height = window.innerHeight;
  } else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
    //IE 6+ in 'standards compliant mode'
    size.width = document.documentElement.clientWidth;
    size.height = document.documentElement.clientHeight;
  } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
    //IE 4 compatible
    size.width = document.body.clientWidth;
    size.height = document.body.clientHeight;
  }
  return size;
}

// cross-browser method to get window scroll offsets
function getScrollOffset()
{
  var offset = new Object();
  offset.pageYOffset = document.documentElement.scrollTop;
  offset.pageXOffset = document.documentElement.scrollLeft;
  return offset;
}

// cross-browser method to get window scroll offsets
function getElementScrollOffset(element_id)
{
  var elem = document.getElementById(element_id);
  
  var offset = new Object();
  if ( typeof(elem.pageYOffset) == 'number')
  {
    offset.pageYOffset = elem.pageYOffset;
    offset.pageXOffset = elem.pageXOffset;
  } else {
    offset.pageYOffset = elem.scrollTop;
    offset.pageXOffset =  elem.scrollLeft;
  }
  return offset;
}

function getMaximumScroll()
{
  var page_height = document.body.clientHeight;
  
  if (typeof( window.innerHeight ) == 'number')
  	var window_height = window.innerHeight
  else if (document.documentElement && document.documentElement.clientHeight)
    var window_height = document.documentElement.clientHeight;
  if (page_height > window_height)
  	return page_height - window_height;
  else
  	return 0;    
}

function getLightboxTop()
{
  try {
    var tmp = document.getElementById("lightbox");
    var top = 0;
    
    if (tmp.style.display == "none")
      return 0;
    while (tmp.offsetParent && tmp.tagName.toUpperCase() != 'BODY')
    {
      top += tmp.offsetTop;
      tmp = tmp.offsetParent;
    }
    top += tmp.offsetTop;
    if (top > 10)
      return top - 10;
    else 
      return top;
  } catch (e) {
    return 0;
  }
}

function getStyle(el,styleProp)
{
	var x = document.getElementById(el);
    var y;
	if (x.currentStyle)
		y = x.currentStyle[styleProp];
	else if (window.getComputedStyle)
		y = document.defaultView.getComputedStyle(x,null).getPropertyValue(styleProp);
	return y;
}