var req;
var userKeyword = "";
var oldUserKeyword = "";
var useSuggestFunction = true;
var totalKeywordCount = 0;
var curCursorPos = -1;
var guideDisplayFlag = true;
var buildListComplete = true;
var virtualValue = "";
var oldValue = "";
var g_oConvert = "";

var itemHeight = 18; //리스트가 있을 때 iframe의 Height
var footerHeight = 30; //리스트가 있을 때 iframe의 Layer Height
var txtHeight = 18; //리스트가 있을 때 하단의 여백 조절
var noListGuideHeight = '28px'; //결과값이 없을 때 가이드의 Height
var noListIframeHeight = '55px'; //결과값이 없을 때 iframe의 Height

var query = "query"; //쿼리 <input> 의 name을 설정한다
var target = ""; //ARK 웹서버 설정파일의 목록에 있는 추천어 서비스 대상을 지정한다.

var qObj = getObject(query,"parent");
var totalKeywordCount = 0;
var totalrKeywordCount = 0;
parent.document.body.onmousedown = eventHandlerBody;
qObj.onkeydown = eventHandler;

/***********************************************   
단어 입력 후 정방향 역방향 이미지 버튼 클릭시 이벤트 처리
**********************************************/
function onConvert(convert){
	var q = qObj.value;	
	if(q == " "){
		return;
	}

    if(!isAvailableStr(q)) {
        return;
    }

	if(convert=="fw"){
		g_oConvert = "fw";
		loadXMLDoc(q);
		return;
	}
	if(convert=="rw"){
		g_oConvert = "rw";
		loadXMLDoc(q);
		return;
	}
}

/***********************************************   
현재 입력창의 값의 변화를 체크한다.
**********************************************/
function checkChangeValue() {
    var newValue = qObj.value;	
    if(newValue=="") {
        oldValue = "";
        oldUserKeyword = "";
		
        if(guideDisplayFlag) {
            setQueryDisplayOff();
        }
    }
    if(useSuggestFunction && newValue!=oldValue && newValue!=virtualValue) {
		g_oConvert = "fw";
		setQueryValue();
    }
    setTimeout("checkChangeValue()",5);
	
}
/***********************************************
브라우저에서 일어나는 이벤트를 체크한다.
**********************************************/
function eventHandlerBody(e) {
	//if(getBrowserType()==1){
	if("undefined"==typeof(e)){
		evt = parent.window.event;
	}else{
		evt = e;
	}
	var elemId;
	if(getBrowserType()==1){
		elemId = evt.srcElement.id;
	}else{
		elemId = evt.target.id;
	}

	if(elemId==query) {
		setSugBox();
	} else if(elemId=="sugicn") {   // icon
		showSugGuide();
	} else {
		setQueryDisplayOff();
		setGuideDisplayOff();
	}   
	//}
}
/***********************************************  
자동완성 이벤트 핸들러를 받는다.
**********************************************/
function eventHandler(e) {
    if("undefined"==typeof(e)){
        evt = parent.window.event;
	}else{
        evt = e;
	}
    if(useSuggestFunction) {
        setFrameEvent(evt);
    }
}
/***********************************************   
자동완성 iframe의 div를 화면에 출력한다.
**********************************************/
function setQueryDisplayOn() {
    if((totalKeywordCount+totalrKeywordCount) >0) {
		setResizeLayer();
        getObject("querylist_border","").style.display = "block";
        getObject("hFrame","parent").style.display = "block";
		
		getObject("set_sugicn","parent").style.display = "block";
		if(getObject("set_sugicnUP","parent"))
			getObject("set_sugicnUP","parent").style.display = "none";
        setSugfooter("footer", "");
    }
}
/***********************************************     
자동완성 iframe의 div를 화면에서 감춘다.
**********************************************/
function setQueryDisplayOff() {
    getObject("querylist_border","").style.display = "none";
    getObject("hFrame","parent").style.display = "none";
	
	getObject("set_sugicn","parent").style.display = "block";
	if(getObject("set_sugicnUP","parent"))
		getObject("set_sugicnUP","parent").style.display = "none";
    curCursorPos = -1;
}
/***********************************************   
자동완성 Guide를 화면에 출력한다.
**********************************************/
function setGuideDisplayOn() {
	guideDisplayFlag = false;
	setSugHeader("header", "guide", "");
    getObject("guidelist","").style.display = "block";
    getObject("hFrame","parent").style.display = "block";
	
	getObject("set_sugicn","parent").style.display = "none";
	if(getObject("set_sugicnUP","parent"))
		getObject("set_sugicnUP","parent").style.display = "block";
	else{
		getObject("sugicn","parent").src = "./img/icon_up2.gif";	
		getObject("set_sugicn","parent").style.display = "block";
	}
    setSugfooter("footer", "");
}
/***********************************************   
자동완성 Guide를 화면에서 감춘다.
**********************************************/
function setGuideDisplayOff() {
	guideDisplayFlag = true;
    getObject("guidelist","").innerHTML = "";
    getObject("guidelist","").style.display = "none";
    
    getObject("set_sugicn","parent").style.display = "block";
	if(getObject("set_sugicnUP","parent"))
		getObject("set_sugicnUP","parent").style.display = "none";
	else{
		getObject("sugicn","parent").src = "./img/icon_down2.gif";
	}
    getObject("hFrame","parent").style.display = "none";
}
/***********************************************   
자동완성 단어가 없을 경우에 화면에 출력한다.
**********************************************/
function setNoResultDisplayOn() {
	guideDisplayFlag = false;
	setSugHeader("header", "guide", "");
    getObject("guidelist","").style.display = "block";
    getObject("hFrame","parent").style.display = "block";

	getObject("set_sugicn","parent").style.display = "block";
	if(getObject("set_sugicnUP","parent"))
		getObject("set_sugicnUP","parent").style.display = "none";
	else{
		getObject("sugicn","parent").src = "./img/icon_down2.gif";	
	}	
    setSugfooter("footer", "");
}
/***********************************************   
입력창의 값을 체크
**********************************************/
function setQueryChange() {
    //clearQueryList();
	buildQueryList();
    setTimeout("setQueryValue()",10);
}

