var maxWidth = 1200;
var lookatme = 0;

function particle(x, y){
	this.ptr=this.create();
	//this.move(x, y);
	this.t=0;
	
	this.cp0x=x;
	this.cp0y=y;
	
	this.cp3x=x+this.rr(-200, 200);
	this.cp3y=y+200+this.rr(-60, 60);
	
	//~ var s=(this.cp3x > x) ? 1 : -1;
	
	var d=this.cp3x-this.cp0x;
	
	this.cp1x=x+this.rr(d*.25, d*.5);
	this.cp1y=y+this.rr(-200, -100);
	
	this.cp2x=x+this.rr(d*.6, d);
	this.cp2y=y+this.rr(50, 80);
	this.step=this.rr(.07, .1);
}

particle.level=0;
particle.prototype.step=.06;

particle.prototype.create=function(){
	var oDiv = document.createElement('div');
	oDiv.className = 'fw col'+Math.round(this.rr(1,7));
	this.ID='fw'+(this.constructor.level++)
	oDiv.innerHTML = '&bull;';

	var add = '';
	switch (lookatme)
	{
		case 1:
			add = '?';
			lookatme++;
			break;
		case 2:
			add = '?';
			lookatme++;
			break;
		case 3:
			add = '?';
			lookatme++;
			break;
		//default:
			//if (Math.round (100 * Math.random()) == 7) lookatme = 1;
	}
	if (add) oDiv.innerHTML = '&bull;<span class="lookatme">' + add + '</span>';
	document.getElementById('cont').appendChild(oDiv);
	return oDiv;
}

particle.prototype.rr=function(n1, n2){
	return Math.random()*(n2-n1) + n1;
}

particle.prototype.calc=function(){
	var _x, ax, bx, cx;
	var _y, ay, by, cy;
	var t2, t3;
	
	/* calculate the polynomial coefficients */

	cx = 3 * (this.cp1x - this.cp0x);
	bx = 3 * (this.cp2x - this.cp1x) - cx;
	ax = this.cp3x - this.cp0x - cx - bx;
	
	cy = 3 * (this.cp1y - this.cp0y);
	by = 3 * (this.cp2y - this.cp1y) - cy;
	ay = this.cp3y - this.cp0y - cy - by;
	
	/* calculate the curve point at parameter value t */
	
	t2 = this.t * this.t;
	t3 = t2 * this.t;
	
	_x = (ax * t3) + (bx * t2) + (cx * this.t) + this.cp0x;
	_y = (ay * t3) + (by * t2) + (cy * this.t) + this.cp0y;
	
		
	return {x: _x, y: 1.5 * _y};
}

particle.prototype.move=function(x, y){
	if (x > maxWidth - 10)
	{
		this.ptr.style.display = 'none';
	}
	else
	{
		this.ptr.style.left=x+'px';
		this.ptr.style.top=y+'px';
	}
}

particle.prototype.remove=function(){
	oStack.remove(this.ID);
	document.getElementById('cont').removeChild(this.ptr);
}

particle.prototype.onAnimate=function(){
	this.t+=this.step;
	if(this.step > .02)
		this.step-=.007;
	if(this.t > 1)
		this.remove();
	else{
		var p=this.calc();
		this.move(p.x, p.y);
	}
}

function stack(){
	this.oStack={};
}

stack.prototype.sFunc='onAnimate';
stack.prototype.iIx=0;

stack.prototype.poll=function(){
	for(var a in this.oStack)
		this.oStack[a].onAnimate();
}

stack.prototype.add=function(oParam){
	this.oStack[oParam.ID]=oParam;
	return this.oStack[oParam.ID];
}

stack.prototype.get=function(sID){
	return (this.oStack[sID]) ? this.oStack[sID] : null;
}

stack.prototype.remove=function(sID){
	delete this.oStack[sID];
}

function checkEvent(oEvt){
	oEvt=(oEvt) ? oEvt : ( (window.event) ? window.event : null );
	if(oEvt && !window.opera && oEvt.srcElement)
		oEvt.target=oEvt.srcElement;
	return oEvt;
}

function addEvent(objElement, strEventType, ptrEventFunc) {
	if (objElement.addEventListener) objElement.addEventListener(strEventType, ptrEventFunc, false);
	else if (objElement.attachEvent) objElement.attachEvent('on' + strEventType, ptrEventFunc);
}

function getAbsolutePos(oElem){
	var _x=0;
	var _y=0;
	if(oElem){
		do{
			_x+=oElem.offsetLeft;
			_y+=oElem.offsetTop;
		}while( (oElem=oElem.offsetParent) )
	}
	
	return {x: _x, y: _y};
}

function link_hook(evt){
	if((evt = checkEvent(evt))){
		var oFake=document.getElementById('fake');
		var oPos=getAbsolutePos(evt.target);
		oFake.style.left=oPos.x+'px';
		oFake.style.top=oPos.y+'px';

		oFake.style.width=evt.target.offsetWidth;
		oFake.style.height=evt.target.offsetHeight;

		var linkInHand = evt.target;
		while (linkInHand && linkInHand.tagName != 'A' && linkInHand.parentNode) linkInHand = linkInHand.parentNode;
		if (!linkInHand) return;
	
		oFake.href = linkInHand.href;
		oFake.style.display='block';
		
		var x=oPos.x + oFake.offsetWidth/2;

lookatme=1
		
		var max = 8 + 20 * Math.random();
		for(var i=0; i < max; i++){
			oStack.add(new particle(evt.clientX ,oPos.y));
		}
	}
}

function fake_out(evt){
	if((evt = checkEvent(evt))){
		evt.target.style.display='none';
	}
}
/*
function href_workout(){
	var oHref=document.getElementsByTagName('a');
	for(var i=0; i<oHref.length; i++){
		addEvent(oHref[i], 'mouseover', link_hook);
	}
	addEvent(document.getElementById('fake'), 'mouseout', fake_out);
}

addEvent(window, 'load', href_workout);
*/

