﻿////////////////////////////////////////
// 
// Initialize
// Events
// Scrollable
// Tabs
// Stories
// MainNav
// SiteScroll
// Keyboard
// Methods
//  
////////////////////////////////////////
// Initialize

jQuery(function ($) 
{	
	$.DebugMobile = false;
	
	$.Body = $('body');
    $.Window = $(window);

	//alert(navigator.userAgent);
    $.Mobile = ($.Body.hasClass('webkit-mobile') || (navigator.userAgent.match(/iPhone/i)) || (navigator.userAgent.match(/iPod/i)) || (navigator.userAgent.match(/iPad/i)) || (navigator.userAgent.match(/Android/i)));
    $.Android = (navigator.userAgent.match(/Android/i)) == "Android";

	////////////////////////////////
    // scroll対象のセット
    var scroll = "";

	if( $.DebugMobile )
		$.Mobile = true;
    
    if( $.Mobile )
    {
		var meta = document.createElement('meta');
		meta.setAttribute('name', 'viewport');
	
		// Androidはviewportのwidthが指定できないので、別途対応
		if( $.Android )
			meta.setAttribute('content', 'target-densitydpi=device-dpi, width=1024px, user-scalable=0');
		else
			meta.setAttribute('content', 'width=1024px ,user-scalable=0');
		document.getElementsByTagName('head')[0].appendChild(meta);
	
		scroll = "#wrapper";
		$.Window = $("#wrapper");
	
		$.MobileScroll = new iScroll('scroller',{desktopCompatibility:true, zoom:false});
		document.addEventListener('touchmove', function (e) { e.preventDefault(); }, false);
		
		updateWindowSize();
		window.addEventListener('onorientationchange' in window ? 'orientationchange' : 'resize', updateWindowSize, false);
	}
    else if($.browser.mozilla || $.browser.msie) // FireFox or IE
		scroll = 'html';
	else if( $.browser.opera ) // Opera
		scroll = (document.compatMode == 'BackCompat') ? 'body' : 'html';
	else
		scroll = 'body';
	
	$.Scroll = $(scroll);
    ////////////////////////////////
 
    $.Unsupported = $.Body.hasClass('unsupported-browser');
    
    $.Body.Keyboard();
   	
   	$.section_width = 1400;
   	$.IsScrollAnim = false;
    $('[data-controller]').Instantiate();
    $('.story').SetSectonAttr();

    if( $.isIE(8))
    {
		if( $.isIE(6))
		{
			// PNG透過が正しくされるが、clickイベント系が受け付けなくなるので、表示画像のみに適用
			$(".title_logo, .title_caption, [class*=over],#side_menu,img[id^='lead-'], .bg").each(function()
			{
				$(this).fixPng();
				$(this).addClass("_fixPng");
			});
			
			$(".over img,#side_menu img,#twitter_icon,#face_icon").each(function()
			{
				if( !$(this).hasClass("_fixPng"))
				{
					var $src = $(this).attr('src'),
						$useFilter = $src.match(/\.png$/);
			
					if( $useFilter )
					{
						$(this).css('filter', "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + $src + "')");
						$(this).attr('src', "./lib/images/share/ie6png.gif");
					}
					$(this).css("behavior","none");
					$(this).addClass("_useFilter");
				}
			});

			// fixed
			$('#footerArea').exFixed();
			$('#side_menu').exFixed();
			$('#mainNav').exFixed();
		}
		else
		{
			$("[class*=over] .img[id*='lead-'], .tabs > img").each(function()
			{
				$(this).fixPng();
				$(this).addClass("_fixPng");
			});
		}
	}
	///////////////////////////////////
	// OpeningAnim
	$.IsOpeningAnim = true;
	$.currentSectionId = sectionArry[0].id;
	$.Body.triggerHandler($.Events.SCROLL_TO,{id:$.currentSectionId, duration:10});
		
	// TITLEの背景ロード
	var bgSrc = $('#'+$.currentSectionId+" .bg").attr("bgsrc");
	$('#'+$.currentSectionId).BgImageTransition(bgSrc, 0, 0, false, function(tgt)
	{
		// ロード完了後、ページTOP表示
		if( $.isIE(6))
		{
			$('#footerArea').css({"visibility":"visible"});
			$.IsOpeningAnim = false;
			$.Body.triggerHandler($.Events.SECTION_ENTER,$.currentSectionId);
		}
		else
			startOpeningAnim();
	});
});

////////////////////////////////////////
// Sectionを取得
var sectionArry = new Array();
var sectionIdx = 0;

(function($) 
{
	$.fn.SetSectonAttr = function(settings) 
	{
		var config = {};
		if (settings) $.extend(config, settings);
		this.each(function() 
		{
			var $self = $(this);
			var obj = new Object();
			obj.top = $self.offset().top;
			obj.height = $self.height();
			obj.id = $self.attr('id');
			sectionArry.push(obj);
		});   
	}
})(jQuery);

// Mobile用
function doScroll()
{
	window.scrollTo(0,1);
}

function updateWindowSize()
{
	var screenW = innerWidth;
	var screenH = innerHeight;
	
	$('html').css("width", screenW+"px");
	$('html').css("height", screenH+"px");
	
	$('#wrapper').css("height", screenH+"px");
	if( $.Android )
	{
		doScroll();
	}
}

////////////////////////////////////////
// Openingアニメーション

// オープニングアニメーションスタート
function startOpeningAnim()
{
	// footer位置設定
	$('#footerArea').css({"visibility":"visible", "bottom": '-100px'});
	
	$('#mainNav').css({visibility:"visible"});
	
	// ナビゲーション位置設定
	$('#mainNav a').each(function()
	{
		$(this).attr('org_position',$(this).css('position'));
		$(this).css({'position':'relative', 'top': $.Window.height(), 'right' : '0px' });
	});
	
	// TITLEアニメーション開始
	var top = parseInt($('.title_logo').css('top').replace('px',''));
	$('.title_logo').css({"visibility":"visible", 'top': top+$('#'+sectionArry[0].id).height()})
	.delay(500)
	.animate( {'top':top}, 1500, 'easeOutQuad');
	top = parseInt($('.title_caption').css('top').replace('px',''));
	$('.title_caption').css({"visibility":"visible", 'top': top+$('#'+sectionArry[0].id).height()})
	.delay(1000)
	.animate( {'top':top}, 1500, 'easeOutQuad', function()
	{
		onFinishTitleAnim();
	});
}

// TITLEアニメーション完了
function onFinishTitleAnim()
{
	// ナビゲーションアニメーション開始
	var delay = 0;
	var navLen = $('#mainNav a').length;
	var counter = 0;
	$('#mainNav a').each(function()
	{
		$(this)
		.delay(delay)
		.animate({'top': '0px'}, 800, 'easeOutBack', function()
		{
			counter++;
			$(this).css({'position': $(this).attr('org_position') });
			if( navLen <= counter )
			{
				setTimeout(onFinishNavAnim, 500);
			}
		});
		delay+=200;
	});
}

// ナビゲーションアニメーション完了
function onFinishNavAnim()
{
	$.IsOpeningAnim = false;
	$.Body.triggerHandler($.Events.SECTION_ENTER,$.currentSectionId);
	
	// footerアニメーション開始
	$('#footerArea')
	.animate( {'bottom':'0px'}, 800, 'easeOutQuad', function()
	{
		onFinishFooterAnim();
	});
}

// footerアニメーション開始
function onFinishFooterAnim()
{
	onFinishOpeningAnim();
}

// オープニングアニメーション完了
function onFinishOpeningAnim()
{
}

////////////////////////////////////////
// Events

(function($) {

  $.Events = {

     SECTION_ENTER: 'sectionEnter',
     
     SCROLL_TO: 'scrollTo',
     
     SCROLL: 'windowScroll',
     SCROLL_ENTER: 'windowScrollEnter',
     SCROLL_LEAVE: 'windwScrollLeave',
     
     KEY_LEFT: 'keyLeft',
     KEY_RIGHT: 'keyRight'
  }
  
})(jQuery);


////////////////////////////////////////
// Instantiate

(function($) 
{
	$.fn.Instantiate = function(settings) 
	{
		var config = {};
		if (settings) $.extend(config, settings);
		this.each(function() 
		{
			var $self = $(this),
			$controller = $self.attr('data-controller');  
			
			if ($self[$controller])
				$self[$controller]();     
		});   
	}
})(jQuery);

////////////////////////////////////////
// Scrollable 

(function($) 
{
	$.fn.Scrollable = function(settings) 
	{
     var config = { threshold: -100, offset_intertia: .15};
 
     if (settings) $.extend(config, settings);
    
     this.each(function() 
     {  
        var $self = $(this),
			$id = $self.attr('id');
            
        config.threshold = 0;
        
        if ( $.Unsupported )
        {  
			$self.css({backgroundAttachment:'scroll'});
        }
        else
        {
			function updateScroll()
			{
				if ( $.inview($self,{threshold:config.threshold}) )
				{
					if (!$self.hasClass('_inView'))
					{
						$self.addClass('_inView');		
						$self.triggerHandler($.Events.SCROLL_ENTER);
					}
					
					if(settings.is_nav)
					{
						var isNavChange = $.isNavChange($self);
						if( isNavChange	&& $.currentSectionId !=$id)
						{
							$self.addClass('_active');
							$.Body.triggerHandler($.Events.SECTION_ENTER,$id);
						}
						else if( !isNavChange && $self.hasClass('_active'))
							$self.removeClass('_active');
					}
					
					if( !$.isIE(6)&&!$.Mobile )
						$.scrollbackground($self);
					
					$self.triggerHandler($.Events.SCROLL,$.distancefromfold($self,{threshold:config.threshold}) - config.threshold);
				}
				else
				{
					if ($self.hasClass('_inView'))
					{
						$self.removeClass('_inView');
						$self.triggerHandler($.Events.SCROLL_LEAVE);
					}
				}
			}
			
			if( $.Mobile )
			{
				$self.css({backgroundAttachment:'scroll'});
				$("#scroller").bind('touchmove', updateScroll );
				if($.DebugMobile)
					$("#scroller").bind('mousemove', updateScroll );
			}
			else
				$.Window.bind('scroll', updateScroll);
        }
     });
     
    return this;
     
  } 
})(jQuery);

////////////////////////////////////////
// Tabs

(function($) 
{
	$.fn.Tabs_CENTERPARK = function() 
	{
		var animDuration = 500;
		
		this.each(function() 
		{  
			var $self = $(this),
				$tabsImgs = ".tabs .tabs_menu img";
			
			/* ------------------------------------------
			* tab
			*/
			//タブ選択時の画像名サフィックス（拡張子前）
			var TAB_IMAGE_OUT_SFX = '_out.';
			var TAB_IMAGE_OVER_SFX = '_over.';
		
			//マウスオーバー アウト処理
			$($tabsImgs,$self)
			.css({cursor:"pointer"})
			.mouseover(function()
			{
				if( $(this).hasClass("_useFilter"))
					$(this).css("filter", $(this).css("filter").replace(TAB_IMAGE_OUT_SFX, TAB_IMAGE_OVER_SFX));
				else
					$(this).attr('src', $(this).attr('src').replace(TAB_IMAGE_OUT_SFX, TAB_IMAGE_OVER_SFX));
			})
			.mouseout(function()
			{
				if( $(this).hasClass("_useFilter"))
					$(this).css("filter", $(this).css("filter").replace(TAB_IMAGE_OVER_SFX, TAB_IMAGE_OUT_SFX));
				else
					$(this).attr('src', $(this).attr('src').replace(TAB_IMAGE_OVER_SFX, TAB_IMAGE_OUT_SFX));
			});
			
			//タブクリック処理
			$($tabsImgs,$self).click(function()
			{
				var $id = $(this).attr("scrollto");
				if( $id != undefined )
					$.Body.triggerHandler($.Events.SCROLL_TO,{id:$id});
			});
			
			// 背景をセット
			var bgSrc = $(".bg",$self).attr("bgsrc");
			$self.BgImageTransition(bgSrc, animDuration);
			
		});
		return this;
    }
    
    
    $.fn.Tabs = function() 
	{
		var animDuration = 500;
		var waitDuration = 3000;
		
		if( $.isIE(6) || $.Mobile)
			animDuration = 0;
			
		this.each(function() 
		{  
			var $self = $(this),
				$id = $self.attr('id');
				$tabsImgs = ".tabs .tabs_menu img",
				$navImgs = ".tabs .tabs_nav img",
				$currentTab = "";
				
			/* ------------------------------------------
			* tab
			*/
			//タブ選択時の画像名サフィックス（拡張子前）
			var TAB_IMAGE_SELECT_SFX = '_select.';
			var TAB_IMAGE_OUT_SFX = '_out.';
			var TAB_IMAGE_OVER_SFX = '_over.';
		
			//マウスオーバー アウト処理
			$($tabsImgs,$self)
			.css({cursor:"pointer"})
			.mouseover(function()
			{
				if( $(this).hasClass("_useFilter"))
					$(this).css("filter", $(this).css("filter").replace(TAB_IMAGE_OUT_SFX, TAB_IMAGE_OVER_SFX));
				else
					$(this).attr('src', $(this).attr('src').replace(TAB_IMAGE_OUT_SFX, TAB_IMAGE_OVER_SFX));
			})
			.mouseout(function()
			{
				if( $(this).hasClass("_useFilter"))
					$(this).css("filter", $(this).css("filter").replace(TAB_IMAGE_OVER_SFX, TAB_IMAGE_OUT_SFX));
				else
					$(this).attr('src', $(this).attr('src').replace(TAB_IMAGE_OVER_SFX, TAB_IMAGE_OUT_SFX));
			});
							
			//タブクリック処理
			$($tabsImgs,$self).click(function()
			{
				var myId = $(this).attr("tlabel");
				var myGroup = myId.slice(1,7);
				//パネル部の hide/show
				$("div[id ^= " + myGroup +"]",$self).hide();
				$(myId).show();
				//タブ部の画像切替(select/out)
				$("[tlabel *= " + myGroup +"]",$self).each(function()
				{
					if ( $(this).attr('tlabel') != myId )
					{
						// 選択状態をクリア
						setNavImgSrc(this, TAB_IMAGE_OUT_SFX);
					}
				});
				
				// navImgクリア
				$($navImgs,$self).each(function(){
					// 選択状態をクリア
					setNavImgSrc(this, NAV_IMAGE_OUT_SFX);
				});
				
				// 選択
				setTabImgSrc(this, TAB_IMAGE_SELECT_SFX);
				
				// sectionの中心に移動
				$.Body.triggerHandler($.Events.SCROLL_TO,{id:$id, easing:'easeInOutQuad', max:150, min:150});
				
				//リード文 hide/show
				if(myId.indexOf("-01") == -1)
					$("#lead-" + myGroup,$self).hide("slow");
				else 
					$("#lead-" + myGroup,$self).show("slow");
				
				// 背景画像スライドショー開始
				$currentTab = '#'+$id+' '+myId;
				setBgImageTransition();
			});
			
			// tab Imgアイコン状態設定
			function setTabImgSrc(a_tgt, a_sfx)
			{
				if( $(a_tgt).hasClass("_useFilter"))
					var src = $(a_tgt).css('filter');
				else
					var src = $(a_tgt).attr('src');
				
				// 一度クリア
				src = src.replace(TAB_IMAGE_OVER_SFX, TAB_IMAGE_OUT_SFX);
				src = src.replace(TAB_IMAGE_SELECT_SFX, TAB_IMAGE_OUT_SFX);
				
				// 状態を設定
				if( TAB_IMAGE_OUT_SFX != a_sfx )
					src = src.replace(TAB_IMAGE_OUT_SFX, a_sfx);
					
				if( $(a_tgt).hasClass("_useFilter"))
					$(a_tgt).css('filter', src);
				else
					$(a_tgt).attr('src', src);
			}
			
			
			/* ------------------------------------------
			 * nav
			 */
			 
			//nav選択時の画像名サフィックス（拡張子前）
			var NAV_IMAGE_SELECT_SFX = '_select.';
			var NAV_IMAGE_OUT_SFX = '_out.';
			var NAV_IMAGE_OVER_SFX = '_over.';
			
			//マウスオーバー アウト処理
			$($navImgs,$self)
			.mouseover(function()
			{
				if( $(this).hasClass("_useFilter"))
					$(this).css("filter", $(this).css("filter").replace(NAV_IMAGE_OUT_SFX, NAV_IMAGE_OVER_SFX));
				else
					$(this).attr('src', $(this).attr('src').replace(NAV_IMAGE_OUT_SFX, NAV_IMAGE_OVER_SFX));
			})
			.mouseout(function()
			{
				if( $(this).hasClass("_useFilter"))
					$(this).css("filter", $(this).css("filter").replace(NAV_IMAGE_OVER_SFX, NAV_IMAGE_OUT_SFX));
				else
					$(this).attr('src', $(this).attr('src').replace(NAV_IMAGE_OVER_SFX, NAV_IMAGE_OUT_SFX));
			})
			
			//navクリック処理
			$($navImgs,$self).click(function()
			{
				$($navImgs,$self).each(function()
				{
					// 選択状態をクリア
					setNavImgSrc(this, NAV_IMAGE_OUT_SFX);
				});	
				
				// 選択
				setNavImgSrc(this, NAV_IMAGE_SELECT_SFX);
				
				// 背景画像パス取得
				var bgSrc = $(this).attr("bgsrc");
				
				// 上位要素[story]クラスの背景画像を切替
				if( bgSrc != "" && bgSrc != undefined )
					$self.BgImageTransition(bgSrc, animDuration );
			});
			
			// nav Imgアイコン状態設定
			function setNavImgSrc(a_tgt, a_sfx)
			{
				if( !$(a_tgt).length )
					return;		
					
				if( $(a_tgt).hasClass("_useFilter"))
					var src = $(a_tgt).css('filter');
				else
					var src = $(a_tgt).attr('src');
				
				// 一度クリア
				src = src.replace(NAV_IMAGE_OVER_SFX, NAV_IMAGE_OUT_SFX);
				src = src.replace(NAV_IMAGE_SELECT_SFX, NAV_IMAGE_OUT_SFX);
				
				// 状態を設定
				if( NAV_IMAGE_OUT_SFX != a_sfx )
					src = src.replace(NAV_IMAGE_OUT_SFX, a_sfx);
					
				if( $(a_tgt).hasClass("_useFilter"))
					$(a_tgt).css('filter', src);
				else
					$(a_tgt).attr('src', src);
			}
			
			// 背景設定スライドショー開始
			// a_tab = navクラスを含むtab
			function setBgImageTransition()
			{
				var bgSrcArry = new Array();
				var navImg = $currentTab +' .tabs_nav img';
				
				// 一番目のimgを選択状態にする
				setNavImgSrc(navImg+':first', NAV_IMAGE_SELECT_SFX);
				
				// タブのnavクラス内のimgからbgsrcを取得
				$(navImg).each(function(){
					bgSrcArry.push($(this).attr("bgsrc"));
				});
				
				if( !bgSrcArry.length )
					return;
				
				$self.BgImageTransition(bgSrcArry, animDuration, waitDuration, true, 
				function(a_event)
				{
					// 選択状態をクリア
					var prevImg = navImg+':eq('+a_event.prevIdx+')';
					setNavImgSrc(prevImg, NAV_IMAGE_OUT_SFX);
					
					// 選択状態を設定
					var currImg = navImg+':eq('+a_event.currentIdx+')';
					setNavImgSrc(currImg, NAV_IMAGE_SELECT_SFX);
				});
			}

			// 一番最初のタブの背景をセット
			var firstGroup = $($tabsImgs,$self).attr("tlabel");
			$currentTab = '#'+$id+' '+firstGroup;
			if($($currentTab).length)
				setBgImageTransition();
		});
		return this;
    }
    
})(jQuery);

////////////////////////////////////////
// Story 
(function($) 
{  
  $.fn.TITLE = function() 
  { 
     this.each(function() 
     {  
        var $self = $(this),
	        $id = $self.attr('id');
        	
        if( !$.isIE(6)&&!$.Mobile)
		{   
			// 手動センタリング
			$.scrollbackground($self);
			$.Window.bind('resize',
			function(e)
			{
				$.scrollbackground($self);
			});
		}
		
		$self.Scrollable({is_nav:true});
     });
    return this;
     
  } //TITLE
  
  $.fn.CENTERPARK = function() 
  { 
     this.each(function() 
     {  
        var $self = $(this);
        
        $self
		  .Tabs_CENTERPARK()
          .Scrollable({is_nav:true})
          .bind($.Events.SCROLL,on_scroll)
          .bind($.Events.SCROLL_ENTER,on_scroll_enter)
          .bind($.Events.SCROLL_LEAVE,on_scroll_leave);
        
        if( !$.isIE(6)&&!$.Mobile)
        {
			// 手動センタリング
			$.scrollbackground($self);
			$.Window.bind('resize',
			function(e)
			{
				$.scrollbackground($self);
			});
        }
        	
        function on_scroll(e, d){}
        function on_scroll_enter(e){}
        function on_scroll_leave(e) 
        {
			$self.BgImageTransitionStop();
        }
        
     });
    return this;
     
  } //CENTERPARK
  
  $.fn.YKK50BUILDING = function() 
  { 
     this.each(function() 
     {  
        var $self = $(this);
        
        $self
		  .Tabs()
          .Scrollable({is_nav:true})
          .bind($.Events.SCROLL,on_scroll)
          .bind($.Events.SCROLL_ENTER,on_scroll_enter)
          .bind($.Events.SCROLL_LEAVE,on_scroll_leave);
        
        if( !$.isIE(6)&&!$.Mobile)
        {
			// 手動センタリング
			$.scrollbackground($self);
			$.Window.bind('resize',
			function(e)
			{
				$.scrollbackground($self);
			});
        }
		
        function on_scroll(e, d)
        {
			//if( $.IsOpeningAnim )
				//return;
			/*
			var m = $self.height()*2;
			var s = 100 + d/m*20;
			$self.css({'backgroundSize': 'auto '+s+'%'});
			*/
        }
        
        function on_scroll_enter(e) {}
        function on_scroll_leave(e) 
        {
			$self.BgImageTransitionStop();
        }
        
     });
     
    return this;
     
  } //YKK50BUILDING
    

  $.fn.MARUYANE_HALL = function() 
  {
   
     this.each(function() 
     { 
        var $self = $(this);
        
        $self
          .Tabs()	
          .Scrollable({is_nav:true})
          .bind($.Events.SCROLL_LEAVE,on_scroll_leave);
          
        if( !$.isIE(6)&&!$.Mobile)
        {
			// 手動センタリング
			$.scrollbackground($self);
			$.Window.bind('resize',
			function(e)
			{
				$.scrollbackground($self);
			});
        }
		
        function on_scroll_leave(e) 
        {
			$self.BgImageTransitionStop();
        }
                
     });
     
    return this;
     
  } //MARUYANE_HALL
  
  
  $.fn.FOREST = function() {
   
     this.each(function() { 
      
        var $self = $(this);
        
        $self
          .Tabs()	
          .Scrollable({is_nav:true})
          .bind($.Events.SCROLL_LEAVE,on_scroll_leave);
          
        if( !$.isIE(6)&&!$.Mobile)
        {
			// 手動センタリング
			$.scrollbackground($self);
			$.Window.bind('resize',
			function(e)
			{
				$.scrollbackground($self);
			});
        }
		
        function on_scroll_leave(e) 
        {
			$self.BgImageTransitionStop();
        }
     });
     
    return this;
     
  } //N100_YEARS_FOREST
  
  $.fn.MAEZAWA_GARDEN = function() {
   
     this.each(function() { 
      
        var $self = $(this);
        
        $self
          .Tabs()	
          .Scrollable({is_nav:true})
          .bind($.Events.SCROLL_LEAVE,on_scroll_leave);
         
        if( !$.isIE(6)&&!$.Mobile)
        {
			// 手動センタリング
			$.scrollbackground($self);
			$.Window.bind('resize',
			function(e)
			{
				$.scrollbackground($self);
			});
        }
		
        function on_scroll_leave(e) 
        {
			$self.BgImageTransitionStop();
        } 
     });
     
    return this;
     
  } //MAEZAWA_GARDEN
 
 
  $.fn.KUROBE_MAP = function() {
   
     this.each(function() { 
      
        var $self = $(this);
        var $id = $self.attr('id');
        
        $self
          .Tabs()	
          .Scrollable({is_nav:true});
        
        if( !$.isIE(6)&&!$.Mobile)
		{   
			// 手動センタリング
			$.scrollbackground($self);
			$.Window.bind('resize',
			function(e)
			{
				$.scrollbackground($self);
			});
		}
     });
     
    return this;
     
  } //KUROBE_MAP
     
    
})(jQuery);


////////////////////////////////////////
// MainNav

(function($)
{
	$.fn.MainNav = function() 
	{
		this.each(function() 
		{  
			var $self = $(this),
				$ul = $('<ul/>').appendTo($self),
				$sections = $('[data-nav]'),
				_sections = new Array(),
				$navs = new Array(),
				_active = 0,
				$right = parseInt($self.css("right").replace('px','')),
				$bg_right = parseInt($(".navBg",$self).css("right").replace('px',''));
            
			if (/*!$.Mobile && */!$.Unsupported )
			{ 
				$sections.each(function(i)
				{
					_sections.push($(this));
					$('<li/>').appendTo($ul).DotNav({id:$(this).attr('id'),name:$(this).attr('data-nav')});
				});
				$self.css({marginTop:-$self.height()/2});
			}
        
			$.Body
			.bind($.Events.SECTION_ENTER,function(e,id)
			{  
				if( $.IsScrollAnim )
					return;
					
				$sections.each(function(i)
				{
					if ($(this).attr('id')==id)
					{
						_active = i;
					}
				});
			})
			.bind($.Events.KEY_RIGHT,function(e)
			{
				_active++;
				if (_active>$sections.length-1)
					_active=$sections.length-1;
				_seek();
			})
			.bind($.Events.KEY_LEFT,function(e)
			{
				_active--;
				if (_active<0)
					_active=0;
				_seek();  
			})
      
			if(!$.isIE(6))
			{
				resize();
				// Resize
				// 背景画像の幅以上になったら、背景画像内におさまるように位置を修正
				/*
				if( $.Mobile )
					window.addEventListener('onorientationchange' in window ? 'orientationchange' : 'resize', resize, false);
				else**/
				{
					$.Window.bind('resize',
					function(e)
					{
						resize();
					});
				}
			}
			
			function resize()
			{
				if( $.Window.width() > $.section_width)
				{
					if(!$self.hasClass("move_side"))
						!$self.addClass("move_side");
						
					var offset = ($.Window.width()-$.section_width)/2.0;
					$self.css({right: offset + $right});
					$(".navBg",$self).css({right: offset + $bg_right});
				}
				else if($self.hasClass("move_side"))
				{
					$self.removeClass("move_side");
					$self.css({right:$right});
					$(".navBg",$self).css({right: $bg_right});
				}
			}
		
			function _seek() 
			{
				$.Body.triggerHandler($.Events.SCROLL_TO,{id:_sections[_active].attr('id')})
			} 
		});
		return this;   
	} // Main Nav
  
	$.fn.DotNav = function(settings) 
	{   
		var config = {};
		if (settings) $.extend(config, settings);
    
		this.each(function() 
		{ 
			var $self = $(this),
				$a = $('<a/>'),
				$h1 = $('<h1/>').appendTo($self),
				$img = $("<img src='./lib/images/MainNav/"+config.name+"_mainNav.png'/>").appendTo($h1),
				$id = config.id,
				$mouseOver = false;
				
				$img.css({cursor:"pointer"});
				
				$a.attr('href',"#/"+config.name.split(' ').join('_'))
				.html($id)
				.appendTo($self);
								
				$self.bind('click', function(e)
				{
					$.currentSectionId = $id;
					$.Body.triggerHandler($.Events.SCROLL_TO,{id:$id, duration:2000, max:150, min:150});
					e.preventDefault();
				});
					
				$self.attr('data-id',$id);
	             
				$a.bind('mouseenter', function(e) 
				{
					$mouseOver = true;
					
					//if($self.hasClass('active') || $.currentSectionId == sectionArry[0].id)
					//	return;
					
					showPlate(true);
				});
				
				$self.bind('mouseleave',function(e) 
				{
					$mouseOver = false;
					
					if($self.hasClass('active') || $.currentSectionId == sectionArry[0].id )
						return;
					
					showPlate(false);
				});
	            
				$.Body.bind($.Events.SECTION_ENTER,function(e,id)
				{
					if (id==$id)
					{
						$.currentSectionId = id;
						
						$self.addClass('active');
						
						if( !$.IsOpeningAnim && !$.IsScrollAnim )
						{
							$("[data-controller='SideMenu']").ChangeSideMenu(id);
							showPlate(true);
						}
					}
					else
					{
						$self.removeClass('active');
						
						if( !$mouseOver )
							showPlate(false);
						
						if( !$.IsOpeningAnim && !$.IsScrollAnim )
						{
							if( id == sectionArry[0].id && id != $id)
								showPlate(true);
							else if( !$mouseOver )
								showPlate(false);
						}
						else if( $.IsScrollAnim && !$mouseOver )
							showPlate(false);
					}
				});
				
				function showPlate(a_show)
				{
					if ($.isIE(8))
						$h1.css({top: $a.height()/2-$h1.height()/2});
					else
						$h1.css({top: $a.height()/2-$h1.height()/2+2});
						
					var rightShow = 15;
					var rightHide = 10;
					
					if(a_show)
					{
						if ($.isIE(8))
							$h1.stop().css({display:'block'/*,right:rightHide*/}).animate({right:rightShow},400,'easeOutQuart');
						else
							$h1.stop().css({display:'block'/*,right:rightHide*/}).animate({right:rightShow,opacity:1},450,'easeOutQuart');
					}
					else
					{
						if ($.isIE(8))
							$h1.stop().animate({right:rightHide},200,'linear',function(){$h1.css({display:'none'})});
						else
							$h1.stop().animate({right:rightHide,opacity:0},450,'easeOutQuart',function(){$h1.css({display:'none'})});
					}
				}
		}); 
		return this;
	} // DotNav
  
})(jQuery);
        
////////////////////////////////////////
// SiteScroll

(function($) 
{
   $.fn.SiteScroll = function() 
   {
     this.each(function() 
     {  
		var $self = $(this);
		
        $.Body.bind($.Events.SCROLL_TO,
			function(e,data)
			{
				var callBackFunc = data.callBackFunc;
				if(callBackFunc == undefined )
					callBackFunc = null;
					
				var id = data.id;

				var duration = data.duration;
					
				var easing = data.easing
				if( easing == undefined )
				{
					if( $.isIE(6))
						easing = 'easeInOutQuad';
					else
						easing = 'easeInOutBack';
				}
					
				var $element = $('#'+id),
				$header = $element.find('header'),
				_align = $element.attr('data-align'),
				_offset = $element.attr('data-scrolloffset') ? parseInt($element.attr('data-scrolloffset')) : 50,
				_top = $element.offset().top;
                            
				if ($header.length>0 && _align!="top") 
				{     
					_top = $header.offset().top  + $header.height()/2 - $.Window.height()/2;
					
					if (_top > $header.offset().top)
						_top = $header.offset().top - 50;  
				}
				
				if (_align=="center" && $element.height()>$.Window.height()) 
					_top = $element.offset().top + ($element.height()-$.Window.height())/2
  	
				var scroll = true;
				
				// スクロール位置から一定の領域外にある場合のみ、スクロールさせる
				// dataにmax,minが設定されている場合のみ動作
				if( data.max != undefined && data.min != undefined )
				{	
					if( $.Window.scrollTop() > _top + data.max || $.Window.scrollTop() < _top - data.min )
					{
						if( duration == undefined )
						{
							duration = Math.abs(($.Window.scrollTop() - _top))*2;
							duration = duration < 1000 ? 1000 : duration;
						}
					}
					else
						scroll = false;
				}
				
				if(duration == undefined )
					duration = 2000;
				
				$.IsScrollAnim = true;	
				if( scroll )
				{
					if( $.Mobile )
					{
						var posY = $.MobileScroll.y;
						$.MobileScroll.scrollTo( 0, -(_top-posY), duration + "ms",
						function()
						{
							
							$.IsScrollAnim = false;
							$.Body.triggerHandler($.Events.SECTION_ENTER,id);
							if(callBackFunc)
								callBackFunc();
						});
					}
					else
					{
						$.Scroll.stop()
						.animate(
						{ 'scrollTop': _top },
						duration,
						easing,
						function()
						{
							
							$.IsScrollAnim = false;
							$.Body.triggerHandler($.Events.SECTION_ENTER,id);
							if(callBackFunc)
								callBackFunc();
						});
					}
				}
				else
				{
					if( $.IsScrollAnim )
						$.Scroll.stop();
					$.IsScrollAnim = false;
					$.Body.triggerHandler($.Events.SECTION_ENTER,id);
				}

			})
	});
	return this;    
  }
    
})(jQuery);

////////////////////////////////////////
// Keyboard 

(function($) {

   $.fn.Keyboard = function(settings) 
   {  
		var config = {};
 
		if (settings) $.extend(config, settings);
  
		this.each(function() 
		{ 
			var $self = $(this);
      
			$(document).bind('keydown',on_keydown);
	        
			function on_keydown(e) 
			{
				var key = e.charCode ? e.charCode : e.keyCode ? e.keyCode : 0;
				switch(key) 
				{ 
				 case 39: //right
					$.Body.triggerHandler($.Events.KEY_RIGHT);
					e.preventDefault();             
					break;
				 case 37: //left
					$.Body.triggerHandler($.Events.KEY_LEFT);
					break;     
				}
          
			}
		}); 
		return this;
	} 
})(jQuery);

////////////////////////////////////////
// Footer 

(function($) 
{
	$.fn.FooterMenu = function() 
	{
		this.each(function() 
		{ 
			var $self = $(this),
				$links = $('#link,#website_use,#personal_data,#inquiry',$self),
				$twitter_link = $("#twitter_link",$self);
				
			$("img[scrollto]",$self)
			.css({cursor:"pointer"})
			.click(function()
			{
				$.Body.triggerHandler($.Events.SCROLL_TO,{id:$(this).attr("scrollto"), duration:2000, max:150, min:150});
			});
			
			// ずれ調整
			if($.isIE(7))
			{
				$("#menu_text", $self).css({bottom: "50px"});
			}
				
			// 各リンク設定
			// IE6のみポップアップ表示
			if($.isIE(6))
			{
				$links.each(function()
				{
					$(this).attr("href", $(this).attr('modal'));
					$(this).attr("target", '_blank');
				});
			}
			else
			{
				$links.each(function()
				{
					$(this).attr("href", "#/"+$(this).attr('id'))
					.bind('click', function(e)
					{
						// セクションの背景スライドショーを停止する
						$('.story').each(function() 
						{
							$(this).BgImageTransitionStop();
						});
						
						// モーダルオープン
						$("[data-controller='Modal']").ModalOpen($(this).attr('modal'));
						// hrefに設定したURLに飛ばないようにイベントをキャンセル
						e.preventDefault();
					});
				});
			}
			
			// twitter, facebook ボタン
			$twitter_link.attr("href", $twitter_link.attr("href") + 
			"?url="+$twitter_link.attr("data-url") +
			"&text="+$twitter_link.attr("data-text"));
		});
	   	return this;
	}
	
	$.fn.FooterMove = function() 
	{
		this.each(function()
		{
			var $self = $(this);
			var $topic_news = $('#topic_and_news',$self);
			var $latestTopics = $('.latest_topics',$self);// uchida 8.25 追加

			// フッターの動作制御
			// close時に表示されているheight, マウスオーバー時間, 開閉アニメーション時間
			// [jquery.footerCtrl.js]が読み込まれている必要あり
			try
			{
				var footerVisHeight = $('.footer_top', $self).height();
				$self.footerCtrl( footerVisHeight, 250, 1000, 'easeOutQuint');
			}catch(err){}
			
			// ずれ調整
			if($.isIE(7))
				$(".main_area_w950_top", $self).css({margin: "5px auto"});
			
			// 「一覧ページへ」のリンク設定
			// IE6のみポップアップ表示
			if($.isIE(6))
			{
				$topic_news.attr("href", $topic_news.attr('modal'));
				$topic_news.attr("target", '_blank');
				// uchida 8.25 ここから追加
				$latestTopics.each(function()
				{
					$(this).attr("href", $(this).attr('modal'));
					$(this).attr("target", '_blank');
				});
				// uchida 8.25 ここまで追加
			}
			else
			{
				$topic_news.attr("href", "#/"+ $topic_news.attr('id'))
				.bind('click', function(e)
				{
					// セクションの背景スライドショーを停止する
					$('.story').each(function() 
					{
						$(this).BgImageTransitionStop();
					});
					
					// モーダルオープン
					$("[data-controller='Modal']").ModalOpen($(this).attr('modal'));
					
					// hrefに設定したURLに飛ばないようにイベントをキャンセル
					e.preventDefault();
				});
				// uchida 8.25 ここから追加
				$latestTopics.each(function()
				{
					$(this).attr("href", "#/" + $(this).attr('class'));
					$(this).bind('click', function(e)
					{
						// セクションの背景スライドショーを停止する
						$('.story').each(function()
						{
							$(this).BgImageTransitionStop();
						});
						// モーダルオープン
						$("[data-controller='Modal']").ModalOpen($(this).attr('modal'));
						// hrefに設定したURLに飛ばないようにイベントをキャンセル
						e.preventDefault();
					});
				});
				// uchida 8.25 ここまで追加
			}
		});
	   	return this;
	} 
})(jQuery);


////////////////////////////////////////
// SideMenu 
(function($) 
{
	$.fn.SideMenu = function()
	{
		this.each(function() 
		{ 
			var $self = $(this),
				$right = parseInt($self.css("right").replace('px',''));
				
			$self.css({"visibility":"visible"});
				
			// 初期状態は全部非表示
			$('div[story]', $self).hide();
			
			if( $.isIE(8))
			{
				$self.css({visibility:'hidden'});
			}
			else
			{	
				$self.css({opacity: '0'});
			}
			
			
			//サイドメニュークリック
			$('img[modal]', $self)
			.css({cursor:"pointer"})
			.click(function()
			{	
				// セクションの背景スライドショーを停止する
				$('.story').each(function() 
				{
					$(this).BgImageTransitionStop();
				});
					
				// モーダルオープン
				$("[data-controller='Modal']").ModalOpen($(this).attr('modal'));
			});
			
			if( !$.isIE(6))
			{
				resize();
				// Resize
				// 背景画像の幅以上になったら、背景画像内におさまるように位置を修正
				/*
				if( $.Mobile )
					window.addEventListener('onorientationchange' in window ? 'orientationchange' : 'resize', resize, false);
				else*/
				{
					$.Window.bind('resize',
					function(e)
					{
						resize();
					});
				}
			}
			
			function resize()
			{
				if( $.Window.width() > $.section_width)
				{
					if(!$self.hasClass("move_side"))
						!$self.addClass("move_side");
						
					var offset = ($.Window.width()-$.section_width)/2.0;
					$self.css({right: offset + $right});
				}
				else if($self.hasClass("move_side"))
				{
					$self.removeClass("move_side");
					$self.css({right:$right});
				}
			}
		});
		
		return this;
	}
	
	$.fn.ChangeSideMenu = function(sectionId)
	{
		this.each(function() 
		{ 
			var $self = $(this);
			
			if( $('div[story*='+sectionId+']', $self).css("display") == "block" )
				return;
				
			if( $.isIE(8))
			{
				$('div[story]', $self).hide();
				
				$showDiv = $('div[story*='+sectionId+']', $self);	
				if( $showDiv.length )
				{
					$showDiv.show();
					$self.css({visibility:'visible'});
				}
				else
					$self.css({visibility:'hidden'});
			}
			else
			{
				$self
				.stop()
				.animate( {opacity: '0.0'}, 300, function()
				{
					$('div[story]', $self).hide();
					
					$showDiv = $('div[story*='+sectionId+']', $self);	
					if( $showDiv.length )
					{
						$showDiv.show();
						$self.stop()
						.animate( {opacity: '1'}, 300);
					}
				});
			}
		});
		
		return this;
	}

})(jQuery);

////////////////////////////////////////
// Modal 
(function($) 
{
	$.fn.Modal = function()
	{
		this.each(function() 
		{ 
			var $self = $(this);
			
			// IE6以下はモーダル表示でなく、ポップアップを使用するので、jqModalの初期化はしない
			if($.isIE(6))
				return;
				
			//初期化
			$self.jqm({toTop:true, modal:true});
		});
		return this;
	} 
	
	$.fn.ModalOpen = function(modal) 
	{  
		this.each(function() 
		{ 
			var $self = $(this);
			
			// IE6以下はポップアップで表示
			if($.isIE(6))
			{
				window.open(modal);
			}
			else
			{
				$self.load(modal);
				$self.css({
					left: '50%', marginLeft: '-410px',
					top:25 , padding:"0px", height:'auto', width:'auto', overflow:"auto"
				}).jqmShow();
			}
		});
		return this;
	} 
	
	$.fn.ModalClose = function()
	{
		this.each(function() 
		{ 
			var $self = $(this);
			$self.text("").jqmHide();
		});
		return;
	}
	
})(jQuery);

////////////////////////////////////////
// Methods

(function($) {

    $.distancefromfold = function($element, settings) 
    {
        if (settings.container === undefined || settings.container === window) 
        {
            var fold = $.Window.height() + $.Window.scrollTop();
        }
        else 
        {
            var fold = $(settings.container).offset().top + $(settings.container).height();
        }
        return (fold + settings.threshold) - $element.offset().top ;
    };
    
    $.belowthefold = function($element, settings) 
    {
        if (settings.container === undefined || settings.container === window) 
        {
            var fold = $.Window.height() + $.Window.scrollTop();
        }
        else 
        {
            var fold = $(settings.container).offset().top + $(settings.container).height();
        }
        
        var len = $element.offset().top - settings.threshold;
        return fold <= len;
    };
  
    $.abovethetop = function($element, settings) 
    {
        if (settings.container === undefined || settings.container === window) 
        {
            var fold = $.Window.scrollTop();
        }
        else 
        {
            var fold = $(settings.container).offset().top;
        }
        
        var len = $element.offset().top + settings.threshold  + $element.height();
        return fold >= len;
    };
    
    $.leftofbegin = function($element, settings) 
    {
        if (settings.container === undefined || settings.container === window) 
        {
            var fold = $.Window.scrollLeft();
        }
        else 
        {
            var fold = $(settings.container).offset().left;
        }
        return fold >= $element.offset().left + settings.threshold + $element.width();
    };
    
    // 画面内に表示されているか
    $.inview = function($element, settings) 
    {
        return ($.abovethetop($element,settings)!=true && $.belowthefold($element,settings)!=true)
    };
    
    // 画面内に一定サイズ以上表示されているか(カレントSection判定用)
    $.isNavChange = function($element) 
    {
		// 画面内のsctionサイズを算出
		var topPos = $element.offset().top-$.Window.scrollTop();
		var bottomPos = topPos+$element.height();
		var size = Math.min( bottomPos, $.Window.height()) - Math.max( topPos, 0 );
			
		var inViewSize = $.Window.height()*(3/5);
		if( size > inViewSize )
			return true;
		else
			return false;
    };
    
    $.scrollbackground = function($element)
    {
    	var offset = parseInt($element.attr('data-backgroundoffset'));
    	
		var bpos = -$.Window.scrollTop()+$element.offset().top - offset + ($.Window.scrollTop()-$element.offset().top)*0.7;
						
		// 背景の横のセンタリングを50%(又はcenter)で行うと、IE8で
		// sectionとbgで微妙に位置のずれが生じるので、手動でセンタリングを設定
		// ※手動センタリングでも、整数値を設定しないとずれが生じる
		var center = parseInt(($.Window.width() - $.section_width)/2.0);
		$("[class*='bg']", $element).css({'backgroundPosition':center+'px '+bpos+'px'});
		$($element).css({'backgroundPosition':center+'px '+bpos+'px'});
	}
	
	// IEチェック用
	$.isIE = function ( a_version )
	{
		return ($.browser.msie && $.browser.version <= parseInt(a_version));
	}
})(jQuery);  

