/*
var top = window;
while (true) {
	if (top.name == "ELA_TOP_WND" || top == top.parent) break;
	top = top.parent;
}
*/
function _Id(str) { return document.getElementById(str); }
function _Name(str) { return document.getElementsByName(str); }
function _p2o(p) {
	var o = {};
	for (var i in p) o[p[i][0]] = p[i][1];
	return o;
}
function _o2p(o) {
	var p = [];
	for (var i in o) p[p.length] = [i, o[i]];
	return p;
}
function _concat(o1, o2) {
	var o = {};
	if (o1) for (var i in o1) o[i] = o1[i];
	if (o2) for (var i in o2) o[i] = o2[i];
	return o;
}

// 暗号データ
function TCrypt( com, serverUrl, form, p )
{
	this.param = p ? p : [];
	this.com   = com;
	this.serverUrl = serverUrl;
	this.form = form;
}

// 送信データ作成
// FORMAT : formfeed(\x0C), tab(\x09)コードでスプリット
//          name1(ff)value1(tab)name2(ff)value2...
TCrypt.prototype.toString = function()
{
	var i = 0;
	var	sOutput = "";
	for( var idx in this.param ) {
		if( i > 0 )
			sOutput += "\t";
		sOutput += idx + "\f" + this.param[idx];
		i++;
	}
	return sOutput;
}

// パラメータ解析
TCrypt.prototype.ParseString = function( str )
{
	this.param = new Array();
	var ar = str.split( "\t" );
	for( var i in ar ) {
		var arTmp = ar[i].split( "\f" );
		this.param[arTmp[0]] = arTmp[1];
	}
}

TCrypt.prototype.EncryptParam = function() {
	return this.com.Encrypt(this.toString());
}

// 暗号文字列送信
TCrypt.prototype.SendCrypt = function( ajax_options )
{
	var sCryptText = this.EncryptParam();
	if( sCryptText == null ) {
		alert( "暗号化に失敗しました。\nサーバーへの送信を中止しました。" );
		return;
	}
	if (!this.form) this.form = idCryptForm;
	this.form.crypt.value = sCryptText;
	this.form.CRYPT_DISABLE.value = USE_CRYPT_PLUGIN ? 0 : 1;
	this.form.action = this.serverUrl;
	this.form.method = "POST";
	if (ajax_options) jQuery(this.form).ajaxSubmit(ajax_options);
	else this.form.submit();
}

// 暗号送信フォーム出力
function WriteCryptForm()
{
	document.write( '<form name="idCryptForm" style="display:none;"><input name="crypt" type="hidden" /><input name="CRYPT_DISABLE" type="hidden" /></form>' );
}

function decodeAndEval(str)
{
	var com = LoadCryptCom();
//	var g_cr = new TCrypt( com, "" );
	var decodeStr = str;

	decodeStr = com.Decrypt(decodeStr);

    eval(decodeStr);
}

function Crypt_Send(url, array, target, form, ajax_options) {
	if (!form) form = idCryptForm;
	var g_cr = new TCrypt(oCrypt, url, form);

	for (var i in array)
		g_cr.param[array[i][0]] = array[i][1];

	g_cr.form.target = (ajax_options || target) ? target : "_self";
	g_cr.SendCrypt(ajax_options);
}

function Crypt_Ajax(url, param, option) {
	if (!option) option = {};
	if (!param) param = [];
	if (top.params) param = top.params.concat(param);
	var g_cr = new TCrypt(oCrypt, null, null, _p2o(param));
	jQuery.ajax(_concat({
		type: "POST",
		url: url,
		data: {crypt:g_cr.EncryptParam(),CRYPT_DISABLE:USE_CRYPT_PLUGIN ? 0 : 1},
		dataType: "script"
	}, option));
}

function backParamToArray(bp) {
	var params = new Array();
	if (bp) {
		bp = bp.split(',');
		while (bp.length) {
			var tmp = bp[0].split(':');
			bp = bp.slice(1, bp.length);
			params[params.length] = tmp;
			if (tmp[0] == "backURL" && bp.length) {
				params[params.length] = new Array("backParam", bp.join(","));
				break;
			}
		}
	}
	return params;
}