function checkLayerDisplay(obj) {
    if(getObject(obj,"").style.display=='block'){
        return true;
    }else{
        return false;
	}
}

/*********************************************** 
키보드 입력키를 체크한다.
**********************************************/
function isAvailableKeyCode(key) {
    /**
    * 37~40 : 방향키
    * 112 ~ 123 : F1~F12, 
    * alt : 18
    * ctl : 17
    * 116 : F5
    * 27 : esc
    */
    var keyArr = new Array(17,18,37,39,116);

    for(var i=0;i<keyArr.length;i++) {
        if(keyArr[i]==key)
            return false;
    }
    return true;
}
/***********************************************  
입력된 키 이벤트값에 따라서 자동완성 여부를 체크한다.
**********************************************/
function setFrameEvent(evt) {
    if (evt && useSuggestFunction) {
        var key = evt.keyCode;
        if(!isAvailableKeyCode(key)) {
            return;
        }else {
            if(key==27) {
                setQueryDisplayOff();
            }else if(key==38) {
                moveFocusToSelect(key);
            }else if(key==40) {				
				if(getObject(query,"parent").value != '') {
                    if(!checkLayerDisplay("querylist_border")) {										
                        setQueryDisplayOn();
                    }else {
                        setTimeout("moveFocusToSelect(40)", 10);
                    }
				}
            } else {
				//특별한 이벤트 처리는 없다
            }
        }

    }
}
/***********************************************   
입력된 키 값을 loadXMLDoc 메소드로 보낸다.
**********************************************/
function setQueryValue() {
    var q = qObj.value;
	if(q == " "){
		return;
	}
	
    if(!isAvailableStr(q)) {
        return;
    }
	
	//if(q==oldUserKeyword) {
     //  return;
    //}

    if(q.length < 20) {
        buildListComplete = false;
        loadXMLDoc(q);
        userKeyword = q;
        oldUserKeyword = q;
        oldValue = q;
    }
}
/***********************************************   
입력된 키워드를 체크한다.
**********************************************/
function isAvailableStr(str) {
    // ark reserved keyword
    if(service=="ark" && str.toLowerCase()=="l ") {
        userKeyword = str;
        oldUserKeyword = str;
        oldValue = str;

        setQueryDisplayOff();
        return false;
    }
    return true;
}
/***********************************************  
추천된 단어 리스트를 방향키로 선택할 경우
**********************************************/
function moveFocusToSelect(key) {
    clearCursorPos();

    if(key==38) {
        if(curCursorPos==-1 || curCursorPos==0) {
            setQueryDisplayOff();
            qObj.value = userKeyword;
			return;
		}else {
            curCursorPos = curCursorPos - 1;
	        if((curCursorPos+QLIST_COUNT) < (totalKeywordCount+totalrKeywordCount)) {
                getObject("querylist","").doScroll("scrollbarUp");
                getObject("querylist","").doScroll("scrollbarUp");
            }
        }
    }else if(key==40) {
        if(curCursorPos!=(totalKeywordCount+totalrKeywordCount-1)) {
            onMouseOutKeyword(curCursorPos);
            curCursorPos = curCursorPos + 1;

            if(curCursorPos > (QLIST_COUNT-1)) {
                getObject("querylist","").doScroll("scrollbarDown");
                getObject("querylist","").doScroll("scrollbarDown");
            }
        }
    }
    setTimeout("setCursorPos()",10);
}

