function _ml_check_keybd_sec()
{
	if (keyboardSecurity == true)
	{
		switch (keyboardSecVendor)
		{
		case KEYBD_SEC_KINGS_KDFENS:
			rv = MagicToolkit.CreateEncBaseInfo(Site);
			if(rv != DS_MLT_OK)
			{
				ErrorString =  Error_Process(rv);
				alert(ErrorString);
				return false;
			}
			break;
		}
	}
	
	return true;
}

function _replaceEscapeString(qureyString)
{
	if(true) return qureyString;
	var i;
	var ch;
	var rstring = '';
	var qstring = '';

	qstring = String(qureyString);

	for (i = 0; i < qstring.length; i++) 
	{
		ch = qstring.charAt(i);

		if (ch == ' ')  rstring += '%20';
		else 
		if (ch == '%')  rstring += '%25';
		else 
		if (ch == '&')  rstring += '%26';
		else 
		if (ch == '+')  rstring += '%2B';
		else 
		if (ch == '=')  rstring += '%3D';
		else 
		if (ch == '?')  rstring += '%3F';
		else rstring += ch;
	}
	
	return rstring;
}

function ml_set_challenge(challenge)
{
	rv = MagicToolkit.ml_setChallenge(Site, challenge);
	if(rv != DS_MLT_OK)
	{
		alert(Error_Process(rv));
		return;
	}
}

function ml_gether_form_text(form)
{
 	var name  = new Array(form.elements.length); 
	var value = new Array(form.elements.length); 
	var flag  = false;
	var j     = 0;
	var plain_text = "";

	// 키보드 보안모듈 체크
	if (!_ml_check_keybd_sec())
		return null;
	
	len = form.elements.length; 

	for (i = 0; i < len; i++)
	{
		if( (form.elements[i].type != "button") && (form.elements[i].type != "reset") && (form.elements[i].type != "submit") ) 
		{
			if (form.elements[i].type == "radio" || form.elements[i].type == "checkbox") 
			{ 
				if (form.elements[i].checked == true) 
				{
					name[j] = form.elements[i].name; 
					value[j] = form.elements[i].value;
					j++;
				}
			}
			else {
				name[j] = form.elements[i].name; 
				if (form.elements[i].type == "select-one") 
				{
					var ind = form.elements[i].selectedIndex;	
					if (form.elements[i].options[ind].value != '')
						value[j] = form.elements[i].options[ind].value;
					else
						value[j] = form.elements[i].options[ind].text;
				}
// KINGS K-Defense 적용 부분
//[[
				else if (form.elements[i].type == "password" && keyboardSecurity == true)
				{
//					value[j] = GetPwdValue_K(form.elements[i], MagicToolkit.EncryptionBaseInfo, "", "");
					switch (keyboardSecVendor)
					{
					case KEYBD_SEC_KINGS_KDFENS:
//						value[j] = GetPwdValue_K(form.elements[i], "I/Ck+eG13gHzTVRYFvdJuJ5NlT2Ez9xomX8eYxA8dPwjZ8YFbxTiTj7VZAZChf+R", "", "");
						value[j] = GetPwdValue_K(form.elements[i], MagicToolkit.EncryptionBaseInfo, "", "");
						break;
					}
				}
//]]
				else
				{
					value[j] = form.elements[i].value;
				}
				j++;
			}
		}
	}

	for (i = 0; i < j; i++) {
		str = value[i]; 
		value[i] = _replaceEscapeString(str); 
	}

	for (i = 0; i < j; i++) {
		if (flag)
			plain_text += "&";
		else
			flag = true;
		plain_text += name[i] ;
		plain_text += "=";
		plain_text += value[i];
	}

	return plain_text;
}

