var nCurMenu	= 0;            // List 항목에서 현재 커서가 위치해 있는 곳
var nMenuLength = 0;            // 검색 되어진 전체 List 길이
var nHeightPerLine = 14;
var rMenu;
var sLastReceived;
var sMenuColor = "#99CCFF";
var sMenuColorSelected = "#FFFFFF";
var objViewId;
var objHidId;
var objDivId;
var oCodeType;


function goLocAjax(rstCode, rstDesc){
	getById(objViewId).value = rstDesc;
	getById(objHidId).value  = rstCode;
	
	sLastReceived = rstCode;
	
	getById(objDivId).style.display = "none";

	return;
}

function suggestSuccess(oj){
	nCurMenu	= 0;
	nMenuLength = 0;
	rMenu = new Array();
	var str = oj.responseText;

	if(sLastReceived != str){
		//sLastReceived = str;
		if(str != "" && str.length > 6){
			rMenu = str.split(";");
			nMenuLength = rMenu.length;
			nCurMenu = 0;
			var sList = "<dl>";
			for(var i=1; i <= rMenu.length; i++){
				var rstCode = rMenu[i-1].split("|");//ILL_LOC_DESC, ILL_LOC_CD, ILL_CNT_DESC, ILL_CNT, ICL_CONTI

				var rstCode1 = rstCode[1];
				if(rstCode1.substring(0,3) == '???'){
					rstCode1 = rstCode1.substring(3);
				}
				sList += "<li id='menu"+objViewId+i+"'><a href='javascript:goLocAjax(\""+rstCode[0]+"\",\""+rstCode1+"\");'>"+rstCode1 + "</a></li>";
			}
			sList += "</dl>";
			getById(objDivId).innerHTML = sList;
			getById(objDivId).style.display = "";
		}else{
			//getById(objDivId).style.display = "none";
			/*
			var sList = "<dl>";
			var rstCode1 = "No Data found!";
			sList		 += "<li id='menu"+objViewId+i+"'>"+rstCode1 + "</li>";
			sList += "</dl>";
			getById(objDivId).innerHTML = sList;
			*/
			getById(objDivId).style.display = "none";

		}
	}
	return;
}

function cancelEvent(e){
	e.returnValue=false;
	if(e && e.preventDefault) e.preventDefault();
}

function init(CodeType, oView, oHid, oDiv){
    objViewId = oView;
    objHidId  = oHid;
    objDivId  = oDiv;
    oCodeType = CodeType;
}

function keyUp(CodeType, oEvent, oInputId, oDispId, oHidid){
	
    // 전역 변수 셋팅
    init(CodeType, oInputId, oHidid, oDispId);

	if(!oEvent){
		oEvent = window.event;
	}

    // 지역 변수 셋팅
	var oLayerAjax = getById(objDivId);
	var nKeyCode   = oEvent.keyCode;
	var sSearchStr = getById(objViewId).value;


    if(getById(objViewId).value.length < 2) {
        oLayerAjax.style.display='none';
        return;
    }

    // Focus가 와도 이전 값과 동일하면 중단
    //alert("sLastReceived = " + sLastReceived);
    //alert("hid value = " + getById(oHidid).value);

    if(sLastReceived == getById(oHidid).value) {
        return;
    }

    // Focus가 와도 Default Msg와 동일하면 중단
    if(defaultMsg1 != null){
        if(defaultMsg1 == getById(oInputId).value) return;
    }


    if(defaultMsg2 != null){
        if(defaultMsg2 == getById(oInputId).value) return;
    }

	//mouse click의 경우 무시한다!
	if(nKeyCode == 229) return
	

	switch(nKeyCode){
		case 13:  // enter(selected)
			if(nCurMenu > 0){ // 조회 결과에 대한 리스트에서 선택한 항목의 index
				var rstCode = rMenu[nCurMenu-1].split("|");//ILL_LOC_DESC, ILL_LOC_CD, ILL_CNT_DESC, ILL_CNT, ICL_CONTI
				//bAutoRequest = false;
				var rstCode1 = rstCode[1];
				if(rstCode1.substring(0,3) == '???'){
					rstCode1 = rstCode1.substring(3);
				}
				getById(objViewId).value =  rstCode1 ;
				getById(objHidId).value = rstCode[0];
				sLastReceived = rstCode[0];
				oLayerAjax.style.display='none';
				nMenuLength = 0;
				nCurMenu = 0;
				return;
			}
			break;
		case 40: // down arrow
			if(nMenuLength > 0 ){  // 검색된 전체 List 개수
				if(nCurMenu != nMenuLength && nCurMenu != 0)
					getById('menu'+objViewId+nCurMenu).style.background = sMenuColor;
				nCurMenu++;
				if(nCurMenu >= nMenuLength)
					nCurMenu = nMenuLength;
				getById('menu'+objViewId+nCurMenu).style.background = sMenuColorSelected;
				getById('menu'+objViewId+nCurMenu).focus();
				if(!(oLayerAjax.scrollTop >((nCurMenu-8) * nHeightPerLine) && oLayerAjax.scrollTop <((nCurMenu-8) * nHeightPerLine)+(nHeightPerLine * 7))){
					if((oLayerAjax.scrollTop + nHeightPerLine) ==((nCurMenu-8) * nHeightPerLine))
						oLayerAjax.scrollTop = oLayerAjax.scrollTop - nHeightPerLine;
					else
						oLayerAjax.scrollTop =(nCurMenu-7) * nHeightPerLine;
				}
			}
			cancelEvent(oEvent);
			break;
		case 38: // up arrow
			if(nMenuLength > 0 ){
				if(nCurMenu != 0)
					getById('menu'+objViewId+nCurMenu).style.background = sMenuColor;
				nCurMenu--;
				if(nCurMenu <= 0)
					nCurMenu = 1;
				getById('menu'+objViewId+nCurMenu).style.background = sMenuColorSelected;
				if(!(oLayerAjax.scrollTop >((nCurMenu-8) * nHeightPerLine) && oLayerAjax.scrollTop <((nCurMenu-8) * nHeightPerLine)+(nHeightPerLine * 7))){
					if((oLayerAjax.scrollTop + nHeightPerLine) ==((nCurMenu-8) * nHeightPerLine))
						oLayerAjax.scrollTop = oLayerAjax.scrollTop - nHeightPerLine;
					else
						oLayerAjax.scrollTop =(nCurMenu-7) * nHeightPerLine;
				}
			}
			cancelEvent(oEvent);
			break;
		case 39: // left/right arrow
		    cancelEvent(oEvent);
		    break;
		case 37: // left/right arrow
		    cancelEvent(oEvent);
		    break;
		default:
			try{
                sendRequest(suggestSuccess,'&flag='+oCodeType+'&TargetCol=' + encodeURIComponent(sSearchStr),'GET','/eservice/en/common/ajaxCode.do',true,true)
			}catch(oEvent){
				alert(oEvent);
				return 0;
			}
			cancelEvent(oEvent);
	}
	return;
}


function getById(id, where){
	if(where == null)
		return document.getElementById(id);
	else
		return eval(where + ".document.getElementById('"+id+"')");
}

function getByNm(id, where){
	if(where == null)
		return document.getElementsByName(id);
	else
		return eval(where + ".document.getElementsByName('"+id+"')");
}