/*********************************************** 
추천된 리스트의 포커스에 색을 입힌다.
**********************************************/
function setCursorPos(num) {
    if(!buildListComplete) {
        // 이벤트가 두번발생되는 경우
        setTimeout("setCursorPos()",10);
    }
    if(checkLayerDisplay("querylist_border")) {
        var pos = curCursorPos;
        if(num==0)
            pos = 0;

        if(getObject("f"+pos,"")) {
			qObj.value = getObject("f"+pos,"").innerHTML;
			//alert(qObj.value);
            getObject("bg"+pos,"").style.backgroundColor="#eeeeee";
            virtualValue = qObj.value;
        }
        return;
    }
}
/***********************************************  
커서 위치가 움질일때마다 선택되지 않은 부부은 초기화한다.
*********************************************
*/
function clearCursorPos() {
    for(var i=0; i<(totalKeywordCount+totalrKeywordCount); i++){
		if(getObject("bg"+i,"")){
			getObject("bg"+i,"").style.backgroundColor="#ffffff";
		}
    }
}

/***********************************************  
 XMLHTTPRequest 객체를 생성해서 url에 parameter와 함께 post 방식으로 보낸다.
 결과는 processReqChange를 통해서 확인
**********************************************/
var XMLHttp = null;   
function getXMLHttpRequest() {   
	if (XMLHttp == null) {   
			var tryThese = [   
					function () { 
								var obj = new XMLHttpRequest()
								obj.overrideMimeType('text/xml');
								return obj; 
								},
					function () { return new ActiveXObject('Microsoft.XMLHTTP'); },
					function () { return new ActiveXObject('Msxml2.XMLHTTP'); },
			 ];

			 for (var i = 0; i < tryThese.length; i++) {   
					XMLHttp = tryThese[i];   
					var func = tryThese[i];   
					try {   
							 return func();   
					} catch (e) {   
						 // pass   
					}   
			 }   
	 }else {   
			 return XMLHttp();   
	 }
} 
 
/**********************************************
* 입력된 키워드를 WNSimple서버로 전송하고 req객체에서
*   결과를 전달 받는다.
**********************************************/
function loadXMLDoc(_str) {	
	imgtilt = 0;
	var param = "xml=";	
    var str = checkStr(_str);
	var convert = "";
	if(g_oConvert == ""){
		convert = "fw";
	}else{
		convert = g_oConvert;
	}
	//url = SUG_URL +"?target="+target+"&query="+ str+"&convert="+convert;
	url = SUG_URL +"?target="+target+"&query="+ encodeURI(str)+"&convert="+convert; //UTF-8인 경우
	req = getXMLHttpRequest();
	if (req) {
		req.open("GET", url, true);		// false는 결과가 나오기전까지 대기
		req.onreadystatechange = function() {
			if (req.readyState == 4) {
				// 정상 응답이라면				
				if (req.status == 200) {
					clearQueryList();
					buildQueryList();
				} 
			}
		}
		req.send(null);
    } 
}
/**********************************************
*   입력된 키워드 체크
**********************************************/
function checkStr(str) {
    var ch;
    var returnStr = "";
    for (var i=0;i<str.length;i++) {
        ch = str.charAt(i);
        if(ch==" ")
            returnStr += "%20";
        else
            returnStr +=ch;
    }
    return returnStr;
}
/**********************************************
*   XMLHttpRequest 체크
**********************************************/
function processReqChange() {
    if (req.readyState == 4) {
        if (req.status == 200) {
            clearQueryList();
            buildQueryList();
         } else {
            alert(req.statusText);
         }
    }
}
/**********************************************
* 추천어 XML 파싱
**********************************************/
function firstChildValue(xml, idx, tagname) {
	return xml.getElementsByTagName(tagname)[idx].firstChild.nodeValue;
}

