function getScrollY() {
  var scrOfY = 0;
  if( typeof( window.pageYOffset ) == 'number' ) 
  {
    //FF compliant
    scrOfY = window.pageYOffset;
  } 
  else if( document.body && document.body.scrollTop) 
  {
    //DOM compliant
    scrOfY = document.body.scrollTop;
  } 
  else if( document.documentElement && document.documentElement.scrollTop) 
  {
    //IE6 standards compliant mode
    scrOfY = document.documentElement.scrollTop;
  }
  return scrOfY;
}

function windowHeight()	{
	if (window.innerHeight)
	{
		return window.innerHeight; 	
	}
	else if (document.documentElement.clientHeight)
	{
		return document.documentElement.clientHeight;
	}
	else if (document.body.clientHeight)
	{
		return document.body.clientHeight;
	}
	return 0;
}

var stellaTop = 0;
var offsetDelta = 0;
var offsetLast = getScrollY();

var CurrPoint = 0;
var DestPoint = 0;
var stella;

function scroll()
{
	stella = document.getElementById("stella");
	var left = document.getElementById("left");
	var right = document.getElementById("right");
	var header = document.getElementById("header");
	var pageYOffset = getScrollY();
	var wHeight = windowHeight();
	offsetDelta = pageYOffset - offsetLast;
	offsetLast = pageYOffset;
	var stellaStartPosition = 0;
	var kPoint = 0;
	if (!stella)
	{
		return;
	}
	if (!right)
	{
		return;
	}
	if (stella.offsetHeight > right.offsetHeight)
	{
		return;
	}
	if (Math.abs(offsetDelta) < 10)
	{
		return;
	}
	if (wHeight - (header.offsetHeight + stella.offsetHeight + left.offsetHeight) > 0)
	{
		stellaStartPosition = wHeight - (header.offsetHeight + stella.offsetHeight + left.offsetHeight);
	}
	else
	{
		kPoint = (header.offsetHeight + stella.offsetHeight + left.offsetHeight) - wHeight;
	}
	if (offsetLast > header.offsetHeight + right.offsetHeight - wHeight)
	{
	 	offsetLast = header.offsetHeight + right.offsetHeight - wHeight;
	}
	var xCurrPoint = stellaTop;
	if (pageYOffset < kPoint )
	{
	 	stellaTop = stellaStartPosition;
	}
	else if ((offsetDelta > 0 && pageYOffset > offsetLast) ||
					 (offsetDelta < 0 && pageYOffset > offsetLast))
	{
		stellaTop = stellaStartPosition - kPoint + offsetLast;
	}
	else
	{
		stellaTop = stellaStartPosition - kPoint + pageYOffset;
	}
	var xDestPoint = stellaTop;
	if (Math.abs(xDestPoint - xCurrPoint) < 10)
	{
		return;
	}
	CurrPoint = xCurrPoint;
	DestPoint = xDestPoint;
	move();
}

function moveStella()
{
	setTimeout("scroll()", 300);
}

function move()
{
	if (Math.abs(CurrPoint - DestPoint) <= 4)
	{
		stella.style.top = DestPoint + 'px';
		CurrPoint = DestPoint;
	}
	else
	{
		CurrPoint = Math.round((3*CurrPoint + DestPoint) / 4);
		stella.style.top = CurrPoint + 'px';
		setTimeout("move()", 100);
	}
}

var menuItemIds = new Array();

var hasDropDown = new Array()
{
	
}

