﻿/* ■■ common.js ■■ */
/* common.jsは汎用関数をまとめたJavaScript集です。
-----------------------------------------------------------------------------
■目次
	01.onLoad向け処理
		01.IEのロールオーバーで起こる背景画像再読み込み問題対応
	02.ページ向け全般
		01.ページトップへするするスクロール(ReturnToTop)
		02.画像ロールオーバー(RollOver)
	03.form制御
		01.初期文字消去(ResetValue)
		02.初期文字挿入(SetValue)
		03.検索初期文字チェック(CheckDefault)
	04.リンク
		01.ポップアップリンク(PopupLink)
----------------------------------------------------------------------------- */

// ■■ 01.onLoad向け処理

// ■□ 01-01.IEのロールオーバーで起こる背景画像再読み込み問題対応
// CSSのa:hoverなどで背景画像の切り替えを行っている際にIEで起こる問題の対応策。
try {
	document.execCommand('BackgroundImageCache', false, true);
} catch(e) {}


// ■■ 02.ページ向け全般

// ■□ 02-01.ページトップへするするスクロール(ReturnToTop)
// ページの先頭、引数を入れた場合は引数のIDの場所へなめらか動作でスクロールする関数。
// 使用例）
// <a href="#Header" onclick="ReturnToTop(); return false;">ページTOPへ</a>
// <a href="#Main" onclick="ReturnToTop('Main'); return false;">ページ本文へ</a>
function ReturnToTop(pos,now) {
	var x1 = x2 = x3 = 0;
	var y1 = y2 = y3 = y4 = 0;
	if (document.documentElement) {
		x1 = document.documentElement.scrollLeft || 0;
		y1 = document.documentElement.scrollTop || 0;
	}
	if (document.body) {
		x2 = document.body.scrollLeft || 0;
		y2 = document.body.scrollTop || 0;
	}
	x3 = window.scrollX || 0;
	y3 = window.scrollY || 0;
	var x = Math.max(x1, Math.max(x2, x3));
	var y = Math.max(y1, Math.max(y2, y3));
	if (!pos) {
		//ページトップへ
		window.scrollTo(Math.floor(x / 1.25), Math.floor(y / 1.25));
		if (x > 0 || y > 0) {
			window.setTimeout("ReturnToTop()", 25);
		}
	} else {
		//引数に入れたid名の場所へ(y軸限定)
		if (window.opera) {
			//でもOpera9未満は除外
			var usrAge = navigator.userAgent;
			var posStart = usrAge.indexOf("Opera",0);
			var posEnd = usrAge.indexOf(" ",posStart+6);
			if (posEnd <= 0) posEnd = usrAge.length;
			var AgeVer = usrAge.substring(posStart+6,posEnd);
			if (AgeVer < 9) {
				window.open("#"+pos,"_self")
				return false;
			}
		}
		var isMSIE = /*@cc_on!@*/false;
		var targetEle = document.getElementById(pos);

		while( targetEle ){
			y4 += targetEle.offsetTop;
			targetEle = targetEle.offsetParent;
			//IEの補正：上記計算で無視されてしまう各親要素のborder幅を加算
			if ((targetEle) && (isMSIE)) {
				y4 += (parseInt(getElementStyle(targetEle,"borderTopWidth","border-top-width")) || 0);
			}
		}

		var y5 = y4-y;
		y += Math.floor(y5 / 5);
		window.scrollTo(x, y);
		if ((!now || now != y)&&(y > y4-5 || y < y4-5)) {
			window.setTimeout('ReturnToTop("'+pos+'","'+y+'")', 25);
		}
	}
}
function getElementStyle(targetElm,IEStyleProp,CSSStyleProp) {
	var elem = targetElm;
	if (elem.currentStyle) {
		return elem.currentStyle[IEStyleProp];
	} else if (window.getComputedStyle) {
		var compStyle = window.getComputedStyle(elem,"");
		return compStyle.getPropertyValue(CSSStyleProp);
	}
}

// ■□ 02-02.画像ロールオーバー(RollOver)
// Standards Compliant Rollover Script
// Author : Daniel Nolan
// http://www.bleedingego.co.uk/webdev.php
//
// 使用例）
// imgタグに.rolloverを指定すると、ファイル名の末尾に
// _roとついた画像に自動ロールオーバー。
function RollOver() {
	if (!document.getElementById) return
	
	var aPreLoad = new Array();
	var sTempSrc;
	var aImages = document.getElementsByTagName('img');

	for (var i = 0; i < aImages.length; i++) {
		if (aImages[i].className == 'rollover') {
			var src = aImages[i].getAttribute('src');
			var ftype = src.substring(src.lastIndexOf('.'), src.length);
			var hsrc = src.replace(ftype, '_ro'+ftype);

			aImages[i].setAttribute('hsrc', hsrc);
			
			aPreLoad[i] = new Image();
			aPreLoad[i].src = hsrc;
			
			aImages[i].onmouseover = function() {
				sTempSrc = this.getAttribute('src');
				this.setAttribute('src', this.getAttribute('hsrc'));
			}
			
			aImages[i].onmouseout = function() {
				if (!sTempSrc) sTempSrc = this.getAttribute('src').replace('_ro'+ftype, ftype);
				this.setAttribute('src', sTempSrc);
			}
		}
	}
}


// ■■ 03.form制御

// ■□ 03-01.初期文字消去(ResetValue)
// デフォルトで入力していたvalueを消去する。
// 使用例）
// <input type="text" value="初期文字" onfocus="ResetValue(this,'初期文字')" />
function ResetValue(pos,dflt){
	if(pos.value == dflt){
		pos.value = "";
		pos.style.color = "#000000";
	}
}

// ■□ 03-02.初期文字挿入(SetValue)
// 空だった場合、デフォルトで入力していたvalueへ戻す。
// 使用例）
// <input type="text" value="初期文字" onblur="SetValue(this,'初期文字')" />
function SetValue(pos,dflt){
	if(pos.value == ''){
		pos.value = dflt;
		pos.style.color = "#999999";
	}
}

// ■□ 03-03.検索初期文字チェック(CheckDefault)
// form送信前に、デフォルトで入力していたvalueだった場合に動作キャンセルをする。
// 使用例）
// <form onsubmit="return CheckDefault('使用したいinputのid','初期文字');">
function CheckDefault(pos,dflt){
	if(document.getElementById(pos).value == dflt || document.getElementById(pos).value == ""){
		document.getElementById(pos).value = "";
		document.getElementById(pos).select() ; return false;
	}
}


// ■■ 04.リンク

// ■□ 04-01.ポップアップリンク(PopupLink)
// HTML（aタグ）ではなくJSで別ウィンドウを開く。リンク数を減らしたい場合に使用。
// 使用例）
// <img alt="別ウィンドウで開く" src="/img/button_blank.gif" onclick="PopupLink('http://example.com/','width=400,height=300');" />
function PopupLink(url,option) {
	// url = 開くURL（必須）
	// option = ウィンドウを開く際のウィンドウ幅や高さなどのオプション指定項目
	if(option){
		window.open(url,"_blank",option);
	}else{
		window.open(url,"_blank");
	}
}
