﻿/* plaync Suggest 2.0
 * author : yeongun@ncsoft.net
 * last update: 2009.07.27 by Leejunho
 * (c) 2008 ncsoft UIDevelopment Team */
function suggestKeyword(data){if(ncSuggestCurrentObject===false)return;if(data.front.length==0&&data.back.length==0){ncSuggestCurrentObject.hideSuggest();return;}
ncSuggestDataList.keyword=data.keyword.replace('%20','');ncSuggestDataList.result=data.result;var orgKeyword=data.orgkeyword.replace('%20','','g');if(orgKeyword===ncSuggestDataList.lastKeyword.replace('%20','','g')){for(var i=0;i<data.front.length;i+=1){ncSuggestDataList.type1[i]=data.front[i][0];}
for(var i=0;i<data.back.length;i+=1){ncSuggestDataList.type2[i]=data.back[i][0];}
ncSuggestCurrentObject.putSuggestWords();}else return;}
var ncSuggestDataList={keyword:0,type1:[],type2:[],lastKeyword:0,result:0,value:0};var ncSuggestCurrentObject=false;var ncSuggest=Class.create({initialize:function(base,options){this.base=base;this.options=options;this.start='on';},load:function(){if(this.options.base)ncSuggestInput.base=$(this.base);this.construct();},construct:function(){var wrapper=this.base+'_wrapper';if(!$(wrapper))return;if($(wrapper).innerHTML==''){var templeteHTML='\
   <div id="'+this.base+'_list" class="suggest_list"></div>\n\
   <div id="'+this.base+'_guide" class="suggest_guide"><div class="off" style="display:none;">검색어 자동완성 기능을 사용하지 않고 계십니다.</div><div class="on" style="display:none;">검색어 자동완성 기능을 사용하고 계십니다.</div><div class="no_result" style="display:none;">검색 결과가 없습니다.</div></div>\n\
   <div class="footer"><p><strong>검색어 자동완성</strong><span id="'+this.base+'_off" class="suggest_off">끄기</span><span id="'+this.base+'_on" class="suggest_on">켜기</span></p></div>';$(wrapper).update(templeteHTML);}
this.control();},control:function(){var SuggestUtils=this.utilities;var options=this.options;var base=this.base;var elements=SuggestUtils.findElement(base);var dbValue='';var setValue;var thisElement=$(base);var currentScrollTop=0;var deliv=this;function goSearchResult(e){var target=document.getElementsByName(options.form)[0].getAttribute('action');var eventElement;var query;if(e&&e.type=='click'&&Event.element(e).tagName.toUpperCase()!='INPUT'){eventElement=Event.element(e);if(eventElement.tagName.toUpperCase()=='LI'){query=eventElement.innerHTML.stripTags();hideSuggest();}
else if(eventElement.tagName.toUpperCase()=='UL'||eventElement.tagName.toUpperCase()=='DIV')return;else{if(eventElement.ancestors()[0].tagName.toUpperCase()=='LI'){query=eventElement.ancestors()[0].innerHTML.stripTags();}
else if(eventElement.ancestors()[1].tagName.toUpperCase()=='LI'){query=eventElement.ancestors()[1].innerHTML.stripTags();}
else return;}}
else query=$F(thisElement);thisElement.value=query;if(options.type&&options.type=='js')eval(options.jsfunction+'();');else document.getElementsByName(options.form)[0].submit();}
function suggestRequest(el,m){if(SuggestUtils.suggestCheck(base)){hideSuggest();return;}
var element=el;elements.guide.hide();setTimeout(function(){if($F(element).length<=0){hideSuggest();return;}
ncSuggestDataList.str=$F(element);var str=$F(element).replace(/ /g,'%20');var params=(deliv.options.params)?deliv.options.params:'';var requestUrl=options.url+'?site='+options.site+'&collection='+options.collection+'&display='+options.display+'&query='+encodeURI($F(element).replace(/ /g,''))+params;ncSuggestDataList.lastKeyword=encodeURIComponent($F(element));function getItemInfo(){ncSuggestDataList.type1=[];ncSuggestDataList.type2=[];url=requestUrl;var script=document.createElement('script');script.setAttribute('type','text/javascript');script.setAttribute('src',url);$$('head')[0].appendChild(script);ncSuggestCurrentObject=deliv;}
getItemInfo();},10);}
this.putSuggestWords=function(){var dataHtml={front:[],back:[]};var listHeight,displayCount,displayCount2,finalHtml;displayCount=(options.displayOverCount)?ncSuggestDataList.type1.length:options.showCount;displayCount=(displayCount>ncSuggestDataList.type1.length)?ncSuggestDataList.type1.length:displayCount;displayCount2=(options.displayOverCount)?ncSuggestDataList.type2.length:options.showCount2;displayCount2=(displayCount2>ncSuggestDataList.type2.length)?ncSuggestDataList.type2.length:displayCount2;ncSuggestDataList.keyword=decodeURIComponent(ncSuggestDataList.keyword);ncSuggestDataList.keyword=ncSuggestDataList.keyword.toUpperCase();for(i=0;i<displayCount;i++){ncSuggestDataList.value=ncSuggestDataList.type1[i];finalHtml=suggestion(ncSuggestDataList.keyword,ncSuggestDataList.value,2);finalHtml=(finalHtml!=false)?finalHtml:ncSuggestDataList.value;dataHtml.front[i]='<li title=\''+ncSuggestDataList.type1[i]+' \'>'+finalHtml+'</li>';}
for(j=0;j<displayCount2;j++){ncSuggestDataList.value=ncSuggestDataList.type2[j];finalHtml=suggestion(ncSuggestDataList.keyword,ncSuggestDataList.value,1);finalHtml=(finalHtml!=false)?finalHtml:ncSuggestDataList.value;dataHtml.back[j]='<li title=\''+ncSuggestDataList.type2[j]+' \'>'+finalHtml+'</li>';if(j===0)dataHtml.back[j]=dataHtml.back[j].replace('<li ','<li class=\"startback\" ');}
elements.list.update('<ul>'+dataHtml.front.join('')+dataHtml.back.join('')+'</ul>');if(elements.list.select('li')[0].hasClassName('startback'))elements.list.select('li')[0].removeClassName('startback');listHeight=options.itemHeight*(displayCount+displayCount2);listHeight=(listHeight<options.maxHeight)?listHeight:options.maxHeight;elements.list.setStyle({height:(listHeight)+'px'});showSuggest();}
function suggestion(keyword,value,type){var keyword_str;var compare_key='';var compare_status=false;if(type==0||type==2){if(type==0&&value.charAt(i)!=keyword.charAt(0))return false;keyword_str=0;for(var i=0;i<value.length;i++){if(value.charAt(i).toUpperCase()==keyword.charAt(keyword_str).toUpperCase()){compare_key+=value.charAt(i);keyword_str++;compare_status=true;}
else if(value.charAt(i)==' '&&compare_status==true){compare_key+=value.charAt(i);}
else compare_status=false;}
return value.replace(compare_key,'<span style=\"color:'+options.color+';\">'+compare_key+'</span>');}else if(type==1&&value.charAt(value.length-1)==keyword.charAt(keyword.length-1)){keyword_str=keyword.length-1;for(var i=value.length-1;i>=0;i--){if(keyword_str<0)break;if(value.charAt(i)==keyword.charAt(keyword_str)){compare_key=value.charAt(i)+compare_key;keyword_str--;compare_status=true;}
else if(value.charAt(i)==' '&&compare_status==true){compare_key=value.charAt(i)+compare_key;}
else compare_status=false;}
return value.substr(0,i+1)+'<span style=\"color:'+options.color+';\">'+compare_key+'</span>';}
else return false;}
function getSuggestList(e){if(e.type&&e.type.toLowerCase()=='focus'&&$F(thisElement).length>0)return;if(e.type&&e.type.toLowerCase()=='click'){if($F(thisElement).length<=0){hideSuggest();}
else{if(elements.list.select('li').length>0){if(elements.wrapper.getStyle('display')!='none'){if(elements.guide.getStyle('display')!='none'){elements.guide.hide();elements.list.setStyle({display:'block'});}
else elements.wrapper.hide();}
else elements.wrapper.setStyle({display:'block'});}
else{if(elements.guide.getStyle('display')!='none'){if(elements.guide.select('div.no_result')[0].getStyle('display')!='none'){hideSuggest();}
else{elements.guide.hide();suggestRequest(thisElement,1);}}
else suggestRequest(thisElement,1);}}
return;}
var key=e.keyCode;if(key&&key!=229){var el;clearTimeout(setValue);if(key==8){if($F(thisElement).length>0)suggestRequest(thisElement);else hideSuggest();return;}
else if(key==38||key==40||key==9){if(key==9&&$F(thisElement).length>0){setTimeout(function(){thisElement.focus()},10);}
if(elements.list.select('li.'+options.mouseover_class).length>0){el=elements.list.select('li.'+options.mouseover_class)[0];elements.list.select('li.'+options.mouseover_class)[0].removeClassName(options.mouseover_class);}
else if(elements.list.select('li.'+options.keymove_class).length>0){el=elements.list.select('li.'+options.keymove_class)[0];elements.list.select('li.'+options.keymove_class)[0].removeClassName(options.keymove_class);}
else{if(key==40||key==9){if(elements.list.select('li').length<=0){if($F(thisElement).length>0)suggestRequest(thisElement,1);else hideSuggest();}
else{elements.list.select('li')[0].addClassName(options.keymove_class);putSuggestKeyword(elements.list.select('li')[0]);}
return;}
else hideSuggest();return;}
if(key==38){if(Object.isUndefined(el))hideSuggest();if(Object.isUndefined(el.previous('li'))){hideSuggest();return;}
else el=el.previous('li');if(elements.list.scrollTop>el.previousSiblings().length*options.itemHeight)
currentScrollTop=el.previousSiblings().length*options.itemHeight;}
else{if(Object.isUndefined(el.next('li'))){if(key==9){setTimeout(function(){elements.submit.focus();},30);return;}
else{el=el;}}
else el=el.next('li');if(!(currentScrollTop+options.itemHeight<=el.previousSiblings().length*options.itemHeight&&(currentScrollTop+options.itemHeight)+((options.showCount-1)*options.itemHeight)>el.previousSiblings().length*options.itemHeight)){currentScrollTop=currentScrollTop+options.itemHeight;}}
elements.list.scrollTop=currentScrollTop;el.addClassName(options.keymove_class);putSuggestKeyword(el);return;}
else if(key==27){hideSuggest();return;}
else if((key>=48&&key<=57)||(key>=96&&key<=105)||(key>=65&&key<=90)){getSuggestControl();return;}
else if((key>=106&&key<=111)||(key>=186&&key<=192)||(key>=219&&key<=222)){}
else if(key==13){goSearchResult();hideSuggest();return;}
else return;suggestRequest(thisElement);}
else{if(Prototype.Browser.Gecko){if(thisElement.value!=dbValue){getSuggestControl();dbValue=thisElement.value;}
else{clearTimeout(setValue);}
setValue=setTimeout(getSuggestList,10);}else{suggestRequest(thisElement);}}}
function putSuggestKeyword(targetObj){thisElement.value=targetObj.innerHTML.stripTags();}
function getSuggestControl(){suggestRequest(thisElement);}
function lineFocus(e){var el=Event.element(e);if(el.tagName.toUpperCase()!='LI'){for(i=0;i<el.ancestors().length;i++){if(el.ancestors()[i].tagName.toUpperCase()=='LI'){el=el.ancestors()[i];continue;}}}
if(!Object.isUndefined(elements.list.select('li.'+options.mouseover_class)[0]))
elements.list.select('li.'+options.mouseover_class)[0].removeClassName(options.mouseover_class);if(!Object.isUndefined(elements.list.select('li.'+options.keymove_class)[0]))
elements.list.select('li.'+options.keymove_class)[0].removeClassName(options.keymove_class);el.addClassName(options.mouseover_class);el=null;}
function showSuggest(){elements.list.setStyle({display:'block'});elements.wrapper.setStyle({display:'block'});if(elements.list.getHeight()>=options.maxHeight)elements.list.setStyle({height:options.maxHeight+'px'});elements.list.scrollTop=0;currentScrollTop=0;}
function hideSuggest(){clearTimeout(setValue);[elements.wrapper,elements.list,elements.guide].each(function(o){o.hide();});elements.list.update('');elements.toggle.src=elements.toggle.src.replace('_on.','_off.');}
this.hideSuggest=hideSuggest;function hideSuggestLayer(e){var element=Event.element(e);if(element.id==elements.toggle.id)return;if(elements.wrapper.getStyle('display')=='none')return;var status=true;if(element.id==base)status=false;else{for(i=0;i<element.ancestors().length;i++){if(element.ancestors()[i].id==base+'_wrapper')status=false;}}
if(status)hideSuggest();}
function toggleSuggest(){[elements.guide.select('div.on')[0],elements.guide.select('div.no_result')[0],elements.guide.select('div.off')[0]].each(function(o){o.hide();});elements.guide.setStyle({display:'block'});if(SuggestUtils.suggestCheck(base)){elements.guide.select('div.off')[0].setStyle({display:'block'});elements.off.hide();}
else{elements.guide.select('div.on')[0].setStyle({display:'block'});elements.off.setStyle({display:''});}
if(elements.wrapper.getStyle('display')=='none'){elements.list.hide();elements.wrapper.setStyle({display:'block'});elements.toggle.src=elements.toggle.src.replace('_off.','_on.');}
else{if(elements.list.getStyle('display')!='none'){elements.list.hide();elements.wrapper.setStyle({display:'block'});elements.toggle.src=elements.toggle.src.replace('_off.','_on.');}
else{hideSuggest();}}}
var keyEvent='keydown';Event.observe(document,'keydown',ncSuggestInput.input);Event.observe(document,'click',hideSuggestLayer);Event.observe(elements.on,'click',SuggestUtils.suggestOn);Event.observe(elements.off,'click',SuggestUtils.suggestOff);Event.observe(elements.list,'mouseover',lineFocus);Event.observe(elements.list,'click',goSearchResult);Event.observe(elements.toggle,'click',toggleSuggest);Event.observe(elements.submit,'click',goSearchResult);[keyEvent,'focus','click'].each(function(o){Event.observe(elements.base,o,getSuggestList);});if(SuggestUtils.suggestCheck(base)){elements.on.setStyle({display:''});elements.off.hide();}
else{elements.on.hide();elements.off.setStyle({display:''});}},utilities:{findElement:function(element){if(!$(element))return false;return{base:$(element),wrapper:$(element+'_wrapper'),list:$(element+'_list'),guide:$(element+'_guide'),toggle:$(element+'_toggle'),off:$(element+'_off'),on:$(element+'_on'),submit:$(element+'_submit')};},suggestOff:function(e){var element=Event.element(e);var cookieName=element.id.split('_')[0];document.cookie=encodeURIComponent(cookieName)+'=off;max-age='+(60*60*24*365)+';domain=.plaync.co.kr;path=/';$(cookieName+'_wrapper').hide();$(cookieName+'_list').update('');$(cookieName+'_on').setStyle({display:''});$(cookieName+'_off').hide();$(cookieName+'_toggle').src=$(cookieName+'_toggle').src.replace('_on.','_off.');},suggestOn:function(e){var element=Event.element(e);var cookieName=element.id.split('_')[0];document.cookie=encodeURIComponent(cookieName)+'=on;max-age='+(60*60*24*365)+';domain=.plaync.co.kr;path=/';$(cookieName+'_off').setStyle({display:''});$(cookieName+'_on').hide();$(cookieName+'_wrapper').hide();$(cookieName+'_toggle').src=$(cookieName+'_toggle').src.replace('_on.','_off.');},suggestCheck:function(cookie){var result;if(document.cookie.indexOf(cookie)>=0){result=document.cookie.substr(document.cookie.indexOf(cookie));result=result.split(';')[0];result=result.split('=')[1];result=(result=='on')?false:true;}
else result=false;return result;}}});var ncSuggestInput={base:0,input:function(e){var e=e?e:window.event;element=Event.element(e);var keycode=e.keyCode;var obj;var exceptionKey=[8,9,13,16,17,18,32,36,35,34,33,20,37,39,38,40,116];if(e.ctrlKey)
return;else if(ncSuggestInput.checkException(exceptionKey,keycode))return;else if(element.tagName.toUpperCase()=='INPUT'||element.tagName.toUpperCase()=='TEXTAREA'||element.tagName.toUpperCase()=='SELECT')return;if(ncSuggestInput.base){ncSuggestInput.base.style.imeMode='inactive';ncSuggestInput.base.value='';ncSuggestInput.base.focus();}},checkException:function(exKeys,key){for(i=0;i<exKeys.length;i++){if(exKeys[i]==key)return true;}
return false;}};