function goGuidance() {
	top.location.replace('/crypt/guidance'+(eLABEL.EL_TYPE == 1 && eLABEL.SERVER_TYPE == "DEMO" ? '2' : '')+'.html');
}

/*
//if (typeof(USE_CRYPT_PLUGIN) == "undefined") USE_CRYPT_PLUGIN = true;
//var jsfile = USE_CRYPT_PLUGIN ? "/lncrypt1.js" : "/lncrypt2.js";
var jsfile = "/lncrypt.js";
document.write('<script type="text/javascript" src="/el_define.js.php"></script>');
document.write('<script type="text/javascript" src="'+jsfile+'"></script>');
*/

var eLABEL = {'EL_TYPE' : 0, 'title' : "ラインズｅライブラリ　アドバンス", 'crypt' : "LinesCrypt.Crypt.2"};

// 暗号化ＣＯＭロード
function LoadCryptCom()
{
//	if (!USE_CRYPT_PLUGIN) return new TCryptCom;

	var oCrypt;
	try {
		oCrypt = new ActiveXObject( eLABEL.crypt );
		oCrypt.AccessTest();
		// 注：ＩＥ４では ActiveXObject だけではロードに成功したか
		//     判定できない。 チェック用のメソッドを使いテストする。
	}
	catch( e )
	{
		oCrypt = null;
	}
	return oCrypt;
}

function IsCryptInstall(url)
{
	var result = true;
	var oCrypt;
	try {
		oCrypt = new ActiveXObject( eLABEL.crypt );
		oCrypt.AccessTest();
	}
	catch( e ) {
		result = false;
	}
	return result;
}

if (typeof(USE_CRYPT_PLUGIN) == "undefined") USE_CRYPT_PLUGIN = (eLABEL.EL_TYPE == 0 || eLABEL.EL_TYPE == 1 && IsCryptInstall());
var oCrypt = LoadCryptCom();

function LoadUtilObject() {
	var util;
	try {
		util = new ActiveXObject("LinesUtility.FileUtility.1");
	} catch (e) {
		util = null;
	}
	return util;
}

function LoadDavCheckObject() {
	var DavTest;
	try {
		DavTest = new ActiveXObject("DavCheck.DavTest");
	} catch (e) {
		DavTest = null;
	}
	return DavTest;
}

function getModuleVersion(modname) {
	var module = [], str;
	try {
		var util = LoadUtilObject();
		str = util.GetModuleVersion();
	} catch (e) {
		return false;
	}

	str = str.split("\n");
	for (var i = 0; i < str.length; i++) {
		if (!str[i]) continue;
		var rec = str[i].split(':');
		module[rec[0]] = rec[1];
	}

	if (modname == null) return module;
	if (typeof(module[modname]) == "undefined") return false;
	return module[modname];
}

function checkStpl2008() {
	var ver = getModuleVersion("Stapler");
	if (!ver) return false;
	ver = ver.split('.');
	return (ver[0] >= 4);
}

function checkStpl2010() {
	var ver = getModuleVersion("Stapler");
	if (!ver) return false;
	return (ver > "4.1.1.0");
}

function checkCrypt2011() {
	var ver = getModuleVersion("LinesCrypt");
	if (!ver) return false;
	return (ver >= "1.2.6.4");
}

function kickAppModule(prm, func) {
	if (!prm) prm = [];
//	if (checkCrypt2011())
		top.Crypt_Ajax("/main/ext_kicker.php", top.params.concat(prm).concat([['Launch',1]]), func ? { 'complete' : func } : null);
//	else
//		Crypt_Send("/main/ext_kicker.php", top.params.concat(prm), frm);
}

function LaunchAppModule(prm) {
	try {
		prm = oCrypt.Decrypt(prm);
		switch (prm.substr(0,7)) {
			case 'eLA3stx': oCrypt.LaunchStpl(prm); break;
			case 'eLA3ewf': oCrypt.LaunchWbfl(prm); break;
			case 'eLA3stv': oCrypt.LaunchStpv(prm); break;
			default: break;
		}
	} catch (e) {
		alert('起動できませんでした。(LaunchAppModule)');
	}
}

