




/*
     FILE ARCHIVED ON 2:03:11 Jul 14, 2006 AND RETRIEVED FROM THE
     INTERNET ARCHIVE ON 15:10:31 Nov 8, 2011.
     JAVASCRIPT APPENDED BY WAYBACK MACHINE, COPYRIGHT INTERNET ARCHIVE.

     ALL OTHER CONTENT MAY ALSO BE PROTECTED BY COPYRIGHT (17 U.S.C.
     SECTION 108(a)(3)).
*/
/*droppingText0416_1611 
revisions: jiggleText(); alexEffect(); droppingTextMaster();droppingTextSlave(); textEFX()*/
var j = new Array();
function textEFX() { 
droppingTextMaster.dropWordArray = new Array()
jiggleText.jiggleTextArray = new Array()
alexEffectMaster.alexEffectArray = new Array()
var spanElementsArray = document.getElementsByTagName('span');
var numSpanElements = spanElementsArray.length
for (var i = 0; i < numSpanElements; i++) {
if (spanElementsArray[i].id && document.getElementById) { // only for elements with id names -- catches Safari bug
var speed = null
if ((spanElementsArray[i].id).search("slothful") != -1)
speed = "slothful"
else if ((spanElementsArray[i].id).search("slow") != -1)
speed = "slow"
else if ((spanElementsArray[i].id).search("fast") != -1)
speed = "fast"
else if ((spanElementsArray[i].id).search("exuberant") != -1)
speed = "exuberant"
else
speed = "medium"
if ((spanElementsArray[i].id).search("none") != -1) {
spanElementsArray[i].style.visibility = "visible";
} 
if ((spanElementsArray[i].id).search("expand") != -1) {
spanElementsArray[i].style.visibility = "visible";
j[j.length] = spanElementsArray[i];
} 
if ((spanElementsArray[i].id).search("jiggle") != -1) {
var jiggleSpeed = null;
switch(speed) {
case 'slothful':
jiggleSpeed = 200;
break;
case 'slow':
jiggleSpeed = 100;
break;
case 'medium':
jiggleSpeed = 60;
break;
case 'fast':
jiggleSpeed = 30;
break;
case 'exuberant':
jiggleSpeed = 10;
break;
}
jiggleText.jiggleTextArray[jiggleText.jiggleTextArray.length] = new Array(spanElementsArray[i],jiggleSpeed,jiggleSpeed,0,2);
spanElementsArray[i].style.position = "relative"
spanElementsArray[i].style.visibility = "visible"	
} 			
if ((spanElementsArray[i].id).search("alexEffect") != -1) {
var alexSpeed = null;
switch(speed) {
case 'slothful':
alexSpeed = 2;
break;
case 'slow':
alexSpeed = 5;
break;
case 'medium':
alexSpeed = 10;
break;
case 'fast':
alexSpeed = 20;
break;
case 'exuberant':
alexSpeed = 30;
break;
}
alexEffectMaster.alexEffectArray[alexEffectMaster.alexEffectArray.length] = new Array(spanElementsArray[i],alexSpeed);
spanElementsArray[i].style.visibility = "visible";
} else if ((spanElementsArray[i].id).search("dropWord") != -1) {
var dropSpeed = null;
switch(speed) {
case 'slothful':
dropSpeed = 5;
break;
case 'slow':
dropSpeed = 20;
break;
case 'medium':
dropSpeed = 40;
break;
case 'fast':
dropSpeed = 60;
break;
case 'exuberant':
dropSpeed = 80;
break;
}
if ((spanElementsArray[i].id).search("bottom") != -1){ 	
var browserName=navigator.appName; 
if (browserName=="Netscape") //disable "fly from bottom" effect  for  netscape browsers (incompatible at this time)
{ 
spanElementsArray[i].style.visibility = "visible";
}
else {
droppingTextMaster.dropWordArray[droppingTextMaster.dropWordArray.length] = new Array(spanElementsArray[i],"bottom",20,3,dropSpeed);
}
}
else if ((spanElementsArray[i].id).search("left") != -1) 
droppingTextMaster.dropWordArray[droppingTextMaster.dropWordArray.length] = new Array(spanElementsArray[i],"left",20,3,dropSpeed);
else if ((spanElementsArray[i].id).search("right") != -1) 
droppingTextMaster.dropWordArray[droppingTextMaster.dropWordArray.length] = new Array(spanElementsArray[i],"right",20,3,dropSpeed);
else if ((spanElementsArray[i].id).search("random") != -1){ 
var browserName=navigator.appName; 
if (browserName=="Netscape") //disable "random" effect for  netscape browsers (incompatible at this time)
{ 
spanElementsArray[i].style.visibility = "visible";
}
else {
droppingTextMaster.dropWordArray[droppingTextMaster.dropWordArray.length] = new Array(spanElementsArray[i],"random",20,3,dropSpeed);
}
}
else
droppingTextMaster.dropWordArray[droppingTextMaster.dropWordArray.length] = new Array(spanElementsArray[i],"top",20,3,dropSpeed); // default
} 
} else
spanElementsArray[i].style.visibility = "visible";
} 			
expandText(-20);
Blink()
alexEffectMaster()
droppingTextMaster()	
jiggleText()
Marquee()
}
// parameters used to set jiggleText.jiggleTextArray
// 0: element
// 1: jiggle repeat (ms)
// 2: used as a counter -- set to same as jiggle speed
// 3: used to track offset -- set to zero
// 4: jiggle amount
// jiggleText() is a function that calls itself repeatedly to make text elements jiggle back and forth.
// An array of all the elements to jiggle is cycled through each time jiggleText is called.	   
function jiggleText() {
jiggleText.jiggleTextArray
var refreshSpeed = 10 // base refresh spped
var numSentences = jiggleText.jiggleTextArray.length
for (var i=0; i < numSentences; i++ ) { // Cycles through each sentence
var currElement = jiggleText.jiggleTextArray[i][0] // Sets current element
if (jiggleText.jiggleTextArray[i][2] <= 0) { // if time for jiggling
if (jiggleText.jiggleTextArray[i][3] != 0) { // if current offset is non-zero
jiggleText.jiggleTextArray[i][3] = 0 //set offset to zero
currElement.style.left = jiggleText.jiggleTextArray[i][3]
} else { // if current offset is zero
jiggleText.jiggleTextArray[i][3] = jiggleText.jiggleTextArray[i][4] // reset offset to base
currElement.style.left = jiggleText.jiggleTextArray[i][3]
}
jiggleText.jiggleTextArray[i][2] = jiggleText.jiggleTextArray[i][1]; // reset countdown
} else 
jiggleText.jiggleTextArray[i][2] = jiggleText.jiggleTextArray[i][2] - refreshSpeed // decrease countdown
}	
setTimeout("jiggleText();",refreshSpeed)
}
function alexEffectMaster() {
alexEffectMaster.alexEffectArray
alexEffectMaster.numSentences = alexEffectMaster.alexEffectArray.length
for (var i=0; i < alexEffectMaster.numSentences; i++ ) {
var letters = alexEffectMaster.alexEffectArray[i][0].innerHTML.split("")
var numLetters = letters.length	
alexEffectMaster.alexEffectArray[i][2] = numLetters
for (var j=0; j<numLetters; j++) 
letters[j] = "<span style=\"position:relative;top:0;left:0;\" id=\"alex"+normNum(i,3)+normNum(j,3)+"\">" +  letters[j] + "<\/span>"			
alexEffectMaster.alexEffectArray[i][0].innerHTML = letters.join("")	
for (var j=0; j<numLetters; j++) {
var moveThisCharVal = "alex" + normNum(i,3) + normNum(j,3)
var moveThisChar = document.getElementById(moveThisCharVal)
var moveToCharVal = ""
var check2 = true
while (check2 == true ) {
moveToCharVal = "alex" + normNum(i,3) + normNum(Math.round(Math.random() * (numLetters-1)),3)
if (moveToCharVal != moveThisCharVal)
check2 = false
}
var moveToChar = document.getElementById(moveToCharVal)
var holdX = getAbsX(moveThisChar)
var holdX2 = getAbsX(moveToChar)
var moveVal = holdX2 - holdX
moveThisChar.style.left = parseInt(moveThisChar.style.left) + moveVal				
moveToChar.style.left = parseInt(moveToChar.style.left) - moveVal	
}	
}
alexEffectSlave()
return 0;
}
function alexEffectSlave() {	
var check = 0;
for (var i=0; i < alexEffectMaster.numSentences; i++ ) {	
var letters = alexEffectMaster.alexEffectArray[i][2]
var stepSize = alexEffectMaster.alexEffectArray[i][1]
for (var j=0; j < letters; j++) {
var currElement = document.getElementById("alex" + normNum(i,3) + normNum(j,3))
var currOffsetHorizontal = parseInt(currElement.style.left)
// Horizontal Offset
if (currOffsetHorizontal != 0) { // if horizontal offset is non-zero, adjust offset toward zero
if (currOffsetHorizontal < -(2*stepSize))
currElement.style.left = currOffsetHorizontal + (2*stepSize)
else if (currOffsetHorizontal < -stepSize)
currElement.style.left = currOffsetHorizontal + stepSize
else if (currOffsetHorizontal > (2*stepSize))
currElement.style.left = currOffsetHorizontal - (2*stepSize)
else if (currOffsetHorizontal > stepSize)
currElement.style.left = currOffsetHorizontal - stepSize
else
currElement.style.left = 0 // ensures that text is not moved too far
//if (ieWorkaround == true)
//currElement.innerHTML = currElement.innerHTML
}
if (check == 0)				
if (parseInt(currElement.style.left) != 0)
check++	// if any one letter is still non, zero, modify check
}
}
if (check > 0)
setTimeout("alexEffectSlave();",5)
return 0;
}
// Simple browser detection for IE. IE has a flaw drawing re-positioned elements -- 
// the workaround substantially increases the work done by the script, so we detect it here
// and skip the workaround for all other browsers.
var browserVersion = navigator.appVersion
var ieWorkaround = false
if (browserVersion.search("MSIE") != -1)
ieWorkaround = true
// Adds leading zeros to the beginning of a number
function normNum(original,numDigits) {
var tempLength = original.toString().length
while ( tempLength < numDigits ) {	
original = "0" + original
tempLength++
}	
return(original)
}
// This function re-formats the SPAN elements from the dropWordArray, slicing the sentence
// apart and making each word addressable through a unique id. It sets the initial position
// of all the words, makes them visible, and calls droppingTextSlave(), initiating the
// motion.
// Options for textDirection: top, bottom, left, right, random
// textStaggeringFactor & textDecay factor take any number. 0-3 or so look good, anything beyond wasteful
function droppingTextMaster() {
// Browser width and height
var pageHeight = findPageHeight();
var pageWidth = findPageWidth();
droppingTextMaster.dropWordArray // An array containing all the sentences
droppingTextMaster.allElements = new Array(); // A list of names of all elements to be moved	
var numSentences = droppingTextMaster.dropWordArray.length // Number of sentences to be split
for (var i=0; i < numSentences; i++ ) { // Cycles through each sentence
var text = ""
var prelim = (droppingTextMaster.dropWordArray[i][0].innerHTML).replace(/ \/>/g, "\>") // for pesky fulfillment people who use html
var words = prelim.split(' ');
for (var j=0; j<words.length; j++) { // loop through each word of the sentence and format new sentence	
text = text + "<span style=\"position:relative;top:0;\" id=\"drop"+normNum(i,3)+normNum(j,3)+"\"> " + words[j] + " <\/span>"
var newPos = droppingTextMaster.allElements.length
droppingTextMaster.allElements[newPos] = new Array()
droppingTextMaster.allElements[newPos][0] = "drop" + normNum(i.toString(),3) + normNum(j.toString(),3) // puts the name of every word
droppingTextMaster.allElements[newPos][1] = droppingTextMaster.dropWordArray[i][4] // into allElements array
}
droppingTextMaster.dropWordArray[i][0].innerHTML = text // commit re-formatted sentence
var wordsInSentence = words.length		
var currStyle = droppingTextMaster.dropWordArray[i][1]
var currStagger = droppingTextMaster.dropWordArray[i][2]
var currDecay = droppingTextMaster.dropWordArray[i][3]
for ( var j=0; j < wordsInSentence; j++) { // cycles through each word of the sentence
var currElement = document.getElementById("drop" + normNum(i.toString(),3) + normNum(j.toString(),3))
if ( currStyle == "top" )
currElement.style.top = -(getAbsY(currElement) + 80) + (j*-currStagger) + (j*j*-currDecay) + (i*-50) // sets position
else if ( currStyle == "bottom" )
currElement.style.top = pageHeight - getAbsY(currElement) + 20 + (j*currStagger) + (j*j*currDecay) + (i*50)
else if ( currStyle == "right" )
currElement.style.left = pageWidth + 20 + (j*currStagger) + (j*j*currDecay) 
else if ( currStyle == "left" )
currElement.style.left = -(getAbsX(currElement) + (j*currStagger) + (j*j*currDecay))
else if ( currStyle == "random" ) {
currElement.style.top = (pageHeight * Math.random()) - getAbsY(currElement)
currElement.style.left = (pageWidth * Math.random() ) - getAbsX(currElement)
}	
if ( ieWorkaround == true )
currElement.innerHTML = currElement.innerHTML
currElement.style.visibility = "visible" // make element visible		
}
}		
droppingTextSlave()
return 0;
}
// This function moves offset elements back to their original position.
function droppingTextSlave() {
var check = 0 
var numElements = droppingTextMaster.allElements.length
for (var i=0; i < numElements ; i++) { // cycles through all the words
var stepSize = droppingTextMaster.allElements[i][1]
var currElement = document.getElementById(droppingTextMaster.allElements[i][0])
var currOffsetVertical = parseInt(currElement.style.top)
var currOffsetHorizontal = parseInt(currElement.style.left)
// Vertical Offset
if (currOffsetVertical != 0) { // if vertical offset is non-zero, adjust offset toward zero
if (currOffsetVertical < -stepSize)
currElement.style.top = currOffsetVertical + stepSize
else if (currOffsetVertical > stepSize)
currElement.style.top = currOffsetVertical - stepSize
else
currElement.style.top = 0 // ensures that text is not moved too far
if (ieWorkaround == true)
currElement.innerHTML = currElement.innerHTML
if (check == 0)				
if (parseInt(currElement.style.top) != 0)
check++	// if any one word is still non, zero, modify check
}
// Horizontal Offset
if (currOffsetHorizontal != 0) { // if horizontal offset is non-zero, adjust offset toward zero
if (currOffsetHorizontal < -stepSize)
currElement.style.left = currOffsetHorizontal + stepSize
else if (currOffsetHorizontal > stepSize)
currElement.style.left = currOffsetHorizontal - stepSize
else
currElement.style.left = 0 // ensures that text is not moved too far
if (ieWorkaround == true)
currElement.innerHTML = currElement.innerHTML
if (check == 0)				
if (parseInt(currElement.style.left) != 0)
check++	// if any one word is still non, zero, modify check
}
}
if (check > 0)
setTimeout("droppingTextSlave();",50) // calls itself if any words are not zeroed
return 0;
}
// get the true offset of anything on NS4, IE4/5 & NS6
function getAbsX(elt) { 
return (elt.x) ? elt.x : getAbsPos(elt,"Left"); 
}
function getAbsY(elt) { 
return (elt.y) ? elt.y : getAbsPos(elt,"Top"); 
}
function getAbsPos(elt,which) {
iPos = 0;
while (elt != null) {
iPos += elt["offset" + which];
elt = elt.offsetParent;
}
return iPos;
}
// returns the page width / height
function findPageHeight() {
if (window.innerHeight != null )
return window.innerHeight;
if (document.body.clientHeight != null )
return document.body.clientHeight;
return(null);
}
function findPageWidth() {
if (window.innerWidth != null )
return window.innerWidth;
if (document.body.clientWidth != null )
return document.body.clientWidth;
return(null);
}
function expandText(amount) {
amount++;
for (var i=0; i< j.length ; i++)		
j[i].style.letterSpacing = amount;
if (amount < 0) {
setTimeout("expandText(" + amount + ");",50);
}
return 0;
}
/*This function sorts <Blink> elements by tag name and searches by ID's to determine speed. Blink() then passes the appropriate elements to doBlink(). doBlink() threads are activated at specified intervals for each speed.*/ 
function Blink() {
var a = document.getElementsByTagName('blink');
if(document.getElementById){	
for (var i=0; i< a.length; i++) {
if (a[i].id) {		
if ((a[i].id).search("slothful") != -1){
eval('setInterval("doBlink(' + i + ')",2000)');
}	
else if ((a[i].id).search("slow") != -1){
eval('setInterval("doBlink(' + i + ')",1000)');
}
else if ((a[i].id).search("medium") != -1){
eval('setInterval("doBlink(' + i + ')",500)');
}  
else if ((a[i].id).search("fast") != -1){
eval('setInterval("doBlink(' + i + ')",250)');
}
else if ((a[i].id).search("exuberant") != -1){
eval('setInterval("doBlink(' + i + ')",100)');
}
}
}
}
}	
/*This function recieves elements from Blink() and alternates visibility */
function doBlink(index)
{
var a = document.getElementsByTagName('blink');
if (a[index].style.visibility == "hidden")
a[index].style.visibility = "visible";
else
a[index].style.visibility = "hidden";
}
/*This function sorts marquee elements by tag Name, and serches the ID array for keywords to determine speed. Loops for each speed setting adjust scrollAmmount and scrollDelay for browsers which support marquees.*/
function Marquee() {
if(document.getElementById)
{
var obj = document.getElementsByTagName("marquee");
for (var i=0; i< obj.length; i++)
{  
obj[i].style.visibility="visible";
if ((obj[i].id).indexOf("slothful") != -1)
obj[i].scrollAmount=1;
else if ((obj[i].id).indexOf("slow") != -1)
obj[i].scrollAmount=10;
else if ((obj[i].id).indexOf("fast") != -1)
obj[i].scrollAmount=30;
else if ((obj[i].id).indexOf("exuberant") != -1)
obj[i].scrollAmount=75;
}
}
}	

