/**
 * MJL enable インタフェイスの実行
 */
MJL.event.add(window, "load", function(event) {
	MJL.enable.flash("flash");
	MJL.enable.heightEqualizer("image-col2", {groupBy:2});
	MJL.enable.heightEqualizer("image-col3", {groupBy:3});
	MJL.enable.heightEqualizer("index-col2", {groupBy:2});
	MJL.enable.heightEqualizer("index-col3", {groupBy:3});
	MJL.enable.rollover("nav-global", {disable:"unroll"});
	MJL.enable.rollover("roll");
}, false);


/**
 * jQuery setGlobalMenuActive plugin
 * グローバルナビゲーション現在地表示の自動化処理
 */
(function($){
	var name_space = 'setGlobalMenuActive';
	$.fn[name_space] = function(options){
		var elements = $(this);
		var pagePath = location.pathname.replace('index.html','').split('#')[0];
		(pagePath == "/") ? pagePath="/home/" : "";// サイトトップの場合、パスを/home/と仮想
		pagePath = pagePath.split("/")[1];
		function get(){
			return function(){
				var href = $('a', this).attr('href').replace('index.html', '').split('/')[1];
				(href == "") ? href = "home" : "";// hrefの値がnullの場合、homeと仮想
				if(pagePath == href){
					$('img', this).attr('src', $('img', this).attr('src').replace('.png', '_a.png'));
					$(this).addClass('unroll');
				}
			}
		}
		elements.each(get());
		return this;
	};
	$(function(){
		$('ul.nav-global > li').setGlobalMenuActive();
	});
})(jQuery);


/**
 * jQuery setLocalMenuActive plugin
 * ローカルナビゲーションの現在地表示とメニュー開閉の自動化処理
 */
 (function($){
	var name_space = 'setLocalMenuActive';
	$.fn[name_space] = function(options){
		var elements = $(this);
		var pagePath = location.pathname.replace('index.html','').split('#')[0];
		function get(){
			return function(){
				var href = $(this).attr('href').replace('index.html','');
				// 2階層目をラップするDD要素を隠す
				if($(this).parent().next('dd')){ $(this).parent().next('dd').hide() }
				// 3階層目をラップするUL要素を隠す
				if($(this).parent().parent().parent().parent().parent().is('dd')){ $(this).parent().parent().hide() }
				// リンク参照先と現在のページパスが一致する場合
				if(pagePath == href){
					// 1階層目
					if($(this).parent().is('dt')){
						$(this).parent('dt').addClass('active');
						if($(this).parent().next().is('dd')){
							$(this).parent('dt').addClass('open');
							$(this).parent().next('dd').show();
							$(this).parent().next('dd').addClass('open');
						}
					}
					// 2階層目
					else if($(this).parent().parent().parent().is('dd')){
						$(this).parent().parent().parent('dd').show();
						$(this).parent().parent().parent('dd').prev('dt').addClass('active');
						$(this).parent().parent().parent('dd').prev('dt').addClass('open');
						$(this).addClass('active');
					}
					// 3階層目
					else if($(this).parent().parent().parent().parent().parent().is('dd')){
						$(this).parent().parent().parent().parent().parent('dd').show();
						$(this).parent().parent().parent().parent().parent('dd').prev('dt').addClass('active');
						$(this).parent().parent().parent().parent().parent('dd').prev('dt').addClass('open');
						$(this).parent().parent().prev().addClass('active');
					}
				}
			};
		};
		elements.each(get());
		return this;
	};
	$(function(){
		$('.nav-local dl a').setLocalMenuActive();
	});
})(jQuery);


/**
 * jQuery setIcons plugin
 * target="_balnk"、参照先がpdfへのリンクテキストに自動でアイコンを付与する
 * 
 * Attributes:
 * -@options: オプションのハッシュ
 *  -icoBlank: blankアイコン画像のパス
 *  -icoPdf: PDFアイコン画像のパス
 */
(function($){
	var name_space = 'setIcons';
	$.fn[name_space] = function(options){
		var elements = $(this);
		var settings = $.extend({
			blank_icon : false,
			pdf_icon : false
		}, options);
		var icoBlank = '<img src="'+ settings.blank_icon +'" alt="リンクを新しいタブで開く" class="icon" />';
		var icoPdf = '<img src="'+ settings.pdf_icon +'" alt="pdf" class="icon" />';
		function get(){
			return function(){
				$('a[@target$=blank]', this).not(':has(img)').not('[@href$=pdf]').not($(".index-col2 li h2 a", this)).not($(".index-col3 li h2 a", this)).not($("div.recommend h3 a", this)).append(icoBlank);
				$('a[@href$=pdf]', this).not(':has(img)').not($(".index-col2 li h2 a", this)).not($(".index-col3 li h2 a", this)).not($("div.recommend h3 a", this)).append(icoPdf);
			}
		}
		elements.each(get());
		return this;
	};
	$(function(){
		$('#contents').setIcons({ blank_icon: "/compo/img/primary/icon_blank.png", pdf_icon: "/compo/img/primary/icon_pdf.png" });
	});
})(jQuery);


/**
 * jQuery setImgParallelStyler plugin
 * 画像とテキストの並列処理
 * 
 * Attributes:
 * -@options: オプションのハッシュ
 *  -side: 画像の位置が、right or left
 */
