var req;
var userKeyword = "";
var oldUserKeyword = "";
var useSuggestFunction = true;  //ARK 기능 사용 유무.
var totalKeywordCount = 0;
var curCursorPos = -1;
var guideDisplayFlag = true;
var buildListComplete = true;
var virtualValue = "";
var oldValue = "";
var g_oConvert = "";

var itemHeight = 17; //리스트가 있을 때 iframe의 Height
var footerHeight = 40; //리스트가 있을 때 iframe의 Layer Height
var txtHeight = 18; //리스트가 있을 때 하단의 여백 조절
var noListGuideHeight = '28px'; //결과값이 없을 때 가이드의 Height
var noListSugFrameHeight = '55px'; //결과값이 없을 때 iframe의 Height

var query = "query"; //쿼리 <input> 의 name을 설정한다
var target = ""; //ARK 웹서버 설정파일의 목록에 있는 추천어 서비스 대상을 지정한다.

var qObj = getObject(query, "");
var totalKeywordCount = 0;
var totalrKeywordCount = 0;

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;  //Input 상자의 현재 입력된 값

    if(newValue == "") {  //현재 입력값이 없는 경우
        oldValue = "";
        oldUserKeyword = "";

        if(guideDisplayFlag) {  //ARK 설명 문구의 활성화 여부 체크
            setQueryDisplayOff();
        }
    }

    if(useSuggestFunction && newValue!=oldValue && newValue!=virtualValue) {
		g_oConvert = "fw";
		setQueryValue();
    }
    setTimeout("checkChangeValue()", 5);

}

/******************************************************
 * 브라우저에서 일어나는 이벤트를 체크한다.
 ******************************************************/
function eventHandlerBody(e) {
	if("undefined"==typeof(e)) {
		evt = window.event;
	} else {
		evt = e;
	}

	var elemId;
	var elemName;

	if(getBrowserType() == 1) {
		elemId = evt.srcElement.id;
		elemName = evt.srcElement.tagName;
	} else {
		elemId = evt.target.id;
		elemName = evt.target.tagName;
	}

	if(elemId == query) {
		setSugBox();
	} else if(elemId == "sugicn") {   // icon
		showSugGuide();
	} else if(elemName == "A" || elemName == "a") {
	} else if(elemName == "B" || elemName == "b") {
	} else if(elemName == "SPAN" || elemName == "span") {
	} else if(elemName == "FONT" || elemName == "font") {
	} else {
		setQueryDisplayOff();
		setGuideDisplayOff();
	}
}

/******************************************************
 * 자동완성 이벤트 핸들러를 받는다.
 ******************************************************/
function eventHandler(e) {
    if("undefined" == typeof(e)) {
        evt = window.event;
	} else {
        evt = e;
	}
    if(useSuggestFunction) {
        setFrameEvent(evt);
    }
}

/******************************************************
 * 자동완성 DIV를 화면에 출력한다.
 ******************************************************/
function setQueryDisplayOn() {
    if((totalKeywordCount+totalrKeywordCount) > 0) {
		setResizeLayer();
        getObject("querylist_border", "").style.display = "block";
        getObject("SuggestFrame", "").style.display = "block";

		getObject("set_sugicn", "").style.display = "block";
		if(getObject("set_sugicnUP", "")) {
			getObject("set_sugicnUP", "").style.display = "none";
		}
        setSugfooter("ark_footer", "", "");
    }
}

/******************************************************
 * 자동완성 DIV를 화면에서 감춘다.
 ******************************************************/
function setQueryDisplayOff() {
    getObject("querylist_border","").style.display = "none";
    getObject("SuggestFrame","").style.display = "none";

	getObject("set_sugicn","").style.display = "block";
	if(getObject("set_sugicnUP","")) {
		getObject("set_sugicnUP","").style.display = "none";
	}
    curCursorPos = -1;
}

/******************************************************
 * 자동완성 Guide를 화면에 출력한다.
 ******************************************************/
