
// 注意：URLは同一ドメインでないと、XMLHttpRequestの制限でデータを取得できない

// 初期値：xmlノード名
var gNodeURL		= 'url';
var gNodePhoto		= 'photo';
var gNodeSubject	= 'subject';
var gNodeTarget		= 'target';
var gNodeTitle		= 'title';
var gNodeLink		= 'link';
var gNodeCategory	= 'category';
var gNodePubDate		= 'pubDate';

// 初期値：フォトギャラリー
var gPhotoDataAR;
var gPhotoName		= 'photo';			// フォトギャラリー（掲示欄との区別用）
var gPhotoTimer		= 9000;				// フォトギャラリー切り替え時間（ミリ秒）
var gPhotoURL		= 'http://www.koryu.or.jp/ez3_add.nsf/PhotoGallery.xml';
var gPhotoID		= 'xml_photo';		// div id名
var gPhotoImgName	= 'photo_gallery';	// img name名
var gPhotoBRtext	= '|';				// 改行用文字（入力）
var gPhotoBRtag		= '<br>';			// 改行タグ
var gPhotoBRnotag	= ' ';				// 改行タグを除去したときの代替文字（altなどに使用）

// 初期値：台北事務所新着情報
var gTaipeiName		= 'taipei';			// 台北事務所新着情報（フォトギャラリーとの区別用）
var gTaipeiURL		= 'http://www.koryu.or.jp/taipei/ez3_contents.nsf/Topics.xml';
var gTaipeiID		= 'xml_taipei';		// div id名

// 初期値：高雄事務所新着情報
var gTakaoName		= 'takao';			// 高雄事務所新着情報（フォトギャラリーとの区別用）
var gTakaoURL		= 'http://www.koryu.or.jp/kaohsiung/ez3_contents.nsf/Topics.xml';
var gTakaoID		= 'xml_takao';		// div id名

var gPre			= '-';
var gPost			= '/';

// 初期値：掲示欄
var gTopicsName		= 'topics';			// 掲示欄（フォトギャラリーとの区別用）
var gTopicsURL		= 'http://www.koryu.or.jp/ez3_add.nsf/Topics.xml';
var gTopicsID		= 'xml_topics';		// div id名

// 初期値：フォントサイズ
var gFontSmall		= '10px';			// 小（css設定値、例：small, 10px）
var gFontMedium		= '12px';			// 中（css設定値、例：medium, 16px）
var gFontLarge		= '14px';			// 大（css設定値、例：large, 24px）
var gFontsizeCookie	= 'fontsize';		// フォントサイズを保存する変数名
var gFontsize		= getCookie(gFontsizeCookie) ? getCookie(gFontsizeCookie) : gFontMedium;

// フォトギャラリー、掲示欄共通
function getXML(htmlType, url) {
	var xmlHttpReq		= false;

	if (window.XMLHttpRequest) {
		// Firefox, Opera など
		xmlHttpReq		= new XMLHttpRequest();
		//xmlHttpReq.overrideMimeType('text/xml');

	} else if (window.ActiveXObject) {
		// IE
		try {
			xmlHttpReq	= new ActiveXObject('Msxml2.XMLHTTP');
		} catch (e) {
			xmlHttpReq	= new ActiveXObject('Microsoft.XMLHTTP');
		}
	}

	if (!xmlHttpReq) {
		alert("ご利用のブラウザが XMLHttpRequest に対応していないため、一部の情報が表示できません。");
		return false;
	}

	// xmlHttpReq.readyState が変化した時に呼び出される
	xmlHttpReq.onreadystatechange = function() { 
		if (xmlHttpReq.readyState == 4 && xmlHttpReq.status == 200) {
			// XML取得完了
			xml2Array(htmlType, xmlHttpReq);
		} 
	}

	// XMLデータを取得
	xmlHttpReq.open("GET", url ,true) 
	xmlHttpReq.send(null) 

	return true;

}

