//-------------------------------------------------------------------------------------------------
// 事前に読み込む必要があるスクリプト
// ・prototype.js
// ・xmlhttprequest.js
// ・scriptaculous.js
// ・effects.js
//-----------------------------------------------
// 事前に宣言しておく必要があるグローバル変数
// ・var g_lang = "jp";
// ・var g_ssl = false;
// ・var g_mode = 0;
//-----------------------------------------------
// グローバル変数を初期化します
var g_app = "";
var g_version = 0;
var g_safety = false;
var g_command = "";
var g_hgtFixedMenu = 0;
var g_hgtMovedMenu = 0;
var g_board = new XMLHttpRequest();
var g_mnuSide = new XMLHttpRequest();
var g_checker = new XMLHttpRequest();;

//-----------------------------------------------
// 初回表示
function initialize(command, args) {

	if (command == "Register") {
		document.frmLogin.txtUserId.focus();
		return;
	}

	// 対応ブラウザでない場合は、注意文を表示
	if (!g_safety) {
		document.getElementById("attention").style.display = "inline";
	}

	if (command == "") {
		command = "Blog";
		args = "BBlog";
	}
	mnuHeader_DoFSCommand(command, args);
}

//-----------------------------------------------
// リクエストをポストします
// sync = trueで非同期通信
// sync = falseで同期通信
//        ちなみに、同期通信の場合、
//        funcの呼び出しが保障されてなかったのでダミーを入れて、
//        通信終了後に別途呼び出しています。
function postXMLHttpRequest(hr, url, param, sync, func) {

	if (!param) {
		param = '';
	}

	if (!hr) {
		return;
	}

	// IE8 - XMLHttpRequest の解説で、
	// XMLHttpRequest は、サーバーとの接続数に限りがあり、
	// 混雑しているとパフォーマンスが低下するとの事、
	// たまにタイムアウトしていたので、
	// 恐らく何らかの問題があるのだろうと思い、
	// とりあえず ActiveX の参照カウンタを増やさないように
	// １つのオブジェクトを使いまわしし、
	// return で返すことによって、参照カウンタが増える可能性を潰しました。
	hr.onreadystatechange = func;
	hr.open('POST', url, sync);
	hr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;");
	// IE8 以降対応
	// タイムアウトを１０秒に設定
	if (hr.timeout != null) {
		hr.timeout = 10000;
		hr.ontimeout = function () {
			switch (g_lang) {
			default:
				alert("混雑している為、中断されました。\n再度実行してください_(._.)_");
				break;
			}
		};
	}
	hr.send(param);
}

//-----------------------------------------------
// レスポンスの読込可否を判定します
function isReadResponse(req) {

	// 処理のタイミングで極稀に例外が発生するが
	// 処理的に問題無いので、切り捨てる
	try {
		if (!req || !req.readyState || !req.status) {
			return false;
		}
	} catch(e) {
		return false;
	}
	if (req.readyState == 4 && req.status == 200) {
		return true;
	}
	return false;
}

//-----------------------------------------------
// バナー設定をします
function overBanner(banner) {
	banner.style.border="1px solid #0000FF";
}
function outBanner(banner) {
	banner.style.border="1px solid #FF0000";
}

function overBannerArea(banner, src) {
	document.images[banner].src = src;
}
function outBannerArea(banner, src) {
	document.images[banner].src = src;
}

//-----------------------------------------------
// データ入力画面を表示します。
function showEntryData(userNo) {

	// パラメータ生成
	var strUrl = "login_checker.php";
	var strParam = "";
	strParam = strParam + "lang=" + encodeURIComponent(g_lang);
	strParam = strParam + "&app=" + encodeURIComponent(g_app);
	strParam = strParam + "&gAccessKey=" + encodeURIComponent(document.frmRedirect.gAccessKey.value);

	// ログインチェック
	postXMLHttpRequest(g_checker, strUrl, strParam, false, showDummy);
	// エラーコードが返って来た場合は、ログアウト画面へ遷移
	if (checkError(g_checker)) {
		return;
	}

	// ブログ更新画面を表示
	strUrl = "entry_data.php";
	strParam = "";
	strParam = strParam + "lang=" + encodeURIComponent(g_lang);
	strParam = strParam + "&app=" + encodeURIComponent(g_app);
	strParam = strParam + "&userNo=" + encodeURIComponent(userNo);
	strParam = strParam + "&gAccessKey=" + encodeURIComponent(document.frmRedirect.gAccessKey.value);
	var nTop = document.documentElement.scrollTop + 50;
	var nHeight = 555;
	if (nHeight > (document.documentElement.clientHeight - 100)) {
		nTop = nTop - 50;
	}
	new LITBox(strUrl, strParam, {width:800, height:nHeight, top:nTop, lang:g_lang, draggable:false, resizable:false});

	document.frmEntryData.txtTitle.focus();
}

