﻿/* -------------------------------------------

	共通関数実行
	
------------------------------------------- */
$(function() {

/* EqualHeight */
	$.JSL.EqualHeight();

/* SmoothScroll */
	$().SmoothScroll();
	
/* Rollover */
	new RolloverImages( 'rollover', 'on' );
	
/* for IE6 background image flicker */
	if (jQuery.browser.msie && jQuery.browser.version == 6) {
		try {
			document.execCommand("BackgroundImageCache", false, true);
		} catch(err) {}
	}

});


/* -------------------------------------------

	共通関数定義
	
------------------------------------------- */

/* ---------------------
  EqualHeight Setup
--------------------- */
(function ($) {

	$.JSL = {
		/**
		 * @method EqualHeight
		 *
		 * @option {className}
		 * @option {childBaseName}
		 */
		EqualHeight:function(config){var c=$.extend({className:".equalHeight",childBaseName:"equalChild"},config);var _this=$(c.className);var _children=_this.children();var _childName=$("."+c.childBaseName);var _childrenNum=_children.size();var _lastHeight="";var parents=[];if(_childrenNum<2){return false}var HTML_FS_WATCH=$('<div id="fontSizeWatcher">&nbsp;</div>');var CSS_OBJECT={display:'block',visibility:'hidden',position:'absolute',padding:'0',top:'0'};var fsWatcher=function(){HTML_FS_WATCH.css(CSS_OBJECT).appendTo("body");var _fsHeight=HTML_FS_WATCH.height();HTML_FS_WATCH.remove();if(_fsHeight==_lastHeight){return false}_lastHeight=_fsHeight;return true};$(fsWatcher);var fsCheck=function(){if(!fsWatcher())return;_this.EqualHeightInit()};function ChildrenGrouping(){var _groups=[];var $children=_this.find(_childName);if($children.length)_groups.push($children);var $groupedChildren=_this.find('*[class*='+c.childBaseName+']:not(.'+c.childBaseName+')');if($groupedChildren.length){var classNames={};$groupedChildren.each(function(){var a=$(this).attr("class").split(" ");var i;var l=a.length;var _class;for(i=0;i<l;i++){_class=a[i].match(RegExp(c.childBaseName+"[a-z0-9_-]+",'i'));if(!_class)continue;_class=_class.toString();if(_class)classNames[_class]=_class}});for(var _class in classNames)_groups.push(_this.find("."+_class))}$children=_this.children();if($children.length)_groups.push($children);_this.data("EqualHeightChildrenGroups",_groups);parents.push(_this);return _groups}$.fn.EqualHeight=function(){var _maxHeight=0;this.css("height","auto");this.each(function(){if($(this).height()>_maxHeight){_maxHeight=$(this).height()}});return this.height(_maxHeight)};$.fn.EqualHeightInit=function(){var _groups=ChildrenGrouping();$.each(_groups,function(){var _children=$(this);var _childArray=[];var top=0;_children.each(function(){if(top!=$(this).position().top){$(_childArray).EqualHeight();_childArray=[];top=$(this).position().top}_childArray.push(this)});if(_childArray.length)$(_childArray).EqualHeight()});setInterval(fsCheck,200)};_this.EqualHeightInit()}
	};
})(jQuery);

/* ---------------------
  SmoothScroll Setup
--------------------- */
(function ($) {
	$.fn.SmoothScroll = function (options) {

		var scroller = (function () {
			var c = $.extend({
				easing: 100,
				step: 30,
				fps: 60,
				fragment: ''
			},
			options);

			c.ms = Math.floor(1000 / c.fps);
			var timerId;
			var param = {
				stepCount: 0,
				startY: 0,
				endY: 0,
				lastY: 0
			};

			function move() {
				if (param.stepCount == c.step) {
					// scroll end
					setFragment(param.fragment);

					window.scrollTo(getCurrentX(), param.endY);
				} else if (param.lastY == getCurrentY()) {
					// scroll
					param.stepCount++;
					window.scrollTo(getCurrentX(), getEasingY());
					param.lastY = getEasingY();
					timerId = setTimeout(move, c.ms);
				} else {
					// error	
					if (getCurrentY() + getViewportHeight() == getDocumentHeight()) {
						setFragment(param.fragment);
					}
				}
			}

			function setFragment(fragment) {
				location.href = location.href.split('#')[0] + fragment;
			}

			function getEasingY() {
				return Math.floor(getEasing(param.startY, param.endY, param.stepCount, c.step, c.easing));
			}

			function getEasing(start, end, stepCount, step, easing) {
				var s = stepCount / step;
				return (end - start) * (s + easing / (100 * Math.PI) * Math.sin(Math.PI * s)) + start;
			}

			function targetOffsetTop(target) {
				return target.offset().top;
			}
			return {
				set: function (options) {
					this.stop();
					if (options.startY == undefined) options.startY = getCurrentY();
					param = $.extend(param, options);
					param.lastY = param.startY;
					param.fragment = options.fragment;
					timerId = setTimeout(move, c.ms);
				},
				stop: function () {
					clearTimeout(timerId);
					param.stepCount = 0;
				}
			};
		})();

		function getCurrentY() {
			return document.body.scrollTop || document.documentElement.scrollTop;
		}

		function getCurrentX() {
			return document.body.scrollLeft || document.documentElement.scrollLeft;
		}

		function getDocumentHeight() {
			return (document.compatMode && document.compatMode != "BackCompat") ? document.documentElement.scrollHeight : document.body.scrollHeight;
		}

		function getViewportHeight() {
			return (!$.browser.safari && !$.browser.opera) ? document.documentElement.clientHeight || document.body.clientHeight || document.body.scrollHeight : window.innerHeight;
		}
		// init
		$('a[href^=#], area[href^=#]').not('a[href=#], area[href=#], a.no-scroll, area.no-scroll').click(function () {

			var fragment = $(this).attr('href');
			var target = $(fragment);
			if (target.length == 0) target = $('a[name=' + fragment + ']');

			if (target.length) {
				scroller.set({
					endY: ((getDocumentHeight() - target.offset().top)) < getViewportHeight() ? getDocumentHeight() - getViewportHeight() : target.offset().top,
					fragment: fragment,
					_target: target
				});

				return false;
			}
		});
	}

})(jQuery)

