	// =====================================================
	// 共通変数部
	// =====================================================
	// Object 格納用
	var spreadTable   = null;	// Spread配置用のTABLE要素
	var dataTableArea = null;	// データ表示部を囲むDIV要素
	var dataTable     = null;	// データ表示部のTABLE要素
	var colHeader     = null;	// 列ヘッダ表示部を囲むSPAN要素
	var rowHeader     = null;	// 行ヘッダ表示部を囲むSPAN要素
	var CRSHeaderObject = null;	// クロスヘッダー部を囲むSAPN要素

	// Spread 表示関連
	var defaultCellWidth  = 100;	// 初期表示時の列ヘッダの幅
	var defaultCellHeight = 22; 	// 初期表示時の行ヘッダの高さ

	// 次元情報格納用
	var axesXMLData;

	// 行ヘッダ、列ヘッダにセットされた次元/メジャー数
	var rowObjNum = 0;
	var colObjNum = 0;

	// 行ヘッダ、列ヘッダの各段の次元/メジャーのメンバ数
	var chMemNumList = new Array(3);
		chMemNumList[0] = 0;
		chMemNumList[1] = 0;
		chMemNumList[2] = 0;

	var rhMemNumList = new Array(3);
		rhMemNumList[0] = 0;
		rhMemNumList[1] = 0;
		rhMemNumList[2] = 0;

	// XMLの設定
	var memberElementsNum = 7;		// XMLの次元メンバが持つ要素数
	var isDrilledPosition = 5;		// XMLの「isDrilled」のindex(0 start)


	// ===================================================================================
	// 関数
	// ===================================================================================

	// ===== 初期化関数 ==================================================================

	// Spreadの初期化
	function loadSpread() {
		axesXMLData = parent.info_area.axesXMLData;

		//PageEdgeに次元/メジャーのスライスボタンを生成、表示(visibilityをvisibleに変更)
		showSlicerButton();

		// ======== 変数の初期化(全般) ========
		// オブジェクト
		spreadTable   = document.all("SpreadTable");
		dataTableArea = document.all("DataTableArea");
		dataTable     = dataTableArea.firstChild;
		colHeader     = document.all("ColumnHeaderArea");
		rowHeader     = document.all("RowHeaderArea");
		CRSHeaderObject = document.all("CrossHeaderArea");


		// 行ヘッダ、列ヘッダにセットされた次元/メジャー数
		var metaDataArea = document.all("metaDataArea");
		colObjNum = parseInt(metaDataArea.all("colHiesCount").innerText);
		rowObjNum = parseInt(metaDataArea.all("rowHiesCount").innerText);

		// 行ヘッダ、列ヘッダにセットされた次元/メジャーのメンバ数
		chMemNumList[0] = parseInt(metaDataArea.all("colHie0Count").innerText);
		chMemNumList[1] = parseInt(metaDataArea.all("colHie1Count").innerText);
		chMemNumList[2] = parseInt(metaDataArea.all("colHie2Count").innerText);

		rhMemNumList[0] = parseInt(metaDataArea.all("rowHie0Count").innerText);
		rhMemNumList[1] = parseInt(metaDataArea.all("rowHie1Count").innerText);
		rhMemNumList[2] = parseInt(metaDataArea.all("rowHie2Count").innerText);

		// ======== 変数の初期化(ドリル処理用) ========
		viewedColSpreadKeyList[0] = document.SpreadForm.viewCol0KeyList_hidden.value;
		viewedColSpreadKeyList[1] = document.SpreadForm.viewCol1KeyList_hidden.value;
		viewedColSpreadKeyList[2] = document.SpreadForm.viewCol2KeyList_hidden.value;

		viewedRowSpreadKeyList[0] = document.SpreadForm.viewRow0KeyList_hidden.value;
		viewedRowSpreadKeyList[1] = document.SpreadForm.viewRow1KeyList_hidden.value;
		viewedRowSpreadKeyList[2] = document.SpreadForm.viewRow2KeyList_hidden.value;

		viewedColSpreadIndexKeyList = document.SpreadForm.viewColIndexKey_hidden.value;
		viewedRowSpreadIndexKeyList = document.SpreadForm.viewRowIndexKey_hidden.value;

		// 現在ウインドウに表示されている列/行のSpreadIndex,KEYの組み合わせ情報を初期化
		var colIndexKeysStringArray = viewedColSpreadIndexKeyList.split(",");
		for ( var i = 0; i < colIndexKeysStringArray.length; i++ ) {
			var indexKeysString = colIndexKeysStringArray[i];
			var indexKeysArray = indexKeysString.split(":");

			var spreadIndex = parseInt(indexKeysArray[0]);
			var keyArray = indexKeysArray[1].split(";");

			viewingColSpreadIndexKeysDict.add(spreadIndex, keyArray);
		}

		var rowIndexKeysStringArray = viewedRowSpreadIndexKeyList.split(",");
		for ( var i = 0; i < rowIndexKeysStringArray.length; i++ ) {
			var indexKeysString = rowIndexKeysStringArray[i];
			var indexKeysArray = indexKeysString.split(":");

			var spreadIndex = parseInt(indexKeysArray[0]);
			var keyArray = indexKeysArray[1].split(";");

			viewingRowSpreadIndexKeysDict.add(spreadIndex, keyArray);
		}

		// 連想配列の初期化(COL KEY)
		for ( var i = 0; i < viewedColSpreadKeyList.length; i++) {
			var tmpKeyArray = viewedColSpreadKeyList[i].split(",");

			for ( var j = 0; j < tmpKeyArray.length; j++ ) {
				var tmpKey = tmpKeyArray[j].toString();

				associationViewedColSpreadKey[i][tmpKey] = 1;
			}
		}

		// 連想配列の初期化(COL Index)
		var tmpIndexKeyArray = viewedColSpreadIndexKeyList.split(",");

		for ( var j = 0; j < tmpIndexKeyArray.length; j++ ) {
			var tmpIndexKey = tmpIndexKeyArray[j].toString();
			var tmpIndex = tmpIndexKey.split(":")[0].toString();

			associationViewedColSpreadIndex[tmpIndex] = 1;
		}

		// 連想配列の初期化(ROW KEY)
		for ( var i = 0; i < viewedRowSpreadKeyList.length; i++) {
			var tmpKeyArray = viewedRowSpreadKeyList[i].split(",");

			for ( var j = 0; j < tmpKeyArray.length; j++ ) {
				var tmpKey = tmpKeyArray[j].toString();

				associationViewedRowSpreadKey[i][tmpKey] = 1;
			}
		}

		// 連想配列の初期化(ROW Index)
		var tmpIndexKeyArray = viewedRowSpreadIndexKeyList.split(",");

		for ( var j = 0; j < tmpIndexKeyArray.length; j++ ) {
			var tmpIndexKey = tmpIndexKeyArray[j].toString();
			var tmpIndex = tmpIndexKey.split(":")[0].toString();

			associationViewedRowSpreadIndex[tmpIndex] = 1;
		}

		// ===== 行ヘッダが多段の場合、あらかじめヘッダセルの幅を広げてメンバ名が見えるようにしておく =====
		if ( getHeaderObjNum("ROW") > 1 ) {
			for ( var j = 0; j < getHeaderObjNum("ROW"); j++ ) {
				changeCellWidth(document.all("CrossHeader_CG" + j), 40, "modifyCrossHeaderWidth", "UP");
			}
		}

		// ===== 行ヘッダ、列ヘッダ、データ表示部の幅、高さを調整 =====
		resizeArea();

		// ===== スクロールイベントとscrollView()との対応付け =====
		dataTableArea.onscroll = scrollView;

		// ===== Spreadテーブルの色、データ情報読み込み、Spreadの表示処理(visibilityをvisibleに変更) =====
		refreshTableColor();

	}

	

	// HTMLのテーブルに色設定を適用し、完了後にデータ挿入処理を呼び出す
	function refreshTableColor() {
		document.SpreadForm.action = "Controller?action=loadColorAct";
		document.SpreadForm.target = "loadingStatus";
		document.SpreadForm.submit();
	}


	// ===== サーバへのアクセスかどうかを設定 ========================================
	function setLoadingStatus(status) {
		if ( (status != true) && (status != false) ) {
			return;
		}

		if (status == true) { // サーバーへアクセス中
			parent.spread_header.loadingStatus.loadingIMG.src = "./images/logo_anime.gif";
		} else { // サーバーへのアクセス終了
			parent.spread_header.loadingStatus.loadingIMG.src = "./images/logo_anime_stop.gif";
		}
	}

	// ============= スタイル調整関連関数 =====================================

	// 行･列ヘッダとデータテーブル部のスクロール位置を合わせる
	function scrollView() {
		rowHeader.scrollTop = dataTableArea.scrollTop;
		colHeader.scrollLeft= dataTableArea.scrollLeft;
	}

	// 行ヘッダ、列ヘッダ、データ表示部の幅をBODYサイズに合わせて変更する。
	function resizeArea() {
		if ( document.body.clientWidth != 0 ) {

			var newWidth  = ( document.body.clientWidth - rowHeader.offsetWidth ) 
			var newHeight = ( document.body.clientHeight 
			                   - document.all("tblToolBar").offsetHeight 
			                   - colHeader.offsetHeight 
			                   - spreadTable.rows[0].offsetHeight 
			                   - spreadTable.rows[1].offsetHeight 
			                 ) 

			// 行ヘッダ、データ表示部の幅および列ヘッダ、データ表示部の高さが
			// 負になった場合は、補正は行なわない
			if ( newWidth <= 0 ) {
				return;
			} else if ( newHeight <= 0 ) {
				return;
			}

			colHeader.style.width      = newWidth;
			dataTableArea.style.width  = newWidth;

			rowHeader.style.height     = newHeight;
			dataTableArea.style.height = newHeight;

			// 行・列ヘッダ、データテーブルのスクロール位置(X軸、Y軸)をあわせる
			scrollView();
		}
	}

