﻿//■announcement(お知らせ機能)用Ajax

// 指定されたJSON・Xmlのファイルから取得した
// データを保持する変数
var org_data;
// 新着情報の判定基準フラグ(true：個数/false：日付)
var nFlg = true;
// 新着情報の個数基準値
var NumNew = 5;
// 新着情報の日付基準値(現在の日時から何日前までかを指定する)
var DayNew = 0;
// 新着情報アイコンを表示するかしないかの切替フラグ
var NewIconFlg = true;
// Newアイコンが表示される上限日付(現在の日時から何日前までかを指定する)
var NewIconLimit = -30;

// お知らせアイコンの親カテゴリ(news_type)/子カテゴリ(sub_type)の切替フラグ
// true：親カテゴリ(news_type)/false：子カテゴリ(sub_type)
var aFlg = false;
// IR資料アイコンの親カテゴリ(news_type)/子カテゴリ(sub_type)の切替フラグ
// true：親カテゴリ(news_type)/false：子カテゴリ(sub_type)
var iFlg = false;
// 短信・適時開示アイコンの親カテゴリ(news_type)/子カテゴリ(sub_type)の切替フラグ
// true：親カテゴリ(news_type)/false：子カテゴリ(sub_type)
var pFlg = true;
// 有報アイコンの親カテゴリ(news_type)/子カテゴリ(sub_type)の切替フラグ
// true：親カテゴリ(news_type)/false：子カテゴリ(sub_type)
var yFlg = true;

//------------------------------
// JSON/Xmlから取得したデータを表示するメインAPI
//------------------------------
function drawDataArea(data) {
	// データ表示箇所のルートElementを取得する
	var elmDiv = document.getElementById('divDataArea');
//	if (null == elmDiv) {
//		elmDiv = document.createElement('div');
//		elmDiv.id = 'divDataArea';
//		document.body.appendChild(elmDiv);
//	}

	if (true == elmDiv.hasChildNodes()) {
		for (var i in elmDiv.childNodes) {
			if (null != elmDiv.childNodes[i].nodeName && undefined != elmDiv.childNodes[i].nodeName) {
				if (elmDiv.childNodes[i].nodeName.toUpperCase() == 'dl'.toUpperCase()) {
					elmDiv.removeChild(elmDiv.childNodes[i]);
					break;
				}
			}
		}
	}
	var elmDl = document.createElement('dl');
	elmDiv.appendChild(elmDl);

	var total = 0;

	// 各表示項目をループして表示/非表示を切り替える
	for (var i in data.item) {
		// 対象の項目が新着情報に該当するかどうか判定する
		// ※新着かどうかの判定に使う基準値は
		//   ファイル上部の定数に定義してあるので、
		//   そこの値を編集して表示を調節して下さい。
		var IsNew = IsNewItem(i, data.item[i]);
			if (IsNew) {
				createData(elmDl, data.item[i], IsNew);
				total += 1;
			}
	}

	// データが１件も存在しない場合
	if (total == 0) {
		elmDl.appendChild(document.createTextNode('データが存在しません'));
	}
}
//------------------------------
// 各表示項目が新着情報に該当するかどうかを判定する
// 【パラメータ】
// i：各表示項目のIndex番号
// item：JSON/Xmlデータの各項目(item)
//------------------------------
function IsNewItem(i, item) {
	// nFlgがtrueの場合は個数で新着情報かを判定し、
	// falseの場合は基準日で新着情報かを判定する
	// ※ファイル上部の定数で定義しているので
	//   その値を切り替えて調整して下さい
	if (nFlg) {
		// 個数で新着情報を判定する
		if (i < NumNew) {
			return true;
		}
	} else {
		// 日付で新着情報を判定する

		// 各表示項目のdateの値をyyyyMMddにフォーマット
		var fDate = GetFormatDate(item.date);
		// 新着かどうか判定するための基準日を取得する
		var cDate = GetComputeDate(DayNew);

		if (fDate != null) {
			// 各表示項目のdateの値と新着の基準日と比較して
			// 新しければ新着とみなす
			if (fDate >= cDate) {
				return true;
			}
		}
	}

	// ここを通る場合は、必ず新着情報ではない
	return false;
}
//------------------------------
// 年月日と加算日からn日後、n日前を求める関数
//------------------------------
function GetComputeDate(DaySpan) {
	myD = new Date();
	myD = new Date(myD.getFullYear(), myD.getMonth(), myD.getDate() + DaySpan);

	myYear = myD.getFullYear();
	myMonth = myD.getMonth() + 1;
	myDate = myD.getDate();

	return myYear.toString() + formatNum(2, myMonth) + formatNum(2, myDate);
}
//------------------------------
// 各表示項目のdateの値(yyyy/MM/dd hh:mm:ss)を
// yyyyMMddにフォーマットして返す関数
// (本当はもっと良いやり方があるが、時間がないので…)
//------------------------------
function GetFormatDate(date) {
	return date.substr(0, 4) + date.substr(5, 2) + date.substr(8, 2);
}
//------------------------------
// 表示桁数のフォーマット関数
//------------------------------
function formatNum(keta, num) {
	var src = new String(num);
	var cnt = keta - src.length;
	if (cnt <= 0) return src;
	while (cnt-- > 0) src = "0" + src; return src;
}



