/* 
   RSS Feed reader/displayer
   author: Chris Hayes 
   Requires MooTools 1.0.
 
   You will need a proxy script on your server to be able to read remote RSS feeds
*/ 
 
var RssFeeder = new Class({
	options: {
		rss_periodical : null
	},
	
	initialize: function(options){
		this.setOptions(options); 
		this.ajax = null;

		if(!this.options.url || this.options.url == null) { alert('No RSS url given.'); return; }
		if(!this.options.rssdiv ||  this.options.rssdiv ==null) { alert('No element given to inject RSS feed in.'); return; }
		
		this.rssdiv = $(this.options.rssdiv);
		if(!this.rssdiv) { alert('RSS div "'+this.options.rssdiv+'" does not exist.'); return;}

		//click events
		//reload event
		if(this.options.reload && this.options.reload!=null && (this.reload = $(this.options.reload))){ 
			this.reload.addEvent('click',  this.refresh.bind(this));
		}
		
		//start auto-reloading event
		if(this.options.start && this.options.start!=null && (this.start = $(this.options.start))){ 
			this.start.addEvent('click',  this.refresh.bind(this));
			// stop  auto-reloading event
			if(this.options.stop && this.options.stop!=null && (this.stop = $(this.options.stop))){ 
				this.stop.addEvent('click',  this.refresh.bind(this));
			}
		}

		this.startajax();
	},

	startit: function(){
		$clear(this.options.rss_periodical); 	// prevent numerous requests

		/* styles */
		this.start.setStyle('font-weight', 'bold');
		this.stop.setStyle('font-weight', 'normal');
		this.rssdiv.addClass('ajax-loading'); 
		this.rssdiv.setStyle('opacity', 0.2);

		/* request new page  */                             
		this.options.rss_periodical = this.refresh.periodical(this.options.timer * 1000, this); 	// the refresh period starts here. time in milliseconds 
		this.ajax.request($time()); // 1st request
	},          

	stopit: function(){
		this.start.setStyle('font-weight', 'normal');
		this.stop.setStyle('font-weight', 'bold');

		$clear(this.options.rss_periodical); 	// stop timed ajax
		this.ajax.cancel(); 	// stop request - in case it was waiting for a response
	},

	startajax: function(){
		//alert (this.options.url);
		var ajax2 = new Request({ 
			url: this.options.url,
			/*update: rssdiv,*/
			method: 'get',
			evalScripts: false,
			onSuccess: this.createUl.bind(this),
			onFailure: function(){
				this.rssdiv.removeClass('ajax-loading'); 
				this.rssdiv.setStyle('opacity', 1);
			}
		});

		this.ajax = ajax2;
		randomUrlElement = $time() + $random(0, 100);
		this.rssdiv.addClass('ajax-loading');	// activate 'loading' spinner
		this.rssdiv.setStyle('opacity', 0.2);
		//alert(randomUrlElement);
		this.ajax.send(randomUrlElement);
	},

	refresh: function(bar){
		randomUrlElement = $time() + $random(0, 100);
		this.rssdiv.addClass('ajax-loading'); // activate 'loading' spinner
		this.rssdiv.setStyle('opacity', 0.2);
		this.ajax.send(randomUrlElement);
	},

	createUl: function(responseText){		
		this.rssdiv.empty().removeClass('ajax-loading'); 
		this.rssdiv.setStyle('opacity', 1);
		this.rssdiv.set('html', responseText);
	}
});
