/**
 * MJL enable インタフェイスの実行
 */
MJL.event.add(window, "load", function(event) {
    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="" 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(){
        $('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);
