/**
 * 所在地検索ライブラリ
 * 
 * 
 * 
 * 
 * @requires jquery.js
 */

(function (c) {

/**
 * 現検索対象選択（初期化時）
 */
Orange.Search.blockMainSearch_init_select = function (type) {
	$.each(['itemSearchArea', 'itemSearchStation'], function () {
		$('#' + this)[((this + '') == type) ? 'addClass' : 'removeClass']('itemSearchSelect');
		$('#' + this)[((this + '') != type) ? 'addClass' : 'removeClass']('itemSearchNoSelect');
	});
};

/**
 * 現検索対象切替（要素クリック時）
 */
Orange.Search.blockMainSearch_change_select = function (type) {
	$.each(['itemSearchArea', 'itemSearchStation'], function () {
		$('#' + this)[((this + '') != type) ? 'addClass' : 'removeClass']('itemSearchSelect');
		$('#' + this)[((this + '') == type) ? 'addClass' : 'removeClass']('itemSearchNoSelect');
	});
};

/**
 * 有効、無効表示切替
 */
Orange.Search.blockMainSearch_change_disabled = function () {
	var ignore = {
		'/shared/images/ttl_search_area_01.gif' : true,
		'/shared/images/ttl_search_station_01.gif' : true
	};
	
	$('#blockMainSearch')
		.find('.itemSearchSelect')
			.find('[src!=""]')
				.each(function () {
					var src = $(this).attr('src');
					if (ignore[src]) return;
					$(this).attr('src', src.replace(/_disable\.(\w+)$/, '.$1'));
				})
				.end()
			.find(':input')
				.attr('disabled', false)
				.end()
			.find('li')
				.find('select:first')
					.trigger('change', ['nochange'])
					.end()
				.end()
			.end()
		.find('.itemSearchNoSelect')
			.find('[src!=""]')
				.each(function () {
					var src = $(this).attr('src');
					if (ignore[src]) return;
					$(this).attr('src', src.replace(/_disable\.(\w+)$/, '.$1').replace(/\.(\w+)$/, '_disable.$1'));
				})
				.end()
			.find(':input')
				.attr('disabled', true)
	;
};

$(function () {
	/**
	 * 所在地、地図の共有初期化
	 */
	Orange.Search.initialize();

	/**
	 * 駅検索の都道府県選択
	 */
	$('#itemSearchStation select:first').change(Orange.Search.itemSearchStation_select_first_with_mansion_count);

	/**
	 * オリジナルの検索条件で探す初期化
	 */
	Orange.Search.itemSearchOriginal_setting('area', function (win) {
		var key = ({
			'itemSearchArea' : 'Area',
			'itemSearchStation' : 'Station'
		})[$('#hiddenSearchType').val()];
		var val = $('#hiddenSearchValues').val();
		if (!key || !val) return;
		win.open('/search/histrySave'+key+'Lb?search_values='+val);
	});

	/**
	 * 所在地検索の都道府県選択
	 */
	 $('#itemSearchArea select:first').change(Orange.Search.itemSearchArea_select_first_with_mansion_count);

	/**
	 * ソート順の変更
	 */
	$('#ulSortColumn a').click(Orange.Search.sort_click_to_set);

	/**
	 * 各検索条件の追加、削除
	 */
	$('.ctrlRequestRow input[type="image"]').click(Orange.Search.change_select_field);

	/**
	 * 有効、無効切替
	 */
	$('#itemSearchArea, #itemSearchStation').click(function (env) {
		var id = $(this).attr('id');
		var check = (id == 'itemSearchArea');
		var type = check ? 'itemSearchStation' : 'itemSearchArea';
		/**
		 * 更新するかどうかの判断
		 */
		if ($(this).hasClass('itemSearchSelect')) return false;
		Orange.Search.blockMainSearch_change_select(type);
		Orange.Search.blockMainSearch_change_disabled();
		return false;
	});

	/**
	 * 検索結果なし表示制御
	 */
	var set_no_result = function (count) {
		if (count) {
			$('.pager, .navExtra, #unitContainer').show();
			$('#blockNoResult_id').hide();
			return true;
		}
		$('.pager, .navExtra, #unitContainer').hide();
		$('#blockNoResult_id').show();
		return false;
	}

	/**
	 * 検索実行（$.postCriteria）後のcallback
	 */
	var callback = function (in_data) {
		new function () {
			var base = [];
			$('#'+$('#hiddenSearchType').val() + ' li:first select :selected').each(function () {
				var text = $(this).text();
				if ($(this).parent().attr('name') == 'stationStationId' && !text.match(/駅$/)) text += '駅';
				var str = text.replace(/\(\d+\)/, "");
				if (str != "市区町村" && str != "駅" && str != "沿線") {
					base.unshift(str);
				}
			});

			var pre = base.join(' | ') + 'のマンション探し - ';
			document.title = pre + 'マンション100％～物件検索、みんなの口コミ情報';

			pre = 'マンション, 口コミ, クチコミ, 評判, コミュニティ, ポータル, ' + base.join(', ');
			$('head meta[name="keywords"]:first').attr('content', pre);

			pre = base.join(', ') + 'のマンション情報を紹介します。マンション100%は、物件探しのカンタン便利な機能が満載です。評判をみたり、気になるリストに入れて、比較表でらくらく検討。５つのＳＴＥＰでマンション探しをナビゲート。見て楽しく参加して楽しい、みんなでつくるマンション口コミ情報サイトです。';
			$('head meta[name="description"]:first').attr('content', pre);


		}
		if (in_data.response.result.extension.lococomContents) {
			var base = [];
			$('#'+$('#hiddenSearchType').val() + ' li:first select :selected').each(function () {
				var text = $(this).text();
				if ($(this).parent().attr('name') == 'stationStationId' && !text.match(/駅$/)) text += '駅';
				var str = text.replace(/\(\d+\)/, "");
				if (str != "市区町村" && str != "駅" && str != "沿線") {
					base.push(str);
				}
			});
			var lococoms = [];
			var str = "";
			var stationUrl = null;
			$.each(in_data.response.result.extension.lococomContents, function(content) {
				if (lococoms.length == 0) {
					stationUrl = this.stationUrl;
					str = '【' + this.rosenName + this.stationName + '駅の周辺口コミ情報】';
				}
				lococoms.push("<a href='" + this.titleUrl + "' rel='external' target='_blank'>" + this.title + '</a>');
			});
			str += lococoms.join('&nbsp;/&nbsp;');

			if (stationUrl != null) {
				str += '<p class="moreLink"><a target="_blank" href="' + stationUrl  + '"><img width="70" height="12" alt="もっとみる" src="/shared/images/txt_more_link_01.gif"/></a></p>';
			}
			
			$('.linkAreaInfo').html(str);
		}

		var data = in_data.response.result.data;
		var data_length = data.length;
		if (!set_no_result(data_length)) return;
		Orange.Search.get_calc_pageset(in_data.response.result);

		Orange.UnitList.change = function (type) {
			$('#hiddenDisplayStyle').val(type);
		};
		Orange.UnitList.callback(in_data.response, function (page) {
			log('page', page);
			page = Orange.Search.throw_calc_pageset(page);
			$('#hiddenPageOffset').val(page.page);
			$('#hiddenPageLimit').val(page.limit);
			$('#formApiMansionSearch').trigger("submit", [page]);
		}, $('#hiddenDisplayStyle').val());
	};

	/**
	 * form.submitに検索実行を設定
	 */
	var to_submit = function (env, page) {
		if (!page) {
			$('#hiddenPageOffset').val('0');
			$('#hiddenPageLimit').val(c.search.page_default);
		}

		var criteria = Orange.Search.set_mansion_sort(Orange.Search.get_criteria());
		var select_type = $('#hiddenSearchType').val() || 'itemSearchArea';

		Orange.Search.itemSearchOriginal_check();

		var param = Orange.Search.blockSubSearch_set.get_param();
		param.SearchValues = $('#hiddenSearchValues').val();
		$.postCriteria(
			$(this).attr('action') + '?' + (new Date()).getTime(),
			criteria,
			Orange.Search.get_base_callback(callback),
			param
		);

		$.ajax({
			type: "POST",
			url:  "/search/getWideAreaBySearchValues",
			data: "search_values=" + param.SearchValues,
			success: function(html) {
				$("#wideAreaBySearchValuesBlock").html(html);
			}
		});
	};

	$('#formApiMansionSearch').submit(function (e) {
		e.preventDefault();
		try {
			to_submit.apply(this, arguments);
		} catch (e) {
			alert(e);
		} finally {
			return false;
		}
	});

	// 都道府県単位でも検索できるように変更 
	Orange.Search.check_to_alert = function () {
		return Orange.Search._check_to_alert('select:first[value=""]');
	}

	// 都道府県単位でも検索できるように変更 
	Orange.Search.get_search_area_id = function () {
		var vals = Orange.Search.get_criteria_turn_vals;
		var middle_id = vals('areaMiddleAreaId') || [];
		var narrow_id = vals('areaNarrowAreaId') || [];
		return $.map(middle_id, function (id) {
			var result = id + '_';
			if (narrow_id.length) result += narrow_id.shift();
			return result;
		});
	};

/**
 * location.hash文字列から各elementへ値設定
 * 
 * @param location.hashに保持された文字列
 */
Orange.Search._set_unserialize = function (RHM) {
	$('#itemSearchArea ul:first li:not(:last), #itemSearchStation ul:first li:not(:last)').remove();
	var hash = {};
	var par = decodeURIComponent(RHM).match(/search="(.*)"/)[1].split('&');
	$.each(par, function () {
		var k_v = decodeURIComponent(this).split(/=/, 2);
		hash[k_v[0]] = (k_v[1] || '').replace(/^\w[\[\],]/g, '');
	});
	$('#formApiMansionSearch>[type="hidden"]').each(function () {
		var val = hash[$(this).attr('id')];
		if (!val) return;
		$(this).val(val);
	});
	var top = $('#'+hash['hiddenSearchType']);
	// 検索条件が複数の場合、検索条件追加ボタンを必要回押す
	var where_count = hash['local'].split('],').length;
	where_count && where_count--;
	var button = $('.ctrlRequestRow input[type="image"]:first', top);
	var num = where_count;
	while (num--) button.click();

	//ソートタイプの設定
	Orange.Search.set_sort_class();

	var local = Orange.Search.str_to_array(hash['local']);
	var func = ({
		'itemSearchArea' : Orange.Search.itemSearchArea_select_first_with_mansion_count,
		'itemSearchStation' : Orange.Search.itemSearchStation_select_first_with_mansion_count
	})[hash['hiddenSearchType']];

	//クリックが必要な要素を選択
	if (hash['hiddenStatusFlag']) $('#ul_StatusFlag_'+hash['hiddenStatusFlag']+' a').trigger('click', [true]);
	if (Orange.Search.blockMainSearch_init_select) {
		Orange.Search.blockMainSearch_init_select($('#hiddenSearchType').val());
		Orange.Search.blockMainSearch_change_disabled();
	}

	// 検索条件をセットし終わったら検索実行
	var callback = function () {
		if (where_count) return where_count--;
		/**
		 * 絞り込み文字列表示値設定
		 * （hiddenの値を読み取るので、初期化の最後に実行）
		 */
		Orange.Search.blockSubSearch_set.initialize();
		$('#formApiMansionSearch').submit();
	};
	$('li', top).each(function () {
		var line = local.shift();
		var first = $('select:first', this);
		if (line[0]) first.val(line.shift());
		func.apply(first, [line, callback]);
	});

};
Orange.Search.set_unserialize  = function () {
	//読み込み前に操作できないように透過gifをかぶせる
	var form_width = $('#content').width();
	var form_height = $('#content').height();
	var attr = {
		'id' : 'content_wrap'
	};
	var css = {
		'position' : 'absolute',
		'width' : form_width,
		'height' : form_height,
		'top' : '0',
		'left' : '0',
		'z-index' : '50'
	};
	var ignore = function () { return false };
	$('#content').before('<img src="/shared/images/search/map/blank.gif" />').prev().attr(attr).css(css)
		.click(ignore).dblclick(ignore);
	var remove_wrap = function () { $('#content_wrap').remove() };
	$('#formApiMansionSearch').submit(function () {
		setTimeout(remove_wrap, 0);
	});
	//一定秒数で強制削除
	setTimeout(remove_wrap, 10000);
	try {
		Orange.Search._set_unserialize.apply(this,arguments);
	} catch (e) {
		return;
	};
};

	/**
	 * 初期値設定
	 */
	(function () {
		//local=[[13,101]] == 東京都 千代田区
		var hash = location.hash || 'search="local=[[13,101]]&hiddenSearchType=itemSearchArea"';
		Orange.Util.getFolderData(function () {
			Orange.Search.set_unserialize(hash);
		});
		$.each([
			//検索条件対象（エリア、駅）
			['hiddenSearchType','itemSearchArea'],
			['hiddenSortColumn','RankSort'],
			['hiddenSortType',Criteria.Direction.Ascending],
			['hiddenSearchValues','13_101'],
			['hiddenDisplayStyle','list']
		], function () {
			if (!$('#'+this[0]).val()) $('#'+this[0]).val(this[1]);
		});
		Orange.Search.init_click_to_set();
	})();
	Orange.Search.blockMainSearch_init_select($('#hiddenSearchType').val());
	Orange.Search.blockMainSearch_change_disabled();
});

})(Orange.Config);

