<!-- July 4th Fireworks Display
<!-- This script and many more from -->
<!-- http://rainbow.arch.scriptmania.com -->

var gfxpath = flopar_path + 'fireworks/';
var factor	= 340;

if (!window.July) July = new Object();

if (!July.createLayer) {

var ns4 = document.layers;
var ie4 = document.all;
July.objNo = 0;
July.getObjId = function(){return "July_obj" + July.objNo++;};

July.createLayer = function(theHtml) {
	var layerId = July.getObjId();
	document.write (ns4 ? "<LAYER  NAME='"+layerId+"'>"+theHtml+"</LAYER>" : 
				   "<div id='"+layerId+"' style='position:absolute; z-index:999;'>"+theHtml+"</div>" );
	var el = 	document.getElementById	? document.getElementById(layerId) :
				document.all ? document.all[layerId] : document.layers[layerId];

	if(ns4)
		el.style=el;
	return el;

}

July.fxLayer = function(theHtml) {
	if(theHtml == null) return;
	this.el = July.createLayer(theHtml);
}

var proto = July.fxLayer.prototype

proto.moveTo     = function(x,y){this.el.style.left = x;this.el.style.top=y;}
proto.setBgColor = function(color) { this.el.style.backgroundColor = color; } 

proto.clip       = function(x1,y1,x2,y2){ this.el.style.clip="rect("+y1+" "+x2+" "+y2+" "+x1+")"; }

if(ns4){
	proto.clip = function(x1,y1, x2,y2){
		this.el.style.clip.top	 =y1;this.el.style.clip.left = x1;
		this.el.style.clip.bottom=y2;this.el.style.clip.right = x2;
	}
	proto.setBgColor=function(color) { this.el.bgColor = color; }
}
if(window.opera)
	proto.setBgColor = function(color) { this.el.style.color = color==null?'transparent':color; }

if(window.innerWidth) {
	gX = function(){return innerWidth;};
	gY = function(){return innerHeight;};
} else {
	gX = function(){return document.body.clientWidth;};
	gY = function(){return document.body.clientHeight;};
}

July.fxLayer2 = function(theHtml) {
	this.superC = July.fxLayer;
	this.superC(theHtml + "C");
}
July.fxLayer2.prototype = new July.fxLayer;
}
July.Firework = function(fwImages)
{
	window[ this.id = July.getObjId() ] = this;
	this.imgId = "i" + this.id;
	this.fwImages  = fwImages;
	this.numImages = fwImages.length;
	this.superC = July.fxLayer;
	this.superC("<img src='" + gfxpath + fwImages[0].src+"' name='"+this.imgId+"'>");

	this.img = document.layers ? this.el.document.images[0] : document.images[this.imgId];
	this.step = 0;
	this.timerId = -1;
	this.x = 0;
	this.y = 0;
	this.dx = 0;
	this.dy = 0;
	this.ay = 0.2;
	this.state = "OFF";
}
July.Firework.prototype = new July.fxLayer;
July.Firework.prototype.getMaxDy = function()
{
	var ydiff = gY() - 100;
	var dy    = 1;
	var dist  = 0;
	var ay    = this.ay;
	while(dist<ydiff)
	{
		dist += dy;
		dy+=ay;
	}
	return -dy;
}
July.Firework.prototype.setFrame = function()
{

	this.img.src = this.fwImages[ this.step ].src;
}
July.Firework.prototype.animate = function()
{

	if(this.state=="OFF")
	{	
		this.step = 0;
		this.x = gX()/2-20;
		this.y = gY()-100;
		this.moveTo(this.x + 'px', this.y + 'px');
		this.setFrame();
		if(Math.random() > .95)
		{
			this.dy = this.getMaxDy();
			this.dx = Math.random()*-8 + 4;
			this.dy += Math.random()*3;
			this.state = "Shoot";
		}
	}
	else if(this.state=="Shoot")
	{
		this.x += this.dx;
		this.y += this.dy;
		this.dy += this.ay;
		this.moveTo(this.x + 'px',this.y + 'px');
		if(this.dy > 1)
			this.state="Bang"
	}
	else if(this.state == "Bang")
	{
		this.step++;
		if(this.step < this.numImages)
			this.setFrame();
		else
			this.state="OFF";
	}
}

July.FireworkDisplay = function(n, fwImages, numImages)
{
	window[ this.id = July.getObjId() ] = this;
	this.timerId = -1;
	this.fireworks = new Array();
	this.imgArray = new Array();
	this.loadCount=0;
	this.loadImages(fwImages, numImages);

	for(var i=0 ; i<n ; i++)
		this.fireworks[this.fireworks.length] = new July.Firework(this.imgArray);
}
July.FireworkDisplay.prototype.loadImages = function(fwName, numImages)
{
	for(var i=0 ; i<numImages ; i++)
	{
		this.imgArray[i] = new Image();
		this.imgArray[i].obj = this;
		this.imgArray[i].onload = window[this.id].imageLoaded;
		this.imgArray[i].src = gfxpath + i + '.gif';
	}
}
July.FireworkDisplay.prototype.imageLoaded = function()
{
	this.obj.loadCount++;
}

July.FireworkDisplay.prototype.animate = function()
{

	if(this.loadCount < this.imgArray.length)
		return;

	for(var i=0 ; i<this.fireworks.length ; i++)
		this.fireworks[i].animate();
}
July.FireworkDisplay.prototype.start = function()
{
	if(this.timerId == -1)
	{
		this.state = "OFF";
		this.timerId = setInterval("window."+this.id+".animate()", (1/flopar_speed)*factor);
	}

}
July.FireworkDisplay.prototype.stop = function()
{
	if(this.timerId != -1)
	{
		clearInterval(this.timerId);
		this.timerId = -1;
		for(var i=0 ; i<this.fireworks.length ; i++)
		{
			this.fireworks[i].moveTo(-100, -100);
			this.fireworks[i].step = 0;;
			this.fireworks[i].state = "OFF";
		}	
	}
}

July.SparkleStart = function()
{
	if(July.SparkleLoad)July.SparkleLoad();
	mySparkle.start();
}

mySparkle = new July.FireworkDisplay(num_fireworks=flopar_amount, firework_images="fw", num_frames=21);
July.SparkleLoad = window.onload;
window.onload = July.SparkleStart;
