/*
 * 자동완성 관련 JS
 */

var xmlHttp = null;
var completeDiv =  null;
var bottomDiv = null;
var inputField = null;
var viewStateImg =  null;
var resultViewArray = null;
var resultDataArray = null;

var mDivMOver = "";

/* TODO: 이미지 경로 수정 */
var imgAutocomShow = "";
/* TODO: 이미지 경로 수정 */
var imgAutocomHide = "";
var viewState = true;
var beforeText = "";
var currItemIdx = -1;
/* TODO: 자동완성 div 내의 한개의 결과 데이터의 높이 수정 */
var rowHeight = 18;
var isStarted = false;
var colname = "";
var viewlen = "";

String.prototype.trim = function() {
		  return this.replace(/(^\s*)|(\s*$)|($\s*)/g, "");
}

function FS_SEARCH(targetQry, targetCompleteDiv, targetBottomDiv, targetViewStateImg, where, imgPath1, imgPath2, length) {
	inputField = document.getElementById(targetQry);
	completeDiv = document.getElementById(targetCompleteDiv);
	bottomDiv = document.getElementById(targetBottomDiv);
	viewStateImg = document.getElementById(targetViewStateImg);
	colname = where;
	imgAutocomShow = imgPath1;
	imgAutocomHide = imgPath2;
	viewlen = length;

	//10ms 간격으로 doSearch() 함수를 지속적으로 호출
	setInterval("doSearch()",10);
	
	inputField.onfocus = autoOnfocusE;
}

function autoOnfocusE(){
	viewStateImg.src = imgAutocomHide;
	viewState = true;
	if(resultDataArray == null)	findCell();
	setAutocomDisplay(true);
}

function doSearch()
{
	/* 파이어폭스의 한글 key 이벤트 처리 오류로 인한 10ms 단위의 호출 감시 */
	if (beforeText != inputField.value && currItemIdx == -1 && isStarted == true) {
		//10ms 이전 호출에서의 text 창에서의 문자와 현재의 문자가 다를 경우,
		beforeText = inputField.value;
		//자동완성 검색 호출
		findCell();
	} 
}

function createXMLHttpRequest() {
	if (window.ActiveXObject) {
		xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
	}
	else if (window.XMLHttpRequest) {
		xmlHttp = new XMLHttpRequest();	 
	}
}

function findCell() {

	createXMLHttpRequest();
	var url = "";
	url = "/CSP/jsp/csp4/autocom.jsp?keyword=" +encodeURI(inputField.value) + "&viewlen=" + viewlen + "&colname=" + colname;
	
	xmlHttp.open("GET", url, true);
	xmlHttp.onreadystatechange = callback;
	xmlHttp.send(null);

}

function callback() {
	if (xmlHttp.readyState == 4) {
		var data = xmlHttp.responseText.trim();
		if (xmlHttp.status == 200 &&  data.length > 0) {
			PrintResults(data);
		} else if(data.length < 1){ //데이터가 존재하지 않을 경우
			resultDataArray = null;
			resultViewArray = null;
			clearCell();
		}
		
	}
}


function PrintResults(p_text) {
	var tmpArray = new Array();
	
	//검색어 강조된 데이터와 구문강조 없는 데이터 분리
	tmpArray = p_text.split("\n");
	
	//각각의 데이터를 배열화 변환 전역변수로 저장
	resultDataArray = new Array();
	resultDataArray = tmpArray[0].split("|");
	resultViewArray = new Array();
	resultViewArray = tmpArray[1].split("|");
	
	var innerHtml = "";
	
	var onClick = "";
	var id = "";
	var title = "";
	var onMouseOver = " onMouseOver=\"this.className='on'\"";
	var onMouseOut = " onMouseOut=\"this.className='off'\"";
	
	innerHtml += "<ul>";
	for (var i = 0; i < resultViewArray.length ; i++) {
		onClick = " onClick=\"go_srch('" + resultDataArray[i].trim() + "');\"";
		id = " id=\"itemList_" +  i + "\"";
		title = "";
		if(resultViewArray[i].trim().indexOf("...") > 0)
			title = " title=\"" + resultDataArray[i].trim()  + "\"";
		
		innerHtml += "<li " + onClick + onMouseOver + onMouseOut + id + title + ">";
		
		innerHtml +=  resultViewArray[i].trim();
		innerHtml += "</li>\n"
	}
	innerHtml += "</ul>";
	
	completeDiv.innerHTML = innerHtml;
	setOffsets();
	currItemIdx = -1;
	if(viewState == true) {
		completeDiv.style.display = "block";
		bottomDiv.style.display = "block";
	}
}

