
/* - ++resource++tooltip.js - */
// JavaScript Document
//
var replaceIndex = 0;

function encode_utf8(rohtext) {
    // dient der Normalisierung des Zeilenumbruchs
    rohtext = rohtext.replace(/\r\n/g,"\n");
    var utftext = "";
    for(var n=0; n<rohtext.length; n++)
        {
        // ermitteln des Unicodes des  aktuellen Zeichens
        var c=rohtext.charCodeAt(n);
        // alle Zeichen von 0-127 => 1byte
        if (c<128)
            utftext += String.fromCharCode(c);
        // alle Zeichen von 127 bis 2047 => 2byte
        else if((c>127) && (c<2048)) {
            utftext += String.fromCharCode((c>>6)|192);
            utftext += String.fromCharCode((c&63)|128);}
        // alle Zeichen von 2048 bis 66536 => 3byte
        else {
            utftext += String.fromCharCode((c>>12)|224);
            utftext += String.fromCharCode(((c>>6)&63)|128);
            utftext += String.fromCharCode((c&63)|128);}
        }
    return utftext;
}

function registerTooltipOnTerm(node, termKey) {
    var contents = node.nodeValue;
    var index = contents.toLowerCase().indexOf(termKey.toLowerCase());
    if (index < 0) { return false };

    var parent = node.parentNode;

    if (parent.className != "tooltip") {
    // make 3 shiny new nodes
    replaceIndex++;

    var hiword = document.createElement("span");

    hiword.className = "tooltip virgin-tooltip collapsed kssattr-token-"+escape(encode_utf8(termKey))+" kssattr-index-"+replaceIndex;
    hiword.appendChild(document.createTextNode(contents.substr(index, termKey.length)));
    definition = document.createElement("div");
    definition.className="definition token-"+replaceIndex;
    defpara = document.createElement("p");
    defpara.className = "emptydefinition";
    definition.appendChild(defpara);

    hiword.appendChild(definition);
    parent.insertBefore(document.createTextNode(contents.substr(0, index)), node);
    parent.insertBefore(hiword, node);
    parent.insertBefore(document.createTextNode(contents.substr(index+termKey.length)), node);
    parent.removeChild(node);
    }

}

function wrapTooltipTerms(terms, startnode) {

    if (!W3CDOM){return false};
    if (!terms){return false};
    if (!startnode){return false};

    for (var index in terms) {
        termKey = terms[index];
        walkTextNodes(startnode, registerTooltipOnTerm, termKey, '');
    }

}

function registerTooltipsOnContentArea() {
    if (!W3CDOM) { return false };

    var contentarea = getContentArea();
    wrapTooltipTerms(tokens, contentarea);
}


jq(function(){
    try {
        if (tokens) {
            registerTooltipsOnContentArea();
        }
    } catch(err) {

    }
});


