google.load("feeds", "1");

var ReadRSS = function(xml, u_Num, f_Num, t, disp_date) {
    var feedNews = [];
    var feedDate = [];
    var dispObj = {};
    var myXML = xml;
    var my_uNum = u_Num;
    var my_fNum = f_Num;
    var my_target = t;
    var my_dispDate = disp_date;
    var my_loadedNum = 0;
    var my_id = 0;
    
    this.read = function() {
        $(myXML).find("url").each(function(){
            var d = new Date();
            var dammyMinutes = Math.floor(d.getMinutes() / 10) * 10;
            var dammy = d.getMonth() + "" + d.getDate() + "" + d.getHours() + dammyMinutes;
            var feed = new google.feeds.Feed($(this).text() + "?" + dammy);
            feed.setNumEntries(Math.ceil(my_fNum / my_uNum));
            feed.load(function(result) {
                if (!result.error) {
                    for (var i = 0; i < result.feed.entries.length; i++) {
                        var entry = result.feed.entries[i];
                        if(!entry.title.match(/^AD[:|：]|^PR[:|：]/)) {
                            var title = entry.title;
                            var link = entry.link;
                            var pDate = new Date(entry.publishedDate);
                            var pYear = pDate.getFullYear();
                            var pMonth = pDate.getMonth() + 1;
                            var pDay = pDate.getDate();
                            var pHour = pDate.getHours();
                            var pMinute = pDate.getMinutes();
                            var pSecond = pDate.getSeconds();
                            if(pMonth < 10) { pMonth = "0" + pMonth; }
                            if(pDay < 10) { pDay = "0" + pDay; }
                            if(pHour < 10) { pHour = "0" + pHour; }
                            if(pMinute < 10) { pMinute = "0" + pMinute; }
                            if(pSecond < 10) { pSecond = "0" + pSecond; }

                            var tr = $("<tr></tr>");
                            var td_source = (my_dispDate) ? "<td>" + pYear + "." + pMonth + "." + pDay + " " : "<td>";
                            td_source += "<a href='" + link + "' target='_blank'>" + title  + "<span>【" + result.feed.title + "】</span>" + "</a></td>";
                            $(td_source).appendTo(tr);
                            feedNews[pYear + "" + pMonth + "" + pDay + "" + pHour + "" + pMinute + "" + pSecond + my_id] = tr;
                            feedDate.push(pYear + "" + pMonth + "" + pDay + "" + pHour + "" + pMinute + "" + pSecond + my_id);
                            my_id++;
                        }
                    }
                    my_loadedNum++;
                    if(my_loadedNum == my_uNum) dispObj.dispFeed();
                } else {
                    my_uNum--;
                    if(my_uNum == 0) document.getElementById(my_target).innerHTML = "読み込みに失敗しました。<br />ページを更新し再度読み直してください。";
                    if(my_loadedNum == my_uNum) dispObj.dispFeed();
                }
            });
        });
    };
    dispObj.dispFeed = function() {
        feedDate.sort().reverse();
        var table = $("<table></table>");
        if(feedDate.length < my_fNum) my_fNum = feedDate.length;
        for(var i=0; i<my_fNum; i++) {
            if(i == my_fNum - 1) $(feedNews[feedDate[i]]).find("td").attr("class", "bottom");
            $(feedNews[feedDate[i]]).appendTo(table);
        }
        $("#" + my_target).html(table);
    };
};

function initialize(xml) {
    var readers = [];
    $(xml).find("feed").each(function(){
        var urlNum = $(this).find("url").size();
        var feedNum = parseInt($(this).find("num").text());
        var target = $(this).attr("id");
        var disDate = parseInt($(this).find("display_date").text());
        var readRSS = new ReadRSS($(this), urlNum, feedNum, target, disDate);
        readers.push(readRSS);
    });
    for(var i=0; i<readers.length; i++) {
        readers[i].read();
    }
}

function loadXML() {
    $.ajax({
        type:"GET",
        url:"/xml/feed.xml",
        dataType:"xml",
        success:function(xml){ initialize(xml); }
    });
}

google.setOnLoadCallback(loadXML);