(function($){

	if (!window.google)
	{
		alert('You must include the Google AJAX Feed API script');
	}    

	if (!google.feeds) google.load("feeds", "1");

	$.fn.jfeeds = function(options) {

		var defaults = {
			url : '',
			limit : 0,
			itemClass : 'feed_item',
			titleClass : 'feed_title',
			slideshow : false,
			settings : {},
			tags	: 'title,link',
			template : '<a href="{link}">{title}</a><br />'
		};
	
		var options = $.extend(defaults, options);
		var container = this;
		var tagsArray = options.tags.split(',');
	
		if (!options.url)
		{
			$(container).html('No feed specified');
			return false;
		}
	
		if (!google.feeds)
		{
			$(container).html('ERROR! Could not load google feed api');
			return false;
		}
	
		var feed = new google.feeds.Feed(options.url);
		feed.setResultFormat(google.feeds.Feed.XML_FORMAT);
	
		feed.load(function(result)
		{
			if (!result.error)
			{
				var items = result.xmlDocument.getElementsByTagName("item");
				var data = [];
	
				if (options.limit == '' || options.limit == 0 || options.limit > items.length)
				{
					options.limit = items.length;
				}
	
				$(container).html('');
	
				for (var i = 0; i < options.limit; i++)
				{
					var itemNodes = items[i].childNodes;
					var str = options.template;
	
					// loop over the child node of the item element
					for (var j=0; j < itemNodes.length; j++)
					{
						var itemNode = itemNodes[j];
						var type = itemNode.tagName;
	
						switch (type)
						{
							case 'title':
								var title = (itemNode.firstChild.nodeValue) ? itemNode.firstChild.nodeValue : itemNode.textContent;
								replace = '<span class="'+options.titleClass+'">'+title+'</span>';
							break;
							case 'media:group':
								var itemNodes2 = itemNode.childNodes;
								for (var k=0; k < itemNodes2.length; k++)
								{
									var itemNode2 = itemNodes2[k];
									var type2 = itemNode2.tagName;
	
									switch (type2)
									{
										case 'media:content':
										case 'media:thumbnail':
											var image = itemNode2.getAttribute("url");
											var height = itemNode2.getAttribute('height');
											var width = itemNode2.getAttribute('width');
											replace = '<img src="'+image+'" height="'+height+'" width="'+width+'" alt="" />';
											type2 = (type2 == 'media:content') ? 'content' : 'thumbnail';
										break;
										default:
											replace = (itemNode2.firstChild.nodeValue) ? itemNode2.firstChild.nodeValue : itemNode2.textContent;
										break;
									}
	
									var str = str.replace('{'+type2+'}', replace);			
								}
							break;
							case 'media:content':
							case 'media:thumbnail':
								var image = itemNode.getAttribute("url");
								var height = itemNode.getAttribute('height');
								var width = itemNode.getAttribute('width');
								replace = '<img src="'+image+'" height="'+height+'" width="'+width+'" alt="" />';
								type = (type == 'media:content') ? 'content' : 'thumbnail';
							break;
							default:
								replace = (itemNode.firstChild.nodeValue) ? itemNode.firstChild.nodeValue : itemNode.textContent;
							break;
						}
	
						var str = str.replace('{'+type+'}', replace);			
					}
	
					str = '<div class="'+options.itemClass+'">'+str+'</div>';
	
					$(container).append(str);
				}
				$(container).wrap('<div class="feed_container"></div>');
	
				if (options.slideshow)
				{
					var s_def = {items: '.'+options.itemClass, itemTitles: '.'+options.titleClass};
					var s_ops = $.extend(s_def, options.settings);
					$(container).jslideshow(s_ops);
				}
			}
		});
	};
})(jQuery);