/**********************************************
*   결과로 받은 추천어 리스트를 출력한다.
**********************************************/
function buildQueryList() {
  var q = qObj.value;
  if(qObj.value == "") return;
  var q_list = getObject("querylist","");
	xmlRet = req.responseXML;
	//alert(req.responseText);
	var returnValue = firstChildValue(xmlRet, 0, "Return");	
	if(returnValue < 0) {
		totalKeywordCount = 0;
        setQueryDisplayOff();
        return;
    }else{ 		
		var ark = xmlRet.getElementsByTagName("ARKList");
		var items =ark[0].getElementsByTagName("ARK");
		var arkR = xmlRet.getElementsByTagName("ARKRList");
		var ritems =arkR[0].getElementsByTagName("ARK");
		totalKeywordCount = items.length;
		totalrKeywordCount = ritems.length;
		if(totalKeywordCount+totalrKeywordCount < 1) {
			setQueryDisplayOff();
			return;
		} else {
			var str = "<table border='0' cellpadding='0' cellspacing='0' width='100%'>";
			//상단 키워드 리스트 출력
			for (var i=0;i<totalKeywordCount;i++) {
				var strKeyword  = items[i].getAttribute("HKeyword").replaceAll("and"," ");
				str += "<tr height='18' id='bg"+ i +"' onmouseover='onMouseOverKeyword("+i+")'";
				str += "	onmouseout='onMouseOutKeyword("+i+")' onMouseDown='onMouseDownKeyword("+i+")'>";
				str += "		<td onclick='onClickKeyword("+i+")' width='200px' ><span id='f"+ i +"' style=display:none;>";
				str += 				items[i].getAttribute("keyword").replaceAll("and"," ")+"</span>";
				str +=				dispcolor(items[i].getAttribute("type"))+"&nbsp;&nbsp;";
				str += strKeyword;
				str += "        </td>";
				if(items[i].getAttribute("linkname") != ""){
					str += "	<td id='over"+ i +"' onclick='onClickLink("+i+")' ";
					str += "        onmouseover='onMouseOverQuickName("+i+")' style='padding:0 0 0 8' width='*' align='right'>";
					str +="		<font style='font-size:11px;color:#0066CC'; title='";
					str += items[i].getAttribute("linkname")+"'><span id='link"+ i +"' style=display:none;>";
					str += items[i].getAttribute("linkurl")+"</span><u>";
					str += suggest_cutString(items[i].getAttribute("linkname"), 10)+"</u></font>&nbsp;&nbsp;</td>";
				}else{
					str += "	<td style='padding:0 0 0 8' width='*' align='right'>";
					str += disprank(items[i].getAttribute("count"))+"&nbsp;</td>";
				}
				str +="	</tr>";
			}
			if(totalrKeywordCount > 0 && totalKeywordCount > 0) str += "<tr><td colspan='3'><div id='dotLine'></div></td></tr>";
			//하단 키워드 리스트 출력
			for (var j=totalKeywordCount;j<(totalKeywordCount+totalrKeywordCount);j++) {
				var rKeyword = ritems[j-totalKeywordCount];
				var strRKeyword  = rKeyword.getAttribute("HKeyword").replaceAll("and"," ");				
				str += "<tr height='18' id='bg"+ j +"' onmouseover='onMouseOverKeyword("+j+")'";
				str += "	onmouseout='onMouseOutKeyword("+j+")' onMouseDown='onMouseDownKeyword("+j+")'>";
				str += "		<td onclick='onClickKeyword("+j+")' width='200px' ><span id='f"+ j +"' style=display:none;>";
				str += 				rKeyword.getAttribute("keyword").replaceAll("and"," ")+"</span>";
				str +=				dispcolor(rKeyword.getAttribute("type"))+"&nbsp;&nbsp;";
				str += strRKeyword+ "</td>";
				if(rKeyword.getAttribute("linkname") != ""){
					str += "	<td id='over"+ j +"' onclick='onClickLink("+j+")' ";
					str += "        onmouseover='onMouseOverQuickName("+j+")' style='padding:0 0 0 8' width='*' align='right'>";
					str +="		<font style='font-size:11px;color:#0066CC'; title='";
					str += rKeyword.getAttribute("linkname")+"'><span id='link"+ j +"' style=display:none;>";
					str += rKeyword.getAttribute("linkurl")+"</span><u>";
					str += suggest_cutString(rKeyword.getAttribute("linkname"), 10)+"</u></font>&nbsp;&nbsp;</td>";
				}else{
					str += "	<td style='padding:0 0 0 8' width='*' align='right'>";
					str += disprank(rKeyword.getAttribute("count"))+"&nbsp;</td>";
				}
				str += "</tr>";
			}
			str +="</table>";
		}
		if(!isFirstBuild){
			setQueryDisplayOn();
		}
		isFirstBuild = false;
	}
	
	q_list.innerHTML = str;
	getObject("guidelist","").style.display = 'none';
	if(totalrKeywordCount > 0 ){
		//alert(g_oConvert);
		if(g_oConvert == "rw" ){
			setSugHeader("header", "qlist", "mrFront");
		}else if(g_oConvert == "fw" || g_oConvert == ""){
			setSugHeader("header", "qlist", "mrRear");
		}
	}else{
		setSugHeader("header", "qlist", "mrNone");
	}
	setSugfooter("footer", "");
	
	curCursorPos = -1;
	buildListComplete = true;
}

