function AjaxCoverDiv_Show(divToCoverId, loadingImage, fnYPosition)
{
	AjaxCoverDiv_Show(divToCoverId, loadingImage, fnYPosition, true, false);
}

function AjaxCoverDiv_Show(divToCoverId, loadingImage, fnYPosition, resetScroll, addToDiv)
{
	if (addToDiv == null) addToDiv = false;
	
	var newDiv = document.createElement('div');
	if (loadingImage.length > 0)
	{
		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);

	if (img != null)
	{
		img.src = loadingImage;
		img.style.position = 'absolute';
	}
	
	var width = xWidth(divToCoverId);
	var height = xHeight(divToCoverId);
	
	var top = 0;
	var left = 0;
	
	if (!addToDiv)
	{
		top = xPageY(divToCoverId);
		left = xPageX(divToCoverId);
	}
	
	newDiv.style.width = width + 'px';
	newDiv.style.height = height + 'px';
	newDiv.style.top = top + 'px';
	newDiv.style.left = left + 'px';

	if (img != null)
	{
		var imgLeft = (width / 2) - 16;
		var imgTop = fnYPosition(height, divToCover, -16) || ((height / 2) - 16);
		img.style.left = imgLeft + 'px';
		img.style.top = imgTop + 'px';
	}
		
	if (img != null) newDiv.appendChild(img);
	if (document.getElementById(divToCoverId + '_newdiv') != null)
	{
		document.getElementById(divToCoverId + '_newdiv') = newDiv;
	}
	else
	{
		if (addToDiv)
		{
			if (divToCover.tagName == 'TABLE' && navigator.userAgent.toLowerCase().indexOf('msie') != -1)
			{
				var container = document.createElement('div');
				container.id = divToCoverId + '_container';
				if (divToCover.parentNode)
				{
					divToCover.parentNode.replaceChild(container, divToCover);
				}
				container.appendChild(divToCover);
				container.appendChild(newDiv);
			}
			else
			{
				divToCover.appendChild(newDiv);
			}
		}
		else
		{
			document.getElementsByTagName('body')[0].appendChild(newDiv);
		}
	}

	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;
}

