var g_lock = false;

//指定したFormをサブミットする
function button_submit_target(form, name, value) {
	if(!g_lock) {
		var id = document.getElementById(form);
		var len = arguments.length;
		var param = new Array();
		for (var i = 1; i < len; i++) {
			param[i] = arguments[i];
		}
		g_lock = true;

		for (var ii = 1; ii < len; ii += 2) {
			eval("id." + arguments[ii]).value = arguments[ii + 1];
		}
		id.submit();
		if (!$.browser.msie) {
			g_lock = false;
		}
	}
	return false;
}

//指定したFormに値をセットする
function value_set_target(form, name, value) {
	var id = document.getElementById(form);
	var len = arguments.length;
	var param = new Array();
	for (var i = 1; i < len; i++) {
		param[i] = arguments[i];
	}
	for (var ii = 1; ii < len; ii += 2) {
		eval("id." + arguments[ii]).value = arguments[ii + 1];
	}
	return false;
}
/**
 * リンクのHREFを解析し、画面遷移用フォームのActionにURLをセット、
 * URLパラメータはhiddenにしてサブミットする.
 * この関数を使用する場合は、hrefにURLをセットし、onclick属性に関数をreturn付きで指定してください.
 * 例 <a href='/aaaa?xxx=aaa&bbbb=dddd' onclick='return linkHrefParse(this)'>XXXX</a>
 * d:linkを使用した場合は、記述しなくとも勝手に付加されます.
 * @param link aタグ
 * @return
 */
function linkHrefParse(link){
	if(!g_lock){
		g_lock = true;
		var f = document.getElementById('location_form');
		// formが無い場合は、何もしない
		if(f == null){
			alert('location_formがありません.');
			g_lock = false;
			return false;
		}
		// formの内部を初期化する
		f.innerHTML = '';
		var lh = link.href;
		if(lh.indexOf('?') > -1 ){
			// パラメータを取得
			var paramater = lh.split('?')[1];
			var params = paramater.split('&');
			for(var i = 0; i < params.length; i++){
				var keyValue = params[i].split('=');
				var ele = document.createElement('input');
				ele.type = 'hidden';
				ele.name = keyValue[0];
				ele.value = keyValue[1];
				f.appendChild(ele);
			}
			lh = lh.split('?')[0];
		}
		f.action = lh;
		f.submit();
		if (!$.browser.msie) {
			g_lock = false;
		}
	}
	return false;
}

/**
 * 確認メッセージを出力した後、formのactionに指定した値を追加してからサブミットする.
 */
function confirm_action(msg, action){
	if(!g_lock) {
		if(confirm(msg)){
			g_lock = true;
			var f =	document.getElementById('mainForm');
			var temp = f.action;
			f.action += action;
			f.submit();
			// IE 以外のブラウザでサブミットし、ブラウザの戻るボタンを押下すると
			// 変数が変わったままになっているので、元に戻しておく。
			if (!$.browser.msie) {
				g_lock = false;
				f.action = temp;
			}
			return true;
		}
	}
	return false;
}

/**
 * formのactionに指定した値を追加してからサブミットする.
 */
function add_action(action){
	if(!g_lock) {
		g_lock = true;
		var f =	document.getElementById('mainForm');
		var temp = f.action;
		f.action += action;
		f.submit();
		// IE 以外のブラウザでサブミットし、ブラウザの戻るボタンを押下すると
		// 変数が変わったままになっているので、元に戻しておく。
		if (!$.browser.msie) {
			g_lock = false;
			f.action = temp;
		}
		return true;
	}
	return false;
}

/**
 * formのactionに指定した値を追加してからサブミットする.
 */
function confirm_add_action(msg, action){
	if(!g_lock) {
		if(confirm(msg)){
			g_lock = true;
			var f =	document.getElementById('mainForm');
			var temp = f.action;
			f.action += action;
			f.submit();
			// IE 以外のブラウザでサブミットし、ブラウザの戻るボタンを押下すると
			// 変数が変わったままになっているので、元に戻しておく。
			if (!$.browser.msie) {
				g_lock = false;
				f.action = temp;
			}
			return true;
		}
	}
	return false;
}

/**
 * 指定したformのactionに指定した値を追加してからサブミットする.
 */
