/* 
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({
  Implements: Options,
  
  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();
  },

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

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

  createTable: function(responseText, responseXML) {		
    this.rssdiv.removeClass('ajax-loading');
    
    if (window.ActiveXObject) {   
      var xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
      xmlDoc.loadXML(responseText);
      responseXML = xmlDoc;
    }    
    
    var newsitems = responseXML.getElementsByTagName('item');
    var list = new Element('ul').injectInside(this.rssdiv);
    
    for(var i = 0; i < newsitems.length; i++) {
      var item = newsitems[i];      
      var title = item.getElementsByTagName('title')[0].firstChild.data;
      var link = item.getElementsByTagName('link')[0].firstChild.data;
      var li = new Element('li', {text: "&#187;"}).inject(list);
      li.innerHTML = '&#187; ';
      new Element('a', {href: link, text: title}).inject(li);
      if(this.rssdiv.getSize().y > 90) break;
    }
  }
});