// ===== メッセージ表示 =============================================

	// ユーザーにメッセージを表示
	function showMessage( id,arg1,arg2,arg3,arg4,arg5 ) {

		var message    = "";
		var arg1String = "";
		var arg2String = "";
		var arg3String = "";
		var arg4String = "";
		var arg5String = "";

		switch ( id ) {
		
			case "1" :
				if ( arg1 == "COL" ) {
					arg1String = "列ヘッダ";
				} else if ( arg1 == "ROW" ) {
					arg1String = "行ヘッダ";
				}
				message = arg1String + "には１段以上のディメンションまたはメジャーが必要です。";
				break;

			case "2" :
				if ( arg1 == "COL" ) {
					arg1String = "列ヘッダ";
				} else if ( arg1 == "ROW" ) {
					arg1String = "行ヘッダ";
				}
				message = arg1String + "には３段以上のディメンションまたはメジャーは設定できません。";
				break;

			case "3" :
				if ( arg2 == "COL" ) {
					arg2String = "列ヘッダ";
				} else if ( arg2 == "ROW" ) {
					arg2String = "行ヘッダ";
				}
				message = arg2String + "に表示できるセルの最大値は" + arg1 + "です。";
				break;

			case "4" :
				message = "レポートに表示できるセルの最大値は" + arg1 + "です。";
				break;

			case "5" :
				message = "ドリル処理を実行しています。少々お持ちください。";
				break;

			// セレクタ
			case "6" :
				message = "選択済みのメンバー欄にメンバーがありません。";
				break;

			// レポート保存
			case "7" :
				message = "レポートを保存しました。";
				break;

			// ログイン入力チェック（ユーザー名＆パスワード）
			case "8" :
				message = "ユーザー名およびパスワードを入力してください。";
				break;

			// ログイン入力チェック（ユーザー名）
			case "9" :
				message = "ユーザー名を入力してください。";
				break;

			// ログイン入力チェック（パスワード）
			case "10" :
				message = "パスワードを入力してください。";
				break;


		}

		alert( message );
	}


	// ユーザーに確認を求めるメッセージを表示
	function showConfirm(msgId,arg1){
		var msg=new Array();
		msg["CFM1"] = "ログアウトします。よろしいですか？";
		return confirm(msg[msgId]);
	}

// ====================================================================================

	// 画面フローでログアウト時に使用
	function logout_flow(element, contextPath) {
		if ( showConfirm("CFM1") ) {
			element.href = contextPath + "/Controller?action=logout";
			element.target="_top";
		} else {
			return;
		}
	}
