﻿//////
/// ezBookSearch Search Engine
/// KD Kim(kdkim@impactline.net)
/// Released 	: 2009-06-30
/// Version 	: 0.9.0
/// Filename 	: libBookSearch
/// Description : 
/// Update 		: 
/////////////////////////////////////////////

/// XMLHTTP Object 이름 
var ezBookXmlHttp;
var wtitle;
var listCnt=100;
var isMulti;

var nCurList;
var nListLength=0;
var nHeightPerLine=14;
var sListColor="#FFFFFF";
var sListColorSelected="#efefef";
var sListOutColor="#aa0000";
var sListTextColorSelected="#ff0000";
var sListOverColor="#ff0000";


if(!isMulti) {
	isMulti=0;
}

/// Confirming cookie value
///document.write(document.cookie);

bOnHtml="	<input class=\"ezBooksrch\" name=\"text\" id=\"txtMainSearchValue\" name=\"txtMainSearchValue\" \
				onkeydown=\"return txtMainSearchValue_onkeydown();\" onkeyup=\"return ezBookShowList(this.value);\" \
				/><a href=\"javascript:goMainSearch();\"><img src=\"/images/main/btn_search.gif\" width=\"71\" \
				height=\"22\" /></a><a href=\"/Search/Search.aspx\"><img src=\"/images/main/btn_search_02.gif\" width=\"61\" height=\"22\" /></a>";

bOffHtml="	<input class=\"ezBooksrch\" name=\"text\" id=\"txtMainSearchValue\" name=\"txtMainSearchValue\" \
				onkeydown=\"return txtMainSearchValue_onkeydown();\" \
				/><div class='onoff' onmouseOver='sover(this);' onmouseout='sout(this);' onclick='suggestOn();' alt='자동완성 켜기' >켜기</div><a href=\"javascript:goMainSearch();\"><img src=\"/images/main/btn_search.gif\" width=\"71\" \
				height=\"22\" /></a><a href=\"/Search/Search.aspx\"><img src=\"/images/main/btn_search_02.gif\" width=\"61\" height=\"22\" /></a>";


window.onload=function () {
	if(getCookie('isBOff')=='yes') {
		document.getElementById('ezBS').innerHTML=bOffHtml;
	} else {
		document.getElementById('ezBS').innerHTML=bOnHtml;
	}
}


/// mouse body click event handler
/* document.body error
document.body.onclick=function() {
	document.getElementById("ezBookSResults").style.display="none";
}
*/


///
/// 검색 창에서 onkeyup event handler
/// 
function ezBookShowList(str)
{

	/// space input exception processing
	if(window.event.keyCode == 32) {
		return;
	}

	/// backspace input exception processing
	/*
	if(window.event.keyCode == 8) {
		return;
	}
	*/

	/// zero string exception processing
	if(str.length == 0) {
		document.getElementById("ezBookSResults").innerHTML="";
		document.getElementById("ezBookSResults").style.display="none";
		return;
	}

	/// Ajax Object 생성
	ezBookXmlHttp=ezBookGetXmlHttpObject();
	/// Ajax 지원 여부 확인
	if(ezBookXmlHttp == null)
	{
		alert("Your browser does not support AJAX!");
		return;
	}

	/// Ajax Sever Side Script URL
	var url="/booksearch/ezbsearch.php";
	/// 전송할 문자열 인코딩
	str=encodeURIComponent(str);
	var parameters="query="+str+"&sid="+Math.random();
	/// callback handler, 송수신 상태가 변할때 발생하는 이벤트 핸들러 정의
	ezBookXmlHttp.onreadystatechange=ezBookStateChanged;
	/// HTTP Request
	ezBookXmlHttp.open("POST",url,true);
	/// HTTP POST Method 경우 전송 헤더
	ezBookXmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded")
	/// 데이터 송신
	ezBookXmlHttp.send(parameters);

	/// Get Method
	//url=url+"?query="+str;
	//url=url+"&sid="+Math.random();
	//ezBookXmlHttp.open("GET",url,true);
	//ezBookXmlHttp.send(null);
}

