var cmbListBackGround1="#4D487E";
var cmbListBackGround="White";
var cmbListItemBackGroundInAction="Highlight";
var maxHeight=150;
var cmbListSelect=-1;
var cmbListStyle="cmbListSelectDiv";
var cmbListItemStyle="cmbListItemDiv";
var cmbListItemStyleAction="cmbListItemDiv:Hover"
var cmbListSelectID="4i9593jsdtuasnjakhda46";

function setCSSFormat(Ele,CSS){
	switch(CSS){
		case cmbListStyle:
			setCSSProperty(Ele,"position","absolute");
			setCSSProperty(Ele,"display","none");
			setCSSProperty(Ele,"overflow","auto");
			setCSSProperty(Ele,"top","0");
			setCSSProperty(Ele,"left","0");
			setCSSProperty(Ele,"height",maxHeight+"px");
			setCSSProperty(Ele,"background",cmbListBackGround);
			setCSSProperty(Ele,"border","1px solid black");
			break;
		case cmbListItemStyle:
			setCSSProperty(Ele,"color","Black");
			setCSSProperty(Ele,"background",cmbListBackGround);
			setCSSProperty(Ele,"cursor","pointer");
			break;
		case cmbListItemStyleAction:
			setCSSProperty(Ele,"color","White");
			setCSSProperty(Ele,"background",cmbListItemBackGroundInAction);
			break;
	}
}
function setCSSProperty(Ele,Prop,Val){
	if(Ele && Ele.style)
		Ele.style[Prop]=Val;
}

function getAsciiCode(evt){
	var keyCode = evt.keyCode ? evt.keyCode :
                 evt.charCode ? evt.charCode : evt.which;	
	return keyCode;
}


function comboListMoveCurser(cmbList,key,fld){
	if(key>=35 && key<=40){		
		if (cmbListSelect>-1){
			setCSSFormat(cmbList.childNodes[cmbListSelect],cmbListItemStyle);
		}
		switch(key){
			case 36: //Pos 1
				cmbListSelect=0;
				break;
			case 35: //Ende
				cmbListSelect=Div.childNodes.length-1				
				break;
			case 37:
			case 39:
				//debug(39);
				//return true;
				break;
			case 38: //hoch
				if(cmbListSelect>0){
					cmbListSelect--;
				}else{
					cmbListSelect=Div.childNodes.length-1;
				}
				break;
			case 40: //runter
				if(cmbListSelect<Div.childNodes.length-1){
					cmbListSelect++;
				}else{
					cmbListSelect=0;
				}
				break;			
		}
		setCSSFormat(Div.childNodes[cmbListSelect],cmbListItemStyleAction);//.className=cmbListItemInActionStyle;		
		Div.scrollTop = Div.childNodes[cmbListSelect].offsetTop;
		if(fld.value!=Div.childNodes[cmbListSelect].innerHTML){
			fld.value=Div.childNodes[cmbListSelect].innerHTML;
		}
		return true;		
	}
	
	return false;
}

function showComboList(INPUT,Items,e){
	Div=catchEle(cmbListSelectID);
	if(!Div){
		Div=createComboListSelectDiv()
		cmb_addEvent(document.body,"click",hiddenCombList);
		cmbListSelect[cmbListSelectID]=-1;
	}
	
	if(e){
		if(e.stopPropagation){
			e.stopPropagation()
		}else{
			e.cancelBubble=true;
		}
	}	
	var key=getAsciiCode(e);
	if(key){
		if(key>=35 && key<=40  && iscmbListVisible(Div)){
			comboListMoveCurser(Div,key,INPUT);		
			return true;
		}else if(key==13 ){
			hiddenCombList();
			return true;
		}
	}
	cmbListSelect=-1;
	removeComboListItems(Div);
	var rep="^"+INPUT.value;
	for(i=0;i<Items.length;i++){
		if(Items[i].match(new RegExp(rep,"i"))){
			insertComboListItem(Div,Items[i],INPUT.id);
		}		
	}
	if(Div.childNodes.length==0){		
		hiddenCombList();
		return;
	}
	Div.style.left=absPos(INPUT).X+"px";		
	Div.style.top=absPos(INPUT).Y+INPUT.offsetHeight+"px";	
	Div.style.display="block";
	//if(Div.scrollHeight<Div.childNodes[Div.childNodes.length-1].offsetTop){	
	if(Div.offsetHeight<=Div.childNodes[Div.childNodes.length-1].offsetTop+Div.childNodes[Div.childNodes.length-1].offsetHeight+2){
		Div.style.width=INPUT.offsetWidth+16+"px";
	}else{
		Div.style.width=INPUT.offsetWidth+"px";		
	}
	cw=Div.childNodes[Div.childNodes.length-1].offsetTop+Div.childNodes[Div.childNodes.length-1].offsetHeight+2;
	Div.style.height=cw<maxHeight?cw+"px":maxHeight+"px";
}

function hiddenCombList(){
	Div=document.getElementById(cmbListSelectID);
	cmbListSelect=-1;
	Div.scrollTop=0;
	if(!Div){
		return;
	}
	Div.style.display="none";		
}

function removeComboListItems(root){
	if(!root){
		return;
	}
	for(i=root.childNodes.length-1;i>=0;i--){
		root.removeChild(root.childNodes.item(i));
	}
}

function createComboListSelectDiv(){
	var D=document.createElement("div");
	setCSSFormat(D,cmbListStyle);
	D.style.zIndex=100;
	D.id=cmbListSelectID;
	document.body.appendChild(D);
	return D;
}

function insertComboListItem(Div,Item,FLD_ID){
	if(!Div){
		return;
	}
	var D=document.createElement("DIV");
	setCSSFormat(D,cmbListItemStyle);
	D.innerHTML=Item;
	cmb_addEvent(D,"mouseover",function(){return setCSSFormat(this,cmbListItemStyleAction);});
	cmb_addEvent(D,"mouseout",function(){return setCSSFormat(this,cmbListItemStyle);});	
	cmb_addEvent(D,"click",function(){return insertComboListValue(FLD_ID,Item);});	
	Div.appendChild(D);
}

function insertComboListValue(fldId,Txt){
	fld=document.getElementById(fldId);
	if(fld){
		fld.value=Txt;
	}
	hiddenCombList();
}

function cmb_addEvent(Node,Event,Fun){	
	try{
		if(document.all){
			Node["on"+Event]=Fun;
			//Node.attachEvent("on"+Event,Fun)
		}else{
			Node.addEventListener(Event, Fun, false);			
		}
	}catch(e){
		//debug(e);
	}
}
function cmb_removeEvent(Node,Event,Fun){	
	try{
		if(document.all){
			Node["on"+Event]=null;
		}else{
			Node.removeEventListener(Event, Fun, true);			
		}
	}catch(e){
		//debug(e);
	}
}
function iscmbListVisible(List){
	if(List.style.display=='block')
		return true;
	return false;
}

