// Quick Dic Search source code
// Namespace : Net.Lnisoft.Web.JScript.Client.Dic.DicSearch
// Author : kang byung joon
// IE only

var NLWJCDD_m_strText="";
var NLWJCDD_m_nTimeID=0;
var NLWJCDD_m_bProcQM=false;
var NLWJCDD_m_bPreM=false;
var NLWJCDD_m_bPreMove=false;
var NLWJCDD_m_strCookieName="QuickDicSearchState";

function /*public class*/ NLWJCC_Cookie()
{
	// Each cookie is stored in a name=value pair
	// Properties
	// protected
	this.m_Name = new Array();
	this.m_Value = new Array();
	this.m_Path = "/";
	this.m_Domain = "";
	this.m_Expires = "";
	this.m_Count = 0;

	// Method
	// public
	this.AddInfo = function /*public bool*/ NLWJCC_AddInfo(/*string*/strName,/*string*/Value)
	{
		if(strName=="" || Value=="")
			return false;
		if(this.FindNameIndex(strName)<0)
		{
			this.m_Name[this.m_Count] = strName;
			this.m_Value[this.m_Count] = escape(Value);
			this.m_Count++;
			return true;
		}
		return false;
	}
	this.FindName = function /*public string*/ NLWJCC_FindName(/*string*/strName)
	{
		var nIndex = this.FindNameIndex(strName);
		if(nIndex<0)
			return "";
		return this.GetValue(nIndex);
	}
	this.SetExpireDate = function /*public void*/ NLWJCC_SetExpireDate(/*int*/nDays)
	{
		var ToDay = new Date();
		ToDay.setDate(ToDay.getDate() + nDays);
		this.m_Expires = ToDay.toGMTString();
		delete ToDay;
	}
	this.SetExpireDateEx = function /*public void*/ NLWJCC_SetExpireDateEx(/*object*/objDate)
	{
		var ToDay = new Date();
		if(ToDay > objDate)
			this.m_Expires = ToDay.toGMTString();
		else
			this.m_Expires = objDate.toGMTString();
		delete ToDay;
	}
	this.SetDomain = function /*public void*/ NLWJCC_SetDomain(/*string*/strDomain)
	{
		this.m_Domain=strDomain;
	}
	this.SetPath = function /*public void*/ NLWJCC_SetPath(/*string*/strPath)
	{
		this.m_Path = strPath;
	}
	this.Read = function /*public void*/ NLWJCC_Read()
	{
		var strItem="", ItemName="", ItemValue="", nSPos=0;
		var strBuffer = document.cookie + ";";
		var nStartPos=0, nCurrentPos=0;
		while((nCurrentPos=strBuffer.indexOf(";",nStartPos))>0)
		{
			strItem=strBuffer.substring(nStartPos,nCurrentPos);
			nSPos = strItem.indexOf("=",-1);
			if(nSPos>0)
			{
				ItemName = strItem.substring(0,nSPos);
				ItemValue = strItem.substring(nSPos+1,strItem.length);
				this.AddInfo(ItemName,ItemValue);
			}
			nStartPos = nCurrentPos + 1;
			nStartPos = strBuffer.indexOf(" ",nStartPos) + 1;
			if(nStartPos==0)
				break;
		}
	}
	this.Write = function /*public void*/ NLWJCC_Write()
	{
		if(this.m_Count>0 && this.m_Expires=="")
			this.SetExpireDate(1); //default 1day
		for(var nIndex=0; nIndex<this.m_Count; nIndex++)
		{
			var strBuffer = this.m_Name[nIndex] + "=" + this.m_Value[nIndex] + ";";
			strBuffer += " expires=" + this.m_Expires + ";"; // requisite
			if(this.m_Domain!="")
				strBuffer += " domain=" + this.m_Domain + ";";
			strBuffer += " path=" + this.m_Path + ";"; // requisite
			document.cookie = strBuffer;
		}
	}
	this.Close = function /*public void*/ NLWJCC_Close()
	{
		delete this.m_Name;
		delete this.m_Value;
		return true;
	}

	this.FindNameIndex = function /*protected int*/ NLWJCC_FindNameIndex(/*string*/strName)
	{
		var nRIndex = -1; // NoFind
		for(var nIndex=0; nIndex<this.m_Count; nIndex++)
		{
			if(this.m_Name[nIndex] == strName)
			{
				nRIndex = nIndex; // Find
				break;
			}
		}
		return nRIndex;
	}
	this.GetName = function /*protected string*/ NLWJCC_GetName(/*int*/nIndex)
	{
		if(nIndex<0 || nIndex>this.m_Count)
			return "";
		return this.m_Name[nIndex];
	}
	this.GetValue = function /*protected string*/ NLWJCC_GetValue(/*int*/nIndex)
	{
		if(nIndex<0 || nIndex>this.m_Count)
			return "";
		return unescape(this.m_Value[nIndex]);
	}
}

