function trim(stringToTrim) {
    return stringToTrim.replace(/^\s+|\s+$/g,"");
}

function Left(str, n){
    if (n <= 0)
        return "";
    else if (n > String(str).length)
        return str;
    else
        return String(str).substring(0,n);
}

function Right(str, n){
    if (n <= 0)
       return "";
    else if (n > String(str).length)
       return str;
    else {
       var iLen = String(str).length;
       return String(str).substring(iLen, iLen - n);
    }
}

// This function creates a new anchor element and uses location
// properties (inherent) to get the desired URL data. Some String
// operations are used (to normalize results across browsers).
function parseURL(p_sUrl) {
    var a =  document.createElement('a');
    a.href = p_sUrl;
    return {
        source: p_sUrl,
        protocol: a.protocol.replace(':',''),
        host: a.hostname,
        port: a.port,
        query: a.search,
        params: (function(){
            var ret = {},
                seg = a.search.replace(/^\?/,'').split('&'),
                len = seg.length, i = 0, s;
            for (;i<len;i++) {
                if (!seg[i]) { continue; }
                s = seg[i].split('=');
                ret[s[0]] = s[1];
            }
            return ret;
        })(),
        file: (a.pathname.match(/\/([^\/?#]+)$/i) || [,''])[1],
        hash: a.hash.replace('#',''),
        path: a.pathname.replace(/^([^\/])/,'/$1'),
        relative: (a.href.match(/tp:\/\/[^\/]+(.+)/) || [,''])[1],
        segments: a.pathname.replace(/^\//,'').split('/')
    };
}

function getTextWidth(p_sParentContainerId, p_sText) {
    var oParentContainer = document.getElementById(p_sParentContainerId);
    var oHiddenDiv = document.createElement("div");

    oHiddenDiv.style.whiteSpace = "nowrap";
    oHiddenDiv.style.position = "absolute";
    oHiddenDiv.style.visibility = "hidden";
    oHiddenDiv.style.height = "auto";
    oHiddenDiv.style.width = "auto";
    oParentContainer.appendChild(oHiddenDiv);
    oHiddenDiv.innerHTML = p_sText;

    var nDivWidth = oHiddenDiv.offsetWidth;

    oParentContainer.removeChild(oHiddenDiv);

    return nDivWidth;
}

function cutTextToFitWidth(p_sTextContainerId) {
    var oTextContainer = document.getElementById(p_sTextContainerId);
    var sText = oTextContainer.innerHTML;
    var nTextWidth = getTextWidth(p_sTextContainerId, sText);
    var nContainerWidth = oTextContainer.offsetWidth;
    var sCutText = "";
    var sNextChar;
    var sTrePuntini = "&hellip;";

    if (nTextWidth <= nContainerWidth)
        return;


    var iCount = -1;
    var saText = sText.split("");
    while (true)
    {
        if (++iCount >= saText.length)
            break;

        sNextChar = saText[iCount];
        nTextWidth = getTextWidth(p_sTextContainerId, sCutText + sNextChar + "." + sTrePuntini);
        
        if (nTextWidth > nContainerWidth)
            break;
        
        sCutText = sCutText + sNextChar;
    }
    
    oTextContainer.innerHTML = sCutText + sTrePuntini;
}

