/*
 * jtalib.js 0.1.2
 *
 * extended yuga.js 0.1.0 for protptype.js
 *
 * Copyright (c) 2007 Toyotoshi Kitagawa (http://www.sid.jp)
 * Licensed under the MIT License:
 * http://www.opensource.org/licenses/mit-license.php
 *
 * Inspired by yuga.js Copyright (c) 2006 Kyosuke Nakamura (kyosuke.jp)
 *
 * Since:     2007-03-10
 * Modified:  2007-06-11 0.1.2b
 */

/*
 * [使用方法] XHTMLのhead要素内で次のように読み込みます。
 
<script type="text/javascript" src="js/jtalib.js" charset="utf-8"></script>

 */

var loadedImages = [];

var Jtalib = Class.create();

function jsPreloader(path) {
	var imgs = loadedImages;
	var l = imgs.length;
	imgs[l] = new Image();
	imgs[l].src = path;
}

Jtalib.prototype = {
	initialize: function() {
		if (!document.getElementsByTagName) { return; }
		jlSetRolloversToBtnAndMenu();
		jlKillSelfLinkMenu();
		jlAddCssFirstLastChildAsClass();
		jlAddCssEmptyAsClass();
		jlSetScrollToAnchor();
		jlSetExternalLinksToOpenNewWindow();
		// jlAddOddEvenToList();
		// jlAddOddEvenToTable();
		jlAutoLinkPDF();
		jlAutoLightbox();
		jlAutoMailtoStyle();
		jlHighlightByHash();
	},
	uri: {
		dirName: function(uri){
			var ary = uri.split('/');
			ary.pop();
			return ary.join('/');
		},
		path: function (uri){
			return uri.split('#')[0];
		},
		anchorName: function (uri){
			return uri.split('#')[1];
		},
		topDirName: function(uri){
				return "";
		},
		isSelfLink: function(href){
			return ((this.path(href) == this.path(location.href)) || (this.path(href) == this.dirName(location.href)+'/'));
		},
		isSelfPartLink: function(href){
			// return (this.topDirName(href) == this.topDirName(location.href));
			return false;
		}
	}

}

function isJlSelfLink(uri) {
	return ((jlPath(uri) == jlPath(location.href)) || (jlPath(uri) == jlDirName(location.href)+'/'));
}

function jlPath(uri) {
	return uri.split('#')[0];
}

function jlDirName(uri) {
	var ary = uri.split('/');
	ary.pop();
	return ary.join('/');
}

function jlSetRolloversToBtnAndMenu() {
	// メニュー画像にロールオーバーを設定
	// 元画像 menu.gifに対して
	// ロールオーバー: menu_o.gif、マウスダウン: menu_d.gif

	$$('a img.mnu').each( function(mimg) {
		mimg.originalSrc = mimg.src;
		mimg.overSrc = mimg.originalSrc.replace(/(\.gif|\.jpg)/, "_o$1");
		mimg.hitSrc = mimg.originalSrc.replace(/(\.gif|\.jpg)/, "_d$1");
		mimg.selSrc = mimg.originalSrc.replace(/(\.gif|\.jpg)/, "_s$1");
		jsPreloader(mimg.overSrc);
		jsPreloader(mimg.hitSrc);
		var anc = mimg.up();
		anc.image = mimg;
		if(anc.readAttribute('href')){
			anc.setAttribute('title',anc.image.readAttribute('alt'));
			var ahref = anc.href;
			if(isJlSelfLink(ahref)) {
				anc.image.src = anc.image.selSrc;
			} else {
				anc.observe('mouseover', function() {anc.image.src = anc.image.overSrc}.bindAsEventListener(anc));
				anc.observe('mouseout', function() {anc.image.src = anc.image.originalSrc}.bindAsEventListener(anc));
				anc.observe('mousedown', function() {anc.image.src = anc.image.hitSrc}.bindAsEventListener(anc));
				anc.observe('focus', function() {anc.image.src = anc.image.overSrc}.bindAsEventListener(anc));
				anc.observe('blur', function() {anc.image.src = anc.image.originalSrc}.bindAsEventListener(anc));
			}
		}
	});
	$$('a img.tmnu').each( function(mimg) {
		mimg.originalSrc = mimg.src;
		mimg.overSrc = mimg.originalSrc.replace(/(\.gif|\.jpg)/, "_o$1");
		mimg.hitSrc = mimg.originalSrc.replace(/(\.gif|\.jpg)/, "_d$1");
		mimg.selSrc = mimg.originalSrc.replace(/(\.gif|\.jpg)/, "_s$1");
		jsPreloader(mimg.overSrc);
		jsPreloader(mimg.hitSrc);
		var anc = mimg.up();
		anc.image = mimg;
		if(anc.readAttribute('href')){
			anc.setAttribute('title',anc.image.readAttribute('alt'));
			var ahref = anc.href;
			if(isJlSelfLink(ahref)) {
				// anc.image.src = anc.image.selSrc;
			}
			anc.observe('mouseover', function() {anc.image.src = anc.image.overSrc}.bindAsEventListener(anc));
			anc.observe('mouseout', function() {anc.image.src = anc.image.originalSrc}.bindAsEventListener(anc));
			anc.observe('mousedown', function() {anc.image.src = anc.image.hitSrc}.bindAsEventListener(anc));
		}
	});
	$$('a img.btn','input[type="image"]').each( function(mimg) {
		mimg.originalSrc = mimg.src;
		mimg.overSrc = mimg.originalSrc.replace(/(\.gif|\.jpg)/, "_o$1");
		mimg.hitSrc = mimg.originalSrc.replace(/(\.gif|\.jpg)/, "_d$1");
		jsPreloader(mimg.overSrc);
		jsPreloader(mimg.hitSrc);
		var anc = mimg.up();
		anc.image = mimg;
		anc.setAttribute('title',anc.image.readAttribute('alt'));
		anc.observe('mouseover', function() {anc.image.src = anc.image.overSrc}.bindAsEventListener(anc));
		anc.observe('mouseout', function() {anc.image.src = anc.image.originalSrc}.bindAsEventListener(anc));
		anc.observe('mousedown', function() {anc.image.src = anc.image.hitSrc}.bindAsEventListener(anc));
		anc.observe('focus', function() {anc.image.src = anc.image.overSrc}.bindAsEventListener(anc));
		anc.observe('blur', function() {anc.image.src = anc.image.originalSrc}.bindAsEventListener(anc));
	});

}