var initTopMenu = function ()
{
	var menuItems = $$('#nav .top-level');
	var submenuDivs = $$('#nav .bg');
	var submenuEms = $$('#nav em');
	var submenuSpans = $$('#nav span');

	submenuDivs.setStyle('display','block');
	submenuDivs.setStyle('visibility','hidden');
	submenuEms.setStyle('visibility','hidden');
	submenuSpans.setStyle('visibility','hidden');
	
	submenuDivs.each(function(item,index) {
		item.setProperty('id','submenu-div-' + index);
		item.setProperty('_index',index);
	});
	
	submenuEms.each(function(item,index) {
		item.setProperty('id','submenu-em-' + index);
		item.setProperty('_index',index);
	});

	submenuSpans.each(function(item,index) {
		item.setProperty('id','submenu-span-' + index);
		item.setProperty('_index',index);
	});
	
	menuItems.each(function(item, index) {
		item.setProperty('id','menu-item-' + index);
		item.setProperty('_index',index);
		item.addEvent('mouseenter',mouseOver);
		item.addEvent('mouseleave',mouseOut);
	});

	stella = document.getElementById("stella");
	var left = document.getElementById("left");
	var header = document.getElementById("header");
	var right = document.getElementById("right");
	var wHeight = windowHeight();
	var stellaStartPosition = 0;
	if (stella.offsetHeight < right.offsetHeight)
	{
		if (wHeight - (header.offsetHeight + stella.offsetHeight + left.offsetHeight) > 0)
		{
			stellaStartPosition = wHeight - (header.offsetHeight + stella.offsetHeight + left.offsetHeight);
			CurrPoint = 0;
			DestPoint = stellaStartPosition;
			move();
		}
	}


}

var mouseOver = function(event)
{
	var mask = /.*-.*-(.*)/;
	var matches = this.getProperty('id').match(mask);
	if (matches.length > 1)
	{
		var menuItemCoord = this.getCoordinates();
		var submenuDivCoord = $('submenu-div-' + matches[1]).getCoordinates();
		var navCoord = $('nav').getCoordinates();

		var newLeft = menuItemCoord.left - submenuDivCoord.width / 2 - navCoord.left;
		var maxLeft = navCoord.width - submenuDivCoord.width  + navCoord.left;

		if (menuItemCoord.left > navCoord.left + navCoord.width / 2){
			newLeft += menuItemCoord.width / 2
		} else {
			newLeft -= menuItemCoord.width / 2
		}

		if (newLeft > maxLeft)
		{
			newLeft = maxLeft;
		}
		else if (newLeft < 0)
		{
			newLeft = 0;
		}

		$('submenu-div-' + matches[1]).setStyle('left',Math.round(newLeft) + 'px');
		var dropOpacityChange = new Fx.Style('submenu-div-' + matches[1], 'opacity',{duration:1, transition: Fx.Transitions.Quad.easeIn });
		var emHoverOpacityChange = new Fx.Style('submenu-em-' + matches[1], 'opacity',{duration:1, transition: Fx.Transitions.Quad.easeIn });
		var spanHoverOpacityChange = new Fx.Style('submenu-span-' + matches[1], 'opacity',{duration:1, transition: Fx.Transitions.Quad.easeIn });
		if (!$('submenu-div-' + matches[1]).getProperty('class').test('no-drop'))
		{
			dropOpacityChange.start(0, 1);
		}
		emHoverOpacityChange.start(0, 1);
		spanHoverOpacityChange.start(0, 1);
	}
}

var mouseOut = function(event)
{
	var mask = /.*-.*-(.*)/;
	var matches = this.getProperty('id').match(mask);
	if (matches.length > 1)
	{
		var dropOpacityChange = new Fx.Style('submenu-div-' + matches[1], 'opacity',{duration:1, transition: Fx.Transitions.Quad.easeOut});
		var emHoverOpacityChange = new Fx.Style('submenu-em-' + matches[1], 'opacity',{duration:1, transition: Fx.Transitions.Quad.easeOut});
		var spanHoverOpacityChange = new Fx.Style('submenu-span-' + matches[1], 'opacity',{duration:1, transition: Fx.Transitions.Quad.easeOut});
		if (!$('submenu-div-' + matches[1]).getProperty('class').test('no-drop'))
		{
			dropOpacityChange.start(1, 0);
		}
		emHoverOpacityChange.start(1, 0);
		spanHoverOpacityChange.start(1, 0);
	}
}

if (window.addEventListener)
	window.addEventListener("load", initTopMenu, false);
else if (window.attachEvent)
	window.attachEvent("onload", initTopMenu);
	
window.onscroll = moveStella;
window.onresize = moveStella;

function mformat(n,zn)
{
	z = "0000000000";
	n = parseFloat(n);
	p = Math.pow(10, zn);
	s = String(Math.round(n*p)/p);
	s = (s.match(/\./)? s+z : s+"."+z).match('\\d+\\.\\d{'+zn+'}');
	return s;
}
	