//  timer var
var T;

//  global sug array
var SugArr = new Array();

// current sug pos
var SugPos = 0;

var CurWord = '';
//  get query 
function getXmlHttp()
    {
    if(window.XMLHttpRequest)
        {
        try{return new XMLHttpRequest();}catch(e){}
        }
    else if(window.ActiveXObject)
        {
        try{return new ActiveXObject("Microsoft.XMLHTTP");}catch(e){
            try{return new ActiveXObject("Msxml2.XMLHTTP");}catch(e){}}
        }
    return null;
    }

//get url
function GetSug(word)
    {
    var url = '/suggest.php?q='+(word);

    CurWord = word;

    var xmlhttp = getXmlHttp()

    xmlhttp.open('GET', url, true);
    
    //xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded; charset=UTF-8');

    xmlhttp.onreadystatechange = function() 
        {
        if (xmlhttp.readyState == 4) 
            {
            if(xmlhttp.status == 200) 
                {
                var res = xmlhttp.responseText;

                if(res)
                    {
                    eval('var A = '+res+';');
                    if(A[1] != undefined);
                        {
                        ShowSuggest(A[1]);
                        }
                    }
                else
                    {
                    ShowSuggest('');
                    }
                }
            }
        };
    xmlhttp.send(null);
    }

function ShowSuggest(ARes)
    {
    var sug = document.getElementById('sug');
    var str = '';


    if(ARes.length)
        {
        SugArr = ARes;
        str += '<div class="sug_main">';
        for(var i=0;i< ARes.length;i++)
            {
            str += '<div class="sug_in" id="sug_'+(i+1)+'" onmouseover="MoveTo('+(i+1)+', this);" onclick="SetWord(\''+ARes[i]+'\');">'+ARes[i]+'</div>';
            }

        str += '<div class="sug_last" align="right"><a href="javascript:ShowSuggest(\'\');">[close]</a></div>';
        str += '</div>';
        }
    else
        {
        SugArr.length = 0;
        }

    sug.innerHTML = str;
    }

//  get word
function GetWord(word, event)
    {
    if(word)
        {
        
        if(HotKeyHandler(event))
            {

            if(T)
                {
                clearTimeout(T);
                }

            T = setTimeout('GetSug(\''+(word.replace(/\'/g, '\\\''))+'\')', 300);
            }
        }
    }


//function ClearSting(word)
//    {
//    return word.replace(/\'/g, '\\\'');
//    }

function SetWord(word)
    {
    var lay = document.getElementById('search');
    lay.value = word;
    lay.focus();
    }

// -------------------------------------------
// Keyboard handling
// -------------------------------------------
HotKeyHandler.keys = { };

HotKeyHandler.convertIEKey={'1':65,'2':66,'4':68,'12':76,'16':80,'19':83,'20':84,'21':85,'26':90};

function HotKeyHandler(ev) 
    {

    var evt, key;
            
    if(!(evt=window.event? window.event: ev)) return;
        key = evt.keyCode? evt.keyCode: evt.charCode;

        key=HotKeyHandler.convertIEKey[String(key)]? HotKeyHandler.convertIEKey[String(key)]: key;

        if (key) 
        {
            key=evt.shiftKey? String.fromCharCode(key).toUpperCase(): String.fromCharCode(key).toLowerCase();

            if(typeof(HotKeyHandler.keys[key]) == "function")
            {        
            HotKeyHandler.keys[key](evt);

                evt.cancelBubble = true; 
    
                evt.returnValue = false; 
    
                if(evt.preventDefault) evt.preventDefault(); 
                if(evt.stopPropagation) evt.stopPropagation();        
            return false;
            }
          }

        return true;
    }

//  move pointer down
function MoveDown()
    {
    var cnt = SugArr.length+1;

    MoveTo((SugPos+1)%cnt);

    if(SugPos && SugArr[SugPos-1] != undefined)
        {
        SetWord(SugArr[SugPos-1]);
        }
    else
        {
        SetWord(CurWord);
        }
    }

// move pointer up
function MoveUp()
    {
    var cnt = SugArr.length+1;

    MoveTo(((SugPos-1)%cnt) < 0?cnt-1:(SugPos-1)%cnt);

    if(SugPos && SugArr[SugPos-1] != undefined)
        {
        SetWord(SugArr[SugPos-1]);
        }
    else
        {
        SetWord(CurWord);
        }
    }


function MoveTo(pos, lay)
    {

    var old = document.getElementById('sug_'+SugPos);
    
    if(lay == undefined)
        lay = document.getElementById('sug_'+pos);

    if(old)
        {
        old.className = 'sug_in';
        }

    if(lay)
        {
        lay.className = 'sug_hover';
        }

    SugPos = pos;
    }


HotKeyHandler.keys = 
    {
    '\x28':function(){MoveDown();},
    '\x26':function(){MoveUp();}
//    '\x25':function(){MoveLeft()},
//    '\x27':function(){MoveRight();}
    };

