//■announcement(お知らせ機能)用Ajax

// 指定されたJSON・Xmlのファイルから取得した
// データを保持する変数
var org_data;

// 新着情報アイコンを表示するかしないかの切替フラグ
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 = true;
// 短信・適時開示アイコンの親カテゴリ(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;


//------------------------------
// 年度選択DropDownListの作成
//------------------------------
function createSelect(data) {
	// 年度選択DropDownListの表示領域となる
	// ルートElementを取得する
	// ルートElementが見つからない場合は、
	// 新規作成(<div id='divSelect'>要素)して追加する
	var elmDiv = document.getElementById('divSelect');
	if (null == elmDiv) {
		// <div>要素を新規作成
		elmDiv = document.createElement('div');
		// 新規作成した<div>要素のid属性の設定を行う
		elmDiv.id = 'divSelect';
		// <body>要素に追加
		document.body.appendChild(elmDiv);
	}

	// 年度選択DropDownList(<select id='yearSelect' name='yearSelect'>)を取得する
	var elmSel = document.getElementById('yearSelect');

	// 年度選択DropDownListが既に存在する場合は
	// 何も処理をしない
	if (null != elmSel && undefined != elmSel) {
		return;
	}

	// 年度のリストを取得する
	var arr = GetYearList(data);

	// リストの中で最大の年度を取得する
	var max = GetMaxOrMinYear(arr, true);
	// リストの中で最小の年度を取得する
	var min = GetMaxOrMinYear(arr, false);

	// 年度選択DropDownList(<select id='yearSelect' name='yearSelect'>要素)を新規に作成する
	elmSel = document.createElement('select');
	// <select>要素のid属性の設定を行う
	elmSel.id = 'yearSelect';
	// <select>要素のname属性の設定を行う
	elmSel.name = 'yearSelect';
	elmSel.size = 1;
	// DropDownList内の項目が切り替えられた時の
	// イベントハンドラを追加する
	addEventListener(elmSel, 'change', function(){selIndex()});

	// 「最新１年分」の選択項目Element(<option>要素)を新規に作成する
	var elmOpt = document.createElement('option');
	// Valueの設定
	elmOpt.value = '0';
	// Textの設定
	elmOpt.appendChild(document.createTextNode('最新1年分'));
	// DropDownList(<select>要素)に追加する
	elmSel.appendChild(elmOpt);

	// 各年度の選択項目Element(<option>要素)を新規に作成・追加する
	for (var i = max; i >= min; i--) {
		elmOpt = document.createElement('option');
		// Valueの設定
		elmOpt.value = i;
		// Textの設定
		elmOpt.appendChild(document.createTextNode('　' + i + '年　'));
		// DropDownList(<select>要素)に追加する
		elmSel.appendChild(elmOpt);
	}

	// 年度選択DropDownListの表示領域にElementを追加する
	elmDiv.appendChild(elmSel);
}





//------------------------------
// 各年度のメニューリンクを作成する
//------------------------------
function CreateAnchorElm(year) {
	// 各年度のリンクを新規に作成する
	var elmAYear = document.createElement('a');
	// hrefの設定
	elmAYear.href = '#';
	// イベントハンドラを追加する
	addEventListener(elmAYear, 'click', function(){ YearLink_onclick(year);});
	// Textの設定
	elmAYear.appendChild(document.createTextNode(year.toString() + '年'));

	return elmAYear;
}


//------------------------------
// JSON・Xmlから取得したデータの
// 年度のリストを取得するためのサポート関数
//------------------------------
function GetYearList(data) {
	// 年度の配列格納用の変数を新規に宣言
	var arr = new Array();

	// JSON(またはXml)のデータをループして、
	// 各データの「date」で指定されている値を取得し、
	// 配列に格納する。
	for (var i in data.item) {
		var year = data.item[i].date.substr(0, 4);
		if (!(year in arr)) {
			arr[year] = year;
		}
	}

	return arr;
}
//------------------------------
// 取得した年度のリストから
// 最大(または最小)の年度を取得するためのサポート関数
// 【パラメータ】
// IsMax：最大(または最小)の切り替えフラグ
//------------------------------
function GetMaxOrMinYear(arr, IsMax) {
	if (IsMax) {
		// 年度リストを降順に並びかえ
		arr.reverse();
	} else {
		// 年度リストを昇順に並びかえ
		arr.sort();
	}
	return arr[0];
}





//------------------------------
// JSON/Xmlから取得したデータを表示するメインAPI
//------------------------------
function drawDataArea(data, year, limit) {
	// データ表示箇所のルート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) {
		for (i = 0; i < elmDiv.childNodes.length; i++) {
			if (null != elmDiv.childNodes[i].nodeName && undefined != elmDiv.childNodes[i].nodeName) {
				if (elmDiv.childNodes[i].nodeName.toUpperCase() == 'table'.toUpperCase()) {
					elmDiv.removeChild(elmDiv.childNodes[i]);
					break;
				}
			}
		}
	}
	var elmUl = document.createElement('ul');

	var total = 0;

	// リストを日付順で降順に並び替え 20121228
	var items = [].concat(data.item).sort(function (a, b) {
		var aDate = Number(a.date.match(/(\d+)/g).join('').substr(0, 8));
		var bDate = Number(b.date.match(/(\d+)/g).join('').substr(0, 8));

		if (bDate > aDate) {
			return 1;
		} else if (bDate < aDate) {
			return -1;
		} else {
			return 0;
		}
	});

	if (typeof limit !== 'undefined') {
		limit = items.length < limit ? items.length :  limit ;
		items = items.slice(0, limit);
	}

	// 各表示項目をループして表示/非表示を切り替える