///
/// AJAX를 이용한 요청 결과 착신 및 데이터 처리
///
function ezBookStateChanged()
{
	var output_html="";
	/// readyState value
	/// 0(초기화 되지않음),1(로드중),2(로드완료),3(상호작용),4(완료)
	/// 송수신 상태값(4 : 송신완료)
	if(ezBookXmlHttp.readyState==4)
	{
		if(ezBookXmlHttp.status>=200 && ezBookXmlHttp.status<300)
		{
			/// responseText 혹은 responseXML로 수신
			/// 데이터를 DOMDocument로 수신
			var xmldoc=ezBookXmlHttp.responseXML;

			/// Accessing nodes
			var w=xmldoc.getElementsByTagName("keyword");
			/// 수신 xml 문서에서 <word> 태그 추출 후 변수에 할당
			//var sword=xmldoc.getElementsByTagName('word');
			/// 검색 표제어 추출 및 할당
			//var keyword=xmldoc.getElementsByTagNjame('title');
			//var o_word=keyword[0].firstChild.nodeValue;
			var t=xmldoc.getElementsByTagName("totals");

			var output_html;
			var output1;

			nListLength=w.length;
			nCurList=-1;

			//output_html+="<div><table width=345>";
			//output_html+="<form class='suggests' id='sRes' name='suggestResults' >";
			//output_html+="<table width='445'>";
			output_html+="<span style='width:100%;'>총 "+t[0].childNodes[0].nodeValue+"개의 결과가 검색 되었습니다.</span><hr style='width:100%;'/>";

			var codeArr=new Array();
			var subjArr=new Array();
			var authorArr=new Array();

				for(i=0;i<w.length;i++) {
					var n1,n2;
					var nT=0;
					wtitle=w[i].getAttribute('title');
					codeArr[i]=w[i].getAttribute('code');
					subjArr[i]=w[i].getAttribute('subject');
					authorArr[i]=w[i].getAttribute('author');
				}

					//code=w[i].getAttribute('code');
					//subject=w[i].getAttribute('subject');
				for(x in codeArr)
				{
					//output_html+="<tr><td>";
					//output_html+="<tr><td valign='top'><span style='width:5;'>ㅇ</span></td>";
					//output_html+="<span style='width:5;'></span>";
					output_html+="<div class='t' id='rList"+x+"'";
					output_html+=" style='width:98%;' onmouseOver='mOver(this)' onmouseout='mOut(this)' onclick='ezbChange(this.value)' value='";
					output_html+=codeArr[x]+'&&'+subjArr[x]+"'>ㅇ"+subjArr[x]+" / <font color='blue'> "+authorArr[x]+"</font></div>";
					//output_html+="</td></tr>";
						
				}
				//output_html+="</table>";
				//output_html+="</form></table></div>";
				var ezLogo="<div id='srchFooter' style='width:100%;text-align:center;color:#696969;'>ezMeta BookSearch | ";
				ezLogo+="<span onmouseover='sover(this)' onmouseout='sout(this)' onclick='suggestOff();'>기능끄기</span></div>";
				//ezLogo+="<span id='isM' onmouseover='sover(this)' onmouseout='sout(this)' onclick='ezSelMulti(this.value)' value='1'>여러개 선택</span> | 도움말</div>";
//				output_html+=ezLogo;

		}

		/// 동의어 및 관련어 Ajax검색 결과 출력
		
		//getById('ezBookSResults').innerHTML=ouput_html;
		//getById('ezBookSResults').style.display="block";
		
		/// 취합 검색 결과 출력 레이어 출력
		document.getElementById("ezBookSResults").innerHTML=output_html;
		document.getElementById("ezBookSResults").style.display="block";
		document.getElementById("ezBookSResultsFooter").innerHTML=ezLogo;
		document.getElementById("ezBookSResultsFooter").style.display="block";
	
	}

	///				
	/// up&down key event handler
	///
	document.getElementById('search').onkeydown = function(e) {

		if(isMulti == 0) {

			if(!e)
				e=window.event;
			var nKeyCode=e.keyCode;

			switch (nKeyCode) { // switch start
				case 40:  // down arrow
					if(nListLength>0) {
						if(nCurList != nListLength && nCurList !=-1) {
							document.getElementById('rList'+nCurList).style.background=sListColor;
							document.getElementById('rList'+nCurList).style.color=sListOutColor;
						}
						nCurList++;
						if(nCurList>=nListLength-1)
							nCurList=nListLength-1;
						document.getElementById('rList'+nCurList).style.background=sListColorSelected;
						document.getElementById('rList'+nCurList).style.color=sListTextColorSelected;
	//					document.getElementById('rList'+nCurList).focus();
						
						document.getElementById('txtMainSearchValue').onkeyup='return false';

						var sv=new Array();
						sv=document.getElementById('rList'+nCurList).value.split("&&");
						document.getElementById('code').value=sv[0];
						document.getElementById('txtMainSearchValue').value = sv[1];
						document.getElementById('isCode').value = 1;
						
					}
											
					break;

				case 38: // up arrow
					if(nListLength>0) {
						if(nCurList!=-1) {
							document.getElementById('rList'+nCurList).style.background=sListColor;
							document.getElementById('rList'+nCurList).style.color=sListOutColor;
						}
						nCurList--;
						if(nCurList<=-1)
							nCurList=0;
						document.getElementById('rList'+nCurList).style.background=sListColorSelected;
						document.getElementById('rList'+nCurList).style.color=sListTextColorSelected;
	//					document.getElementById('rList'+nCurList).focus();

						document.getElementById('txtMainSearchValue').onkeyup='return false';

						var sv=new Array();
						sv=document.getElementById('rList'+nCurList).value.split("&&");
						document.getElementById('code').value=sv[0];
						document.getElementById('txtMainSearchValue').value = sv[1];
						document.getElementById('isCode').value = 1;
					}

					break;
							
				default:


			}// switch end

		}
	} // up& down function end

}

