/**
/*
 */
if(location.href.indexOf("file:///")==0 && window.console){
  $.extend({log: function(msg){console.log(msg)}});
}else{
  $.extend({log: function(){}});
}

/*
 * image rollover plugin
 */
(function($){
  $.fn["rollover"] = function(options){
    var settings = $.extend({
      "suffix" : "_o"
    }, options);
    
    var _imgs = [];
    
    this.each(function(){
      var dsrc  = $(this).attr('src');
      var ftype = dsrc.substring(dsrc.lastIndexOf('.'), dsrc.length);
      var hsrc  = (dsrc.indexOf(settings.suffix+ftype)>0) ? dsrc:dsrc.replace(ftype, settings.suffix+ftype);
      // preload
      _imgs.push(new Image());
      _imgs[_imgs.length-1].src = hsrc;
      
      $(this)
        .attr({"dsrc": dsrc, "hsrc": hsrc})
        .mouseover(function(){$(this).attr("src", $(this).attr("hsrc"));})
        .mouseout( function(){$(this).attr("src", $(this).attr("dsrc"));});
    });
    return this;
  };
})(jQuery);

/*
 * image rollover toggle plugin
 * @require image rollover plugin
 */
(function($){
  $.fn["rolloverToggle"] = function(options){
    var settings = $.extend({
      "current": true,
      "suffix" : "_o"
    }, options);
    
    this.each(function(){
      if(settings.current){
        // default -> hover
        $(this).attr({
          "dsrc": $(this).attr("hsrc"),
          "src" : $(this).attr("hsrc")
        });
      }else{
        // hover -> default
        $(this).attr({
          "dsrc": $(this).attr("hsrc").replace(settings.suffix,""),
          "src" : $(this).attr("hsrc").replace(settings.suffix,"")
        });
      }
    });
    return this;
  };
})(jQuery);

/*
 * image loader with callback plugin
 */
(function($){
  $.fn["imageLoader"] = function(callback){
    var _length = $(this).length;
    var _loaded = function(){
      _length--;
      if(_length==0) callback.apply();
    };
    this.each(function(){
      $("<img>")
        .attr("src", $(this).attr("src"))
        .load(_loaded)
        .error(_loaded);
    });
    return this;
  };
})(jQuery);

/*
 * L1 header plugin
 * @require image rollover plugin
 */
(function($){
  $.fn["l1header"] = function(options){
    // settings
    var settings = $.extend({
      "imgClass" : ".imgover",
      "mainID"   : "#navHeader",
      "subClass" : "navCategory",
      "cartID"   : "#gnav_cart_trigger",
      "searchID" : "#searchFocus",
      "duration" : 200,
      "animate"  : false
    }, options);

    // main
    this.each(function(){
      // ヘッダ第二階層で遷移しないのはクリックころす
      $(this).find("a").focus(function(){
        $(this).blur();
      });
      $(this).find("ul.navCategory>li>a").click(function(){
        if($(this).attr("href")=="#") return false;
      });
      
      // 検索フォーム
      $(this)
        .find(settings.searchID)
        .focus(function(){
          $(this).parent().parent().addClass("inputFocus");
        })
        .blur(function(){
          $(this).parent().parent().removeClass("inputFocus");
        });
      
      // 第二階層の開閉
      var _timer_header_toggle;
      $("#navHeader").hover(
        function(){
          clearTimeout(_timer_header_toggle);
          $("#header").stop().animate({height:100}, 400, "easeOutQuint", function(){
            $("#header").css({"overflow":"visible"});
          });
        },
        function(){
          _timer_header_toggle = setTimeout(function(){
            $("#header").stop().delay(100).animate({height:50}, 400, "easeOutQuint", function(){
              $("#header").css({"overflow":"hidden"});
            });
          }, 500);
        });
      
      // 第二階層の遅延クローズ用カレント表示保持
      $("#navHeader>li").mouseover(function(){
        $("#navHeader>li").removeClass("current");
        $(this).addClass("current");
      });
      
      // ３階層ドロップダウン
      $(settings.mainID).find("li").hover(
        function(){
          if(!settings.animate && $(this).parent().attr("id") == settings.mainID.replace("#","")){
            $(this).find(">ul").show();
          }else{
            $(this).find(">ul:not(:animated)").slideDown(settings.duration);
          }
        },
        function(){
          // カレントカテゴリ第二階層は閉じない
          if($(this).find(">ul").hasClass(settings.subClass)) return;
          if(!settings.animate && $(this).parent().attr("id") == settings.mainID.replace("#","")){
            $(this)
              .find(".sub")
              .hide()
              .end()
              .find(">ul")
              .hide();
          }else{
            $(this).find(">ul").slideUp(settings.duration, function(){
              // アニメーションのタイミング次第で第三階層が取り残されるので強制的に閉じる
              $(this).find(".sub").hide();
            });
          }
        });
      
      // ロールオーバー変更
      $(this).find(settings.imgClass)
        .unbind("mouseover")
        .unbind("mouseout")
        .parent()
        .parent()
        .hover(
          function(){
            var $img = $(this).find(">a>img");
            $img.attr("src", $img.attr("hsrc"));
          },
          function(){
            var $img = $(this).find(">a>img");
            $img.attr("src", $img.attr("dsrc"));
          });
    });
    return this;
  };
})(jQuery);

