/***************************************************************
    SYSTEM   : ＡＥＤ寄贈！元気プロジェクト！
    TITLE    : ダイナミックHTMLの定義
    SCRIPT   : script.js
    VERSION  : Ver1.0.5
    LANGUAGE : JavaScript1.3
    CODESET  : UTF-8
    EXPLAIN  : クライアント画面の動的操作を定義する。
    AUTHOR   : yap
    CREATED  : 2008/01/17  //as Ver1.0.1
    UPDATED  : 2008/11/28  //as Ver1.0.5
***************************************************************/

/***************************************************************
    HTTP通信関数
***************************************************************/
function createXMLHttpRequest(cbFunc)
{
    var XMLhttpObject = null;
    try {
        XMLhttpObject = new XMLHttpRequest();
    } catch(e) {
        try {
            XMLhttpObject = new ActiveXObject('Msxml2.XMLHTTP');
        } catch(e) {
            try {
                XMLhttpObject = new ActiveXObject('Microsoft.XMLHTTP');
            } catch(e) {
                return null;
            }
        }
    }
    if (XMLhttpObject) {XMLhttpObject.onreadystatechange = cbFunc;}
    return XMLhttpObject;
}

/***************************************************************
    RSSフィードの表示関数
***************************************************************/
function displayData()
{
    //HTMLフォーマットの設定(%t:title,%l:link,%d:description,%p:dcDate|pubDate,%s:site-title)
    var formHtml = '<p><strong><a href=%l>%t</a></strong>[%p]<br />%d</p><hr />';

    //日付フォーマットの設定(%Y:年,%m:月,%d:日,%H:時,%i:分,%s:秒,%y:和歴年,%h:12時制時)
    var formDate = '%Y/%m/%d';

    //最大表示件数の設定(0の時:無制限)
    var numMax = 0;

    //和歴との差分
    var eraYear = 1988;

    if ((httpObj.readyState == 4) && (httpObj.status == 200)) {

        //名前空間接頭辞の定義
        var rdf = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#';
        var dc  = 'http://purl.org/dc/elements/1.1/';

        //RSS要素の抽出(RSS2.0)
        var rss20 = true;
        var nodeRss = httpObj.responseXML.getElementsByTagName('rss');
        if (!nodeRss.length) {

            //RDF要素の抽出(RSS1.0)
            rss20 = false;
            if (httpObj.responseXML.getElementsByTagNameNS == undefined) {  //IEのみ
                nodeRss  = httpObj.responseXML.getElementsByTagName('rdf:RDF');
            } else {  //IE以外
                nodeRss  = httpObj.responseXML.getElementsByTagNameNS(rdf, 'RDF');
            }
        }

        //チャンネル要素の抽出
        var nodeChannel = nodeRss[0].getElementsByTagName('channel');

        //サイトタイトルの抽出
        var nodeSite = nodeChannel[0].getElementsByTagName('title');
        var valSite = nodeSite[0].firstChild.nodeValue;

        //アイテム要素の抽出
        var nodeItem = nodeRss[0].getElementsByTagName('item');

        //アイテム要素の数だけ繰り返し
        var strHtml = '';
        for (var i = 0; i < nodeItem.length; i++) {

            //表示件数のチェック
            if (numMax && i >= numMax) {break;}

            //アイテムタイトルの抽出
            var nodeTitle = nodeItem[i].getElementsByTagName('title');
            if (nodeTitle.length) {
                var valTitle = nodeTitle[0].firstChild.nodeValue;
            } else {var valTitle = '';}

            //アイテムリンクの抽出
            var nodeLink = nodeItem[i].getElementsByTagName('link');
            if (nodeLink.length) {
                var valLink = nodeLink[0].firstChild.nodeValue;
            } else {var valLink = '';}

            //アイテム説明の抽出
            var nodeDesc = nodeItem[i].getElementsByTagName('description');
            if (nodeDesc.length) {
                var valDesc = nodeDesc[0].firstChild.nodeValue;
            } else {var valDesc = '';}

            //アイテム日付の抽出(RSS2.0)
            var nodeDate = nodeItem[i].getElementsByTagName('pubDate');
            if (!nodeDate.length) {

                //アイテム日付の抽出(RSS1.0)
                if (nodeItem[i].getElementsByTagNameNS == undefined) {  //IEのみ
                    nodeDate = nodeItem[i].getElementsByTagName('dc:date');
                } else {  //IE以外
                    nodeDate = nodeItem[i].getElementsByTagNameNS(dc, 'date');
                }
            }
            if (nodeDate.length) {
                var valDate = nodeDate[0].firstChild.nodeValue;
            } else {var valDate = '';}

            //タイトルがなかった場合説明を採用
            if (!valTitle) {
                valTitle = valDesc;
                valDesc = '';
            }

            //アイテム日付の書式変換
            if (valDate) {
                if (!rss20) {
                    valDate = valDate.replace(/(\d+)-(\d+)-(\d+)T(\d+):(\d+):(\d+).*/, '$1/$2/$3 $4:$5:$6');
                }
                var objDate = new Date(valDate);
                var strDate = formDate;
                strDate = strDate.replace('%Y', objDate.getFullYear());
                strDate = strDate.replace('%y', ('0' + (objDate.getFullYear() - eraYear)).slice(-2));
                strDate = strDate.replace('%m', ('0' + (objDate.getMonth() + 1)).slice(-2));
                strDate = strDate.replace('%d', ('0' + objDate.getDate()).slice(-2));
                strDate = strDate.replace('%H', ('0' + objDate.getHours()).slice(-2));
                strDate = strDate.replace('%h', (objDate.getHours() > 12)? ('0' + (objDate.getHours() - 12)).slice(-2): ('0' + objDate.getHours()).slice(-2));
                strDate = strDate.replace('%i', ('0' + objDate.getMinutes()).slice(-2));
                strDate = strDate.replace('%s', ('0' + objDate.getSeconds()).slice(-2));
            }

            //HTML文の組み立て
            var tempHtml = formHtml;
            if (!valLink) {tempHtml = tempHtml.replace(/<a href="?%l"?.*?>(.+?)<\/a>/mi, '$1');}
            tempHtml = tempHtml.replace('%s', valSite);
            tempHtml = tempHtml.replace('%t', valTitle);
            tempHtml = tempHtml.replace('%l', valLink);
            tempHtml = tempHtml.replace('%d', valDesc);
            tempHtml = tempHtml.replace('%p', strDate);
            strHtml += tempHtml;
        }

        //取得結果の表示
        document.getElementById('news').innerHTML = strHtml;
    } else {
        document.getElementById('news').innerHTML = '<p>Loading...</p>';
    }
}

/***************************************************************
    XMLファイル読み込み関数
***************************************************************/
function loadNews(fileName)
{
    httpObj = createXMLHttpRequest(displayData);
    if (httpObj) {
        var param = '?time=' + (new Date().getTime());  //キャッシュの無効化
        httpObj.open('GET', fileName + param, true);
        httpObj.send(null);
    }
}

/***************************************************************
    お気に入りに追加関数
***************************************************************/
function addFavor()
{
    window.external.addfavorite(window.location.href, 'ＡＥＤ寄贈！元気プロジェクト！');
}

