/*
  foundation.js
  for Bridgestone GlobalWebSite
*/

(function(){
	/**
	 * 設定項目
	 */

	// 本文領域の幅
	var WIDTH_CONTENT_BODY = 636;

	// ファーストビューの高さに関する調整の閾値
	var HEIGHT_FIRSTVIEW_THRESHOLD = 700;

	// 本文の高さに関する調整の閾値
	var HEIGHT_CONTENTSBODY_THRESHOLD = 100;

	// ローカルサイトへのリンクUI（開閉動作）を、2段階にする閾値
	// ↑廃案？
	var HEIGHT_LOCAL_SITE_UI_THRESHOLD = 200;

	/* 帯域設定のデフォルト（ブロードバンド版・ナローバンド版） */
	var STR_DEFAULT_BANDWIDTH = "bb" //ブロードバンド
	//var STR_DEFAULT_BANDWIDTH = "nb" //ナローバンド

	/* 並列カラムの高さあわせの適用クラス */
	var CLASS_PANEL_LOOK_ELMS = "ul.particularTopics, div.figure-container";

	/* 並列カラムの見出しの高さあわせの適用クラス */
	var CLASS_TARGET_HEADING_ELMS = "div.heading";



	/**
	 * 定数定義
	 */

	// グローバルメニュー子階層 Cateogry 1
	var HTML_GNAVI_CATEGORY1 =
		'<div class="category1">' +
		'  <div class="gnavi2ndBody">' +
		'    <ul>' +
		'      <li><a href="/company/message.html" class="page11">社長挨拶</a></li>' +
		'      <li><a href="/company/policy.html" class="page12">企業理念と経営方針</a></li>' +
		'      <li><a href="/company/profile.html" class="page13">会社概要</a></li>' +
		'      <li><a href="/company/history.html" class="page14">歴史・沿革</a></li>' +
		'      <li><a href="/company/news/index.html" class="page15">お知らせ</a></li>' +
		'      <li><a href="https://secure01.hs.kddi.ne.jp/asahicarbon.co.jp/contact.html" class="page16">お問い合わせ</a></li>' +
		'    </ul>' +
		'  </div>' +
		'  <div class="bgLayer"></div>' +
		'</div>';

	// グローバルメニュー子階層 Cateogry 2
	var HTML_GNAVI_CATEGORY2 =
		'<div class="category2">' +
		'  <div class="gnavi2ndBody">' +
		'    <ul>' +
		'      <li><a href="/product/cb/index.html" class="page21">カーボンブラックとは？</a></li>' +
		'      <li><a href="/product/technology/index.html" class="page22">製品情報</a></li>' +
		'      <li><a href="/product/msds/index.html" class="page23">製品安全データシート（MSDS）</a></li>' +
		//下のメニューを有効にする場合は、メニューの高さを決めているCSSも編集して下さい。
		//'      <li><a href="#" class="page24">研究開発情報</a></li>' +
		'    </ul>' +
		'  </div>' +
		'  <div class="bgLayer"></div>' +
		'</div>';

	// グローバルメニュー子階層 Cateogry 3
	var HTML_GNAVI_CATEGORY3 =
		'<div class="category3">' +
		'  <div class="gnavi2ndBody">' +
		'    <ul>' +
		'      <li><a href="/activity/csr/index.html" class="page31">CRS活動</a></li>' +
		'      <li><a href="/activity/environment/index.html" class="page32">環境への取り組み</a></li>' +
		'      <li><a href="/activity/quality/index.html" class="page33">品質への取り組み</a></li>' +
		'      <li><a href="/activity/safety/index.html" class="page34">安全への取り組み</a></li>' +
		'      <li><a href="/activity/contribution/index.html" class="page35">社会貢献活動</a></li>' +
		'      <li><a href="/activity/welfare/index.html" class="page36">福利厚生への取り組み</a></li>' +
		'    </ul>' +
		'  </div>' +
		'  <div class="bgLayer"></div>' +
		'</div>';


	// グローバルメニュー子階層 Cateogry 3
	/*var HTML_GNAVI_CATEGORY3 =
		'<div class="category3">' +
		'  <div class="gnavi2ndBody">' +
		'    <div class="category">' +
		'      <div class="heading hd-page31">CRS活動</div>' +
		'      <ul>' +
		'        <li><a href="/category3/page31/page311/index.html" class="page311">Page 3-1-1</a></li>' +
		'        <li><a href="/category3/page31/page312/index.html" class="page312">Page 3-1-2</a></li>' +
		'      </ul>' +
		'    </div>' +
		'    <div class="category">' +
		'      <div class="heading hd-page32">Page 3-2</div>' +
		'      <ul>' +
		'        <li><a href="/category3/page32/page321/index.html" class="page321">Page 3-2-1</a></li>' +
		'        <li><a href="/category3/page32/page322/index.html" class="page322">Page 3-2-2</a></li>' +
		'        <li><a href="/category3/page32/page323/index.html" class="page323">Page 3-2-3</a></li>' +
		'      </ul>' +
		'    </div>' +
		'  </div>' +
		'  <div class="bgLayer"></div>' +
		'</div>';
	*/


	// フォントサイズ変更UI
	var HTML_FONT_SIZE_SWITCH_UI =
		'<ol id="fontSizeSwitchUI">' +
		'  <li class="setterS"><a href="#">S</a></li>' +
		'  <li class="setterM"><a href="#">M</a></li>' +
		'  <li class="setterL"><a href="#">L</a></li>' +
		'</ol>';

	// ユーザー設定フォントサイズのcookie保管用キー名
	var STR_FONTSIZE_COOKIEKEY = 'fontsizeSetting';

	// 各国サイトへのリンクの展開UIのクラス名
	var CLASS_COUNTRY_LINKS_TOGGLE = 'countrySpecificLinksTrigger';



	/**
	 * 汎用関数定義
	 */
	var bsjs = window.bsjs = {};

	/* クッキー操作 */
	bsjs.setCookie = function( myKey, myVal ){
		/* max-ageは、safari1系で不正という情報があるので、expiresDateで代替 */
		var expiresDateObj = new Date();
		if( arguments.length == 3 ){
			expiresDateObj = arguments[2];
		} else {
			expiresDateObj.setYear( expiresDateObj.getFullYear() + 1 );
		}
		var expiresDate = expiresDateObj.toGMTString().replace(/UTC/, "GTM");
		var tempStr = myKey + "=" + myVal + "; ";
		tempStr +="path=/;";
		tempStr +="expires=" + expiresDate + "; ";
		document.cookie = tempStr;
	}
	bsjs.getCookie = function( myKey ){
		var cookies = [];
		if( document.cookie ){
			var cookiesStr = document.cookie.split(";");
			for( var i=0; i < cookiesStr.length; i++ ){
				var cookiePair = cookiesStr[i].split("=");
				if( cookiePair.length != 2 ) continue;
				cookies[cookiePair[0].replace( /^ *| *$/g, "" )] = cookiePair[1].replace( /^ *| *$/g, "" );
			}
			return cookies[myKey];
		}
	}

	bsjs.fontSizeWatcher = function(){
		this.elm = $( '<div id="fontSizeWatcher">fontSizeWatcher</div>' );
		$(document.body).append( this.elm );
		this.lastHeight = this.elm.height();
	}
	bsjs.fontSizeWatcher.prototype = {
		elm: null,
		lastHeight: 0,
		timer: null,
		test: function(){
			if( this.elm.height() !== this.lastHeight ){
				this.lastHeight = this.elm.height();
				this.elm.trigger("fontSizeChange");
			}
		},
		start: function(){
			var that = this;
			this.timer = setInterval( function(){that.test()}, 200 );
		},
		toString: function(){ return "bsjs.fontSizeWatcher" }
	}



	/* 並列カラムの高さあわせ */
	$.fn.adjustPanelHeight = function(){
		var targetPanels = this.find("> *");

		if(
			/* カラムが1つもない場合 */
			!targetPanels.get(0) ||

			/* もしくは、カラムが2つ以上ない場合 */
			!targetPanels.get(1) ||

			/* もしくは、2つのカラムの幅が異なる場合 */
			$(targetPanels.get(0)).width() !== $(targetPanels.get(1)).width()
		){
			/* 高さあわせを適用しない */
			return;
		}

		var turnCount = Math.floor(WIDTH_CONTENT_BODY / $(targetPanels.get(0)).width());

		var rowMaxHeight, headingMaxHeight, calcedValue, testElm;
		for( var i=0; i<targetPanels.length/turnCount; i++ ){
			rowMaxHeight = 0;
			headingMaxHeight = 0;

			for( var j=0; j<turnCount && i*turnCount+j < targetPanels.length; j++ ){
				testElm = $(CLASS_TARGET_HEADING_ELMS,targetPanels.get(i*turnCount+j));
				testElm.removeClass("adjusted");
				headingMaxHeight = Math.max( testElm.css("height","auto").height(), headingMaxHeight );
			}
			for( var j=0; j<turnCount && i*turnCount+j < targetPanels.length; j++ ){
				testElm = $(CLASS_TARGET_HEADING_ELMS,targetPanels.get(i*turnCount+j));

				/* 各論リンクへの見出しの場合、内容要素の位置調整 */
				if(testElm.parent().parent().hasClass("particularTopics")){
					calcedValue = ( headingMaxHeight - testElm.height() ) / 2;
					$("> *:first-child",testElm).css("marginTop",calcedValue);
				}

				testElm.height(headingMaxHeight).addClass("adjusted");
			}
			for( var j=0; j<turnCount && i*turnCount+j < targetPanels.length; j++ ){
				testElm = $(targetPanels.get(i*turnCount+j));
				rowMaxHeight = Math.max( testElm.css("height","auto").height(), rowMaxHeight );
			}
			for( var j=0; j<turnCount && i*turnCount+j < targetPanels.length; j++ ){
				testElm = $(targetPanels.get(i*turnCount+j));
				testElm.height(rowMaxHeight);
			}
		}
		return this;
	}

	/* 並列カラムの高さあわせ初期化 */
	$.fn.initPanelLinks = function(){
		return this.each(function(){
			var that = $(this);
			$("#fontSizeWatcher").bind("fontSizeChange",function(){that.adjustPanelHeight()});
			$(this).adjustPanelHeight();
		});
	}



	/* OL見栄え調整 */
	$.fn.dressOL = function(){
		return this.each( function(){
			$(this).addClass("dressed")
			.find("> li").wrapInner(document.createElement("div"))
			.find("> div").addClass("dressed-inner")
		})
	}


	/**
	 * 初期表示処理
	 */
	$(document).ready( function(){

		/* 汎用：slideDown/Up のレガシーUA対応 */
		if( !$("#nav").slideDown ){
			$.fn.slideDown = function(speed,callback){
				return this.css("display","block");
			}
			$.fn.slideUp = function(speed,callback){
				return this.css("display","none");
			}
			$.fn.stop = function(clearQueue,gotoEnd){
				return this;
			}
		}

		/* フォントサイズ変更の検出 */
		var fSWatcher = new bsjs.fontSizeWatcher();
		fSWatcher.start();


		/* ユーザー設定フォントサイズの適用 */
		switch( bsjs.getCookie(STR_FONTSIZE_COOKIEKEY) ){
			case "s":
				$(document.body).addClass("fontsizeS");
				break;
			case "l":
				$(document.body).addClass("fontsizeL");
				break;
		}


		/* グローバルナビゲーションの初期化 */
		$("#nav > ul > li:nth-child(1)").append( HTML_GNAVI_CATEGORY1 );
		$("#nav > ul > li:nth-child(2)").append( HTML_GNAVI_CATEGORY2 );
		$("#nav > ul > li:nth-child(3)").append( HTML_GNAVI_CATEGORY3 );

		$("#nav > ul > li > a")
			.bind( "mouseenter", function(myEv){
				var targetElm = $( this ).parent();
				targetElm.addClass( 'selecting' );
				$( "> div", targetElm ).stop(false,true).slideDown( 'normal' );
			} );
		$("#nav > ul > li")
			.bind( "mouseleave", function(){
				$( this ).removeClass( 'selecting' );
				$( "> div", this ).stop(false,true).slideUp( 'normal' );
			} )


		/* フォントサイズ変更UIの初期化 */
		$("#contents-header").append( HTML_FONT_SIZE_SWITCH_UI );
		$("#contents-header .setterS a").click( function(){
			$(document.body)
				.removeClass("fontsizeL")
				.addClass("fontsizeS");
			bsjs.setCookie(STR_FONTSIZE_COOKIEKEY,"s");
			return false;
		} );
		$("#contents-header .setterM a").click( function(){
			$(document.body)
				.removeClass("fontsizeS")
				.removeClass("fontsizeL");
			bsjs.setCookie(STR_FONTSIZE_COOKIEKEY,"m");
			return false;
		} );
		$("#contents-header .setterL a").click( function(){
			$(document.body)
				.removeClass("fontsizeS")
				.addClass("fontsizeL");
			bsjs.setCookie(STR_FONTSIZE_COOKIEKEY,"l");
			return false;
		} );


		/* a.toPageTop の動作設定 */
		$("#contents-body .toPageTop, #contents-footer .toPageTop")
			.click( function(){
				if( !$("html,body").animate ){
					window.scroll(0,0);
					return true;
				}

				$("html,body").animate({ scrollTop: 0 }, "normal");
				return false;
			} )

		/* 並列カラムの高さあわせ */
		$( CLASS_PANEL_LOOK_ELMS ).initPanelLinks();

		/* OL.generalの粉飾 */
		$("ol.general").dressOL();

		/* 各論への導線のリンク領域を拡張 */
		$( "ul.particularTopics > li" ).click( function(){
			location.href = this.getElementsByTagName("a")[0];
			return false;
		} ).css("cursor","pointer");



		/* IE向けの調整 */
		if( $.browser.msie ){

			// div.figure-containerの余白調整
			$(
				"div.figure-container div > *:last-child," +
				"div.figure-container div > *:last-child > *:last-child," +
				"div.figure-container div > *:last-child > *:last-child > *:last-child," +
				"div.figure-container div > *:last-child > *:last-child > *:last-child > *:last-child"
			).addClass("lastChild");

			// #contents-asideのmargin相殺不具合の対応
			$("#contents-aside > div.section > *:last-child").addClass("lastChild");

		}

		/* ローカルサイトへのリンクUIの初期化 */
		var jQ_localSitesUI = $("#contents-aside .countrySpecificLinks");
		if( jQ_localSitesUI.length ){

			/* 共通動作：一階層目の開閉 */
			jQ_localSitesUI
				.css( "display", "none" )
				.css( "position", "absolute" )

			$("#contents-aside ." + CLASS_COUNTRY_LINKS_TOGGLE)
				.toggle(
					function(){
						jQ_localSitesUI.slideDown( 'normal' );
						$( this ).removeClass("closed");
					},
					function(){
						$( this ).addClass("opened");
						jQ_localSitesUI.slideUp( 'normal' );
						$( this ).addClass("closed");
					}
				)
				.addClass("closed");

			/* 高さが設定された閾値以上の場合：2段階目の開閉 */
			// ↑廃案？
			//if( jQ_localSitesUI.height() > HEIGHT_LOCAL_SITE_UI_THRESHOLD ){
				jQ_localSitesUI.find("ul")
					.css( "display", "none" );

				jQ_localSitesUI.find("div.areaHeading")
					.css("cursor","pointer")
					.toggle(
						function(){
							$(this).next().slideDown( 'normal' )
							$( this ).removeClass("closed");
						},
						function(){
							$(this).next().slideUp( 'normal' );
							$( this ).addClass("closed");
						}
					)
				.addClass("closed");
			//}
		}


		/* 本文の高さに関する調整 */
		if(
			$(document.body).hasClass("topicPage") &&
			$("#contents-body").height() < HEIGHT_CONTENTSBODY_THRESHOLD
		){
			$("#contents-body").addClass("shortContents");
		}


		/* ファーストビューの高さに関する調整 */
		if( $(document.body).height() > HEIGHT_FIRSTVIEW_THRESHOLD ){

			/* PageTopボタン表示 */
			$("#contents-footer .toPageTop").css("display","block")
		}
		else {

			/* PageTopボタン非表示 */
			$("#contents-footer .toPageTop").css("display","none")
		}

	});



	/**
	 * JS読み込み時処理
	 */

	/* CSSチラつき対応 */
	try {
		document.execCommand('BackgroundImageCache', false, true);
	} catch( myEx ) {}

	/* JSが有効なUA向けのCSS調整 (DOMReadyが怪しいUAがあるので、$(document).ready外に記述) */
	var myStyleSheets = document.styleSheets[0];
	try {
		/* for DOM Level 2 */
		if( myStyleSheets.insertRule ){
			myStyleSheets.insertRule("#contents-aside .countrySpecificLinks { display: none }", myStyleSheets.cssRules.length);
		}

		/* for IE */
		if( myStyleSheets.addRule ){
			myStyleSheets.addRule("#contents-aside .countrySpecificLinks", "display:none");
		}
	} catch( myEx ) {}


})();

