codice:
if(!Xteam)var Xteam={};Xteam.fireworkShow=function(a,c){
function e(){
a=j(a).eq(0);
a.css("position")=="static"&&a.css("position","relative");
h=j("<canvas></canvas>");
if(!h[0].getContext)return false;
h.attr({height:a.height(),width:a.width()}).css({position:"absolute",display:"block",top:0,left:0,zIndex:99999}).appendTo(a);
n=Xteam.Canvas.scene(h[0]);
l=setInterval(function(){Math.random()>0.75||Xteam.firework(n)},1.5*c);
k=true}var d={},j=jQuery,l,n,h,k=false;
c=c||900;
e();
d.remove=function(){if(k){
clearInterval(l);
n.destroy();
n=null;
h.remove();
a=h=null}};
return d};
Xteam||(Xteam={});
Xteam.firework=function(a){function c(){k=360*Math.random();
f=Xteam.Color.hslToRgb([k,Math.random(),0.2+0.8*Math.random()]);
i=(a.getCanvas().width-h*2)*Math.random()+h;
m=(a.getCanvas().height/2-h)*Math.random()+h;
o=a.getCanvas().height;
a.register(j)}function e(){if(o>m){o-=10;
l.fillStyle="rgb("+f[0]+","+f[1]+","+f[2]+")";
l.beginPath();
l.arc(Math.round(i),Math.round(o),2,0,2*Math.PI,true);
l.fill()}else{a.remove(j);
d()}}function d(){for(var p=40+Math.floor(50*Math.random());
p--;
){var q=Xteam.Color.hslToRgb([k, Math.random(),0.2+0.8*Math.random()]);
new n(a,q,i,m,10)}}var j={draw:e},l=a.getContext(),n=Xteam.FireworkParticle,h=70,k,i,m,o,f;
c();
return j};
Xteam.FireworkParticle=function(a,c,e,d){this.scene=a;
this.color=c;
this.x=Math.round(e);
this.y=Math.round(d);
this.rotate=2*Math.PI*Math.random();
this.opacity=500;
this.f=0;
this.max=50+10*Math.random();
this.size=0;
this.speed=4*Math.random();
a.register(this)};
Xteam.FireworkParticle.prototype={getStyle:function(){return"rgba("+this.color[0]+","+this.color[1]+","+this.color[2]+","+this.opacity/100+")"},draw:function(a,c){if(this.f<this.max){this.f++;
this.size+=this.speed;
this.speed*=0.95;
if(this.f>0.8*this.max)this.opacity-=6;
c.lineWidth=1;
c.save();
c.translate(this.x,this.y);
c.rotate(this.rotate);
c.strokeStyle=this.getStyle();
c.beginPath();
c.moveTo(Math.round(0.85*this.size),0);
c.lineTo(Math.round(this.size),0);
c.stroke();
c.restore()}else this.scene.remove(this)}};
Xteam||(Xteam={});
if(!Xteam.Canvas)Xteam.Canvas={};
Xteam.Canvas.scene=function(a){function c(f){i.push(f)}function e(){for(var f=m.length;
f--;
)i[m[f]]=null;
m=[];
for(f=i.length;
f--;
)i[f]||i.splice(m[f],1)}function d(f){for(var p=i.length;
p--;
)if(f===i[p]){m.push(p);
break}}function j(){clearInterval(o)}function l(){return k}function n(){return a}var h={register:c,remove:d,getContext:l,getCanvas:n,destroy:j},k=a.getContext("2d"),i=[],m=[],o=setInterval(function(){k.clearRect(0,0,a.width,a.height);
for(var f=i.length;
f--;
)typeof i[f].draw=="function"&& i[f].draw(h,k);
e()},30);
return h};
Xteam||(Xteam={});
if(!Xteam.Color)Xteam.Color={};
Xteam.Color.hslToRgb=function(a){var c=a[0],e=a[1];
a=a[2];
if(e==0)r=g=b=a;
e=a<0.5?a*(1+e):a+e-a*e;
a=2*a-e;
c/=360;
var d=[];
d[0]=c+1/3;
d[1]=c;
d[2]=c-1/3;
for(c=3;
c--;
){d[c]%=1;
d[c]=d[c]<1/6?a+(e-a)*6*d[c]:d[c]<0.5?e:d[c]<2/3?a+(e-a)*6*(2/3-d[c]):a;
d[c]*=255;
d[c]=Math.floor(d[c]);
if(d[c]<0)d[c]=0}return d};
Xteam.Color.hslToRgb.test=function(){function a(e,d){for(var j=e.lenght;
j--;
)if(e[j]!==d[j])throw Error("Got "+e+", expected "+d);
console.log("success")}var c=Xteam.Color.hslToRgb;
a(c([0,1,1]),[1,0,0]);
a(c([120,0.5,1]),[0.5,1,0.5]);
a(c([240,1,0.5]),[0,0,0.5]);
c([104.15549071384422,0.9040453462245244,0.2855993456480115])};