/* ---------------------
  Rollover Setup
--------------------- */

function RolloverImages( className, onSuffix, aSuffix ){
	this.init( className, onSuffix, aSuffix );
}

RolloverImages.prototype = {

	init : function( className, onSuffix, aSuffix ){
		if(!document.getElementById || !document.images || !className) return;

		// 
		this.targetClassName = className;
		this.onSuffix = onSuffix;
		this.aSuffix = aSuffix;
		//this.mdSuffix = mdSuffix;
		this.buttons = [];

		// 
		var _this  = this;
		var imgs   = [];
		var inputs = [];
		var rolloverObj    = [];

		var selectors = [
			"img." + this.targetClassName,
			"input." + this.targetClassName
		];

		$( selectors.join(", ") ).each(function(i){
			var el = $(this);
			rolloverObj.push(this);
		});

		$.each(rolloverObj, function(i){ _this.registButton(this); });
		this.preloadImages();
	},


	registButton : function( el ){
		var _this = this;
		var btn = new Object();
		btn.src = el.src;
		btn.filetype = btn.src.substring(btn.src.lastIndexOf('.'));
		btn.basename = btn.src.substring(0, btn.src.length-btn.filetype.length);
		btn.onsrc = btn.basename + this.onSuffix + btn.filetype;

		el.offsrc = btn.src;
		el.onsrc  = btn.onsrc;
		el.lock   = false;
		if( this.aSuffix ){
			btn.activesrc = btn.basename + this.aSuffix + btn.filetype;
			el.activesrc = btn.activesrc;
		}

		this.buttons.push( el );

		if( !this.aSuffix ){
			$(el).bind( 'mouseover', function(){ _this.swapImage( el, 'on' ); } );
			$(el).bind( 'mouseout',  function(){ _this.swapImage( el, 'off'); } );
			if(el.parentNode && el.parentNode.tagName=="A"){
				var p = el.parentNode;
				$(p).bind( 'focus', function(){ _this.swapImage( el, 'on' ); } );
				$(p).bind( 'blur',  function(){ _this.swapImage( el, 'off'); } );
			}
		}
		else {
			$(el).bind( 'mouseover', function(){ if(!el.lock) _this.swapImage( el, 'on' ); } );
			$(el).bind( 'mouseout',  function(){ if(!el.lock) _this.swapImage( el, 'off'); } );
			$(el).bind( 'mouseup',   function(){
				$(_this.buttons).each(function(i){
					_this.deactivate(this)
				});
				_this.activate( el );
			} );

			if(el.parentNode && el.parentNode.tagName=="A"){
				var p = el.parentNode;
				$(p).bind( 'focus', function(){ if(!el.lock) _this.swapImage( el, 'on' ); } );
				$(p).bind( 'blur',  function(){ if(!el.lock) _this.swapImage( el, 'off'); } );

				$(p).bind( 'keypress',  function(e){
					if( jQuery.browser.msie || (!jQuery.browser.msie && e.keyCode == 13) ){
						//Event.stop(e);
						$(_this.buttons).each(function(i){
							_this.deactivate(this)
						});
						_this.activate( el );
					}
				} );
			}

		}
	},

	preloadImages : function(){
		var ret = [];
		for( var i=0; i<this.buttons.length; i++ ){
			(new Image()).src = this.buttons[i].onsrc;
			ret[ret.length] = this.buttons[i].onsrc;
			if(this.buttons[i].activesrc){
				(new Image()).src = this.buttons[i].activesrc;
				ret[ret.length] = this.buttons[i].activesrc;
			}
		}
	},

	swapImage : function( obj, status ){
		if( !obj || !obj[status+"src"] ) return;
		if( !obj.lock )
			obj.src = obj[status+"src"];
	},

	activate : function( el ){
		this.swapImage( el, 'active' );
		this.lock( el );
	},

	deactivate : function( el ){
		this.unlock( el );
		this.swapImage( el, 'off' );
	},

	lock : function( obj ){
		if( obj.lock == 'undefined' ) return;
		if(!obj.lock) obj.lock = true;
	},

	unlock : function( obj ){
		if( obj.lock == 'undefined' ) return;
		if( obj.lock ) obj.lock = false;
	}
}




