var sg = {
	limit:10,
	address:null,
	dict:null,
	qwr:'iso-8859-2',
	resp:'iso-8859-2',
	Data:null,
	zeroData:new Array(),
	sgBox:null,
	jsBox:null,
	wordBox:new Array(),
	relBox:new Array(),
	act:null,
	mTimer:null,
	dtTimer:null,
	sTimer:null,
	inpObj:null,
	repNum:null,
	on:true,
	mkSgBox:function(id){
		this.sgBox=dom.cE('div');
		this.sgBox.id=('sg-list');
		var subBox=dom.cE('div');
		this.jsBox=dom.cE('div');
		this.jsBox.id='sg-loader';
		this.sgBox.style.display='none';
		dom.aC(dom.gI(id).form,this.jsBox);
		subBox.className='cont';
		
		for(i=0;i<=this.limit;i++) { 
			var ln=dom.cE('p');
			ln.style.display='none';
			var rl=dom.cE('span');
			var tx1=dom.cT('-');
			var tx2=dom.cT('-');
			this.wordBox[i]=tx1;
			this.relBox[i]=tx2;
			dom.aC(ln,tx1);
			dom.aC(rl,tx2);
			dom.aC(ln,rl);
			dom.aC(subBox,ln);
			ln.onmouseover=sg._inpMouseover;
			ln.onmouseout=sg._inpMouseout;
			ln.onclick=sg._inpClick
		}
		var last=dom.cE('p');
		var lOff=dom.cE('a');
		last.id='sg-off';
		var lOffTxt=dom.cT('Vypnout našeptávač');
		lOff.href="http://www.seznam.cz/nastaveni/";
		lOff.title="Přechod na stránku osobní nastavení, kde si můžete vypnout našeptávač";
		dom.aC(lOff,lOffTxt);
        dom.aC(last,lOff);
        dom.aC(subBox,last);
        dom.aC(this.sgBox,subBox);
        dom.aC(dom.gI(id).form,this.sgBox)},
    
    stopSg:function(){
        sg.on=false
    },
    startSg:function(){
        sg.on=true
    },
    getStatus:function(){
        return sg.on
    },
    init:function(id,dict,limit,server){
        sg.startSg();
        sg.limit=limit?limit:sg.limit;
        sg.address=server?server:sg.address;
        sg.dict=dict;
        if(!sg.sgBox){
            sg.mkSgBox(id)
        }else{
            sg._sgBoxReplace(id)
        }
        sg.inpObj=dom.gI(id);
        sg.inpObj.onkeyup=sg._keyup;
        if(document.all)sg.inpObj.onkeydown=sg._keyCatch;
        else sg.inpObj.onkeypress=sg._keyCatch;
        sg.inpObj.onclick=sg._unselectItem;
        sg.inpObj.onblur=function(){sg.sTimer=setTimeout("sg.clearAC()",500)}},
        
    showList:function(vstup){
        clearTimeout(sg.sTimer);
        sg.sTimer=null;
        sg.Data=vstup;
        sg.repNum=vstup.length>=sg.limit?sg.limit:vstup.length;
        var view=false;
        for(i=0;i<sg.limit;i++){
            if(sg.Data[i]){
                var wrd=sg.Data[i][0];
                var rel=sg.Data[i][1];
                sg.wordBox[i].nodeValue=wrd;
                sg.relBox[i].nodeValue=rel;
                sg.wordBox[i].parentNode.style.display='block';
                view=true
            }else{
                sg.wordBox[i].nodeValue='-';
                sg.relBox[i].nodeValue='-';
                sg.wordBox[i].parentNode.style.display='none'
            }
        }
        if(view){
            sg._unselectItem();
            sg.sgBox.style.display='block'
        }else{
            sg.sgBox.style.display='none'}
        },
        action:function(){
            sg.inpObj.form.submit();
            return false
        },
        _sgBoxReplace:function(ids){
            oldParent=sg.sgBox.parentNode;
            newParent=dom.gI(ids).form;
            sg.sgBox.style.display='none';
            dom.aC(newParent,sg.sgBox)
        },
        _getData:function(){
            if(sg.inpObj.value&&sg.getStatus()){
                sg.jsBox.innerHTML='';
                sg.Data=null;
                var source=sg.address+'?dict='+sg.dict+'&phrase='+sg.inpObj.value+'&encoding='+sg.qwr+'&response_encoding='+sg.resp;
                var loader=dom.cE('script');
                loader.type='text/javascript';
                loader.src=source;
                dom.aC(sg.jsBox,loader)
            }else{
                sg.showList(sg.zeroData)
            }
        },
        _inpMouseover:function(){
            clearTimeout(sg.mTimer);
            sg._mouseover(this)
        },
        _inpMouseout:function(){sg.mTimer=setTimeout("sg._mouseout(this)",100)},
        _inpClick:function(e){return sg._mouseclick(this)},
        _mouseout:function(){sg._unselectItem()},
        _mouseover:function(obj){
            if(sg.act!=null){sg.act.className=''}
            sg.act=obj;
            sg.act.className='act'
        },
        _mouseclick:function(obj){
            sg.inpObj.value=obj.childNodes[0].nodeValue;
            setTimeout("sg.inpObj.focus()",10);sg.action()
        },
        _unselectItem:function(){
            if(sg.act){sg.act.className='';
                sg.act=null}
        },
        _selectItem:function(keyId){
            if(sg.Data&&(sg.Data.length>0)){ 
                if(sg.act){ if(keyId==40){
                    sg.act.className='';
                    newAct=sg.act==sg.sgBox.getElementsByTagName('p')[sg.repNum-1]?sg.act:sg.act.nextSibling;
                    newAct.className='act';
                    sg.act=newAct
                    }else{
                        sg.act.className='';
                        newAct=sg.sgBox.firstChild.firstChild==sg.act?sg.act:sg.act.previousSibling;
                        newAct.className='act';
                        sg.act=newAct
                    }
                }else{
                    sg.sgBox.firstChild.firstChild.className='act';
                    sg.act=sg.sgBox.firstChild.firstChild
                }
            }
        },
        _putSelected:function(key){
            if(sg.act){
                sg.inpObj.value=sg.act.childNodes[0].nodeValue;
                if(key!=13){ sg._getData()} return true
            }else return true
        },
        _getKey:function(e){
            if(!e)e=window.event;
            return e.keyCode
        },
        _keyCatch:function(e){
            keyId=sg._getKey(e);
            if((keyId==13)||(keyId==39)){ return sg._putSelected(keyId)}
            if((keyId==38)||(keyId==40)){
                sg._selectItem(keyId);
                return false
            }
            if(keyId==27){ sg.clearAC() }
        },
        _keyup:function(e){
            keyId=sg._getKey(e);
            if((keyId==8)||(keyId==46)){
                clearTimeout(sg.dtTimer);
                sg.dtTimer=null;
                sg._unselectItem();
                sg.dtTimer=setTimeout('sg._getData()',100)
            } else if( ((kId<33)||(kId>39))&&(kId!=13)&&(kId!=17)&&
					(kId!=18)&&(kId!=27)&&(kId!=40)&&(kId!=44)&&(kId!=45)) {
                clearTimeout(sg.dtTimer);
                sg.dtTimer=null;
                sg.dtTimer=setTimeout('sg._getData()',250)
            }
        },
        clearAC:function(){
            sg._unselectItem();
            sg.sgBox.style.display='none';
            sg.showList(sg.zeroData)
        }
    };
    
    dom= { 
        gI:function(el) {
            return document.getElementById(el)
        },
        cT:function(txt){
            return document.createTextNode(txt)
        },
        cE:function(el) {
            return document.createElement(el)
        },
        aC:function(p,c){
            return p.appendChild(c)
        }
    };