function NLWJCDD_QuickDicSearchPreMove()
{
	var objSrcEvent = window.event.srcElement;
	if(objSrcEvent.tagName=="INPUT" || objSrcEvent.tagName=="A" || objSrcEvent.tagName=="TEXTAREA" || objSrcEvent.tagName=="IMG"
	|| objSrcEvent.tagName=="SELECT" || objSrcEvent.tagName=="OPTION")
	{
		NLWJCDD_m_bPreMove=true;
		return;
	}
}

function NLWJCDD_QuickDicSearchPreHit()
{
	if(document.selection!=null)
	{
		var objSR = document.selection.createRange();
		if(objSR!=null)
		{
			if(objSR.text.length>0)
				document.selection.empty();
		}
	}
	NLWJCDD_m_bPreMove=false;
	NLWJCDD_m_bPreM=false;
	var objSrcEvent = window.event.srcElement;
	if(objSrcEvent.tagName=="INPUT" || objSrcEvent.tagName=="A" || objSrcEvent.tagName=="TEXTAREA" || objSrcEvent.tagName=="IMG"
	|| objSrcEvent.tagName=="SELECT" || objSrcEvent.tagName=="OPTION")
	{
		NLWJCDD_m_bPreM=true;
		return;
	}
}

function NLWJCDD_QuickDicSearchHit()
{
	if(event.button!=1 || NLWJCDD_m_bProcQM || NLWJCDD_m_bPreM || NLWJCDD_m_bPreMove)
		return;

	var strValue="";
	// Get Cookie
	var objCookie = new NLWJCC_Cookie();
	objCookie.Read();
	strValue=objCookie.FindName(NLWJCDD_m_strCookieName);
	objCookie.Close();
	delete objCookie;
	//

	if(strValue=="off")
		return;

	// Menu Click
	var objSrcEvent = window.event.srcElement;
	if(objSrcEvent.tagName=="INPUT" || objSrcEvent.tagName=="A" || objSrcEvent.tagName=="TEXTAREA" || objSrcEvent.tagName=="IMG"
	|| objSrcEvent.tagName=="SELECT" || objSrcEvent.tagName=="OPTION")
		return;
	var oSource = objSrcEvent.id;
	if(oSource!="")
	{
		if(oSource.substring(0,8)=="QDSQMenu")
		{
			NLWJCDD_hiddenQM();
			return;
		}
	}

	NLWJCDD_viewQM();
}

function NLWJCDD_SetQuickDicSearchState(strState/*on,off*/)
{
	var objCookie = new NLWJCC_Cookie();
	objCookie.AddInfo(NLWJCDD_m_strCookieName,strState);
	objCookie.SetExpireDate(10);
	objCookie.Write();
	objCookie.Close();
	delete objCookie;
}

function NLWJCDD_viewQM()
{
	var objQM = document.all.QDSQuickDicMenu;
	var strText ="";
	if(document.selection!=null)
	{
		var objCR = document.selection.createRange();
		if(objCR!=null)
			strText = objCR.text;
	}
	if(strText == null || strText == "")
	{
		NLWJCDD_m_strText="";
		objQM.style.visibility = "hidden";
		return;
	}
	strText = strText.replace(/(^\s*)|(\s*$)/g, "");

	var bWhiteChar=false;
	if(strText.length>0)
	{
		var strTemp="";
		var strExc="\r\n\t ";
		for(var nIndex=0; nIndex<strText.length; nIndex++)
		{
			var strSpell = strText.substr(nIndex,1);
			var nPos = strExc.indexOf(strSpell);
			if(nPos>=0)
			{
				bWhiteChar=true;
				break;
			}
		}
	}
	if(bWhiteChar)
		return;

	NLWJCDD_m_bProcQM=true;
	clearTimeout(NLWJCDD_m_nTimeID);

	var nCX = event.clientX;
	var nCY = event.clientY;

	var nLeft = document.body.scrollLeft;
	var nTop = document.body.scrollTop;
	var nWidth = document.body.clientWidth;
	var nHeight = document.body.clientHeight;

	var nImgX = 73;
	var nImgY = 25;

	var nQMLeft = nCX;
	var nQMTop = nCY;

	if(nQMLeft+nImgX >= nWidth)
		nQMLeft = nWidth - nImgX - 10;
	else
		nQMLeft += 10;

	if(nQMTop <= nImgY)
		nQMTop = nImgY;
	else if(nQMTop+nImgY >= nHeight)
		nQMTop = nHeight - nImgY - 10;
	else
		nQMTop += 10;

	objQM.style.left = nQMLeft + nLeft;
	objQM.style.top = nQMTop + nTop;

	objQM.innerHTML=NLWJCDD_GetQuickDicMenu(strText);

	objQM.style.visibility = "visible";
	NLWJCDD_m_strText=strText;

	NLWJCDD_m_nTimeID=setTimeout("NLWJCDD_hiddenQM();",2000);
	NLWJCDD_m_bProcQM=false;
}

