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

if (!Orange.Search.Slider) Orange.Search.Slider = {};
/**
 * swf書き出し
 */
Orange.Search.Slider.write = function (target) {
	var so = new SWF({
		swf   : '/swf/search/slider.swf',
		id    : 'orange_search_slider',
		width : 980,
		height: 65
	})
		.addParam({ wmode: 'transparent', 'scale' : 'noscale' })
		.addVariable({ 'instancename' : 'Orange.Search.Slider' })
		.show(target)
	;
};
/**
 * slider変更
 */
Orange.Search.Slider.setJsWalkMinute = function (target) {
	var upper = 0;
	var walk_limit = $('#itemSearchStation select[name="stationWalkLimit"]');
	$('option', walk_limit).each(function () {
		var val = $(this).val();
		if (val < target) return;
		walk_limit.val(val);
		return false;
	});
	var val = $('#hiddenSearchValues').val().replace(/\d+$/, target);
	$('#hiddenSearchValues').val(val);
	$('#formApiMansionSearch').submit();
};

/**
 * slider以外変更
 */
Orange.Search.Slider.setSwfWalkMinute = function (walk_minute) {
	var base_obj = $.browser.msie ? window : document;
	var so = base_obj['orange_search_slider'];
	so.setSwfWalkMinute(walk_minute);
};

if (!Orange.Search.Map) Orange.Search.Map = {};

/**
 * 検索実行
 */