function sover(tt)
{
	tt.style.background="#eeeeee";
	tt.style.cursor="pointer";
	tt.style.color="#ff0000";
}

function sout(tt)
{
	tt.style.background="#FFFFFF";
	tt.style.textDecoration="none";
	tt.style.color="#696969";
}

function ezSelMulti(v) {
	isMulti=v;
	sss=document.getElementById('ezBookSearch').value;
	ezBookShowList(sss);
}

function mOver(t)
{
	document.getElementById("ezBookSResults").focus();
	t.style.color=sListOverColor;
	t.style.background="#efefef";
	t.style.textDecoration="none";
	t.style.cursor="pointer";
}

/// 검색 단어 mouse out effect 
function mOut(t)
{
	t.style.color=sListOutColor;
	t.style.background="#ffffff";
	t.style.textDecoration="none";
}

///
/// 검색창 검색어 교체
///
function ezbChange(searchStr)
{
	var sv=new Array();
	sv=searchStr.split("&&");
	document.getElementById('code').value=sv[0];
	document.getElementById('txtMainSearchValue').value = sv[1];
	document.getElementById('isCode').value = 1;
	document.getElementById("ezBookSResults").style.display="none";
}


/// suggest off
function suggestOff()
{
	setCookie('isBOff','yes',7);
	var sValue=document.getElementById("txtMainSearchValue").value;
	document.getElementById("ezBS").innerHTML=bOffHtml;
	document.getElementById("txtMainSearchValue").value=sValue;
	document.getElementById("ezBookSResults").style.display="none";
	document.getElementById("ezBookSResultsFooter").style.display="none";
}

///  suggest on
function suggestOn()
{
	delCookie('isBOff');
	var sValue=document.getElementById("txtMainSearchValue").value;
	document.getElementById("ezBS").innerHTML=bOnHtml;
	document.getElementById("txtMainSearchValue").value=sValue;
	ezBookShowList(sValue);
	document.getElementById("ezBookSResults").style.display="block";
	document.getElementById("ezBookSResultsFooter").style.display="block";

}

/// 
/// AJAX XMLHTTP Object 생성
///
function ezBookGetXmlHttpObject()
{
	var ezBookXmlHttp=null;
	try
	{
		/// Windows, Linux, Mac의 mozilla, firefox, opera, safari, Linux kongqueror
		ezBookXmlHttp=new XMLHttpRequest();
		if(ezBookXmlHttp.overrideMimeType) {
			ezBookXmlHttp.overrideMimeType('text/xml');
		}
	}
	catch(e)
	{
		/// Windows Internet Explorer 4,5,6
		try
		{
			/// newer versions of IE5+
			ezBookXmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch(e)
		{
			/// older versions of IE5+
			ezBookXmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
		}
	}
	return ezBookXmlHttp;
}


////
/// Cookie Handling
///

/// Get Cookie 
function getCookie(c_name)
{
	if (document.cookie.length>0)
	{
		c_start=document.cookie.indexOf(c_name + "=");
		if (c_start!=-1)
		{
			c_start=c_start + c_name.length+1;
			c_end=document.cookie.indexOf(";",c_start);
			if (c_end==-1) c_end=document.cookie.length;
			return unescape(document.cookie.substring(c_start,c_end));
		}
	}
	return "";
}

/// Register Cookie
function setCookie(c_name,value,expiredays)
{
	var exdate=new Date();
	exdate.setDate(exdate.getDate()+expiredays);
	document.cookie=c_name+ "=" +escape(value) + ((expiredays==null) ? "" : ";expires="+exdate.toGMTString())+";path=/";
}

/// Delete Cookie
function delCookie(c_name)
{
    var objExpireDate = new Date(); 
    objExpireDate.setDate(objExpireDate.getDate() - 1);    
    document.cookie = c_name + "=;expires=" + objExpireDate.toGMTString()+";path=/";
}

function browserVerChk(u){
	var ua = u.toLowerCase(),is=function(t){return ua.indexOf(t)>-1;},g='gecko',w='webkit',s='safari',o='opera',h=document.getElementsByTagName('html')[0],b=(!(/opera|webtv/i.test(ua))&&/msie\s(\d)/.test(ua))?('ie ie'+RegExp.$1):is('firefox/2')?g+' ff2':is('firefox/3.5')?g+' ff3 ff3_5':is('firefox/3')?g+' ff3':is('gecko/')?g:is('opera')?o+(/version\/(\d+)/.test(ua)?' '+o+RegExp.$1:(/opera(\s|\/)(\d+)/.test(ua)?' '+o+RegExp.$2:'')):is('konqueror')?'konqueror':is('chrome')?w+' chrome':is('iron')?w+' iron':is('applewebkit/')?w+' '+s+(/version\/(\d+)/.test(ua)?' '+s+RegExp.$1:''):is('mozilla/')?g:''; 

	h.className += ' '+b; 
	return b;
}

var bVer=browserVerChk(navigator.userAgent);
