(function($) {

    $.fn.getRss = function(options) {
        var datas = Array();
        var that = $(this);

        options = $.extend({
            dispLimit  : 5,
            rssUrl     : '',
            openWin    : true,
            noDataMsg  : '最新情報はありません',
            lineClass  : '',
            titleClass : '',
            dateClass  : ''
        }, options || {});

        if (options.rssUrl == '') return this;

        get();

        function get() {
            $.ajax({
                url: options.rssUrl,
                type: "GET",
                dataType: "xml",
                cache: false,
                error: function() {
                    makeErrorHtml();
                },
                success: function(xml, status) {
                    parse(xml);
                    makeHtml();
                }
            });
        }

        function parse(xml) {
            var number = 0;
            $(xml).find("entry").each(function() {
                if (options.dispLimit != 0 && options.dispLimit <= number) {
                    return;
                }

                var data = {};
                var date = $(this).find("published").text();
                var year = month = day ='';
                var ret = date.match(/^(.*)T.*/i);
                if (ret[1]) {
                    var dates = ret[1].split("-");
                    year = dates[0];
                    month = dates[1];
                    day = dates[2];
                }

                data.title = $(this).find("title").text();
                data.url = $(this).find("link").attr("href");
                data.year = year;
                data.month = month;
                data.day = day;

                datas.push(data);
                number++;
            });
        }

        function getTarget() {
            var target;
            if (that.children().is('table')) {
                target = that.children('table');
            }
            else {
                target = $('<table>');
            }
            return target;
        }

        function makeHtml() {
            var table = getTarget();
            var number = datas.length;
            if (number > 0) {
                for (var i = 0; i < number; i++) {
                    var tr = $('<tr>');
                    var th = $('<th>').text(datas[i].year + '.' + datas[i].month + '.' + datas[i].day);
                    var td = $('<td>');
                    var a = $('<a>').attr('href', datas[i].url).text(datas[i].title);
                    if (options.openWin == true) {
                        a.click(function() {
                            this.target = '_blank';
                        });
                    }
                    if (options.lineClass != '') {
                        tr.attr('class', options.lineClass);
                    }
                    if (options.dateClass != '') {
                        th.attr('class', options.dateClass);
                    }
                    if (options.titleClass != '') {
                        td.attr('class', options.titleClass);
                    }
                    td.append(a);
                    tr.append(th);
                    tr.append(td);
                    table.append(tr);
                }
            }
            else {
                var tr = $('<tr>');
                var td = $('<td>').attr('class', 'nodata').text(options.noDataMsg);
                tr.append(td);
                table.append(tr);
            }
            that.append(table);
        }

        function makeErrorHtml() {
            that.append($('<div>').html('<p class="error">ただいまアクセスが集中しております。<br>しばらくお待ちいただき、再度アクセスください。</p>'));
        }
    };

})(jQuery);
