function elementContains(elmOuter, elmInner)
{
    while (elmInner && elmInner != elmOuter)    
        elmInner = elmInner.parentNode;    
    if (elmInner == elmOuter)    
        return true;    
    return false;
}

function getPageXY(elm)
{
    var point = { x: 0, y: 0 };
    while (elm) {
        point.x += elm.offsetLeft;
        point.y += elm.offsetTop;
        elm = elm.offsetParent;
    }
    return point;
}

function setPageXY(elm, x, y)
{
    var parentXY = { x: 0, y: 0 };

    if (elm.offsetParent)    
        parentXY = getPageXY(elm.offsetParent);    

    elm.style.left = (x - parentXY.x) + 'px';
    elm.style.top  = (y - parentXY.y) + 'px';
}

function replaceHTML(dest_elm, src)
{
    var src_elm = null;
    if (typeof(dest_elm) == "string") dest_elm = document.getElementById(dest_elm);
    if (typeof(src) == "string") src_elm = document.getElementById(src);
    if (src_elm && dest_elm)
        dest_elm.innerHTML = src_elm.innerHTML;
    else if (dest_elm)
        dest_elm.innerHTML = src;
}

function hide(obj)
{
    if (typeof(obj) == "string")
        obj = document.getElementById(obj);
    obj.style.visibility = "hidden";
    obj.style.display = "none";
}

function show(obj, display)
{
    if (typeof(obj) == "string")
        obj = document.getElementById(obj);
    if (obj.style.display == "none")
        obj.style.display = typeof(display) == "undefined" ? "block" : display;
    obj.style.visibility = "visible";
}

function getStyle(elm, style)
{
    if (!document.getElementById) return;   
    var value = elm.style[toCamelCase(style)];
    
    if (!value)
    {        
        if (document.defaultView)
            value = document.defaultView.getComputedStyle(elm, "").getPropertyValue(style);
        else if (elm.currentStyle)
            value = elm.currentStyle[toCamelCase(style)];
    }    
    
    return value;
}

function toCamelCase(s)
{    
	for(var exp = /-([a-z])/; exp.test(s); s = s.replace(exp, RegExp.$1.toUpperCase()));
	return s;
}
