// Based on http://www.xml.com/pub/a/2006/09/13/rss-and-ajax-a-simple-news-reader.html

var RSSChannel = new Class({
	initialize:function(rssxml){
		/*A*/
		/*required string properties*/
		this.title;
		this.link;
		this.description;
		
		/*optional string properties*/
		this.language;
		this.copyright;
		this.managingEditor;
		this.webMaster;
		this.pubDate;
		this.lastBuildDate;
		this.generator;
		this.docs;
		this.ttl;
		this.rating;
	
		/*optional object properties*/
		this.category;
		this.image;
	
		/*array of RSS2Item objects*/
		this.items = new Array();
		
		/*B*/
		var chanElement = rssxml.getElementsByTagName("channel")[0];
		var itemElements = rssxml.getElementsByTagName("item");
		
		/*C*/
		for (var i=0; i<itemElements.length; i++){
			Item = new RSSItem(itemElements[i]);
			this.items.push(Item);
		}
		
		/*D*/
		var properties = new Array("title", "link", "description", "language", "copyright", "managingEditor", "webMaster", "pubDate", "lastBuildDate", "generator", "docs", "ttl", "rating");
		var tmpElement = null;
		for (var i=0; i<properties.length; i++){
			tmpElement = chanElement.getElementsByTagName(properties[i])[0];
			if (tmpElement!= null)
				eval("this."+properties[i]+"=tmpElement.childNodes[0].nodeValue");
		}
		
		/*E*/
		this.category = new RSSCategory(chanElement.getElementsByTagName("category")[0]);
		this.image = new RSSImage(chanElement.getElementsByTagName("image")[0]);
	}
});

var RSSItem = new Class({
	initialize: function(itemxml){
		/*A*/
		/*required properties (strings)*/
		this.title;
		this.link;
		this.description;
		
		/*optional properties (strings)*/
		this.author;
		this.comments;
		this.pubDate;
		
		/*optional properties (objects)*/
		this.category;
		this.enclosure;
		this.guid;
		this.source;
		
		/*B*/
		var properties = new Array("title", "link", "description", "author", "comments", "pubDate");
		var tmpElement = null;
		for (var i=0; i<properties.length; i++){
			tmpElement = itemxml.getElementsByTagName(properties[i])[0];
			if (tmpElement != null)
				eval("this."+properties[i]+"=tmpElement.childNodes[0].nodeValue");
		}
		
		/*C*/
		this.category = new RSSCategory(itemxml.getElementsByTagName("category")[0]);
		this.enclosure = new RSSEnclosure(itemxml.getElementsByTagName("enclosure")[0]);
		this.guid = new RSSGuid(itemxml.getElementsByTagName("guid")[0]);
		this.source = new RSSSource(itemxml.getElementsByTagName("source")[0]);
	}
});

var RSSCategory = new Class({
	initialize: function(catElement){
		if (catElement == null) {
			this.domain = null;
			this.value = null;
		}else{
			this.domain = catElement.getAttribute("domain");
			this.value = catElement.childNodes[0].nodeValue;
		}
	}
});

var RSSImage = new Class({
	initalize: function(imgElement){
		if (imgElement == null) {
			this.url = null;
			this.link = null;
			this.width = null;
			this.height = null;
			this.description = null;
		}else{
			imgAttribs = new Array("url","title","link","width","height","description");
			for (var i=0; i<imgAttribs.length; i++)
				if (imgElement.getAttribute(imgAttribs[i]) != null)
					eval("this."+imgAttribs[i]+"=imgElement.getAttribute("+imgAttribs[i]+")");
		}
	}
});

var RSSEnclosure = new Class({
	initialize: function(encElement){
		if (encElement == null) {
			this.url = null;
			this.length = null;
			this.type = null;
		} else {
			this.url = encElement.getAttribute("url");
			this.length = encElement.getAttribute("length");
			this.type = encElement.getAttribute("type");
		}
	}
});

var RSSGuid = new Class({
	initialize: function(guidElement){
		if (guidElement == null) {
			this.isPermaLink = null;
			this.value = null;
		}else{
			this.isPermaLink = guidElement.getAttribute("isPermaLink");
			this.value = guidElement.childNodes[0].nodeValue;
		}
	}
});

var RSSSource = new Class({
	initialize: function(souElement){
		if (souElement == null) {
			this.url = null;
			this.value = null;
		} else {
			this.url = souElement.getAttribute("url");
			this.value = souElement.childNodes[0].nodeValue;
		}
	}
});

url+=((url.indexOf("?")==-1)?"?":"&")+"cacheHack";
var rssReaderRemote=new Ajax(url,{
	onComplete:function(ret){
		ret=(new DOMParser()).parseFromString(ret, "text/xml");
		var channel=new RSSChannel(ret);
		var channelDiv=new Element("div");
		for(var i=0;i<channel.items.length && i<items;i++){
			var itemDiv=new Element("div").addClass("weblog-post");
			itemDiv.setStyle("margin-bottom","10px");
			var titleDiv=new Element("div").setHTML("<h3><a href='"+channel.items[i].link+"'>"+channel.items[i].title+"</a></h3>").addClass("weblog-title");
			var descDiv=new Element("div").setHTML(channel.items[i].description.substr(0,channel.items[i].description.indexOf(" ",length)).replace(/<\/?[^>]+(>|$)/g,"")+"... <a href='"+channel.items[i].link+"'>Continue lendo.</a>").addClass("post");
			channelDiv.adopt(itemDiv.adopt(titleDiv).adopt(descDiv));
		}
		$("RSSReader").adopt(channelDiv);
	},
	method:"post"
}).request();
