/**
 * 地図印刷ライブラリ
 * 
 * @requires jquery.js
 */

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

/**
 * マーカ画像を透過gifに置き換える
 */
Orange.Search.Map.Print.marker_gif = function () {
	if(!$.browser.msie && !$.browser.mozilla) return;
	var layer = Orange.Search.Map.ZdcMap.my_get_last_user_layer();
	if (!layer) return;
	$.each(layer.markers, function () {
		var img = $(this.doc).find('div:first, span:first').css('filter', '').find('img').show();
		img.attr('src', img.attr('src').replace(/\.\w+$/, '.gif'));
	})
};

/**
 * ズーム画像を透過gifに置き換える(mozilla)
 */
Orange.Search.Map.Print.basedoc_mozilla = function () {
	var $target = $(this).find('img');
	$target.attr('src', $target.attr('src').replace(/\.\w+$/, '.gif'));
};

/**
 * ズーム画像を透過gifに置き換える(msie)
 */
Orange.Search.Map.Print.basedoc_msie = function () {
	var $target = $(this).css('filter') ? $(this) : $(this).children('div, span').eq(0);
	var filter = $target.css('filter');
	if (!filter) return;

	var src = filter.match(/src="?([\w\/\.\-]+)"?/);
	if (!src) return;
	var gif = src[1].replace(/\.\w+$/, '.gif');
	var style = $target.attr('style');
	var c_name = $target.attr('class');
	var z_index = $target.css('z-index') - 0;
	$target
		.css('filter', '')
		.find('img')
			.attr({'src' : gif, 'style' : style, 'class' : c_name})
			.css('z-index', ++z_index)
			.show()
	;
};

$(function () {
	if($.browser.msie && $.browser.version < 7) return;
	$('#itemMapBody').css({'width' : '850px', 'height' : '765px'});
});

/**
 * 初期化
 */
Orange.Search.Map.Print.initialize = function (mansion) {
	$('#mapMansionName_id').each(function () {
		var c_name = ({
			'3' : 'advance',
			'2' : 'onSale',
			'1' : 'soldOut'
		})[mansion.status_flag];
		$(this).attr('class', c_name);
	});
	Orange.Search.Map.initialize();
	Orange.Search.Map.ZdcMap.setMapScale(16);
	Orange.Search.Map.ZdcMap.setPrintMode();

	//最後のレイヤーを取得
	Orange.Search.Map.ZdcMap.my_get_last_user_layer = function () {
		var layers = Orange.Search.Map.ZdcMap.ZdcUserLayers;
		if (!layers.length) return false;
		return layers[layers.length - 1];
	};

	var marker_point = Orange.Util.LatLong(mansion.lon, mansion.lat, mansion.lon_jp, mansion.lat_jp);

	var model_point = null;
	if (mansion.model_room_lon && mansion.model_room_lat) model_point = new ZdcPoint(eval(mansion.model_room_lon), eval(mansion.model_room_lat));
	$('#doScrollToCenterMansion').click(function (e) {e.preventDefault();
		Orange.Search.Map.ZdcMap.scrollToCenter(marker_point);
	});
	$('#doScrollToCenterModelRoom').click(function (e) {e.preventDefault();
		if (!model_point) return;
		Orange.Search.Map.ZdcMap.scrollToCenter(model_point);
	});
	var get_icon = Orange.Search.Map.Print.get_icon;
	var change_layer = function () {
		var max_retry = 30;
		set_model_room_icon();
		setTimeout(function () {
			if (!max_retry--) return;
			var layer = Orange.Search.Map.ZdcMap.my_get_last_user_layer();
			if (!layer || !layer.markers.length) return setTimeout(arguments.callee, 50);
			$.each(layer.markers, function () {
				var maker = this;
				maker.setType('static');
				if (get_icon) maker.setIcon(get_icon());
				Orange.Search.Map.Print.marker_gif();
				ZdcEvent.clearInstanceListeners(maker);
				ZdcEvent.addListener(maker, "mousedblclickmarker", function () {
					var t = maker.my_mousedblclickmarker_target || '#doScrollToCenterMansion';
					$(t).click();
				});
			});
		}, 0);
	}
	var set_model_room_icon = function () {
		if (!model_point) return;
		var icon = new ZdcIcon();
		icon.size = new ZdcSize(68,68);
		icon.offset = new ZdcPixel(-26, -54);
		icon.image = '/mansion/detail/images/ico_modelroom_01.png';
		var m_room = new ZdcMarker(model_point, icon);
		m_room.my_mousedblclickmarker_target = '#doScrollToCenterModelRoom';
		m_room.setType('static');
		var layer = Orange.Search.Map.ZdcMap.my_get_last_user_layer();
		layer.addMarker(m_room);
		return m_room;
	}
	Orange.Util.getFolderData(function () {
		Orange.Search.Map.callback({'response' : {result : {data : [mansion] }}});
		change_layer();
		ZdcEvent.clearInstanceListeners(Orange.Search.Map.ZdcMap);
		Orange.Search.Map.ZdcMap.setMapLocation(marker_point, 16);
		Orange.Search.Map.my_remap_mansions();
		var remap = function () {
			Orange.Search.Map.ZdcMap.clearUserLayer();
			Orange.Search.Map.my_remap_mansions();
			change_layer();
			set_model_room_icon();
			Orange.Search.Map.Print.marker_gif();
		};
		ZdcEvent.addListener(Orange.Search.Map.ZdcMap, "changezoomend", remap);
		ZdcEvent.addListener(Orange.Search.Map.ZdcMap, "scrollmapend", remap);
		ZdcEvent.addListener(Orange.Search.Map.ZdcMap, "dragmapend", remap);
		ZdcEvent.addListener(Orange.Search.Map.ZdcMap, "dblclickend", remap);
		ZdcEvent.addListener(Orange.Search.Map.ZdcMap, "dblclicknodragend", remap);
		Orange.Search.Map.ZdcMap.setMapScale(16);
		(function () {
			if (!model_point) return;
			var m_room = set_model_room_icon();

			//一定倍率以下でモデルルームが表示できるなら表示する
			var box = new ZdcBox(m_room.Point, marker_point);
			var scale = Orange.Search.Map.ZdcMap.getMapBoxScale(box);
			//一定倍率以下は何もしない
			if (scale < 10) return;
			//一定倍率以内なので、中心位置のみ変更
			if (16 < scale) scale = undefined;
			Orange.Search.Map.ZdcMap.setMapLocation(box.getBoxCenter(), scale);
		})();

		if (!$.browser.mozilla && !$.browser.msie) return;
		var func = $.browser.mozilla ? Orange.Search.Map.Print.basedoc_mozilla :  Orange.Search.Map.Print.basedoc_msie;
		if($.browser.msie && $.browser.version < 7) {
			$('#basedoc').each(func);
		} else {
			$('#basedoc, #search_map_btn_zoomOut, #search_map_btn_zoomIn').each(func);
		}
		Orange.Search.Map.Print.marker_gif();
	});
	var src = $('#printOut img').attr('src');
	var src_over = src.replace(/\.[^.]+$/, '_o$&');
	$('#printOut')
		.click(function () { print(); return false; })
		.find('img')
			.hover(
				function () { this.src = src_over; },
				function () { this.src = src; }
			)
			.pngfix()
	;
};

