/* getRSS : jQuery plugin for RSS feed parser.
 * Auther : Atsun IIDA @Commons Plus, co., ltd.
 */

jQuery.extend({
	getRSS	: function(params) {
		
		var _type		= params.type;
		var _fetcher	= params.fetcher;
		var _rss		= params.rss;
		var _success	= params.success;
		
		var _xhr = jQuery.ajax(
				{
				type			: _type ? _type : 'POST',
				url				: _fetcher ? _fetcher : _rss,
				data			: _fetcher ? _rss : '',
				processData		: false,
				success			: function(response, success)
					{
						_onLoadXMLComplete(response, _success);
					}
				}
			);
		
		function _onLoadXMLComplete(response, complete) {
			if(complete) {
				complete(_parseFeed(response));
			}
		}
		
		function _parseFeed(xml) {
			var $xml = jQuery(xml);
			var $ch = $xml.find("channel:first");		// RSS
			var $feed = $xml.find("feed:first");		// ATOM
			
			var feed = {
					channel	: {
						'date'			:
							$ch.find('lastBuildDate:first').text()	||
							$ch.find('pubDate:first').text()		||
							$ch.find('dc\\:date:first').text()		||
							$ch.find('date:first').text()			||
							$feed.find('updated:first').text(),
						'language'		:
							$ch.find('language').text()				||
							$ch.find('dc\\:language').text()		||
							$feed.find('xml:lang').text(),
						'title'			:
							$ch.find('title:first').text()			||
							$feed.find('title:first').text(),
						'link'			:
							$ch.find('link:first').text()			||
							$feed.find('link:first').attr('href'),
						'description'	:
							$ch.find('description:first').text()	||
							$feed.find('description:first').text()	||
							$feed.find('subtitle:first').text()
					},
					items	: [],
					xml		: $xml
				};
			
			$xml.find("item").each(function(i) {		// RSS
					var $this = jQuery(this);
					var item = {
						'id'			:
							$this.find('id').text(),
						'date'			:
							$this.find('pubDate').text()			||
							$this.find('dc\\:date').text()			||
							$this.find('date').text(),
						'title'			:
							$this.find('title').text(),
						'link'			:
							$this.find('link').text(),
						'description'	:
							$this.find('description').text()
					};
					
					feed.items.push(item);
				}
			);
			
			$xml.find("entry").each(function(i) {		// ATOM
					var $this = jQuery(this);
					var item = {
						'id'			:
							$this.find('id').text(),
						'date'			:
							$this.find('modified').text()			||
							$this.find('updated').text(),
						'title'			:
							$this.find('subtitle').text()			||
							$this.find('title').text(),
						'link'			:
							$this.find('link').attr('href'),
						'description'	:
							$this.find('content').text()			||
							$this.find('description').text()
					};
					
					feed.items.push(item);
				}
			);
			
			return feed;
		}
		
		return _xhr;
	}
});
