var twp = {
	queue: [],
	users: [],
	users_since : [],
	index:0,
	active:false,
	
	initialize: function() {
		if(!twp.users.length) return;
		document.addEvent('scroll', function() {
			var scroll = window.getScrollTop();
			if(scroll>100) $('scroll').effect('top', {wait:false}).start(scroll+20);
			else $('scroll').effect('top', {wait:false}).start(100);
		});
		$('scroll').addEvent('click', function(e) {
			new Event(e).stop();
			if(twp.timer) {
				twp.stop();
				this.setHTML('<img src="/img/clock_pause.png" alt="pause" /> play/pause scroll');
			} else {
				twp.start();
				this.setHTML('<img src="/img/clock_play.png" alt="play" /> play/pause scroll');
			}
		});
		twp.scroll = new Fx.Scroll(window,{wait: false, offset: {'x': 0, 'y': -100}});
		twp.next();
		twp.next.periodical(120000);
		twp.timer = twp.update.periodical(5000);
	},
	
	start: function() {
		if(!twp.timer) twp.timer = twp.update.periodical(5000);
	},
	
	stop: function() {
		if(twp.timer) twp.timer = $clear(twp.timer);
	},
	
	next: function() {
		if(twp.active) return;
		twp.active = true;
		if(twp.index==twp.users.length) twp.index=0;
		twp.getUser(twp.users[twp.index]);
	},
	
	update: function() {
		if (twp.queue.length > 0) {
            var item = twp.queue.shift();
			var list = $$('#list-user li');
			var time = Date.parse(item.created_at);
			var element = new Element('li',{'rel':time}).adopt(
				new Element('img', { src: item.user.profile_image_url}),
				new Element('strong').adopt(
					new Element('a',{
						href: 'http://twitter.com/'+item.user.screen_name,
						title: item.user.screen_name
					}).setHTML(item.user.screen_name)
					),
				new Element('span').setHTML(' '+item.text),
				new Element('small').adopt(
					new Element('a',{
						href: 'http://twitter.com/'+item.user.screen_name+'/statuses/'+item.id
					}).setHTML(relative_time(item.created_at))
					)
			);
			
			var inject = false;
			for (var i = 0, j = list.length; i < j; i++){
				var el = list[i];
				var rel = el.getProperty('rel');
				if(rel<time) {
					inject= true;
					element.injectBefore(list[i]);
					break;
				}
			}
			if(!inject) element.inject($('list-user'));
			twp.scroll.toElement(element);
			var fx = element.effect('background-color').set('#ffffe1');
			fx.start.delay(1000,fx,['#ffffe1','#ffffff']);
			if($('list-user').childNodes.length>twp.users.length) {
				var last = $('list-user').getLast();
				last.effect('opacity', { onComplete: last.remove.bind(last)}).start(0);
			}
		}
	},
	
	getUser: function(user) {
		new Json.Remote("/ajax/"+user+".json/"+twp.since(twp.users_since[twp.index]), {
			onComplete: function(obj) {
				twp.request(obj);
			},
			onFailure: function() {
				twp.request();
			}
		}).send({});
	},
	
	since: function(created_at) {
		if(!created_at) return '';
		var i = created_at.split(' ');
		var d = i[3].split(':');
		return i[0]+i[2]+'+'+i[1]+'+'+i[5]+'+'+d.join('%3A')+'+GMT';
	},
	
	request: function(items) {
		if(items && items[0]) {
			if(!twp.users_since[twp.index]) var items = items.slice(0,1);
			twp.users_since[twp.index] = items[0].created_at;
			twp.queue.extend(items.reverse());
		}
		twp.index++;
		if(twp.index==twp.users.length) {
			twp.index=0;
			twp.active = false;
		} else {
			twp.getUser(twp.users[twp.index]);
		}
	}
	
};


window.addEvent('domready', twp.initialize);
