var iClipsTV = new Class({

  Implements: [Options, Events],

	options: {
		attributes: ['name', 'subtitle', 'date'],
	},

  initialize: function(list, container, options){
		this.setOptions(options);
    this.index = 0;
    this.list = list;
		this.randomize();
		this.container = $(container);
		var getElemAttr = (function(prefix, container, attrs){
			var elems = {};
			this.options.attributes.each(function(attr){
				elems[attr] = container.getElement(prefix + attr);
			});
			return elems;
		}).bind(this);
    this.current = getElemAttr('.tv-', this.container);
    this.upnext = getElemAttr('.tv-upnext-', this.container);
		$f().onLoad(this.play.bind(this));
    $f().onLastSecond(this.playNext.bind(this));
  },

  playNext: function(){
    this.index = this.getNextIndex();
    this.play();
    return false;
  },

  getNextIndex: function(){
    return ((this.index + 1) % this.list.length);
  },

	randomize: function(){
		this.order = [];
		var l = this.list.length;
		while(this.order.length < l) { this.order.include($random(0, l - 1)); }
	},

  play: function(){
    var item = this.list[this.order[this.index]],
    	next_item = this.list[this.order[this.getNextIndex()]];
    $f().play(item.url);
		var setText = (function(elems, info){
			this.options.attributes.each(function(attr){
				if(elems[attr])	elems[attr].set('html', info[attr]);
			});
			return arguments.callee;
		}).bind(this);
		setText(this.current, item);
		setText(this.upnext, next_item);
  }

});