function setGuideDisplayOn() {
	guideDisplayFlag = false;
	setSugHeader("ark_header", "", "");
    getObject("guidelist", "").style.display = "block";
    getObject("SuggestFrame", "").style.display = "block";

	getObject("set_sugicn", "").style.display = "none";
	if(getObject("set_sugicnUP", "")) {
		getObject("set_sugicnUP", "").style.display = "block";
	} else {
		getObject("sugicn", "").src = "/jsp/search/ark/img/icon_up2.gif";
		getObject("set_sugicn", "").style.display = "block";
	}
    setSugfooter("ark_footer", "guide", "");
}

/******************************************************
 * 자동완성 Guide를 화면에서 감춘다.
 ******************************************************/
function setGuideDisplayOff() {
	guideDisplayFlag = true;
    getObject("guidelist","").innerHTML = "";
    getObject("guidelist","").style.display = "none";

    getObject("set_sugicn","").style.display = "block";
	if(getObject("set_sugicnUP","")) {
		getObject("set_sugicnUP","").style.display = "none";
	} else {
		getObject("sugicn","").src = "/jsp/search/ark/img/icon_down2.gif";
	}
    getObject("SuggestFrame","").style.display = "none";
}

/******************************************************
 * 자동완성 단어가 없는 경우에 화면에 출력한다.
 ******************************************************/
function setNoResultDisplayOn() {
	guideDisplayFlag = false;
	setSugHeader("ark_header", "guide", "");
    getObject("guidelist","").style.display = "block";
    getObject("SuggestFrame","").style.display = "block";
	getObject("set_sugicn","").style.display = "block";

	if(getObject("set_sugicnUP","")) {
		getObject("set_sugicnUP","").style.display = "none";
	} else {
		getObject("sugicn","").src = "/jsp/search/ark/img/icon_down2.gif";
	}
    setSugfooter("ark_footer", "guide", "");
}

/******************************************************
 * 입력창의 값을 체크.
 ******************************************************/
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,"").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.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()", 5);
    }
    if(checkLayerDisplay("querylist_border")) {
        var pos = curCursorPos;
        if(num==0) {
            pos = 0;
        }

        if(getObject("f"+pos, "")) {
			qObj.value = getObject("f"+pos, "").innerHTML;
            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) {
				// Exception 처리 내용 없음
			}
		}
	} else {
		return XMLHttp();
	}
}

/******************************************************
 * 입력된 키워드를 WNSimple서버로 전송하고
 * Request(req) 객체에서 결과를 전달 받는다.
 ******************************************************/
