﻿/***********************************************************
 * feeds.js [ver 1.2.6]
 * /--- update log ---/
 * ・ちょっとだけ機能まとめ、修正 - 2009.03.10 ver 1.2.6
 * ・新着表示設定を追加[オプション機能] - 2009.03.09 ver 1.2.5
 * ・キャッシュ対策の仕様変更 - 2008.11.06 ver 1.2.4
 * ・ExciteBlogのPR広告を表示させないようカスタマイズ - 2008.7.24 ver 1.2.3
 * ・追記・書き換えモードの選択を追加 - 2008.1.29 ver 1.2.2
 * ・画像1枚の表示 - 2007.12.13 ver 1.2.1
 ***********************************************************
/***********************************************************
 * @@ feed取得処理の開始
 */
var Feedsinit = function (settings,options)
{
	if( typeof(settings) != 'undefined')
	{
		var conteiner = document.getElementById(settings.targetId);
		var Loading;
		if(settings.loading_image != "") {
			Loading = document.createElement('img');
			Loading.setAttribute('src',settings.loading_image);
		} else {
			Loading = document.createElement('p');
			Loading.style.width = '600px';
			Loading.style.textAlign = 'center';
			Loading.style.marginTop = '20px';
			Loading.appendChild(document.createTextNode(settings.loading_Alt));
		}
		conteiner.appendChild(Loading);
		conteiner.style.display = 'block';

		google.load("feeds", "1");
	}


//==========================================================
// オプション機能設定
//----------------------------------------------------------
options.WhatsNew.init = function (nCnt){
	var sAddWhatsNew = {};
	switch(this.add_type)
	{
		case '0':
			// 0 日付比較の場合、ミリ秒単位で比較する
			var tmpd = new Date();
			var d = new Date(nCnt);
			var diffsec = tmpd.getTime() - (this.add_num * 86400000);	// 本日（ミリ秒）-規定日（ミリ秒）
			tmpd.setTime(diffsec);	// 差し引いた秒数をセット
			var sec = d.getTime();	// 記事の日付（ミリ秒）をセット
			if(tmpd.getTime() > sec) {	// 比較して規定日以下ならこの処理は読み飛ばす
				return;
			}
			break;
		case '1':
			if(nCnt >= this.add_num)
			{
				return;
			}
			break;
		default:
			isNum = true;
			break;
	}

	if(this.show_options == 'YES'){
		switch(this.source)
		{
			case '0':
				this.txt = this.text;
				break;
			case '1':
				this.img = '<img src="'+this.src+'" />';
				break;
			default:
				this.txt = "";
				this.img = "";
				return;
				break;
		}
	}
	else
	{
		
	}
	return this;
};
//==========================================================

function initialize()
{
	var rnd = (new Date()).getTime();
	if(settings.rss_atom.match(/\?/ig))
	{
		rnd = '&' + rnd;
	}
	else
	{
		rnd = '?' + rnd;
	}
	var feed = new google.feeds.Feed(settings.rss_atom+rnd); // キャッシュ対策　フィード取得時にクエリ送信
	var entrysMax = 100;

	feed.setNumEntries(entrysMax); // feed最大数の指定（MAX250まで）

	feed.load( function(result) {
		if (!result.error) {
			var isEntry,entryAllData,arrEntrys,sEnTitle,sEnURL,sEnText,sEnDate,nEntryNum,sHtmlPool,isTrimText;
			sHtmlPool = '';
			entryAllData = result.feed.entries.length;
			getFeedCnt = 0;
			for (var nECnt = 0; nECnt < entryAllData; nECnt++) {
				isEntry = 'false';
				arrEntrys = result.feed.entries[nECnt];
				if(settings.isCate == 'YES')
				{
					for(var nCnt=0; nCnt<settings.category.length; nCnt++) {
						if(arrEntrys.categories == settings.category[nCnt])
						{
							isEntry = 'true';
						}
					}
				} else {
					isEntry = 'true';
				}

				if (settings.MaxEntry != "" && isEntry == 'true') {
					if(settings.MaxEntry <= getFeedCnt) {
						isEntry = 'false';
						break;
					}
				}

				if(isEntry == 'true') {

					sEnURL   = arrEntrys.link;
					sEnTitle = arrEntrys.title;
					sEnAuthor = arrEntrys.author;
					// 投稿者がrssad.jpの投稿は広告のため、読み飛ばす
					if(sEnAuthor == "rssad.jp" || new String(sEnTitle).match(/【PR】/ig))
					{
						continue;
					}

					sEnText  = arrEntrys.content;
					if(settings.isImage == 'YES')
					{
						sImage = sEnText.match(/<img .*?>/);
						if(sImage == null)
						{
							sImage = '';
						}
						else
						{
							sImage = '' + sImage; // 文字列にObj扱いのsImageを変更
							sImage = sImage.match(/(\w+):\/\/([\w.]+)\/(\S*)/);
							sImage = sImage[0].replace(/\W$/,"");
							sImage = '<img src="' + sImage + '" alt="'+sEnTitle+'" />'
						}
					}
					if(typeof(sImage) == 'undefined')
					{
						sImage = '';
					}
					sEnText  = sEnText.replace(/(<br\/>)|(<br \/>)/gi,"\n");
					sEnText  = sEnText.replace(/(<.*?>)|(\r\n)|(\r)/gi,"");
					if (settings.isCRLF == 'YES') {
						sEnText  = sEnText.replace(/\n/gi,"<br />");
						sEnText  = sEnText.replace(/[<br \/>]{2,}/gi,"<br />");
					} else {
						sEnText  = sEnText.replace(/\n/gi,"");
					}
					if (settings.TextMax != '') {
						if (sEnText.length > parseInt(settings.TextMax)) {
							sEnText = sEnText.substring(0,parseInt(settings.TextMax));
							isTrimText = 'true';
						}
					}

					var dateObj = new Date(arrEntrys.publishedDate);
					var nYear = dateObj.getFullYear();
					var nMonth = dateObj.getMonth() + 1;
					var nDay = dateObj.getDate();

					nMonth = nMonth + ''; nDay = nDay + '';
					if(nDay.length == 1) {
						nDay = '0' + nDay;
					}
					if(nMonth.length == 1) {
						nMonth = '0' + nMonth;
					}
					sEnDate = "";
					if(settings.DS.year == 'YES')
					{
						sEnDate = nYear + settings.DF.Year;
					}
					if(settings.DS.month == 'YES')
					{
						sEnDate = sEnDate + nMonth + settings.DF.Month;
					}
					if(settings.DS.month == 'YES')
					{
						sEnDate = sEnDate + nDay + settings.DF.Day;
					}
					if(settings.TitleMax != "" && parseInt(settings.TitleMax) > 0)
					{
						if(sEnTitle.length > parseInt(settings.TitleMax))
						{
							var tmpLen = sEnTitle.length - parseInt(settings.TitleMax) + 2;
							sEnTitle = sEnTitle.substring(0,sEnTitle.length - parseInt(tmpLen));
							sEnTitle = sEnTitle + '…';
						}
					}
					if(settings.DataMax != "" && parseInt(settings.DataMax) > 0) {
						var tmpDateLen  = sEnDate.length;
						var tmpTitleLen = sEnTitle.length;
						var tmpTextLen  = sEnText.length;
						var TotalLen = tmpDateLen + tmpTitleLen + tmpTextLen;
						if(TotalLen > parseInt(settings.DataMax)) {
							patchLen = TotalLen - parseInt(settings.DataMax);
							sEnText = sEnText.substring(0,sEnText.length - parseInt(patchLen));
							isTrimText = 'true';
						}
					}
					if(isTrimText == 'true') {
						sEnText = sEnText + '…';
					}

//==========================================================
// オプション関連の処理をここで実行
//----------------------------------------------------------
					if(options.WhatsNew.add_type == '0')
					{
						var opNum = arrEntrys.publishedDate;
					}
					else
					{
						var opNum = getFeedCnt;
					}
					whatsnew_true = false;
					var whatsnew = options.WhatsNew.init(opNum);
					if(typeof(whatsnew) != 'undefined')
					{
						if(typeof(whatsnew.img) != 'undefined')
						{
							sWhatsNew = whatsnew.img;
							whatsnew_true = true;
						}
						if(typeof(whatsnew.txt) != 'undefined')
						{
							sWhatsNew = whatsnew.txt;
							whatsnew_true = true;
						}
					}
					if(whatsnew_true === false)
					{
						sWhatsNew = "";
					}

//==========================================================
					sHtmlPool += settings.putHtml(sEnDate,sEnTitle,sEnText,sEnURL,sImage,arrEntrys.categories,sWhatsNew);
					getFeedCnt = getFeedCnt + 1;
				}
			}
			conteiner.removeChild(Loading);
			conteiner.innerHTML += sHtmlPool;
			conteiner.style.display = 'block';
		}
	});
}

google.setOnLoadCallback(initialize);
}

