
// get left of s until first occurence of c 

function tt_strLeft(s, c) 
{
    if ( (pos = s.lastIndexOf(c)) > -1)
        return s.substr(0, pos);
    return s;
}
 
// get right of s from first occurence of c 

function tt_strRight(s, c) 
{
    if ( (pos = s.lastIndexOf(c)) > -1)
        return s.substr(pos+1);
    return s;
}


function ttBacksearchDataId(node, classToken)      // classToken may be like 'js-MyId-'
{
    if (!node) {
        return '';
    }
    if (typeof(node.className) != 'undefined' && node.className)
    {
        var id = ttGetIdFromClassname(node, classToken);
        if (id !== null)
            return id;
    }
    return ttBacksearchDataId(node.parentNode, classToken)    
}


function ttGetIdFromClassname(node, classToken)    // classToken may be like 'js-MyId-'
{
    if (node.className.indexOf(classToken) >= 0)
    {
        var classes = node.className.split(' ');
        for (var i = 0 ; i < classes.length ; i++)
        {
            if (classes[i].indexOf(classToken) == 0)
            {
                return classes[i].substr(classToken.length);
            }
        }
        return '';
    }
    return null;
}


// -----------------------------------------------------------------------------
// positions and dimensions
// -----------------------------------------------------------------------------

function ttViewportWidth() 
{
    if (document.documentElement && document.documentElement.clientWidth) return document.documentElement.clientWidth;
    if (document.body && document.body.clientWidth ) return document.body.clientWidth;
    return window.innerWidth - 18;
}


function ttViewportHeight() 
{
    if (document.documentElement && document.documentElement.clientHeight) return document.documentElement.clientHeight;
    if (document.body && document.body.clientHeight) return document.body.clientHeight;
    return window.innerHeight - 18;
}


function ttViewportScrollX() 
{
    if (document.documentElement && document.documentElement.scrollLeft) return document.documentElement.scrollLeft;
    if (document.body && document.body.scrollLeft) return document.body.scrollLeft;
    if (window.pageXOffset) return window.pageXOffset;
    if (window.scrollX) return window.scrollX;
    return 0;
}


function ttViewportScrollY() 
{
    if (document.documentElement && document.documentElement.scrollTop) return document.documentElement.scrollTop;
    if (document.body && document.body.scrollTop) return document.body.scrollTop;
    if (window.pageYOffset) return window.pageYOffset;
    if (window.scrollY) return window.scrollY;
    return 0;
}


function ttPageX(elem)
{
    return elem.offsetParent ? elem.offsetLeft + ttPageX(elem.offsetParent) : elem.offsetLeft;
}


function ttPageY(elem)
{
    return elem.offsetParent ? elem.offsetTop + ttPageY(elem.offsetParent) : elem.offsetTop;
}


function ttHorzCenterInWindow(width)
{
    var x = (ttViewportWidth() - width) / 2 + ttViewportScrollX();
    return isNaN(x) ? 0 : x;
}


function ttVertCenterInWindow(height)
{
    var y = (ttViewportHeight() - height) / 2 + ttViewportScrollY();
    return isNaN(y) ? 0 : y;    
}