function mvNextItem() {
	if(resultDataArray.length > 0 && currItemIdx < resultDataArray.length - 1) {
		var itemId = "";
		if(currItemIdx >= 0) {
			itemId = "itemList_" + currItemIdx;
			document.getElementById(itemId).className="off";
		}
		
		currItemIdx ++;
		itemId = "itemList_" + currItemIdx;
		document.getElementById(itemId).className="on";
		inputField.value = resultDataArray[currItemIdx];
		
		/* 스크롤바 이동 */
		if(currItemIdx >= 10 && currItemIdx % 10 == 0)
			completeDiv.scrollTop = (currItemIdx + 1) * rowHeight;
	}
}

function mvPrevItem() {
	if(resultDataArray.length > 0 && currItemIdx >= 0) {
		var itemId = "";
		itemId = "itemList_" + currItemIdx;
		document.getElementById(itemId).className="off";
		currItemIdx --;
		if(currItemIdx >= 0) {
			itemId = "itemList_" + currItemIdx;
			document.getElementById(itemId).className="on";
			inputField.value = resultDataArray[currItemIdx];
		}
		else if(currItemIdx < 0)
			inputField.value = beforeText;
			
		/* 스크롤바 이동 */	
		if(currItemIdx % 10 == 9)
			completeDiv.scrollTop = (currItemIdx - 9) * 20;
	}
}

function keyHandler(event) {
	isStarted = true;
	if(event.keyCode==40 && resultDataArray != null){ 
		mvNextItem(); 
	} else if(event.keyCode==38 && resultDataArray != null){ 
		mvPrevItem(); 
	} else if(event.keyCode==13) {
		if( resultDataArray == null ) return false;	
		if( currItemIdx >= 0 )
			go_srch(resultDataArray[currItemIdx]);
	} else {
		currItemIdx = -1;
	}
}

function go_srch(dataQry) {
	var schForm = document.srchForm;
	schForm.action = "UnScRlt.laf";
	schForm.txtQuery.value = dataQry;
		schForm.submit();
	schForm.txtQuery.focus();
}

/* 자동완성 div를 화면에 출력하거나 감춘다 */
function setAutocomDisplay(flag){
	try {
		if ( flag == true && resultDataArray.length > 0) {
			viewStateImg.src = imgAutocomHide;
			bottomDiv.style.display = "block";
			completeDiv.style.display = "block";
		} else {
			viewStateImg.src = imgAutocomShow;
			bottomDiv.style.display = "none";
			completeDiv.style.display = "none";
			viewState = false;
		}
	} catch(e) {
	}
}

document.onclick = function() {
	if(mDivMOver == false) {
		setAutocomDisplay(false);
		viewState = false;
	}		
}

/* 자동완성창의 출력 상태를 변경할때 호출. show or hide */
function toggleViewState() {
	if(viewState == true) {
		setAutocomDisplay(false);
		viewState = false;
	} else {
		setAutocomDisplay(true);
		viewState = true;
	}
}

function setOffsets() {
	var itemCount = resultDataArray.length;
	
	if(itemCount > 10)
		itemCount = 10;
		
	completeDiv.style.height = (rowHeight * itemCount) + "px";
}

/* table에 들어있는 데이터를 삭제하고 자동완성 div를 invisible로 */
function clearCell() {
	resultDataArray = null;
	resultViewArray = null;
	completeDiv.style.height = "0px";
	completeDiv.innerHTML = "";
	completeDiv.style.display = "none";
	bottomDiv.style.display = "none";
}