/* 文字コードはUTF-8 */
feedreader = function(override) {
	this.loading_html = '<div style="font-size:12px;color:#bbb;">読込中...</div>';
	this.error_html = '<div style="font-size:12px;color:#bbb;">データが読み込めませんでした。</div>';
	this.no_item_html = '<div style="font-size:12px;color:#bbb;">現在、準備中です。</div>';
	// 記事が最新か判断する範囲 単位ms デフォルト1日
	this.new_range = 86400000;
	this.skip_url = true;
	this.init = function(tid, xml_url){
		this.limit = (typeof(arguments[2]) != 'undefined' ? arguments[2] : 10);
		this.link_type = (typeof(arguments[3]) != 'undefined' ? arguments[3] : '_self');
		var dateobj = new Date();
		this.now = dateobj.getTime();
		var tobj = $('#' + tid).eq(0);
		tobj.html(this.loading_html);
		var self = this;
			$.get(xml_url, {}, function(xml, textStatus){
				var html = '';
				if(textStatus == 'success'){
					if ($(xml).find('item').length > 0){
						html += self.parse_xml(xml);
					}
					else{
						html += self.no_item_html;
					}
				}
				else{
					html += self.error_html;
				}
				tobj.html(html);
			});
	}
	this.parse_xml = function(xml) {
		var html = '';
		html += this.open_tag(xml);
		var items = $(xml).find('item');
		var count = (items.length < this.limit ? items.length : this.limit);
		var i = 0;
		var self = this;
		items.each(function(){
			var json = self.build_json(this);
			if (!(self.skip_url && document.URL.indexOf(json.link) >= 0)) {
				html += self.item_html(json, i, count);
				i++;
			}
			if(i >= count){
				return false;
			}
		});
		html += this.close_tag(xml);
		return html;
	}
	this.build_json = function(xml) {
		var title = $(xml).find('title').text();
		var link = $(xml).find('link').text();
		var pubDate = $(xml).find('pubDate').text();
		var description = $(xml).find('content\\:encoded').text() || $(xml).find('encoded').text() || $(xml).find('[nodename=conntent\\:encoded]').text();
		var image = $(xml).find('xstep\\:image').text() || $(xml).find('image').text() || $(xml).find('[nodename=xstep\\:image]').text();
		if (!image) {
			image = this.default_image(xml);
		}
		var pubtime = Date.parse(pubDate);
		var date_str = this.format_date(pubtime);
		var item = {
			title: title,
			link: link,
			pubDate: pubDate,
			pubtime: pubtime,
			date_str: date_str,
			description: description,
			image: image
		}
		return item;
	}
	this.default_image = function(xml) {
		return '';
	}
	this.format_date = function(pubtime) {
		var dateobj = new Date();
		dateobj.setTime(pubtime);
		var year = dateobj.getFullYear();
		var month = dateobj.getMonth() + 1;
		var day = dateobj.getDate();
		var date_str = year + '.' + (month < 10 ? '0' : '') + month + '.' + (day < 10 ? '0' : '') + day;
		return date_str;
	}
	this.open_tag = function(xml) {
		return '<ul>';
	}
	this.is_new = function(pubtime) {
		return ((this.now - pubtime) < this.new_range);
	}
	this.item_html = function(item, index, count) {
		var class_name = (index == 0 ? 'first' : ((count - index) == 1 ? 'last' : ''));
		if(this.is_new(item.pubtime)){
			class_name = (class_name != '' ? ' ' : '') + 'new';
		}
		var html =
			'<dl><dt' + (class_name != '' ? ' class="' + class_name + '"' : '') + '>' + item.date_str + '</dt><dd><a href="' + item.link + '" target="' + this.link_type + '">' + item.title + '</a></dd></dl>';
		return html;
	}
	this.close_tag = function(xml) {
		return '</ul>';
  }
  /**
   * コンストラクタに引数としてオブジェクトを渡すことで、
   * そのオブジェクトでfeedreaderをオーバーライドすることができる。
   * new feedreader({
   *   loading_html: function() {},
   *   error_html: function() {},
   *   no_item_html: function {},
   *   new_range: int,
   *   open_tag: function() {},
   *   item_html: function() {},
   *   cloase_tag: function() {}
   * });
   * 再定義する必要の無いメソッドは値を指定しないこと。
   */
	if (typeof(override) == 'object') {
    var superclass = new feedreader();
    var extended = jQuery.extend({}, superclass, override);
    return extended;
	}
}

