﻿/*
    Autosuggester.
*/

function autoLoadHTML(elemId, HTMLFragment)
{   
    var isIE = true;
    if (document && document.getElementById && document.getElementById(elemId) && document.createElement && document.appendChild && document.getElementsByTagName)
    {
        var el = document.getElementById(elemId);
        el.innerHTML = "&nbsp;" + HTMLFragment;
        var d = el.getElementsByTagName('script');
        var t = d.length;
        for (var x=0;x<t;x++)
        {
            var newScript = document.createElement('script');
            newScript.type = "text/javascript";
            if(d[x].src)
            {
                newScript.src = d[x].src;
            }
            else
            {
                if(isIE)
                {
                    newScript.text = d[x].text;
                }
                else
                {
                    var s = document.createTextNode(d[x].text);
                    newScript.appendChild(s);
                }
            }
            el.appendChild(newScript);
        }
        for (var y=0;y<t;y++)
        {
            el.removeChild(el.getElementsByTagName("script")[0]);
        }
    }
} 

function updateSuggestionBox(el)
{
    var content = "";
    var sugg = el._lastdata;
    
    if (el._done || sugg.length == 0)
    {
        el.style.display = "none";
        el.innerHTML = "";
        return;        
    }
    
    el.style.display = "inline";
            
    if (el._cursel >= sugg.length && sugg.length > 0)
        el._cursel = sugg.length - 1;
        
    for (var i=0;i<sugg.length;i++)
    {        
        if (i == el._cursel) {
            content += '<div class="suggestion-selected" style="background: rgb(255,77,0);">';
            el._cursel_text = sugg[i];
        } else
            content += '<div class="suggestion-unselected" style="background: rgb(255,255,255);">'; 
            
        content += sugg[i];
        content += '</div>';
    }    
    el.innerHTML = content;    

}

function showSuggestions(elname, sugg, setsel)
{
    var el = document.getElementById(elname);
    el._lastdata = sugg;
    if (setsel >= 0)        
        el._cursel = setsel;
    updateSuggestionBox(el);    
}

function updateSuggestion(inputstr, targetid, scategory)
{
    var req;
    if (window.XMLHttpRequest)
        req = new XMLHttpRequest();
    else if (window.ActiveXObject) 
        req = new ActiveXObject("Microsoft.XMLHTTP");    
        
    req.onreadystatechange = function()
    {                    
        if (req.readyState == 4 && req.status == 200)
            autoLoadHTML("scriptloader", req.responseText);
    }
    
    if (inputstr.length > 0)
    {
        var tel = document.getElementById(targetid);
        req.open("GET", "Suggester.ashx?cat=" + scategory + "&target=" + targetid + "&txt=" + encodeURI(inputstr) + "&cursel=" + encodeURI(tel._cursel_text), true);
        req.send(null);
    }
}

function autoSuggest(elid, targetid, timeval, old, scategory)
{ 
    var src = document.getElementById(elid);
    var dst = document.getElementById(targetid);
    
    if (dst._cursel == undefined)
        dst._cursel = 0;
    
    dst.style.width = src.style.width;
    
    src.onkeydown = function(evt) 
    { 
        var keycode;
        if (window.event)
            keycode = window.event.keyCode;
        else if (evt.which)
            keycode = evt.which;
                              
        if (keycode == 13) {        
            src.value = dst._lastdata[dst._cursel];            
            dst._done = true;
            updateSuggestionBox(dst);
            return false;
        } else if (keycode == 38 && dst._cursel > 0) {
            dst._cursel--;
            updateSuggestionBox(dst);
            return false;
        } else if (keycode == 40 && (dst._cursel+1) < dst._lastdata.length) {
            dst._cursel++;
            updateSuggestionBox(dst)            
            return false;
        } 
        
        dst._done = false;
        return true;
    }    
        
    window.setTimeout(
        function() {                        
            if (old != src.value && old != undefined)
                updateSuggestion(src.value, targetid, scategory);
            autoSuggest(elid, targetid, timeval, src.value, scategory);                
        }, timeval);
}

function enableSuggestion(element, target, source)
{    
    autoSuggest(element, target, 50, undefined, source);
}
