﻿/* Process
-------------------------------------------------*/
styleswitcher.init();

$(function() {
	// 点線を消すための処理(IE用)
	$('a').focus(function(){this.blur();});

	// Footerのfixed解除(非対応デバイス、ブラウザ用)
	releaseFixedFooter();
});





/* Common Functions
-------------------------------------------------*/
/**
 * デバッグ関数
 * 
 * @param {String} msg 出力メッセージ
 */
function debug(msg) {
	try {
		window.console.log(msg);
	} catch(e) {
		if ($('#debug').size() == 1) {
			$('#debug').html($('#debug').html() + '<p>' + msg + '</p>');
		} else {
			alert(msg);
		}
	}
}

/**
 * ブラウザ情報の取得
 * 
 */
var BrowserInfo = function() {

	var ua = navigator.userAgent.toLowerCase();

	// Properties
	this.os      = {};
	this.browser = {};

	// Init Properties
	this.os.mac     = false;
	this.os.iphone  = false;
	this.os.ipad    = false;
	this.os.ipod    = false;
	this.os.linux   = false;
	this.os.bsd     = false;
	this.os.sunos   = false;
	this.os.windows = false;
	this.os.android = false;

	this.os.smartphone = false;

	this.browser.chrome  = false;
	this.browser.iphone  = false;
	this.browser.ipad    = false;
	this.browser.ipod    = false;
	this.browser.safari  = false;
	this.browser.firefox = false;
	this.browser.opera   = false;
	this.browser.ie      = false;
	this.browser.gecko   = false;

	// Set OS
	if (ua.indexOf('macintosh') >= 0) {
		this.os.mac   = true;
		this.os.name    = 'Mac';
		this.os.version = (ua.indexOf("mac os x ")>=0)?ua.match(/mac os x [0-9_.]*/).toString().substr(9, 4).replace(/_/g, '.'):-1;

	} else if (ua.indexOf("iphone") >= 0) {
		this.os.iphone  = true;
		this.os.name    = "iPhone";
		this.os.version = (ua.indexOf("iphone os ")>=0)?ua.match(/iphone os [0-9_.]*/).toString().substr(10, 3).replace(/_/g, "."):-1;

	} else if (ua.indexOf("ipad") >= 0) {
		this.os.ipad    = true;
		this.os.name    = "iPad";
		this.os.version = (ua.indexOf("cpu os ")>=0)?ua.match(/cpu os [0-9_.]*/).toString().substr(7, 3).replace(/_/g, "."):-1;

	} else if (ua.indexOf("ipod") >= 0) {
		this.os.ipod    = true;
		this.os.name    = "iPod touch";
		this.os.version = (ua.indexOf("iphone os ")>=0)?ua.match(/iphone os [0-9_.]*/).toString().substr(10, 3).replace(/_/g, "."):0;

	} else if (ua.indexOf("android") >= 0) {
		this.os.android = true;
		this.os.name    = "Android";
		this.os.version = (ua.indexOf("android ")>=0)?ua.match(/android [0-9_.]*/).toString().substr(8, 3).replace(/_/g, "."):0;

	} else if (ua.indexOf("linux") >= 0) {
		this.os.linux   = true;
		this.os.name    = "Linux";

	} else if (ua.indexOf("bsd") >= 0) {
		this.os.bsd     = true;
		this.os.name    = "BSD";

	} else if (ua.indexOf("sunos") >= 0) {
		this.os.sunos   = true;
		this.os.name    = "SunOS";

	} else if (ua.indexOf("win") >= 0) {
		this.os.windows = true;
		this.os.name    = "Windows";

		if (ua.indexOf("windows nt 5.1") >= 0) this.os.version = "XP";
		if (ua.indexOf("windows nt 6.0") >= 0) this.os.version = "Vista";
		if (ua.indexOf("windows nt 6.1") >= 0) this.os.version = "7";
	}

	// Set Browser
	if (ua.indexOf("chrome") >= 0) {
		this.browser.chrome  = true;
		this.browser.name    = "Chrome";
		this.browser.version = ua.match(/chrome\/[0-9_.]*/).toString().substr(7,3);

	} else if (ua.indexOf("iphone") >= 0 && ua.indexOf("safari") >= 0) {
		this.browser.iphone  = true;
		this.browser.name    = "Mobile Safari";
		this.browser.version = ua.match(/version\/[0-9_.]*/).toString().substr(8);

	} else if (ua.indexOf("ipad") >= 0 && ua.indexOf("safari") >= 0) {
		this.browser.ipad     = true;
		this.browser.name    = "iPad Safari";
		this.browser.version = ua.match(/version\/[0-9_.]*/).toString().substr(8);

	} else if (ua.indexOf("ipod") >= 0 && ua.indexOf("safari") >= 0) {
		this.browser.ipod    = true;
		this.browser.name    = "Mobile Safari";
		this.browser.version = ua.match(/version\/[0-9_.]*/).toString().substr(8);

	} else if (ua.indexOf("safari") >= 0) {
		this.browser.safari  = true;
		this.browser.name    = "Safari";
		this.browser.version = ua.match(/version\/[0-9_.]*/).toString().substr(8);

	} else if (ua.indexOf("firefox") >= 0) {
		this.browser.firefox = true;
		this.browser.name    = "Firefox";
		this.browser.version = ua.match(/firefox\/[0-9_.]*/).toString().substr(8, 3);

	} else if (ua.indexOf("opera") >= 0) {
		this.browser.opera   = true;
		this.browser.name    = "Opera";
		this.browser.version = ua.match(/version\/[0-9_.]*/).toString().substr(8);

	} else if (ua.indexOf("msie") >= 0) {
		this.browser.ie      = true;
		this.browser.name    = "Internet Explorer";
		this.browser.version = ua.match(/msie [0-9_.]*/).toString().substr(5);

	}

	if (ua.indexOf('gecko') >= 0)
		this.browser.gecko  = true;


	if (this.os.iphone || this.os.ipad || this.os.ipod || this.os.android) {
		this.os.smartphone = true;
	}


	this.ua = ua;
	this.debug = function() {
		var code = '';

		code += '[OS]\n' + this.os.name + ' ' + this.os.version + '\n';
		code += '\n[Browser]\n' + this.browser.name + ' ' + this.browser.version + '\n';
		code += 'Gecko :: ' + this.browser.gecko + '\n';
		code += '\n[UserAgent]\n' + this.ua + '\n';

		alert(code);
	}
}