function add_action_target(action, target){
	if(!g_lock) {
		g_lock = true;
		var f =	document.getElementById(target);
		var temp = f.action;
		f.action += action;
		f.submit();
		// IE 以外のブラウザでサブミットし、ブラウザの戻るボタンを押下すると
		// 変数が変わったままになっているので、元に戻しておく。
		if (!$.browser.msie) {
			g_lock = false;
			f.action = temp;
		}
		// ここでfalseを返さないとsubmitで遷移したあとにhref属性に記述された場所へ飛ぶ.
		return true;
	}
	return false;
}

/**
 * 指定したformのactionに指定した値を追加してからサブミットする.
 * flash内で呼び出すときに、2度押ししたらlockがかかったままの状態になってしまうので
 * IEでもlockを解除する。
 */
function add_action_target_unlock(action, target){
	if(!g_lock) {
		g_lock = true;
		var f =	document.getElementById(target);
		var temp = f.action;
		f.action += action;
		f.submit();
		g_lock = false;
		f.action = temp;
		return true;
	}
	return false;
}

/**
 * formのactionに指定した値を追加してからサブミットする.(linkバージョン)
 */
function add_action_link(action){
	if(!g_lock) {
		g_lock = true;
		var f =	document.getElementById('mainForm');
		var temp = f.action;
		f.action += action;
		f.submit();
		// IE 以外のブラウザでサブミットし、ブラウザの戻るボタンを押下すると
		// 変数が変わったままになっているので、元に戻しておく。
		if (!$.browser.msie) {
			g_lock = false;
			f.action = temp;
		}
		// ここでfalseを返さないとsubmitで遷移したあとにhref属性に記述された場所へ飛ぶ.
		return false;
	}
	return false;
}

/**
 * 指定したformのactionに指定した値を追加してからサブミットする.(linkバージョン)
 */
function add_action_link_target(action, target){
	if(!g_lock) {
		g_lock = true;
		var f =	document.getElementById(target);
		var temp = f.action;
		f.action += action;
		f.submit();
		// IE 以外のブラウザでサブミットし、ブラウザの戻るボタンを押下すると
		// 変数が変わったままになっているので、元に戻しておく。
		if (!$.browser.msie) {
			g_lock = false;
			f.action = temp;
		}
		// ここでfalseを返さないとsubmitで遷移したあとにhref属性に記述された場所へ飛ぶ.
		return false;
	}
	return false;
}

/**
 * 確認後、formのactionに指定した値を追加してからサブミットする.(linkバージョン)
 */
function confirm_add_action_link(msg, action){
	if(!g_lock) {
		if(confirm(msg)){
			g_lock = true;
			var f =	document.getElementById('mainForm');
			var temp = f.action;
			f.action += action;
			f.submit();
			// IE 以外のブラウザでサブミットし、ブラウザの戻るボタンを押下すると
			// 変数が変わったままになっているので、元に戻しておく。
			if (!$.browser.msie) {
				g_lock = false;
				f.action = temp;
			}
			// ここでfalseを返さないとsubmitで遷移したあとにhref属性に記述された場所へ飛ぶ.
			return false;
		}
	}
	return false;
}

/**
 * 二重押しチェックをしてからサブミットする
 */
function chk_submit(){
	if(!g_lock) {
		g_lock = true;
		document.getElementById('mainForm').submit();
		if (!$.browser.msie) {
			g_lock = false;
		}
		return true;
	}
	return false;
}

/**
 * 二重押しチェックをしてから任意のフォームをサブミットする
 */
function chk_target_submit(form){
	if(!g_lock) {
		g_lock = true;
		document.getElementById(form).submit();
		if (!$.browser.msie) {
			g_lock = false;
		}
		return true;
	}
	return false;
}

/**
 * 二重押しチェックをしてからロケーションする
 */
function chk_location(){
	if(!g_lock) {
		g_lock = true;
		if (!$.browser.msie) {
			g_lock = false;
		}
		return true;
	}
	return false;
}

/**
 * 二重押しチェックをしてからロケーションする
 */
function chk_confirm_location(msg){
	if(!g_lock) {
		if(confirm(msg)){
			g_lock = true;
			if (!$.browser.msie) {
				g_lock = false;
			}
			return true;
		}
	}
	return false;
}

/**
 * form変数を設定して、submitする
 * @param name	parameter
 * @param value	parameterにセットする値
 */
function button_submit(name, value) {
	if(!g_lock) {
		var len 	= arguments.length;
		var param = $A(new Array());
		for (var i = 0; i < len; i++) {
			param[i] = arguments[i];
		}
		g_lock = true;
		for (var i = 0; i < len; i += 2) {
			eval("$('#mainForm')." + arguments[i]).value = arguments[i + 1];
		}
		$('#mainForm').submit();
		
		if (!$.browser.msie) {
			g_lock = false;
		}
	}
	return false;
}




