document.domain = "daum.net";

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 revertQuery = "";

var qObj = getObject("dic_q","parent");
function checkChangeValue() {
    var newValue = qObj.value;

    if(newValue=="") {
        oldValue = "";
        oldUserKeyword = "";

        if(guideDisplayFlag) {
            setQueryDisplayOff();
        }
    }
    if(useSuggestFunction && newValue!=oldValue && newValue!=virtualValue) {
        setQueryValue();
    }
    setTimeout("checkChangeValue()",100);
}
function eventHandlerBody(e) {
	if("undefined"==typeof(e)){
		var evt = parent.window.event;
	}else{
		var evt = e;
	}

	var elemId;
	if(getBrowserType()==1)
		elemId = evt.srcElement.id;
	else
		elemId = evt.target.id;

	if(elemId=="dic_q") {
		setSugBox();
	} else if(elemId=="sugicn") {
		showSugGuide();
	} else {
		setQueryDisplayOff();
		setGuideDisplayOff();
	}
}
function eventHandler(e) {
    if("undefined"==typeof(e))
        evt = parent.window.event;
    else
        evt = e;

    // set loginform id to daumtop
    if(service=="daumtop" && evt.keyCode==9 && parent.document.loginform) {
        parent.servicehelper_loginCheck(evt);
        //parent.servicehelper_capture(evt);
        // parent.search_strip('K');
        return;
    }

	var elemId;
	if(getBrowserType()==1)
		elemId = evt.srcElement.id;
	else
		elemId = evt.target.id;

    if(elemId == "dic_q" && useSuggestFunction) {
        setFrameEvent(evt);
    }
}
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", "qlist", "");
    }
}
function setQueryDisplayOff() {
//    getObject("querylist","").innerHTML = "";
    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;
}
function setGuideDisplayOn() {
	guideDisplayFlag = false;
    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 = arrowUpImg;	
		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 = arrowDownImg;
	}
    getObject("hFrame","parent").style.display = "none";
}
function setNoResultDisplayOn() {
	guideDisplayFlag = false;
    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 = arrowDownImg;	
	}	
    setSugfooter("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("dic_q","parent").value != '') {
                    if(!checkLayerDisplay("querylist_border")) {										
                        setQueryDisplayOn();
                    }else {
                        setTimeout("moveFocusToSelect(40)", 10);
                    }
				}
            } else {
                //setTimeout("setQueryValue()",10);
            }
        }
    }
}
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) {
    // daumtop reserved keyword
    if(service=="daumtop" && 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();
//            curCursorPos = -1;
            qObj.value = userKeyword;

            if(service=="daumtop") {
                parent.document.search.nil_Search.value = "btn";
            } else if(service=="search") {
                parent.document.search.nil_suggest.value = "btn";
            } else if(service=="searchtop") {
                parent.document.search.nil_suggest.value = "btn";
            } else if(service=="dic") {
                
            }
//            parent.search.nil_Search.value = "btn";
            return;
        }
        else {
            curCursorPos = curCursorPos - 1;

            if((curCursorPos+QLIST_COUNT) < (totalKeywordCount+totalrKeywordCount)) {
                if(getBrowserType() == "1") getObject("querylist","").doScroll("scrollbarUp");
                if(getBrowserType() == "1") getObject("querylist","").doScroll("scrollbarUp");
            }

        }
    }else if(key==40) {
        if(curCursorPos!=(totalKeywordCount+totalrKeywordCount-1)) {
            onMouseOutKeyword(curCursorPos);
            curCursorPos = curCursorPos + 1;

            if(curCursorPos > (QLIST_COUNT-1)) {
                if(getBrowserType() == "1") getObject("querylist","").doScroll("scrollbarDown");
                if(getBrowserType() == "1") getObject("querylist","").doScroll("scrollbarDown");
            }
        }
    }
    setTimeout("setCursorPos()",10);
    if(curCursorPos > -1) {
        if(service=="daumtop") {
            parent.document.search.nil_Search.value = "sugtop";
        } else if(service=="search") {
            parent.document.search.nil_suggest.value = "sugsch";
        } else if(service=="searchtop") {
            parent.document.search.nil_suggest.value = "sugschtop";
        } else if(service=="dic") {
          
        }
    }
}
function setCursorPos(num) {
    if(!buildListComplete) {
        // 이벤트가 두번발생되는 경우
        setTimeout("setCursorPos()",10);
    }
    if(checkLayerDisplay("querylist_border")) {
        var pos = curCursorPos;
        if(num==0)
            pos = 0;

        if(getObject("f"+pos,"")) {
			if(getBrowserType() == "1"){
				qObj.value = getObject("f"+pos,"").innerText;
			}else{
				var fObj = getObject("f"+pos,"").innerHTML;
				if(fObj.indexOf('<font color="#eb550c">') > -1){
					var temp1 = fObj.replace('<font color="#eb550c">','');
					var temp2 = temp1.replace('</font>','');
					qObj.value = temp2;
				}else{
					qObj.value = getObject("f"+pos,"").innerHTML;
				}
			}


            getObject("f"+pos,"").style.backgroundColor=onMouseOverColor;
            virtualValue = qObj.value;
        }
        return;
    }
}
function clearCursorPos() {
    for(var i=0; i<(totalKeywordCount+totalrKeywordCount); i++){
		if(getObject("f"+i,"")){
			getObject("f"+i,"").style.backgroundColor=onMouseOutColor;
		}
    }
}
function loadXMLDoc(_str) {
	var str = encodeURIComponent(checkStr(_str));
	str = str.replace(/%2520/g,"%20");
    url = SUG_URL +"?q="+ str +"&mod=json&code=utf_in_out";
    if (window.XMLHttpRequest) {
        req = new XMLHttpRequest();
        try {
            req.onreadystatechange = processReqChange;
            req.open("GET", url, true);
            req.send(null);
        } catch (e) {
            //alert(e);
        }

    } else if (window.ActiveXObject) {
        req = new ActiveXObject("Microsoft.XMLHTTP");

        if (req) {
            req.onreadystatechange = processReqChange;
            req.open("GET", url, true);
            req.send();
        }

    } 
}
function checkStr(str) {
    var ch;
    var returnStr = "";
    for (var i=0;i<str.length;i++) {
        ch = str.charAt(i);
        if(ch==" "){
            returnStr += "%20";
		}else if(ch=="&"){
			returnStr += "%26";
		}else{
            returnStr +=ch;
		}
    }
    return returnStr;
}
function processReqChange() {
    // only if req shows "loaded"
    if (req.readyState == 4) {
        // only if "OK"
        if (req.status == 200) {
            clearQueryList();
            buildQueryList();
         } else {
            //alert(req.statusText);
         }
    }
}
function buildrQueryList() {
    var q_list = getObject("querylist","");
	var res = eval('(' + req.responseText + ')');
    var items = res.items;
	var ritems = res.r_items;
	var _revertQuery = res.rq;
	if(_revertQuery.length > 0) {
		revertQuery = res.rq;
	}
	var str = "";

    totalKeywordCount = items.length;
	totalrKeywordCount = ritems.length;
	if(totalKeywordCount > 3){
		totalKeywordCount = 3; 
	}
    if(totalKeywordCount+totalrKeywordCount < 1) {
        setQueryDisplayOff();
        return;
    }else {
		for (var j=0;j<totalrKeywordCount;j++) {
            highlightrVal = highlightrCheck(ritems[j]);
            str += "<div class='kwArea' id='f"+j+"' onclick='onClickKeyword("+j+")' onmouseover='onMouseOverKeyword("+j+")' onmouseout='onMouseOutKeyword("+j+")' onMouseDown='onMouseDownKeyword("+j+")'>" + highlightrVal + "</div>";
        }

		if(totalKeywordCount > 0 && totalrKeywordCount > 0) str += "<div id='dotLine'></div>";

        for (var i=totalrKeywordCount;i<(totalKeywordCount+totalrKeywordCount);i++) {
            highlightVal = highlightCheck(items[i-totalrKeywordCount]);
            str += "<div class='kwArea' id='f"+i+"' onclick='onClickKeyword("+i+")' onmouseover='onMouseOverKeyword("+i+")' onmouseout='onMouseOutKeyword("+i+")' onMouseDown='onMouseDownKeyword("+i+")'>" + highlightVal + "</div>";
        }
		// 최초 검색시에는 화면 보여주지 않는다.
        if(!isFirstBuild) {
			setQueryDisplayOn();
            //isFirstBuild = false;
        }
		isFirstBuild = false;
    }

	q_list.innerHTML = str;
	getObject("guidelist","").style.display = 'none';
	if(totalKeywordCount > 0){
		setSugfooter("footer", "qlist", "mrFront");
	}else{
		setSugfooter("footer", "qlist", "mrNone");
	}

    curCursorPos = -1;
    buildListComplete = true;

    if(service=="daumtop" && totalKeywordCount > 0) {
        // scroll 초기화
        for(var i=0;i<2;i++)
            getObject("querylist","").doScroll("pageUp");
    }
}
function buildQueryList() {
    var q_list = getObject("querylist","");
	var res = eval('(' + req.responseText + ')');
    var items = res.items;
	var ritems = res.r_items;
	var _revertQuery = res.rq;
	if(_revertQuery.length > 0) {
		revertQuery = res.rq;
	}
	var str = "";

    totalKeywordCount = items.length;
	totalrKeywordCount = ritems.length;
	if(totalrKeywordCount > 3){
		totalrKeywordCount = 3; 
	}
    if(totalKeywordCount+totalrKeywordCount < 1) {
        setQueryDisplayOff();
        return;
    }else {
        for (var i=0;i<totalKeywordCount;i++) {
            highlightVal = highlightCheck(items[i]);
            str += "<div class='kwArea' id='f"+i+"' onclick='onClickKeyword("+i+")' onmouseover='onMouseOverKeyword("+i+")' onmouseout='onMouseOutKeyword("+i+")' onMouseDown='onMouseDownKeyword("+i+")'>" + highlightVal + "</div>";
        }

		if(totalrKeywordCount > 0 && totalKeywordCount > 0) str += "<div id='dotLine'></div>";

		for (var j=totalKeywordCount;j<(totalKeywordCount+totalrKeywordCount);j++) {
            highlightrVal = highlightrCheck(ritems[j-totalKeywordCount]);
            str += "<div class='kwArea' id='f"+j+"' onclick='onClickKeyword("+j+")' onmouseover='onMouseOverKeyword("+j+")' onmouseout='onMouseOutKeyword("+j+")' onMouseDown='onMouseDownKeyword("+j+")'>" + highlightrVal + "</div>";
		}
        // 최초 검색시에는 화면 보여주지 않는다.
        if(!isFirstBuild) {
			setQueryDisplayOn();
            //isFirstBuild = false;
        }
		isFirstBuild = false;
    }
	q_list.innerHTML = str;

	getObject("guidelist","").style.display = 'none';
	if(totalrKeywordCount > 0){
		setSugfooter("footer", "qlist", "mrRear");
	}else{
		setSugfooter("footer", "qlist", "mrNone");
	}

    curCursorPos = -1;
    buildListComplete = true;

    if(service=="daumtop" && totalKeywordCount > 0) {
        // scroll 초기화
        for(var i=0;i<2;i++)
            getObject("querylist","").doScroll("pageUp");
    }
}
function setResizeLayer() {
	var DaumTopMax = QLIST_COUNT;
	var itemHeight = 21;
	var footerHeight = 41;
	var txtHeight = 17;
	
    var q_list = getObject("querylist","");
    if((totalKeywordCount+totalrKeywordCount) > (QLIST_COUNT)){		
		q_list.style.height = itemHeight * DaumTopMax + "px";
		if(totalKeywordCount > 0 && totalrKeywordCount > 0){
			getObject("hFrame","parent").style.height = itemHeight * DaumTopMax + footerHeight + txtHeight + "px";
		}else{
			getObject("hFrame","parent").style.height = itemHeight * DaumTopMax + footerHeight + "px";
		}
	}else{
		if(totalKeywordCount > 0 && totalrKeywordCount > 0){
			q_list.style.height = itemHeight*(totalKeywordCount+totalrKeywordCount) + txtHeight + "px";
			getObject("hFrame","parent").style.height = itemHeight*(totalKeywordCount+totalrKeywordCount) + footerHeight + txtHeight + "px";
		}else{
			q_list.style.height = itemHeight*(totalKeywordCount+totalrKeywordCount) + "px";
			getObject("hFrame","parent").style.height = itemHeight*(totalKeywordCount+totalrKeywordCount) + footerHeight + "px";
		}
	}
}
function clearQueryList() {
    var q_list = getObject("querylist","");
    q_list.innerHTML = "";
    setSugfooter("footer", "qlist", "");
}
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(cookieName,"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(cookieName,"on",expire_date);

    getObject("dic_q","parent").focus();
    setQueryValue();
	setQueryDisplayOn();
}
function setCookie(name, value, expire) {
    var expire_date = new Date(expire)
    document.cookie = name + "=" + escape(value) + "; path=/; expires=" + expire_date.toGMTString() + "; domain=.daum.net";
}
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 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 setSugfooter(obj, flag, mr){
	var q_listfooter = getObject(obj,"");
	var str = "<div style='float:left'>";
	if(mr == "mrRear"){
		str += "<img src='http://imgsrc.search.hanmail.net/search_all/2006_new/blit_02.gif' width='8' height='9' style='vertical-align:-1px'> <a href='#' onclick='qObj.focus();buildrQueryList();return false;' class='g_tit_11'>끝단어 더보기</a>";
	}else if(mr == "mrFront"){
		str += "<img src='http://imgsrc.search.hanmail.net/search_all/2006_new/blit_02.gif' width='8' height='9' style='vertical-align:-1px'> <a href='#' onclick='qObj.focus();buildQueryList();return false;' class='g_tit_11'>앞단어 더보기</a></div>";
	}else if(mr == "mrNone"){
		str += "";
	}else{
		if(flag != 'guide') str += "<img src='http://imgsrc.search.hanmail.net/search_all/2006_new/blit_02.gif' width='8' height='9' style='vertical-align:-1px'> <a href='#' onclick='qObj.focus();buildrQueryList();return false;' class='g_tit_11'>끝단어 더보기</a>";
	}
	str += "</div>";
	str += "<div style='float:right'>";
	str += "<a href='http://blog.daum.net/daumsearch/3099266' target='_blank'>서제스트란?</a> | ";

	if(flag == 'guide') {
		str += "<a href='#' onClick='showSugGuide()'>닫기</a>";
	} else if(flag == 'qlist') {
        if(useSuggestFunction)
    		str += "<a href='javascript:setSuggestOff()'>기능끄기</a>";
        else
            str += "<a href='javascript:setSuggestOn()'>기능켜기</a>";
    }
	str += "</div><br style='clear:both'>";
	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{
            qObj.focus();
            setQueryDisplayOff();

            if(checkLayerDisplay("guidelist")) {
                setGuideDisplayOff();
            } else {
                setNoResultDisplayOn();
            }

            noSugList();
        }
    }else {
        setQueryDisplayOff();
        setGuideDisplayOff();
    }
}
function noSugList() {
    getObject("guidelist","").innerHTML = '';
    getObject("guidelist","").style.height = '28px';
    getObject("hFrame","parent").style.height = '55px';
    getObject("guidelist","").style.overflow = 'hidden';
    var str;
    str = '<div id="sugGuide">';
    str += '해당 단어로 시작하는 검색어가 없습니다.';
    str += '</div>'		
    getObject("guidelist","").innerHTML = str;
    setSugfooter("footer", "qlist", "mrNone");
}
function onMouseOverKeyword(curSorNum){
    clearCursorPos();
    curCursorPos = curSorNum;
//	getObject("f"+curSorNum,"").style.cursor = 'arrow';
	getObject("f"+curSorNum,"").style.backgroundColor = onMouseOverColor;
}
function onMouseOutKeyword(curSorNum){
    curCursorPos = curSorNum;
    if(getObject("f"+curCursorPos,"")) {
//	    getObject("f"+curCursorPos,"").style.cursor = 'arrow';
    	getObject("f"+curCursorPos,"").style.backgroundColor = onMouseOutColor;
    }
}
function setFocusEnd (obj) {
    if (obj.createTextRange) {
        var fieldRange = obj.createTextRange();
        fieldRange.moveStart('character', obj.value.length);
        fieldRange.collapse();
        fieldRange.select();
    }
}
function highlightCheck(str) {
	var rtStr = "";
	var _str = str.replace(/ /g, "");
	var _userKeyword = revertQuery.replace(/ /g, "");
	_userKeyword = _userKeyword.toLowerCase();
	if(_userKeyword == _str.substring(0, _userKeyword.length)){
		rtStr = "<font color='#eb550c'>";
		for (var i=0,j=0; j<revertQuery.length; i++) {
			if (str.substring(i, i+1)!=" ") j++;
			rtStr += str.substring(i, i+1);
		}
		rtStr += "</font>" + str.substring(i, str.length);
	}else{
		rtStr += str;
	}
	return rtStr;
}
function highlightrCheck(str) {
	var rtStr = "";
	var _str = str.replace(/ /g, "");
	var _userKeyword = revertQuery.replace(/ /g, "");
	_userKeyword = _userKeyword.toLowerCase();
	if (_userKeyword == _str.substring(_str.length - _userKeyword.length)) {
		for (var i=0,j=0; j<_str.length - _userKeyword.length; i++) {
			if (str.substring(i, i+1)!=" ") j++;
			rtStr += str.substring(i, i+1);
		}
		rtStr += "<font color='#eb550c'>";
		
		for (var k=i,l=0; l<_userKeyword.length; k++) {
			if (str.substring(k, k+1)!=" ") l++;
			rtStr += str.substring(k, k+1);
		}
		rtStr += "</font>";
	}else{
		rtStr += str;
	}
	return rtStr;
}