// XMLデータの配列化
function xml2Array(htmlType, xmlHttpReq) {

	//alert(xmlHttpReq.responseText);
	var xml		= xmlHttpReq.responseXML;
	var root	= xml.documentElement;

	var newsAR	= new Array();
	var count	= 0;

	for (var i = 0; i < root.childNodes.length; i++) {
		if (root.childNodes[i].nodeType == 1) {

			var entries	= new Array();

			// entry 分ループ
			for (var j = 0; j < root.childNodes[i].childNodes.length; j++) {
				if (root.childNodes[i].childNodes[j].nodeType == 1) {
					// キーにするタグの名前をnodeNameに格納
					if (root.childNodes[i].childNodes[j].firstChild !== null) {
						var key			= root.childNodes[i].childNodes[j].nodeName;
						entries[key]	= root.childNodes[i].childNodes[j].firstChild.nodeValue;
					}
				}
			}
			newsAR[count]	= entries;

			count++;
		}
	}

	switch (htmlType) {
	case gPhotoName:
		gPhotoDataAR	= newsAR;
		displayPhoto(0);
		break;

	case gTaipeiName:
		displayNews(newsAR, 1);
		break;

	case gTakaoName:
		displayNews(newsAR, 2);
		break;

	case gTopicsName:
		displayTopics(newsAR);
		break;

	default:
		return false;
	}

	return true;

}

// フォトギャラリー用html作成
function displayPhoto(i) {
	if (!isNaN('i'))	i = 0;

	// 表示：<div id="gPhotoID">
	if (document.gPhotoImgName !== undefined && document.gPhotoImgName.complete || document.gPhotoImgName === undefined) {

		// 改行用文字（入力）を改行タグに変換
		if ((gPhotoDataAR[i][gNodeSubject].lastIndexOf(gPhotoBRtext)) != -1) {
			subjectTag   = gPhotoDataAR[i][gNodeSubject].split(gPhotoBRtext).join(gPhotoBRtag);
			subjectNoTag = gPhotoDataAR[i][gNodeSubject].split(gPhotoBRtext).join(gPhotoBRnotag);

		} else {
			subjectTag   = gPhotoDataAR[i][gNodeSubject];
			subjectNoTag = gPhotoDataAR[i][gNodeSubject];
		}

		if (gPhotoDataAR[i][gNodeTarget] == 1) {
			document.getElementById(gPhotoID).innerHTML = '<div id="photo"><a href="' + gPhotoDataAR[i][gNodeURL] + '" target="_blank"><img src="' + gPhotoDataAR[i][gNodePhoto] + '" width="205" height="154" border="0" name="' + gPhotoImgName + '" alt="' + subjectNoTag + '" title="' + subjectNoTag + '"></a></div>';
			document.getElementById(gPhotoID).innerHTML += '<div id="photo-capt"><a href="' + gPhotoDataAR[i][gNodeURL] + '" target="_blank">' + subjectTag + '</a></div>';

		} else {
			document.getElementById(gPhotoID).innerHTML = '<div id="photo"><a href="' + gPhotoDataAR[i][gNodeURL] + '"><img src="' + gPhotoDataAR[i][gNodePhoto] + '" width="205" height="154" border="0" name="' + gPhotoImgName + '" alt="' + subjectNoTag + '" title="' + subjectNoTag + '"></a></div>';
			document.getElementById(gPhotoID).innerHTML += '<div id="photo-capt"><a href="' + gPhotoDataAR[i][gNodeURL] + '">' + subjectTag + '</a></div>';

		}

		i++;
		if (i >= gPhotoDataAR.length) i = 0;
	}

	// タイマーの設定
	setTimeout('displayPhoto(\'' + i + '\')', gPhotoTimer);

}