//-----------------------------------------------
// ブログ入力画面を表示します。
function showEntryBlog(no, userNo) {

	// パラメータ生成
	var strUrl = "login_checker.php";
	var strParam = "";
	strParam = strParam + "lang=" + encodeURIComponent(g_lang);
	strParam = strParam + "&app=" + encodeURIComponent(g_app);
	strParam = strParam + "&gAccessKey=" + encodeURIComponent(document.frmRedirect.gAccessKey.value);

	// ログインチェック
	postXMLHttpRequest(g_checker, strUrl, strParam, false, showDummy);
	// エラーコードが返って来た場合は、ログアウト画面へ遷移
	if (checkError(g_checker)) {
		return;
	}

	// ブログ更新画面を表示
	strUrl = "entry_blog.php";
	strParam = "";
	strParam = strParam + "lang=" + encodeURIComponent(g_lang);
	strParam = strParam + "&app=" + encodeURIComponent(g_app);
	strParam = strParam + "&no=" + encodeURIComponent(no);
	strParam = strParam + "&userNo=" + encodeURIComponent(userNo);
	strParam = strParam + "&gAccessKey=" + encodeURIComponent(document.frmRedirect.gAccessKey.value);
	var nTop = document.documentElement.scrollTop + 50;
	var nHeight = 555;
	if (nHeight > (document.documentElement.clientHeight - 100)) {
		nTop = nTop - 50;
	}
	new LITBox(strUrl, strParam, {width:800, height:nHeight, top:nTop, lang:g_lang, draggable:true, resizable:false});

	document.frmEntryBlog.txtTitle.focus();
}

//-----------------------------------------------
// 特定商取引に関する法律に基づく表示を行います。
function showLegalNotices() {
	var strUrl = "legal_notices.php";
	var strParam = "";
	strParam = strParam + "lang=" + encodeURIComponent(g_lang);
	strParam = strParam + "&app=" + encodeURIComponent(g_app);
	strParam = strParam + "&gAccessKey=" + encodeURIComponent(document.frmRedirect.gAccessKey.value);
	var nTop = document.documentElement.scrollTop + 50;
	var nHeight = document.documentElement.clientHeight - 100;
	if (nHeight < 100) {
		nTop = nTop - 50;
		nHeight = 100;
	}
	new LITBox(strUrl, strParam, {width:800, height:nHeight, top:nTop, lang:g_lang, draggable:false, resizable:false});
}

//-----------------------------------------------
// 動画を表示します。
function showMovie(target, nWidth, nHeight) {
	var strUrl = "movie/mov" + target + ".php";
	var strParam = "";
	strParam = strParam + "lang=" + encodeURIComponent(g_lang);
	strParam = strParam + "&app=" + encodeURIComponent(g_app);
	strParam = strParam + "&gAccessKey=" + encodeURIComponent(document.frmRedirect.gAccessKey.value);
	var nTop = document.documentElement.scrollTop + 50;
	if (nHeight > (document.documentElement.clientHeight - 100)) {
		nTop = nTop - 50;
	}
	new LITBox(strUrl, strParam, {width:nWidth, height:nHeight, top:nTop, lang:g_lang, draggable:false, resizable:false});
}

//-----------------------------------------------
// 指定のエレメントへジャンプします
function gotoTop() {
	if (g_safety) {
		new Effect.ScrollTo('header');
	}
	else {
		try {
			document.documentElement.scrollTop = 0;
			document.body.scrollTop = 0;
		} catch (e) {}
	}
}
function gotoElement(element) {
	var target = document.getElementById(element);
	try {
		document.documentElement.scrollTop = parseInt(target.style.top.replace("px", ""));
		document.body.scrollTop = parseInt(target.style.top.replace("px", ""));
	} catch (e) {}
}

//-----------------------------------------------
// コールバック関数
function showDummy() {}
function showFront() {
	document.getElementById("front").innerHTML = document.getElementById("board").innerHTML;
	document.getElementById("front").style.height = "500px";
	document.getElementById("front").show();
}
function showBoard() {
	if (isReadResponse(g_board)) {
		// エラーコードが返って来た場合は、ログアウト画面へ遷移
		if (checkError(g_board)) {
			return;
		}
		document.getElementById("board").innerHTML = g_board.responseText;
	}
}
function showMnuSide() {
	if (isReadResponse(g_mnuSide)) {
		document.getElementById("mnuSide").innerHTML = g_mnuSide.responseText;
	}
}
function showBoardAfter() {
	// フォーカスを移動
	if (g_command.indexOf("BQa") != -1) {
		document.frmSendMail.cboDivision.focus();
	}
	if (g_command.indexOf("BPrivate") != -1) {
		try {
			document.frmPrivate.cboUserId.focus();
		} catch (e) {
			document.frmPrivate.txtPassword.focus();
		}
	}
}

