﻿/*-- イベント関連 --*/
/*- イベントをキャンセルする -*/
function cancelEvent(_evt)
{
	if (window.event)		{ window.event.returnValue = !(window.event.cancelBubble = true); }
	else if (_evt && _evt.preventDefault) { _evt.preventDefault(); _evt.stopPropagation(); }
	return false;
}
/*- イベントをキャンセルする -*/
function cancelBubble(_evt)
{
	if (window.event)		{ window.event.cancelBubble = true; }
	else if (_evt && _evt.stopPropagation) { _evt.stopPropagation(); }
}
/*--- 文字列操作関数群 ---*/
// ---------------------------
// 説明：	指定された文字に一定文字列ごとにトークを挿入します。
// 引数：	_s		対象となる文字列
// 			_n		インターバル
// 			_sT		区切り文字（オプション）
// 			_bl		文字列のカウント方向（オプション）true:右から
// 返り値：	生成された文字列
function InsertToken(_s, _n, _sT, _bl)
{
	_s	= _s.toString();
	var nStart	= _n;
	var nLen	= _s.length;
	if (!nLen) return "";

	if (typeof(_sT) == "undefined" || !_sT.length) _sT = ",";
	if (typeof(_bl) == "undefined" || _bl)
		if ((nStart = nLen % _n) == 0)
			nStart = _n;
	var sRet = _s.substr(0, nStart);
	if (nLen > _n)
	{
		for (var i=1; i*_n < nLen; i++)
		{
			sRet += _sT + _s.substr(nStart, _n);
			nStart += _n;
		}
	}
	return sRet;
}



/*--- その他の関数群 ---*/
// ---------------------------
// 説明：	数値っぽいか確認する。
// 引数：	v		判定する値
function IsInt(_v) { return !(isNaN(ToInt(_v))); }
function ToInt(_v) { return (parseInt(_v) == (_v-0))? parseInt(_v): NaN; }
function IsFloat(_v) { return !(isNaN(ToFloat(_v))); }
function ToFloat(_v) { return (parseFloat(_v) == (_v-0))? parseFloat(_v): NaN; }
// ---------------------------
// 説明：	マウス直下の行に色を付ける。
// 引数：	_eRow		マウス直下の TR エレメント
// 引数：	_nRows		色を変える行数 (_eRow から数える)
// 引数：	_stcStyle	スタイル
function TrackingRow(_eRow, _nRows, _stcStyle)
{
	if (!_eRow) return;
	if (!_nRows) _nRows=1;
	if (!_stcStyle) return;
	var eP=_eRow.parentNode;
	if (eP._oldRow)
	{
		if (eP._oldRow == _eRow) { return; }
		for (var i=0,e=eP._oldRow; (i<_nRows)&&e; i++,e=e.nextSibling)
		{
			Element.setStyle(e, eP._oldStyle[i]);
		}
	}
	eP._oldRow = _eRow;
	eP._oldStyle = [];
	for (var i=0,e=_eRow; (i<_nRows)&&e; i++,e=e.nextSibling)
	{
		var stc = {};
		for (var key in _stcStyle) {
			stc[key] = Element.getStyle(e, key);
		}
		eP._oldStyle.push(stc);
		Element.setStyle(e, _stcStyle);
	}
}
// ---------------------------
// 説明：	アコーデオンの開閉
// 引数：	ターゲットエレメント
function changeAccordion(_e) {
	if (!_e || (_e.tagName != "DT")) return;
	var e=_e.parentNode.firstChild;
	var eOld, eNew=_e.nextSibling;
	var oS;
	do { if (e.tagName != "DT") continue;
		oS=e.nextSibling.style;
		if (oS.display!="none") {
			if (e == _e) return;
			eOld=e.nextSibling;
			oS=e.firstChild.style;
			oS.backgroundColor="";
			oS.color="";
			break;
		}
	} while (e=e.nextSibling);
	oS=_e.firstChild.style;
	oS.backgroundColor="#99f";
	oS.color="#000";
	if (eOld) new Effect.BlindUp(eOld);
	new Effect.BlindDown(eNew);
}