function loadXMLDoc(_str) {
	imgtilt = 0;
	var param = "xml=";
    var str = checkStr(_str);
	var convert = "";

	if(g_oConvert == ""){
		convert = "fw";
	} else {
		convert = g_oConvert;
	}

	var param = "target=" + target + "&query=" + encodeURI(str) + "&convert=" + convert;
	req = getXMLHttpRequest();

	if(req) {
		//document.write(SUG_URL + "?" + param);
		req.open("POST", SUG_URL, true);
		req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
		req.onreadystatechange = function() {
			if(req.readyState == 4) {
				if(req.status == 200) {
					clearQueryList();
					buildQueryList();
				}
			}
		}
		req.send(param);
	}

	/** 기존의 GET 방식일 경우 전송 로직 **/
	/*
	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 Parsing.
 ******************************************************/
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='310'>";
			//상단 키워드 리스트 출력
			for(var i=0;i<totalKeywordCount;i++) {
				var strKeyword  = items[i].getAttribute("HKeyword").replace("<font style='color:#2784A7'>", "<font style='color:#2784A7'><b>").replace("</font>", "</b></font>");
				str += "<tr height='18' id='bg"+ i +"' onmouseover='onMouseOverKeyword("+i+")'";
				str += "	onmouseout='onMouseOutKeyword("+i+")' onMouseDown='onMouseDownKeyword("+i+")'>";
				str += "		<td onclick='onClickKeyword("+i+")' width='200' style='padding-left:20px'>";
				str += "			<span id='f"+ i +"' style=display:none;>";
				str += 				items[i].getAttribute("keyword");
				str += "			</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 6px' width='110' align='right'>";
					//str += "		<font style='font-size:11px;color:#0066CC'; title='" + items[i].getAttribute("linkname")+ "'>";
					//str += "		<span id='link"+ i +"' style=display:none;>" + items[i].getAttribute("linkurl")+"</span>";
					str += "		<div style='width:34px; height:14px; font-size:11px; font-family:Tahoma; background-color:#2784A7; text-align:center; padding-bottom:3px'>";
					str += "		<a href='" + items[i].getAttribute("linkurl") + "' target='_blank' style='color:#FFFFFF;'>move</a>";
					//str += "		<a href='" + items[i].getAttribute("linkurl") + "' target='_blank'><img src='/jsp/search/imgs/go.gif' border='0' /></a>";
					str += "		</div>";
					//str += "		</font>";
					//str += "		<u><a href='" + items[i].getAttribute("linkurl") + "' target='_blank'>" + suggest_cutString(items[i].getAttribute("linkname"), 10) + "</a></u></font>";
					str += "	</td>";
				} else {
					str += "	<td style='padding:0 0 0 8' width='110' align='right'>";
					str += disprank(items[i].getAttribute("count"))+"&nbsp;</td>";
				}
				str +="	</tr>";
			}
			
			if(totalrKeywordCount > 0 && totalKeywordCount > 0){
				str += "<tr><td colspan='2' align='center' style='padding-left:10px'>";
				str += "<table width='330' border='0' cellspacing='0' cellpadding='0'>";
				str += "<tr><td height='5'></td></tr>";
				str += "<tr><td height='3' style='background-image:url(/jsp/search/ark/img/ark_dog_bg.gif)'></td></tr>";
				str += "<tr><td height='5'></td></tr>";
				str += "</table>";
				str += "</td></tr>";
			}
			//하단 키워드 리스트 출력
			for(var j=totalKeywordCount;j<(totalKeywordCount+totalrKeywordCount);j++) {
				var rKeyword = ritems[j-totalKeywordCount];
				var strRKeyword  = rKeyword.getAttribute("HKeyword").replace("<font style='color:#2784A7'>", "<font style='color:#2784A7'><b>").replace("</font>", "</b></font>");
				str += "<tr height='18' id='bg"+ j +"' onmouseover='onMouseOverKeyword("+j+")'";
				str += "	onmouseout='onMouseOutKeyword("+j+")' onMouseDown='onMouseDownKeyword("+j+")'>";
				str += "		<td onclick='onClickKeyword("+j+")' width='200' style='padding-left:20px'>";
				str += "			<span id='f"+ j +"' style=display:none;>";
				str += 				rKeyword.getAttribute("keyword");
				str += "			</span>";
				str +=				dispcolor(rKeyword.getAttribute("type"))+"&nbsp;&nbsp;";
				str += strRKeyword+ "</td>";
				if(rKeyword.getAttribute("linkname") != "") {
					str += "	<td id='over"+ i +"' ";//onclick='onClickLink("+i+")' ";
					str += "        onmouseover='onMouseOverQuickName("+i+")' style='padding:0 0 0 6px' width='110' align='right'>";
					//str += "		<font style='font-size:11px;color:#0066CC'; title='" + items[i].getAttribute("linkname")+ "'>";
					//str += "		<span id='link"+ i +"' style=display:none;>" + items[i].getAttribute("linkurl")+"</span>";
					str += "		<div style='width:34px; height:14px; font-size:11px; font-family:Tahoma; background-color:#2784A7; text-align:center; padding-bottom:3px'>";
					str += "		&nbsp;<a href='" + rKeyword.getAttribute("linkurl") + "' target='_blank' style='color:#FFFFFF;'>move</a>&nbsp;";
					str += "		</div>";
					//str += "		</font>";
					//str += "		<u><a href='" + items[i].getAttribute("linkurl") + "' target='_blank'>" + suggest_cutString(rKeyword.getAttribute("linkname"), 10) + "</a></u></font>";
					str += "	</td>";
				} else {
					str += "	<td style='padding:0 0 0 8' width='110' 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) {
		if(g_oConvert == "rw") {
			setSugfooter("ark_footer", "qlist", "mrFront");
		} else if(g_oConvert == "fw" || g_oConvert == "") {
			setSugfooter("ark_footer", "qlist", "mrRear");
		}
	} else {
		setSugfooter("ark_footer", "qlist", "mrNone");
	}
	setSugHeader("ark_header", "");

	curCursorPos = -1;
	buildListComplete = true;
}

