<%--
このファイルの中身は、NTT オープンソースライセンス　バージョン 1.0（「本
契約」という）の適用を受けます。
本契約を遵守しない限り、このファイルを使用してはなりません。
本契約のコピーは、次のＵＲＬから入手できます。
【配布サイトのURL】 http://www.oss.ecl.ntt.co.jp/lms/

本契約に基づき頒布されるソフトウェアは、現状のまま、明示又は黙示のあらゆ
る種類の保証なしで、頒布されます。本契約に基づく権利及び制限を律する特定
の文言については、本契約を参照してください。

「オリジナルコード」は、 NTT Cyber Space Laboratories Code です。 
「オリジナルコード」の「初期開発者」は、日本電信電話株式会社です。  
日本電信電話株式会社により創作された部分は、Copyright (C) 2004 
日本電信電話株式会社 です。
全ての権利が留保されます。 
「コントリビュータ」：_____________________________________ 


The contents of this file are subject to the NTT Opensource License
Version 1.0 (the License); you may not use this file except in
compliance with the License. You may obtain a copy of the License at
【配布サイトのURL】 http://www.oss.ecl.ntt.co.jp/lms/

Software distributed under the License is distributed on an AS IS
basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
License for the specific language governing rights and limitations
under the License.

The Original Code is NTT Cyber Space Laboratories Code .

The Initial Developer of the Original Code is NIPPON TELEGRAPH AND 
TELEPHONE CORPORATION.
Portions created by the NIPPON TELEGRAPH AND TELEPHONE CORPORATION 
are Copyright (C) 2004 NIPPON TELEGRAPH AND TELEPHONE CORPORATION. 
All Rights Reserved.

Contributor(s) ______________________________________.
--%>

<%--
//
//
//	MakeMainFrame.jsp
//
//			変更履歴
//				2003.02.01	新規作成
//
//	機能
//  メインフレーム画面
//
--%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%@page language="java" contentType="text/html; charset=Windows-31J" pageEncoding="Windows-31J"%>
<%@page errorPage="JSPError.jsp"%>
<%@page import="jp.co.ntt.lms.xms.framework.*"%>
<%@page import="jp.co.ntt.lms.lo.scorm.engine.*"%>
<%@page import="jp.co.ntt.lms.lo.scorm.kernel.*"%>
<%@page import="jp.co.ntt.lms.lo.scorm.kernel.exception.*"%>
<%@page import="jp.co.ntt.lms.lo.scorm.util.*"%>
<%@page import="java.util.regex.*" %>
<html>
<head>
	<meta http-equiv="Content-Type" content="<%= SG.get("MetaContentType") %>">
	<meta http-equiv="Pragma" content="No-Cache">
	<meta http-equiv="Cache-Control" content="No-Cache">
	<title><%= Message.get("Titles/Title[@id='MakeMainFrame']") %></title>
</head>
<%
	// BusinessBeanをrequstから取り出す
	NavigateBusinessBean nbb = (NavigateBusinessBean)request.getAttribute(Constant.KEY_BUSINESS_BEAN);

	// ScreenBeanをrequstから取り出す
	NavigateScreenBean nsb = (NavigateScreenBean)request.getAttribute(Constant.KEY_SCREEN_BEAN);

	// 起動パラメータを取得する
	ExecuteParameters executeParameters = (ExecuteParameters)nbb.getExecuteParameters();

	// (次)SCO画面へのURLを取得する
	String SCOURL = nbb.getSCOURL();

	// AICC_URL SCOURLから分離するため
	String AICC_URL = nbb.getAICC_URL();
	// AICC_SID SCOURLから分離するため
	String AICC_SID = nbb.getAICC_SID();
%>
<script language="JavaScript">
<%-- (次)SCOへのURL (次)SCOへのURLが存在しない場合はnullを設定する --%>
var g_SCOURL = <%= (SCOURL == null) ? "null" : "\"" + SCOURL + "\"" %>;

// 2011.09.01 taku-harada mod >>
<%-- AICC_URL --%>
var g_AICC_URL = <%= (AICC_URL == null) ? "null" : "\"" + AICC_URL + "\"" %>;

<%-- AICC_SID --%>
var g_AICC_SID = <%= (AICC_SID == null) ? "null" : "\"" + AICC_SID + "\"" %>;
// 2011.09.01 taku-harada mod <<

<%-- エンジンへのURL --%>
var g_engineURL = "<%= SG.get("BaseServletURL") %>";

<%-- デフォルトのポップアップウィンドウのウィンドウスタイル --%>
var g_popupWindowFeatures = "<%= SG.get("PopupWindowFeatures") %>";

<%-- デフォルトの目次ポップアップウィンドウのウィンドウスタイル --%>
var g_contentsMenuWindowFeatures = "<%= SG.get("ContentsMenuWindowFeatures") %>";

<%-- 補助リソースのポップアップウィンドウのウィンドウスタイル --%>
var g_auxiliaryResourceWindowFeatures = "<%= SG.get("AuxiliaryResourceWindowFeatures") %>";

var g_BTNF = "/sce/FrameworkServlet?action_id=scorm.makeButton"

parent.frames.API_1484_11._setStatus("Not Initialized");
parent.frames.API_1484_11._setLastError("0");
parent.frames.API_1484_11._setErrorString("");
parent.frames.API_1484_11._setIgnoreSCONavigation(false);

<%--
 * ポップアップウィンドウを作成する
 *
 * @param	url			ポップアップウィンドウのURLを指定する
 * @param	name		ポップアップウィンドウの名称を指定する
 * @param	features	ウィンドウのスタイルを指定する。nullを指定した場合はデフォルトのスタイルを使用する。
 * @return	作成したポップアップウィンドウのウィンドウハンドルを返却する