function NLWJCDD_hiddenQM()
{
	clearTimeout(NLWJCDD_m_nTimeID);
	NLWJCDD_m_strText="";
	var objQM = document.all.QDSQuickDicMenu;
	objQM.style.visibility = "hidden";
}

function NLWJCDD_GetQuickDicMenu(strAlt)
{
	var strQuickDicMenu="";
	if(strAlt.length>0)
	{
		var strTemp="";
		var strExc="(){}[]<>.,!?_'\\\"\r\n\t ";
		for(var nIndex=0; nIndex<strAlt.length; nIndex++)
		{
			var strSpell = strAlt.substr(nIndex,1);
			var nPos = strExc.indexOf(strSpell);
			if(nPos<0)
				strTemp += strSpell;
			else
				break;
		}
		strAlt = strTemp;

		//strAlt = NLWJCDD_GetString(strAlt,30);
		strAlt = NLWJCDD_Replace(strAlt);
		strQuickDicMenu = "<a id=\"QDSQMenuA1\" href=\"javascript:;\" onclick=\"NLWJCDD_OnQMProc('" + strAlt + "');NLWJCDD_hiddenQM();\" onfocus=\"this.blur()\">";
		strQuickDicMenu += "<img id=\"QDSQMenuI1\" alt=\"'" + strAlt + "'단어 사전 검색하기\" src=\"http://www.ebslang.co.kr/ebs/images/bdz/common/pop_menu1.gif\" width=\"73\" height=\"18\" border=\"0\"></a>";

	}

	return strQuickDicMenu;
}

function NLWJCDD_OnQMProc(strAlt)
{
		if(strAlt.length>0)
	{
		var popupWinType="toolbar=no,location=no,directories=no,status=no,menubar=no,resizable=no,scrollbars=no,width=520,height=400";
		var objDicWordSpellView = window.open("http://www.ebslang.co.kr/ebs/jsp/bdz/bdd/dicview.jsp?sp=" + encodeURIComponent(strAlt), "DicWordSpellView", popupWinType);
		objDicWordSpellView.focus();
	}
}

function NLWJCDD_OnQuickMenuState(strState)

{

	NLWJCDD_SetQuickDicSearchState(strState);

	var strHTML="<a href=\"javascript:NLWJCDD_OnQuickMenuState('off');\" onfocus=\"this.blur()\"><img src=\"/ebs/images/bdz/common/pop_on.gif\" border=\"0\" width=\"48\" height=\"11\" alt=\"사전검색\"></a>";

	if(strState=="off")

		strHTML="<a href=\"javascript:NLWJCDD_OnQuickMenuState('on');\" onfocus=\"this.blur()\"><img src=\"/ebs/images/bdz/common/pop_off.gif\" border=\"0\" width=\"48\" height=\"11\" alt=\"사전검색\"></a>"

	document.all.QDSQuickMenuButton.innerHTML=strHTML;

	NLWJCDD_hiddenQM();

}

document.onmouseup=NLWJCDD_QuickDicSearchHit;
//document.onmousedown=NLWJCDD_QuickDicSearchPreHit;
//document.onmousemove=NLWJCDD_QuickDicSearchPreMove;

var NLWJCDD_m_strQuickDicMenu = "<div id=\"QDSQuickDicMenu\" style=\"position:absolute; visibility:hidden; z-index:1; top: 370px; height: 20px;\"></div>";
document.write(NLWJCDD_m_strQuickDicMenu);

// Get Cookie
var objCookie = new NLWJCC_Cookie();
objCookie.Read();
strValue=objCookie.FindName(NLWJCDD_m_strCookieName);
objCookie.Close();
delete objCookie;

var NLWJCDD_m_strQuickDicMenuPanel="";
if(strValue=="off")
	NLWJCDD_m_strQuickDicMenuPanel = "<div id=\"QDSQuickMenuButton\" style=\"position:absolute; z-index:1; left:310px; top:26px;\"><a href=\"javascript:NLWJCDD_OnQuickMenuState('on');\" onfocus=\"this.blur()\"><img src=\"http://www.ebslang.co.kr/ebs/images/bdz/common/pop_off.gif\" border=\"0\" width=\"48\" height=\"11\"></a></div>";
else
	NLWJCDD_m_strQuickDicMenuPanel = "<div id=\"QDSQuickMenuButton\" style=\"position:absolute; z-index:1; left:310px; top:26px;\"><a href=\"javascript:NLWJCDD_OnQuickMenuState('off');\" onfocus=\"this.blur()\"><img src=\"http://www.ebslang.co.kr/ebs/images/bdz/common/pop_on.gif\" border=\"0\" width=\"48\" height=\"11\"></a></div>";
