var BrandAnimation = (function() {
	var isSetup = false, first, last, illustration, dots, 
		firstParams, lastParams, illParams,
		firstBaseHeight, lastBaseHeight, firstBaseTop, lastBaseTop, dotsBaseWidth;
	
	var PARAMS = {
		//opacity	: 1.0
	};
	
	function setup() {
		if (!isSetup) {
			first = $('#first_name');
			last = $('#last_name');
			illustration = $('#illustration');
			dots = $('#dots');

			dotsBaseWidth = dots.width() + 'px';

			firstBaseHeight = first.height();
			lastBaseHeight = last.height();
			
			/* jQuery won't rip the "top" value from the CSS, sucks */
			firstBaseTop = -23;
			lastBaseTop = 31;			
			
			first.css('height', '0px');
			last.css('height', '0px');
			dots.css('width', '0px')

			firstParams = getFirstNameParams();
			lastParams = getLastNameParams();
			illParams = getIllustrationParams();			
			
			isSetup = true;
		}
		
		return isSetup;
	}
	
	function getFirstNameParams() {
		return jQuery.extend({}, PARAMS, {
			height : firstBaseHeight + 'px',
			top : (firstBaseTop + 20) + 'px'
		});
	}
	
	function getLastNameParams() {
		return jQuery.extend({}, PARAMS, {
			height : lastBaseHeight + 'px',	
			top : (lastBaseTop + 20) + 'px'				
		});		
	}
	
	function getIllustrationParams() {
		return jQuery.extend({}, PARAMS, {
			
		});		
	}		
	
	function go(callback) {
		if (setup()) {			
			first.show().stop().animate(getFirstNameParams(), 'medium', function() {
				last.show().stop().animate(getLastNameParams(), 'fast', function() {
					illustration.show('slow', function() {
						dots.show().stop().animate({
							width : dotsBaseWidth
						}, 'fast', callback);
					});
				});
			});
		}
	}
	
	var self = {};
	self.go = go;
	
	return self;
})();