/**
 * @author Sergey Chikuyonok (sc@design.ru)
 * @copyright Art.Lebedev Studio (http://www.artlebedev.ru)
 * @include "/rit-demo/js/jTweener.js"
 */

/**
 * Случайное число в заданном диапазоне
 * @param {Number} n1 Нижняя граница диапазона
 * @param {Number} n2 Верхняя граница диапазона
 * @return {Number}
 */
function rnd(n1, n2){
	return n1 + Math.round(Math.random() * (n2 - n1));
}

var viewport_width, viewport_height;

var spray_str = 'РИТ—2008';

/**
 * Кэширует размеры видимой области
 */
function updateViewportDimensions(){
	var vp = $('#spray');
	viewport_width = vp[0].offsetWidth;
	viewport_height = vp[0].offsetHeight;
}

/**
 * Частица
 */
function sprayParticle(){
	/** Параметры кривой Безье */
	var bezier_params = {
		// начальная точка
		start_x: viewport_width / 2,
		start_y: viewport_height,

		// конечная точка
		end_x: rnd(0, viewport_width),
		end_y: -100,

		// первая контрольная точка
		cp1_x: rnd(viewport_width * 0.4, viewport_width * 0.6),
		cp1_y: rnd(viewport_height * 0.6, viewport_height * 0.8),

		// вторая контрольная точка
		cp2_x: rnd(viewport_width * 0.1, viewport_width * 0.9),
		cp2_y: rnd(viewport_height * 0.2, viewport_height * 0.4)
	};

	var start_color = new jTweener.Utils.Color(rnd(0, 255), rnd(0, 255), rnd(0, 255));
	var end_color = new jTweener.Utils.Color(rnd(0, 255), rnd(0, 255), rnd(0, 255));

	var start_size = rnd(5, 9);
	var end_size = rnd(60, 80);

	// создаю элемент частицы
	var particle = $('<div  class="particle"></div>');

	// ставим текст
	particle.text(spray_str.charAt( rnd(0, spray_str.length - 1) ));

	// определяем внешний вид и позицию частицы
	particle.css({
		color: start_color + '',
		fontSize: start_size,
		top: bezier_params.start_y,
		left: bezier_params.start_x
	});

	$('#spray').append(particle);

	var target_size = rnd(20, 40);

	/** Основной итератор */
	var time = 0;

	return {
		/**
		 * getter/setter для позиции и внешнего вида частицы
		 */
		value: function(){
			if (!arguments.length) {
				return time;
			} else {
				time = arguments[0];

				var x = jTweener.Utils.bezier3(time, bezier_params.start_x, bezier_params.cp1_x, bezier_params.cp2_x, bezier_params.end_x);
				var y = jTweener.Utils.bezier3(time, bezier_params.start_y, bezier_params.cp1_y, bezier_params.cp2_y, bezier_params.end_y);

				var s = particle[0].style;

				s.color = jTweener.Utils.Color.blend(start_color, end_color, time) + '';
				s.fontSize = Math.round(start_size + (end_size - start_size) * time) + 'px';
				s.left = x + 'px';
				s.top = y + 'px';
			}
		},

		/**
		 * Удаляет частицу со страницы
		 */
		remove: function(){
			particle.remove();
		}
	}
};

/**
 * Создает частицу и запускает ее анимацию
 */
function generatePartice(){
	var p = sprayParticle();
	jTweener.addTween(p, {
		value: 1,
		transition: 'easeincubic',
		time: rnd(2, 5),
		onComplete: function(){
			p.remove();
		}
	});
}



$(function(){
	$(window).resize(updateViewportDimensions);
	updateViewportDimensions();

	setInterval(generatePartice, 200);
	generatePartice();
});