/*
 * インデックスページの更新情報をロードする
 *     外部依存 : prototype.js
 *     対象HTML: index.html
 */

/*
	---- 更新テーブルの書式について
	<table id="news">
  	<tr>
      <td><img src="images/update-mark.png" alt="Update->"/></td>
      <td>2007.08.29</td>
      <td></td>
      <td>description</td>
    </tr>
  </table>

  ---- <td>タグで使用できるHTMLタグ
      <td>description1
      	<a>link1</a>
    		description2
    		<a>link2</a>
      </td>
  
  ---- 未実装の機能
    ---- pageInit での使用言語切替
  
	  ---- 現在年の更新情報のみ表示する
			var currentdate = new Date();
			var year = currentdate.getYear();
			if(year < 2000)	year += 1900;
			if(infodate[0] != year)	break;
			
  ---- 変更履歴
  	2008.07.28 : IE6 で更新情報テーブルが表示されないため、原因の調査のために
  	　　　　　　　　createUpdateInfoTable(以前は showResponse)関数を書き
  	　　　　　　　　直した。表示されるようにはなったが、はっきりとした原因は不明。
  	　　　　　　　　変更した点は、関数名、変数名をわかりやすいように修正したほか、
  	　　　　　　　　以前は、<td>ノードをすべて作成してから、<tr>ノードを作成し
  	　　　　　　　　て、一気に<td>ノードを追加していた。これを、<td>ノードを一つ
  	　　　　　　　　ずつ作成、追加するように変更した。
  	　　　　　　　　なお、この修正を行っていない状態でも、IE7, Firefox, Safari
  	　　　　　　　　では、正常に表示されていた。

  	2008.07.28 : 上記の表示の不具合は、このスクリプトファイル(loadinfo.js)の
  	　　　　　　　　テキストエンコーディングがShift-JISになっていたためと思われる。
  	　　　　　　　　UTF-8に変換後は、正常に表示されるようになった。
  	
  	2008.07.29 : updates.xmlの読み込みがキャッシュされてしまうため、リクエス
  	　　　　　　　　トヘッダに、If-Modified-Sinceを追加した。
*/


function pageInit(lang) {
    var url = 'updates.xml';
    var hdr = ['If-Modified-Since', 'Thu, 01 Jun 1970 00:00:00 GMT'];
    var pars = '';
    
    var myAjax = new Ajax.Request(url, {headers: hdr, method: 'post', parameters: pars, onComplete: createUpdateInfoTable});
}

/*
 * 更新情報テーブルの作成
 */
function createUpdateInfoTable(response) {
    var xml = response.responseXML;
    var items = xml.documentElement.getElementsByTagName('info');
    
    // IEでは、tbodyタグがないとテーブルの内容が表示されない。	
    var updateTable = document.createElement('table');
    var updateTableBody = document.createElement('tbody');

    updateTable.setAttribute('id', 'news');

    for(var row = 0; row < items.length; row++) {
			var tableRow = document.createElement("tr");

			// updateマークの作成
			tableRow.appendChild(createUpdateMarkColumn(items[row]));

			
			// 日付カラムの作成
			var dateColumn = document.createElement('td');
			//var infoDate = document.createTextNode(items[row].getAttribute('date'));
			dateColumn.appendChild(document.createTextNode(items[row].getAttribute('date')));
			dateColumn.setAttribute('class', 'date');
			tableRow.appendChild(dateColumn);
			
			// 情報カラムの作成
			var descColumn = document.createElement('td');
			descColumn.setAttribute('class', 'desc');
			copyChildNodes(descColumn, items[row]);
			tableRow.appendChild(descColumn);
			
			// tbodyに追加
			updateTableBody.appendChild(tableRow);
  	}
  	
    updateTable.appendChild(updateTableBody);
    document.getElementById('updates').appendChild(updateTable);
    document.getElementById('infoloading').style.visibility = 'hidden';
}

function createUpdateMarkColumn(infonode) {
    var column = document.createElement('td');

    var infodate = infonode.getAttribute('date').split('-');
    var currentdate = new Date();

    // アップデートマークを付加する。月は0-11で返されることに注意
    var year = currentdate.getYear();
    if(year < 2000) {
			year += 1900;
    }

		//alert("createUpdateMarkColumn3");

    if(infodate[0] == year) {
			if(infodate[1] == currentdate.getMonth() +1) {
	  	  var updatemark = document.createElement('img');
	    	updatemark.setAttribute('src', 'images/update-mark.png');
		    updatemark.setAttribute('alt', 'Update->');
		    column.appendChild(updatemark);
			}
    }	
    return column;
}

// 指定されたノードのすべての子ノードをコピーする。
// 指定されたノード自体はコピーされない。
function copyChildNodes(dst, src) {
	var srcNodes = src.childNodes;
	
	for(var i = 0; i < srcNodes.length; i++)
		copyNode(dst, srcNodes[i]);
}

// 指定されたノード以下のすべての子ノードをコピーする。
function copyNode(dst, src) {
	if(src.nodeType == 3) {
		dst.appendChild(document.createTextNode(src.nodeValue));
		return;
	}
		
	var tag = document.createElement(src.tagName);

  // 属性値のコピー
 	// object.hasAttributes()は、IEではサポートされていない
  if(src.attributes.length) {
		var attrs = src.attributes;
		for(var i = 0; i < attrs.length; i++) {
	    tag.setAttribute(attrs[i].nodeName, attrs[i].nodeValue);
		}
  }
  
  if(src.hasChildNodes) {
  	for(var i = 0; i < src.childNodes.length; i++)
  		copyNode(tag, src.childNodes[i]);
  }
  dst.appendChild(tag);
}
