function AjaxCoverDiv_Show(divToCoverId, loadingImage, fnYPosition)
{
	return AjaxCoverDiv_Show(divToCoverId, loadingImage, fnYPosition, true);
}

function AjaxCoverDiv_Show(divToCoverId, loadingImage, fnYPosition, resetScroll)
{
	var newDiv = document.createElement('div');
	var img = document.createElement('img');
	var divToCover = document.getElementById(divToCoverId);

	if (!divToCover)
	{
		return;
	}

	fnYPosition = (typeof fnYPosition == 'function') ? fnYPosition : function() { return 0; };

	var selects = divToCover.getElementsByTagName('select');
	for (var i = 0; i < selects.length; i++)
	{
		selects[i].blur();
		if (navigator.userAgent.toLowerCase().indexOf('msie 6.0') != -1)
		{
			selects[i].style.visibility = 'hidden';
		}
		else
		{
		selects[i].disabled = true;
	}
	}

	newDiv.id = divToCoverId + '_newDiv';
	newDiv.style.position = 'absolute';
	newDiv.style.zIndex = '10000';
	newDiv.style.backgroundColor = '#fdfdfd';
	newDiv.className = 'AjaxCoverDiv';

	xOpacity(newDiv, .5);

	img.src = loadingImage;
	img.style.position = 'absolute';

	var width = xWidth(divToCoverId);
	var height = xHeight(divToCoverId);
	var top = xPageY(divToCoverId);
	var left = xPageX(divToCoverId);

	newDiv.style.width = width + 'px';
	newDiv.style.height = height + 'px';
	newDiv.style.top = top + 'px';
	newDiv.style.left = left + 'px';

	var imgLeft = (width / 2) - 16;
	var imgTop = fnYPosition(height, divToCover, -16) || ((height / 2) - 16);

	img.style.left = imgLeft + 'px';
	img.style.top = imgTop + 'px';

	document.getElementsByTagName('body')[0].appendChild(newDiv);
	newDiv.appendChild(img);

	if (resetScroll) scroll(0,0);
}

function AjaxCoverDiv_Hide(divToCoverId)
{
	var divToCover = document.getElementById(divToCoverId);
	if (!divToCover)
	{
		return;
	}

	var selects = divToCover.getElementsByTagName('select');
	for (var i = 0; i < selects.length; i++)
	{
		if (navigator.userAgent.toLowerCase().indexOf('msie 6.0') != -1)
		{
				selects[i].style.visibility = '';
			}
		else if (!selects[i].getAttribute('ajaxSetsDisabledProp'))
			{
			selects[i].disabled = false;
		}
	}

	var coverDiv = document.getElementById(divToCoverId + '_newDiv');
	if (coverDiv)
	{
		coverDiv.style.display = 'none';
		coverDiv.parentNode.removeChild(coverDiv);
	}
}

function AjaxCoverDiv_FindYMidpoint(upperObject, lowerObject, container, offset)
{
	if (!upperObject || !lowerObject)
	{
		return 0;
	}

	var upperBottomEdge = xPageY(upperObject) + xHeight(upperObject);
	var lowerTopEdge = xPageY(lowerObject);
	var midpoint = (upperBottomEdge + lowerTopEdge) / 2 + offset;

	// Inventory searches require that the image not cover the upperObject.  The
	// padding value of 7 is fairly arbitrary.
	if (midpoint < upperBottomEdge)
	{
		midpoint = upperBottomEdge + 7;
	}

	// Absolute positioning is not page-relative, but relative to the nearest positioned
	// parent.  So, if we're using absolute positioning, we have to compensate for the
	// container's position.
	return midpoint - xPageY(container);
}

function AjaxCoverDiv_FindElementWithClassName(tagName, className, rootObject, reverseOrder)
{
	var elements = (rootObject || document).getElementsByTagName(tagName);
	if (elements.length > 0)
	{
		for (var elementIndex = 0; elementIndex < elements.length; elementIndex++)
		{
			var i = reverseOrder ? elements.length - elementIndex - 1 : elementIndex;

			var classNames = elements[i].className.replace(/\s+/, ' ').split(' ');
			for (var j = 0; j < classNames.length; j++)
			{
				if (classNames[j] == className)
				{
					return elements[i];
				}
			}
		}
	}

	return null;
}