/******************************************************
 * Font Color 메소드.
 ******************************************************/
function dispcolor(count) {
    var color;
	var ret;
	
	if(count == 0 || count == 5) {
		color = "#5A5A5A";
	} else if(count == 1 || count == 6) {
		color = "#5A5A5A";
	} else if(count == 2 || count == 7) {
		color = "#C00000";
	} else if(count == 3 || count == 8) {
		color = "#C00000";
	} else if(count == 4 || count == 9) {
		color = "#5A5A5A";
	}
	 
	if(count == 0 || count == 5) {
		ret = "<font style='font-size:12px;font-family:굴림;color:"+color+";background:url(/images/service/common/bull_sch01.gif) no-repeat 27px 4px;'>사전&nbsp;&nbsp;</font>";
	} else if(count == 1 || count == 6) {
		ret = "<font style='font-size:12px;font-family:굴림;color:"+color+";background:url(/images/service/common/bull_sch01.gif) no-repeat 27px 4px;'>일반&nbsp;&nbsp;</font>";//색인
	} else if(count == 2 || count == 7) {
		ret = "<font style='font-size:12px;font-family:굴림;color:"+color+";background:url(/images/service/common/bull_sch01.gif) no-repeat 27px 4px;'>인기&nbsp;&nbsp;</font>";
	} else if(count == 3 || count == 8) {
		ret = "<font style='font-size:12px;font-family:굴림;color:"+color+";background:url(/images/service/common/bull_sch01.gif) no-repeat 27px 4px;'>추천&nbsp;&nbsp;</font>";
	} else if(count == 4 || count == 9) {
		ret = "<font style='font-size:12px;font-family:굴림;color:"+color+";background:url(/images/service/common/bull_sch01.gif) no-repeat 27px 4px;'>테마&nbsp;&nbsp;</font>";
	}
	
	return ret;
}

/******************************************************
 * 검색어 자동완성 div의 사이즈를 결정한다.
 ******************************************************/
function setResizeLayer() {
	var arkMax = QLIST_COUNT;
	var sugItemHeight = itemHeight;
	if(getBrowserType()==1){
		sugItemHeight = itemHeight-2;
	}

	var hFrameObject = getObject("SuggestFrame", "");
    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("SuggestFrame", "").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("SuggestFrame","").style.height = (itemHeight*(totalKeywordCount+totalrKeywordCount) + 12 + footerHeight)+"px";
		}
	}
}

/******************************************************
 * 키워드 리스트 출력 파트의 Clearing.
 ******************************************************/
function clearQueryList() {
    var q_list = getObject("querylist", "");
    q_list.innerHTML = "";
    setSugfooter("ark_footer", "", "");
}

/******************************************************
 * ARK 기능을 비활성화 시켰을 경위의 처리.
 ******************************************************/
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);
}

/******************************************************
 * ARK 기능을 활성화 시켰을 경우의 처리.
 ******************************************************/
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,"").focus();
    setQueryValue();
	setQueryDisplayOn();
}

/******************************************************
 * Domcument 구성 요소의 객체를 얻어옴
 ******************************************************/
function getObject(objectId, nodeObject) {
	// checkW3C DOM, then MSIE 4, then NN 4.

	var doc = 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;
	}
}

/******************************************************
 * 웹브라우저가 IE일 경우 버전 확인
 ******************************************************/
function getIeBrowserVer() {
    var ieVer = 0;
    if(getBrowserType()==1) {
        ieVer = navigator.appVersion.match(/MSIE \d+.\d+/)[0].split(" ")[1];
    }

    return ieVer;
}

/******************************************************
 * ARK 도움말 팝업처리.
 ******************************************************/
