window.addEvent('domready', function(){
    var TwitterRotator = new Class({
        initialize: function(elem){
            this.target = $(elem);
			if (this.target.get('html').trim() == '') {
				new Request.JSON({
					url: '/json/getTweets.php',
					onSuccess: this.setup.bindWithEvent(this),
					onFailure: function(){
						$('twitterboxholder').style.display = 'none';
					}
				}).get();
			} else {
				this.setup();
			}
            this.showFirstTweets = true;
        },
        
        setup: function(){
            this.tweets = [];
			if (arguments.length > 0) {
				var data = arguments[0];
				for (var i = 0; i < data.length; i++) {
					var tweet = new Element('div', {
						'class': 'tweet',
						id: 'tweet_' + i,
						styles: {
							display: 'none'
						}
					});
					var ptxt = new Element('p', {
						html: data[i].text
					});
					var pdate = new Element('p', {
						html: data[i].created_at
					});
					ptxt.inject(tweet);
					pdate.inject(tweet);
					tweet.inject(this.target);
					this.tweets.push(tweet);
				}
			} else {
				var that = this;
				$$('div.tweet').each(function(tweet){
					tweet.set('styles', { display: 'none' });
					that.tweets.push(tweet);
				});
			}
            this.showCount = Math.ceil(this.tweets.length / 2);
            this.showTweet();
            this.changeTweet.periodical(16000, this);
        },
        
        showTweet: function(){
            var tweets = this.getShowTweets();
            for (var i = 0; i < tweets.length; i++) {
				tweets[i].style.opacity = 0;
				tweets[i].style.filter = 'alpha(opacity = 0)';
				tweets[i].style.zoom = '1';
				tweets[i].style.display = '';
				(function(){
					var effect = new Fx.Morph(this, {
						duration: 'long',
						transition: Fx.Transitions.Sine.easeIn
					});
					effect.start({
						opacity: [0.0, 1.0]
					});
				}).delay(i*500, tweets[i]);
            }
        },
        
        changeTweet: function(){
            $$('.tweet').each(function(elem){
                elem.style.display = 'none';
            });
            this.showFirstTweets = !this.showFirstTweets;
            this.showTweet();
        },
        
        getShowTweets: function(){
            var start = 0;
            var end = this.tweets.length;
            if (this.showFirstTweets) {
                end = this.showCount;
            }
            else {
                start = this.tweets.length - this.showCount;
            }
            return this.tweets.slice(start, end);
        }
    });
    
    new TwitterRotator('twitter_console');
});