/**
 * 確認後form変数を設定して、submitする
 * @param name	parameter
 * @param value	parameterにセットする値
 * @param confirm_message	確認メッセージ
 */
function confirm_submit(name, value, confirm_message) {
	if(!g_lock) {
		if(confirm(confirm_message)){
			var len 	= arguments.length;
			len = len - 1;
			var param = $A(new Array());
			for (var i = 0; i < len; i++) {
				param[i] = arguments[i];
			}
			g_lock = true;
			
			for (var i = 0; i < len; i += 2) {
				eval("$('#mainForm')." + arguments[i]).value = arguments[i + 1];
			}
	
			$('#mainForm').submit();
			if (!$.browser.msie) {
				g_lock = false;
			}
		}
	}
	return false;
}

/**
 * locationする
 * @param page_location	locationするパス
 **/
function goto_next(page_location)
{
	if(!g_lock)	{
		
		g_lock = true;
		location.href = page_location;
		if (!$.browser.msie) {
			g_lock = false;
		}
	}
	return false;
}

/**
 * コンボボックスの選択値を取得してlocationする
 * @param page_location	locationするパス
 **/
function combo_foward(page_location)
{
	if(!g_lock)	{
		g_lock = true;
		param = "&blockNo=" + $("#formCombo").value;
		page_location = page_location + param;
		location.href = page_location;
		if (!$.browser.msie) {
			g_lock = false;
		}
	}
	return false;
}

/**
 * 確認後locationする
 * @param page_location	locationするパス
 * @param message	確認メッセージ
 **/
function confirm_location(page_location, message)
{
	if(!g_lock)	{
		if(confirm(message)){
			g_lock = true;
	        location.href = page_location;
	        return false;
		}
	}
	return false;
}

/**
 * window.openする
 * @param url window.openするパス
 * @param opts オプション
 * @return false
 **/
function open_window(url, opts) {

	var defOpts = {"toolbar":"no",
				"location":"no",
				"directories":"no",
				"status":"no",
				"menubar":"no",
				"scrollbars":"yes",
				"resizable":"yes",
				"height":"700",
				"width":"1000",
				"name":"openWindow",
				"centering":"yes"};

	if (opts != undefined) {
		$.each(opts, function (k, v) {
			defOpts[k] = opts[k];
		});		
	}
	
	// ウィンドウ名称取得
	var windowName = defOpts["name"];
	delete defOpts["name"];

	// センタリング処理
	var centering = defOpts["centering"];
	delete defOpts["centering"];
	if (centering == "yes") {
		var position = "";
		var width = defOpts["width"].replace("px", "");
		var height = defOpts["height"].replace("px", "");
		if (window.screen.width > width) {
			position += ",left=" + (window.screen.width-width) / 2;
		}
		if (window.screen.height > height) {
			position += ",top=" + (window.screen.height-height) / 2;
		}
	}

	var optsArray = new Array();
	$.each(defOpts, function (k, v) {
		if (v != null) {
			optsArray.unshift(k + "=" + v);
		}
	});
	
	win = window.open(url, windowName, optsArray.join() + position);

	win.focus();
	
	return false;
}

/**
 * window.openする
 * 
 * @param url window.openするパス
 * @return false
 **/
function open_normal_window(url) {
	return open_window(url, {"toolbar":"yes",
							"location":"yes",
							"directories":"yes",
							"status":"yes",
							"menubar":"yes",
							"height":null,
							"width":null,
							"centering":"no"});
}

/**
 * コンテンツ(子画面)をwindow.openする
 **/
function open_contents_window(url) {
	win = window.open(
		url,
		"contentswindow",
		"toolber=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes,height=462,width=538");
	win.focus();

	return true;
}

/**
 * window.openする
 **/
function open_custom_window(url, name, style) {
	win = window.open(
		url,
		name,
		style);
	win.focus();

	return true;
}

/**
 * ウィンドウサイズをリサイズする
 * @param width	ウィンドウの幅
 * @param height	ウィンドウの高さ
 **/
function resize_window(width,height) {
	window.resizeTo(width,height);
}



function checkResponse(res){
	
	
	var evalText = res.responseText;
	if(evalText.search(/<span id="critical"/) != -1){
		moveError();
	}
	if(evalText.search(/<span id="noLogin"/) != -1){
		moveNoLogin();
	}
	if(evalText.search(/<span id="404_error"/) != -1){
		move404();
	}
}

