var systranLookup = {
    _lookupUrl: "/lookup",
    _lookupResultsXslt: null,
    _activeLp: null,
    _activeText: null,
    _cache : {},
    _onLoadResult : null,
    _lookupSubService : null,
    _lookupServerUrl : "",
    _workingDocument: document,

    go: function(text, lp, form) {
        if(trim(text) == "")  {
            alert(localization.getString("lookup.empty"));
            return false;
        }
        var href = systranLookup._lookupUrl + "/" + lp + "/" + encodeURIComponent(text);
        if(form)
            form.action = href;
        else
            location.href = href;
        return true;
    },

    query: function(text, lp) {
        if(trim(text) == "")  {
            alert(localization.getString("lookup.empty"));
            return;
        }
        systranLookup._activeLp = lp;
        systranLookup._activeText = text;
        setInnerHTML(systranLookup._workingDocument.getElementById("lookup_results"), "");
        var stored = systranLookup._cache[lp + ":" + text];
        if(stored) {
            systranLookup.loadResult(stored);
        }
        else {
            sai.lookup(text, lp, systranLookup.lookupComplete, systranLookup._lookupSubService);
        }
    },
    lookupComplete: function(request) {
        if(request.isSuccess()) {
            var result = systranLookup.generateLookupResultHtml(request);
            systranLookup.loadResult(result);
            systranLookup._cache[systranLookup._activeLp + ":" + systranLookup._activeText] = result;
            delete result;
        }
    },

    loadResult: function(result) {        
        setInnerHTML(systranLookup._workingDocument.getElementById("lookup_results").innerHTML,result);
        if(systranLookup._onLoadResult) {
            systranLookup._onLoadResult();
        }
    },

    generateLookupResultHtml: function(request) {
        /* if xml mode
        var xml = xmlParse(systranLookup._activeRequest.getOutput());
        var xslt = systranLookup.getLookupResultsXslt();
        var html = xsltProcess(xml, xslt);
        return localization.localizeHtml(html);
        */
        return request.getOutput();
    },

    getLookupResultsXslt: function() {
        if(systranLookup._lookupResultsXslt == null)  {
            systranLookup._lookupResultsXslt = xmlParse(systranLookup._workingDocument.getElementById("lookupResultsXslt").contentWindow.document.getElementById("lookupResultsXslt").value);
        }
        return systranLookup._lookupResultsXslt;
    },

    dl_dir_header_click : function(header) {
        systranLookup.headerClick(header);
    },

    dl_dict_header_click : function(header) {
        systranLookup.headerClick(header);
    },

    headerClick : function(header) {
        var sibling = header.nextSibling;
        while(sibling != null) {
            if(sibling.nodeType == DOM_ELEMENT_NODE) {
                if(sibling.style.display == 'none') {
                    sibling.style.display = 'block';
                    systranLookup.setHeaderChevron(header, systranLookup._lookupServerUrl + "images/chevron-up.gif");
                }
                else {
                    sibling.style.display = 'none';
                    systranLookup.setHeaderChevron(header, systranLookup._lookupServerUrl + "images/chevron-down.gif");
                }
                sibling = null;
            }
            else {
                sibling = sibling.nextSibling;
            }
        }
    },

    setHeaderChevron : function(header, img) {
        var child = header.firstChild;
        while(child != null) {
            if(child.className == "dl_header_chevron") {
                child.src = img;
                child = null;
            }
            else {
                child = child.nextSibling;
            }
        }
    },

    specCHAR : function(x) {
        var input = systranLookup._workingDocument.getElementById("lookup_input");
        if(systranLookup._workingDocument.selection) {
            input.focus();
            var sel = systranLookup._workingDocument.selection.createRange();
            sel.text = x;
        }
        else if (input.selectionStart || input.selectionStart == '0') {
            var startPos = input.selectionStart;
            var endPos = input.selectionEnd;
            input.value = input.value.substring(0, startPos)+ x+ input.value.substring(endPos, input.value.length);
        }
        else {
            input.value += x;
        }
    }
}

