<!--

//
// JavaScript 標準関数群
//
// ※IEのみの対応
//


/****************************************************************************
 * Name			:GetStyle													*
 * Description	:レイヤーのスタイルを取得する関数							*
 * Return value	:レイヤーのスタイル											*
 * Argument:																*
 *   id			:レイヤーid													*
 ****************************************************************************/
function GetStyle(id)
{
	return document.all(id).style;
}


/****************************************************************************
 * Name			:ShowLayer													*
 * Description	:レイヤーの表示を切り替える関数								*
 * Return value	:															*
 * Argument:																*
 *   id			:レイヤーid													*
 *   flag		:表示，非表示のフラグ										*
 *				 （0:非表示, 1:表示, -1:現在と逆の表示）					*
 ****************************************************************************/
function ShowLayer(id, flag)
{
	var s = GetStyle(id);

	if(flag < 0){
		if(s.visibility == "visible"){
			s.visibility = "hidden";
			s.display    = "none";
		}
		else{
			s.visibility = "visible";
			s.display    = "";
		}
	}
	else if(flag > 0){
		s.visibility = "visible";
		s.display    = "";
	}
	else{
		s.visibility = "hidden";
		s.display    = "none";
	}
}


/****************************************************************************
 * Name			:SetText													*
 * Description	:id要素の文字列を設定する関数								*
 * Return value	:															*
 * Argument:																*
 *   id			:レイヤーid													*
 *   str		:文字列														*
 ****************************************************************************/
function SetText(id, str)
{
	document.all(id).innerHTML = str;
}


/****************************************************************************
 * Name			:GetText													*
 * Description	:id要素の文字列を設定する関数								*
 * Return value	:id要素の文字列												*
 * Argument:																*
 *   id			:レイヤーid													*
 ****************************************************************************/
function GetText(id)
{
	return document.all(id).innerHTML;
}


/****************************************************************************
 * Name			:Date2String												*
 * Description	:時刻シリアル値を指定された書式で出力する関数				*
 * Return value	:変換された文字列											*
 * Argument:																*
 *   seri		:時刻シリアル値												*
 *   format		:書式														*
 ****************************************************************************/
function Date2String(seri, format)
{
	var d = new Date();

	if(seri == 0){
		format = format.replace("YYYY", "----");
		format = format.replace("YY",   "--");
		format = format.replace("ggge", "--");

		format = format.replace("MMM", "--");
		format = format.replace("DDD", "--");
		format = format.replace("hhh", "--");
		format = format.replace("mmm", "--");
		format = format.replace("sss", "--");

		format = format.replace("MM", "--");
		format = format.replace("DD", "--");
		format = format.replace("hh", "--");
		format = format.replace("mm", "--");
		format = format.replace("ss", "--");

		format = format.replace("M", "-");
		format = format.replace("D", "-");
		format = format.replace("h", "-");
		format = format.replace("m", "-");
		format = format.replace("s", "-");
	}
	else{
		d.setTime(seri);

		dy1 = ((d.getYear() < 1900) ? (d.getYear() + 1900) : d.getYear());
		dy2 = ((dy1%100 < 10) ? "0" : "") + (dy1%100);
		dy3 = "";
		dm1 = d.getMonth() + 1;
		dm2 = ((dm1 < 10) ? "0" : "") + dm1;
		dm3 = ((dm1 < 10) ? "&nbpp;" : "") + dm1;
		dd1 = d.getDate();
		dd2 = ((dd1 < 10) ? "0" : "") + dd1;
		dd3 = ((dd1 < 10) ? "&nbpp;" : "") + dd1;
		th1 = d.getHours();
		th2 = ((th1 < 10) ? "0" : "") + th1;
		th3 = ((th1 < 10) ? "&nbpp;" : "") + th1;
		tm1 = d.getMinutes();
		tm2 = ((tm1 < 10) ? "0" : "") + tm1;
		tm3 = ((tm1 < 10) ? "&nbpp;" : "") + tm1;
		ts1 = d.getSeconds();
		ts2 = ((ts1 < 10) ? "0" : "") + ts1;
		ts3 = ((ts1 < 10) ? "&nbpp;" : "") + ts1;

		// 和暦
		if(dy1 < 1868){			dy3 = "";					}
		else if(dy1 <= 1912){	dy3 = "明治" + (dy1-1867);	}
		else if(dy1 <= 1926){	dy3 = "大正" + (dy1-1911);	}
		else if(dy1 <= 1989){	dy3 = "昭和" + (dy1-1925);	}
		else{					dy3 = "平成" + (dy1-1988);	}

		format = format.replace("YYYY", dy1);
		format = format.replace("YY", dy2);
		format = format.replace("ggge", dy3);

		format = format.replace("MMM", dm3);
		format = format.replace("DDD", dd3);
		format = format.replace("hhh", th3);
		format = format.replace("mmm", tm3);
		format = format.replace("sss", ts3);

		format = format.replace("MM", dm2);
		format = format.replace("DD", dd2);
		format = format.replace("hh", th2);
		format = format.replace("mm", tm2);
		format = format.replace("ss", ts2);

		format = format.replace("M", dm1);
		format = format.replace("D", dd1);
		format = format.replace("h", th1);
		format = format.replace("m", tm1);
		format = format.replace("s", ts1);
	}

	// &nbsp; の s が秒とかぶるため &nbpp; としていたものを戻す
	format = format.replace(/&nbpp;/g, "&nbsp;");

	return format;
}


