	var working;
	var koilist_loading;
	var lotlist_loading;
	var fixlist_loading;
	var list_checking;
	var chat_loading;
	var last_cart;
	var poeProductList = null;
	var poeChatList = null;
	var poeLiveState = null;
	var load_live_control = false;

	// 定期実行スクリプト
	function loopExe(mode) {
		//chkProductList();
		//var poeProductList = new PeriodicalExecuter(loadPdtList, 60);
		// ライブ画面制御
		if (mode == "real" || mode == "test") {
			getLiveState();
			poeChatList = new PeriodicalExecuter(loadChatList, 5);
			poeLiveState = new PeriodicalExecuter(getLiveState, 10);
		}
	}

	// 定期実行スクリプト(英語版)
	function loopEExe() {
		// ライブ画面制御
		if (skey != "") {
			loadEPdtList();
			poeLiveState = new PeriodicalExecuter(loadEPdtList, 60);
		}
	}

	function getLiveState () {
		objDate = new Date();
		var a = new Ajax.Request(
			"/store/live/ajax.php", {
				method: "get", parameters: "r=getstate&lang=" + lang_mode + "&stamp" + objDate.toTimeString(),
				onSuccess: function(httpObj) { liveControl(httpObj.responseText); },
				onFailure: function(httpObj) { },
				onException: function (httpObj) { }
			}
		);
	}

	// 状態が切り替わったときに指定の処理を行う。
	function liveControl (now_state) {
		if (now_state == "") return;							// 状態を取得できなかった
		//$("debug_area").innerHTML = live_state + " : " + now_state + "<br />" + $("debug_area").innerHTML;
		if (live_state == now_state) return;			// 状態に変化なし
		if (load_live_control == true) return;		// 処理を実行中
		load_live_control = true;
		live_state = now_state;

		if (live_state == "live") { loadPdtList(); }
		// ライブ状況更新
		objDate = new Date();
		var a = new Ajax.Updater(
			"live_window", "/store/live/ajax.php",
			{
				method: "get", parameters : "r=getmovie&lang=" + lang_mode + "&state=" + live_state + "&stamp" + objDate.toTimeString(),
				onSuccess: function(httpObj) { load_live_control = false; },
				onFailure: function(httpObj) { load_live_control = false; },
				onException: function (httpObj) { load_live_control = false; }
			}
		);
	}

	function chkProductList () {
		if (list_checking == true) return;
		list_checking = true;
		var a;
		var elements = document.getElementsByClassName("btn_incart");
		for (i = 0; i < elements.length; i++) {
			params = "r=chkbottun&target=" + elements[i].id;
			a = new Ajax.Updater(
				elements[i].id, "/store/live/ajax.php",
				{
					method: "post", postBody: params,
					onSuccess: function(httpObj) { list_checking = false; },
					onFailure: function(httpObj) { list_checking = false; },
					onException: function (httpObj) { list_checking = false; }
				}
			);
		}
	}

	// 錦鯉予約チェックと予約
	function chkAddProduct(pid, ccid1, ccid2, quantity) {
		if (skey == "") { alertLang("ログインしてからではないとご購入いただけません", "Please login to order."); return; }
		if (working == true) return;
		working = true;
		Element.setStyle($("loader_" + pid + "_" + ccid2), { visibility:'visible' });
		params = "r=chkaddproduct";
		params += "&skey=" + skey;
		params += "&product_id=" + pid;
		params += "&classcategory_id1=" + ccid1;
		params += "&classcategory_id2=" + ccid2;

		var a = new Ajax.Request(
			"/store/live/ajax.php", {
				method: "post", postBody: params,
				onSuccess: function(httpObj) {
					switch (httpObj.responseText) {
						case "ok":
							//$("cartrow_new").innerHTML = "<div style='text-align:center;margin:5px 0px;background:#fff;color:#f33;'>追加処理中</div>";
							$("cartrow_new").innerHTML = "<div style='width:128px;margin:5px auto;'><img src='/store/user_data/packages/default/img/live/loader2.gif' /></div>";
							viewCart("loader_" + pid + "_" + ccid2);
							chgCartBtn(pid, ccid2, "reserve");
							break;
						case "self":  viewCart("loader_" + pid + "_" + ccid2); alertLang("既にカゴに入っています", "The item is already in the shopping cart."); chgCartBtn(pid, ccid2, "reserve"); break;
						case "no":    alertLang("他の方が予約しています", "The item cannot be ordered. It is reserved by other customers."); chgCartBtn(pid, ccid2, "reserve"); break;
						case "sold":  alertLang("既に販売されました", "The item has been sold out."); chgCartBtn(pid, ccid2, "sold"); break;
						case "login": alertLang("ログインしてからではないとご購入いただけません", "Please login to order."); break;
						default:      chgCartBtn(pid, ccid2, "incart"); break;
					}
					if (httpObj.responseText != "ok" && httpObj.responseText != "self") {
						Element.setStyle($("loader_" + pid + "_" + ccid2), { visibility:'hidden' });
					}
					working = false;
					return;
				},
				onFailure: function(httpObj) {
					alertLang('予期せぬエラーが発生しました。弊社までお問い合わせください。', 'An error occurred. Please contact us.');
					Element.setStyle($("loader_" + pid + "_" + ccid2), { visibility:'hidden' });
					working = false;
					return;
				},
				onException: function (httpObj) {
					viewCart();
					Element.setStyle($("loader_" + pid + "_" + ccid2), { visibility:'hidden' });
					working = false;
					return;
				}
			}
		);
	}

	// 錦鯉予約チェックと予約
	function chkEntryLot(lotid, lang) {
		if (skey == "") { alertLang("ログインしてからではないとご購入いただけません", "Please login to order."); return; }
		if (working == true) return;
		working = true;
		params = "r=chkentrylot";
		params += "&skey=" + skey;
		params += "&lotid=" + lotid;

		var a = new Ajax.Request(
			"/store/live/mail.php", {
				method: "post", postBody: params,
				onSuccess: function(httpObj) {
					switch (httpObj.responseText) {
						case "ok": alertLang("お申し込み完了メールを送信いたしました。", "An auto-reply email has been sent."); break;
						case "self":  alertLang("既に申込が完了しています。", "Your registration has been completed already."); break;
						case "no":    alertLang("応募を締め切ったため、お申し込みできませんでした", "Your registration was not completed due to the deadline."); break;
						case "sold":  alertLang("定員を越えたため、お申し込みできませんでした", "Your registration was not completed because the registration number isreached."); break;
						case "login": alertLang("ログインしてからではないとご購入いただけません", "Please login to order."); break;
						default:      alertLang("予期せぬエラーが発生しました。成田養魚園までお問い合わせください。", "An error occurred. Please contact us."); break;
					}
					Element.update($("lotconfirm_button"), "<a href='javascript:void(0);' onclick='iBox.hide();'><img src='/store/user_data/packages/default/img/live/btn_live_close.gif' alt='キャンセル' /></a>");
					working = false;
					return;
				},
				onFailure: function(httpObj) {
					alertLang('予期せぬエラーが発生しました。弊社までお問い合わせください。', 'An error occurred. Please contact us.');
					working = false;
					return;
				},
				onException: function (httpObj) {
					working = false;
					return;
				}
			}
		);
	}


	// 錦鯉予約チェックと予約
	function chkEntryFix(fixid, lang) {
		if (skey == "") { alertLang("ログインしてからではないとご購入いただけません。", "Please login to order."); return; }
		if ($("choice_tel").checked == false && $("choice_entrust").checked == false) { alertLang("ご自身で鯉を選択されるか、依頼するかをご選択ください。", "Please select the method."); return; }
		if ($("choice_tel").checked == true && $F("telno") == "") { alertLang("電話番号をご入力ください。", "Please input the telephone number."); return; }
		if (working == true) return;
		working = true;
		params = "r=chkentryfix";
		params += "&skey=" + skey;
		params += "&fixid=" + fixid;
		if ($("choice_tel").checked) {
			params += "&choice=tel";
			params += "&telno=" + $F("telno");
		} else {
			params += "&choice=entrust";
		}

		var a = new Ajax.Request(
			"/store/live/mail.php", {
				method: "post", postBody: params,
				onSuccess: function(httpObj) {
					switch (httpObj.responseText) {
						case "ok": alertLang("お申し込み完了メールを送信いたしました。", "An auto-reply email has been sent."); break;
						case "self":  alertLang("既に申込が完了しています。", "Your registration has been completed already."); break;
						case "no":    alertLang("応募を締め切ったため、お申し込みできませんでした", "Your registration was not completed due to the deadline."); break;
						case "sold":  alertLang("定員を越えたため、お申し込みできませんでした", "Your registration was not completed because the registration number isreached."); break;
						case "login": alertLang("ログインしてからではないとご購入いただけません", "Please login to order."); break;
						default:      alertLang("予期せぬエラーが発生しました。成田養魚園までお問い合わせください。", "An error occurred. Please contact us."); break;
					}
					Element.update($("fixconfirm_button"), "<a href='javascript:void(0);' onclick='iBox.hide();'><img src='/store/user_data/packages/default/img/live/btn_live_close.gif' alt='キャンセル' /></a>");
					working = false;
					return;
				},
				onFailure: function(httpObj) {
					alertLang('予期せぬエラーが発生しました。弊社までお問い合わせください。', 'An error occurred. Please contact us.');
					working = false;
					return;
				},
				onException: function (httpObj) {
					working = false;
					return;
				}
			}
		);
	}

	function chgCartBtn (pid, kid, state) {
		if (imgsrc == "") return;
		var html;
		switch (state) {
			case "incart":  html = "btn_live_incart.gif";  break;
			case "reserve": html = "btn_live_reserve.gif"; break;
			case "sold":    html = "btn_live_sold.gif";    break;
			default: html = "btn_live_incart.gif"; break;
		}
		if (lang_mode && lang_mode == "en") {
			html= '<img src="' + imgsrc + 'english/' + html + '" />';
		} else {
			html= '<img src="' + imgsrc + 'live/' + html + '" />';
		}
		$("bnt_incart_" + pid + "_" + kid).innerHTML = html;
	}

	function viewCart(loader) {
		try {
			if (lang_mode) {
				param = "r=viewcart&lang=" + lang_mode;
			} else {
				param = "r=viewcart";
			}
		} catch(e) {
			param = "r=viewcart";
		}

		var a = new Ajax.Updater(
			"outer_cartarea", "/store/live/ajax.php",
			{
				method: "get", parameters : param,
				onSuccess: function(httpObj) { try { if (loader != undefined && loader != "") { Element.setStyle($(loader), { visibility:'hidden' }); } } catch(e) { } },
				onFailure: function(httpObj) { try { if (loader != undefined && loader != "") { Element.setStyle($(loader), { visibility:'hidden' }); } } catch(e) { } },
				onException: function (httpObj) { try { if (loader != undefined && loader != "") { Element.setStyle($(loader), { visibility:'hidden' }); } } catch(e) { } }
			}
		);
	}

	function delProduct(pid, ccid1, ccid2) {
		//$("cartrow_" + pid + "_" + ccid1 + "_" + ccid2).innerHTML = "<div style='text-align:center;margin:5px 0px;background:#fff;color:#f33;'>取消処理中</div>";
		$("cartrow_" + pid + "_" + ccid1 + "_" + ccid2).innerHTML = "<div style='width:128px;margin:5px auto;'><img src='/store/user_data/packages/default/img/live/loader2.gif' /></div>";
		if (pid != "20000" && ccid1 == "koi") {
			params = "r=outcart";
			params += "&skey=" + skey;
			params += "&product_id=" + pid;
			params += "&classcategory_id1=" + ccid1;
			params += "&classcategory_id2=" + ccid2;

			var a = new Ajax.Request(
				"/store/live/ajax.php", {
					method: "post", postBody: params,
					onSuccess: function(httpObj) { viewCart(); },
					onFailure: function(httpObj) {  },
					onException: function (httpObj) {  }
				}
			);
		} else {
			params = "r=delcart";
			params += "&product_id=" + pid;
			params += "&classcategory_id1=" + ccid1;
			params += "&classcategory_id2=" + ccid2;

			var a = new Ajax.Updater(
				"outer_cartarea", "/store/live/ajax.php",
				{
					method: "post", postBody: params,
					onSuccess: function(httpObj) { },
					onFailure: function(httpObj) { },
					onException: function (httpObj) { }
				}
			);
		}
	}

	// イベント商品一覧取得
	function loadPdtList() {
		if (koilist_loading == true) return;
		koilist_loading = true;
		objDate = new Date();
		var a = new Ajax.Updater(
			"koi_list", "/store/live/ajax.php", {
				method : "get", parameters : "r=koilist&eid=" + live_event_id + "&skey=" + skey + "&stamp" + objDate.toTimeString() + "&" + Form.serialize("live_koi_search"),
				onSuccess : function(httpObj) { koilist_loading = false; },
				onFailure : function(httpObj) { koilist_loading = false; },
				onException : function (httpObj) { koilist_loading = false; }
			}
		);
	}

	// イベント抽選一覧取得
	function loadLotList() {
		if (lotlist_loading == true) return;
		lotlist_loading = true;
		objDate = new Date();
		var a = new Ajax.Updater(
			"lot_list", "/store/live/ajax.php", {
				method : "get", parameters : "r=lotlist&eid=" + live_event_id + "&skey=" + skey + "&stamp" + objDate.toTimeString(),
				onComplete  : function(httpObj) { lotlist_loading = false; hiddenClatArea("lot_list", 390); },
				onFailure   : function(httpObj) { lotlist_loading = false; },
				onException : function (httpObj) { lotlist_loading = false; }
			}
		);
	}

	// イベント定額一覧取得
	function loadFixList() {
		if (fixlist_loading == true) return;
		fixlist_loading = true;
		objDate = new Date();
		var a = new Ajax.Updater(
			"fix_list", "/store/live/ajax.php", {
				method : "get", parameters : "r=fixlist&eid=" + live_event_id + "&skey=" + skey + "&stamp" + objDate.toTimeString(),
				onComplete  : function(httpObj) { fixlist_loading = false; hiddenClatArea("fix_list", 390); },
				onFailure   : function(httpObj) { fixlist_loading = false; },
				onException : function (httpObj) { fixlist_loading = false; }
			}
		);
	}

	// イベント商品一覧取得
	function loadEPdtList() {
		if (koilist_loading == true) return;
		koilist_loading = true;
		objDate = new Date();
		var a = new Ajax.Updater(
			"koi_list", "/store/live/ajax.php", {
				method : "get", parameters : "r=koilistall" + "&skey=" + skey + "&stamp" + objDate.toTimeString() + "&" + Form.serialize("live_koi_search"),
				onSuccess : function(httpObj) { koilist_loading = false; },
				onFailure : function(httpObj) { koilist_loading = false; },
				onException : function (httpObj) { koilist_loading = false; }
			}
		);
	}


	// イベント抽選一覧取得
	function loadELotList() {
		if (lotlist_loading == true) return;
		lotlist_loading = true;
		objDate = new Date();
		var a = new Ajax.Updater(
			"lot_list", "/store/live/ajax.php", {
				method : "get", parameters : "r=lotlistall" + "&skey=" + skey + "&stamp" + objDate.toTimeString(),
				onComplete  : function(httpObj) { lotlist_loading = false; hiddenClatArea("lot_list", 390); },
				onFailure   : function(httpObj) { lotlist_loading = false; },
				onException : function (httpObj) { lotlist_loading = false; }
			}
		);
	}

	// イベント定額一覧取得
	function loadEFixList() {
		if (fixlist_loading == true) return;
		fixlist_loading = true;
		objDate = new Date();
		var a = new Ajax.Updater(
			"fix_list", "/store/live/ajax.php", {
				method : "get", parameters : "r=fixlistall" + "&skey=" + skey + "&stamp" + objDate.toTimeString(),
				onComplete  : function(httpObj) { fixlist_loading = false; hiddenClatArea("fix_list", 390); },
				onFailure   : function(httpObj) { fixlist_loading = false; },
				onException : function (httpObj) { fixlist_loading = false; }
			}
		);
	}

	// イベント商品一覧取得
	function loadTodayEvent() {
		// 検索条件変更
		Form.reset("live_koi_search");
		for (i=0;i<$("event").length;i++) {
			if ($('event').options[i].value == live_today_id) {
				$("event").selectedIndex = i;
			}
		}
		koilist_loading = false;
		live_state = "";
		loadEPdtList();
		loadEventData();
		loadEMovie("real", "", live_today_promo);
	}


	// イベント情報取得(英語)
	function loadEventData() {
		Element.update( $("live_data"), '');
		if ($F("event") == 0) return;

		objDate = new Date();
		var a = new Ajax.Updater(
			"live_data", "/store/live/ajax.php", {
				method : "get", parameters : "r=livedata&stamp" + objDate.toTimeString() + "&event=" + $F("event") + "&lang=" + lang_mode,
				onSuccess : function(httpObj) {  },
				onFailure : function(httpObj) {  },
				onException : function (httpObj) {  }
			}
		);
	}

	function addProduct(pid, ccid1, ccid2, quantity) {
		if (working == true) return;
		working = true;

		if ($("loader_" + pid + "_" + ccid2)) Element.setStyle($("loader_" + pid + "_" + ccid2), { visibility:'visible' });
		params = "r=incart";
		params += "&product_id=" + pid;
		params += "&classcategory_id1=" + ccid1;
		params += "&classcategory_id2=" + ccid2;
		params += "&quantity=" + quantity;
		var a = new Ajax.Updater(
			"outer_cartarea", "/store/live/ajax.php",
			{
				method: "get", parameters: params,
				onSuccess: function(httpObj) {
					if ($("loader_" + pid + "_" + ccid2)) Element.setStyle($("loader_" + pid + "_" + ccid2), { visibility:'hidden' });
					working = false;
					return;
				},
				onFailure: function(httpObj) {
					if ($("loader_" + pid + "_" + ccid2)) Element.setStyle($("loader_" + pid + "_" + ccid2), { visibility:'hidden' });
					working = false;
					return;
				},
				onException: function (httpObj) {
					if ($("loader_" + pid + "_" + ccid2)) Element.setStyle($("loader_" + pid + "_" + ccid2), { visibility:'hidden' });
					working = false;
					return;
				}
			}
		);
	}

	// イベント商品一覧取得
	function loadTestPdtList() {
		if (koilist_loading == true) return;
		koilist_loading = true;
		var a = new Ajax.Updater(
			"koi_list", "/store/live/ajax.php", {
				method : "get", parameters : "r=koilist&test=1&eid=" + live_event_id,
				onSuccess : function(httpObj) { koilist_loading = false; },
				onFailure : function(httpObj) { koilist_loading = false; },
				onException : function (httpObj) { koilist_loading = false; }
			}
		);
	}

	function loadChatList () {
		if (chat_loading == true) return;
		objDate = new Date();
		chat_loading = true;
		var a = new Ajax.Updater(
			"livechat", "/store/live/ajax.php", {
				method : "get", parameters : "r=getchat&stamp" + objDate.toTimeString(),
				onSuccess : function(httpObj) { chat_loading = false; hiddenClatArea("livechat", 200);  },
				onFailure : function(httpObj) { chat_loading = false; },
				onException : function (httpObj) { chat_loading = false; }
			}
		);
	}

	function hiddenClatArea (areaname, areaheight) {
		if ($(areaname)) {
			if ($(areaname).innerHTML == "") {
				Element.setStyle($(areaname),  { height:'0px' });
				//alert($(areaname).parent.outerHTML);
				//$(areaname).parent.outerHTML = "";
				if ($(areaname + "_title")) {
					Element.setStyle($(areaname + "_title"),  { height:'0px' });
					Element.setStyle($(areaname + "_title"),  { overflow:'hidden' });
					Event.stopObserving($(areaname + "_title").parent, "click");
					//alert($(areaname + "_title").parent.outerHTML);
					//$(areaname + "_title").parent.outerHTML = "";
				}
			} else {
				Element.setStyle($(areaname),  { height:areaheight + 'px' });
			}
		}
	}

	// 絞込み検索フォーム表示
	function openSearch() {
		Element.setStyle($("live_koi_search"),  { height:'auto' });
		Element.setStyle($("live_koi_search"),  { overflow:'visible' });
		Element.setStyle($("search_open_link"), { height:'0px' });
		Element.setStyle($("search_open_link"), { overflow:'hidden' });
		Element.setStyle($("koi_list"), { height:'320px' });
	}

	// 絞込み検索フォーム非表示
	function closeSearch() {
		Element.setStyle($("live_koi_search"),  { height:'0px' });
		Element.setStyle($("live_koi_search"),  { overflow:'hidden' });
		Element.setStyle($("search_open_link"), { height:'auto' });
		Element.setStyle($("search_open_link"), { overflow:'visible' });
		Element.setStyle($("koi_list"), { height:'450px' });
	}

	function loadLotConfirm(lot_id) {
		var param = new Object();
		param['width']  = 400; param['height'] = 400;
		iBox.showURL('/store/live/lotconfirm.php?lotid=' + lot_id + "&lang=" + lang_mode, '', param);
	}

	function loadFixConfirm(fix_id) {
		var param = new Object();
		param['width']  = 400; param['height'] = 400;
		iBox.showURL('/store/live/fixconfirm.php?fixid=' + fix_id + "&lang=" + lang_mode, '', param);
	}

	// 英語版注文確認
	function loadEngConfirm() {
		var param = new Object();
		param['width']  = 400; param['height'] = 400;
		iBox.showURL('/store/live/confirm/e_order.php', '', param);
	}

	// 英語版注文処理
	function odrEngProduct() {
		if (skey == "") { alert("Please login to order."); return; }
		params = "r=ordproduct";
		params += "&skey=" + skey;
		params += "&lang=" + lang_mode;

		var a = new Ajax.Request(
			"/store/live/ajax.php", {
				method: "post", postBody: params,
				onSuccess: function(httpObj) {
					switch (httpObj.responseText) {
						case "ok": viewCart(); alert("Thank you for the order."); break;
						case "login": alert("Please login to order."); break;
						case "err": alert("An error occurred. Please contact us."); break;
					}
					Element.update($("pdtconfirm_button"), "<a href='javascript:void(0);' onclick='iBox.hide();'><img src='/store/user_data/packages/default/img/english/btn_live_close.gif' alt='Close' /></a>");
					return;
				},
				onFailure: function(httpObj) {
					alert('An error occurred. Please contact us.');
					return;
				},
				onException: function (httpObj) {
					return;
				}
			}
		);
	}

	function parseNum ($val) {
		if ($val != "" && isNaN($val) == false) {
			return parseInt($val);
		} else {
			return "";
		}
	}

	function alertLang (jpmsg, enmsg) {
		try {
			if (lang_mode == "en") {
				alert(enmsg);
			} else {
				alert(jpmsg);
			}
		} catch(e) {
			alert(jpmsg);
		}
	}

	function loadEMovie (mtype, url, promo_url) {
		switch (mtype) {
			case "real" :
				if (url == "") {
					Element.update( $("movie_frame"), '<div id="live_window" style="width:460px;height:402px;"></div>');
					now_state = ''; getLiveState(); break;
				}
			case "past" :
				Element.update( $("movie_frame"), '<iframe src="' + url + '" scrolling="no" frameborder="0" style="width:460px;height:460px;border:0px;overflow:hidden;"></iframe>'); break;
			case "pdt" :
				Element.update( $("movie_frame"), '<iframe id="movie_window" src=' + url + ' scrolling="no" frameborder="0" style="width:430px;height:430px;border:0px;overflow:hidden;"></iframe>' );break;
		}
		if (promo_url != '' && promo_url != undefined && url != promo_url ) {
			Element.update( $("promo_frame"), '<iframe src="' + promo_url + '" scrolling="no" frameborder="0" style="width:430px;height:430px;border:0px;overflow:hidden;"></iframe>');
		} else {
			Element.update( $("promo_frame"), '');
		}
	}

	function scrollToBottom(el, force) {
		var bottom = el.scrollHeight - el.clientHeight;
		
		if (el.scrollTop == arguments.callee.scrollAtBottom || force === true) {
			el.scrollTop = bottom;
			arguments.callee.scrollAtBottom = bottom;
		}
	}