/*
 * L1 banner with category filter plugin
 * @require image rollover toggle plugin
 * @require image loader with callback plugin
 */
(function($){
  $.fn["l1Banner"] = function(options){
    // settings
    var settings = $.extend({
      "animate"  : false,
      "interval" : 4000
    }, options);
    
    // アニメーション設定（false指定でie7,8はアニメーションOFF）
    if(!settings.animate && $.support.opacity){
      settings.animate = true;
    }
    
    // china width 950 fix
    var _content_width = $("#visual").width();
    var _content_height_min = $("#visualTop .visualInner").height();
    var _content_height_max = $("#visualTop").height();
    
    var _visualBanner_category;
    var _visualBanner_current = 0;
    // カテゴリフィルタの固定リンクハッシュをヘッダのAタグから抽出
    var _content_location_permalinks = [];
    $("#navHeader>li>a").each(function(){
      _content_location_permalinks.push("#"+$(this).attr("href").split("#")[1]);
    });
    
    var _timer_visualLoading;
    var _timer_visualBanner_rotation;
    var _timer_visualBanner_toggle;
    
    // カテゴリ選択初期化
    var _initialize = function(callback){
      // location.hash判定
      var c, l = location.hash.replace("#!","").toLowerCase();
      if($.inArray(location.hash, _content_location_permalinks)!=-1){
        _visualBanner_category = "#visualBanner_"+l;
        c = ".category_"+l;
        $("#header_"+l)
          .addClass("selected")
          .find(">img")
          .rolloverToggle();
      }else{
        _visualBanner_category = "#visualTop";
        c = "";
        $("#top").addClass("selected");
        $("#visualLoading").hide();
      }
      
      // カレントバナー切替
      $("#visualBanner>div")
        .filter(":not(#visualLoading)")
        .hide()
        .end()
        .filter(_visualBanner_category)
        .show();
      
      // カレントコンテンツ切替
      if(c!=""){
        if(!settings.animate){
          $("#content_blocks>.content_block_list>li:not("+c+")").hide();
        }else{
          $("#content_blocks>.content_block_list>li:not("+c+")").slideUp(600, "easeOutQuint");
        }
      }
      
      // バナーが無限ループできるよう先頭要素のクローンを末尾に追加
      $("#visualBanner>div").each(function(){
        var $imgs = $(this).find(".item");
        if($imgs.length<=1) return;
        $imgs.eq(0).clone(true).appendTo($(this).find(".visualInner"));
        $(this).find(".visualInner").css("width", _content_width*($imgs.length+1));
      });
      
      // カレントバナー画像の読み込み完了したらローテーション開始
      if($.support.opacity){
        $(_visualBanner_category+" img").imageLoader(function(){
          $("#visualLoading").delay(400).fadeOut(400);
          _timer_visualBanner_rotation = setTimeout(_rotateBanner, settings.interval);
          callback.apply();
        });
      // IE7,8は画像読み込み待ちしない
      }else{
        $("#visualLoading").delay(400).fadeOut(400);
        _timer_visualBanner_rotation = setTimeout(_rotateBanner, settings.interval);
        callback.apply();
      }
    };
    
    // 自動ローテーション
    var _rotateBanner = function(){
      _timer_visualBanner_rotation = null;
      _visualBanner_current++;
      var $target = $(_visualBanner_category + " .visualInner");
      var l = $(_visualBanner_category+" .item").length-1;
      $target.stop().animate({left:-_content_width*_visualBanner_current}, 750, "easeInOutQuart", function(){
        var c = parseInt($(this).css('left').replace('px')) / -_content_width;
        // 末尾までローテーションしたらコールバックで先頭に戻す
        if(c == l) $target.css({'left':0});
        _rotateStart();
      });
      if(_visualBanner_current==l) _visualBanner_current = 0;
      // サムネイル部のカレント表示を更新
      if(!settings.animate){
        $(_visualBanner_category+">.thumbs .thumbItem")
          .eq(_visualBanner_current)
          .find(".thumbCurrent>img")
          .css({top:0})
          .end()
          .siblings()
          .find(".thumbCurrent>img")
          .css({top:38});
      }else{
        $(_visualBanner_category+">.thumbs .thumbItem")
          .eq(_visualBanner_current)
          .find(".thumbCurrent>img")
          .stop()
          .delay(300)
          .animate({top:0}, 350, "easeOutQuint")
          .end()
          .siblings()
          .find(".thumbCurrent>img")
          .stop()
          .delay(300)
          .animate({top:38}, 350, "easeOutQuint");
      }
      
    };
    
    // バナーカテゴリ切替
    var _switchBanner = function(cat){
      $.log("category current: " + cat);
      _rotateStop();
      
      // サムネイルエリアを閉じる
      //$("#visualBanner").stop().animate({height:470}, 400, "easeOutQuart");
      
      // ローディング
      clearTimeout(_timer_visualLoading);
      _timer_visualLoading = setTimeout(function(){
        $("#visualLoading")
          .stop()
          .fadeOut(200, _rotateStart);
      }, 500);
      
      $("#visualLoading")
        .stop()
        .css({opacity:($("#visualLoading").css("opacity")==1)?0:$("#visualLoading").css("opacity")})
        .show()
        .animate({opacity:1}, 250, function(){
          $(_visualBanner_category).hide();
          _visualBanner_current = 0;
          _visualBanner_category = "#visualBanner_" + cat;
          
          // 表示する前に初期化
          $(_visualBanner_category+" .visualInner")
            .stop(true, true)
            .css({'left':0})
            .parent()
            .parent()
            .find(">.thumbs")
            .find(">.thumbItem:not(.first_thumb) .thumbCurrent>img")
            .stop(true, true)
            .css({top:38})
            .end()
            .find(">.thumbItem.first_thumb .thumbCurrent>img")
            .stop(true, true)
            .css({top:0})
            .closest(_visualBanner_category)
            .show();
        });
    };
    
    // ローテーションタイマー開始
    var _rotateStart = function(){
      if($(_visualBanner_category+" .item").length<=1) return;
      if(_timer_visualBanner_rotation == null){
        //$.log("banner: timer start");
        _timer_visualBanner_rotation = setTimeout(_rotateBanner, settings.interval);
      }
    };
    
    // ローテーションタイマー停止
    var _rotateStop = function(){
      //$.log("banner: timer stop");
      clearTimeout(_timer_visualBanner_rotation);
      _timer_visualBanner_rotation = null;
    };
    
    // ウィンドウのフォーカス判定（inactive時はローテーション停止）
    $(window)
      .focus(_rotateStart)
      .blur (_rotateStop);
    
    // main
    _initialize(function(){
      
      // ヘッダでのカテゴリフィルタ
      var speed_  = 600;
      var easing_ = "easeOutQuint";
      
      // top
      $("#top")
        .click(function(){
          // カレント判定
          if($(this).hasClass("selected")) return false;
          $("#navHeader>li>a").removeClass("selected");
          $(this).addClass("selected");
          
          // ヘッダ切替
          $("#navHeader>li>a>img").rolloverToggle({current:false});
          
          // バナー切替
          _switchBanner($(this).attr("id"));
          
          // コンテンツ切替
          if(!settings.animate){
            $("#content_blocks>.content_block_list>li")
              .show();
          }else{
            $("#content_blocks>.content_block_list>li")
              .stop(true, true)
              .slideDown(speed_, easing_);
          }
          return false;
        });
        
      // category
      $("#navHeader>li>a")
        .click(function(){
          // カレント判定
          if($(this).hasClass("selected")) return false;
          $("#top, #navHeader>li>a").removeClass("selected");
          $(this).addClass("selected");
          
          // ヘッダ切替
          $("#navHeader>li>a:not(#"+$(this).attr("id")+")>img").rolloverToggle({current:false});
          $(this).find(">img").rolloverToggle();
          
          // バナー切替
          var cat = $(this).attr("id").replace("header_","");
          _switchBanner(cat);
          
          // コンテンツ切替
          var c = ".category_" + cat;
          if(!settings.animate){
            $("#content_blocks>.content_block_list>li")
              .filter(":not("+c+")")
              .hide()
              .end()
              .filter(c)
              .show();
          }else{
            $("#content_blocks>.content_block_list>li")
              .filter(":not("+c+")")
              .stop(true, true)
              .slideUp(speed_, easing_)
              .end()
              .filter(c)
              .stop(true, true)
              .slideDown(speed_, easing_);
          }
          return false;
        });
      
      // バナーエリアへのマウスオーバーでサムネイル開閉
      $("#visualBanner")
        .mouseover(function(){
          _rotateStop();
          /*
          clearTimeout(_timer_visualBanner_toggle);
          $(this)
            .stop()
            .animate({height:_content_height_max}, 600, "easeOutQuart");
          */
        })
        .mouseout(function(){
          _rotateStart();
          /*
          _timer_visualBanner_toggle = setTimeout(function(){
            $("#visualBanner")
              .stop()
              .animate({height:_content_height_min}, 400, "easeOutQuart");
          }, 400);
          */
        });
      
      // サムネイルにマウスオーバーでバナーのカレントを移動
      $("#visualBanner>div").each(function(){
        $(this).find(".thumbs a")
          .mouseover(function(){
            if(!settings.animate){
              $(this)
                .find(".thumbCurrent>img")
                .css({top:0})
                .end()
                .parent()
                .siblings()
                .find("a>.thumbCurrent>img")
                .css({top:38});
            }else{
              $(this)
                .find(".thumbCurrent>img")
                .stop()
                .animate({top:0}, 150, "easeOutQuart")
                .end()
                .parent()
                .siblings()
                .find("a>.thumbCurrent>img")
                .stop()
                .animate({top:38}, 100, "easeOutQuart");
            }
          })
          .each(function(i, elem){
            $(this)
              .click(function(){return false;})
              .mouseover(function(){
                $(_visualBanner_category+" .visualInner")
                  .stop()
                  .animate({left:(-_content_width*i)}, 750, "easeOutQuart");
                _visualBanner_current = i;
                $.log("banner current: "+i.toString());
              });
          });
      });
      
      // バナー左右の次へ／前へ
      $("#prevButton")
        .mouseover(function(){
          $("#visualBanner").trigger("mouseover");
        })
        .mouseout(function(){
          $("#visualBanner").trigger("mouseout");
        })
        .click(function(event){
                
                event.preventDefault();
          $(_visualBanner_category+">.thumbs a:eq(" + (_visualBanner_current-1).toString() +")")
            .trigger("mouseover");
        });
      $("#nextButton")
        .mouseover(function(){
          $("#visualBanner").trigger("mouseover");
        })
        .mouseout(function(){
          $("#visualBanner").trigger("mouseout");
        })
        .click(function(event){
          event.preventDefault();
          if(_visualBanner_current == 5){
            $(_visualBanner_category+">.thumbs a:eq(" + (_visualBanner_current-5).toString() +")")
              .trigger("mouseover");
          }else{
            $(_visualBanner_category+">.thumbs a:eq(" + (_visualBanner_current+1).toString() +")")
              .trigger("mouseover");
          }
        });
    });
    return this;
  };
})(jQuery);