//------------------------------
// JSON/Xmlから取得したデータの各項目を表示させる関数
// 表示データ作成(１データ毎)
// 【パラメータ】
// element：
// item：JSON/Xmlデータの各項目(item)
// IsNew：新着の項目かどうか
// ItemInd：各項目のIndex
//------------------------------
function createData(element, item, IsNew) {
	// <dt>要素を新規に作成する
	var elmDt = document.createElement('dt');
	var divTxt = document.createElement('div');
	divTxt.id = 'divtxt';
	divTxt.appendChild(document.createTextNode('[' + item.format_date + ']'));	




	// 作成した<dt>要素に各表示項目の「format_date」の値を追加する
	elmDt.appendChild(divTxt);

	// カテゴリの<img>要素を新規に作成する
	var elmImg = document.createElement('img');
	// 作成した<img>要素のsrc属性の設定を行う
	elmImg.setAttribute('src', GetCategoryIconUrl(item));
	// 作成した<img>要素のalign属性の設定を行う
	elmImg.setAttribute('align', 'absmiddle');

	var divImg = document.createElement('div');
	divImg.id = 'divimg';
	divImg.appendChild(elmImg);



	// 作成した<dt>要素に<img>要素を追加する
	elmDt.appendChild(divImg);	
	// パラメータで渡されてきた<dl>要素に<dt>要素を追加する
	element.appendChild(elmDt);

	// <dd>要素を新規に作成する
	var elmDd = document.createElement('dd');

	// 各表示項目の「link」の値が設定されている場合は
	// <dd>要素に<a>要素を追加する
	// 「link」が設定されていない場合は
	// <dd>要素に各表示項目の「title」の値のみを追加する
	if (item.link.length > 0) {
		// <a>要素を新規に作成する
		var elmA = document.createElement('a');
		// 作成した<a>要素のhref属性に
		// 各表示項目の「link」の値を設定する
		elmA.href = item.link;
		// 作成した<a>要素のtarget属性に
		// 各表示項目の「new_target」の値を設定する
		elmA.target = item.new_target;
		// 作成した<a>要素のtarget属性に
		// 各表示項目の「title」の値を追加する
		elmA.appendChild(document.createTextNode(item.title));
		// <dd>要素に<a>要素を追加する
		elmDd.appendChild(elmA);
	} else {
		// <dd>要素に各表示項目の「title」の値を追加する
		elmDd.appendChild(document.createTextNode(item.title));
	}

	// ファイルタイプの<img>要素を新規に作成する
	var elmImg2 = document.createElement('img');
	// 作成した<img>要素のsrc属性を設定する
	elmImg2.setAttribute('src', 'ir/parts/img/filetype_icon/' + item.type + '.png');
	// 作成した<img>要素のalign属性を設定する
	elmImg2.setAttribute('align', 'absmiddle');
	// <dd>要素に<img>要素を追加する
	elmDd.appendChild(elmImg2);

	// <dd>要素にファイルサイズのテキスト要素を追加する
	if (item.file_size.length > 0) {
		elmDd.appendChild(document.createTextNode('（' + item.file_size + 'KB）'));
	}


	// 新着項目の場合は新着アイコンを追加する
	var fDate = GetFormatDate(item.date);
	if (NewIconFlg && fDate >= GetComputeDate(NewIconLimit)) {
		// 新着アイコン用の<img>要素を新規に作成する
		var elmImg3 = document.createElement('img');
		// 作成した<img>要素のsrc属性を設定する
		elmImg3.setAttribute('src', 'ir/parts/img/new_icon.png');
		// 作成した<img>要素のalign属性を設定する
		elmImg3.setAttribute('align', 'absmiddle');
		// <dd>要素に<img>要素を追加する
		elmDd.appendChild(elmImg3);
	}


	// コメントあり
	if (item.comment.length > 0) {
		var elmDiv = document.createElement('div');
		elmDiv.appendChild(document.createTextNode(item.comment));
		elmDd.appendChild(elmDiv);
	}

	element.appendChild(elmDd);
}

