/*
 * yuga.js 0.5.1 - 優雅なWeb制作のためのJS
 * Copyright (c) 2007 Kyosuke Nakamura (kyosuke.jp)
 * Licensed under the MIT License:
 * http://www.opensource.org/licenses/mit-license.php
 * Since:     2006-10-30
 * Modified:  2008-02-26
 */

(function($) {
$(function() {
  $.yuga.selflink({
	  hoverClass:'btn'  //除去するロールオーバーのクラス名
  });
  $.yuga.rollover({
	  hoverClass: '.btn',		//イメージにつけるロールオーバーのクラスセレクタ
	  groupClass: '.btngroup',//グループ化したロールオーバーのクラスセレクタ
	  postfix: '_on'			//ファイル名の末尾につける文字列
  });
/*  $.yuga.externalLink({
	  windowOpen: true,				//外部リンクは別ウインドウで開く
	  externalClass: 'externalLink'	//外部リンクにつけるクラス名
  });*/
  $.yuga.thickbox();$.yuga.stripe({
	  oddClass:'odd',		//奇数行につくクラス
	  evenClass:'even'	//偶数行につくクラス
  });
  $.yuga.css3class();$('a[href^=#], area[href^=#]').setYugaScroll();});
//---------------------------------------------------------------------
$.yuga = {
  Uri: function(s){this.originalPath = s;this.getAbsolutePath = function(path){if (!path.match(/^(mailto:)|(javascript:)/)) {var img = new Image();img.src = path;path = img.src;img.src = '#';}return path;};this.absolutePath = this.getAbsolutePath(s);
	  //同じ文書にリンクしているかどうか
	  this.isSelfLink = (this.absolutePath == location.href);
	  //絶対パスを分解
	  var fields = {'schema' : 2, 'username' : 5, 'password' : 6, 'host' : 7, 'path' : 9, 'query' : 10, 'fragment' : 11};
	  var r = /^((\w+):)?(\/\/)?((\w+):?(\w+)?@)?([^\/\?:]+):?(\d+)?(\/?[^\?#]+)?\??([^#]+)?#?(\w*)/.exec(this.absolutePath);
	  for (var field in fields) {this[field] = r[fields[field]]; }},
  //現在のページへのリンク
  selflink: function (options) {
	  var c = $.extend({hoverClass:'btn'}, options);
	  $('a[href]').each(function(){var href = new $.yuga.Uri(this.getAttribute('href'));
		  if (href.isSelfLink && !href.fragment) {$(this).addClass('current');
			  //img要素が含まれていたら現在用画像（_on）に設定
			  $(this).find('img').each(function(){
				//ロールオーバークラスが設定されていたら削除
				$(this).removeClass(c.hoverClass);this.originalSrc = $(this).attr('src');this.currentSrc = this.getAttribute('src').replace(/(\.gif)/, "_on$1");$(this).attr('src',this.currentSrc);});}});},
  //ロールオーバー
  rollover: function(options) {var c = $.extend({hoverClass: '.btn',groupClass: '.btngroup',postfix: '_on'}, options);
	  //ロールオーバーするノードの初期化
	  $(c.hoverClass).each(function(){this.originalSrc = $(this).attr('src');this.rolloverSrc = this.originalSrc.replace(/(\.gif|\.jpg|\.png)$/, c.postfix+"$1");this.rolloverImg = new Image;this.rolloverImg.src = this.rolloverSrc;});
	  //通常ロールオーバー
	  $(c.hoverClass).not($(c.groupClass+' '+c.hoverClass)).hover(function(){$(this).attr('src',this.rolloverSrc);},function(){$(this).attr('src',this.originalSrc);});
	  //グループ化されたロールオーバー
	  $(c.groupClass).hover(function(){$(this).find(c.hoverClass).each(function(){$(this).attr('src',this.rolloverSrc);});},function(){$(this).find(c.hoverClass).each(function(){$(this).attr('src',this.originalSrc);});});},
  //外部リンクは別ウインドウを設定
  externalLink: function(options) {var c = $.extend({windowOpen:true,externalClass: 'externalLink'}, options);var e = $('a[href^="http://"]');if (c.windowOpen) {e.click(function(){window.open(this.href, '_blank');return false;});}e.addClass(c.externalClass);},
  //ドキュメントのスクロールを制御するオブジェクト
  scroll: (function() {var c;var TimerId;var stepCount = 0;var lastY = -1;
	  //スクロール中に実行されるfunction
	  function move() {var currentX = getCurrentX();var currentY = getCurrentY();if (stepCount >= c.step) {
			  //スクロール終了時
			  window.scrollTo(currentX, c.endY);stepCount = 0;} else if (lastY != currentY) {
			  //スクロール操作時
			  stepCount = 0;} else {
			  //通常スクロール時
			  stepCount++;window.scrollTo(currentX, getEasingY());lastY = getEasingY();TimerId = setTimeout(move, Math.floor(1000/c.fps)); }};
	  function getCurrentY() {return document.body.scrollTop  || document.documentElement.scrollTop;}
	  function getCurrentX() {return document.body.scrollLeft  || document.documentElement.scrollLeft;}
	  function getEasingY() {return Math.floor(getEasing(c.startY, c.endY, 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;}return {set: function(options) {c = $.extend({startY:getCurrentY(),endY:0,easing:100,step:30,fps:60}, options);lastY = c.startY;TimerId = setTimeout(move, Math.floor(1000/c.fps));}};})(),
  //画像へ直リンクするとthickboxで表示(thickbox.js利用)
  thickbox: function() {
	  try {tb_init('a[@href$=".jpg"], a[@href$=".gif"], a[@href$=".png"]');} catch(e) {}	},
  //奇数、偶数を自動追加
  stripe: function(options) {var c = $.extend({oddClass:'odd',evenClass:'even'}, options);
	  $('ul, ol').each(function(){$(this).children('li:odd').addClass(c.evenClass);$(this).children('li:even').addClass(c.oddClass);});
		$('dl#ttk').each(function(){$(this).children('dt:odd').addClass(c.evenClass);$(this).children('dt:even').addClass(c.oddClass);});
	  $('table').each(function(){$(this).children('tr:odd').addClass(c.evenClass);$(this).children('tr:even').addClass(c.oddClass);});},
  //css3のクラスを追加
  css3class: function() {
	  //:first-child, :last-childをクラスとして追加
	  $('body :first-child').addClass('firstChild');
	  $('body :last-child').addClass('lastChild');
	  //css3の:emptyをクラスとして追加
	  $('body :empty').addClass('empty');}};
$.fn.setYugaScroll = function() {return this.each(function(){$(this).each(function(){this.hrefdata = new $.yuga.Uri(this.getAttribute('href'));}).click(function(){var target = $('#'+this.hrefdata.fragment);if (target.length) {$.yuga.scroll.set({endY: target.offset().top});return false;}});});};
})(jQuery);
