function getWindowDetails() {
	// the "viewable" height and width
	var viewWidth = window.innerWidth ? window.innerWidth : (document.documentElement ? document.documentElement.clientWidth : document.body.clientWidth);
	var viewHeight = window.innerHeight ? window.innerHeight : (document.documentElement ? document.documentElement.clientHeight : document.body.clientHeight);

	// where we're currently scrolled to
	var scrollPositionY = window.scrollY ? window.scrollY : document.documentElement.scrollTop;
	var scrollPositionX = window.scrollX ? window.scrollX : document.documentElement.scrollLeft;
	
	// get the total height and width of the content (which includes the area you have to scroll to)...
	var totalHeight = (document.documentElement.scrollHeight > document.body.scrollHeight) ? document.documentElement.scrollHeight : document.body.scrollHeight;	
	var totalWidth = (document.documentElement.scrollWidth > document.body.scrollWidth) ? document.documentElement.scrollWidth : document.body.scrollWidth;

	var centerY = scrollPositionY+(viewHeight/2);
	var centerX = scrollPositionX+(viewWidth/2);

	return {
		viewWidth: viewWidth,
		viewHeight: viewHeight,
		scrollPositionX: scrollPositionX,
		scrollPositionY: scrollPositionY,
		totalWidth: totalWidth,
		totalHeight: totalHeight,
		centerY: centerY,
		centerX: centerX,
		toString: function() {
			var output = "";
			output += 'viewWidth: '+viewWidth+"\n";
			output += 'viewHeight: '+viewHeight+"\n";
			output += 'scrollPositionX: '+scrollPositionX+"\n";
			output += 'scrollPositionY: '+scrollPositionY+"\n";
			output += 'totalWidth: '+totalWidth+"\n";
			output += 'totalHeight: '+totalHeight+"\n";
			output += 'centerY: '+centerY+"\n";
			output += 'centerX: '+centerX+"\n";		

			return output;
		}
	};
}

//Bubble Script by Lisa (issa@lissaexplains.com, http://lissaexplains.com)
//Based on code by Altan d.o.o. (snow@altan.hr)
//For full source code and installation instructions to this script, visit http://www.dynamicdrive.com

var numBubbles = 15; // image number or falling rate
var speed = 2; // the lower the number the faster the image moves
var bubbles = new Array();
bubbles[0] = "images/bubbles2.gif"
bubbles[1] = "images/bubbles1.gif"
bubbles[2] = "images/bubble1.gif"
bubbles[3] = "images/bubble.gif"
bubbles[4] = "images/bubble2.gif"
bubbles[5] = "images/bubbles3.gif"
bubbles[6] = "images/bubbles4.gif"

var ns4up = (document.layers) ? 1 : 0;  // browser sniffer
var ie4up = 1;//(document.all) ? 1 : 0;
var ns6up = (document.getElementById&&!document.all) ? 1 : 0;
var deltaX, positionX, positionY;    // coordinate and position variables
var amplitude, stepX, stepY;  // amplitude and step variables
var i, doc_width = 800, doc_height = 1800;

if (ns4up||ns6up) {
        doc_width = self.innerWidth;
        doc_height = self.innerHeight;
} else if (ie4up) {
        doc_width = document.body.clientWidth;
        //####doc_height = document.scrollTop-document.body.clientHeight;
		var windowDetails = getWindowDetails();
        doc_height = windowDetails.scrollPositionY + windowDetails.viewHeight - 75;
}

deltaX = new Array();
positionX = new Array();
positionY = new Array();
amplitude = new Array();
stepX = new Array();
stepY = new Array();
j = 0;