/**********************************************
*  font color  메소드
**********************************************/
function dispcolor(count){ 
    var color;
	var ret;
	 if(count >= 0 && count <= 4){
		color = "#989898";
	 }else{
		color = "#CC6633";
	 }
	 /*
	if(count == 0 || count == 5){
		ret = "<font style='font-size:11px;font-family:돋움;color:"+color+"'>사전</font>";
	}else if(count == 1 || count == 6){
		ret = "<font style='font-size:11px;font-family:돋움;color:"+color+"'>일반</font>";//색인
	}else if(count == 2 || count == 7){
		ret = "<font style='font-size:11px;font-family:돋움;color:"+color+"'>인기</font>";
	}else if(count == 3 || count == 8){
		ret = "<font style='font-size:11px;font-family:돋움;color:"+color+"'>테마</font>";
	}else if(count == 4 || count == 9){
		ret = "<font style='font-size:11px;font-family:돋움;color:"+color+"'>추천</font>";
	}
	*/
	ret = "";
	
  return ret; 
}
/**********************************************
*  검색어 자동완성 div의 사이즈를 결정한다.
**********************************************/
function setResizeLayer() {
	var arkMax = QLIST_COUNT;
	var sugItemHeight = itemHeight;
	if(getBrowserType()==1){
		sugItemHeight = itemHeight-2;
	}
	
	var hFrameObject = getObject("hFrame","parent");
    var q_list = getObject("querylist","");
	var hFrameHeight = itemHeight*(totalKeywordCount+totalrKeywordCount) + 12 + footerHeight + txtHeight+"px";
    if((totalKeywordCount+totalrKeywordCount) > (QLIST_COUNT)){	
		q_list.style.height = (itemHeight * arkMax) + 12;
		getObject("hFrame","parent").style.height = (itemHeight * arkMax + 12 + footerHeight)+"px";
	}else{
		if(totalKeywordCount > 0 && totalrKeywordCount > 0){
			q_list.style.height = itemHeight*(totalKeywordCount+totalrKeywordCount) + 12 + txtHeight+"px";
			hFrameObject.style.height = hFrameHeight;
		}else{
			q_list.style.height = (itemHeight*(totalKeywordCount+totalrKeywordCount) + 12 )+"px";
			getObject("hFrame","parent").style.height = (itemHeight*(totalKeywordCount+totalrKeywordCount) + 12 + footerHeight)+"px";
		}
	}
}

