function containsDOM (container, containee)
{
	var isParent = false;
	do
	{
		if ( ( isParent = container == containee ) )
			break;
		containee = containee.parentNode;
	}
	while (containee != null);
	return isParent;
}

function containsEvt ( object, evt )
{
	var contains = false;
	
	if (object.contains && evt.toElement)
	{
		contains = object.contains(evt.toElement);
	}
	else if (evt.relatedTarget)
	{
		contains = containsDOM(object, evt.relatedTarget);
	}

	return contains;
}

function isNodeInParent( parent, event )
{
	var contains = false;
	
	if (parent.contains && event.toElement)
	{
		contains = parent.contains(event.toElement);
	}
	else if (event.relatedTarget)
	{
		contains = containsDOM(parent, event.relatedTarget);
	}
	
	return contains;
}

function findPos(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}
	return [curleft,curtop];
}

function getElementsByClassName(node, classname)
{
	var a = [];
	var re = new RegExp('\\b' + classname + '\\b');
	var els = node.getElementsByTagName("*");
	for(var i=0,j=els.length; i<j; i++)
		if(re.test(els[i].className))a.push(els[i]);
	return a;
}

function getStyle( el, styleProp )
{
	var x = $( el );
	if (x.currentStyle)
		var y = x.currentStyle[ styleProp ];
	else if (window.getComputedStyle)
		var y = document.defaultView.getComputedStyle( x,null ).getPropertyValue( styleProp );
	if( y == null || y == "" )
	{
		// kludge for opera's inability to compute border styles
		y = 0;
	}

	return y;
}
