/**
 * GDRSSクラス
 * @param objId RSS表示オブジェクトのID名:String
 * @param objData RSS情報格納オブジェクト:Object
 * @param objSetting 設定値格納オブジェクト:Object
 */
var GDRss = function(objId,objData,objSetting){
	//定数の宣言
	this.PREV_AREA			= document.getElementById(objId);													//表示エリアの取得
	//引数により設定変更可能なもの（RSS情報関係）
	this.RSS_GET_URL		= objData.rssPath;																	//RSS取得URL
	this.RSS_LINK_URL		= (objData.linkURL ? objData.linkURL : undefined);									//固定のリンク先URL
	//引数により設定変更可能なもの（設定値関係）
	this.RSS_GET_FEED_NUM	= (objSetting.feedNum != undefined ? parseInt(objSetting.feedNum,10) : 5);			//取得フィード数
	this.RSS_GET_IMG_W		= (objSetting.imgW != undefined ? parseInt(objSetting.imgW,10) : undefined);		//画像の表示横幅
	this.RSS_GET_IMG_H		= (objSetting.imgH != undefined ? parseInt(objSetting.imgH,10) : undefined);		//画像の表示高さ
	this.RSS_PREV_DESCRIPTION		= (objSetting.prevDescription != undefined ? objSetting.prevDescription : undefined);				//本文表示フラグ
	//ブログ本文のハイライトする単語
	this.HIGH_LIGHT_WORD    = '葵タワー';

	//変数の宣言
	this.htmlStr = '';

	//チェック
	//表示エリアの存在チェック
	if(!this.PREV_AREA){
		alert('表示領域が存在しません。');
		return;
	}
	//RSSのURL必須チェック
	if(!this.RSS_GET_URL){
		alert('表示対象となるRSSのURLが存在しません。');
		return;
	}

	//処理開始
	google.load("feeds","1");
	google.setOnLoadCallback(this.feeds_initialize.bind(this));
}

/**
 * 処理関数郡の宣言
 * RSS表示に使用する関数郡
 */
GDRss.prototype = {
	/**
	 * 初期化関数
	 * @return 正常に終了した場合はTRUE、そうでない場合はFALSEを返す
	 */
	feeds_initialize : function(){
		//RSSフィード取得
		var feed = new google.feeds.Feed(this.RSS_GET_URL);
		//取得フィード数の設定
		feed.setNumEntries(this.RSS_GET_FEED_NUM);
		//RSS読み込み
		feed.load(function(result){
			//RSSの読み込み成功
			if(!result.error){
				//ユーザー定義関数
				if(!this.user_function(result)){
					return false;
				}
			}
			//RSSの読み込み失敗
			else{
				return false;
			}
		}.bind(this));
		return true;
	},

	/**
	 * ユーザー定義関数
	 * @param result RSS取得結果
	 * @return 正常に終了した場合はTRUE、そうでない場合はFALSEを返す
	 */
	user_function : function(result){
		//表示の作成
		this.htmlStr += '<ul>' + "\n";
		//RSSに1件以上ある場合
		if(result.feed.entries.length > 0){
			//表示件数分ループ
			for(var i = 0;i < result.feed.entries.length;i++){
				this.htmlStr += '<li>' + "\n";
				//1件取得
				var entry = result.feed.entries[i];
				//画像のパスを取得
				if(entry.content.match(/<img [^>]*?>/i)) var content_image = entry.content.match(/<img [^>]*?>/i)[0].match(/ src=("|')([^"']*?)("|')/i)[2];
				//画像がある場合
				if(!(this.RSS_GET_IMG_W <= 0 || this.RSS_GET_IMG_H <= 0 || !content_image || content_image == '')){
					//画像の取得
					if(!this.img) this.img = new Array();
					this.img[i] = new Image();
					this.img[i].onload = function(thisObj){
						this.func_prev_image(thisObj);
					}.bind(this,this.img[i]);
					this.img[i].src = content_image;
					//表示の作成
					if(this.img[i].width && this.img[i].width > 0 && this.img[i].height && this.img[i].height > 0){
						var size = changeBreadth(this.img[i].width,this.img[i].height,(this.RSS_GET_IMG_W ? this.RSS_GET_IMG_W : this.img[i].width),(this.RSS_GET_IMG_H ? this.RSS_GET_IMG_H : this.img[i].height));
					}
					this.htmlStr += '<span class="list_img"><a href="' + (this.RSS_LINK_URL ? this.RSS_LINK_URL : entry.link) + '"><img src=' + content_image + ' width="' + (size && size['width'] ? size['width'] : this.img[i].width) + '" height="' + (size && size['height'] ? size['height'] : this.img[i].height) + '" /></a></span>' + "\n";
				}
				//表示の作成
				this.htmlStr += '<span class="list_txt"><a href="' + (this.RSS_LINK_URL ? this.RSS_LINK_URL : entry.link) + '">' + entry.title + '</a>' + "\n";
				if(this.RSS_PREV_DESCRIPTION) this.htmlStr += '<br>' + entry.content.replace( this.HIGH_LIGHT_WORD, '<span class="high_light">' + this.HIGH_LIGHT_WORD + '</span>');
				this.htmlStr += '</span></li>' + "\n";
			}
		}
		//RSSに1件も無い場合
		else this.htmlStr += '<li>現在、情報はありません。</li>' + "\n";
		//表示
		this.PREV_AREA.innerHTML = this.htmlStr + '</ul>' + "\n";
		return true;
	},

	/**
	 * 画像表示関数
	 * @return 正常に終了した場合はTRUE、そうでない場合はFALSEを返す
	 */
	func_prev_image : function(img){
		if(img && img.src){
			var img_ary = document.getElementsByTagName('IMG');
			var size = changeBreadth(img.width,img.height,(this.RSS_GET_IMG_W ? this.RSS_GET_IMG_W : img.width),(this.RSS_GET_IMG_H ? this.RSS_GET_IMG_H : img.height));
			for(var i = 0;i < img_ary.length;i++){
				if(img_ary[i].src == img.src){
					img_ary[i].width = (size['width'] ? size['width'] : img.width);
					img_ary[i].height = (size['height'] ? size['height'] : img.height);
				}
			}
		}
		else return false;
		return true;
	}
}