//-----------------------------------------------
// サイドメニューの移動処理を設定します
function scrollMenu() {

	// g_hgtMovedMenu = 60(フッターの高さ) + ???(サイドメニューの高さ)
	var sy = (document.documentElement.scrollTop || document.body.scrollTop);
	var max = (document.documentElement.scrollHeight || document.body.scrollHeight) - (g_hgtMovedMenu + 60);

	// g_hgtFixedMenu = 120(ヘッダーの高さ) + 200(タイトルの高さ) + ???(固定メニューの高さ)
	if (sy < g_hgtFixedMenu) {
		sy = g_hgtFixedMenu;
	}
	// フッターには重ならない
	else if (sy > max) {
		sy = max
	}
	document.getElementById('mnuSide').style.top = sy + "px";
}

//-----------------------------------------------
// サブ画面呼び出しエラーチェック
function checkError(result) {

	var checker = 0;
	try {
		checker = parseInt(result.responseText);
	} catch(e) {}

	// エラーコードが返って来た場合は、ログアウト画面へ遷移
	if (checker == -204 || checker == -205) {
		var form = document.frmRedirect;
		form.action = "http://www.marinargolden.com/register.php"
		form.lang.value = g_lang;
		form.command.value = g_command;
		form.args.value = checker;
		form.submit();
		return true;
	}
	return false;
}

//-----------------------------------------------
// ヘッダーメニューハンドラー
function mnuHeader_DoFSCommand(command, args) {

	// 選択中のボタンは起動しない
	if (g_command == (command + args)) {
		return;
	}

	var form = document.frmRedirect;
	var strNew = "inline";
	var strArgs = "";
	g_hgtFixedMenu = 800;
	g_hgtMovedMenu = 300;

	// 制御ループ
	do {
		// SSLから外れます
		if (command != "Qa" && g_ssl && g_mode == 0) {
			form.action = "http://www.marinargolden.com/"
			form.lang.value = g_lang;
			form.command.value = command;
			form.args.value = args;
			form.submit();
			return;
		}
		if (command == "Qa") {
			// SSL対応へ
			if (!g_ssl) {
				form.action = "https://cs045.xbit.jp/~w045173/"
				form.lang.value = g_lang;
				form.command.value = command;
				form.args.value = args;
				form.submit();
				return;
			}
			break;
		}
		if (command == "Blog") { break; }
		if (command == "Puppy") { break; }
		if (command == "Golden") {
			switch (args) {
			case "MStandard":
			case "SSOutward00":
			case "SSOutward01":
			case "SSOutward02":
			case "SSOutward03":
			case "SSOutward04":
			case "SSOutward05":
			case "SSOutward06":
			case "SSOutward07":
			case "SSOutward08":
				strArgs = args;
				args = "MStandard";
				break;
			}
			strNew = "none";
			g_hgtFixedMenu = 335;
			g_hgtMovedMenu = 740;
			break;
		}
		if (command == "Gallery") {
			alert("写真館は作成中です_(._.)_");
			return;
		}
		if (command == "Info") {
			g_hgtMovedMenu = 370;
			break;
		}
		if (command == "Link") {
			strNew = "none";
			g_hgtFixedMenu = 335;
			g_hgtMovedMenu = 750;
			break;
		}
		if (command == "Private") {
			strNew = "none";
			g_hgtFixedMenu = 335;
			g_hgtMovedMenu = 750;
			break;
		}
		// 強制終了
		return;
	} while (false);

	// 呼び出し判定
	var isCall = true;
	if (g_command.indexOf("MStandard") != -1 && args == "MStandard") {
		isCall = false;
	}

	g_command = command + args;

	// 呼び出し
	if (isCall) {
		document.getElementById("mnuNew").style.display = strNew;
		document.getElementById("mnuSide").style.top = g_hgtFixedMenu + "px";

		var strParam = "";
		strParam = strParam + "lang=" + g_lang
		strParam = strParam + "&command=" + command
		strParam = strParam + "&args=" + args
		strParam = strParam + "&hgtMovedMenu=" + g_hgtMovedMenu
		strParam = strParam + "&gAccessKey=" + form.gAccessKey.value;
		postXMLHttpRequest(g_mnuSide, "side_menu.php", strParam, true, showMnuSide);

		strParam = "";
		strParam = strParam + "lang=" + g_lang
		strParam = strParam + "&app=" + g_app
		strParam = strParam + "&gAccessKey=" + form.gAccessKey.value;
		postXMLHttpRequest(g_board, "brd" + args + ".php", strParam, false, showDummy);

		// 入れ替え
		if (g_safety) {
			showFront();
		}
		showBoard();
		// 入れ替え再設定処理
		switch (args) {
		case "BQa":
			changeBQDivision("1");
			break;
		case "BPuppy":
		case "MLineage":
			// lightbox.js で上手く動いてなかったので、こちらへ移植
			// さらに innerHTML にボードを表示する場合、このように再登録が必要
			initLightbox();
			break;
		}
		// フェードイン
		try {
			document.documentElement.scrollTop = 0;
			document.body.scrollTop = 0;
		} catch (e) {}
		// これもインタプリタの特性を活かしたあまり良くないプログラミング
		// 対象外ブラウザの場合はここをスルーすることでスクリプトエラーの発生を防ぐ
		if (g_safety) {
			new Effect.BlindUp("front", {duration:1, afterCall:showBoardAfter});
		}
		else {
			showBoardAfter();
		}
	}

	// 既にスタンダードが表示され居る場合は、スクロールのみ行う
	// スタンダードの初回表示は、該当の項目へ移動する
	if (args == "MStandard") {
		switch (strArgs) {
		case "SSOutward01": gotoElement('SSOutward01'); break;
		case "SSOutward02": gotoElement('SSOutward02'); break;
		case "SSOutward03": gotoElement('SSOutward03'); break;
		case "SSOutward04": gotoElement('SSOutward04'); break;
		case "SSOutward05": gotoElement('SSOutward05'); break;
		case "SSOutward06": gotoElement('SSOutward06'); break;
		case "SSOutward07": gotoElement('SSOutward07'); break;
		case "SSOutward08": gotoElement('SSOutward08'); break;
		default:            gotoElement('SSOutward00'); break;
		}
	}
}

