/* #############################################################
##  Created by Minako Uchikoshi.
##  E-mail: info@3-7-5.jp
##  Copyright (C) 2009 Minako Uchikoshi. All Rights Reserved.
############################################################## */

/* **************************************************************
	for All Documents
************************************************************** */

/* ==============================================================
	ロールオーバー
-----------------------------------------------------------------
条件：元画像とオーバー画像は同じディレクトリに置き、
　　　画像ファイル名を以下とする。
　　　元画像「○○○_ot.拡張子」オーバー画像「○○○_ov.拡張子」
============================================================== */
new function() {

/* メイン処理
---------------------------------------- */
	function mnkFadeRollover() {
		if(!document.images) {return;}
		
		var imgs = document.images;
		var insert = [];
		
		for(var i=0; i<imgs.length; i++) {
			var splitname = imgs[i].src.split('_ot.');
			
			if((splitname[1]) && (imgs[i].parentNode.tagName=='A' || imgs[i].parentNode.tagName=='BUTTON')) {
				var rolloverImg = document.createElement('img');
				rolloverImg.src = splitname[0] + '_ov.' + splitname[1];
				var alpha = 0;

				rolloverImg.currentAlpha = alpha;
				rolloverImg.style.opacity = alpha/100;
				rolloverImg.style.filter = 'alpha(opacity=' + alpha + ')';
				rolloverImg.style.position = 'absolute';

				// オーバー・アウト処理それぞれを設定
				var parent = imgs[i].parentNode;
				parent.rolloverImg = rolloverImg;

				addEvent(parent, 'mouseover', function() {setFader(this.rolloverImg, 100);});
				addEvent(parent, 'focus', function() {setFader(this.rolloverImg, 100);});
				addEvent(parent, 'mouseout' ,function() {setFader(this.rolloverImg, 0);});
				addEvent(parent, 'blur' ,function() {setFader(this.rolloverImg, 0);});

				// 後で追加するために追加場所と共に保存しておく
				// この時点で追加するとdocument.imagesが書き換わって不都合
				insert[insert.length] = {position:imgs[i], element:rolloverImg};
			}
		}
		
		// ↑で作ったロールオーバー画像を追加
		for(var i=0; i<insert.length; i++) {
			var parent = insert[i].position.parentNode;
			
			parent.insertBefore(insert[i].element, insert[i].position);
		}
	}

/* 指定要素を指定透明度にするフェードアニメを設定
---------------------------------------- */
	function setFader(targetObj, targetAlpha) {
		targetObj.targetAlpha = targetAlpha;
		
		if(targetObj.currentAlpha==undefined) {
			targetObj.currentAlpha = 100;
		}
		if(targetObj.currentAlpha == targetObj.targetAlpha) {
			return;
		}
		if(!targetObj.fading) {
			if(!targetObj.fader) {
				targetObj.fader = fader;
			}
			targetObj.fading = true;
			targetObj.fader();
		}
	}

/* アルファ値をターゲット値に近づける。ターゲット値になったら終了
---------------------------------------- */
	function fader() {
		this.currentAlpha += (this.targetAlpha - this.currentAlpha) * 0.2;
		
		if(Math.abs(this.currentAlpha-this.targetAlpha) < 1) {
			this.currentAlpha = this.targetAlpha;
			this.fading = false;
		}
		
		var alpha = parseInt(this.currentAlpha);
		this.style.opacity = alpha/100;
		this.style.filter = 'alpha(opacity=' + alpha + ')';
		
		if(this.fading) {
			var scope = this;
			setTimeout(function() {fader.apply(scope)}, 30);
		}
	}

/* イベント実行
---------------------------------------- */
	function addEvent(eventTarget, eventName, func) {
		if(eventTarget.addEventListener){
			eventTarget.addEventListener(eventName, func, false);
		}
		else if(window.attachEvent) {
			eventTarget.attachEvent('on'+eventName, function() {func.apply(eventTarget);});
		}
	}

	addEvent(window, 'load', mnkFadeRollover);
}


/* ==============================================================
	別ウィンドウで開く
-----------------------------------------------------------------
条件：別ウィンドウで開くaタグのclass属性をblankとする。
============================================================== */
function mnkBlankWin() {
	var lnks = document.links;

	for(var i=0; i<lnks.length; i++) {
		if(lnks[i].className.match('blank')) {
			lnks[i].onclick = function() {
				w = window.open(this.href, '');
				w.focus();
				return false;
			};
		}
	}
}

/* イベント設定実行
---------------------------------------- */
if(window.addEventListener) {
	window.addEventListener('load', mnkBlankWin, false);
}
else if(window.attachEvent) {
	window.attachEvent('onload' , mnkBlankWin);
}


/* ==============================================================
	”NEW”マークを表示
-----------------------------------------------------------------
条件：マークを表示する場所に、spanタグを記述。
　　　class属性をmnkNewMark、内容を更新日 (yyyy-mm-dd) とする。
============================================================== */
function mnkNewMark() {
	if(!document.getElementsByTagName('span')) return;
	
	var spans = document.getElementsByTagName('span');

	for(var i=0; i<spans.length; i++) {
		if(spans[i].className.match('newMark')) {
			var upDates = spans[i].innerHTML.split('-');
			
			var year = parseInt(upDates[0],10);
			var mon = parseInt(upDates[1],10);
			var date = parseInt(upDates[2],10);
			
			var baseDate = new Date(year, mon-1, date);
			var today = new Date();
			
			var period = (today - baseDate) / (1000*60*60*24);
			
			if (period <= mnkNewMarkLimit) { //表示日数を指定
				if (mnkNewMarkIsImage) { // 画像の場合
					spans[i].innerHTML = '<img class="' + mnkNewMarkImageClass + '" title="' + mnkNewMarkLabel + '" alt="' + mnkNewMarkLabel + '" src="' + mnkNewMarkImage + '" width="' + mnkNewMarkWidth + '" height="' + mnkNewMarkHeight + '" />';
				}
				else { // テキストの場合
					spans[i].innerHTML = mnkNewMarkLabel;
				}
				
				spans[i].style.display = 'inline';
			}
		}
	}
}


/* イベント実行
---------------------------------------- */
if(window.addEventListener) {
	window.addEventListener("load", mnkNewMark, false);
}
else if(window.attachEvent) {
	window.attachEvent("onload", mnkNewMark);
}