function GetItemCategory(item) {
	var nType = item.news_type;

	// お知らせの判別
	if (nType.indexOf("announcement") > -1) {
		return "announcement";
	}

	// IR書類の判別
	if (nType.indexOf("ir_material") > -1) {
		return "ir_material";
	}

	// 短信系書類の判別
	if (nType.indexOf("tanshin") > -1 || nType.indexOf("pr") > -1 || nType.indexOf("press") > -1) {
		return "press";
	}

	// 有報の判別
	if (nType.indexOf("yuho") > -1) {
		return "yuho";
	}

	return "";
}

//------------------------------
// 各カテゴリのカテゴリアイコンURLを取得する
//------------------------------
function GetCategoryIconUrl(item) {
	var cat = GetItemCategory(item);

	if (cat != null && cat != "") {
		switch (cat) {
			case "announcement":
				if (aFlg == true) {
					return 'ir/parts/img/category_icon/' + item.news_type + '.gif';
				} else {
					return 'ir/parts/img/category_icon/' + item.sub_type + '.gif';
				}
			case "ir_material":
				if (iFlg == true) {
					return 'ir/parts/img/category_icon/' + item.news_type + '.gif';
				} else {
					return 'ir/parts/img/category_icon/' + item.sub_type + '.gif';
				}
			case "press":
				if (pFlg == true) {
					return 'ir/parts/img/category_icon/' + item.news_type + '.gif';
				} else {
					return 'ir/parts/img/category_icon/' + item.sub_type + '.gif';
				}
			case "yuho":
				if (yFlg == true) {
					return 'ir/parts/img/category_icon/' + item.news_type + '.gif';
				} else {
					return 'ir/parts/img/category_icon/' + item.sub_type + '.gif';
				}
		}
	}


	return "";
}



//------------------------------
// 【クロスブラウザ対応】
// 各ブラウザによって、
// 年度選択DropDownListへのイベントの追加方法が違うため、
// それをカバーするサポート関数
// 【パラメータ】
// Target：イベントの追加対象になるElement
// type：イベント名から「on」を除いた名前
// func：イベントが発生した時に実行させる関数
//------------------------------
function addEventListener(target, type, func) {
	if(target.attachEvent) {
		// 【IE対応】イベント追加処理
		target.attachEvent("on" + type, func);
	} else if(target.addEventListener) {
		// 【FireFox対応】イベント追加処理
		target.addEventListener(type, func, true);
	} else {
		//イベントリスナが使えない場合は on○○ 属性を上書きで妥協（今時あんまり無いと思うが・・・
		target["on" + type] = func;
	}
}



//------------------------------
// CallBack関数
// ここでJSON/Xmlのデータを受け取る
// 【！注意！】
// この関数の関数名と、
// JSON・Xmlに記載されているCallBack関数名は
// 必ず一致するように設定して下さい。
// また、関数名に「-」が入っている場合は、
// 「_」などに置き換えて下さい。
// (「_」は関数名に利用できないため)
//------------------------------
function eolparts_announcement_7(data) {
	// 取得データが存在しない場合は
	// 何も処理をせず
	if (data.item_count <= 0) {
		return;
	}

	// グローバル変数にデータを保持しておく
	org_data = data;

	// 取得データの表示処理
	drawDataArea(data);
}


document.write('<script type="text/javascript" src="http://v4.eir-parts.net/V4Public/EIR/3143/ja/announcement/announcement_7.js" charset="UTF-8"></script>');


