//**********************************************************
//    「エリアで探す」ページに関するJavaScript
//            - require jquery.js
//            - require dd_belatedpng.js
//                                    muraki@triax.jp
//**********************************************************

//--------------------------------------------------
//
// エリアチェックボックスの詳細・広域を、
// リンク押下で切り替えるイベントを登録
//
//--------------------------------------------------
function regist_area_fields_switch_event(){
	$('a.switch_narrow_area_fields').click(function(){
		$('div.narrow_area_fields').show();
		$('div.wide_area_fields').hide();
		return false;
	});
	$('a.switch_wide_area_fields').click(function(){
		$('div.wide_area_fields').show();
		$('div.narrow_area_fields').hide();
		return false;
	});
}


//##################################################
// 
// マップの強調表示及び
// マップ・チェックボックス連携のための関数群
//                  [ここから]
// 
//##################################################

//--------------------------------------------------
// ヘルパー関数：
//  - 強調表示用のマップ画像を取得
//--------------------------------------------------
function _get_partial_map_image(area_code){
	return $("img#img_" + area_code);
}

//--------------------------------------------------
// ヘルパー関数：
//  - 小エリアのコードから大エリアのコードを取得
//--------------------------------------------------
function _get_wide_area_code(area_code){
	return area_code.replace(/\d+$/, "");
}

//--------------------------------------------------
// 
// マップがクリックされた際の処理
// 
//--------------------------------------------------
function area_map_click_handler(){
	var area_code = $(this).attr("id");
	
	if(area_code == "") return false;
	
	// 大エリアのチェックボックス（ただし片方のページのみ）を取得
	var wide_area_checkbox_in_map_page = $("#wc1_" + area_code);
	// そのチェックボックスの状態を反転する
	var checked = wide_area_checkbox_in_map_page.is(":checked");
	wide_area_checkbox_in_map_page.attr("checked", !checked).trigger("change", ["map"]);
	
	return false;
}

//--------------------------------------------------
// 
// 大エリアのチェックボックスの状態が変更された際の処理
// 
//--------------------------------------------------
function wide_code_checkbox_handler(event, mode){
	if(mode == undefined) mode = "wide";
	
	var area_code = $(this).val();
	var checked = $(this).is(":checked");
	
	var checkbox;
	if(mode == "wide" || mode == "map"){
		// 同じエリアコードを持つ（別ページの）大エリア、及び
		// 大エリアに属する全ての小エリアのチェックボックス
		checkbox = $("[value^=" + area_code + "]:checkbox");
		checkbox.attr("checked", checked); // チェック状態を反映
	}else if(mode == "init"){
		// 上記と同じ
		checkbox = $("[value^=" + area_code + "]:checkbox");
		if(checked) // チェック時のみ、チェック状態を反映
			checkbox.attr("checked", checked); 
	}else if(mode == "narrow"){
		// 同じエリアコードを持つ（別ページの）大エリアの
		// チェックボックスのみ
		checkbox = $("[value=" + area_code + "]:checkbox");
		checkbox.attr("checked", checked); // チェック状態を反映
	}
	
	// チェックされたエリアを強調表示
	var img = _get_partial_map_image(area_code);
	if(checked){
		img.show();
		img.ifixpng(); // IE6透過PNG対応
	}else{
		img.hide();
	}
}

//--------------------------------------------------
// 
// 小エリアのチェックボックスの状態が変更された際の処理
// 
//--------------------------------------------------
function narrow_code_checkbox_handler(){
	var area_code = $(this).val();
	if(!$(this).is(":checked")){ // アンチェックされた場合
		var wide_code = _get_wide_area_code(area_code);
		$("[value=" + wide_code + "]:checkbox") // 大エリアもアンチェック
			.attr("checked", false)
			.trigger("change", ["narrow"]);
	}
}

//--------------------------------------------------
// 
// イベントを登録のためのメイン関数
// 
//--------------------------------------------------
function regist_area_map_event() {
	var area_map = "area[id]"; // クリッカブルマップの要素
	var wide_area_checkbox = "[name=areas][id^=wc]:checkbox"; // 大エリアのチェックボックス
	var narrow_area_checkbox = "[name=areas][id^=nc]:checkbox"; // 小エリアのチェックボックス
	
	// $("div.area_map_images").hide(); // 順次レンダリングさせない
	$(area_map).click(area_map_click_handler);
	$(wide_area_checkbox).change(wide_code_checkbox_handler)
							.trigger("change", ["init"]);
	$(narrow_area_checkbox).change(narrow_code_checkbox_handler);
	// IEのバグ対策
	if($.browser.msie){
		$("[name=areas]:checkbox").click(fix_ie_onchange_bug);
	}
	// $("div.area_map_images").show(); // 画像レンダリング開始
}

//--------------------------------------------------
// IEバグFix
//  一度 blur しないと change イベント未発生
//--------------------------------------------------
function fix_ie_onchange_bug() {
	this.blur();
	this.focus();
}

//##################################################
// 
// マップの強調表示及び
// マップ・チェックボックス連携のための関数群
//                  [ここまで]
// 
//##################################################

//--------------------------------------------------
//
// ソート順プルダウンの値を、
// 正式なパラメータ名に分解してhiddenフィールドに
// セットする処理
// [詳細]
//  - 正式には、上記の処理を行う関数を返す
//
//--------------------------------------------------
function set_sort_hidden_fields(){
	var value = $("select.area_sort_param").val();
	var sort = '';
	var sort_desc= '';
	if(value.indexOf(":") != -1){
		ary = value.split(":");
		sort = ary[0];
		sort_desc = ary[1];
	}
	$("#sort").val(sort);
	$("#sort_desc").val(sort_desc);
}


// execute function on document ready
$(function(){
	// 1pxの透過GIFの読み込み（IE6透過PNG対応）
	$.ifixpng('/images/area_search/pixel.gif');
	// エリアチェックボックスの詳細・広域の切り替え
	regist_area_fields_switch_event();
	// ソート順プルダウンを、正式なパラメータ名に分解
	$("form.area_search").submit(set_sort_hidden_fields);
	// マップの強調表示及びマップ・チェックボックス連携
	regist_area_map_event();
});
