/**
* Callback function that displays the content.
*
* Gets called every time the user clicks on a pagination link.
*
* @param {int}page_index New Page index
* @param {jQuery} jq the container with the pagination links as a jQuery object
*/
function pageselectCallback(page_index, jq){
	// Get number of elements per pagionation page from form
	var items_per_page = 5;
	var max_elem = Math.min((page_index+1) * items_per_page, displayedNews.length);
	var newcontent = '';

	// Iterate through a selection of the content and build an HTML string
	for(var i=page_index*items_per_page; i<max_elem; i++) {
		if (displayedNews[i].show === true || displayedNews[i].show === undefined){
			newcontent += 
				'<div class="newsitem">'
					+'<a href="'+displayedNews[i].link+'">'
						+'<h3>'+displayedNews[i].title+'</h3>'
					+'</a>'
					+(displayedNews[i].date ? '<p class="date">'+displayedNews[i].date+'</p>' : '')
					+'<p>'
						+displayedNews[i].introtext
					+'</p>'
					+'<a class="readmore" href="'+displayedNews[i].link+'">'
					+'Read more / </a>'
					+ '<div class="clear"></div>'
				+'</div>';
		}
	}

	// Replace old content with new content
	Q('#newsitems_content').html(newcontent);

	// Prevent click eventpropagation
	return false;
}

var displayNews = function(start){
	
	var html = '';
	
	html += '<a onclick="displayNews('+(start-5)+')">previus</a>';
	html += 'showing '+start+' to '+(start+5)+' of '+news.entries.length;
	html += '<a onclick="displayNews('+(start+5)+')">next</a>';
	
	Q('#newsitems_content').html(html);
};

var links = function () {
	Q('#linkitems_content > div').each(function (i) {
		var categoryTitle = Q(this).attr('category') || 'None';
		var category = Q('div.category[title="' + categoryTitle + '"]')
		if (category.length == 0){
			var category = Q(
					'<div class="category" title="' 
					+ categoryTitle + '"><h3>' 
					+ categoryTitle + '</h3></div>');
			Q('#linkitems_content').append(category);
		}
		category.append(Q(this));
	});
	
	Q('.category > div').hide();
	
	Q('.category')
		.click(function(){
			var hiddenChildren = Q(this).children('div').filter(':hidden');
			log(hiddenChildren);
			if (hiddenChildren.length > 0){
				hiddenChildren.show();
				Q('h3',this).css('color','#F47B20');
			}
			else {
				Q(this).children('div').hide();
				Q('h3',this).css('color','#fff');
			}
		});

	Q('#link_keywords').keydown(function(e){
		setTimeout(function(e){
			var keywords = Q('#link_keywords').val();
			//alert('keywords:' + keywords);
			//alert(e.which);
			// if (e.which === 8){
				// keywords = keywords.slice(0,keywords.length - 1);
			// } else {
				// keywords += String.fromCharCode(e.which);
			// }
			keywords = keywords.split(' ');
			
			if (keywords.length === 1 && keywords[0] === '') {
				//alert('return early');
				return;
			}
			
			//mark all the ones that match as found
			Q.each(keywords, function(index, word){
			
				//alert('word:' + word);
				var re = new RegExp(word,'i');
				
				Q('.category > div').each(function(){
					//alert([this.innerHTML.search(re),this.innerHTML,re]);
					if ( this.innerHTML.search(re) !== -1) {
						Q(this).show();
					} else {
						Q(this).hide();
					}
					
				});
				
			});
		},100,e);
	});
};

var createPagination = function(size){
	Q("#newspagination_content").pagination(size, {
		items_per_page:5,
		num_display_entries:10,
		current_page:0,
		num_edge_entries:0,
		prev_text:"Prev",
		next_text:"Next",
		ellipse_text:"...",
		prev_show_always:true,
		next_show_always:true,
		callback:pageselectCallback
	});
}


var filterNews = function(e){
	displayedNews = [];
	setTimeout(function(e){
		var keywords = Q('#news_keywords').val().split(' ');
		//var date = Q('#news_date').val();
		// var month = date.split(' ');
		// month = new Date(month[1], month[0],0);
		
		
		
		Q.each(news.entries,function(index, item){
			//log(index, item);
			var remove = false;
			var itemDate = new Date(item.time*1000);
			
			//match keywords
			Q.each(keywords, function(index, word){
				var re = new RegExp(word,'i');
				var found = 0;
				Q.each(item, function(prop, text){
					if ( text.search(re) !== -1) {
						found++;
					}
				});
				if (!found){
					remove = true;
				}
			});
			
			//match date
			// if (
				// !(itemDate > month && itemDate < month.setMonth(month.getMonth()+1))
				// && !(Q('#news_date').val() === '0' && item.time === '0')
				// && !(Q('#news_date').val() === '')
			// ) {
				// remove = true;
			// }
			
			if (!remove){
				displayedNews.push(item);
			}
		});
		
		//mark all the ones that match as found
		
		createPagination(displayedNews.length);
		
	},10,e);
};

Q(function(){
	links();
	
	// When document has loaded, initialize pagination
	displayedNews = news.entries;
	createPagination(displayedNews.length);
	
	
	var months = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];
	Q('#news_date').addOption('0','Unknown');
	//generate filter dates
	Q.each(news.entries, function(index, item){
		if (item.date){
			var then = new Date(parseInt(item.time) * 1000);
			var text = months[then.getMonth()] + ' ' + then.getFullYear();
			var value = then.getMonth() + ' ' + then.getFullYear();
			Q('#news_date').addOption(value,text);
		}
	});
	Q('#news_date').val('');
	
	Q('#news_keywords').keydown(filterNews);
	Q('#news_date').change(filterNews);
})
