function getScrollingPosition()
{
	var position = [0, 0];
	
	if (typeof window.pageYOffset != "undefined")
	{
		position = [window.pageXOffset, window.pageYOffset];
	}
	else if (typeof document.documentElement.scrollTop != "undefined" &&
		document.documentElement.scrollTop > 0 ||
		document.documentElement.scrollLeft > 0)
	{
		position = [document.documentElement.scrollLeft, document.documentElement.scrollTop];
	}
	else if (typeof document.body.scrollTop != "undefined")
	{
		position = [document.body.scrollLeft, document.body.scrollTop];
	}
	
	return position;
}

function getCursorPosition(event)
{
	if (typeof event == "undefined")
	{
		event = window.event;
	}
	
	var scrollingPosition = getScrollingPosition();
	var cursorPosition = [0, 0];
	
	if (typeof event.pageX != "undefined" && typeof event.x != "undefined")
	{
		cursorPosition[0] = event.pageX;
		cursorPosition[1] = event.pageY;
	}
	else
	{
		cursorPosition[0] = event.clientX + scrollingPosition[0];
		cursorPosition[1] = event.clientY + scrollingPosition[1];
	}
	
	return cursorPosition;
}

function getViewportSize()
{
	var size = [0, 0];
	
	if (typeof window.innerWidth != "undefined")
	{
		size = [window.innerWidth, window.innerHeight];
	}
	else if (typeof document.documentElement != "undefined" &&
		typeof document.documentElement.clientWidth != "undefined" &&
		document.documentElement.clientWidth != 0)
	{
		size = [document.documentElement.clientWidth, document.documentElement.clientHeight];
	}
	else
	{
		size = [document.getElementsByTagName("body")[0].clientWidth, document.getElementsByTagName("body")[0].clientHeight];
	}
	
	return size;
}