feedreader.photo_html = {
  item_html: function(item) {
	  var html = '<div class="clearfix feed_photo">';
		html += '<div class="newsPh"><a href="'+item.link+'">';
	  html += '<img src="'+item.image+'" /></a></div>';
		html += '<div class="description">';
	  html += '<h3><a href="'+item.link+'">'+item.title+'</a></h3>';
	  html += '<p>'+item.description+'</p>';
	  html += '<span class="date">'+item.date_str+'</span>';
		html += '</div>';
		html += '</div>';
	  return html;
  }
}
feedreader.infomation_feed_html = {
  item_html: function(item) {
	  var html = '<dl class="clearfix"><dt>' + item.date_str + '</dt><dd><a href="' + item.link + '" target="' + this.link_type + '">' + item.title + '</a></dd></dl>';
	  return html;
  }
}
feedreader.top_topics = {
  new_range: 864000000,
  item_html: function(item) {
	  var target = this.link_type;
	  var link_tag = function(content) {
		  return '<a href="' + item.link + '" target="' + target + '">'+content+'</a>';
	  };
	  var html;
	  html = '<div class="mb15">'+ link_tag('<img src="'+item.image+'" width="304" height="220" alt="" />') + '</div>';
	  html += '<dl><dt>' + link_tag(item.title);
    if (this.is_new(item.pubtime)) {
      html += '<img src="/resource/image/top/icon_new.gif" width="37" height="12" alt="NEW" />';
    }
    html += '</dt>';
	  html += '<dd>'+item.description+'</dd>';
	  html += '<dd class="date">'+item.date_str+'</dd>';
	  html += '</dl>';
	  return html;
  }
}
feedreader.top_column = {
  item_html: function(item) {
	  var target = this.link_type;
	  var link_tag = function(content) {
		  return '<a href="' + item.link + '" target="' + target + '">'+content+'</a>';
	  };
	  var html;
	  html = '<div class="mb10">'+ link_tag('<img src="'+item.image+'" />') + '</div>';
	  html += '<dl><dt>' + link_tag(item.title) + '</dt>';
	  html += '<dd>'+item.description+'</dd>';
	  html += '<dd class="date">'+item.date_str+'</dd>';
	  html += '</dl>';
	  return html;
  }
}
feedreader.top_archive = {
  item_html: function(item) {
	  var target = this.link_type;
	  var link_tag = function(content) {
		  return '<a href="' + item.link + '" target="' + target + '">'+content+'</a>';
	  };
	  var html;
	  html = '<div class="mb5">'+ link_tag('<img src="'+item.image+'" width="120" height="90" alt="" />') + '</div>';
	  html += '<dl><dt>' + link_tag(item.title) + '</dt>';
	  html += '</dl>';
	  return html;
  }
}
feedreader.feature_html = {
	open_tag: function() {
		//return '<div class="feed_feature">';
		return '';
	},
  item_html: function(item, index) {
		var html = '';
		if (index == 0) {
			// 最初の1件の場所のHTML
			html += '<div class="ct_mltext text_lf clearfix">';
			html += '<div class="body first">';
			if (this.is_new(item.pubtime)) {
				html += '<span class="new">NEW!</span><br>';
			}
			html += '<span class="title"><a href="'+item.link+'">'+ item.title + '</a></span><br />';
			html += '<div class="description">'+item.description+'</div>';
			html += '<span class="date">'+item.date_str+'</span><br />';
			html += '<a href="'+item.link+'"><img class="lead_image" src="'+item.image+'"></a><br/>';
			html += '</div></div>';
			html += '<div class="ct_mltext text_lf clearfix">';
			html += '<div class="body">';
		} else {
			// 右側の小さいリスト表示の部分
			html += '<div class="feed_photo clearfix">';
			html += '<span class="newsPh">';
			html += '<a href="'+item.link+'">';
			html += '<img class="lead_image" src="'+item.image+'" /></a>';
			html += '</span>';
			html += '<div class="description">';
			html += '<h3><a href="'+item.link+'">'+item.title+'</a></h3>';
			html += item.description;
			html += '<span class="date">&lt;'+item.date_str+'&gt;</span>';
			html += '</div>';
			html += '</div>';
		}
	  return html;
  },
	close_tag: function() {
		var html = '';
		html += '</div>';
		html += '</div><div class="clear_lf"></div>';
		//html += '</div>';
		return html;
	},
	default_image: function() {
		// 画像がない記事で代わりに出す画像
		return '/resource/image/header/logo.gif';
	}
}
feedreader.under_topics = {
  item_html: function(item) {
	  var target = this.link_type;
	  var link_tag = function(content) {
		  return '<a href="' + item.link + '" target="' + target + '">'+content+'</a>';
	  };
	  var html;


	  html = '<h3>' + link_tag(trim(item.title,12)) + '</h3>';
	  html+= '<div class="under_topic_image">' + link_tag('<img src="'+item.image+'" alt="image" width="116" />') + '</div>';

	  html += '<p>';
	  html += link_tag(trim(item.description,34));
	  html += '</p>';
	  return html;
  },
  open_tag: function(xml){
  	return '';
  },
  close_tag: function(xml){
  	return '';
  }
}
feedreader.recommend1 = {
  item_html: function(item) {
	  var target = this.link_type;
	  var link_tag = function(content) {
		  return '<a href="' + item.link + '" target="' + target + '">'+content+'</a>';
	  };
	  var html;


	  html = '<h3>オススメ記事１</h3>';
	  html+= '<div class="rank_image">' + link_tag('<img src="'+item.image+'" alt="image" width="69" />') + '</div>';

	  html += '<p>';
	  html += link_tag(trim(item.title,17));
	  html += '</p>';
	  return html;
  },
  open_tag: function(xml){
  	return '';
  },
  close_tag: function(xml){
  	return '';
  }
}
feedreader.recommend2 = {
  item_html: function(item) {
	  var target = this.link_type;
	  var link_tag = function(content) {
		  return '<a href="' + item.link + '" target="' + target + '">'+content+'</a>';
	  };
	  var html;


	  html = '<h3>オススメ記事２</h3>';
	  html+= '<div class="rank_image">' + link_tag('<img src="'+item.image+'" alt="image" width="69" />') + '</div>';

	  html += '<p>';
	  html += link_tag(trim(item.title,17));
	  html += '</p>';
	  return html;
  },
  open_tag: function(xml){
  	return '';
  },
  close_tag: function(xml){
  	return '';
  }
}
feedreader.recommend3 = {
  item_html: function(item) {
	  var target = this.link_type;
	  var link_tag = function(content) {
		  return '<a href="' + item.link + '" target="' + target + '">'+content+'</a>';
	  };
	  var html;


	  html = '<h3>オススメ記事３</h3>';
	  html+= '<div class="rank_image">' + link_tag('<img src="'+item.image+'" alt="image" width="69" />') + '</div>';

	  html += '<p>';
	  html += link_tag(trim(item.title,17));
	  html += '</p>';
	  return html;
  },
  open_tag: function(xml){
  	return '';
  },
  close_tag: function(xml){
  	return '';
  }
}
feedreader.ranking1 = {
  item_html: function(item) {
	  var target = this.link_type;
	  var link_tag = function(content) {
		  return '<a href="' + item.link + '" target="' + target + '">'+content+'</a>';
	  };
	  var html;


	  html = '<h3>ランキング１位</h3>';
	  html+= '<div class="rank_image">' + link_tag('<img src="'+item.image+'" alt="image" width="69" />') + '</div>';

	  html += '<p>';
      html += link_tag(trim(item.title,17));
	  html += '</p>';
	  return html;
  },
  open_tag: function(xml){
  	return '';
  },
  close_tag: function(xml){
  	return '';
  }
}
feedreader.ranking2 = {
  item_html: function(item) {
	  var target = this.link_type;
	  var link_tag = function(content) {
		  return '<a href="' + item.link + '" target="' + target + '">'+content+'</a>';
	  };
	  var html;

      html = '<h3>ランキング２位</h3>';
	  html+= '<div class="rank_image">' + link_tag('<img src="'+item.image+'" alt="image" width="69" />') + '</div>';


	  html += '<p>';
      html += link_tag(trim(item.title,17));
	  html += '</p>';
	  return html;
  },
  open_tag: function(xml){
  	return '';
  },
  close_tag: function(xml){
  	return '';
  }
}
feedreader.ranking3 = {
  item_html: function(item) {
	  var target = this.link_type;
	  var link_tag = function(content) {
		  return '<a href="' + item.link + '" target="' + target + '">'+content+'</a>';
	  };
	  var html;

	  html = '<h3>ランキング３位</h3>';
	  html+= '<div class="rank_image">' + link_tag('<img src="'+item.image+'" alt="image" width="69" />') + '</div>';

	  html += '<p>';
	  html += link_tag(trim(item.title,17));
	  html += '</p>';
	  return html;
  },
  open_tag: function(xml){
  	return '';
  },
  close_tag: function(xml){
  	return '';
  }
}
feedreader.new_topics = {
	item_html: function(item, index, count) {

		var target = this.link_type;
		var link_tag = function(content) {
			return '<a href="' + item.link + '" target="' + target + '">'+content+'</a>';
		};

		var html;

		html = '<div class="sub_topic">';
		html += '<div class="sub_topic_image">' + link_tag('<img src="'+item.image+'" width="95" alt="' + item.title + '" />') + '</div>';
		html += '<div class="sub_topic_title">' + link_tag(trim(item.title,22)) + '</div>';
		html += '</div>';

		return html;
	},
	open_tag: function(xml){
		return '';
	},
	close_tag: function(xml){
		return '';
	}
}
feedreader.main_topics = {
	item_html: function(item, index) {

		var target = this.link_type;
		var link_tag = function(content) {
			return '<a href="' + item.link + '" target="' + target + '">'+content+'</a>';
		};

		var html;

		html = '<h3>' + link_tag(item.title) + '</h3>';
		html += '<div class="new_topic_image">' + link_tag('<img src="'+item.image+'" width="190" alt="" />') + '</div>';
		html += '<div class="left_box">';
		html += '<p>'+link_tag(trim(item.description,90))+'</p>';
		html += '</div>';

		return html;
	},
	open_tag: function(xml){
		return '';
	},
	close_tag: function(xml){
		return '';
	}
}
feedreader.jpop_topics = {
	item_html: function(item, index) {

		var target = this.link_type;
		var link_tag = function(content) {
			return '<a href="' + item.link + '" target="' + target + '">'+content+'</a>';
		};

		var html;

		html = '<h3>' + link_tag(item.title) + '</h3>';
		html += '<div class="new_topic_image">' + link_tag('<img src="'+item.image+'" width="190" alt="" />') + '</div>';
		html += '<div class="left_box">';
		html += '<p>'+link_tag(trim(item.description,90))+'</p>';
		html += '</div>';

		return html;
	},
	open_tag: function(xml){
		return '';
	},
	close_tag: function(xml){
		return '';
	}
}
feedreader.sub_topics = {
	item_html: function(item, index, count) {

		var target = this.link_type;
		var link_tag = function(content) {
			return '<a href="' + item.link + '" target="' + target + '">'+content+'</a>';
		};

		var html;

		//１番目の記事はスルー
		if(index > 0){

			if((index + 1) == count){
				html = '<div class="sub_topic03 sub_topic_border">';
			}else{
				html = '<div class="sub_topic02">';
			}

			html += '<div class="sub_topic">';
			html += '<div class="sub_topic_image">' + link_tag('<img src="'+item.image+'" width="95" alt="' + item.title + '" />') + '</div>';
			html += '<div class="sub_topic_title">' + link_tag(trim(item.title,22)) + '</div>';
			html += '</div>';

				html += '</div>';

			if((index + 1) == count){
				html += '<div class="clearfix"></div>';
			}

		}else{

			html = '';

		}

		return html;
	},
	open_tag: function(xml){
		return '';
	},
	close_tag: function(xml){
		return '';
	}
}
/** trimming script **/
function trim(str, size) {

	str = remove_newline(str);

	if(str.length > size){
		var cutstring = str.substring(0, size);
		var byte = countByte(cutstring);
		var tmp = "";
		if (byte < size*2) {
			for(k=0; k < (size*2-byte)*2; k++){
				tmp = str.substring(0,size + k);
				if (countByte(tmp) >= size*2) {
				break;
				}
			}
		}
		if(tmp){
			return tmp + '...';
		} else {
			return str.substring(0, size) + '...';
		}
	} else {
		return str;
	}
}
function countByte(str) {
	var byte = 0;
	for (j=0; j < str.length; j++) {
	str.charCodeAt(j) < 0x100 ? byte++ : byte += 2;
	}
	return byte;
}
function remove_newline(text){
	text = text.replace(/\r\n/g, "");//IE
	text = text.replace(/\n/g, "");//Firefox
	text = text.replace(/　/g," ");//space
	return text;
}
/**
 * Local variables:
 * indent-tabs-mode: t
 * tab-width: 2
 * js-indent-level: 2
 * write-file-functions: nil
 * End:
 */

