var isNS = (navigator.appName == "Netscape");
layerRef = (isNS) ? "document" : "document.all";
styleRef = (isNS) ? "" : ".style";

var queue = new Array();

var NUM_OF_bfly_PARTS = 1

for (x=1; x < 2; x++) {	 ///////////////Image Preload
	eval("bflyFrame" + x + " = new Image(40,40);");
	eval("bflyFrame" + x + ".src = 'bfly" + x + ".gif';");
}


////////////////////////////////////////////////The bfly Object

function bflyObj(anID) {
	this.bflyID = "bfly" + anID; //as before 
	this.imgRef = "bfly" + anID + "img"; //reference to the trails image name
	this.currentFrame = 1; //the varible for looking after the frame
	this.animatebfly = animatebfly; //declare the objects method cycle
}

function animatebfly() {
	if (this.currentFrame <2 ) {	//if there are animation frames left, the change trails the current frame
		if (isNS) { 				//Detect the browser and perform coresponding image switch
			eval("document." + this.bflyID +".document['"+ this.imgRef + "'].src  =  bflyFrame" + this.currentFrame + ".src");
		} else {
			eval("document['" + this.imgRef + "'].src  =  bflyFrame" + this.currentFrame + ".src");
		}
		this.currentFrame ++; 		//and increase the objects current frame 
	} else { 						//the current frame has reached its limit so hide the trail
		eval(layerRef + '.' + this.bflyID +  styleRef + '.visibility = "hidden"');
	}	
}

/////////////////////////////////////////////////////////////////

function processAnim() {
	for(x=0; x < NUM_OF_bfly_PARTS; x++)
			queue[x].animatebfly();
}

function processMouse(e) {
	currentObj = shuffleQueue();
	if (isNS) {
		eval("document." + currentObj + ".left = e.pageX - 50 ;");
		eval("document." + currentObj + ".top = e.pageY + 5;");
	} else {
		eval("document.all." + currentObj + ".style.pixelLeft = event.clientX + document.body.scrollLeft - 50 ;");
		eval("document.all." + currentObj + ".style.pixelTop = event.clientY + document.body.scrollTop + 5;");
	}
}

function shuffleQueue() {
	lastItemPos = queue.length - 1;
	lastItem = queue[lastItemPos];
	for (i = lastItemPos; i>0; i--) 
		queue[i] = queue[i-1];
	queue[0] = lastItem;
	
	queue[0].currentFrame = 1;	//reset the objects frame number & make the trail visible again
	eval(layerRef + '.' + queue[0].bflyID +  styleRef + '.visibility = "visible"');	

	return 	queue[0].bflyID;
}

function init() {
	
	for(x=0; x<NUM_OF_bfly_PARTS; x++) 	//fill array with bfly objects
		queue[x] = new bflyObj(x+1) ;
	
	if (isNS) { document.captureEvents(Event.MOUSEMOVE); }
	document.onmousemove = processMouse;

	setInterval("processAnim();",25);
}	

window.onload = init;
