var wsautocomplete={
    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)
    {
        wsautocomplete.textfield=formElem;
        if(wsautocomplete.textfield!=null&&wsautocomplete.value!=wsautocomplete.textfield.value.toLowerCase())
        {
            wsautocomplete.value=wsautocomplete.textfield.value.toLowerCase();
            wsautocomplete.init(formElem,elemId,url,lsize);
            if(wsautocomplete.value!=null&&wsautocomplete.value.length>=2)
            {
                if(wsautocomplete.words.length==0||(wsautocomplete.pref==null||wsautocomplete.value.indexOf(wsautocomplete.pref)!=0))
                {
                    wsautocomplete.pref=wsautocomplete.value.substring(0,2);
                    wsautocomplete.lookAt();
                }
                window.setTimeout("wsautocomplete.handleWords()",100);
            }
            else
            {
                wsautocomplete.words=new Array();
                wsautocomplete.clearOutput();
                wsautocomplete.outp.style.visibility="hidden";
            }
        }
    },


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


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

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

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

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

    addWords:function(selectWords)
    {
        wsautocomplete.outp.onclick=wsautocomplete.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]));
                wsautocomplete.outp.appendChild(li);
            }
        }
        if(selectWords.length==1&&wsautocomplete.textfield.value.toLowerCase()==selectWords[0].toLowerCase())
        {
            wsautocomplete.outp.style.visibility="hidden";
        }
        else
        {
            wsautocomplete.outp.style.visibility="visible";
            if(size>=10){
                wsautocomplete.outp.size=10;
            }
            else if(size==1)
            {
                wsautocomplete.outp.size=2;
            }
            else
            {
            wsautocomplete.outp.size=size;
            }
        }
    },

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

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

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

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

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