// ----------------------------------------------------------------------------
// Extend Scripts with jQuery and MJL
// ----------------------------------------------------------------------------
"jQuery" in window && (function($) {
    // JavaScript有効フラグ設定
    var $html = $("html");
    $html.addClass("js");
    
    // iOS簡易対応
    if(navigator.userAgent.match(/iP(hone|(o|a)d)/)) {
        $html.addClass("ios");
    }
    
    // DOM構築完了時の処理
    $(function() {
        // 変数宣言
        // Memo: 本サイトでは.scrollpaneはコンテンツ内に1カ所のみ存在する前提
        var scrollpane = {
            api: "",
            options: {
                showArrows: true,
                verticalGutter: 0,
                verticalDragMinHeight: 33,
                verticalDragMaxHeight: 33
            }
        };
        
        
        // ロールオーバー
        MJL.enable.rollover("roll");
        
        // スタイリング補助
        $("ul > li:last-child").addClass("last-child");
        $("#birthday-entry .lyt-content-01-inner table").addClass("tbl-birthday")
                                                        .find("td:nth-child(2)").addClass("age");
        
        // 全体背景画像処理
        (function() {
            // ディレクトリ設定
            var dir;
            var path = location.pathname.split("/");
            if(path[1] === "" || path[1].indexOf(".") > -1) {
                dir = "";
            } else if(path[1] === "shop") {
                dir = "";
            } else if(path[1] === "movie") {
                dir = "/gallery";
            } else {
                dir = "/" + path[1];
            }
            
            // Dispatch
            $.supersized({
                min_width: 992,
                min_height: 671,
                slides: [{ image: dir + "/img/bg_body.jpg" }]
            });
        }());
        
        // グローバルナビ
        $("#nav-global").softlyMenu();
        
        // 外部サイトの別ウインドウオープン
        $("a").blankwindow();
        
        // コンテンツエリア内スクロールバー
        (function() {
            var $target = $(".scrollpane");
            if($target.length === 1) {
                $target.jScrollPane(scrollpane.options);
                
                // ScrollPane内の移動ボタン設定
                scrollpane.api = $target.data('jsp');
                if(scrollpane.api.getIsScrollableV()) {
                    // ボタン追加
                    var elemstr = "<ul class=\"nav-contents-02\">" +
                                  "<li><a href=\"#str-content-body\" class=\"scrollpane-top\">" +
                                  "<img src=\"/common/img/btn_backto_top.png\" width=\"56\" height=\"56\" alt=\"上に戻る\"></a></li>" +
                                  "</ul>";
                    var $insertTarget = $target.not(".no-scrollpane-top").find(".lyt-content-01-inner:last");
                    var $btn = $(elemstr).appendTo($insertTarget);
                    scrollpane.api.reinitialise(scrollpane.options);
                    
                    // イベント設定
                    $btn.find(".scrollpane-top").bind("click", function(event) {
                        event.preventDefault();
                        scrollpane.api.scrollTo(0, 0);
                    });
                }
            }
        }());
        
        // カルーセルギャラリー
        $(".carousel").carouFredSel({
             circular: false,
             infinite: false,
             auto: false,
             prev: {
                 button: ".prev a",
                 key: "left"
             },
             next: {
                 button: ".next a",
                 key: "right"
             }
        });
        
        // Lightbox
        $(".lyt-carousel a").fancybox({
            type: "image",
            overlayColor: "#fff",
            overlayOpacity: 0.4
        });
        
        // 2階層リスト制御
        $(".list-year").each(function() {
            // 初期化
            // Bug IE7: hide()を使うとfilterの関係でアンチエイリアスが無効になる。
            //          ここではfix不要な手段を利用する。
            $(this).find("> li:not(.show-always) > ul").css("display", "none");
            $(this).find("> li.show-always > ul").addClass("open");
            if(scrollpane.api) {
                scrollpane.api.reinitialise();
            }
            
            // イベント設定
            $(this).find("> li > a").click(function(event) {
                var $target = $(this).siblings("ul");
                
                // サブリストが存在する場合に制御実行
                if($target.length) {
                    if($target.hasClass("open")) {
                        $target.stop(true, true)
                               .slideUp(function() {
                                   $(this).css("height", "");
                                   if(scrollpane.api) {
                                       scrollpane.api.reinitialise(scrollpane.options);
                                   }
                               })
                               .removeClass("open");
                    } else {
                        $target.css("height", $target.height() + "px")
                               .stop(true, true)
                               .slideDown(function() {
                                   if(scrollpane.api) {
                                       scrollpane.api.reinitialise(scrollpane.options);
                                   }
                               })
                               .addClass("open");
                    }
                    
                    event.preventDefault();
                }
            });
        });
        
        // 商品のご紹介
        (function() {
            if(location.pathname.indexOf("/showcase") > -1) {
                $(".list-products-01 a").click(function() {
                    // Google Analytics Tracking
                    try{
                        _gaq.push(
                            ["_trackPageview", $(this).attr("href")],
                            ["b._trackPageview", $(this).attr("href")]
                        );
                    } catch(e){}
                }).fancybox({
                    overlayColor: "",
                    ajax: {
                        dataFilter: function(data) {
                            var $ret = $(data).find("#productdata");
                            return $ret;
                        }
                    }
                });
                
                // 商品データを#fancybox-content内に表示している場合にイベントを設定
                $("#fancybox-content .list-product-related a").live("click", function(event) {
                    event.preventDefault();
                    var $loading = $("#fancybox-loading"),
                        $contents = $("#fancybox-content > div"),
                        newUrl = $(this).attr("href");
                    
                    // Google Analytics Tracking
                    try{
                        _gaq.push(["_trackPageview", newUrl], ["b._trackPageview", newUrl]);
                    } catch(e){}
                    
                    // 現在のコンテンツの削除
                    var height = $("#productdata").innerHeight()
                    $contents.css("height", height)
                             .empty();
                    
                    // ロード中画像のアニメーション表示
                    $loading.show(function() {
                        // =fancybox _animate_loading()
                        var $this = $(this),
                            loadingFrame = 1,
                            loadingTimer = setInterval(function() {
                                if (!$this.is(":visible")){
                                    clearInterval(loadingTimer);
                                    return;
                                };
                                
                                $("div", $this).css("top", (loadingFrame * -40) + "px");
                                loadingFrame = (loadingFrame + 1) % 12;
                            }, 66);
                    });
                    
                    // 新しいコンテンツの取得・表示
                    $.ajax({
                        type: "GET",
                        dataType: "html",
                        url: newUrl,
                        success: function(html) {
                            var $newHtml = $(html).find("#productdata");
                            $newHtml.css("display", "none");
                            
                            $loading.hide();
                            $contents.css("height", "auto")
                                     .append($newHtml);
                            $newHtml.fadeIn("slow", function() {
                                // Bug IE7: fadeIn()を使うとfilterの関係でアンチエイリアスが無効になる。
                                if(MJL.ua.trident && MJL.ua.version <= 7) {
                                    $(this)[0].style.removeAttribute("filter");
                                }
                            });
                            $.fancybox.center();
                        }
                    });
                });
            }
        }());
        
        // ドリンクメニュー表示制御
        (function() {
            if(location.pathname.indexOf("/cafe") > -1) {
                var overlayID = "#fancybox-overlay";  // fancybox向け要素を再利用
                
                // オーバーレイ表示準備
                var $container = $("<div id=\"drinkmenu-content\" />").appendTo("body");
                var $menu = $("#drinkmenu");
                $menu.removeAttr("id");
                
                // レイヤークローズ処理
                function hideLayer() {
                    // Bug IE6-8: アルファチャネルPNGを含むレイヤーをfade操作すると縁が黒くなる。
                    if(MJL.ua.trident && MJL.ua.version <= 8) {
                        $container.hide();
                    } else {
                        $container.fadeOut();
                    }
                    
                    $(overlayID).fadeOut()
                                .unbind("click", arguments.callee);
                    $(document).unbind("keydown", hideLayerHandler);
                }
                
                // レイヤークローズハンドラ
                function hideLayerHandler(event) {
                    if(event.keyCode === 27) {
                        hideLayer();
                    }
                }
                
                $("#str-nav-local a[href='#drinkmenu']").click(function(event) {
                    event.preventDefault();
                    $container.stop(true, true);
                    
                    if($container.is(":hidden")) {
                        $container.append($menu);
                        // Bug IE6-8: アルファチャネルPNGを含むレイヤーをfade操作すると縁が黒くなる。
                        if(MJL.ua.trident && MJL.ua.version <= 8) {
                            $container.show();
                        } else {
                            $container.fadeIn();
                        }
                        
                        // マウスによるレイヤークローズ操作
                        var height = $(document).height();
                        $(overlayID).css({
                                        background: "#fff",
                                        opacity: 0.4,
                                        height: height,
                                        cursor: "pointer"
                                    })
                                    .fadeIn()
                                    .bind("click", hideLayer);
                        
                        // ESCキーによるレイヤークローズ操作
                        $(document).bind("keydown", hideLayerHandler);
                    } else {
                        hideLayer();
                    }
                });
            }
        }());
        
        // .scrollpane印刷対応
        $(".enable-print").each(function() {
            var $this = $(this);
            var activex = "ActiveXObject" in window && "function" === typeof window.ActiveXObject;
            var elem = activex ? (document.documentMode >= 9 ? "aside" : "div") : "aside";
            
            var content = $this.find(".lyt-content-01").html();
            if($this.parent().hasClass("entry")) {
                var className = "print-scrollpane entry";
            } else {
                var className = "print-scrollpane";
            }
            
            $("<" + elem + " />").addClass(className)
                                 .html(content)
                                 .appendTo($("#str-content-body"));
        });
    });
}(jQuery));