function openHelp(){
	window.open("/jsp/search/ark/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 = "";
	q_listheader.innerHTML = str;
	q_listheader.style.display = 'block';
}

function scrollUp(){
	qObj.focus();
	//IE이면 스크롤을 올린다
	if(getBrowserType()==1) {
		getObject('querylist', '').doScroll('pageUp');
	}
}

/******************************************************
 * ARK Suggest 의 Footer 파트 세팅.
 ******************************************************/
function setSugfooter(obj, flag, mr) {
	var q_listfooter = getObject(obj, "");
	var str = "<div style='float:left'>";
	if(mr == "mrRear") {
		str += "&nbsp;&nbsp;&nbsp;<a href='#' onclick='scrollUp();onConvert(\"rw\");return false;' style='font-weight:bold'>끝단어 더보기</a>";
	} else if(mr == "mrFront") {
		str += "&nbsp;&nbsp;&nbsp;<a href='#' onclick='scrollUp();onConvert(\"fw\");return false;' style='font-weight:bold'>첫단어 더보기</a>";
	} else if(mr == "mrNone") {
		str += "";
	} else {
		if(flag != 'guide') str += "&nbsp;&nbsp;&nbsp;<a href='#' onclick='scrollUp();buildQueryList();return false;' style='font-weight:bold'>끝단어 더보기</a>";
	}
	str += "</div>";
	str += "<div style='float:right'>";
	str += "<a href='#' onClick='openHelp()'>도움말</a>&nbsp;|&nbsp;";
	if(flag == 'guide') {
		str += "<a href='#' onClick='showSugGuide()'>닫기</a>&nbsp;&nbsp;";
	} else if(flag == 'qlist') {
        if(useSuggestFunction) {
    		str += "<a href='javascript:setSuggestOff()'>기능끄기</a>&nbsp;&nbsp;";
        } else {
            str += "<a href='javascript:setSuggestOn()'>기능켜기</a>&nbsp;&nbsp;";
        }
    }
	str += "</div><br style='clear:both'>";
	
	q_listfooter.innerHTML = str;
	q_listfooter.style.display = 'block';
}

/******************************************************
 * ARK Suggest 의 Box 파트 세팅.
 ******************************************************/
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, "").focus();
            setQueryDisplayOff();

            if(checkLayerDisplay("guidelist")) {
                setGuideDisplayOff();
            } else {
                setNoResultDisplayOn();
            }

            noSugList();
        }
    } else {
        setQueryDisplayOff();
        setGuideDisplayOff();
    }
}

/******************************************************
 * 추천된 키워드 리스트가 없을 경우의 메세지 처리.
 ******************************************************/
function noSugList() {
	setSugHeader("ark_header", "", "");
    getObject("guidelist","").innerHTML = '';
    getObject("guidelist","").style.height = noListGuideHeight;
    getObject("SuggestFrame","").style.height = noListSugFrameHeight;
    getObject("guidelist","").style.overflow = 'hidden';
    var str;
    str = "<div id='sugGuide'>해당 단어로 시작하는 검색어가 없습니다.</div>";
    getObject("guidelist","").innerHTML = str;
    setSugfooter("ark_footer", "qlist", "");
}

/******************************************************
 * 추천된 키워드에 마우스 커서를 올렸을 경우.
 ******************************************************/
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.backgroundColor = "#FFFFFF";
    }
}

/******************************************************
 * Quick 링크 이름에 마우스 커서를 올렸을 경우.
 ******************************************************/
function onMouseOverQuickName(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;
}

/******************************************************
 * 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=/jsp/search/ark/img/sh_bar_1.gif>";
	}else if(str > 20 && str <= 40){
		str = "<img src=/jsp/search/ark/img/sh_bar_2.gif>";
	}else if(str > 40 && str <= 60){
		str = "<img src=/jsp/search/ark/img/sh_bar_3.gif>";
	}else if(str > 60 && str <= 80){
		str = "<img src=/jsp/search/ark/img/sh_bar_4.gif>";
	}else if(str > 80 && str <= 100){
		str = "<img src=/jsp/search/ark/img/sh_bar_5.gif>";
	}else{
		str = "<img src=/jsp/search/ark/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>";
	}
  return "<B>"+str+"</B>";
}

/******************************************************
 * 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;

}