/*
 * L1 animated rollover plugin
 */
(function($){
  $.fn["animatedRollover"] = function(options){
    // settings
    var settings = $.extend({
      duration:350
    }, options);
    
    // main
    this.each(function(){
      $(this).hover(
        function(){
          $(this)
            .find(".overlay")
            .stop()
            .css({left:-690})
            .animate({left:-230}, settings.duration, "easeOutQuart");
        },
        function(){
          $(this)
            .find(".overlay")
            .stop()
            .animate({left:230}, settings.duration*0.6, "easeInCubic");
        }
      );
    });
    return this;
  };
})(jQuery);

/*
 * L1 logo allocation plugin
 */
(function($){
  $.fn["logoAllocation"] = function(options){
    // settings
    var settings = $.extend({
      "cofMin"  : 4,
      "cofMax"  : 6,
      "retryMax":10
    }, options);
      
    var _content_logo_allocations = [];
    var _content_logo_element = $("<li />")
      .addClass("logo_block")
      .addClass("contentH10")
      .css({display:"none"});
    
    // main
    this.each(function(i, elem){
    
      // 縦4-6ブロックごとにロゴ1つ配置
      var cof = Math.floor(Math.random()*(settings.cofMax-settings.cofMin+1))+settings.cofMin;
      var len = $(this).find(">li").length;
      var cnt = Math.floor(len/cof);
      
      for(var j=0; j<cnt; j++){
        var k, h, r = settings.retryMax;
        
        while(true){
          k = cof*j+j+1;
          k += Math.floor(Math.random()*cof)+1;
          // インデックスをグリッド番号に翻訳
          h = 0;
          $(this)
            .find(">li")
            .each(function(i,elem){
              h+= ($(this).hasClass("contentH05"))?0:
                ($(this).hasClass("contentH10"))?1:2;
              if(k==i+1){
                h++;
                return false;
              }
            });
          // 横並びにならないようにカブリ総当り判定
          if($.inArray(h, _content_logo_allocations)!=-1){
            $.log("かぶったー: "+i.toString()+"-"+j.toString());
            r--;
            if(r>0) continue;
          }
          break;
        }
        if(r>0){
          _content_logo_allocations.push(h);
          $(this)
            .find(">li:nth-child("+k.toString()+")")
            //.after("<li class='logo_block contentH10'></li>");
            .after(_content_logo_element.clone());
        }
      }
    });
    
    if($("#top").hasClass("selected")){
      // ie fix
      if(!$.support.opacity){
        $("#content_blocks .logo_block").show();
      }else{
        $("#content_blocks .logo_block").slideDown(600, "easeOutQuint");
      }
    }
    $.log(_content_logo_allocations);
    return this;
  };
})(jQuery);