document.write(NLWJCDD_m_strQuickDicMenuPanel);

function NLWJCDD_Replace(nodeString)
{
	// 조사 처리
	var Auxiliary = new Array(
							"이라기보다는","까지만해도","라기보다는","으로부터의",

							"내에서의","대로라면","든지간에","라기보다","로하여금","에서만이","에서부터","에서조차","에서처럼","으로서는",
							"으로서의","으로부터","이라든지","이상으로","이야말로","하에서와",

							"까지가","께서는","께서도","까지를","까지에","까지의","께부터","는커녕","동안에","든간에",
							"때문에","라거나","라든가","로부터","로서는","를망정","만큼은","보다는","보다도","사이의",
							"속에서","속으로","야말로","에게로","에게서","에다가","에라야","에로의","에서는","에서만",
							"에서야","에서와","여만에","와함께","으로서","으로선","으로써","으로의","은커녕","이라야",
							"을망정","이나마","이내에","이라니","이라도","이로되","이외의","인지라","한테로","한테서",
							"조차도","치고는","하에서",

							"적으로","하도록",

							"들은",

							"간에","간의","같은","같이","거나","까지","께서","나마","내내","내에",
							"내지","대로","더러","동안","든지","따라","라구","라는","라니","라도",
							"라서","로서","로선","로써","마다","마저","만큼","만한","말고","밖에",
							"밖엔","밖의","보고","보다","부로","부터","뿐만","삼아","서껀","속에",
							"안에","없이","에게","에겐","에다","에도","에만","에서","에선","에야",
							"에의","와도","외에","으로","이나","이랑","이자","인즉","전에","전의",
							"조차","중에","처럼","치고","치곤","하고","하구","하에","한테","후에",
							"후의","하는",

							"적인","에는","만은","들에","들이","들의","들을","들과",

							"가","건","겸","경","께","나","는","당","도","두",
							"든","라","란","랑","로","루","를","마","만","며",
							"및","별","뿐","서","야","씩","아","에","엔","엘",
							"여","와","은","을","의","이","전","후",

							"과","인","시"

							);

	// 동사 처리
	var Verb = new Array("이다", "했다", "이었다");

	var replaceString=nodeString, changeString="";

	var apply=false;
	var pos=0;
	for(var nIndex=0; nIndex<Auxiliary.length; nIndex++)
	{
		pos = nodeString.lastIndexOf(Auxiliary[nIndex]);
		if(pos>0)
		{
			var auxiliary = Auxiliary[nIndex];
			// 예외 처리
			if(NLWJCDD_Exception(nodeString,auxiliary,pos))
				continue;

			// 처리
			if(nodeString.length==(pos + auxiliary.length))
			{
				changeString=nodeString.substring(0,pos);
				changeString=changeString.replace(/'/g,"");

				if(changeString=="\"")
					changeString="\\\"";

				replaceString = changeString;
				apply=true;
				break;
			}
		}
	}

	if(!apply)
	{
		for(var nIndex=0; nIndex<Verb.length; nIndex++)
		{
			pos = nodeString.lastIndexOf(Verb[nIndex]);
			if(pos>0)
			{
				var verb = Verb[nIndex];

				// 처리
				if(nodeString.length==(pos + Verb.length))
				{
					changeString=nodeString.substring(0,pos);
					changeString=changeString.replace(/'/g,"");

					if(changeString=="\"")
						changeString="\\\"";

					replaceString = changeString;
					break;
				}
			}
		}
	}

	return replaceString;
}

// 예외 처리
function  NLWJCDD_Exception(nodeString,auxiliaryString,pos)
{
	var result=false;
	switch(auxiliaryString)
	{
		case "들의":
			if(nodeString.substring(0,pos)=="그")
				result=true;
			break;
		defalut:
			break;
	}
	return result;
}

function NLWJCDD_GetStringLen(str)
{
	var nStrLen=0;
	var temp="";

	for(var nIndex=0; nIndex<str.length; nIndex++)
	{
		temp = str.charAt(nIndex);
		if(escape(temp).length > 4)
			nStrLen += 2;
		else
			nStrLen++;
	}
	return nStrLen;
}

function NLWJCDD_GetString(str,nCutLen)
{
	var strBuffer="";
	var nStrLen=0;
	var nLen = str.length;
	var temp="";

	for(var nIndex=0; nIndex<nLen; nIndex++)
	{
		temp = str.charAt(nIndex);
		if(escape(temp).length > 4)
			nStrLen += 2;
		else
			nStrLen++;
		strBuffer = strBuffer + temp;
		if(nStrLen >= nCutLen)
			break;
	}
	return strBuffer;
}

