
//-------------------------------------------------------------
// Àü¿ª º¯¼öµé ( Global Variables )
//-------------------------------------------------------------
	var ActiveXLoadTimer = 0;
	var EffyLoadTryCount = 0;
	var g_ImObj = null;
	var g_EditorObj = null;
	var g_EngOnly = false;

//-------------------------------------------------------------
// Áö¿ª ÇÔ¼öµé( Private functions )
//-------------------------------------------------------------
	function EFFY_ACTIVE_X_IntToOctet_1Nible(b)
	{
		var Octet = "";
		if( b>= 0x00 &&   b<= 0x09 )
			Octet = String.fromCharCode(b + 0x0030);
		else
			Octet =String.fromCharCode(b - 10  + 0x0061);
		return Octet;
	}

	function EFFY_ACTIVE_X_OctetToInt_1Nible(b,shift)
	{
		var retVal = 0;

		if( b >= 0x0030 && b <= 0x0039)
			retVal =  b - 0x0030 ;
		else if( b >= 0x0061 && b <= 0x007A)
			retVal =  b - 0x0061 + 10;
		else if( b >= 0x0041 && b <= 0x005A)
			retVal =  b - 0x0041 + 10;

		retVal <<= shift;

		return retVal;
	}


	function EFFY_ACTIVE_X_OctetToInt(b1,b2,b3,b4)
	{
		var retVal = 0;
		retVal |= EFFY_ACTIVE_X_OctetToInt_1Nible(b1,12);
		retVal |= EFFY_ACTIVE_X_OctetToInt_1Nible(b2,8);
		retVal |= EFFY_ACTIVE_X_OctetToInt_1Nible(b3,4);
		retVal |= EFFY_ACTIVE_X_OctetToInt_1Nible(b4,0);
		return retVal;
	}
	


	function ImePostMsgHadler(msg,wparam,lparam,retPtr)
	{
		try
		{
			var WM_PAINT = 0x000F;
			if( msg == WM_PAINT)
			{
				g_ImObj.style.visibility = "hidden";
				g_ImObj.style.visibility = "visible";
				g_ImObj.focus();

			}
			else
			{
				g_EditorObj.SentMessage(msg,wparam,lparam,retPtr);		
			}
		}
		catch (err)
		{

		}

	}

	function EditorPostMsgHadler(msg,wparam,lparam,retPtr)
	{
		try
		{
			var WM_PAINT = 0x000F;
			if( msg == WM_PAINT)
			{
				g_EditorObj.style.visibility = "hidden";
				g_EditorObj.style.visibility = "visible";
				g_EditorObj.focus();

			}
			else
			{
				g_ImObj.SentMessage(msg,wparam,lparam,retPtr);		
			}
		}
		catch (err)
		{

		}

		
	}

	function Effy_LoadActiveX_Proc()
	{

		var Loaded = false;
		var ImHandle=0;
		var EditorHandle =0;

		var WM_PAINT = 0x000F;

		EffyLoadTryCount ++;

		if(ActiveXLoadTimer) 
		{
			clearTimeout(ActiveXLoadTimer);
			ActiveXLoadTimer  = 0;
		}
		
		try
		{
				
			g_EditorObj.SentMessage(WM_PAINT,0,0,0);	
			g_ImObj.SentMessage(WM_PAINT,0,0,0);	

			g_ImObj.attachEvent("PostMsg", ImePostMsgHadler);
			g_EditorObj.attachEvent("PostMsg", EditorPostMsgHadler);

			if(g_EngOnly)
				g_ImObj.SetEnglishOnly(true);
			g_ImObj.focus();
			Loaded = true;

		}
		catch (err)
		{
			Loaded = false;
		}
		
		if(Loaded == false)
		{
			if(EffyLoadTryCount < 20)
			{
				ActiveXLoadTimer  = setTimeout("Effy_LoadActiveX_Proc()", 500);
			}
			else
			{
				//ActiveX ·Îµù ¿ÏÀü ½ÃÆÐ
				alert("Active X Loading Fail..");
			}
		}
	}

//-------------------------------------------------------------
//	API		  : Effy_ActiveX_GetBase64String
//	Function  : This function retrieves a base64 encoded string from effy ML(multi-lingual) edit control.
//	Parameter : EditorObj : effy ML Edit control Object(Active X).
//				enc			: char-set  ex) euc-kr, shift-jis, gb2312				
//	Return	  : String Object base64 encoded.
//	Comment	  :
	function Effy_ActiveX_GetBase64String(EditorObj,enc)
	{
		if( EditorObj)
			return EditorObj.GetStringEnc(enc);
		else
			return "";
	}