function clearQueryList() {
    var q_list = getObject("querylist","");
    q_list.innerHTML = "";
    setSugfooter("footer", "");
}

function setSuggestOff() {
    qObj.setAttribute("autocomplete","on");
    setQueryDisplayOff();
    useSuggestFunction = false;
    guideDisplayFlag = true;

    if(getIeBrowserVer() >= 5.5) {
        // IE5.5 이상 지원
        qObj.setActive();
    }

    var today = new Date();
    var expire_date = new Date(today.getTime() + 365*60*60*24*1000);
    setCookie("suggest","off",expire_date);
}

function setSuggestOn() {
    qObj.setAttribute("autocomplete","off");
    setGuideDisplayOff();
    useSuggestFunction = true;
    guideDisplayFlag = true;
    checkChangeValue();

    var today = new Date();
    var expire_date = new Date(today.getTime() - 60*60*24*1000);
    setCookie("suggest","on",expire_date);

    getObject(query,"parent").focus();
    setQueryValue();
	setQueryDisplayOn();

}

/** 객체 얻기 */
function getObject(objectId, nodeObject){ 
	// checkW3C DOM, then MSIE 4, then NN 4.
    var doc = document;
    if(nodeObject=="parent"){
        doc = parent.document;
	}
	if(doc.getElementById && doc.getElementById(objectId)){ 
		return doc.getElementById(objectId); // 대부분의 브라우저 
	}else if (doc.all && doc.all(objectId)){
		return doc.all(objectId); // IE4와 5.0 
	}else if (doc.layers && doc.layers[objectId]){
		return doc.layers[objectId];  // Netscape 4.x 
	}else{ 
		return false; 
	} 
}

function getBrowserType() {
	if (navigator.appName == "Microsoft Internet Explorer")
		return 1;  
	else if (navigator.appName == "Netscape")
		return 2;	
	else 
		return 0;
}

function getIeBrowserVer() {
    var ieVer = 0;
    if(getBrowserType()==1)
        ieVer = navigator.appVersion.match(/MSIE \d+.\d+/)[0].split(" ")[1];

    return ieVer;
}

function openHelp(){
	window.open("./help/help_01.html","도움말","height=540,width=768,toolbar=no,menubar=no,scrollbars=yes,resizable=no,location=no,directories=no,status=no");
}

//v2.0에서 변경함
function setSugHeader(obj, flag, mr){
	var q_listheader = getObject(obj,"");
	var str = "<div style='float:left'>";
	if(mr == "mrRear"){
		str += "&nbsp;<img src='./img/ark_end_icon.gif' width='16' height='14' style='vertical-align:-2px'> <a href='#' onclick='scrollUp();onConvert(\"rw\");return false;'>끝단어 더보기</a>";		
	}else if(mr == "mrFront"){
		str += "&nbsp;<img src='./img/ark_start_icon.gif' width='16' height='14' style='vertical-align:-2px'> <a href='#' onclick='scrollUp();onConvert(\"fw\");return false;'>첫단어 더보기</a>";
	}else if(mr == "mrNone"){
		str += "";
	}else{
		if(flag != 'guide') str += "&nbsp;<img src='../img/ark_end_icon.gif' width='8' height='9' style='vertical-align:-2px'> <a href='#' onclick='scrollUp();buildQueryList();return false;'>끝단어 더보기</a>";
	}
	str += "</div>";
	str += "<div style='float:right'>";
	//str += "<a href='#' onClick='openHelp()'>도움말</a>&nbsp;<img src='./img/ark_bar.gif'>&nbsp;";	
	if(flag == 'guide') {
		str += "<a href='#' onClick='showSugGuide()'>닫기</a>&nbsp;";
	} else if(flag == 'qlist') {
        if(useSuggestFunction)
    		str += "<a href='javascript:setSuggestOff()'>기능끄기</a>&nbsp;";
        else
            str += "<a href='javascript:setSuggestOn()'>기능켜기</a>&nbsp;";
    }	
	str += "</div><br style='clear:both'>";
	q_listheader.innerHTML = str;
	q_listheader.style.display = 'block';
}

