// Copyright 1996 - Tomer and Yehuda Shiran
// This example will appear in our forthcoming book on JavaScript.
// Feel free to "steal" this code provided that you leave this notice as is.
// Additional examples from the book can be found at http://www.geocities.com/SiliconValley/9000/
// For more information contact Tomer or Yehuda Shiran <yshiran@iil.intel.com>
// set speed of banner (pause in milliseconds between addition of new character)
// decrease value to increase speed (must be positive)
// set pause between completion of message and beginning of following message
var pause = 1000
// increase value to increase pause
// set initial values
var incchar = ""
var speed = 50
var timerID = null
var bannerRunning = false
var banner = "banner"
// create array
var ar = new Array()
// assign the strings to the array's elements
// leading blanks here are hex A0
ar[0] = "Welcome to our Web Site!"
ar[1] = "Please explore all the links."
ar[2] = "Download the Triangle program."
ar[3] = "E-mail us for more information."
ar[4] = "        Have a great day!"
ar[5] = ""
var col = new Array()
col[0] = "darkviolet"
col[1] = "blue"
col[2] = "darkgreen"
col[3] = "crimson"
col[4] = "black"
// assign index of current message
var message = 0
// empty string initialization
var state = " "
// no value is currently being displayed
clearState()
// stop the banner if it is currently running
function stopBanner() {
// if banner is currently running
if (bannerRunning)
// stop the banner
clearTimeout(timerID)
// timer is now stopped
timerRunning = false
}
// start the banner
function startBanner() {
// make sure the banner is stopped
stopBanner()
// start the banner from the current position
ScrollMessage()
}
// assign state a string of "0" characters of the length of the current message
function clearState() {
// initialize to empty string
state = ""
// create string of same length containing 0 digits
for (var i = 0; i < ar[message].length; ++i) {state += "0"
}
}
// display the current message
function ScrollMessage() {
// if the current message is done
if (getString()) {
// increment message
message++
// if new message is out of range wrap around to first message
if (ar.length <= message)
message = 0
// new message is first displayed as empty string
clearState()
// display next character after pause milliseconds
if (navigator.userAgent.indexOf("MSIE") != -1) {speed = 25; pause = 1000;}
if (navigator.userAgent.indexOf("Safari") != -1) {incchar = "";}
timerID = setTimeout("ScrollMessage()", pause)
}
else {
// initialize to empty string
var str = ""
// built string to be displayed (only character selected thus far are displayed)
for (var j = 0; j < state.length; ++j) {
str += (state.charAt(j) == "1") ? ar[message].charAt(j) :  incchar
}
// partial string is placed in banner
   banner = document.getElementById("Scroll");
   banner.style.color=col[message]
   banner.style.fontSize="16"
   banner.style.fontFamily="Arial"
   banner.style.fontStyle="Italic"
   banner.style.fontWeight="Bold"
   banner.firstChild.nodeValue = str;
// add another character after speed milliseconds
timerID = setTimeout("ScrollMessage()", speed)
}
}
function getString() {
// set variable to true (it will stay true unless proven otherwise)
var full = true
// set variable to false if a free space is found in string (a not-displayed char)
for (var j = 0; j < state.length; ++j) {
// if character at index j of current message has not been placed in displayed string
if (state.charAt(j) == 0)
full = false
}
// return true immediately if no space found (avoid infinite loop later)
if (full) return true
// search for random until free space found (broken up via break statement)
while (1) {
// a random number (between 0 and state.length - 1 == message.length - 1)
var num = getRandom(ar[message].length)
// if free space found break infinitive loop
if (state.charAt(num) == "0")
break
}
// replace the 0 character with 1 character at place found
state = state.substring(0, num) + "1" + state.substring(num + 1,
state.length)
// return false because the string was not full (free space was found)
return false
}
function getRandom(max) {
// create instance of current date
var now = new Date()
// create a random number (good generator)
var num = now.getTime() * now.getSeconds() * Math.random()
// cut random number to value between 0 and max - 1, inclusive
return num % max
}
startBanner()
// -->