// create the bubbles, with initial positioning
for (i = 0; i < numBubbles; ++ i) {
	deltaX[i] = 0;                        // set coordinate variables
	positionX[i] = Math.random()*(doc_width-100);  // set position variables
	positionY[i] = Math.random()*doc_height;
	amplitude[i] = Math.random()*20;         // set amplitude variables
	stepX[i] = 0.02 + Math.random()/10; // set step variables	(this is like the speed it'll move horizontally each turn)
	stepY[i] = 0.7 + Math.random();     // set step variables	(this is like the speed it'll move vertically each turn)
	if (ns4up) {                      // set layers
		if (i == 0) {
				document.write("<layer name=\"dot"+ i +"\" left=\"15\" top=\"15\" visibility=\"show\"><img src=\""+ bubbles[j] + "\" border=\"0\"></layer>");
		} else {
				document.write("<layer name=\"dot"+ i +"\" left=\"15\" top=\"15\" visibility=\"show\"><img src=\""+ bubbles[j] + "\" border=\"0\"></layer>");
		}        
	} else if (ie4up||ns6up) {                
		if (i == 0) {
				document.write("<div id=\"dot"+ i +"\" style=\"POSITION: absolute; Z-INDEX: "+ i +"VISIBILITY: visible; TOP: 15px; LEFT: 15px; width:1;\"><img src=\"" + bubbles[j] + "\" border=\"0\"></div>");
		} else {
				document.write("<div id=\"dot"+ i +"\" style=\"POSITION: absolute; Z-INDEX: "+ i +"VISIBILITY: visible; TOP: 15px; LEFT: 15px; width:1;\"><img src=\"" + bubbles[j] + "\" border=\"0\"></div>");
		}
	}
	if (j == (bubbles.length-1)) { j = 0; } else { j += 1; }
}

function bubblesNS() {  // Netscape main animation function
        for (i = 0; i < numBubbles; ++ i) {  // iterate for every dot
                positionY[i] -= stepY[i];                
				if (positionY[i] < -50) {
					positionX[i] = Math.random()*(doc_width-amplitude[i]-100);
					positionY[i] = doc_height;
					stepX[i] = 0.02 + Math.random()/10;
					stepY[i] = 0.7 + Math.random();
					doc_width = self.innerWidth;
					doc_height = self.innerHeight;                
				}
                deltaX[i] += stepX[i];
                document.layers["dot"+i].top = positionY[i]+pageYOffset;
                document.layers["dot"+i].left = positionX[i] + amplitude[i]*Math.sin(deltaX[i]);
        }
        setTimeout("bubblesNS()", speed);
}

function bubblesIE_NS6() {  // IE main animation function
        for (i = 0; i < numBubbles; ++ i) {  // iterate for every dot
				// move it's vertical position up by the step value
                positionY[i] -= stepY[i];
				// restart this bubble at the current bottom, if it's gone past the overall top
                if (positionY[i] < -50) {
                        positionX[i] = Math.random()*(doc_width-amplitude[i]-100);
                        positionY[i] = doc_height;
                        stepX[i] = 0.02 + Math.random()/10;
                        stepY[i] = 0.7 + Math.random();
                        doc_width = ns6up?window.innerWidth-5:document.body.clientWidth;
                        //####doc_height = ns6up?window.innerHeight-5:document.body.clientHeight;
						var windowDetails = getWindowDetails();
				        doc_height = windowDetails.scrollPositionY + windowDetails.viewHeight - 75;
                }
				// move it's hosizontal position by the step value
                deltaX[i] += stepX[i];
                if (ie4up){
					
					//####
					//test("moving to " + (positionY[i]+"px"), false);

					//document.getElementById("dot"+i).style.top = positionY[i]+document.body.scrollTop+"px";
					document.getElementById("dot"+i).style.top = positionY[i]+"px";
					// make sure it can't go past the right edge of the screen (which will result in a flicker of a horizontal scrollbar)
					
					document.getElementById("dot"+i).style.left = positionX[i] + amplitude[i]*Math.sin(deltaX[i])+"px";
                }
                else if (ns6up){
					document.getElementById("dot"+i).style.top=positionY[i]+pageYOffset;
					document.getElementById("dot"+i).style.left=positionX[i] + amplitude[i]*Math.sin(deltaX[i]);
                }
        }
        setTimeout("bubblesIE_NS6()", speed);
}

if (ns4up) {
        bubblesNS();
} else if (ie4up||ns6up) {
        bubblesIE_NS6();
}
