var kTweetMax = 3;
var kTweetTime = 8000+5000;
var kTweetTimeMouseOut = 2000;
var _currentTweet = 0;
var _currentIndicator = 0;
var _currentTweetText;
var _tweets;
var _isFirstTime = true;
var _tweetTimeout;
var _twitterIndicatorAdjust;

var _existingCharacters;

var _uid = 0;

_existingCharacters = [];

function updateTweetIndicator() {
	$('#tweetsindicatortime').html($("#tweets span").get(_currentIndicator).innerHTML);
	$('#tweetsindicatortime').fadeIn(500);	
	$($('#tweetsindicatorcircles .tweetcircle').get(_currentIndicator)).css('background-color','#fff');
}

function displayNextTweet() {
    var reusedCharacters = [];
    var newCharacters = [];
    	
	$($('#tweetsindicatorcircles .tweetcircle').get(_currentIndicator)).css('background-color','#f00');
	
	_currentTweetText = $("#twitterwidgetpro li").get(_currentTweet).innerHTML;
	$('#tweetsindicatortime').fadeOut(500);
//	setTimeout("updateTweetIndicator()", _isFirstTime ? 1250 : 2750);
	
	_currentIndicator = _currentTweet;
	
    var stripped = _currentTweetText.replace(/(<([^>]+)>)/ig, "");
	
	//remove full stop at the end
	
	stripped = stripped.replace(/.$/, "");
	
	stripped = jsprettify.prettifyStr(stripped);

    var words = stripped.split(" ");
    $('#result').html("");
   
    var characterToReuse;
    var newCharacter;
    var animatingCharacter;
    var theChar;
    
    for (var i = 0; i < stripped.length; i++) {
        theChar = stripped.substring(i, i + 1);
        $('#result').append('<div id="char_' + i + '" class="char">' + theChar + '</div>');
    }
    
    for (var i = 0; i < stripped.length; i++) {
        theChar = stripped.substring(i, i + 1);
        
        newCharacter = $('#char_' + i);
        
        characterToReuse = findExistingCharacterWithTop(theChar, newCharacter.position().top);
        
        if (characterToReuse) {
            $(characterToReuse.element).delay(1500).animate({
                top: newCharacter.position().top,
                left: newCharacter.position().left
            }, 500);
            reusedCharacters.push(characterToReuse);
        }
        else {
            // make new character
            $('#animation').append('<div id="animating_char_' + _uid + '" class="animatingchar">' + theChar + '</div>');
            animatingCharacter = $('#animating_char_' + _uid);
            $(animatingCharacter).css("top", newCharacter.position().top);
            $(animatingCharacter).css("left", newCharacter.position().left);
            $(animatingCharacter).css("display", "none");
            $(animatingCharacter).delay((_isFirstTime ? 250 : 2500) + 250 * Math.random()).fadeIn(500);
            newCharacters.push({
                character: theChar,
                element: animatingCharacter,
                reuse: false
            });
            _uid++;
        }
    }
    
    // delete unused existing characters
    for (var i = 0; i < _existingCharacters.length; i++) {
        var found = false;
        for (var j = 0; j < reusedCharacters.length; j++) {
            if (_existingCharacters[i] == reusedCharacters[j]) {
                found = true;
            }
        }
        if (!found) {
            $(_existingCharacters[i].element).delay(300 * Math.random()).fadeOut(500, function() {
                jQuery(this).remove();
            });
        }
    }
    
    _existingCharacters = reusedCharacters;
    for (var i = 0; i < newCharacters.length; i++) {
        _existingCharacters.push(newCharacters[i]);
    }
    
 	var lastElement;
	lastElement = $('#result div').last();

	if (_isFirstTime) {
		$('#twitterindicator').css('left',lastElement.position().left + lastElement.width()+12);
		$('#twitterindicator').css('top',lastElement.position().top+_twitterIndicatorAdjust);
		$('#twitterindicator').delay((_isFirstTime ? 250 : 2500) + 250 * Math.random()).fadeIn(500);	
	}
	else {
		$('#twitterindicator').delay(1500).animate({
			top: lastElement.position().top+_twitterIndicatorAdjust,
			left: lastElement.position().left + lastElement.width() + 12
		}, 500);
	}
	
   	_currentTweet++;
    if (_currentTweet >= kTweetMax) {
		_currentTweet = 0;
	}
	
	if ( _isFirstTime ) {
		_isFirstTime = false;
	}
	_tweetTimeout = setTimeout("displayNextTweet()", kTweetTime);
}

function findExistingCharacter(c) {
    for (var i = 0; i < _existingCharacters.length; i++) {
        if (_existingCharacters[i].character == c && !_existingCharacters[i].reuse) {
            _existingCharacters[i].reuse = true;
            return _existingCharacters[i];
        }
    }
}

function findExistingCharacterWithTop(c, t) {
    for (var i = 0; i < _existingCharacters.length; i++) {
        if (_existingCharacters[i].character == c && !_existingCharacters[i].reuse) {
            if (Math.round($(_existingCharacters[i].element).position().top) == Math.round(t)) {
                _existingCharacters[i].reuse = true;
                return _existingCharacters[i];
            }
        }
    }
}

function displayFullTweet() {
    $('#result').html(_currentTweetText);
}

function testTweets() {
	kTweetMax = 0+$("#twitterwidgetpro li").length;
	/*
	for (var i = 0; i < kTweetMax; i++) {
		$('#tweetsindicatorcircles').append('<div class="tweetcircle"></div>');
	}
	*/
	$('#animationwrapper').css('cursor','pointer');
	$('#animationwrapper').hover(handleTweetsMouseOver,handleTweetsMouseOut);
	$('#animationwrapper').click(handleTweetsClick);
	
	_twitterIndicatorAdjust = $('html').hasClass('webkit') ? 21 : 20;
    displayNextTweet();   
}

function handleTweetsMouseOver() {
	clearTimeout(_tweetTimeout);
	$('.twitteranimation').css('color','#ffbfc8');

	$('#twitterindicator').css('background-position','0 0');
	$('#twitterindicator span').fadeIn(250);
}

function handleTweetsMouseOut() {
	$('.twitteranimation').css('color','#f00');	
	_tweetTimeout = setTimeout("displayNextTweet()", kTweetTimeMouseOut);
	$('#twitterindicator').css('background-position','0 -30px');
$('#twitterindicator span').fadeOut(250);
}

function handleTweetsClick() {
	location.href='http://twitter.com/Pajama_Branding';
}