//	for (var i in data.item) {
// 	for (i = 0; i < data.item_count; i++) {
	for (var i = 0, item; item = items[i]; i++) {
		if (item.date.substr(0, 4) == year) {
			// DropDownListで選択された年度に該当する
			// データを表示する処理
			createData(elmUl, item);
			total++;
		} else if (0 == year) {
			// 「最新１年分」に該当するデータかどうか判定する
			if (IsOneYearAgo(new Date(), item.date)) {
				// 「最新１年分」に該当するデータを表示する処理
				createData(elmUl, item);
				total++;
			}
		}
	}

	elmDiv.appendChild(elmUl);

	// データが１件も存在しない場合
	if (total == 0) {
		elmDiv.appendChild(document.createTextNode('データが存在しません'));
	}
}


//------------------------------
// 年月日と加算日から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)
//------------------------------
function createData(element, item) {
	
	// <dt>要素を新規に作成する
	var elmLi = document.createElement('li');

	// 各表示項目の「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.format_date + ']'));
		elmA.appendChild(document.createTextNode(item.title));
		// <dd>要素に<a>要素を追加する
		elmLi.appendChild(elmA);
	} else {
		// <dd>要素に各表示項目の「title」の値を追加する
		elmLi.appendChild(document.createTextNode('[' + item.format_date + ']'));
		elmLi.appendChild(document.createTextNode(item.title));
	}
	element.appendChild(elmLi);
}

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";
	}

	// PRの判別
	if (nType.indexOf("yuho") > -1) {
		return "yuho";
	}

	return "";
}

//------------------------------
// 各カテゴリのカテゴリアイコンURLを取得する
//------------------------------
function GetCategoryIconUrl(item) {
	var cat = GetItemCategory(item);

	if (cat != null && cat != "") {
		switch (cat) {
			case "tanshin":
				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の項目が
// 切り替えられた時のイベントハンドラ
//------------------------------
function YearLink_onclick(year) {
	// 表示データの更新を行う
	drawDataArea(org_data, year);

	return false;
}



//------------------------------
// JSON・Xmlから取得したデータの
// 年度のリストを取得するためのサポート関数
//------------------------------
function GetYearList(data) {
	// 年度の配列格納用の変数を新規に宣言
	var arr = new Array();

	// JSON(またはXml)のデータをループして、
	// 各データの「date」で指定されている値を取得し、
	// 配列に格納する。
	for (i = 0; i < data.item_count; i++) {
		var year = data.item[i].date.substr(0, 4);
		if (!(year in arr)) {
			arr[year] = year;
		}
	}

	return arr;
}
//------------------------------
// 取得した年度のリストから
// 最大(または最小)の年度を取得するためのサポート関数
// 【パラメータ】
// IsMax：最大(または最小)の切り替えフラグ
//------------------------------
function GetMaxOrMinYear(arr, IsMax) {
	/*
	if (IsMax) {
		// 年度リストを降順に並びかえ
		arr.reverse();
	} else {
		// 年度リストを昇順に並びかえ
		arr.sort();
	}

	return arr[0];
	*/
	return ([].concat(arr).sort())[IsMax ? arr.length - 1 : 0];
}
//------------------------------
// 【クロスブラウザ対応】
// 各ブラウザによって、
// 年度選択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;
	}
}


//------------------------------
// 年度選択DropDownListの項目が
// 切り替えられた時のイベントハンドラ
//------------------------------
function selIndex(index) {
	var year = 0;
	// 年度選択DropDownList(<select>要素)をIDの値で検索し、
	// 取得する
	var elmSel = document.getElementById('yearSelect');
	if (elmSel != null && elmSel != undefined) {
		year = elmSel.options[elmSel.selectedIndex].value;
	}

	// 表示データの更新を行う
	drawDataArea(org_data, year);
}


//------------------------------
// 年度選択DropDownListで
// 「最新１年分」が指定されている場合に
// 各データが最新１年のデータかどうか判定するサポート関数
//------------------------------
function IsOneYearAgo(CurDate, CompDate) {
	var y = CompDate.substr(0, 4);
	var m = CompDate.substr(5, 2);
	var d = CompDate.substr(8, 2);

	var year = CurDate.getYear();
	if (year < 2000) year += 1900;
	var mon = CurDate.getMonth() + 1;
	var date = CurDate.getDate();

	NewDate = new Date(year - 1, mon, date);
	if (NewDate <= new Date(y, m, d)) {
		return true;
	}
	return false;
}

