// This module on PenguinBlog3.
// Created by Orikasa,Tomohiro.

isHTTPreq = false;
function ckreq(){
	try {
		ob = new ActiveXObject("Msxml2.XMLHTTP");
		isHTTPreq = true;
		isIE = true;
	} catch(ex) {
		try {
			ob = new ActiveXObject("Microsoft.XMLHTTP");
			isHTTPreq = true;
			isIE = true;
		}catch(ex){
			try {
				ob = new XMLHttpRequest();
				isHTTPreq = true;
				isIE = false;
			}catch(ob){
//					isHTTPreq = false;
			}
		}
	}
}
ckreq();

var pb_rss = {
	maxLength : 10,
	viewLength : new Object,
	node : new Object ,
//	template : '<div id="#id#_title" class="pb_rss_title wablog-menu"><div class="reload" style=\"float:right\"><a href="#" onclick="pb_rss.loadXML(\'#id#\',\'#url#\'); return false;">[更新]</a></div><a href="#sitelink#">#title#</a> <a href="#url#"><img class="xml_icon" src="/image/xml.png" alt="xml icon" alt="RSS2.0" /></a></div><div id="#id#_body" class="pb_rss_body wablog-parts "><noscript></noscript>#body#</div>',
	template : '<div id="#id#_title" class="pb_rss_title wablog-menu"><a href="#sitelink#"><span class=\"wablog-menu-text\">#title#</span></a></div><div id="#id#_body" class="pb_rss_body wablog-parts "><noscript></noscript>#body#</div>',
	loadXML : function (id,url,rssurl,count) {
		if (count!=0) {
			pb_rss.viewLength[id] = eval(count);
		} else {
			pb_rss.viewLength[id] = pb_rss.maxLength;
		}
		var node = document.getElementById(id);
		if (!node) throw id+" isn't found";
		if (isHTTPreq) {
			var xml = new JKL.ParseXML('/feed/'+pb_rss.encodeURL(rssurl));
			var func = function (data) {
				pb_rss.drawHTML(node,id,url,rssurl,data);
			}
			xml.async(func);
			xml.parse();
		} else {
			node.innerHTML = '<p>IE for Mac をご利用の場合、<br />この枠内に<a href="'+url+'">RSS</a>情報を表示でき<br />ません。SafariやFireFoxなど<br />の別ブラウザをご利用いただ<br />きますようお願いします。</p>';
		}
	},

	encodeURL : function (str) {
		var chr = '';
		var uni = '';
		var res = '';

		str = str.replace(/http\:\/\//g,'');

		str = str.replace(/\:/g,'|');
		str = str.replace(/\//g,'\\');

		for (var i=0;i<str.length;i++) {
			cha = str.charAt(i); uni = str.charCodeAt(i);

			if (cha == ' ') {
				res += '+';
			} else {
				if (uni == 0x2a || uni == 0x2d || uni == 0x2e || uni == 0x5f || ((uni >= 0x30) && (uni <= 0x39)) || ((uni >= 0x41) && (uni <= 0x5a)) || ((uni >= 0x61) && (uni <= 0x7a))) {
					res = res + cha;
				} else {
					if ((uni >= 0x0) && (uni <= 0x7f)) {
						cha = '0' + uni.toString(16);
						res += '%' + cha.substr(cha.length - 2);
					} else if (uni > 0x1fffff) {
						res += '%' + (oxf0 + ((uni & 0x1c0000) >> 18)).toString(16);
						res += '%' + (0x80 + ((uni & 0x3f000) >> 12)).toString(16);
						res += '%' + (0x80 + ((uni & 0xfc0) >> 6)).toString(16);
						res += '%' + (0x80 + (uni & 0x3f)).toString(16);
					} else if (uni > 0x7ff) {
						res += '%' + (0xe0 + ((uni & 0xf000) >> 12)).toString(16);
						res += '%' + (0x80 + ((uni & 0xfc0) >> 6)).toString(16);
						res += '%' + (0x80 + (uni & 0x3f)).toString(16);
					} else {
						res += '%' + (0xc0 + ((uni & 0x7c0) >> 6)).toString(16);
						res += '%' + (0x80 + (uni & 0x3f)).toString(16);
					}
				}
			}
		}
		return res;
	},

	drawHTML : function(node,id,url,rssurl,data) {
		var html = pb_rss.template;
		var isAtom = false;
		var c = 0;

		var siteLink = '';
		var siteTitle = '';

		if (data['rdf:RDF']!=undefined) {
			// RSS 0.9 or 1.0
			obj = data['rdf:RDF']['item'];
			siteLink = data['rdf:RDF']['channel']['link'];
			siteTitle = data['rdf:RDF']['channel']['title'];
		} else if (data['rss']!=undefined) {
			// RSS 0.91 or 2.0
			obj = data['rss']['channel']['item'];
			siteLink = data['rss']['channel']['link'];
			siteTitle = data['rss']['channel']['title'];
		} else if (data['feed']!=undefined) {
			// ATOM
			isAtom = true
			obj = data['feed']['entry'];
			siteLink = data['feed']['link']['href'];
			siteTitle = data['feed']['title'];
		} else {
			return;
		}

		html = html.replace(/#id#/g,id);
		html = html.replace(/#url#/g,url);

		title = '<a class="title" href="'+siteLink+'">'+siteTitle+'</a>';
		html = html.replace(/#title#/g,siteTitle);
		html = html.replace(/#sitelink#/g,siteLink);

		if (obj['title']!=undefined) {
			obj[0] = obj;
		}

//		var body = '<ul class="list">';
		var body = '<div class=\"wablog-parts\">';
		for(i in obj) {
			if (!isNaN(i)) {
				var link = '';
				var title = '';

				if (!isAtom) {
					link = obj[i]['link'];
					title = obj[i]['title'];
				} else {
					link = obj[i]['link']['href'];
					title = obj[i]['title']['#text'];
				}
				if (link!='' && title!='') {
//					body += '<li>';
					body += '<span class=\"wablog-parts-text\">';
					body += '<a href="'+link+'" target="_blank">'+title+'</a>';
					body += '</span><br />';
//					body += '</li>';
					c++; if (c>pb_rss.viewLength[id]) break;
				}
			}
		}
//		body += '</ul>';
		body += '</div>';

		html = html.replace(/#body#/g,body);

		node.innerHTML = html;
	},

	init : function () {
	}
}

pb_rss.init();

