var psbautocomplete={
    outp:null,
    textfield:null,
    words:new Array(),input:null,
    value:null,
    key:null,
    elem:null,
    request:null,
    adr:null,
    bSelect:-1,
    listsize:10,
    pref:null,
    
    fill:function(formElem,elemId,url,lsize)
    {
        psbautocomplete.textfield=formElem;
        if(psbautocomplete.textfield!=null&&psbautocomplete.value!=psbautocomplete.textfield.value.toLowerCase())
        {
            psbautocomplete.value=psbautocomplete.textfield.value.toLowerCase();
            psbautocomplete.init(formElem,elemId,url,lsize);
            if(psbautocomplete.value!=null&&psbautocomplete.value.length>=2)
            {
                if(psbautocomplete.words.length==0||(psbautocomplete.pref==null||psbautocomplete.value.indexOf(psbautocomplete.pref)!=0))
                {
                    psbautocomplete.pref=psbautocomplete.value.substring(0,2);
                    psbautocomplete.lookAt();
                }
                window.setTimeout("psbautocomplete.handleWords()",100);
            }
            else
            {
                psbautocomplete.words=new Array();
                psbautocomplete.clearOutput();
                psbautocomplete.outp.style.visibility="hidden";
            }
        }
    },


    init:function(formElem,elemId,url,lsize)
    {
        psbautocomplete.listsize=lsize;
        psbautocomplete.bSelect=-1;
        psbautocomplete.outp=document.getElementById(elemId);
        document.onkeydown=psbautocomplete.keygetter;
        document.onkeyup=psbautocomplete.keyHandler;
        psbautocomplete.adr=url;
    },


    handleWords:function()
    {
        psbautocomplete.clearOutput();
        var selectWords=new Array();
        if(psbautocomplete.words.length>0&&psbautocomplete.words[0].length>0){
            var j=0;
            for(i=0;i<psbautocomplete.words.length;i++)
            {
                if(psbautocomplete.words[i].toLowerCase().indexOf(psbautocomplete.value)==0)
                {
                selectWords[j]=psbautocomplete.words[i];
                j++;
                }
            }
        }
        psbautocomplete.outp.style.visibility="hidden";
        if(selectWords.length>0){
            psbautocomplete.outp.style.visibility="visible";
            psbautocomplete.addWords(selectWords);
        }
    },

    lookAt:function()
    {
        if(psbautocomplete.value.length>1)
        {
            if(window.XMLHttpRequest)
            {
                psbautocomplete.request=new XMLHttpRequest();
            }
            else if(window.ActiveXObject){
                try{
                    psbautocomplete.request=new ActiveXObject("Msxml2.XMLHTTP");
                }
                catch(e)
                {
                    psbautocomplete.request=new ActiveXObject("Microsoft.XMLHTTP");
                }
            }
            psbautocomplete.request.onreadystatechange=psbautocomplete.processStateChange;
            linkakt=psbautocomplete.adr+escape(psbautocomplete.pref)+'&land='+document.getElementById('land').value;
            //alert(linkakt);
            psbautocomplete.request.open("GET",linkakt,true);
            psbautocomplete.request.send(null);
        }
        else
        {
            psbautocomplete.clearOutput();
            psbautocomplete.outp.style.visibility="hidden";
        }
    },

    processStateChange:function()
    {
        if(psbautocomplete.request.readyState==4)
        {
            psbautocomplete.responseComplete();
        }
    },

    responseComplete:function()
    {
        if(psbautocomplete.request.status==200)
        {
            var response=eval("("+psbautocomplete.request.responseText+")");
            psbautocomplete.words=new Array();
            for(var iElement=0;iElement<response.length;iElement++)
            {
                psbautocomplete.words.push(response[iElement]);
            }
        }
    },

    addWords:function(selectWords)
    {
        psbautocomplete.outp.onclick=psbautocomplete.mouseClick;
        var size=0;
        for(var i=0;i<selectWords.length;++i)
        {
            if(selectWords[i]!=null&&selectWords[i].length>0)
            {
                size++;
                var li=document.createElement("option");
                li.appendChild(document.createTextNode(selectWords[i]));
                psbautocomplete.outp.appendChild(li);
            }
        }
        if(selectWords.length==1&&psbautocomplete.textfield.value.toLowerCase()==selectWords[0].toLowerCase())
        {
            psbautocomplete.outp.style.visibility="hidden";
        }
        else
        {
            psbautocomplete.outp.style.visibility="visible";
            if(size>=10){
                psbautocomplete.outp.size=10;
            }
            else if(size==1)
            {
                psbautocomplete.outp.size=2;
            }
            else
            {
            psbautocomplete.outp.size=size;
            }
        }
    },

    clearOutput:function()
    {
        while(psbautocomplete.outp.hasChildNodes())
        {
            noten=psbautocomplete.outp.firstChild;
            psbautocomplete.outp.removeChild(noten);
        }
    },

    keygetter:function(event)
    {
        if(!event&&window.event)
        {
            event=window.event;
        }
        if(event)
        {
            psbautocomplete.key=event.keyCode;
        }
        else
        {
            psbautocomplete.key=event.which;
        }
    },

    keyHandler:function(event)
    {
        if(psbautocomplete.key==40)
        {
            if(psbautocomplete.words.length>0)
            {
                psbautocomplete.outp.focus();
                psbautocomplete.outp.selectedIndex;
                if(psbautocomplete.outp.selectedIndex<0)
                {
                    psbautocomplete.outp.selectedIndex=0;
                }
                psbautocomplete.bSelect=psbautocomplete.outp.selectedIndex;
            }
        }
        else if(psbautocomplete.key==38)
        {
            if(psbautocomplete.words.length>0)
            {
                if(psbautocomplete.bSelect==0)
                {
                    psbautocomplete.outp.selectedIndex=-1;
                    psbautocomplete.textfield.focus();
                    psbautocomplete.bSelect=-1;
                }
                else
                {
                    psbautocomplete.bSelect=psbautocomplete.outp.selectedIndex;
                }
            }
        }
        else if(psbautocomplete.key==27)
        {
            psbautocomplete.clearOutput();
            psbautocomplete.outp.style.visibility="hidden";
            psbautocomplete.textfield.focus();
        }
        else if(psbautocomplete.key==13)
        {
            psbautocomplete.handleSelect();
            psbautocomplete.textfield.focus();
        }
    },

    mouseClick:function()
    {
        psbautocomplete.handleSelect();
    },

    handleSelect:function()
    {
        var selectedItem=psbautocomplete.outp.selectedIndex;
        try
        {
            psbautocomplete.textfield.value=psbautocomplete.outp.options[selectedItem].text;
        }
        catch(e){}
        psbautocomplete.outp.style.visibility="hidden";
        psbautocomplete.textfield.focus();
        psbautocomplete.clearOutput();
    }
}
