// XMLHttpRequestを使ってRSSを読み込む
function listRss() {
    var url = '/iroiro/atom.xml';
    var req = createXMLHttpRequest();

    show('読み込み中です...');

    req.open('GET', url, false);
    req.send(null);

    if (req.status == 200) {
        var domDoc = req.responseXML;
        if (domDoc != null && !isParseError(domDoc)) {
            renderRss(domDoc);
        } else {
            show('適正なXMLではありません');
        }
    } else {
        show('読み込みに失敗しました');
    }
}

// RSSをHTMLのリストとして表示する
function renderRss(doc) {
    var ul = document.createElement('ul');
    var items = doc.getElementsByTagName('entry');
    var li= document.createElement('li');
    li.appendChild(document.createTextNode(' '));
    li.appendChild(document.createElement('a'));
    li.appendChild(document.createTextNode(' '));
    var numOfItems = Math.min(10, items.length);
    for (var i = 0; i < numOfItems; ++i) {
        var newLI = li.cloneNode(true);
        // こんなややこしいことをしているのは
        // 何故かKHTMLでgetElementsByTagNameがうまく動かないため
        var numOfChildren = items[i].childNodes.length;
        for (var j = 0; j < numOfChildren; ++j) {
            var child = items[i].childNodes[j];
            if (child.tagName == 'title') {
                newLI.childNodes[1].appendChild(document.createTextNode(child.firstChild.nodeValue));
            } else if(child.tagName == 'link') {
                newLI.childNodes[1].setAttribute('href', child.getAttributeNode('href').value);
            } else if (child.tagName == 'category') {
                newLI.childNodes[0].nodeValue = '[' + child.getAttributeNode('term').value + '] ';
            } else if (child.tagName == 'published') {
                newLI.childNodes[2].nodeValue = ' ' + child.firstChild.nodeValue.substring(0, 10);
            }
        }
        if (i == 0) {
            var newMark = document.createElement('font');
            newMark.setAttribute("color", "#ff0000");
            newMark.appendChild(document.createTextNode(' NEW!'));
            newLI.appendChild(newMark);
        }
        ul.appendChild(newLI);
    }
    show(ul);
}

// 引数の内容をデータ表示用のボックスに表示する
// 引数が文字列ならばTextNodeに変換する
function show(arg) {
    var node = (typeof arg == 'string') ? document.createTextNode(arg) : arg;
    var container = document.getElementById('recent_iroiro');
    container.replaceChild(node, container.firstChild);
}

// パースエラーかどうかを調べる
function isParseError(doc) {
    return
        doc.parseError!=null && doc.parseError.errorCode != 0 ||
        (doc.documentElement.tagName == 'parsererror' &&
         doc.documentElement.namespaceURI ==
         'http://www.mozilla.org/newlayout/xml/parsererror.xml') ||
        doc.documentElement == null;
}

// XMLHttpRequest を取得する
function createXMLHttpRequest(){
    if (window.XMLHttpRequest) { // Mozilla, Firefox, Safari, IE7
        return new XMLHttpRequest();
    } else if (window.ActiveXObject) { // IE5, IE6
        try {
            return new ActiveXObject("Msxml2.XMLHTTP");    // after MSXML3
        } catch(e) {
            return new ActiveXObject("Microsoft.XMLHTTP"); // before MSXML2
        }
    } else {
        return null;
    }
}