//-----------------------------------------------
// ブログタイトルハンドラー
function ttlBlog_DoFSCommand(command, args) {
	window.open("http://maps.google.co.jp/maps?f=q&source=s_q&hl=ja&geocode=&q=%E7%A6%8F%E5%B2%A1%E7%9C%8C%E7%A6%8F%E5%B2%A1%E5%B8%82%E8%A5%BF%E5%8C%BA%E5%A5%B3%E5%8E%9F%EF%BC%92%EF%BC%92%EF%BC%95%EF%BC%8D%EF%BC%95&sll=36.5626,136.362305&sspn=63.890624,80.419922&brcurrent=3,0x3541eba681aa87b1:0x1e6b7c8b40c7ecb3,0&ie=UTF8&hq=&hnear=%E7%A6%8F%E5%B2%A1%E7%9C%8C%E7%A6%8F%E5%B2%A1%E5%B8%82%E8%A5%BF%E5%8C%BA%E5%A5%B3%E5%8E%9F%EF%BC%92%EF%BC%92%EF%BC%95%E2%88%92%EF%BC%95&z=17", "_blank");
}

//-----------------------------------------------
// ログイン情報を送信します
function login() {
	// ポストします。
	document.frmLogin.post.value = "1";
	document.frmLogin.btnSubmit.click();
}

//-----------------------------------------------
// ログインエラーを表示します
function showLoginError(nStatus, strMsg) {
	// エラー処理
	form = document.frmLogin;
	var status = 0;
	try {
		status = parseInt(nStatus);
	} catch(e) {}
	if (status < 1) {
		alert(strMsg);
		switch (status) {
		case -1: form.txtUserId.focus(); break;
		case -2: form.txtPassword.focus(); break;
		}
	}
}

//-----------------------------------------------
// 区分変更時に対応するラベルを設定します
function changeBQDivision(value) {

	var form = document.frmSendMail;
	var msgMail = "";
	var msgTel = "";
	var msgName = "";

	// 変更対応
	if (value == "0" || value == "1" || value == "2") {
		msgMail = form.hdnInfoMail1.value;
		msgName = form.hdnInfoNotEmpty.value;
		msgTel = form.hdnInfoTel.value;
		// ブラウザ間でここまで挙動が違う属性も珍しい、マジデ統一してください
		// FireFox と Opera 間でも実装方法が異なる上に、
		// ブラウザのバージョン間でも違ってきそうなので、
		// 複雑な実装をして IE の挙動に近づけるよりも、
		// 多少表示上の見栄えは悪くてもソースのシンプルさを取りました。
		if (g_app == "IE") {
			document.getElementById("rowTel1").style.display = "inline";
			document.getElementById("rowTel2").style.display = "inline";
			document.getElementById("rowAddress1").style.display = "inline";
			document.getElementById("rowAddress2").style.display = "inline";
			document.getElementById("rowSubject1").style.display = "inline";
			document.getElementById("rowSubject2").style.display = "inline";
		}
		else {
			document.getElementById("rowTel1").style.visibility = "visible";
			document.getElementById("rowTel2").style.visibility = "visible";
			document.getElementById("rowAddress1").style.visibility = "visible";
			document.getElementById("rowAddress2").style.visibility = "visible";
			document.getElementById("rowSubject1").style.visibility = "visible";
			document.getElementById("rowSubject2").style.visibility = "visible";
		}
	}
	else {
		msgMail = form.hdnInfoMail2.value;
		if (g_app == "IE") {
			document.getElementById("rowTel1").style.display = "none";
			document.getElementById("rowTel2").style.display = "none";
			document.getElementById("rowAddress1").style.display = "none";
			document.getElementById("rowAddress2").style.display = "none";
			document.getElementById("rowSubject1").style.display = "none";
			document.getElementById("rowSubject2").style.display = "none";
		}
		else {
			document.getElementById("rowTel1").style.visibility = "hidden";
			document.getElementById("rowTel2").style.visibility = "hidden";
			document.getElementById("rowAddress1").style.visibility = "hidden";
			document.getElementById("rowAddress2").style.visibility = "hidden";
			document.getElementById("rowSubject1").style.visibility = "hidden";
			document.getElementById("rowSubject2").style.visibility = "hidden";
		}
	}
	document.getElementById("lblDivision").innerHTML = form.hdnInfoDivision.value;
	document.getElementById("lblMail").innerHTML = msgMail;
	document.getElementById("lblTel").innerHTML = msgTel;
	document.getElementById("lblName").innerHTML = msgName;
	document.getElementById("lblAddress").innerHTML = "";
	document.getElementById("lblSubject").innerHTML = "";
	document.getElementById("lblContent").innerHTML = form.hdnInfoNotEmpty.value;
}

