/**
 * ajaxFeeder.js
 * @use 'GoogleAjaxFeedAPI - http://code.google.com/intl/ja/apis/ajaxfeeds/documentation/' & 'jQuery - http://jquery.com/'
 * 
 * @version: 0.5
 * @author: Takuma Ando
 * @created: Oct 4th, 2010
 * @updated: Oct 18th, 2010
 * @License: GPL v3(http://www.gnu.org/licenses/gpl-3.0.html)
 */

(function($){
	$(function(){
		$('.ajaxFeeder1').each(function(){
			var $wrapper = $(this);
			var $container = $(this).find('.ajaxFeederContainer1').clone();
			var $group = $container.find('.ajaxFeederGroup1').clone();
			
			var feeds = [];
			var denial = ($wrapper.children('.ajaxFeederDenial1').length) ? $wrapper.children('.ajaxFeederDenial1').eq(0).text() : '';
			var feedsLendth = $wrapper.children('.ajaxFeederFeed1').length;
			$wrapper.children('.ajaxFeederFeed1').each(function(index){
				$.ajax({
					url: 'http://ajax.googleapis.com/ajax/services/feed/load?q=' + encodeURIComponent($(this).text()) + '&v=1.0&num=10',
					dataType: 'jsonp',
					success: function(json, status){
						feeds.push(json);
						if ( feeds.length == feedsLendth ){
							$container.get(0).className.match(/ajaxFeederMaxLength(\d+)/i);
							var maxLength = (RegExp.$1) ? RegExp.$1 - 0: null;
							
							if( $container.hasClass('ajaxFeederMixFeeds1') && feeds.length > 1 ){
								var mixed = [];
								for( var i = 0; i < feeds.length; i++){
									var feed = feeds[i].responseData.feed;
									for( var j = 0; j < feed.entries.length; j++ ){
										if ( !denial || feed.entries[j].title.indexOf(denial) == -1 ) {
											var entry = feed.entries[j];
											entry.feedTitle = feed.title;
											entry.feedLink = feed.link;
											entry.publishedDate = ( entry.publishedDate ) ? new Date(entry.publishedDate): new Date();
											mixed.push(entry);
										}
									}
								}
								delete(feeds);
								mixed.sort(function(a, b){
									return b.publishedDate.getTime() - a.publishedDate.getTime();
								});
								maxlength = (maxLength) ? Math.min(maxLength, mixed.length) : mixed.length;
								
								var $feedContainer = $container.clone();
								if ( $group.length > 0 ){
									var $feedGroup = $feedContainer.find('.ajaxFeederGroup1');
									for(var i = 0; i < maxlength; i++){
										var $clonedGroup = $group.clone();
										$clonedGroup.find('.ajaxFeederFeedTitle1').text(mixed[i].feedTitle);
										$clonedGroup.find('.ajaxFeederFeedLink1').attr('href', mixed[i].feedLink);
										$clonedGroup.find('.ajaxFeederEntryDate1').text(dateFormat(mixed[i].publishedDate));
										$clonedGroup.find('.ajaxFeederEntryTitle1').text(mixed[i].title);
										$clonedGroup.find('.ajaxFeederEntryContent1').html(mixed[i].content);
										$clonedGroup.find('.ajaxFeederEntryContentSnippet1').html(mixed[i].contentSnippet);
										var $snippet = $clonedGroup.find('.ajaxFeederEntryContentSnippet1');
										if ( $snippet.length > 0 ){
											$snippet.get(0).className.match(/ajaxFeederSnippetSize(\d+)/i);
											var size = (RegExp.$1) ? RegExp.$1 - 0: null;
											var snippet = (size) ? mixed[i].contentSnippet.substring(0, size) : mixed[i].contentSnippet;
											$snippet.html(snippet);
										}
										$clonedGroup.find('.ajaxFeederEntryLink1').attr('href', mixed[i].link);
										$feedGroup.after($clonedGroup);
									}
									$feedContainer.find('.ajaxFeederGroup1').eq(0).remove();
									$wrapper.append($feedContainer);
								} else {
									$feedContainer.empty();
									for(var i = 0; i < maxlength; i++){
										var $clonedContainer = $container.clone();
										$clonedContainer.find('.ajaxFeederFeedTitle1').text(mixed[i].feedTitle);
										$clonedContainer.find('.ajaxFeederFeedLink1').attr('href', mixed[i].feedLink);
										$clonedContainer.find('.ajaxFeederEntryDate1').text(dateFormat(mixed[i].publishedDate));
										$clonedContainer.find('.ajaxFeederEntryTitle1').text(mixed[i].title);
										$clonedContainer.find('.ajaxFeederEntryContent1').html(mixed[i].content);
										var $snippet = $clonedContainer.find('.ajaxFeederEntryContentSnippet1');
										if ( $snippet.length > 0 ){
											$snippet.get(0).className.match(/ajaxFeederSnippetSize(\d+)/i);
											var size = (RegExp.$1) ? RegExp.$1 - 0: null;
											var snippet = (size) ? mixed[i].contentSnippet.substring(0, size) : mixed[i].contentSnippet;
											$snippet.html(snippet);
										}
										$clonedContainer.find('.ajaxFeederEntryContentSnippet1')
										
										$clonedContainer.find('.ajaxFeederEntryLink1').attr('href', mixed[i].link);
										$feedContainer.append($clonedContainer);
									}
									$wrapper.append($feedContainer.children());
								}
							} else {
								for( var i = 0; i < feeds.length; i++ ){
									var feed = feeds[i].responseData.feed;
									var $feedContainer = $container.clone();
									$feedContainer.find('.ajaxFeederFeedTitle1').text(feed.title);
									$feedContainer.find('.ajaxFeederFeedLink1').attr('href', feed.link);
									
									if ( $group.length > 0 ){
										var $feedGroup = $feedContainer.find('.ajaxFeederGroup1');
										for( var j = 0; j < feed.entries.length; j++ ){
											if ( !denial || feed.entries[j].title.indexOf(denial) == -1 ) {
												var $clonedGroup = $group.clone();
												$clonedGroup.find('.ajaxFeederEntryDate1').text(dateFormat(feed.entries[j].publishedDate));
												$clonedGroup.find('.ajaxFeederEntryTitle1').text(feed.entries[j].title);
												$clonedGroup.find('.ajaxFeederEntryContent1').html(feed.entries[j].content);
												$clonedGroup.find('.ajaxFeederEntryContentSnippet1').html(feed.entries[j].contentSnippet);
												var $snippet = $clonedGroup.find('.ajaxFeederEntryContentSnippet1');
												if ( $snippet.length > 0 ){
													$snippet.get(0).className.match(/ajaxFeederSnippetSize(\d+)/i);
													var size = (RegExp.$1) ? RegExp.$1 - 0: null;
													var snippet = (size) ? feed.entries[j].contentSnippet.substring(0, size) : feed.entries[j].contentSnippet;
													$snippet.html(snippet);
												}
												$clonedGroup.find('.ajaxFeederEntryLink1').attr('href', feed.entries[j].link);
												$feedGroup.after($clonedGroup);
											}
										}
										$feedContainer.find('.ajaxFeederGroup1').eq(0).remove();
										$wrapper.append($feedContainer);
									} else {
										$feedContainer.empty();
										for( var j = 0; j < feed.entries.length; j++ ){
											if ( !denial || feed.entries[j].title.indexOf(denial) == -1 ) {
												var $clonedContainer = $container.clone();
												$clonedContainer.find('.ajaxFeederEntryDate1').text(dateFormat(feed.entries[j].publishedDate));
												$clonedContainer.find('.ajaxFeederEntryTitle1').text(feed.entries[j].title);
												$clonedContainer.find('.ajaxFeederEntryContent1').html(feed.entries[j].content);
												$clonedContainer.find('.ajaxFeederEntryContentSnippet1').html(feed.entries[j].contentSnippet);
												var $snippet = $clonedContainer.find('.ajaxFeederEntryContentSnippet1');
												if ( $snippet.length > 0 ){
													$snippet.get(0).className.match(/ajaxFeederSnippetSize(\d+)/i);
													var size = (RegExp.$1) ? RegExp.$1 - 0: null;
													var snippet = (size) ? feed.entries[j].contentSnippet.substring(0, size) : feed.entries[j].contentSnippet;
													$snippet.html(snippet);
												}
												$clonedContainer.find('.ajaxFeederEntryLink1').attr('href', feed.entries[j].link);
												$feedContainer.append($clonedContainer);
											}
										}
										$wrapper.append($feedContainer.children());
									}
								}
							}
						}
					}
				});
			});
			
			$wrapper.empty();
		});
	});
	
	function dateFormat(dateText){
		var date = new Date(dateText);
		var yy = ( date.getYear() > 1900 ) ? date.getYear() : date.getYear() + 1900;
		var mm = ( date.getMonth() + 1 >= 10 ) ? date.getMonth() + 1 : '0' + (date.getMonth() + 1);
		var dd = ( date.getDate() >= 10 ) ? date.getDate() : '0' + date.getDate();
		return yy + '/' + mm + '/' + dd;
	}
})(jQuery);

