function isElInObjName(el,name){
	while(typeof(el)=='object'){
		if(el.name==name || el.id==name){
			return true;
		}
		if(el.parentNode==null){
			return false;	
		}
		if(el.parentNode==el){
			return false;	
		}
		el=el.parentNode;
	}
	return false;
}

var timerId=-1;
var htimerId=-1;

var timerId=-1;
var htimerId=-1;

var cur_name='';
var old_val=new Array();
var timerVal=500;
var bgcolor= new Array('#eeeeee','#dddddd');
var selcolor='#cccccc';
var errcolor='red';
var fontcolor='black';
var fcolor='black';
var facolor='blue';
var ddsize=20;
var dl=new Array();
var dl2=new Array();
var dn=new Array();
				    		
function focus(name,event){
	if(timerId!=-1){
			window.clearTimeout(timerId);
			timerId=-1;
	}
	var txt=document.getElementById('txt_'+name);
	if(txt){
		timerId=window.setTimeout('showOnTimer("'+txt.id+'","'+txt.value.replace(/"/g,"&quot;").replace(/'/g,"&#039;")+'","'+name+'")',timerVal);	
	}
	
}

window.setInterval(focusout2,500);
function focusout2(){
	if(cur_name){
		if(!isElInObjName(_elm,'droplist_'+cur_name) && (document.activeElement.id!=('txt_'+cur_name))){
			hideList(cur_name);
	    }
	}
}


function blur(name){
	if(timerId!=-1){
		window.clearTimeout(timerId);
		timerId=-1;
	}
}

function keydown(name,event){
	if(event){
		ev=event;
	}else{
		ev=window.event;
	}
	if(cur_name){
		if(ev.keyCode==13){
			var elt=document.getElementById('droplist_'+name+'_txt');	
    		if(elt.childNodes.length>0){
				var cel=elt.childNodes[0];
				if(cel.cnt==null){
					cel.cnt=0;
				}
				var cnt=cel.cnt;
				if(cel.childNodes.length>0){
					setId(name,cel.childNodes[cnt]);
				}
			}
			//document.forms['outer']['close'].focus();
			return false;
    		}
			if(ev.keyCode==33 || ev.keyCode==34  || ev.keyCode==35  || ev.keyCode==36  || ev.keyCode==38  || ev.keyCode==40){
			setCursor(name,ev.keyCode);
			return false;
			}
		}
	return true;
}


function mkeydown(name,event){
	if(event){
		ev=event;
	}else{
		ev=window.event;
	}
	if(cur_name){
		if(ev.keyCode==13){
			return false;	
		}
		if(ev.keyCode==37 || ev.keyCode==39){
		//document.getElementById('txt_'+name).focus();
		return false;
		}
	}
	return true;
}

function keyup(name,event){
	if(event){
		ev=event;
	}else{
		ev=window.event;
	}
	if(ev.keyCode!=9 && ev.keyCode!=16){
		if(timerId!=-1){
			window.clearTimeout(timerId);
			timerId=-1;
		}
		var txt=document.getElementById('txt_'+name);
		if(txt){
			if((old_val[name]!=txt.value)){
		    	var id=document.getElementById(name);
		    	id.value='';
		    	txt.style.color=errcolor;
			}
			timerId=window.setTimeout('changeOnTimer("'+txt.id+'","'+txt.value.replace(/"/g,"&quot;").replace(/'/g,"&#039;")+'","'+name+'")',timerVal);	
		}
	}
}

function setCursor(name,k){
	if(cur_name){
		var el=document.getElementById('droplist_'+name);	
		var elt=document.getElementById('droplist_'+name+'_txt');	
		if(elt.childNodes.length>0){
			var cel=elt.childNodes[0];
			if(cel.cnt==null){
				cel.cnt=0;
				cel.childNodes[0].style.backgroundColor=selcolor;	
			}
			var cnt=cel.cnt;
			if(cel.childNodes.length>0){
				cel.childNodes[cnt].style.backgroundColor=bgcolor[cnt%2];	
    			if(k==40){
    				cnt++;
    			}else if(k==38){
    				cnt--;
    			}else if(k==34){
    				cnt+=10;
    			}else if(k==33){
    				cnt-=10;
    			}else if(k==36){
    				cnt=0;
    			}else if(k==35){
    				cnt=cel.childNodes.length-1;
    			}
    			if(cnt<0){
    				cnt=0;
    			}
    			if(cnt>cel.childNodes.length-1){
    				cnt=cel.childNodes.length-1;
    			}
    			cel.cnt=cnt;
    			var sel=cel.childNodes[cnt];
    			sel.style.backgroundColor=selcolor;
    			if(el.style.overflow=='auto'){
    				if(sel.offsetTop<el.scrollTop){
    					el.scrollTop=Math.max(0,sel.offsetTop-sel.offsetHeight*2);
    				}else if(sel.offsetTop+sel.offsetHeight>el.scrollTop+el.offsetHeight){
    					el.scrollTop=Math.min(el.scrollHeight-el.offsetHeight,sel.offsetTop+sel.offsetHeight-el.offsetHeight+sel.offsetHeight*2);
    				}
    			}
    		}
    	}
	}	
}


function showOnTimer(id,text,name){
	if(timerId!=-1){
		window.clearTimeout(timerId);
		timerId=-1;
	}
	var txt=document.getElementById(id);
	if(txt){
		if(txt.value.replace(/"/g,"&quot;").replace(/'/g,"&#039;")==text){
			showList(name);	
		}else{
			timerId=window.setTimeout('showOnTimer("'+id+'","'+text.replace(/"/g,"&quot;").replace(/'/g,"&#039;")+'","'+name+'")',timerVal);	
		}	
	}	
}

function changeOnTimer(id,text,name){
	if(timerId!=-1){
		window.clearTimeout(timerId);
		timerId=-1;
	}
	var txt=document.getElementById(id);
	if(txt){
		if(txt.value.replace(/"/g,"&quot;").replace(/'/g,"&#039;")==text){
			changeList(name);	
		}else{
			timerId=window.setTimeout('changeOnTimer("'+id+'","'+text.replace(/"/g,"&quot;").replace(/'/g,"&#039;")+'","'+name+'")',timerVal);	
		}	
	}	
}
	
function setId(name,el){
	if(cur_name){
		var txt=document.getElementById('txt_'+name);
	    var id=document.getElementById(name);
		id.value=el.id;
		txt.value=el.innerHTML;
		old_val[name]=txt.value;
		
		hideList(cur_name);
	}
}

function createDiv(name,cnt,id,txt){
	var el = document.createElement('DIV');
	el.id=id;
	el.onclick=function(){
		setId(name,this); 
		return false;
	};
	el.onmouseover=function(){
		this.style.color=facolor;
	};
	el.onmouseout=function(){
		this.style.color=fcolor;
	};
	el.innerHTML=txt;
	el.style.color=fcolor;
	el.style.cursor='pointer';
	el.style.backgroundColor=bgcolor[cnt%2];
	el.style.padding='3px 5px';
	return el;
}
	
function createList(name,txt){
	var cid=0;
	var lst=new Array();
	var cnt=0;
	var bname=dn[name];
	var i;
	if(txt){
		txt=txt.replace(/"/g,"&quot;").replace(/'/g,"&#039;");
		var flt=txt.substr(0,1).toLowerCase();
		if(dl[bname][flt]){
			for(i in dl[bname][flt]){
				if(typeof(dl[bname][flt][i])!='function'){
					if(dl[bname][flt][i][1].toLowerCase()==txt.toLowerCase()){
						if(cid==0){
							cid=dl[bname][flt][i][0];
						}else if(cid>0){
							cid=-1;	
						}
					}
					if(dl[bname][flt][i][1].length>=txt.length){
						if(dl[bname][flt][i][1].substr(0,txt.length).toLowerCase()==txt.toLowerCase()){
							lst[cnt] = createDiv(name,cnt,dl[bname][flt][i][0],dl[bname][flt][i][1]);
							cnt++;
						}	
					}
				}	
			}	
		}	
	}
	if(cid==0){
		cid=-1;
	}
	if(cnt==0){
		for(flt in dl[bname]){
			if(typeof(dl[bname][flt])!='function'){
				for(i in dl[bname][flt]){
					if(typeof(dl[bname][flt][i])!='function'){
						lst[cnt] = createDiv(name,cnt,dl[bname][flt][i][0],dl[bname][flt][i][1]);
						cnt++;
					}	
				}	
			}	
		}	
	}
	return new Array(cid,lst,cnt);
}

function shList(name){
	var txt=document.getElementById('txt_'+name);
	var id=document.getElementById(name);
	var el=document.getElementById('droplist_'+name);
	var elt=document.getElementById('droplist_'+name+'_txt');	
	elt.innerHTML='';
	el.scrollTop=0;

	old_val[name]=txt.value;
					    
	var res=createList(name,txt.value);
	var cid=res[0];
	if(cid!=-1){
		id.value=cid;
	    	hideList(cur_name);
	    	return -1;	
	}
    
	if(res[2]<=ddsize){
		el.style.overflow='visible';
		el.style.height='auto';
	}
	el.scrollTop=0;

	if(res[2]>0){
		var int=document.createElement('DIV');
		int.cnt=0;
		for(i=0;i<res[2];i++){
			int.appendChild(res[1][i]);
		}
		int.childNodes[0].style.backgroundColor=selcolor;	
		if(res[2]>ddsize){
			el.style.overflow='auto';
    		el.style.height='1px';
    	}
    	el.scrollTop=0;
		elt.appendChild(int);
	}
}

function showList(name){
	if(cur_name && cur_name!=name){
		hideList(cur_name);
	}
	if(!cur_name){
		cur_name=name;
		
		var txt=document.getElementById('txt_'+name);
	 	var id=document.getElementById(name);
    	var el=document.getElementById('droplist_'+name);
    	var elt=document.getElementById('droplist_'+name+'_txt');	
    	
    	if(shList(name)==-1) return;
    
    	el.style.display='block';
    	el.scrollTop=0;
    
    	if(elt.childNodes.length>0){//???
			var cel=elt.childNodes[0];
			if(el.style.height!='auto'){
				el.style.height=(cel.childNodes[0].offsetHeight*ddsize)+'px';
			}	
    	}
	    
		if(id.value){
    			txt.style.color=fontcolor;
    		}else{
    			txt.style.color=errcolor;
    		}		    	
    	
		var coll = document.getElementsByTagName('SELECT');
		if (coll!=null)
		{
		    for (i=0; i<coll.length; i++) 
		      coll[i].style.visibility='hidden';
		}
	}
}

function changeList(name){
	if(cur_name==name){
   		if((old_val[name]!=document.getElementById('txt_'+name).value)){
	    	var txt=document.getElementById('txt_'+name);
	    	var el=document.getElementById('droplist_'+name);
	    	var id=document.getElementById(name);
	    	var elt=document.getElementById('droplist_'+name+'_txt');	
	    	
	    	if(shList(name)==-1) return;
			    
			if(elt.childNodes.length>0){
				var cel=elt.childNodes[0];
				el.style.height=(cel.childNodes[0].offsetHeight*ddsize)+'px';
			}
			id.value='';
	    	txt.style.color=errcolor;
		}
	}else if(!cur_name){
		if((old_val[name]!=document.getElementById('txt_'+name).value)){
			var id=document.getElementById(name);
			id.value='';
		    	showList(name);
		}
	}
}

function hideList(name){
	if(timerId!=-1){
		//window.clearTimeout(timerId);
		//timerId=-1;
	}
	if(cur_name){
		cur_name='';
		document.getElementById('droplist_'+name).style.display='none';
    	var elt=document.getElementById('droplist_'+name+'_txt');	
    					    	
    	var txt=document.getElementById('txt_'+name);
    	if(document.getElementById(name).value){
    		txt.style.color=fontcolor;
    	}else{
    		txt.style.color=errcolor;
    	}
    	
    	var coll = document.getElementsByTagName('SELECT');
	    	
		if (coll!=null)
		{
		    for (i=0; i<coll.length; i++) 
		      coll[i].style.visibility='visible';
		}
		
	}
}

function addDItems(name){
	var el=document.getElementById('del_'+name);
	var idss=document.getElementById(name).value;
	var txtss=document.getElementById(name+'_multitext').value;
	var items=new Array();
	if(txtss){
		var txts=txtss.split("|");
		for(var i=0;i<txts.length; i++){
			items[txts[i].replace(/^\s*/, "").replace(/\s*$/, "")]=-1;
		}
	}
	
	if(idss){
		var ids=idss.split("|");
		for(var i=0;i<ids.length; i++){
			items[dl2[name][ids[i]]]=ids[i];
		}
	}
	
	var sitems= new Array();
	var cnt=0;
	
	for(var i in items){
		if(typeof(items[i])!='function'){
			sitems[cnt]=new Array(i,items[i]);
			cnt++;
		}	
	}
	sitems.sort();
	var txt='';
	for(var i=0;i<sitems.length; i++){
		txt+="<nobr><span  "+(sitems[i][1]==-1?"style='color:red;'":'')+">"+sitems[i][0]+"</span><a href=# onclick=\"delLItem('"+name+"','"+sitems[i][1]+"','"+sitems[i][0].replace(/"/g,"&quot;").replace(/'/g,"&#039;").replace(/&/g,"&amp;")+"',event); return false;\"><img src=/i/del.gif border=0 alt=\"Удалить\" /></a>&nbsp;&nbsp;&nbsp;</nobr>\n";
	}
	el.innerHTML=txt;
}

function addLItem(name,k,v,event){
	var eidss=document.getElementById(name);
	var idss=eidss.value;
	var etxtss=document.getElementById(name+'_multitext');
	var txtss=etxtss.value;
	var items=new Array();
	var titems=new Array();
	var iitems=new Array();
	if(k!=-1){
		if(typeof(dl2[name][k])=='undefined'){
			dl2[name][k]=v;
		}
		if(txtss){
			var txts=txtss.split("|");
			for(var i=0;i<txts.length; i++){
				items[txts[i].replace(/^\s*/, "").replace(/\s*$/, "")]=-1;
			}
		}
		if(idss){
			var ids=idss.split("|");
			for(var i=0;i<ids.length; i++){
				items[dl2[name][ids[i]]]=ids[i];
			}
		}
		items[dl2[name][k]]=k;
		var cnt1=0;
		var cnt2=0;
		for(var i in items){
			if(typeof(items[i])!='function'){
				if(items[i]==-1){
					titems[cnt1]=i;
					cnt1++;
				}else if(items[i]){
					iitems[cnt2]=items[i];
					cnt2++;
				}
			}	
		}
		eidss.value=iitems.join("|");
		etxtss.value=titems.join("|");
	}else{
		if(txtss){
			var txts=txtss.split("|");
			for(var i=0;i<txts.length; i++){
				items[txts[i].replace(/^\s*/, "").replace(/\s*$/, "")]=-1;
			}
		}
		items[v]=-1;
		var cnt=0;
		for(var i in items){
			if(typeof(items[i])!='function'){
				if(items[i]){
					titems[cnt]=i;
					cnt++;
				}
			}	
		}
		etxtss.value=titems.join("|");
	}
	addDItems(name);
}

function delLItem(name,k,v,event){
	var eidss=document.getElementById(name);
	var idss=eidss.value;
	var etxtss=document.getElementById(name+'_multitext');
	var txtss=etxtss.value;
	var items=new Array();
	var titems=new Array();
	var iitems=new Array();
	v=v.replace(/&quot;/g, "\"").replace(/&#039;/g, "'");
	if(k!=-1){
		if(typeof(dl2[name][k])=='undefined'){
			dl2[name][k]=v;
		}
		if(txtss){
			var txts=txtss.split("|");
			for(var i=0;i<txts.length; i++){
				items[txts[i].replace(/^\s*/, "").replace(/\s*$/, "")]=-1;
			}
		}
		if(idss){
			var ids=idss.split("|");
			for(var i=0;i<ids.length; i++){
				items[dl2[name][ids[i]]]=ids[i];
			}
		}
		items[dl2[name][k]]=null;
		var cnt1=0;
		var cnt2=0;
		for(var i in items){
			if(typeof(items[i])!='function'){
				if(items[i]==-1){
					titems[cnt1]=i;
					cnt1++;
				}else if(items[i]){
					iitems[cnt2]=items[i];
					cnt2++;
				}
			}	
		}
		eidss.value=iitems.join("|");
		etxtss.value=titems.join("|");
	}else{
		if(txtss){
			var txts=txtss.split("|");
			for(var i=0;i<txts.length; i++){
				items[txts[i].replace(/^\s*/, "").replace(/\s*$/, "")]=-1;
			}
		}
		items[v]=null;
		var cnt=0;
		for(var i in items){
			if(typeof(items[i])!='function'){
				if(items[i]){
					titems[cnt]=i;
					cnt++;
				}
			}	
		}
		etxtss.value=titems.join("|");
	}
	addDItems(name);
}

function addLItems(name,event){
	var eidss=document.getElementById(name);
	var idss=eidss.value;
	var etxtss=document.getElementById(name+'_multitext');
	var txtss=etxtss.value;
	var items=new Array();
	var titems=new Array();
	var iitems=new Array();
	
	var k=document.getElementById(name+'_tmp').value;
	var v=document.getElementById('txt_'+name+'_tmp').value;
	var res=new Array();
	if(k){
		var r=createId(name+'_tmp',v);
		if(r[0]){
			if(typeof(dl2[name][r[0]])=='undefined'){
				dl2[name][r[0]]=r[1];
			}
		}else{
			res[acnt]=new Array(-1,ts[i]);
		}
	}else{
		if(!v) return;
		var ts=v.split(";");
		var acnt=0;
		for(var i=0;i<ts.length; i++){
			ts[i]=ts[i].replace(/^\s*/, "").replace(/\s*$/, "").replace(/<\w+(\s+[^>]*)?>/, "").replace(/<\/\w+>/, "");
			if(ts[i]!=''){
				var r=createId(name+'_tmp',ts[i]);
				if(r[0]){
					res[acnt]=r;
					if(typeof(dl2[name][r[0]])=='undefined'){
						dl2[name][r[0]]=r[1];
					}
				}else{
					res[acnt]=new Array(-1,ts[i]);
				}
				acnt++;
			}	
		}		
	}
	
	if(txtss){
		var txts=txtss.split("|");
		for(var i=0;i<txts.length; i++){
			items[txts[i].replace(/^\s*/, "").replace(/\s*$/, "")]=-1;
		}
	}
	if(idss){
		var ids=idss.split("|");
		for(var i=0;i<ids.length; i++){
			items[dl2[name][ids[i]]]=ids[i];
		}
	}
	
	if(k){
		items[dl2[name][k]]=k;
	}else{
		for(var i=0;i<res.length; i++){
			if(res[i][0]!=-1){
				items[dl2[name][res[i][0]]]=res[i][0];
			}else{
				items[res[i][1]]=-1;
			}	
		}
	}	
	
	var cnt1=0;
	var cnt2=0;
	for(var i in items){
		if(typeof(items[i])!='function'){
			if(items[i]==-1){
				titems[cnt1]=i;
				cnt1++;
			}else if(items[i]){
				iitems[cnt2]=items[i];
				cnt2++;
			}
		}	
	}
	eidss.value=iitems.join("|");
	etxtss.value=titems.join("|");
	
	document.getElementById(name+'_tmp').value='';
	document.getElementById('txt_'+name+'_tmp').value='';
	addDItems(name);
}

function createId(name,txt){
	var cid=0;
	var v='';
	var bname=dn[name];
	var i;
	if(txt){
		txt=txt.replace(/"/g,"&quot;").replace(/'/g,"&#039;").replace(/\|/g,"");
		var flt=txt.substr(0,1).toLowerCase();
		if(dl[bname][flt]){
			for(i in dl[bname][flt]){
				if(typeof(dl[bname][flt][i])!='function'){
					if(dl[bname][flt][i][1].toLowerCase()==txt.toLowerCase()){
						cid=dl[bname][flt][i][0];
						v=dl[bname][flt][i][1];
						break;
					}
				}	
			}	
		}	
	}
	return new Array(cid,v);
}