//-----------------------------------------------
// メールを送信します
function sendBQMail() {

	// パラメータ生成
	var form = document.frmSendMail;
	var strUrl = "brdBQa.php";
	var strParam = "";
	strParam = strParam + "lang=" + encodeURIComponent(g_lang);
	strParam = strParam + "&app=" + encodeURIComponent(g_app);
	strParam = strParam + "&cboDivision=" + encodeURIComponent(form.cboDivision.value);
	strParam = strParam + "&txtMail1=" + encodeURIComponent(form.txtMail1.value);
	strParam = strParam + "&txtMail2=" + encodeURIComponent(form.txtMail2.value);
	strParam = strParam + "&txtMail3=" + encodeURIComponent(form.txtMail3.value);
	strParam = strParam + "&txtTel1=" + encodeURIComponent(form.txtTel1.value);
	strParam = strParam + "&txtTel2=" + encodeURIComponent(form.txtTel2.value);
	strParam = strParam + "&txtTel3=" + encodeURIComponent(form.txtTel3.value);
	strParam = strParam + "&txtName=" + encodeURIComponent(form.txtName.value);
	strParam = strParam + "&txtPostCode1=" + encodeURIComponent(form.txtPostCode1.value);
	strParam = strParam + "&txtPostCode2=" + encodeURIComponent(form.txtPostCode2.value);
	strParam = strParam + "&txtAddress=" + encodeURIComponent(form.txtAddress.value);
	strParam = strParam + "&txtSubject=" + encodeURIComponent(form.txtSubject.value);
	strParam = strParam + "&txtContent=" + encodeURIComponent(form.txtContent.value);
	strParam = strParam + "&gAccessKey=" + encodeURIComponent(document.frmRedirect.gAccessKey.value);

	// メール送信
	postXMLHttpRequest(g_board, strUrl, strParam, false, showDummy);
	showBoard();

	// 終了処理
	form = document.frmSendMail;
	form.cboDivision.selectedIndex = parseInt(form.hdnDivision.value);
	changeBQDivision(form.hdnDivision.value);
	document.getElementById("lblDivision").innerHTML = form.hdnMsgDivision.value;
	document.getElementById("lblMail").innerHTML = form.hdnMsgMail.value;
	document.getElementById("lblTel").innerHTML = form.hdnMsgTel.value;
	document.getElementById("lblName").innerHTML = form.hdnMsgName.value;
	document.getElementById("lblAddress").innerHTML = form.hdnMsgAddress.value;
	document.getElementById("lblSubject").innerHTML = form.hdnMsgSubject.value;
	document.getElementById("lblContent").innerHTML = form.hdnMsgContent.value;

	// エラー処理
	var status = 0;
	try {
		status = parseInt(form.hdnStatus.value);
	} catch(e) {}
	if (status < 1) {
		alert(form.hdnMsgError.value);
		switch (status) {
		case -1: form.cboDivision.focus(); break;
		case -4: form.txtMail1.focus(); break;
		case -3: form.txtMail2.focus(); break;
		case -2: form.txtMail3.focus(); break;
		case -7: form.txtTel1.focus(); break;
		case -6: form.txtTel2.focus(); break;
		case -5: form.txtTel3.focus(); break;
		case -8: form.txtName.focus(); break;
		case -11: form.txtPostCode1.focus(); break;
		case -10: form.txtPostCode2.focus(); break;
		case -9: form.txtAddress.focus(); break;
		case -12: form.txtSubject.focus(); break;
		case -13: form.txtContent.focus(); break;
		}
	}
}