// 台北・高雄事務所新着情報用html作成
function displayNews(newsAR, placeFlg) {
	var newsHtml = '<ul>';

	for (var i = 0; i < newsAR.length; i++) {
		dateTag = newsAR[i][gNodePubDate].split(gPre).join(gPost);
		newsHtml += '<li><a href="' + newsAR[i][gNodeLink] + '" target="_blank">' + newsAR[i][gNodeTitle] + '</a><span style="font-size: 85%;">（' + dateTag + '）</span></li>';
	}

	newsHtml += '</ul>';

	if (placeFlg == 1) {
		// 表示：<div id="gTaipeiID">
		document.getElementById(gTaipeiID).innerHTML = newsHtml;
	} else {
		// 表示：<div id="gTakaoID">
		document.getElementById(gTakaoID).innerHTML = newsHtml;
	}

}

// 掲示欄用html作成
function displayTopics(newsAR) {
	var topicsHtml = '<ul>';

	for (var i = 0; i < newsAR.length; i++) {
		if (newsAR[i][gNodeTarget] == 1) {
			topicsHtml += '<li><a href="' + newsAR[i][gNodeURL] + '" target="_blank">' + newsAR[i][gNodeSubject] + '</a></li>';
		} else {
			topicsHtml += '<li><a href="' + newsAR[i][gNodeURL] + '">' + newsAR[i][gNodeSubject] + '</a></li>';
		}
	}

	topicsHtml += '</ul>';

	// 表示：<div id="gTopicsID">
	document.getElementById(gTopicsID).innerHTML = topicsHtml;

}

// クッキーにデータ保存
function saveCookie(cookieName, cookieVal, cookieDomain, cookiePath, cookieExpire) {
	if (!cookieName)	return;

	cookieVal			= escape(cookieVal);

	if (!cookieDomain) {
		cookieDomain	= location.hostname;
	}
	cookieDomain		= 'Domain=' + cookieDomain;

	if (!cookiePath) {
		cookiePath		= '/';
	}
	cookiePath			= 'Path=' + cookiePath;

	if (!cookieExpire) {
		// 無期限にできないため、なるべく長期になるようにする。
		// 2038年を設定するとエラーとなる環境があるため、１年前の2037年とする。
		var now			= new Date();
		now.setYear(2037);
		cookieExpire	= now.toGMTString();
	}
	cookieExpire		= 'Expires=' + cookieExpire;

	document.cookie		= cookieName + '=' + cookieVal
							+ '; ' + cookieDomain
							+ '; ' + cookiePath
							+ '; ' + cookieExpire;

}

// クッキーからデータ取得
function getCookie(cookieName) {
	var cookieVal = '';

	// 区切り文字：「; 」（半角スペースあり）
	if (document.cookie) {
		var cookies = document.cookie.split('; ');
		for (var i = 0; i < cookies.length; i++) {
			var strAR = cookies[i].split('=');
			if (strAR[0] == cookieName) {
				var cookieVal = unescape(strAR[1]);
				//break;
			}
		}
	}

	// 区切り文字：「;」（半角スペースなし：念のため）
	if (!cookieVal && document.cookie) {
		var cookies = document.cookie.split(';');
		for (var i = 0; i < cookies.length; i++) {
			var strAR = cookies[i].split('=');
			if (strAR[0] == cookieName) {
				var cookieVal = unescape(strAR[1]);
				//break;
			}
		}
	}

	if (cookieVal) {
		switch (cookieVal) {
		case gFontSmall:
		case gFontMedium:
		case gFontLarge:
			break;
	
		default:
			cookieVal	= gFontMedium;
		}

	} else {
		cookieVal		= gFontMedium;
	}

	return cookieVal;
}

// フォントサイズの切替
function changeFontSize(fontsize) {
	document.body.style.fontSize = fontsize;
	saveCookie(gFontsizeCookie, fontsize, '', '', '');
}

// スタイルシート定義内容の変更
function insetRule( selector, rules ) {
	var docCSS = document.styleSheets;
	if( docCSS ) {
		var tSheet=docCSS[docCSS.length-1];
		if( document.all ) {
			tSheet.addRule( selector, rules );
		} else {
			tSheet.insertRule( selector + "{" + rules + "}", tSheet.cssRules.length );
		}
	}
}
