// JavaScript Document

/* ===============================================
  ロールオーバー
  
  <img />,<input type="image" />タグに「class="rover"」とつけると
  「～～.gif」,「～～,jpg」を「～～_on.gif」,「～～_on,jpg」に切り替える。
=============================================== */
	function initRollOverImages(){
		var image_cache = new Object();
		$("img.rover,input.rover").each(function(i){
			var imgsrc = this.src;
			var dot = this.src.lastIndexOf('.');
			var imgsrc_ro = this.src.substr(0, dot) + '_on' + this.src.substr(dot, 4);
			image_cache[this.src] = new Image();
			image_cache[this.src].src = imgsrc_ro;
			$(this).hover(function(){
				this.src = imgsrc_ro;
			},function(){
				this.src = imgsrc;
			});
		});
	}
	$(document).ready(initRollOverImages);

/* ===============================================
  メニューアクティブ
  
  画面ロード時にimgタグを_onの付いた画像に張り替える
=============================================== */
	function Menu_active(id){
		if(id != ''){
			var target_img = "img#"+id;
			$(target_img).each(function(i){
				dot = this.src.lastIndexOf('.');
				var imgsrc_ro = this.src.substr(0, dot) + '_on' + this.src.substr(dot, 4);
				this.src = imgsrc_ro;
				//既に割り当てられているロールオーバー関数を上書き
				$(this).hover(function(){
					this.src = imgsrc_ro;
				},function(){
					this.src = imgsrc_ro;
				});
			});
		}
	}

/* ===============================================
  メニューアクティブ化(テキスﾄ)
  
  画面ロード時にliタグ or ddタグにクラス[on]を追加する
=============================================== */
	function localMenu_active(id){
		if(id != ''){
			var target_img = "li#"+id;
			$(target_img).each(function(i){
				//$(this).addClass("on");
				var A = "li#"+id+" a";
				$(A).addClass("on");
			});
			var target_img = "dd#"+id;
			$(target_img).each(function(i){
				$(this).addClass("on");
			});
		}
	}

/* ===============================================
  スムーススクロール
  
  アンカーリンクをエフェクトしながら動く
=============================================== */
	function SmoothnessScroll(){
			$('a[href*=#]').click(function(){
				$(this).scrollTo(500);
				return false;
			});
	}
	jQuery.fn.extend({
		scrollTo : function(speed, easing){
			if(!$(this)[0].hash || $(this)[0].hash == "#"){
				return false;
			}
			return this.each(function() {
				var targetOffset = $($(this)[0].hash).offset().top;
				$('html,body').animate({scrollTop: targetOffset}, speed, easing);
			});
		}
	});
	$(document).ready(SmoothnessScroll);

/* ===============================================
  input,textareaタグをフィーカスする
  
  input,textareaタグにカーソルが乗ると、[input-focus]クラス名が追加される。
  デフォルト時は[input-usually]が自動的に追加される。
=============================================== */
	function InputFocus(){
		$('input[type=text],input[type=password]').addClass('input-usually');
		$('.input-usually').focus(function(){
			$(this).addClass('input-focus');
		});
		$('.input-usually').blur(function(){
			if($(this).find('.input-focus')){
				$(this).removeClass('input-focus');
			}
		});
	}
	$(document).ready(InputFocus);
	


/* ===============================================
	タブメニューの切替  
=============================================== */

	
//Index:Tab
$.auto={
	init:function(){
		for (module in $.auto) {
			if($.auto[module].init)
			$.auto[module].init();
		}
	}
};
$(document).ready($.auto.init);
// Switches tabs on click

$.auto.tabs = {
	init: function() {
		$('.Tab').each(function(){
			var f = $.auto.tabs.click;
			var group = this;
			$('.tab li:not(.list),', group).each(function(){
				$(this).css("cursor","pointer");
				this.group = group;
				$(this).click(f);
				$('#'+this.id+'Tab').hide();
			}).filter(':first').trigger('click');
		});
	},
	click: function(){
		var tab = $('#'+this.id+'Tab').get(0);
		$('.tab li:not(.list),', this.group).each(function(){
			$(this).removeClass('on');
			$('#'+this.id+'Tab').hide();
		});
		$(".tab img").each(function(){
			this.src=this.src.replace("_on","");
			if($(this).hasClass("active")){
				$(this).removeClass("active");
			}
		});
		$(this).find("img").addClass("active");
		$(this).find("img").attr("src",$(this).find("img").attr("src").replace(".gif","_on.gif"));
		$(this).addClass('on');
		$(tab).show();
		
		$('.list a').attr('href', $(this).attr('id') + '/index.php');
		this.blur();
		return false;
	}
};


/*
======================================================================
	$.changeLetterSize.addHandler(func)
	文字の大きさが変化した時に実行する処理を追加
======================================================================
*/

jQuery.changeLetterSize = {
	handlers : [],
	interval : 1000,
	currentSize: 0
};

(function($) {

	var self = $.changeLetterSize;

	/* 文字の大きさを確認するためのins要素 */
	var ins = $('<ins>M</ins>').css({
		display: 'block',
		visibility: 'hidden',
		position: 'absolute',
		padding: '0',
		top: '0'
	});

	/* 文字の大きさが変わったか */
	var isChanged = function() {
		ins.appendTo('body');
		var size = ins[0].offsetHeight;
		ins.remove();
		if (self.currentSize == size) return false;
		self.currentSize = size;
		return true;
	};

	/* 文書を読み込んだ時点で
	   文字の大きさを確認しておく */
	$(isChanged);

	/* 文字の大きさが変わっていたら、
	   handlers中の関数を順に実行 */
	var observer = function() {
		if (!isChanged()) return;
		$.each(self.handlers, function(i, handler) {
			handler();
		});
	};

	/* ハンドラを登録し、
	   最初の登録であれば、定期処理を開始 */
	self.addHandler = function(func) {
		self.handlers.push(func);
		if (self.handlers.length == 1) {
			setInterval(observer, self.interval);
		}
	};

})(jQuery);



/*
======================================================================
	$(expr).flatHeights()
	$(expr)で選択した複数の要素について、それぞれ高さを
	一番高いものに揃える
======================================================================
*/

(function($) {

	/* 対象となる要素群の集合 */
	var sets = [];

	/* 高さ揃えの処理本体 */
	var flatHeights = function(set) {
		var maxHeight = 0;
		set.each(function(){
			var height = this.offsetHeight;
			if (height > maxHeight) maxHeight = height;
		});
		set.css('height', maxHeight + 'px');
	};

	/* 要素群の高さを揃え、setsに追加 */
	jQuery.fn.flatHeights = function() {
		if (this.length > 1) {
			flatHeights(this);
			sets.push(this);
		}
		return this;
	};

	/* 文字の大きさが変わった時に、
	   setsに含まれる各要素群に対して高さ揃えを実行 */
	$.changeLetterSize.addHandler(function() {
		$.each(sets, function() {
			this.height('auto');
			flatHeights(this);
		});
	});

})(jQuery);