//-----------------------------------------------
// ユーザーＩＤ変更時に対応する情報を設定します
function changeBPUserId(value) {

	// メッセージ初期化
	var form = document.frmPrivate;
	document.getElementById("lblUserId").innerHTML = "";
	document.getElementById("lblPassword").innerHTML = "";
	document.getElementById("lblFirstName").innerHTML = "";
	document.getElementById("lblLastName").innerHTML = "";
	document.getElementById("lblHandleName").innerHTML = form.hdnInfoHandleName.value;
	document.getElementById("lblLang").innerHTML = "";
	var lblAuthority = document.getElementById("lblAuthority");
	if (lblAuthority) {
		lblAuthority.innerHTML = "";
	}

	// パラメータ生成
	var strUrl = "brdBPrivate.php";
	var strParam = "";
	strParam = strParam + "lang=" + encodeURIComponent(g_lang);
	strParam = strParam + "&app=" + encodeURIComponent(g_app);
	strParam = strParam + "&post=6";
	strParam = strParam + "&txtUserId=" + encodeURIComponent(value);
	strParam = strParam + "&gAccessKey=" + encodeURIComponent(document.frmRedirect.gAccessKey.value);

	// ユーザー情報取得
	postXMLHttpRequest(g_checker, strUrl, strParam, false, showDummy);
	// エラーコードが返って来た場合は、ログアウト画面へ遷移
	if (checkError(g_checker)) {
		return;
	}

	// ユーザー情報クラスを生成
	var user = eval(g_checker.responseText);

	// ユーザー情報設定
	form = document.frmPrivate;
	form.txtUserId.value = user.userId;
	form.txtPassword.value = "";
	form.txtFirstName.value = user.firstName;
	form.txtLastName.value = user.lastName;
	form.txtHandleName.value = user.handleName;
	if (form.rdoAuthority) {
		for (var i = 0; i < form.rdoAuthority.length; i++) {
			if (form.rdoAuthority[i].value == user.authority) {
				form.rdoAuthority[i].checked = true;
				break;
			}
		}
	}

	// ユーザー情報取得失敗
	if (user.error != "") {
		document.getElementById("lblUserId").innerHTML = user.error;
	}
}

//-----------------------------------------------
// ユーザー情報を管理します
function controlBP(post1, post2) {

	// 権限チェック用パラメータ生成
	var form = document.frmPrivate;
	var strUrl = "brdBPrivate.php";
	var strParam = "";
	strParam = strParam + "lang=" + encodeURIComponent(g_lang);
	strParam = strParam + "&app=" + encodeURIComponent(g_app);
	strParam = strParam + "&post=" + encodeURIComponent(post1);
	if (form.txtUserId) {
		strParam = strParam + "&txtUserId=" + encodeURIComponent(form.txtUserId.value);
	}
	strParam = strParam + "&txtPassword=" + encodeURIComponent(form.txtPassword.value);
	strParam = strParam + "&txtFirstName=" + encodeURIComponent(form.txtFirstName.value);
	strParam = strParam + "&txtLastName=" + encodeURIComponent(form.txtLastName.value);
	strParam = strParam + "&txtHandleName=" + encodeURIComponent(form.txtHandleName.value);
	strParam = strParam + "&rdoLang=" + encodeURIComponent(form.rdoLang.value);
	if (form.rdoAuthority) {
		for (var i = 0; i < form.rdoAuthority.length; i++) {
			if (form.rdoAuthority[i].checked) {
				strParam = strParam + "&rdoAuthority=" + encodeURIComponent(form.rdoAuthority[i].value);
				break;
			}
		}
	}
	strParam = strParam + "&gAccessKey=" + encodeURIComponent(document.frmRedirect.gAccessKey.value);

	// 権限チェック
	postXMLHttpRequest(g_checker, strUrl, strParam, false, showDummy);
	// エラーコードが返って来た場合は、ログアウト画面へ遷移
	if (checkError(g_checker)) {
		return;
	}

	// 権限チェック情報クラスを生成
	var authority = eval(g_checker.responseText);

	// 権限チェックに従ってメッセージ出力
	if (authority.status < 0) {
		alert(authority.msg);
		if (form.txtUserId) {
			form.txtUserId.focus();
		}
		else {
			form.txtPassword.focus();
		}
		return false;
	}
	else if (!confirm(authority.msg)) {
		return false;
	}

	// 実行用パラメータ生成
	form = document.frmPrivate;
	strParam = "";
	strParam = strParam + "lang=" + encodeURIComponent(g_lang);
	strParam = strParam + "&app=" + encodeURIComponent(g_app);
	strParam = strParam + "&post=" + encodeURIComponent(post2);
	if (form.txtUserId) {
		strParam = strParam + "&txtUserId=" + encodeURIComponent(form.txtUserId.value);
	}
	strParam = strParam + "&txtPassword=" + encodeURIComponent(form.txtPassword.value);
	strParam = strParam + "&txtFirstName=" + encodeURIComponent(form.txtFirstName.value);
	strParam = strParam + "&txtLastName=" + encodeURIComponent(form.txtLastName.value);
	strParam = strParam + "&txtHandleName=" + encodeURIComponent(form.txtHandleName.value);
	strParam = strParam + "&rdoLang=" + encodeURIComponent(form.rdoLang.value);
	if (form.rdoAuthority) {
		for (var i = 0; i < form.rdoAuthority.length; i++) {
			if (form.rdoAuthority[i].checked) {
				strParam = strParam + "&rdoAuthority=" + encodeURIComponent(form.rdoAuthority[i].value);
				break;
			}
		}
	}
	strParam = strParam + "&gAccessKey=" + encodeURIComponent(document.frmRedirect.gAccessKey.value);

	// 実行
	postXMLHttpRequest(g_board, strUrl, strParam, false, showDummy);
	showBoard();

	// 終了処理
	form = document.frmPrivate;
	document.getElementById("lblUserId").innerHTML = form.hdnMsgUserId.value;
	document.getElementById("lblPassword").innerHTML = form.hdnMsgPassword.value;
	document.getElementById("lblFirstName").innerHTML = form.hdnMsgFirstName.value;
	document.getElementById("lblLastName").innerHTML = form.hdnMsgLastName.value;
	document.getElementById("lblHandleName").innerHTML = form.hdnMsgHandleName.value;
	document.getElementById("lblLang").innerHTML = form.hdnMsgLang.value;
	var lblAuthority = document.getElementById("lblAuthority");
	if (lblAuthority) {
		lblAuthority.innerHTML = form.hdnMsgAuthority.value;
	}

	// エラー処理
	var status = 0;
	try {
		status = parseInt(form.hdnStatus.value);
	} catch(e) {}
	if (status < 1) {
		alert(form.hdnMsgDialog.value);
		switch (status) {
		case -1:
			if (form.txtUserId) {
				form.txtUserId.focus();
			}
			else {
				form.txtPassword.focus();
			}
			break;
		case -2: form.txtPassword.focus(); break;
		case -3: form.txtFirstName.focus(); break;
		case -4: form.txtLastName.focus(); break;
		case -5: form.txtHandleName.focus(); break;
		case -6: form.rdoLang.focus(); break;
		case -7:
			if (form.rdoAuthority) {
				form.rdoAuthority[0].focus();
			}
			break;
		}
	}
	else if (status >= 2) {
		alert(form.hdnMsgDialog.value);
	}
}