function scrollUp(){
	qObj.focus();
	//IE이면 스크롤을 올린다
	if(getBrowserType()==1) {
		getObject('querylist','').doScroll('pageUp');
	}
}

function setSugfooter(obj, flag){
	var q_listfooter = getObject(obj,"");
	var str = "";
	q_listfooter.innerHTML = str;
	q_listfooter.style.display = 'block';
}

function setSugBox() {
    q = userKeyword;
    var curQ = qObj.value;
    if(!checkLayerDisplay("querylist_border") && useSuggestFunction && q!="" && curQ !="") {

        if(totalKeywordCount >0 || totalrKeywordCount >0){
            if(checkLayerDisplay("guidelist")) {
                setGuideDisplayOff();
            }
			setQueryChange();
            setQueryDisplayOn();
        }else{
            getObject(query,"parent").focus();
            setQueryDisplayOff();

            if(checkLayerDisplay("guidelist")) {
                setGuideDisplayOff();
            } else {
                setNoResultDisplayOn();
            }

            noSugList();
        }
    }else {
        setQueryDisplayOff();
        setGuideDisplayOff();
    }
}

function noSugList() {
	setSugHeader("header", "qlist", "");
    getObject("guidelist","").innerHTML = '';
    getObject("guidelist","").style.height = noListGuideHeight;
    getObject("hFrame","parent").style.height = noListIframeHeight;
    getObject("guidelist","").style.overflow = 'hidden';
    var str;
    str = '<div id="sugGuide">';
    str += '해당 단어로 시작하는 검색어가 없습니다.';
    str += '</div>'		
    getObject("guidelist","").innerHTML = str;
    setSugfooter("footer", "");
}

function onMouseOverKeyword(curSorNum){ 
    clearCursorPos();
    curCursorPos = curSorNum;
	getObject("bg"+curSorNum,"").style.backgroundColor = '#eeeeee';
}

function onMouseOutKeyword(curSorNum){
    curCursorPos = curSorNum;
    if(getObject("bg"+curCursorPos,"")) {
//	    getObject("bg"+curCursorPos,"").style.cursor = 'arrow';
    	getObject("bg"+curCursorPos,"").style.backgroundColor = '#ffffff';
    }
}

function onMouseOverQuickName(curCursorPos){
	//alert(curCursorPos);
	getObject("over"+curCursorPos,"").style.cursor = 'hand';
}

function setFocusEnd (obj) {
    if (obj.createTextRange) {
        var fieldRange = obj.createTextRange();
        fieldRange.moveStart('character', obj.value.length);
        fieldRange.collapse();
        fieldRange.select();
    }
}


function setCookie(name, value, expire) {
    var expire_date = new Date(expire)
    document.cookie = name + "=" + escape(value) + "; path=/; expires=" + expire_date.toGMTString();
}

function getCookie(name) {
    var dc = document.cookie;
    var prefix = name + "=";
    var begin = dc.indexOf("; " + prefix);
    if (begin == -1) {
        begin = dc.indexOf(prefix);
        if (begin != 0) 
            return null;
    } else {
        begin += 2;
    }

    var end = document.cookie.indexOf(";", begin);
    if (end == -1)
        end = dc.length;
    return unescape(dc.substring(begin + prefix.length, end));
}

// 공통 함수 정리  
 
// 공백처리
function suggest_trim(str) //꼬리말,검색 공백처리함수
{
  str = str.replace(/(\s+$)/g,"");
  return str.replace(/(^\s*)/g,"");
    
}
 
// limitByte 의 byte 만큼 str 을 자른 후 반환한다.                                                                  
function suggest_cutString( str , limitByte)
{
    var inc = 0;
    var nbytes = 0;
    var msg = "";
    var msglen = str.length;

    for (i=0; i<msglen; i++) {
      
        var ch = str.charAt(i);
        if (escape(ch).length > 4) {
            inc = 2;
        } else if (ch == '') {
            if (str.charAt(i-1) != '') {
                inc = 1;
            }
        } else if (ch == '<' || ch == '>') {
            inc = 4;
        } else {
            inc = 1;
        }
        if ((nbytes + inc) > limitByte ) {
            break;
        }
        nbytes += inc;
        msg += ch;
        
    }
    
    if( i != msglen ) msg = msg + "..";
    
    return msg;
}


