// REQUIRES
// Require "jkl-parsexml.js"
// Require CSS Block Class "entriesList"
/*DoNotErase*/if(typeof(RSS)=='undefined')RSS=function(){};

/**List(リスト／日付なし)**/
RSS.List = function (rssUrl, option) {
	//Callback method
	var addElements = function (root) {
		var itemCount = 0;
		if (typeof(root.rss) == "object") {
			var rss = root.rss;
			if (rss.channel.item) itemCount = rss.channel.item.length;
		} else return;
		var ul_div = document.createElement('ul');	
		var objBody = document.getElementById(base.myoption.containerId);
		objBody.appendChild(ul_div);
		for (var i=0; i<itemCount; i++) {
			var li = document.createElement('li');
			var link_a = document.createElement('a');
			link_a.href = rss.channel.item[i].link;
			link_a.target = base.myoption.linkTarget;
			link_a.innerHTML = rss.channel.item[i].title;		
			ul_div.appendChild(li);
			li.appendChild(link_a);
			if (i == base.myoption.maxEntries) break;
		}
	};
	var base = new RSS.BaseHandler(rssUrl, addElements, option);
};

/**Definition List(定義リスト／日付あり)**/
RSS.Definition = function (rssUrl, option) {
	//Callback method
	var addElements = function (root) {
		var itemCount = 0;
		if (typeof(root.rss) == "object") {
			var rss = root.rss;
			if (rss.channel.item) itemCount = rss.channel.item.length;
		} else return;
		var dl_div = document.createElement('dl');	
		var objBody = document.getElementById(base.myoption.containerId);
		objBody.appendChild(dl_div);
		for (var i=0; i<itemCount; i++) {
			//pre
			var pub = rss.channel.item[i].pubDate; //Mon, 28 May 2007 20:29:36 +0900
			var ary = pub.split(" ");
			var pDate = new Date(pub);
			//var pDate = new Date(ary[2] + ' ' + ary[1] + ', ' + ary[3]); //May 28 2007
			var dstr = pDate.getFullYear() + '.' + fmtD(pDate.getMonth()+1) + '.' + fmtD(pDate.getDate());
			//
			var dt = document.createElement('dt');
			var dd = document.createElement('dd');
			var link_a = document.createElement('a');
			dt.innerHTML = dstr;
			link_a.href = rss.channel.item[i].link;
			link_a.target = base.myoption.linkTarget;
			link_a.innerHTML = rss.channel.item[i].title;		
			dl_div.appendChild(dt);
			dd.appendChild(link_a);
			if (base.myoption.hasDescription) {
				var txt = document.createElement('div');
				txt.innerHTML = truncate( rss.channel.item[i].description, base.myoption.truncateChar );
				dd.appendChild(txt);
			}
			dl_div.appendChild(dd);
			if (i == base.myoption.maxEntries) break;
		}
	};
	var fmtD = function ( val ) {
		if (val < 10) return "0" + val;
		return "" + val;
	};
	var truncate = function ( str, length ) {
		if (str == null) return '';
		return str.length > length ? str.slice(0, length - 3) + '...' : str;	
	};

	var base = new RSS.BaseHandler(rssUrl, addElements, option);
};

/**基本**/
RSS.BaseHandler = function(rssUrl, callBack, option){
	//XML URL
	this.url = rssUrl;
	//CallBack func.
	this.callBack = callBack;
	//Options
	this.myoption = {
		containerId : "entriesList",
		maxEntries : 5,
		hasDescription : false,
		truncateChar : 80,
		linkTarget : "_blank"
	}
	for (var key in option) this.myoption[key] = option[key];
	//Load rss by async.
	this.loadXMLFile();
};

//XML読み込む
RSS.BaseHandler.prototype.loadXMLFile = function () {
	var http = new JKL.ParseXML( this.url );
	http.setOutputArrayElements( ["item"] );	
	http.async( this.callBack );
	http.parse();
};