/****************************************************************************
 * Name			:itoad														*
 * Description	:数値を３桁カンマ区切りした文字列に変換する関数				*
 * Return value	:変換された文字列											*
 * Argument:																*
 *   val		:変換する数値												*
 ****************************************************************************/
function itoad(val)
{
	var i;
	var str = "";
	var minus = 0;
	if(val == 0)
		return "0";

	if(val < 0){
		minus = 1;
		val = -val;
	}

	for(i = 0; val > 0; i++){
		str = (val%10) + str;
		val = Math.floor(val/10);
		if((val > 0) && ((i%3) == 2))
			str = "," + str;
	}

	if(minus)
		str = "-" + str;

	return str;
}


/****************************************************************************
 * Name			:dec2hex													*
 * Description	:10進数(数値)を16進数(文字列)に変換する関数					*
 * Return value	:変換された文字列											*
 * Argument:																*
 *   val		:変換する数値												*
 *   digit		:桁数														*
 *   upr_flag	:アルファベットを大文字化フラグ (0以外で大文字に変換)		*
 *   cmp_flag	:補数の使用フラグ (0以外で2の補数を使用、0で"-"記号を使用)	*
 ****************************************************************************/
function dec2hex(val, digit, upr_flag, cmp_flag)
{
	var i;
	var str = "";

	//+++++ 2の補数を求める +++++//
	if(cmp_flag){
		if(val < 0)
			val = Math.pow(2, 4*digit) + val;
	}

	//+++++ 変換 +++++//
	str = val.toString(16);
	if(upr_flag)
		str = str.toUpperCase();

	//+++++ 桁調整 +++++//
	while(str.length < digit)
		str = "0" + str;
	if(!cmp_flag){
		if(val < 0)
			str = "-0x" + str.substr(1, str.length-1);
		else
			str = "0x" + str;
	}
	else
		str = "0x" + str;
	return str;
}


/****************************************************************************
 * Name			:StripTags													*
 * Description	:文字列中のタグを除去する関数								*
 *               （"<"から">"までを単純に除去している）						*
 * Return value	:タグの除去された文字列										*
 * Argument:																*
 *   strsrc		:タグを除去する文字列										*
 ****************************************************************************/
 function StripTags(strsrc)
{
	var i;
	var imax = strsrc.length;
	var strdst = "";

	for(i = 0; i < imax; i++){
		if(strsrc.charAt(i) == "<"){
			i++;

			if(i < imax){
				if(strsrc.charAt(i) != ">"){
					for(; i < imax; i++){
						if(strsrc.charAt(i) == ">")
							break;
					}
				}
				else{		// "<>"はタグとみなさない
					strdst = strdst + strsrc.charAt(i-1);
					strdst = strdst + strsrc.charAt(i);
				}
			}
		}
		else
			strdst = strdst + strsrc.charAt(i);
	}

	return strdst;
}


/****************************************************************************
 * Name			:ReplaceAll													*
 * Description	:全置換する関数												*
 * Return value	:置換された文字列											*
 * Argument:																*
 *   string		:置換する文字列												*
 *   old_str	:元の文字列（検索する文字列）								*
 *   new_str	:新しい文字列（検索する文字列）								*
 ****************************************************************************/
function ReplaceAll(string, old_str, new_str)
{
	var arytmp = string.split(old_str);
	return arytmp.join(new_str);
}


/****************************************************************************
 * Name			:ScrollToEnd												*
 * Description	:スクロールのある要素のスクロール位置を下端に設定する関数	*
 * Return value	:															*
 * Argument:																*
 *   id			:設定するレイヤーのID										*
 ****************************************************************************/
function ScrollToEnd(id)
{
	document.all(id).scrollTop = document.all(id).scrollHeight;
}


/****************************************************************************
 * Name			:ScrollToAnchor												*
 * Description	:指定アンカーまでスクロールする関数							*
 * Return value	:															*
 * Argument:																*
 *   id			:移動するアンカーのあるID									*
 ****************************************************************************/
function ScrollToAnchor(id)
{
	scrollTo(0, document.getElementById(id).offsetTop);
}


/****************************************************************************
 * Name			:strcmp														*
 * Description	:文字列を比較する関数										*
 * Return value	:str1がstr2より大きい場合は1、str1がstr2より小さい場合は-1、*
 *				 等しい場合は0を返す										*
 * Argument:																*
 *   str1		:比較文字列１												*
 *   str2		:比較文字列２												*
 ****************************************************************************/