// str_replace 함수
function suggest_chAll(s,s1,s2){ 
  return s.replace(new RegExp(s1,'g'), s2); 
}
/**********************************************
*  추천어 리스트 우측에 Ranking Bar 출력
**********************************************/
function disprank(str){ 
    /* v1.1에서는 이미지를 사용
	if(str >= 0 && str <= 20){
		str = "<img src=./img/sh_bar_1.gif>";
	}else if(str > 20 && str <= 40){
		str = "<img src=./img/sh_bar_2.gif>";
	}else if(str > 40 && str <= 60){
		str = "<img src=./img/sh_bar_3.gif>";
	}else if(str > 60 && str <= 80){
		str = "<img src=./img/sh_bar_4.gif>";
	}else if(str > 80 && str <= 100){
		str = "<img src=./img/sh_bar_5.gif>";
	}else{
		str = "<img src=./img/sh_bar_5.gif>";
	}
	*/
	//v1.2부터는 텍스트로 출력
	/*
	if(str >= 0 && str <= 20){
		str = "<font style='font-size:9px;color:#CC6633'>|</font><font style='font-size:9px;color:#C0C0C0'>||||</font>";
	}else if(str > 20 && str <= 40){
		str = "<font style='font-size:9px;color:#CC6633'>||</font><font style='font-size:9px;color:#C0C0C0'>|||</font>";
	}else if(str > 40 && str <= 60){
		str = "<font style='font-size:9px;color:#CC6633'>|||</font><font style='font-size:9px;color:#C0C0C0'>||</font>";
	}else if(str > 60 && str <= 80){
		str = "<font style='font-size:9px;color:#CC6633'>||||</font><font style='font-size:9px;color:#C0C0C0'>|</font>";
	}else if(str > 80 && str <= 100){
		str = "<font style='font-size:9px;color:#CC6633'>|||||</font>";
	}else{
		str = "<font style='font-size:9px;color:#CC6633'>|||||</font>";
	}
	*/
	str = "";
  return str; 
}

// urlencode 해주기
// 특수문자 같은 경우 {, %, 등은 unescape 함수로 인코딩 시켜줘도 변하지 않는다. 
function replace_localpath(str){
    str = suggest_chAll( str , "%", "%25" );       
    str = suggest_chAll( str , " ", "%20" );
    str = suggest_chAll( str , "#", "%23" );
    str = suggest_chAll( str , "&", "%26" );
    str = suggest_chAll( str , "`", "%60" );
    
    str = suggest_chAll( str , "'", "%27" );
    
    str = suggest_chAll( str , "{", "%7B" );
    str = suggest_chAll( str , "}", "%7D" );
     
    var arrayTemp = str.split('^');
    var temp ="";
    var temp2 = "";

    for (i=0 ; i < arrayTemp.length ; i++){
      temp =  temp +  temp2 + arrayTemp[i] ;
      temp2 = "%5E";
    }
    str = temp;

    // [
    var arrayTemp = str.split('[');
    var temp ="";
    var temp2 = "";

    for (i=0 ; i < arrayTemp.length ; i++){
      temp =  temp +  temp2 + arrayTemp[i] ;
      temp2 = "%5B";
    }
    str = temp;

    // ]
    var arrayTemp = str.split(']');
    var temp ="";
    var temp2 = "";

    for (i=0 ; i < arrayTemp.length ; i++){
      temp =  temp +  temp2 + arrayTemp[i] ;
      temp2 = "%5D";
    }
    str = temp;

    // |
    var arrayTemp = str.split('|');
    var temp ="";
    var temp2 = "";

    for (i=0 ; i < arrayTemp.length ; i++){
      temp =  temp +  temp2 + arrayTemp[i] ;
      temp2 = "%7C";
    }
    str = temp;


    return str;
    
}

String.prototype.replaceAll = function(_findValue, _replaceValue) {
 return this.replace(new RegExp(_findValue,"g"), _replaceValue);
};