//-----------------------------------------------
// ユーザー情報を登録します
function registBP() {
	controlBP(8, 2);
}

//-----------------------------------------------
// ユーザー情報を削除します
function deleteBP() {
	controlBP(9, 4);
}

//-----------------------------------------------
// ブログ記事を管理します
function controlBB(post1, post2, no, userNo) {

	// 権限チェック用パラメータ生成
	var strUrl = "brdBBlog.php";
	var strParam = "";
	strParam = strParam + "lang=" + encodeURIComponent(g_lang);
	strParam = strParam + "&app=" + encodeURIComponent(g_app);
	strParam = strParam + "&post=" + encodeURIComponent(post1);;
	strParam = strParam + "&no=" + encodeURIComponent(no);
	strParam = strParam + "&userNo=" + encodeURIComponent(userNo);
	strParam = strParam + "&gAccessKey=" + encodeURIComponent(document.frmRedirect.gAccessKey.value);

	// 権限チェック
	postXMLHttpRequest(g_checker, strUrl, strParam, false, showDummy);
	// エラーコードが返って来た場合は、ログアウト画面へ遷移
	if (checkError(g_checker)) {
		return;
	}

	// 権限チェック情報クラスを生成
	var authority = eval(g_checker.responseText);

	var form = document.frmEntryBlog;

	// 権限チェックに従ってメッセージ出力
	if (authority.status < 0) {
		alert(authority.msg);
		if (form) {
			form.txtTitle.focus();
		}
		return false;
	}
	else if (authority.status == 0) {}
	else if (!confirm(authority.msg)) {
		return false;
	}

	// 実行用パラメータ生成
	strParam = "";
	strParam = strParam + "lang=" + encodeURIComponent(g_lang);
	strParam = strParam + "&app=" + encodeURIComponent(g_app);
	strParam = strParam + "&post=" + encodeURIComponent(post2);
	strParam = strParam + "&no=" + encodeURIComponent(no);
	strParam = strParam + "&userNo=" + encodeURIComponent(userNo);
	if (form) {
		strParam = strParam + "&txtTitle=" + encodeURIComponent(form.txtTitle.value);
		strParam = strParam + "&txtText=" + encodeURIComponent(form.txtText.value);
		if (form.rdoBack) {
			for (var i = 0; i < form.rdoBack.length; i++) {
				if (form.rdoBack[i].checked) {
					strParam = strParam + "&rdoBack=" + encodeURIComponent(form.rdoBack[i].value);
					break;
				}
			}
		}
	}
	strParam = strParam + "&gAccessKey=" + encodeURIComponent(document.frmRedirect.gAccessKey.value);

	// 実行
	postXMLHttpRequest(g_board, strUrl, strParam, false, showDummy);
	showBoard();

	// 終了処理
	form = document.frmEntryBlog;
	var pForm = document.frmBlog;
	if (form) {
		document.getElementById("lblTitle").innerHTML = pForm.hdnMsgTitle.value;
		document.getElementById("lblText").innerHTML = pForm.hdnMsgText.value;
		document.getElementById("lblBack").innerHTML = pForm.hdnMsgBack.value;
	}

	// エラー処理
	var status = 0;
	try {
		status = parseInt(pForm.hdnStatus.value);
	} catch(e) {}
	if (status < 1) {
		alert(pForm.hdnMsgDialog.value);
		if (form) {
			switch (status) {
			case -1: form.txtTitle.focus(); break;
			case -2: form.txtText.focus(); break;
			case -3: form.rdoBack[0].focus(); break;
			}
		}
	}
	else if (status == 2) {
		alert(pForm.hdnMsgDialog.value);
		document.getElementById("closeLITBox").click();
	}
	else if (status == 3) {
		alert(pForm.hdnMsgDialog.value);
	}
}