function jlKillSelfLinkMenu() {
	// 自分のページへ向けたテキストメニューのリンクのスタイルを変更する
	$$('a.mnu').each(function(lnk) {
		var uri = lnk.href;
		if(isJlSelfLink(uri)){
		lnk.addClassName('on');
		lnk.removeClassName('mnu');
		}
	});

function jlSetScrollToAnchor() {
	//ページ内リンクはスムーズスクロール
	$$('a[href^="#"]').invoke( 'observe', 'click', 
		function(event){
			var anc = myJtalib.uri.anchorName(this.readAttribute('href'));
			new Effect.ScrollTo(anc, {offset: -10});
			Event.stop(event);
		}
	);
}
function jlAddCssFirstLastChildAsClass() {
	//:first-child, :last-childをクラスとして追加
	$$(':first-child').each(function(elem) {elem.addClassName('first-child')});
	$$(':last-child').each(function(elem) {elem.addClassName('last-child')});
}

function jlAddCssEmptyAsClass() {
	//css3の:emptyをクラスとして追加
	$$(':empty').each(function(elem) {elem.addClassName('empty')});
}

function jlAddOddEvenToTable() {
	//tableの行にodd / even　を設定
	$$('table.oddeven').each(function(elem) {
		elem.$$('tr:odd').addClassName('even');
		elem.$$('tr:even').addClassName('odd');
		}
	);
}

function jlAddOddEvenToList() {
	//tableの行にodd / even　を設定
	$$('ul.oddeven, ol.oddeven').each(function(elem) {
		elem.$$('li:odd').addClassName('even');
		elem.$$('li:even').addClassName('odd');
		}
	);
}

function jlSetExternalLinksToOpenNewWindow() {
	// rel属性に"external"を設定すると外部リンクとして新しいWindowを開く
	var externallinks = $$('a[rel="external"]');
	externallinks.invoke( 'observe', 'click', 
		function(event){
			window.open(this.readAttribute('href'), '_blank');
			this.addClassName('externallink');
			Event.stop(event);
		}
	);
	externallinks.invoke( 'observe', 'keydown', 
		function(event){
			window.open(this.readAttribute('href'), '_blank');
			this.addClassName('externallink');
			Event.stop(event);
		}
	);
}

function jlAutoLightbox() {
	// jpgへの直リンはLightboxで表示
	$$('a[href$=".jpg"]').each(function(anc) {anc.setAttribute('rel', 'lightbox');});
}

function jlAutoLinkPDF() {
	// PDFへの直リンはpdfターゲットWindowで開く
	var pdflinks = $$('a[href$=".pdf"]');
	pdflinks.invoke( 'observe', 'click', 
		function(event){
			window.open(this.readAttribute('href'), 'pdf');
			this.addClassName('pdflink');
			Event.stop(event);
		}
	);
	pdflinks.invoke( 'observe', 'keydown', 
		function(event){
			window.open(this.readAttribute('href'), 'pdf');
			this.addClassName('pdflink');
			Event.stop(event);
		}
	);
}

function jlAutoMailtoStyle() {
	// mailtoのリンクにスタイルをつける
}

function jlHighlightByHash() {
	s = location.hash;
	if(s)  {
		t = $(s.replace("#",""));
		if(t) {
		t.parentNode.style.backgroundColor = "yellow";
		t.style.color = "blue";
		t.style.fontWeight = "bold";
		}
	}
}

//  ------ start --------
function initJtalib() { myJtalib = new Jtalib(); }
Event.observe(window, 'load', initJtalib, false);
