var Flackr = Class.create({});

Flackr.Template = Class.create({
  
  initialize: function(tpl) {
    this._tpl = tpl;
  },
  
  parse: function(newid, content) {
	var ldelim = '==';
	var rdelim = '==';
    var el = $(this._tpl).cloneNode(true);
    var tpl = el.innerHTML;
 
    el.id = newid;
    
    $H(content).each(function(pair) {
      key = pair.key;
      value = pair.value;
      tpl = tpl.replace(new RegExp(ldelim+key+rdelim,'g'), value);
    });
    
    el.innerHTML = tpl;
    return el;
  }
});

Flackr.Fetcher = Class.create({

  refreshHeadlines: function(msgs) {
	
    var hl = $('headlines');
    var te = new Flackr.Template('msgtpl');

    for (var i=(msgs.length-1);i>=0;i--) {
    	
      var data = {message: msgs[i]['headline'], last_updated_by: msgs[i]['last_updated_by'],
    		      last_updated_url: msgs[i]['last_updated_url'], logo: msgs[i]['img'], 
    		      id: msgs[i]['id'], updates: msgs[i]['messagecount'],
    		      last_updated_gmt: msgs[i]['last_updated_gmt'],
    		      prefix: ''};
      
      if ( msgs[i]['status']=='hot') {
    	data['prefix'] = 'HOT NEWS: ';
      }
      
      var newid = 'ev'+msgs[i]['id'];
      
      existing = $(newid);
      if (existing) {
    	hl.removeChild(existing);
      }
      
      var newel = te.parse(newid, data);

      if (msgs[i]['status']=='hot') {
        newel.addClassName('hot');
      }
      since_id = msgs[i]['last_updated_id'];
      
      hl.insertBefore(newel, hl.firstChild);
      Effect.Appear(newel.id, { duration: 2.0});
    
    }  
  },
  
  refreshEvent: function(event) {
		
    var hl = $('headlines');
    var te = new Flackr.Template('msgtpl');
    
    var msgs = event['messages'];
    
    for (var i=(msgs.length-1);i>=0;i--) {
    	
      var data = {message: msgs[i]['message'], userid: msgs[i]['author_userid'],
    		      logo: msgs[i]['author_img'], author: msgs[i]['author_name'],
    		      id: msgs[i]['id'], score: msgs[i]['score'],
    		      created_gmt: msgs[i]['created_gmt']};
      
      var newid = 'msg'+msgs[i]['id'];
      
      var newel = te.parse(newid, data);

      since_id = msgs[i]['id'];
      
      hl.insertBefore(newel, hl.firstChild);
      Effect.Appear(newel.id, { duration: 2.0});
    
    }  
  },
  
  retrieveHeadlines: function() {
    url = '/api/events/live.json?since='+since_id;
    new Ajax.Request(url, {
                            method: 'get',
                            onSuccess: this.retrieveHeadlinesDone.bind(this),
                            evalJSON: true 
                          });
  },
  
  retrieveHeadlinesDone: function(transport) {
	this.refreshHeadlines(transport.responseJSON);
  },
  
  retrieveEvent: function() {
    url = '/api/event/'+fl_event+'.json?since='+since_id;
    new Ajax.Request(url, {
                            method: 'get',
                            onSuccess: this.retrieveEventDone.bind(this),
                            evalJSON: true 
                          });
  },
	  
  retrieveEventDone: function(transport) {
    this.refreshEvent(transport.responseJSON);
  }
  
  

});

fetcher = new Flackr.Fetcher();

if (fl_type=='live')
{
  new PeriodicalExecuter(fetcher.retrieveEvent.bind(fetcher), 30);
}
else
{
  new PeriodicalExecuter(fetcher.retrieveHeadlines.bind(fetcher), 30);
}