//-----------------------------------------------
// ブログ記事を登録します
function registBB(no, userNo) {
	controlBB(8, 2, no, userNo);
}

//-----------------------------------------------
// ブログ記事を削除します
function deleteBB(no, userNo) {
	controlBB(9, 4, no, userNo);
}

//-----------------------------------------------
// ブログ記事を承認します
function approveBB(no, userNo) {
	controlBB(10, 5, no, userNo);
}

//-----------------------------------------------
// ブログ記事を否認します
function denyBB(no, userNo, showDelete) {
	if (showDelete) {
		controlBB(12, 7, no, userNo);
	} else {
		controlBB(11, 6, no, userNo);
	}
}

//-----------------------------------------------
// 選択範囲をタグで囲みます
function addTag(target, startTag, endTag) {

	var element = document.getElementById(target);

	// フォーカスを強制移動することで、対象を固定
	element.focus();

	if (g_app == "IE") {
		// 選択中の TextRange を取得
		var selected = document.selection.createRange();

		// タグを追加
		selected.text = startTag + selected.text + endTag;

		// 制御対象の TextRange を取得
		// selection から生成された TextRange では、エレメントの選択範囲を制御できない
		// しかも、body から生成して範囲を制御対象に設定しないと、動いてくれない
		// なんでやねん！！ これを実装するのに４時間かかった・・・
		var rangeText = document.body.createTextRange();
		rangeText.moveToElementText(element);

		// 範囲の終点にカーソルを移動
		rangeText.setEndPoint("StartToEnd", selected);
		rangeText.setEndPoint("EndToEnd", selected);
		rangeText.select();
	}
	else {
		// 選択中の範囲を取得
		var start = element.selectionStart;
		var end = element.selectionEnd;
		var value = element.value;

		// タグを追加
		var text = value.substring(0, start);
		text = text + startTag + value.substring(start, end) + endTag;
		text = text + value.substring(end);

		element.value = text;

		// 範囲の終点にカーソルを移動
		var pos = end + startTag.length + endTag.length;
		element.setSelectionRange(pos, pos);
	}
}

//-----------------------------------------------
// 選択範囲を太字タグで囲みます
function addStrong(target) {
	addTag(target, "<太字>", "</太字>");
}

//-------------------------------------------------------------------------------------------------
// 初回実行スクリプト
// メニュー移動の関数を設定します
window.onscroll = scrollMenu;
window.onresize = scrollMenu;
// ブラウザとバージョンを判定します
g_app = navigator.userAgent.toUpperCase();
if (g_app.indexOf("FIREFOX") != -1) {
	try {
		var strBuf = "";
		strBuf = g_app.substring(g_app.indexOf("FIREFOX/") + "FIREFOX/".length);
		g_version = parseFloat(strBuf);
	} catch (e) {}
	if (g_version >= 3.6) {
		g_safety = true;
	}
	g_app = "FF";
}
else if (g_app.indexOf("OPERA") != -1) {
	try {
		var strBuf = "";
		strBuf = g_app.substring(g_app.indexOf("VERSION/") + "VERSION/".length);
		g_version = parseFloat(strBuf);
	} catch (e) {}
	if (g_version >= 10.5) {
		g_safety = true;
	}
	g_app = "OP";
}
else if (g_app.indexOf("MSIE") != -1) {
	try {
		var strBuf = "";
		strBuf = g_app.substring(g_app.indexOf("MSIE ") + "MSIE ".length);
		strBuf = strBuf.substring(0, strBuf.indexOf(";"));
		g_version = parseFloat(strBuf);
	} catch (e) {}
	if (g_version >= 8.0) {
		g_safety = true;
	}
	g_app = "IE";
}
else {
	g_app = "";
}

// 部品の呼び出し
// １．部品のＨＴＭＬは、ＵＴＦ－８形式で保存しておくこと
// ２．responseText で正しくＵＴＦ－８形式を取得できないブラウザは、対象外とする
// ３．中国語は、ＵＴＦ－８形式でも文字化けするので、文字も画像にして表示するつもり・・・
if (g_lang == null) {
	// g_lang が外部で宣言されなかった場合の処理
	// インタプリタなので動く・・・ただし会社でこれを使ったらダメ
	// 危険極まりない手品みたいなプログラミング
	var g_lang = "jp";
}
