google.load("feeds", "1");

//--- Constructor
function CymwRSSfeeder(divid) {
	this.feedlabels = [];
	this.feedurls = [];
	this.feeds = [];
	this.feedsfetched = 0;
	this.feedlimit = 16;
	this.sortstring = "date";
	this._categories = [];
	this._icons = [];
	this.feedcontainer = document.getElementById(divid);
}


//--- FeedするRSSのアドレス（とラベル）を追加
CymwRSSfeeder.prototype.addFeed = function(Aurl, Alabel) {
	this.feedurls[this.feedurls.length] = Aurl;
	this.feedlabels[this.feedlabels.length] = Alabel;
}


//--- カテゴリ別アイコン指定を追加
CymwRSSfeeder.prototype.addCate = function(Acategory, Aicon) {
	this._categories[this._categories.length] = Acategory;
	this._icons[this._icons.length] = Aicon;

}


//--- 実行
CymwRSSfeeder.prototype.init = function() {
	this.feedsfetched = 0;
	this.feeds = [];
	this.feedcontainer.innerHTML='Retrieving RSS feed(s)'
	var displayer = this;
	for (var i = 0; i < this.feedurls.length; i++) {
		var feedpointer = new google.feeds.Feed(this.feedurls[i]);
		feedpointer.load(function(label) {
			return function(r) {
				displayer._fetch_data_as_array(r, label);
			}
		}(this.feedlabels[i]));
	}
}


//--- 日付フォーマット
CymwRSSfeeder._formatdate = function(datestr) {
	var itemdate = new Date(datestr)
	var yy = itemdate.getFullYear();
	var mm = itemdate.getMonth() + 1;
	var dd = itemdate.getDate();
	mm = "00" + mm;
	mm = mm.substr(mm.length - 2, 2);
	dd = "00" + dd;
	dd = dd.substr(dd.length - 2, 2);
	var parseddate = yy + "." + mm + "." + dd;

	return parseddate;
}


//--- ソート
CymwRSSfeeder._sortarray = function(arr, sortstr) {
	var sortstr = (sortstr == "label") ? "ddlabel" : sortstr;
	if (sortstr == "title" || sortstr == "ddlabel") {
		arr.sort(function(a,b) {
			var fielda = a[sortstr].toLowerCase();
			var fieldb = b[sortstr].toLowerCase();
			return (fielda < fieldb) ? -1
			                         : (fielda > fieldb) ? 1
			                                             : 0;
		});
	}
	else {
		try {
			arr.sort(function(a, b) {
				return new Date(b.publishedDate) - new Date(a.publishedDate)
			});
		}
		catch(err) {}
	}
}

//--- データFetch
CymwRSSfeeder.prototype._fetch_data_as_array = function(result, ddlabel) {
	var thisfeed = (!result.error) ? result.feed.entries : "";
	if (thisfeed == "") {
		alert("Google Feed API Error: " + result.error.message);
	}
	for (var i = 0; i < thisfeed.length; i++) {
		result.feed.entries[i].ddlabel = ddlabel;
	}
	this.feeds = this.feeds.concat(thisfeed);
	this._signaldownloadcomplete();
}


//--- 最終データ
CymwRSSfeeder.prototype._signaldownloadcomplete = function() {
	this.feedsfetched += 1;
	if (this.feedsfetched == this.feedurls.length) {
		this._displayresult(this.feeds);
	}
}


//--- 出力
CymwRSSfeeder.prototype._displayresult = function(feeds) {
	var rssoutput = "";
	CymwRSSfeeder._sortarray(feeds, this.sortstring)
	var loop_end = (feeds.length < this.feedlimit) ? feeds.length : this.feedlimit;

	for (var i = 0; i < loop_end; i++) {
		var title_temp = feeds[i].title;
		if (title_temp.length > 16) {
			title_temp = title_temp.substr(0, 16) + "...";
		}

		var itemdate = CymwRSSfeeder._formatdate(feeds[i].publishedDate);
		var itemtitle = "<a href=\"" + feeds[i].link + "\" target=\"_new\" class=\"titlefield\">" + itemdate + " " + title_temp + "</a><br />\n";
		itemtitle = itemtitle.replace("<br>", "");
		itemtitle = itemtitle.replace("\n", "");
		rssoutput += itemtitle+"<hr size=1>";
/*
*/
//		rssoutput += title_temp + "<br>";
	}
	this.feedcontainer.innerHTML = rssoutput;
}