--%>
function openWindow(url, name, features)
{
	<%-- ポップアップウィンドウを作成する --%>
	var	popup = window.open(url, name, features);

	<%-- 作成したポップアップウィンドウをtopで保持する --%>
	parent.g_popupWindows.push(popup);

	<%-- 作成したポップアップウィンドウにフォーカスを設定する --%>
	popup.focus();

	<%-- 作成したポップアップウィンドウを返却する --%>
	return popup;
}

var gflg = true;
function loadBTN(){
	if(gflg){
		self.Button.location = g_BTNF;
		gflg = false;
	}
}
</script>

<%!
/**
 * Framesetの属性値を作成する
 *
 * @param node	<FrameSet>タグのCachedNodeを指定する
 * @return 作成した属性値を返却する
 */
private String makeFramesetAttributes(CachedNode node) throws Throwable {
	// <FrameSet>タグ中の全ての属性を取得する
	CachedNode[] nodeList = node.selectChildNodeList("@*");

	// 取得できた全ての属性から 「属性1="属性値1" ... 属性n="属性値n" 」形式で文字列を作成する
	StringBuffer attributes = new StringBuffer();

	for (int i = 0; i < nodeList.length; i++) {
		// 「属性n="属性値n" 」文字列を作成する
		attributes.append(nodeList[i].getNode().getNodeName());
		attributes.append("=\"");
		attributes.append(nodeList[i].getNodeValue().replaceAll("\"", "&quot;"));
		attributes.append("\" ");
	}

	// 作成した全ての属性値の文字列を返却する
	return attributes.toString();
}

/**
 * Frameの属性値を作成する
 *
 * @param node	<Frame>タグのCachedNodeを指定する
 * @return 作成した属性値を返却する
 */
private String makeFrameAttributes(CachedNode node, String SURL) throws Throwable {
	String name = node.selectSingleChildNode("@id").getNodeValue();
	String hidden = null;

	CachedNode hiddenNode = node.selectSingleChildNode("@hidden");
	if (hiddenNode != null) {
		hidden = hiddenNode.getNodeValue();
	}

	String src;

	// ボタンフレームの場合はsrc属性に指定するURLは「ボタン作成」URL
	if (name.equals("Button")) {
//		src = "about:blank";
		src = "blank.html";
	}
	// 目次フレームの場合はsrc属性に指定するURLは空白ページ
	else if (name.equals("ContentsMenu")) {
//		src = "about:blank";
		src = "blank.html";
	}
	// SCOフレームの場合はsrc属性に指定するURLは空白ページ
	else if (name.equals("SCO")) {

		if(SURL == null){
//			src = "about:blank";
			src = "blank.html";
		}else{

// 20061219 MOD URL変換処理
			StringBuffer objSb = new StringBuffer();
			Pattern objPtn = Pattern.compile("//",Pattern.CASE_INSENSITIVE);
			String[] aryStr=objPtn.split(SURL);
			if(aryStr.length == 3){
				src = "/" + aryStr[2].toString();
			}else{
				src = SURL;
			}
		}

		// SCO画面は常に表示する
		hidden = "false";
	}
	// 上記以外の場合
	else {
		throw new SystemException("不正なidが指定されました[" + name + "]");
	}

	// src, name, _lmshidden 属性を設定する
	StringBuffer attributes = new StringBuffer();

	attributes.append("src=\"");
	attributes.append(src);
	attributes.append("\" ");

	attributes.append("name=\"");
	attributes.append(name);
	attributes.append("\" ");

	attributes.append("_lmshidden=\"");
	attributes.append(hidden);
	attributes.append("\" ");

	attributes.append("id=\"");
	attributes.append("_lmsframename." + name);
	attributes.append("\" ");

	// <Attributes>タグで定義されている属性値の設定を行う
	CachedNode[] nl = node.selectSimpleNodeList("/FrameView/Attributes/" + name + "/*/text()");

	for (int i = 0; i < nl.length; i++) {
		attributes.append(nl[i].getNode().getParentNode().getNodeName());
		attributes.append("=\"");
		attributes.append(nl[i].getNodeValue().replaceAll("\"", "&quot;"));
		attributes.append("\" ");
	}

	// 作成した全ての属性値の文字列を返却する
	return attributes.toString();
}
%>

<%
	CachedNode rootFramesetNode = nsb.getFramesetDefine().selectSingleChildNode("FrameSet");
%>
<frameset name="main" <%= makeFramesetAttributes(rootFramesetNode) %> onload="loadBTN()">
<%
	CachedNode[] frameOrFramesetNodes = rootFramesetNode.selectNodeList("Frame|FrameSet");
	for (int i = 0; i < frameOrFramesetNodes.length; i++) {
		if (frameOrFramesetNodes[i].getNode().getNodeName().equals("Frame")) {
%>
	<frame <%= makeFrameAttributes(frameOrFramesetNodes[i],SCOURL) %>>
<%
		}
		else if (frameOrFramesetNodes[i].getNode().getNodeName().equals("FrameSet")) {
%>
	<frameset <%= makeFramesetAttributes(frameOrFramesetNodes[i]) %>>
<%
			CachedNode[] frameNodes = frameOrFramesetNodes[i].selectChildNodeList("Frame");
			for (int j = 0; j < frameNodes.length; j++) {
%>
		<frame <%= makeFrameAttributes(frameNodes[j],SCOURL) %>>
<%
			}
%>
	</frameset>
<%
		}
	}
%>
</frameset>
</html>
