var openWindow = null;
var currentCloser = null;

var mouseOverButton = false;
var mouseOverBox = false;

function overDay( caller, index )
{
	if ( openWindow && openWindow != $(index) )
	{
		hideEvents( null );
	}

	var topOffset = Element.getHeight( caller ) + 0;
	var boxHeight = Element.getHeight( $(index) );
	var parentOffset = Position.cumulativeOffset( caller );
	if ( topOffset + boxHeight + parentOffset[1] <= window.innerHeight + window.pageYOffset )
	{
		Position.clone( caller, $(index), { setWidth:false, setHeight:false, offsetTop:topOffset } );
	}
	else
	{
		Position.clone( caller, $(index), { setWidth:false, setHeight:false, offsetTop:(-boxHeight-2) } );
	}
	$(index).appear( {duration: 0.5 } );

	openWindow = $(index);
	mouseOverButton = true;
}

function outDay( caller, index )
{
	if( currentCloser ) currentCloser.stop();
	currentCloser = new PeriodicalExecuter( hideEvents, 0.5 );
	mouseOverButton = false;
}

function overEvents( caller )
{
	mouseOverBox = true;
}

function outEvents( caller )
{
	if( currentCloser ) currentCloser.stop();
	currentCloser = new PeriodicalExecuter( hideEvents, 0.5 );
	mouseOverBox = false;
}

function hideEvents( pe )
{
	if ( !mouseOverButton && !mouseOverBox )
	{
		if ( openWindow )
		{
			openWindow.fade( {duration: 0.5 } );
			openWindow = null;
		}
	}
	if ( pe ) pe.stop();
}
