
var htWord, htBefore, htAfter;
var HT_TRIM_BEFORE = 1;
var HT_TRIM_AFTER = 2;

Event.observe(window, 'load', function() {
    Event.observe(htContainerId, 'dblclick', ht);
});

if (htDefaultTab != "0" && htDefaultTab != "1") {
    htDefaultTab != "0";
}




function ht(event) {
    htWord = '';
    htBefore = '';
    htAfter = '';
            
    if (window.getSelection) {
        htWindowGetSelection();
    }
    else if (document.getSelection) {
        htWord = document.getSelection();
    }
    else if (document.selection) {
        htDocumentSelection();
    }
    else return;
            
    htWord = htTrim(htWord);
    htBefore = htTrim(htBefore, HT_TRIM_BEFORE);
    htAfter = htTrim(htAfter, HT_TRIM_AFTER);
    
    $('htPopupContent').innerHTML = "<div id='htPopupLoader'><img src='/loader.gif'/><br/>Pesquisa por \"" + htWord + "\"</div>";

    $('htPopup').style.left = Event.pointerX(event);
    $('htPopup').style.top = Event.pointerY(event) + 16;
    $('htPopup').style.display = 'block';
    $('htShadow').style.left = Event.pointerX(event) + 3;
    $('htShadow').style.top = Event.pointerY(event) + 19;
    $('htShadow').style.display = 'block';
    
    Event.observe(document.body, 'click', htOnWindowClick);
    Event.observe(document.body, 'keydown', htOnWindowKeyDown);
    Event.observe(window, 'click', htOnWindowClick);	
    Event.observe(window, 'keydown', htOnWindowKeyDown);
    
    new Ajax.Updater('htPopupContent', '/infopedia_hiper', {
        //parameters: { p: escape(htWord), a: escape(htBefore), d: escape(htAfter), t: escape(htDefaultTab) }
        parameters: { p: encodeURI(htWord), a: encodeURI(htBefore), d: encodeURI(htAfter), t: encodeURI(htDefaultTab) }
    });
}


function htDocumentSelection() {
    var selRange = document.selection.createRange();
    htWord = selRange.text;
	
    // before
    var range = selRange.duplicate();
    range.collapse(true);
    range.moveStart('character', -30);
    htBefore = range.text;

    // after
    range = selRange.duplicate();
    range.collapse(false);
    range.moveEnd('character', 30);
    htAfter = range.text;
}


function htWindowGetSelection() {
    var sel = window.getSelection();
    htWord = sel.getRangeAt(0).toString();
    
    // before
    var range = sel.getRangeAt(0).cloneRange();
    range.collapse(true);
    var node = range.startContainer;
    range.setStart(node, 0);		
    
    while (range.toString().length < 30 && (node.nodeType != 1 || (node.nodeType == 1 && node.id != htContainerId))) {
        range.setStartBefore(node);
        node = range.startContainer;
        range.setStart(node, 0);
    }
    htBefore = range.toString();
    htBefore = htBefore.substr(Math.max(0, htBefore.length - 30));
    range.detach();
    
    // after
    range = sel.getRangeAt(0).cloneRange();
    range.collapse(false);
    node = range.endContainer;
    range.setEnd(node, node.textContent.length);
    
    while (range.toString().length < 30 && (node.nodeType != 1 || (node.nodeType == 1 && node.id != htContainerId))) {
        range.setEndAfter(node);
        node = range.endContainer;
        var endOffset = (node.nodeType == 1 ? node.childNodes.length : range.toString().length);
        range.setEnd(node, endOffset);
    }
    
    htAfter = range.toString();
    htAfter = htAfter.substr(0, Math.min(30, htAfter.length));
    range.detach();
}


function htOnTabClick(tab, mode) {
    if (tab == null) return;
    if (mode < 2 || mode > 3) return;
    
    if (tab == $('htTabEnc')) {
        if ($('htTabEnc').className == 'clicked') return;
        $('htTabEnc').className = 'clicked';
        $('htTabDic').className = 'normal';
        $('htEnciclopedia').style.display = 'block';
        $('htDicionarios').style.display = 'none';
    }
    else if (tab == $('htTabDic')) {
        if ($('htTabDic').className == 'clicked') return;
        $('htTabEnc').className = 'normal';
        $('htTabDic').className = 'clicked';
        $('htEnciclopedia').style.display = 'none';
        $('htDicionarios').style.display = 'block';
    }
}


function htOnWindowClick(event) {
    if ($(Event.element(event)) == $('htPopup')) return;
    if ($(Event.element(event)).up('#htPopup') == $('htPopup')) return;
    htClose();
}

    
function htOnWindowKeyDown(event) {
    if (event.keyCode == Event.KEY_ESC) htClose();
}


function htClose() {
    Event.stopObserving(document.body, 'click', htOnWindowClick);
    Event.stopObserving(document.body, 'keydown', htOnWindowKeyDown);
    Event.stopObserving(window, 'click', htOnWindowClick);
    Event.stopObserving(window, 'keydown', htOnWindowKeyDown);
    $('htShadow').style.display = 'none';
    $('htPopup').style.display = 'none';
}

    
function htTrim(s, mode) {
    if (mode == HT_TRIM_BEFORE) {
        var i = 0;
        while (i < s.length && s.charAt(i) != ' ') i++;
        if (i > 0) s = s.substr(i);
    }
    else if (mode == HT_TRIM_AFTER) {
        var i = s.length - 1;
        while (i >= 0 && s.charAt(i) != ' ') i--;
        if (i < s.length - 1) s = s.substr(0, i + 1);
    }
    
    var i = 0;
    while (i < s.length && s.charAt(i) == ' ') i++;
    if (i > 0) s = s.substr(i);
    
    i = s.length - 1;
    while (i >= 0 && s.charAt(i) == ' ') i--;
    if (i < s.length - 1) s = s.substr(0, i + 1);
    
    return s;
}