function ml_login(loginForm, toBeEncryptedData)
{
	// 세션을 위한 알고리즘 셋팅
	rv = MagicToolkit.SetSymmetricAlgo(Site, Algo, serverKmCertURL, ""); // SEED or 3DES
	if(rv != DS_MLT_OK)
	{
		alert(Error_Process(rv));
		return;
	}

	rv = MagicToolkit.SetLogoURL(Site, CompanyLogoURL); // SEED or 3DES
	if(rv != DS_MLT_OK)
	{
		alert(Error_Process(rv));
		return;
	}

	rv = MagicToolkit.SetKeyboardSecurityInfo(keyboardSecurity, keyboardSecVendor, keyboardSecModule);
	if(rv != DS_MLT_OK)
	{
		alert(Error_Process(rv));
		return;
	}

	rv = MagicToolkit.ml_login(Site, nCertMask, toBeEncryptedData);
	if(rv != DS_MLT_OK)
	{
		alert(Error_Process(rv));
		return;
	}

	loginForm.loginMessage.value = MagicToolkit.ml_loginData;
	loginForm.submit();
}

function ml_encrypt(encryptForm, toBeEncData)
{
	if (toBeEncData == null) return;
	
	rv = MagicToolkit.EncryptWithSession(Site, toBeEncData);
	if(rv != DS_MLT_OK)
	{
		alert(Error_Process(rv));
		return;
	}
	
	encryptForm.encryptedMessage.value = MagicToolkit.EncryptWithSessionData;
	encryptForm.submit();
}

function ml_decrypt(data)
{
	rv = MagicToolkit.DecryptWithSession(Site, data);
	if(rv != DS_MLT_OK)
	{
		alert(Error_Process(rv));
		return;
	}

	return MagicToolkit.DecryptWithSessionData;
}

function ml_set_sessionID(sessionID)
{
	rv = MagicToolkit.SetSessionID(Site, sessionID);
	if(rv != DS_MLT_OK)
	{
		alert(Error_Process(rv));
		return;
	}
}

function ml_key_exchange(keyExchangeForm, toBeEncryptedData)
{
	rv = MagicToolkit.SetSymmetricAlgo(Site, Algo, serverKmCertURL, ""); // SEED or 3DES
	if(rv != DS_MLT_OK)
	{
		alert(Error_Process(rv));
		return;
	}

	rv = MagicToolkit.ml_keyExchange(Site, toBeEncryptedData);
	if(rv != DS_MLT_OK)
	{
		alert(Error_Process(rv));
		return;
	}
	
	keyExchangeForm.keyExchangeMessage.value = MagicToolkit.ml_keyExchangeMessage;
	keyExchangeForm.submit();
}

function ml_encrypt_file(mode, input_path, output_path)
{
	if (mode == true)
		rv = MagicToolkit.EncryptWithSessionForFile(Site, input_path, output_path);
	else
		rv = MagicToolkit.DecryptWithSessionForFile(Site, input_path, output_path);

	if(rv != DS_MLT_OK)
	{
		alert(Error_Process(rv));
		return;
	}

	if (mode == true)
		alert(" ȣȭ ߽ϴ. : " + output_path);
	else
		alert(" ȣȭ ߽ϴ. : " + output_path);
}

function ml_signdata(tbsData)
{
	rv = MagicToolkit.SetLogoURL(Site,CompanyLogoURL); // SEED or 3DES
	if(rv != DS_MLT_OK)
	{
		alert(Error_Process(rv));
		return;
	}

	// 인증서 선택
	//~! MODIFIED BY GOMSUGY. 2008-02-25 17:00
	// SelectCertificate -> TK_SelectCertificate
	rv = MagicToolkit.TK_SelectCertificate(Site, nCertMask);
	if(rv != DS_MLT_OK)
	{
		alert(Error_Process(rv));
		return;
	}

	rv = MagicToolkit.SignData(Site, tbsData);
	if(rv != DS_MLT_OK)
	{
		alert(Error_Process(rv));
		return;
	}

	return MagicToolkit.SignedData;
}