//-------------------------------------------------------------
//	API		  : Effy_ActiveX_GetEncodedString
//	Function  : This function retrieves a encoded string from effy ML(multi-lingual) edit control.
//	Parameter : EditorObj : effy ML Edit control Object(Active X).
//	Return	  : String Object encoded by UCS-2 charset.
//	Comment	  :
//				Korean character "°¡" is encoded to "0xAC00" via UCS-2 charset.
//				In this case, this function returns  %AC%00
	function Effy_ActiveX_GetEncodedString(EditorObj)
	{
		if( EditorObj)
			return EditorObj.GetString();
		else
			return "";
	}
	

	function Effy_ActiveX_GetUrlEncString(EditorObj)
	{
		var  SrcStr;
		var DstStr = "";

		if( EditorObj)
		{
			SrcStr = EditorObj.GetString();
			
			srcLen  = SrcStr.length;

			for(i=0; i< srcLen;i+=6)
			{
				DstStr += SrcStr.substring(i+3,i+6);
				DstStr += SrcStr.substring(i,i+3);
			}
			return DstStr;
		}
		else
		{
			return "";
		}

	}


//-------------------------------------------------------------
//	API		  : Effy_ActiveX_GetString
//	Function  : This function retrieves string from effy ML(multi-lingual) edit control.
//	Parameter : EditorObj : effy ML Edit control Object(Active X)
//	Return	  : String Object
	function Effy_ActiveX_GetString(EditorObj)
	{
		var RetString = "";
		var tmpString = "";

		if(EditorObj != null)
		{
			tmpString =  EditorObj.GetString();
			for(i=0;i< tmpString.length; i+=6)
			{
				b1 = tmpString.charCodeAt(i+1);
				b2 = tmpString.charCodeAt(i+2);
				b3 = tmpString.charCodeAt(i+4);
				b4 = tmpString.charCodeAt(i+5);
				tmpCharCode = EFFY_ACTIVE_X_OctetToInt(b1,b2,b3,b4);
				RetString += String.fromCharCode(tmpCharCode);
			}
		}
		return RetString;
	}



//-------------------------------------------------------------
//	API		  : Effy_ActiveX_SetString
//	Function  : This Function sets a string value into the specified ML Edit control.
//	Parameter : EditorObj	: effy ML Edit control Object(Active X)
//				szValue		: String Object
//	Return	  : None
	function Effy_ActiveX_SetString(EditorObj,szValue)
	{
		var tmpString ="";
		// À¯´ÏÄÚµå ½ºÆ®¸µÀ¸·Î ÀÎÄÚµù ÇÏ¿© ³ÖÀÚ..
		if( EditorObj  != null)
		{
			nLen = szValue.length;
			if(nLen > 0)
			{
				for(i=0;i<nLen;i++)
				{
					OneChar = szValue.charCodeAt(i);
					tmpString += "%";
					tmpString +=   EFFY_ACTIVE_X_IntToOctet_1Nible(( OneChar >> 12) &0x000F );
					tmpString +=   EFFY_ACTIVE_X_IntToOctet_1Nible(( OneChar >> 8) &0x000F   );

					tmpString += "%";
					tmpString +=   EFFY_ACTIVE_X_IntToOctet_1Nible(( OneChar >> 4) &0x000F );
					tmpString +=   EFFY_ACTIVE_X_IntToOctet_1Nible(( OneChar >> 0) &0x000F   );
				}

				EditorObj.SetEncodedString(tmpString);
			}
			else
			{
				EditorObj.SetString("");
			}
		}
	}



//-------------------------------------------------------------
//	API		  : Effy_ActiveX_SendString
//	Function  : This Function send a string to  ML edit control.
//	Parameter :  szValue	: String value  sent to ML edit control.
//	Return	  : None

	function Effy_ActiveX_SendString(szValue)
	{

		for( i=0;i<szValue.length;i++)
		{
				DstStr = szValue.substring(i,i+1);
				Effy_ActiveX_SendChar(DstStr );
		}


	}




//-------------------------------------------------------------
//	API		  : Effy_ActiveX_SendChar
//	Function  : This Function send a character to  ML edit control.
//	Parameter :  szValue	: String value includes one character sent to ML edit control.
//	Return	  : None

	function Effy_ActiveX_SendChar(szValue)
	{



		var WM_USER= 0x0400;
		var WM_SEND_CH = WM_USER + 5050;
		var WM_INIT_IM = WM_USER + 5053;
		var retPtr =0;


		OneChar = szValue.charCodeAt(0);


		ImePostMsgHadler(WM_INIT_IM,0,0,retPtr);
		ImePostMsgHadler(WM_SEND_CH,OneChar,0,retPtr);

	


	}




//-------------------------------------------------------------
//	API		  : Effy_LoadActiveX
//	Function  : This Function link ML edit control to IM(imput method) control.
//	Parameter :  IMObj	: effy IM ontrol Object(Active X)
//				 EditorObj	: effy ML Edit control Object(Active X)
//	Return	  : None

	function Effy_LoadActiveX( IMObj, EditorObj )
	{
		g_ImObj = IMObj;
		g_EditorObj = EditorObj;
		Effy_LoadActiveX_Proc();
	}
	
	