Orange.Search.Map.submit = function () {
	Orange.Search.Map.ZdcMap.clearUserLayer();
	ZdcEvent.clearInstanceListeners(Orange.Search.Map.ZdcMap);

	var criteria = Orange.Search.get_criteria()
		.addSortColumn('Lon', Criteria.Direction.Ascending);
	Orange.Search.write_location_hash(Orange.Search.get_serialize());

	// 駅
	var station_id = $('#hiddenSearchValues').val().split('_')[2];

	// 駅名
	var name = $('#itemSearchStation select[name="stationStationId"] option:selected').text();
	$('#stationWalkName').text(name);

	// 駅徒歩
	var wlimit = $('#hiddenSearchValues').val().split('_')[3];
	$('#stationWalkNumber')
		.html(Orange.Search.Map.create_station_number_image(wlimit))
		.find('img')
		.pngfix()
	;
	Orange.Search.Slider.setSwfWalkMinute(wlimit);

	Orange.Search.itemSearchOriginal_check();

	var set_title = function () {
		var pref = $('form select:eq(0)').find(':selected').text();
		var line = $('form select:eq(1)').find(':selected').text();
		var station = $('form select:eq(2)').find(':selected').text();
		if (!station.match(/駅$/)) station += '駅';
		var minute = $('form select:eq(3)').find(':selected').text();
		var pre = '';
		pre += ([pref, line, station]).join(' ');
		pre += 'から徒歩' + minute + 'の物件 - ';
		document.title = pre + 'マンション100％～物件検索、みんなの口コミ情報';

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

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

	var param = Orange.Search.blockSubSearch_set.get_param();
	param['StationId'] = station_id;
	param['WalkLimit'] = wlimit;
	$.postCriteria(
		$(this).attr('action') + '?' + (new Date()).getTime(),
		criteria,
		Orange.Search.get_base_callback(function (in_data) {
			set_title();

			var mansions = in_data.response.result.data;
			var mansions_length = mansions.length;
			var count_data = in_data.response.result.count;

			if (!Orange.Search.Map.set_no_result(mansions_length, count_data)) return;
			Orange.Search.Map.callback.apply(this, arguments);
		}),
		param
	);

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

	return false;
};

/**
 * 初期化
 */
($.browser.safari ? $(window).load : $).call($(window), function () {
	if (!window.ZdcMap) return;

	/**
	 * 所在地、地図の共有初期化
	 */
	Orange.Search.initialize();
	/**
	 * 駅検索の都道府県選択
	 */
	$('#itemSearchStation select:first').change(Orange.Search.itemSearchStation_select_first);

	Orange.Search.Map.initialize();

	//ユーザ定義吹き出し
	Orange.Search.Map.ZdcUserMsgWindow = new ZdcUserMsgWindow();
	Orange.Search.Map.ZdcUserMsgWindow.setImage(
		'/shared/images/search/map/fukidashi.png',
		new ZdcSize(294,162),
		'/shared/images/search/map/blank.gif',
		new ZdcSize(270,125),
		'/shared/images/search/map/blank.gif',
		new ZdcSize(1,1),
		'/shared/images/search/map/blank.gif',
		new ZdcSize(1,1)
	);
	Orange.Search.Map.ZdcUserMsgWindow.setDocPosition(0,0,0,15,0,270,0,270);
	Orange.Search.Map.ZdcUserMsgWindow.setDocOffset(30, -70);
	Orange.Search.Map.ZdcUserMsgWindow.my_size_top = 270;
	Orange.Search.Map.ZdcUserMsgWindow.my_size_left = 100;

	//現在の駅徒歩分表示ボックスの構築
	Orange.Search.Map.create_station_walk_box();

	/**
	 * オリジナルの検索条件で探す初期化
	 */
	Orange.Search.itemSearchOriginal_setting('map', function (win) {
		var val = $('#hiddenSearchValues').val();
		if (!val) return;
		win.open('/search/histrySaveStationLb?search_values='+val);
	});

	Orange.Search.Slider.write('#blockTimeSlider');
	$('#hiddenSortColumn').val('Lon');
	$('#hiddenSearchType').val('itemSearchStation');
	Orange.Util.getFolderData(function () {
		location.hash ? Orange.Search.set_unserialize(location.hash) : Orange.Search.Map.set_default();
	});

	/**
	 * form.submitに検索実行を設定
	 */
	$('#formApiMansionSearch').submit(Orange.Search.Map.submit);
});

/**
 * 検索結果なし表示制御
 */
Orange.Search.Map.set_no_result = function (count, count_data) {
	if (count) {
		$('#blockMap').show();
		$('#blockTimeSlider, #orange_search_slider').attr({'width' : '980', 'height' : '65'}).css({'width' : '980px', 'height' : '65px'});
		$('#blockNoResult_id').hide();
		return true;
	}
	$('#blockMap').hide();
	$('#blockTimeSlider, #orange_search_slider').attr({'width' : '1', 'height' : '1'}).css({'width' : '1px', 'height' : '1px'});
	$('#blockNoResult_id').show();
	$("#blockOtherResult").html("");

	var str = '<ul>';
	for (min in count_data.other) {
		var co = count_data.other[min];
		var rosen = $('form select:eq(1)').find(':selected').text();
		var station = $('form select:eq(2)').find(':selected').text();
		if (!station.match(/駅$/)) station += '駅';

		if (min != "area") {
			var areaId = $('form select:eq(0)').find(':selected').val();;
			var rosenId = $('form select:eq(1)').find(':selected').val();;
			var stationId = $('form select:eq(2)').find(':selected').val();;
			var idArray = [areaId, rosenId, stationId, min];

			var tmpStr = null;
			if (co[2] || co[3]) {
				if (co[2] && co[3] && Orange.Config.user_login) {
					var txt1 = "建築計画" + co[3] + "件";
					var txt2 = "売り出し中" + co[2] + "件";

					tmpStr = Orange.Search.Map.create_map_link(idArray, 3, txt1) + "、" + Orange.Search.Map.create_map_link(idArray, 2, txt2);
				} else if (co[2]) {
					var txt1 = "売り出し中" + co[2] + "件";
					tmpStr = Orange.Search.Map.create_map_link(idArray, 2, txt1);
				} else if (co[3] && Orange.Config.user_login) {
					var txt1 = "建築計画" + co[3] + "件";
					tmpStr = Orange.Search.Map.create_map_link(idArray, 3, txt1);
				}

				if (tmpStr) {
					str += '<li>' + rosen + station + "まで" + min + "分圏内のマンションは<br />" + tmpStr + "あります。</li>";
				}
			}
		}
	}
	str += '</ul><ul>';

	if (count_data.other && count_data.other.area && (count_data.other.area[1] || count_data.other.area[2])) {
		var areaId =  $('form select:eq(0)').find(':selected').val();
		var tmpStr = null;
		if (count_data.other.area[2] && count_data.other.area[3] && Orange.Config.user_login) {
			var txt1 = "建築計画" + count_data.other.area[3] + "件";
			var txt2 = "売り出し中" + count_data.other.area[2] + "件";
			tmpStr =  Orange.Search.Map.create_area_link(areaId, 3, txt1) + "、" + Orange.Search.Map.create_map_link(areaId, 2, txt2);
		} else if (count_data.other.area[2]) {
			var txt1 = "売り出し中" + count_data.other.area[2] + "件";
			tmpStr =  Orange.Search.Map.create_area_link(areaId, 2, txt1);
		} else if (count_data.other.area[3] && Orange.Config.user_login) {
			var txt1 = "建築計画" + count_data.other.area[3] + "件";
			tmpStr =  Orange.Search.Map.create_area_link(areaId, 3, txt1);
		}

		if (tmpStr) {
			str += '<li>' + $('form select:eq(0)').find(':selected').text() + "のマンションは" + tmpStr + "あります";
		}
	}
	str += '</ul>';

	$('#blockOtherResult').html(str);

	return false;
}

Orange.Search.Map.create_area_link = function (areaId, status, text) {
	var str  = '/search/area?' + (new Date()).getTime() + '#search%3d%22local%3d%5b%5b' + areaId;
	str += '%5d%5d%26hiddenSearchValues%3d' + areaId;
	str += '_%26hiddenStatusFlag%3d' + status;
	str += '%26hiddenSearchType%3ditemSearchArea%22%26v%3d1';

	return '<a href="' + str + '">' + text + '</a>';
}

Orange.Search.Map.create_map_link = function (idArray, status, text) {
	var str = '/search/map?' + (new Date()).getTime() + '#search=%22local%3D%5B%5B' + idArray[0] + '%2C' + idArray[1] + '%2C';
	str += idArray[2] + '%2C' + idArray[3] + '%5D%5D%26hiddenSearchValues%3D';
	str += idArray[0] + '_' + idArray[1] + '_' + idArray[2] + '_' + idArray[3] + '%26hiddenStatusFlag%3D' + status + '%26hiddenSearchType%3DitemSearchStation%22&v=1';

	return '<a href="' + str + '">' + text + '</a>';
}

/**
 * 物件徒歩分表示画像生成
 */
Orange.Search.Map.create_mansion_number_image = function (time) {
	if (time != 0 && time != '0' && !time) time = '--';
	return Orange.Search.Map.create_number_image('mansion', time, '.gif');
};

/**
 * 徒歩分表示画像生成
 */
Orange.Search.Map.create_number_image = function (type, time, ext) {
	time += '';
	ext = ext || '.png';
	time = time.substr(0,2)
	if (time.length == 1) time = 'b' + time;
	return $($.map(time.split(''), function (i) {
		i = i.replace(/[^0-9b\-]/g, 'b');
		return '<img class="sharedImagesSearchMapNum" src="/shared/images/search/map/num/' + type + '_' + i + ext + '" width="23" height="31" />';
	}).join(''));
};

/**
 * 駅徒歩分表示画像生成
 */
Orange.Search.Map.create_station_number_image = function (time) {
	return Orange.Search.Map.create_number_image('station', time);
};

/**
 * 現在の駅徒歩分表示ボックスの構築
 */
Orange.Search.Map.create_station_walk_box = function () {
	var style = {
		'position' : 'absolute',
		'top' : '8px',
		'left' : '10px',
		'display' : '',
		'z-index' : '40'
	};
	$('#blockMap')
		.append('<span id="stationWalkBox" style="display:none"><img src="/shared/images/search/map/number_base.png" alt="圏内を表示中" width="157" height="98" /></span>')
		.find('#stationWalkBox')
			.css(style)
			.find('img')
				.pngfix()
				.end()
			.end()
		.append('<span id="stationWalkName">東京</span>')
		.find('#stationWalkName')
			.css({
				'position' : 'absolute',
				'top' : '12px',
				'left' : '18px',
				'color' : 'white',
				'font-size' : '1.4em',
				'display' : '',
				'z-index' : '41'
			})
			.end()
		.append('<span id="stationWalkNumber"></span>')
		.find('#stationWalkNumber')
			.html(Orange.Search.Map.create_station_number_image('bb'))
			.css({
				'position' : 'absolute',
				'top' : '52px',
				'left' : '23px',
				'display' : '',
				'z-index' : '42'
			})
			.find('img')
				.pngfix()
				.end()
			.end()
	;

};

/**
 * 初期値設定
 */
Orange.Search.Map.set_default = function () {
	$([
		//検索条件対象（エリア、駅）
		['hiddenSearchType','itemSearchStation'],
		['hiddenSearchValues','13_110_1_10']
	]).each(function () {
		$('#'+this[0]).val(this[1]);
	});
	//local=[[13,110,1,10]] == 東京都 JR中央線 東京駅 10分
	Orange.Search.set_unserialize('search="local=[[13,110,1,10]]&hiddenSearchType=itemSearchStation"');
	Orange.Search.init_click_to_set();
};


/**
 * 吹き出し情報の付加
 */
(function () {
	Orange.Search.Map.set_window_single = function (mark) {
		//mouse over時window open
		ZdcEvent.addListener(mark, "mouseovermarker", mouseovermarker);
		//mouse out時window close
		ZdcEvent.addListener(mark, "mouseoutmarker", function() {
			Orange.Search.Map.ZdcMap.closeUserMsgWindow_check();
		});
		//クリック時lightbox open
		ZdcEvent.addListener(mark, "mouseclickmarker", mouseclickmarker);
	};
	var base_window_css = {'position' : 'absolute'};
	var base_number_css = $.extend({ 'top' : '21px', 'right' : '13px' },base_window_css);
	var base_new_css = $.extend({ 'right' : '-4px' },base_window_css);
	var base_icon_css = $.extend({ 'top' : '25px', 'left' : '5px' },base_window_css);
	var base_name_css = $.extend({ 'top' : '25px', 'left' : '30px', 'width' : '175px'  },base_window_css);
	var base_comment_css = $.extend({ 'top' : '75px', 'left' : '10px', 'width' : '230px' },base_window_css);
	var base_information_rate_css = $.extend({ 'top' : '120px', 'right' : '0' },base_window_css);
	var base_msg_link_href = '/mansion/lightbox?';
	var window_node = $(
		  '<div id="masionWindowBase">'
		+ '<span id="masionWindowWalkNumber"></span>'
		+ '<span id="masionWindowIconWrap"><img id="masionWindowIcon" class="userMsgWindowLink" width="22" height="18" /></span>'
		+ '<div id="masionWindowName" class="userMsgWindowLink"></div>'
		+ '<div id="masionWindowComment" class="userMsgWindowLink"></div>'
		+ '<p id="masionWindowInformationRate" class="infoAmount"></p>'
		+ '</div>'
	)
		.find('#masionWindowWalkNumber').css(base_number_css).end()
		.find('#masionWindowIconWrap').css(base_icon_css).end()
		.find('#masionWindowName').css(base_name_css).end()
		.find('#masionWindowComment').css(base_comment_css).end()
		.find('#masionWindowInformationRate').css(base_information_rate_css).end()
	;
	var comment_fold = function (text) {
		var conf = Orange.Config.search_map;
		if (text.length <= conf.comment_fold_length) return text;
		return text.substr(0, conf.comment_fold_length) + conf.comment_fold_string;
	}
	/**
	 * マウスオーバー時
	 */
	var mouseovermarker = function() {
		Orange.Search.Map.ZdcMap.closeUserMsgWindow_check();
		var mansion = this.my_mansion;
		var step = Orange.Util.getStep(mansion.id);
// 3 = 自動移動しない
//		this.openUserMsgWindow(Orange.Search.Map.ZdcUserMsgWindow, this.Point, window_node.clone().get(0), 3);
		this.openUserMsgWindow(Orange.Search.Map.ZdcUserMsgWindow, this.Point, window_node.clone().get(0), 1);

		var last_comment = mansion.last_comment || '';
		last_comment = comment_fold(last_comment);
		var uri = base_msg_link_href + mansion.id;
		$('#masionWindowBase')
			.find('.userMsgWindowLink')
				.wrap('<a href="'+uri+'"></a>')
				.end()
			.find('#masionWindowWalkNumber')
				.html(Orange.Search.Map.create_mansion_number_image(mansion.station_minute))
				.end()
			.find('#masionWindowIcon')
				.attr('src', '/shared/images/search/map/mansion/s_'+step+'_'+mansion.status_flag+'.png')
				.pngfix()
				.end()
			.find('#masionWindowName')
				.html(mansion.name)
				.end()
			.find('#masionWindowComment')
				.html(last_comment)
				.end()
            .find('#masionWindowInformationRate')
				.html((function() {
					return '情報量<span>' + mansion.information_rate + '%</span>';
				})())
				.addClass('infoAmountLv' + mansion.information_rate_level)
				end()
		;
		if ((mansion.open_flag - 0)) {
			$('#masionWindowBase')
				.append('<img id="masionWindowNew" />')
				.find('#masionWindowNew')
				.attr('src', '/shared/images/search/map/new.png')
				.css(base_new_css)
				.pngfix()
			;
		}
		$('#masionWalkNumber .sharedImagesSearchMapNum').pngfix();

		Orange.Search.Map.check_window_to_scroll_map();
	};
	/**
	 * マウスクリック時
	 */
	var mouseclickmarker = function () {
		var mark = this;
		var mansion = mark.my_mansion;
		var uri = base_msg_link_href + mansion.id;
		$.getJSON(
			'/api/mansion/getMansion',
			{'id' : mansion.id},
			function (data) {
				var win = new Orange.Window;
				var val = data.result.data[0];
				var finish = function () {
					var box = new Orange.Unit('list', val);
					box.appendTo('.blockAssetsList:last');
					box.add = function () {
						var step = Orange.Util.getStep(mansion.id);
						var icon = mark.getIcon();
						var name = step+'_'+mansion.status_flag+'.png';
						icon.image = '/shared/images/search/map/mansion/'+name;
						mark.setIcon(icon);
					}
				};
				win.finish = function ($data) {
					setTimeout(finish, 0);
				};
				win.open(uri);
			}
		);
	};
})();

/**
 * マウスカーソル位置からメッセージウィンドウが表示できる位置まで地図を移動する
 * @todo
 */
Orange.Search.Map.check_window_to_scroll_map = function () {
return;
	if (Orange.Search.Map.ZdcMap.checkUserMsgWindow() != 2) return;

	var map_top = parseInt($('#itemMapBody').css('height'));
	var map_left = parseInt($('#itemMapBody').css('width'));
	//中心基準にする
	map_top -= map_top / 2;
	map_left -= map_left / 2;
	var msg_top = Orange.Search.Map.ZdcUserMsgWindow.my_size_top;
	var msg_left = Orange.Search.Map.ZdcUserMsgWindow.my_size_left;
	var mouse_top = Orange.Search.Map.ZdcMap.MouseMoveY;
	var mouse_left = Orange.Search.Map.ZdcMap.MouseMoveX;
	var top = map_top + msg_top - mouse_top;
	var left = map_left + msg_left - mouse_left;
	Orange.Search.Map.ZdcMap.scrollMap(left, top);
};

/**
 * 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,
		'itemSearchStation' : Orange.Search.itemSearchStation_select_first
	})[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;
	};
};