function strcmp(str1, str2)
{
	if(str1 > str2)
		return 1;
	else if(str1 < str2)
		return -1;

	return 0;
}


/****************************************************************************
 * Name			:CopyArrayTo												*
 * Description	:配列をコピーする関数										*
 * Return value	:コピーされた配列											*
 * Argument:																*
 *   src		:コピー元配列												*
 ****************************************************************************/
function CopyArrayTo(src)
{
	var dst = new Array;
	var p;
    for(p in src)
		dst[p] = src[p];

	return dst;
}


/****************************************************************************
 * Name			:ShuffleArray												*
 * Description	:Fisher-Yatesアルゴリズムを使って配列をシャッフルする関数	*
 * Return value	:シャッフルされた（ランダムに並び替えられた）配列			*
 * Argument:																*
 *   src		:シャッフルする（ランダムに並び替える）配列					*
 ****************************************************************************/
function ShuffleArray(ary)
{
	var i = ary.length;

	while(--i){
		var j = Math.floor(Math.random() * (i + 1));
		if (i == j) continue;
		var k = ary[i];
		ary[i] = ary[j];
		ary[j] = k;
	}

	return ary;
}


/****************************************************************************
 * Name			:MoveTo														*
 * Description	:idで指定されたブロックを徐々に移動する関数					*
 * Return value	:															*
 * Argument:																*
 *   id			:移動するブロックのID										*
 *   tim		:更新時間 (msec)											*
 *   trg_x		:移動目標位置のx座標										*
 *   trg_y		:移動目標位置のy座標										*
 *   spd_x		:x方向移動係数												*
 *				 mode=MT_AS :移動ピクセル数 (spd_x>=1)						*
 *				 mode=MT_GS :移動割合 (spd_x<1)								*
 *   spd_y		:y方向移動係数												*
 *   mode		:移動方法													*
 *				 mode=MT_AS :等差移動 (arithmetical series  等差級数)		*
 *				 mode=MT_GS :等比移動 (geometric(al) series 等比級数)		*
 ****************************************************************************/
var MT_AS = 0;
var MT_GS = 1;
function MoveTo(id, tim, trg_x, trg_y, spd_x, spd_y, mode)
{
	var style = GetStyle(id);
	var x = parseInt(style.left);
	var y = parseInt(style.top);

	if(mode == undefined)
		mode = MT_AS;

	switch(mode){
	case MT_GS:
		if(spd_x == undefined)		spd_x = 0.5;
		if(spd_y == undefined)		spd_y = 0.5;
		x = x + Math.floor((trg_x - x) * spd_x);
		y = y + Math.floor((trg_y - y) * spd_y);
		break;

	default:
		if(spd_x == undefined)		spd_x = 1;
		if(spd_y == undefined)		spd_y = 1;
		if(x < trg_x){
			if((x+spd_x) >= trg_x)
				x = trg_x;
			else
				x = x + spd_x;
		}
		else{
			if((x-spd_x) <= trg_x)
				x = trg_x;
			else
				x = x - spd_x;
		}
		if(y < trg_y){
			if((y+spd_y) >= trg_y)
				y = trg_y;
			else
				y = y + spd_y;
		}
		else{
			if((y-spd_y) <= trg_y)
				y = trg_y;
			else
				y = y - spd_y;
		}
		break;
	}

	style.left = x + "px";
	style.top  = y + "px";

	if((x != trg_x) || (y != trg_y))
		setTimeout("MoveTo('"+id+"',"+tim+","+trg_x+","+trg_y+","+spd_x+","+spd_y+","+mode+")", tim);
}


/****************************************************************************
 * Name			:SetPos														*
 * Description	:idで指定されたブロックの位置を設定する関数					*
 * Return value	:															*
 * Argument:																*
 *   id			:位置を変更するブロックのID									*
 *   x			:x座標														*
 *   y			:y座標														*
 ****************************************************************************/
function SetPos(id, x, y)
{
	var style = GetStyle(id);
	style.left = x + "px";
	style.top  = y + "px";
}


/****************************************************************************
 * Name			:ReadParse													*
 * Description	:URLの後ろに付加された値を配列化する関数					*
 * Return value	:キーと値の配列												*
 * Argument:																*
 ****************************************************************************/
function ReadParse()
{
	var i, p;
	var key = "";
	var val = "";
	var arg = location.search.substr(1,9999);
	var ary = arg.split("&");
	var argc = 0;
	var argv = new Array();

	if(location.href.lastIndexOf("?") != -1){
		for(i = 0; i < ary.length; i++){
			if((p=ary[i].indexOf("=")) != -1){
				key = ary[i].substring(0, p);
				val = ary[i].substring(p+1, ary[i].length);

				if(key != ""){
					argc = argv.length;
					argv[argc] = new Object();
					argv[argc].key = key;
					argv[argc].val = val;
				}
			}
		}
	}

	return argv;
}

//-->