/* Parallax Functions
-------------------------------------------------*/
/**
 * 多重スクロールオブジェクト
 *
 *
 * @param {jQuery Object} obj 多重スクロールを設定するjQueryオブジェクト
 * @param {Object} options 初期値オブジェクト
 */
function getScrollerOption(obj, options) {
	var height     = obj.outerHeight();
	var position   = obj.position();
	var startY     = position.top;
	var endY       = position.top + obj.outerHeight();
	var defaultTop = (options && options.defaultTop)?options.defaultTop:0;
	var range      = (options && options.range)?options.range:0;
	var left       = (options && options.left)?options.left:'center';

	obj.css({backgroundPosition: left + ' ' + defaultTop + 'px'});

	var moveTxt = (options && options.moveTxt)?true:false;

	var txt = obj.find('.box-txt');
	var txtHeight = txt.outerHeight();
	var txtRangeMargin = (options && options.txtRangeMargin)?options.txtRangeMargin:0;
	var txtDefaultTop  = (options && options.txtDefaultTop)?options.txtDefaultTop:txtRangeMargin;
	var txtRange       = (options && options.txtRange)?options.txtRange:(height-txtHeight-txtRangeMargin*2);

	return {
		 'height'        : height
		,'position'      : position
		,'left'          : left
		,'startY'        : startY
		,'endY'          : endY
		,'defaultTop'    : defaultTop
		,'range'         : range
		,'moveTxt'       : moveTxt
		,'txtDefaultTop' : txtDefaultTop
		,'txtRange'      : txtRange
	}
}


/**
 * 背景画像、テキスト画像の位置移動
 *
 * @param {jQuery Object} obj 多重スクロールを設定するjQueryオブジェクト
 * @param {Number} scroll スクロール量
 * @param {Number} winHeight ウィンドウの高さ
 */
function moveBgImage(obj, options, scroll, winHeight) {

	// ターゲットとなる枠がwindowに表示されている場合のみ処理
	if ((scroll >= (options.startY - winHeight)) && (scroll <= options.endY)) {
		var ratio = (options.endY - scroll) / (options.endY - (options.startY - winHeight));

		// テキスト
		if (options.moveTxt) {
			var txtTop = options.txtDefaultTop + (1-ratio) * (options.txtRange);
			obj.find('.box-txt').css({top: txtTop + 'px'});
		}

		// 背景
		var top = options.defaultTop + (-1 * ratio * options.range);
		if (obj.attr('id') == 'Main-content') {
			top = options.defaultTop + scroll * 0.5;
		}
		obj.css({backgroundPosition: options.left + ' ' + top + 'px'});
	}
}


/**
 * 多重スクロールオブジェクト
 *
 *
 * @param {jQuery Object} obj 多重スクロールを設定するjQueryオブジェクト
 * @param {Object} options 初期値オブジェクト
 */
function getScrollerOptionBubble(obj, options) {
	var rate  = (options && options.rate)?options.rate:0.6;
	var start = (options && options.start)?options.start:0;

	return {
		 'rate' : rate
		,'start' : start
	}
}

