function News(aData, sPage, oSettings, filterFn) {
	var SELF = this;
	var MONTH
	var HTML = {
		LatestNews: "\
			<li class='article'>\
				<div class='article-date'>{month} {date}. {year}</div>\
				<div class='article-headline'><a href='{url}'target='_blank'>{headline}</a></div>\
				<div class='article-desc'>{desc}</div>\
			</li>\
		",
		HomepageLatestNews: "\
			<div class='article-date'>{month} {date}. {year}</div>\
			<div class='article-headline'>{headline}</div>\
			<div class='article-desc'>{desc}</div>\
			<a href='{url}'>read more &gt;</a>\
		"
	};
	var SETTINGS = oSettings || {
		nStories: 5, //number of news to display
		maxDescLength: 100 // maximum number of characters in 
	};
	
	function _SortByDate(a, b) {
		return -(new Date(a.date).getTime() - new Date(b.date).getTime());
	}
	aData.sort(_SortByDate);
	
	this.attachTo = function(container) {
		var oContainer = $(container);
		var sHTML = "";
		var aNews = (!filterFn)? aData : aData.find(filterFn);
		if (SETTINGS.nStories < 0) SETTINGS.nStories = aNews.length;
		for (var i=0; i<SETTINGS.nStories; i++) {
			var oStory = aNews[i];
			if (!oStory) break;
			var dStory = new Date(oStory.date);
			if (SETTINGS.maxDescLength < 0) {
				var sDesc = oStory.desc;
			} else {
				var sDesc = oStory.desc.substr(0, SETTINGS.maxDescLength) + ((oStory.desc.length > SETTINGS.maxDescLength)? " ..." : "");
			}
			var oFormatedStory = {
				"url": oStory.url,
				"headline": oStory.headline,
				"month": dStory.getMonthTextual(3),
				"date": dStory.getDate().toString(),
				"year": dStory.getFullYear().toString(),
				"desc": sDesc
			}
			sHTML += HTML[sPage].supplant(oFormatedStory);
		}
		oContainer.innerHTML = sHTML;
	}
}