(function($){
	var name_space = 'setImgParallelStyler';
	$.fn[name_space] = function(options){
		var elements = $(this);
		var settings = $.extend({
			side : false
		}, options);
		if("left" != settings.side && "right" != settings.side){
			throw Error("invalid side type: '"+settings.side+"'");
		}
		function getImgParallelStyler(){
			return function(){
				var obj = $(this);
				var imgBlock = $("p.image", obj);
				var img = $("img", imgBlock);
				function resize(){
					var imgWidth = img.width();
					if(imgWidth){
						imgBlock.css("width",imgWidth+"px"); // 画像幅を強制
						$("div.text", obj).css("margin-"+settings.side, imgBlock[0].offsetWidth+"px");// 別カラムの margin を調整
					}
				}
				resize();
				img.load(function(){
					resize();
				});
			}
		}
		elements.each(getImgParallelStyler());
		return this;
	};
	$(function(){
		$('.image-parallel.image-L').setImgParallelStyler({ side:'left' });
		$('.image-parallel.image-R').setImgParallelStyler({ side:'right' });
	});
})(jQuery);


/**
 * jQuery setHeightParallelStyler plugin
 * dtとddの並列処理
 * 
 * Attributes:
 * -@options: オプションのハッシュ
 *  -delay: 文字サイズの変更のチェックインターバル（ms）、デフォールトで 1000 (1秒)
 */
(function($){
	var name_space = 'setHeightParallelStyler';
	$.fn[name_space] = function(options){
		var settings = {
			delay: 1000
		};
		var elements = $(this);
		if( $("#js_etalon").length ){ var etalon = $('#js_etalon').get(0); }
		else{ var etalon = $('body').append('<div id="js_etalon_wrapp" style="width:0;height:0;overflow:hidden;"><span id="js_etalon">&nbsp;</span></div>').find('#js_etalon').get(0); };
		
		var base_size = etalon.offsetHeight;
		var interval = setInterval(function(){
			var current_size = etalon.offsetHeight;
			if( current_size != base_size ){
				base_size = current_size;
				elements.each(get());
			};
		}, settings.delay);
		
		function get(){
			return function(){
				var obj = $(this);
				$("> dt", obj).each(function(){
					var ddHeight = $(this).next("dd").height();
					$(this).css("height",ddHeight+"px");
				});
			}
		}
		elements.each(get());
		return this;
	};
	$(function(){
		$('#primary dl.date').setHeightParallelStyler();
	});
})(jQuery);


/**
 * jQuery setFlatHeightStyler plugin
 * 子供要素の高さを揃えます。
 * 
 * Attributes:
 * -@options: オプションのハッシュ
 *  -flatUnit: 子孫要素の中で、処理を走らせる対象を指定する。class名を記載、デフォルトは無し（全ての子供要素を対象とする）
 *  -delay: 文字サイズの変更のチェックインターバル（ms）、デフォルトで 1000 (1秒)
 */
(function($){
	var name_space = 'setFlatHeightStyler';
	$.fn[name_space] = function(options){
		var settings = $.extend({
			flatUnit: false,
			delay: 1000
		}, options);
		var elements = $(this);
		if( $("#js_etalon").length ){ var etalon = $('#js_etalon').get(0); }
		else{ var etalon = $('body').append('<div id="js_etalon_wrapp" style="width:0;height:0;overflow:hidden;"><span id="js_etalon">&nbsp;</span></div>').find('#js_etalon').get(0); };
		
		var base_size = etalon.offsetHeight;
		var interval = setInterval(function(){
			var current_size = etalon.offsetHeight;
			if( current_size != base_size ){
				base_size = current_size;
				elements.each(get());
			};
		}, settings.delay);
		
		function get(){
			return function(){
				var obj = $(this);
				var maxHeight = 0;
				function flatHeight(target){
					var elms = $(target, obj);
					elms.each(function(i){
						var _this = $(this);
						_this.height('auto');
						var height = _this.height();
						if(height > maxHeight){ maxHeight = height }
						_this.css("height", maxHeight + "px");
					});
				}
				if(settings.flatUnit){ flatHeight('.'+settings.flatUnit) }
				else{ flatHeight("> *") }
			}
		}
		elements.each(get());
		return this;
	};
	$(function(){
		$('ul.index-col2').setFlatHeightStyler({ flatUnit: 'flat' });
	});
})(jQuery);


/**
 * jQuery setStripes
 * ストライプ処理
 * Table か DL要素を対象
 */
(function($){
	var name_space = 'setStripes';
	$.fn[name_space] = function(options){
		var elements = $(this);
		function get(){
			return function(){
				var TR = $(this).find("tbody>tr");
				var DT = $(this).find("dt");
				var DD = $(this).find("dd");
				if(TR.length > 0){
					TR.each(function(i){
						$(this).removeClass("odd").removeClass("even").addClass( (i%2 ? "even" : "odd") );
					});
				}
				if(DT.length > 0){
					DT.each(function(i){
						$(this).removeClass("odd").removeClass("even").addClass( (i%2 ? "even" : "odd") );
					});
				}
				if(DD.length > 0){
					DD.each(function(i){
						$(this).removeClass("odd").removeClass("even").addClass( (i%2 ? "even" : "odd") );
					});
				}
			}
		}
		elements.each(get());
		return this;
	};
	$(function(){
		$('dl.date').setStripes();
	});
})(jQuery);