/**
 * 背景画像、テキスト画像の位置移動
 *
 * @param {jQuery Object} obj 多重スクロールを設定するjQueryオブジェクト
 * @param {Number} scroll スクロール量
 * @param {Number} winHeight ウィンドウの高さ
 */
function moveBgImageBubble(obj, options, scroll, winHeight) {

	if ((scroll >= options.start) && (scroll <= winHeight)) {
		var diff = (-1) * parseInt((scroll - options.start) * options.rate * 1000) / 1000;
		obj.css({backgroundPosition: 'center ' + diff + 'px'});
	}
}


/* Common Functions (jQuery Plugin)
-------------------------------------------------*/
/**
 * 時間差で実行するための処理(jQueryプラグイン)
 *
 */
// $.delay
$.delay = {
	// $.delay.queue
	queue: [],
	// $.delay.timer
	timer: null,
	// $.delay.pause
	pause: function() {
		if (!$.delay.timer)
			return;

		clearInterval($.delay.timer);
		$.delay.timer = null;
	}
};

// $.resume
/*
 * jQuery.delay変数にセットした関数を実行する
 * 
 * @param {Number} interval 実行間隔(ミリ秒)
 */
$.resume = function(interval) {
	$.delay.pause();
	$.delay.timer = setInterval(function() {
		var fn = $.delay.queue.shift();
		fn ? fn() : $.delay.pause();
	}, interval || 10);
};

// delay
/*
 * 時間差で実行したい関数をセット
 *
 * @param {Function} fn 関数
 */
$.fn.delay = function(fn) {
	var self = this;
	$.delay.queue.push(function() {
		self.each(fn);
	});
	return self;
};



/**
 * 2ndページ用Header処理
 */
var TailingMenu = {};
TailingMenu.hide_plink = true;

TailingMenu.header  = null;
TailingMenu.plink   = null;

TailingMenu.headerH = null;
TailingMenu.hinnerH = null;
TailingMenu.gnaviH  = null;
TailingMenu.plinkH  = null;
/**
 * 初期化処理
 */
TailingMenu.init = function(b_hide_plink) {

	TailingMenu.b_plink = b_hide_plink?false:true;

	TailingMenu.header = $('#Header');
	TailingMenu.header.css({position: 'absolute', top: 0, left: 0});
	TailingMenu.headerH = TailingMenu.header.outerHeight();

	if (TailingMenu.b_plink) {
		TailingMenu.plink = $('#Page-links');

		TailingMenu.plink.css({width: '100%', zIndex: 10005, margin: '0 auto', position: 'absolute', top: TailingMenu.headerH + 'px', left: 0});
		// 背景用のdivタグ作成
		var overlay = $('<div></div>').addClass('overlay');
		TailingMenu.plink.append(overlay);

	}

	// 各欄の高さを取得
	TailingMenu.hinnerH = $('#Header-inner').outerHeight();
	TailingMenu.gnaviH  = $('#Global-navi').outerHeight();

	// ページリンクのタグを再生成
	if (TailingMenu.b_plink) {
		var plink_links = $('ul', TailingMenu.plink);
		var plink_inner = $('<div></div>').css({width: '980px', margin: '0 auto'});
		TailingMenu.plink.append(plink_inner);
		plink_inner.append(plink_links);
		plink_inner.append($('<div class="clear-left"><hr /></div>'));

		TailingMenu.plinkH  = TailingMenu.plink.outerHeight();
	} else {
		TailingMenu.plinkH  = 0;
	}
	$('h2').css({paddingTop: (TailingMenu.headerH + TailingMenu.plinkH + 33) + 'px', marginTop: 0});
};

/**
 * 位置調整処理
 */
TailingMenu.adjust = function(binfo, scroll) {

	if (!binfo.browser.ie || (binfo.browser.version != 6)) {
		if (scroll >= TailingMenu.hinnerH) {
			TailingMenu.header.css({position: 'fixed', top: (-1 * TailingMenu.hinnerH) + 'px', left: 0});
			if (TailingMenu.b_plink)
				TailingMenu.plink.css({position: 'fixed', top: TailingMenu.gnaviH + 'px', left: 0});
		} else {
			TailingMenu.header.css({position: 'absolute', top: 0});
			if (TailingMenu.b_plink)
				TailingMenu.plink.css({position: 'absolute', top: TailingMenu.headerH + 'px'});
		}
	}
};


/**
 * Footerのfixed解除(非対応デバイス、ブラウザ用)
 *
 */
function releaseFixedFooter() {
	var b = new BrowserInfo();

	if (b.os.smartphone) {
		var footer = $('#Footer');
		if (footer.size() == 1) {
			$('#Footer').css({
				position: 'relative'
			});
		}
	}
}

