var isMac = (navigator.userAgent.indexOf("mac") != -1) || (navigator.userAgent.indexOf("Mac") != -1);
var isOpera = (navigator.userAgent.indexOf('Opera') != -1);
var isInternetExplorer = (navigator.userAgent.indexOf('MSIE') != -1);
var isMozilla = (navigator.userAgent.indexOf('Gecko') != -1);
var isNetscape6 = (navigator.userAgent.indexOf('Netscape') != -1 && isMozilla);
var isNavigator4 = (document.layers);
var isKonqueror = (navigator.userAgent.indexOf('Konqueror') != -1);
var isDocumentObjectModel = (isInternetExplorer || isMozilla || isOpera);

function getElement(elementIdentifier)
{
	if (isInternetExplorer)
	{
		return document.getElementById(elementIdentifier);
	}
	else if (isDocumentObjectModel)
	{
		return findDOMElement(elementIdentifier)
	}
	else if (isNavigator4)
	{
		for (var i = 0; i < document.forms.length; i++)
		{
			element = eval("document.forms[i].elements['" + elementIdentifier + "']");

			if (element)
			{
				return element;
			}
		}

		for (var i = 0; i < document.layers.length; i++)
		{
			if (document.layers[i].document.name == elementIdentifier)
			{
				return document.layers[i].document;
			}
		}
	}
	return null;
}

function findDOMElement(elementIdentifier)
{
	for (var i = 0; i < document.images.length; i++)
	{
		if (document.images[i].name == elementIdentifier)
		{
			return document.images[i];
		}
	}

	return document.getElementById(elementIdentifier);
}

function hideAllElementsBehind(elementIdentifier)
{
	if (document.all)
	{
		hideElementsBehind('SELECT', document.getElementById(elementIdentifier));
		hideElementsBehind('APPLET', document.getElementById(elementIdentifier));
	}
}

function showAllElements()
{
	if (document.all)
	{
		showElements('SELECT');
		showElements('APPLET');
	}
}

function hideElementsBehind(elementIdentifier, elementInFront)
{
	for (var i = 0; i < document.all.tags(elementIdentifier).length; i++)
	{
		elementBehind = document.all.tags(elementIdentifier)[i];

		if (elementBehind && elementBehind.offsetParent)
		{
			elementBehindLeft = elementBehind.offsetLeft;
			elementBehindTop = elementBehind.offsetTop;
			elementBehindParent = elementBehind.offsetParent;

			while (elementBehindParent.tagName.toUpperCase() != "BODY")
			{
				elementBehindLeft += elementBehindParent.offsetLeft;
				elementBehindTop += elementBehindParent.offsetTop;
				elementBehindParent = elementBehindParent.offsetParent;
			}

			elementBehindHeight = elementBehind.offsetHeight;
			elementBehindWidth = elementBehind.offsetWidth;

			if ((elementInFront.offsetLeft + elementInFront.offsetWidth) <= elementBehindLeft);
			else if ((elementInFront.offsetTop + elementInFront.offsetHeight) <= elementBehindTop);
			else if (elementInFront.offsetTop >= (elementBehindTop + elementBehindHeight));
			else if (elementInFront.offsetLeft >= (elementBehindLeft + elementBehindWidth));
			else
			{
				elementBehind.style.visibility = "hidden";
			}
		}
	}
}

function showElements(elementIdentifier)
{
	for (i = 0; i < document.all.tags(elementIdentifier).length; i++)
	{
		elementBehind = document.all.tags(elementIdentifier)[i];

		if (elementBehind && elementBehind.offsetParent)
		{
			elementBehind.style.visibility = "";
		}
	}
}

function setBackgroundColor(color, element)
{
	element.style.backgroundColor = color;
}

function getStyleElement(element)
{
	if (isNavigator4)
	{
		return element;
	}
	else
	{
		return element.style;
	}
}

function isSufficientArguments(functionName, argumentsArray, minArgumentsArrayLength)
{
	var result = false;

	if (3 <= arguments.length)
	{
		if (argumentsArray.length >= minArgumentsArrayLength)
		{
			result = true;
		}
		else
		{
			insufficientArgumentsAlert(functionName, argumentsArray.length, minArgumentsArrayLength);
		}
	}
	else
	{
		insufficientArgumentsAlert("isSufficientArguments", arguments.length, 3);
	}

	return result;
}

function insufficientArgumentsAlert(functionName, noGot, noNeeded)
{
	if (isSufficientArguments("insufficientArgumentsAlert", arguments, 3))
	{
		window.alert("Insufficient arguments to " + functionName + "() (got " + noGot + ", needed " + noNeeded + ")");
	}
}