/*
 * L1 image crossfade plugin
 */
(function($){
  $.fn["crossFade"] = function(options){
    // settings
    var settings = $.extend({
      "selector" : ">a>img:odd",
      "duration" : 400,
      // yugop demo
      //"interval" : 1330
      "interval" : 2666
    }, options);
    
    // ie fix
    if(!$.support.opacity) settings.interval *= 1.5;
    
    // main
    var $target = $(this).filter(":visible").find(settings.selector);
    var _timer  = setInterval(function(){
      $target.stop(true, true).fadeToggle(settings.duration, "easeInOutQuart");
    },settings.interval);
    return this;
  };
})(jQuery);

/*
 * animated page top plugin
 */
(function($){
  $.fn["animatedPageTop"] = function(options){
    // settings
    var settings = $.extend({
    }, options);
    
    // main
    this.each(function(){
      $(this).click(function(){
        //$(window).scrollTop(0);
        $("html,body").animate({scrollTop:0}, "slow", "easeOutQuart");
        $(this).blur();
        return false;
      });
    });
    return this;
  };
})(jQuery);

// initialize
$(function(){
  $(".imgover").rollover();
  $("#header").l1header().l1Banner();
  // lazy evaluation
  setTimeout(function(){
    $("#content_blocks>ul").logoAllocation();
    $("#content_blocks>ul>li").animatedRollover();
    $("#content_blocks .contentCrossFade").crossFade();
    $("#goPageTop>a").animatedPageTop();
  },600);
});