function moveError(){
	location.href = './exception.do?op=init';
}

function moveNoLogin(){
	location.href = './async.do?op=move';
}
function move404(){
	location.href = './async.do?op=not';
}


//------------- 日付フォーマット ------------- 

var g_numberElements = new Array();
var _focusDateHash = new Array();
var _blurDateHash = new Array();

/**
 * idのテキストフィールドを日付型として定義する.
 * @param id id 
 */
function defineAsDateField(id) {

	var o = $(id);
	focusListener = _dateFocusListener.bind(o);
	blurListener = _dateBlurListener.bind(o);
	_focusDateHash[id] = focusListener;
	_blurDateHash[id] = blurListener;
	Event.observe(o, 'focus', focusListener, false);
	Event.observe(o, 'blur', blurListener, false);
	g_numberElements[o.id] = o;
}


// 日付型
function _dateFocusListener() {
	this.value = unformatDate(this.value);
	Field.select(this);
}
function _dateBlurListener() {
	this.value = formatDate(this.value);
}

/**
 * 日付のスラッシュ編集戻し用文字列操作関数.
 * @param  org 元の文字列
 * @return 編集後の文字列
 */
function unformatDate(org) {
	if (org == null) {
		return null;
	}
	return org.replace(/\//g, "");
}

/**
 * 日付のスラッシュ編集用文字列操作関数.
 * @param  org 元の文字列
 * @return 編集後の文字列
 */
function formatDate(org) {

	if (org == null) {
		return null;
	}
	if(!org.match(/^(-?)[0-9]{6,8}$/)){
		return org;
	}
	var tmp = org;
	if (tmp.length == 8) {
		var year  = parseInt(tmp.substring(0, 4), 10);
		var month = parseInt(tmp.substring(4, 6), 10)-1;
		var day   = parseInt(tmp.substring(6, 8), 10);
		if (isNaN(year) || isNaN(month) || isNaN(day)) {
			return org;
		}
		var d = new Date(year, month, day);
		if (month != d.getMonth()) {
			return org;
		}
		if (day != d.getDate()) {
			return org;
		}
		return tmp.substring(0, 4) + "/" + tmp.substring(4, 6) + "/" + tmp.substring(6, 8);
	}
	if (tmp.length == 6) {
		var year  = parseInt(tmp.substring(0, 4), 10);
		var month = parseInt(tmp.substring(4, 6), 10) - 1;
		if (isNaN(year) || isNaN(month)) {
			return org;
		}
		var d = new Date(year, month);
		if (month != d.getMonth()) {
			return org;
		}
		return tmp.substring(0, 4) + "/" + tmp.substring(4, 6);
	}
	return org;
}

function mapSearch(code) {
	add_action_target_unlock('city/'+code, 'mapForm')
}

/*
 * URL文字列にリクエストパラメータを付加します。
 * 単純にURLに'?'があれば'&'、なければ'?'でパラメータ連結しているだけです。
 * ※jQueryに依存しています。
 * @params url URL文字列
 * @params params 付加したいリクエストパラメータ。JSON形式({パラメータ名: 値})で設定してください。
 */
function addRequestParams(url, params) {
	if (params == null) {
		return url;
	}
	var result = url;
	$.each(params, function(k, v) {
		result += (result.match(/\?/) ? '&' : '?') + [k, v].join("=");
	});
	return result;
}

/*
 * onKeypress時にenterキー押下時のみclickと同じ動作を呼び出します。
 * ※jQuery依存
 */
function onKeypressAsClick() {
	if (event.keyCode == 13) {
		$(this).click();
		return false;
	}
	return true;
}
/*
 * ペースト(貼り付け)処理を抑制します。
 * ※jQuery依存
 * @param ペースト処理を抑制したいFormObjectのID(文字列)を複数指定可能。
 * 例）
 *   disablePaste("ma_email_confirm", "ma_password_confirm")
 * @return なし
 */
function disablePaste() {
	if (!arguments) {
		return;
	}
	$($.map(arguments, function(e) {return e.replace(/^([^#])/, '#$1');}).join()).keydown(
		function() {
			return !((event.keyCode == 86 && event.ctrlKey) || (event.keyCode == 45 && event.shiftKey)); 
		}
	).bind('paste',
		function() {
			return false;
		}
	);
}
