function getXMLHTTPObject()
{
	if(typeof(XMLHttpRequest)!='undefined')
		return new XMLHttpRequest();

	ActiveXObjectDefinition = ['Msxml2.XMLHTTP.6.0', 'Msxml2.XMLHTTP.4.0', 'Msxml2.XMLHTTP.3.0', 'Msxml2.XMLHTTP', 'Microsoft.XMLHTTP'];
	for(Loop=0;Loop<ActiveXObjectDefinition.length;Loop++)
	{
		try
		{
			return new ActiveXObject(ActiveXObjectDefinition[Loop]);
		}
		catch(e)
		{
		}
	}
	return null;
}

function GetElementPositionX(Element)
{
	var x = Element.offsetLeft;
	var Parent = Element.offsetParent;
	while(Parent)
	{
		x += Parent.offsetLeft;
		Parent = Parent.offsetParent;
	}
	return x;
}

function GetElementPositionY(Element)
{
	var y = Element.offsetTop;
	var Parent = Element.offsetParent;
	while(Parent)
	{
		y += Parent.offsetTop;
		Parent = Parent.offsetParent;
	}
	return y;
}

function GetBrowserInnerWidth()
{
	if (document.all)
		return(document.body.clientWidth);
	else
		return(window.innerWidth);
}

function GetBrowserInnerHeight()
{
	if (document.all)
		return(document.body.clientHeight);
	else
		return(window.innerHeight);
}

function GetBrowserScrollPositionX()
{
	if (document.all)
		return(document.body.scrollLeft);
	else
		return(window.pageXOffset);
}

function GetBrowserScrollPositionY()
{
	if (document.all)
		return(document.body.scrollTop);
	else
		return(window.pageYOffset);
}

function EventHandlerAdd(Object, Event, Handler)
{
	if (Object.attachEvent)
		Object.attachEvent("on"+Event, Handler);
	else if (Object.addEventListener)
		Object.addEventListener(Event, Handler, false);
}

function EventHandlerRemove(Object, Event, Handler)
{
	if (Object.detachEvent)
		Object.detachEvent("on"+Event, Handler);
	else if (Object.removeEventListener)
		Object.removeEventListener(Event, Handler, false);
}

function PreviousSibling(Object)
{
	NodeName = Object.nodeName;
	Object = Object.previousSibling;

	while((Object)&&(Object.nodeName!=NodeName))
		Object = Object.previousSibling;

	return(Object);
}

function NextSibling(Object)
{
	NodeName = Object.nodeName;
	Object = Object.nextSibling;

	while((Object)&&(Object.nodeName!=NodeName))
		Object = Object.nextSibling;

	return(Object);
}