/**
 * nyroModal拡張
 *
 * @requires jquery.js
 * @requires jquery.nyroModal.js
 *
 * @see jquery.nyroModal.js
 * @see nyroModal.css
 * @see http://nyromodal.nyrodev.com
 */
(function($) {

	/**
	 * nyroModalDomGallery - nyroModalを用いてDOMのギャラリー
	 *
	 * インラインのDOMエレメントを利用してギャラリー表示
	 * デフォルト動作として、"nyroModalDomGallery"クラスのエレメントにてDOMギャラリー生成
	 * 通常のnyroModalと同様に、rel属性にてギャラリーをグループ化
	 * DOM内の"nyroModalDomGalleryPrev"クラス、"nyroModalDomGalleryNext"クラスの要素、前後に切り替え可能
	 *
	 * @example $(".gallery_link").nyroModalDomGallery();
	 * @example $(".gallery_link").nyroModalDomGallery({padding:20});
	 * @example $.fn.nyroModalDomGallery.defaults.domGalleryOpenSelector = ".customclass";
	 * @example $.fn.nyroModalDomGallery.defaults.width = 500;
	 *
	 */
	$.fn.nyroModalDomGallery = function(settings){
		if (!this){
			return false;
		}
		//nyroModalManualによる表示をclickにバインド
		return this.each(function(){
			$(this).click(function(e) {
				e.preventDefault();
				$(this).nyroModalManual($.extend($.fn.nyroModalDomGallery.defaults, settings, { from: this }));
				return false;
			});
		});
	};

	/**
	 * nyroModalDomGallery標準設定
	 */
	$.fn.nyroModalDomGallery.defaults = {

		//nyroModalDomGalleryを開くデフォルトクラス
		domGalleryOpenSelector: ".nyroModalDomGallery",
		//前に移動するクラス指定
		domGalleryPrevSelector: ".nyroModalDomGalleryPrev",
		//次に移動するクラス指定
		domGalleryNextSelector: ".nyroModalDomGalleryNext",

		//endFillContentアクション
		endFillContent: function(modal, settings) {
			//同じrelの値を持つエレメントを抽出
			var gallery = $('[rel="'+ settings.from.rel +'"]');
			//ギャラリーグループの中での現在の表示位置を取得
			var currentIndex = gallery.index(settings.from);

			//前後のリンク要素抽出、非表示
			var prev = $(settings.domGalleryPrevSelector, modal.contentWrapper).hide();
			var next = $(settings.domGalleryNextSelector, modal.contentWrapper).hide();

			//前の表示が存在する場合
			if(0 < currentIndex) {
				//前のリンクを表示し、nyroModalManualをclickにバインド
				prev.show().click(function(e) {
					e.preventDefault();
					var index = currentIndex - 1;
					if (0 <= index) {
						gallery.eq(index).nyroModalManual(settings);
					}
					return false;
				});
			}

			//次の表示が存在する場合
			if(currentIndex < gallery.length - 1 ) {
				//次のリンクを表示し、nyroModalManualをclickにバインド
				next.show().click(function(e) {
					e.preventDefault();
					var index = currentIndex + 1;
					if (index < gallery.length) {
						gallery.eq(index).nyroModalManual(settings);
					}
					return false;
				});
			}

			//DOM要素が表示領域より大きい場合、縦スクロールバーの分だけ横幅を広げる
			resizeForScollbar(modal, settings);
		}
	};

	/**
	 * 縦スクロールバー表示時の横サイズ調整
	 *
	 * DOM要素が表示領域より大きい場合、縦スクロールバーの分だけ横幅を広げる
	 *
	 * @param Object modal nyroModalのmodalオブジェクト
	 * @param Object settings nyroModalのsettingsオブジェクト
	 */
	function resizeForScollbar(modal, settings){
		//表示
		modal.contentWrapper.show();
		//縦スクロールバーが表示されている場合
		if(isDisplayScrollBar(modal.content, "y")){
			//元のoverflowを保持
			var overflow = modal.content.css("overflow");
			//overflow = scrollに設定
			modal.content.css("overflow", "scroll");
			//足りないサイズを取得（スクロールバーのサイズ）
			var scorllbarSize = modal.content.attr("scrollWidth") - modal.content.attr("clientWidth");
			//overflowを元に戻す
			modal.content.css("overflow", overflow);
			//スクロールバーの大きさの設定分広げる
			modal.content.width(modal.content.width() + scorllbarSize);
			//表示ロジックを起動
			$.nyroModalSettings({
				width: settings.width + scorllbarSize
			});
		}
		//隠す
		modal.contentWrapper.hide();
	}

	/**
	 * スクロールバーが表示されているかどうか
	 *
	 * @param jQuery target 対象のjQueryオブジェクト
	 * @param String key スクロールバーの方向（"y"、"x"）
	 *
	 * @return Boolean スクロールバーが表示されているかどうか
	 */
	function isDisplayScrollBar(target, key){
		var val=target.css("overflow-"+key);
		if(val=="scroll")return true;
		if(val=="hidden")return false;
		if(val=="auto"||target.attr("tagName")=="HTML"){
			var method=(key=="y"?"Height":"Width");
			return target.attr("client"+method) < target.attr("scroll"+method);
		}
		return false
	}


	/**
	 * 初期アクション
	 */
	$(function(){
		//nyroModalのデフォルト設定
		$.fn.nyroModal.settings = $.extend($.fn.nyroModal.settings,{
			contentError: 'コンテンツの読み込みに失敗しました。<br /><br /><a href="#" class="nyroModalClose">閉じる</a>',
			minWidth: 100,
			minHeight: 100,
			endFillContent: function (modal, settings) {
				resizeForScollbar(modal, settings);
			}
		});

		//デフォルトのセレクタでnyroModalDomGalleryを設定
		$($.fn.nyroModalDomGallery.defaults.domGalleryOpenSelector).nyroModalDomGallery();

		/**
		 * 物件詳細でのDOMギャラリー
		 */
	
		//デフォルトのセレクタでnyroModalDomGalleryを設定
		$(".nyroModalDomGallery_property_detail").nyroModalDomGallery({});
	});

})(jQuery);

