/*
  jq_segmenter.js
  for Bridgestone GlobalWebSite
*/

(function(){

	/**
	 * 定数定義
	 */

	var CLASS_PAGINATOR = "paginator";
	var CLASS_PAGINATOR_CONTAINER = "turner";
	var HTML_PAGINATOR_PREV  = '<li class="toPrev"><a href="#">Back</a></li>';
	var HTML_PAGINATOR_NEXT  = '<li class="toNext"><a href="#">Next</a></li>';
	var STR_TRACKING_PREFIX = "showSegment_";


	/**
	 * セグメントの表示切り替え
	 */
	$.fn.showSegment = function( myIndex ){

		/* 全セグメントの取得 */
		var mySegments = this.find( "> div.segment" );


		/* 表示するセグメントの決定 */
		var targetSegmentIndex = 0;
		
		//数値の場合
		if( myIndex !== "" && ( myIndex - 0 || (myIndex - 0) === 0 ) ){
			 if(myIndex <= mySegments.length ) targetSegmentIndex = myIndex-0;
		}

		//文字列、もしくは指定が無い場合
		else {
			/* 予約語 */
			if( myIndex === "_back" ){
				if( this.attr( "currentViewIndex" ) ){
					targetSegmentIndex = Math.max( this.attr("currentViewIndex")-0 -1, 0 );
				}
				else {
					targetSegmentIndex = 0;
				}
			}
			else if( myIndex === "_next" ){
				if( this.attr( "currentViewIndex" ) ){
					targetSegmentIndex = Math.min( this.attr("currentViewIndex")-0 +1, mySegments.length -1 );
				}
				else {
					targetSegmentIndex = 1;
				}
			}

			/* ID指定 */
			else {
				//myIndex = ( myIndex.charAt(0) === "#" )? myIndex.slice(1): myIndex;

				for( var i=0; i<mySegments.length; i++ ){
					if( $(mySegments.get(i)).attr("id") === myIndex ){
						targetSegmentIndex = i;
						break;
					}
				}
			}
		}


		/* 表示指定が現在表示と同じ場合、処理を中止 */
		if( this.attr( "currentViewIndex" ) && this.attr("currentViewIndex")-0 === targetSegmentIndex ){
			return false;
		}

		/* ページトップに移動 */
		window.scrollTo(0,0);

		/* 対象セグメントの表示 */
		mySegments.css("display","none");
		this.attr( "currentViewIndex", targetSegmentIndex );
		$( mySegments.get( targetSegmentIndex ) ).css("display","block");
		//$( mySegments.get( targetSegmentIndex ) ).fadeIn("fast");


		/* ページネーターUIの同期 */
		var segmentTriggers = this.find( "." + CLASS_PAGINATOR + " li" )
		segmentTriggers.removeClass("current");
		segmentTriggers.removeClass("disabled");
		$( segmentTriggers.get(targetSegmentIndex +1) ).addClass("current")

		if( targetSegmentIndex === 0 ){
			$( segmentTriggers.get(0) ).addClass("disabled")
		}
		if( mySegments.length-1 == targetSegmentIndex ){
			$( segmentTriggers.get(segmentTriggers.length-1) ).addClass("disabled")
		}


		/* トラッキング */
		if( sendAnalyticsEvent ){
			sendAnalyticsEvent(STR_TRACKING_PREFIX + (targetSegmentIndex-0 +1));
		}
	}



	/**
	 * セグメント表示の初期化
	 */
	$.fn.initSegments = function(){
		var that = this;

		/* ページネーターUI設置 */
		var mySegments = $(this).find( "> div.segment" );
		var myPaginatorEl = $( document.createElement("ol") ).addClass(CLASS_PAGINATOR);
		myPaginatorEl.append(
			$( HTML_PAGINATOR_PREV ).click( function(){
				that.showSegment("_back");
				return false;
			} )
		);
		for( var i=0; i < mySegments.length; i++ ){
			var numContainer = $( document.createElement("li") );
			numContainer
				.html( '<a href="#">' + (i+1) + '</a>' )
				.attr( "targetSegmentIndex", i )
				.click( function(){
					that.showSegment( $(this).attr("targetSegmentIndex") );
					return false;
				} );
			if( i == 0 ) numContainer.addClass("toFirstNum");
			myPaginatorEl.append( numContainer )
		}
		myPaginatorEl.append(
			$( HTML_PAGINATOR_NEXT ).click( function(){
				that.showSegment("_next");
				return false;
			} )
		);
		$(this).append(
			$( document.createElement("div") )
				.addClass( CLASS_PAGINATOR_CONTAINER )
				.append(myPaginatorEl)
		);

		/* 初期表示 */
		var firstViewIndex = 0;
		if( location.href.indexOf("#") !== -1 ){
			firstViewIndex = location.href.slice(location.href.lastIndexOf("#") + 1);
		}
		$(this).showSegment( firstViewIndex );
	};



	/**
	 * セグメントコントローラの初期化
	 */
	$.fn.initSegmentsController = function(){
		this.find("a").click( function(){
			var targetId = this.href.split("#")[1];
			if( targetId ){
				$( "div.segments-container" ).showSegment(targetId);
			}
			return false;
		})
	}



	/**
	 * 初期表示処理
	 */
	var onLoadFunc = function(){
		$( "div.segments-container" ).initSegments();
		$( ".segments-controller" ).initSegmentsController();
	}

	if( $.browser.safari ){
		window.addEventListener( "load", onLoadFunc, false );
	}
	else {
		$(document).ready(onLoadFunc);
	}

})();
