/**
 * Add twinkles to the page
 * Requires jQuery
 */

/**
 * Generate random numbers between min and max using a normal distribution
 */
function randomNormal(min, max)
{
	var n = 4; // Number of samples to use when generating the normal distribution
	var range = max - min;
	
	var self = this;
	
	self.get = function()
	{
		var t = 0;
		for(var i = 0; i < n; i++)
		{
			t = Math.random();
		}
		
		var s = t / n;
		return min + range * s;
	}
}

function randomUniform(min, max)
{
	var range = max - min;
	
	var self = this;
	
	self.get = function()
	{
		return min + range * Math.random();
	}
}

/**
 * Create some twinkles on the current page
 */
function twinkle(src, num)
{
	var self = this;
	self.src = src;
	self.num = num;
	self.sparkles = new Array();
	
	self.randTime = new randomNormal(1200,3500); // Random times between 1.2 and 3.5 seconds
	
	/*
	 * Set up the twinkling, once we know how big the twinkle image is
	 */
	self.setup = function()
	{
		var twinkleWidth = self.img.width;
		var minSize = self.img.width / 4;
		var maxSize = self.img.width * 1.5;
		
		self.randSize = new randomNormal(minSize, maxSize);
		
		self.addTwinkles(self.num);
	}
	
	/*
	 * Add some twinkles to the page
	 */
	self.addTwinkles = function(number)
	{
	var randVPosition = new randomUniform(1,99);
	var randHPosition = new randomUniform(1,99);
	
		for(var i = 0; i < number; i++)
		{
			var el = document.createElement('img');
			el.src = self.src;
			el.className = 'star';
			el.style.width = self.randSize.get() + 'px';
			el.style.position = 'fixed';
			el.style.zIndex = '-10';
			el.style.top = randVPosition.get() + '%';
			el.style.left = randHPosition.get() + '%';
			
			var add = function(e)
			{
			self.sparkles.push(e);
			document.body.appendChild(el);
			$(e).hide();
			window.setTimeout(
				function(){$(e).fadeIn(self.randTime.get(), 
						function(){self.twinkle(e);});
				}, self.randTime.get());
			}
			
			add(el);
		}
	}
	
	/**
	 * Make the given element twinkle
	 * FadeOut, FadeIn, Wait a random amount of time and do it again
	 */
	self.twinkle = function(el)
	{
		$(el).fadeTo(300,0.4,function(){
			$(el).fadeTo(400,1,function(){
				window.setTimeout(function(){
					self.twinkle(el)},
				self.randTime.get());}
			)}
		);
	}
	
	self.img = new Image();
	self.img.src = src;
	self.img.onload = self.setup;
}

twinkle('sites/appeal/template/twinkle.png', 60);
