(function($){
	$.fn.sugestnews = function(options) {

		var $ = jQuery;
	
		var defaults = {
		  	source: ['http://ulubioneteksty.pl/rss'],
			proxyUrl: 'proxy.php',
			proxyUrl: '../proxy.php',
			proxyUrl: '../../proxy.php',
			limitDescription: 30,
			limitDescriptionSuffix: "...",
			limitItems: 3,
			stripHtml: true,
			prettyDate: true,
 			format: '<li><h4>{title} - {title}</h4><div class="description">{description}</div></li>',
			animationSpeed: 1000,
			random: false,
			refresh: 10000,
			dateFormat: 'd-m-Y',
			showFilter: function(){}
		  },
		settings = $.extend({}, defaults, options);
		
		var newsHolder 		= this;
		var templateVars	= ['title', 'link', 'description', 'date', 'prettyDate', 'image', 'websiteTitle', 'websiteLink']
		var items			= [];
		var timer;
		var previous 		= ''; 
			
		init();
			
		function init(){
		
			if(settings.refresh > 0){
				clearTimeout(timer);
			}
			
			items = [];
		
			load( settings.source );
		}
		
		function show( items ){
			
			var rendered_items = '';
			for(var idx in items){
				var template = settings.format;
				var item = items[idx];
				
				settings.showFilter.call(item);
				
				for(var var_idx in templateVars) {
					var_name = templateVars[var_idx];
					if(var_name == 'title') {
						template = template.replace(new RegExp('{' + var_name + '}', 'g'), limitText(stripHtml(item[var_name]), settings.limitDescription, settings.limitDescriptionSuffix));
					}
					if(var_name == 'description') {
						template = template.replace(new RegExp('{' + var_name + '}', 'g'), limitText(stripHtml(item[var_name]), settings.limitDescription, settings.limitDescriptionSuffix));
					}	else {
						template = template.replace(new RegExp('{' + var_name + '}', 'g'), item[var_name]);
					}
				}	
				
				rendered_items += template;
			}
			
			var new_items = $(rendered_items).hide();
			if(rendered_items != previous) {
				previous = rendered_items;
				newsHolder.html(new_items.fadeIn(settings.animationSpeed));
			}
			
			if(settings.refresh > 0){
				timer = setTimeout(init, settings.refresh);
			}

		}
		

		function isArray(object) {
			if (object.constructor.toString().indexOf("Array") == -1) {
			  return false;
		   	} else {
			  return true;
			}
		}
		
		function load( source ){
			
			var data = '';
			if(isArray(source)) {
				data = source.join('|');
			} else {
				data = source;
			}
			
			$.ajax({
				type: 'POST',
				data: 'source=' + data + '&limit=' + settings.limitItems + '&date_format=' + settings.dateFormat + '&random=' + settings.random + '&rnd=' + Number(new Date()),
				url: settings.proxyUrl + '?' + Number(new Date()),
				dataType: 'json',
				success: parse
			});
		}
		
		function parse(json) {
			if(json.error) {
				newsHolder.html('<strong>ERROR:</strong> ' + json.error);
				return;
			}
			show(json);
		}
		
		function limitText( text, limit, suffix ){
			if(text.length > limit){
				text = text.substr(0, limit) + suffix;
			}
			return text;
		}
		

		function stripHtml( text ){
			if(settings.stripHtml) {
				var matchTag = /<(?:.|\s)*?>/g;
				return text.replace(matchTag, "");
			}
			return text;
		}

		
		return this;
	}
})(jQuery);
