// This file is called marquee.js

window.status = "The Trolleyville Times";

// If possible, try to keep text on one line. No comma after last text.

var banners = [

"READ <font color='darkred'>THE TROLLEYVILLE TIMES</font> FOR THE LATEST IN TROLLEY MODELING!",
"THE NEXT SOUTHERN CALIFORNIA <font color='blue'>GREAT TRAIN EXPO</font> IS IN DEL MAR, DECEMBER 1-2, 2007!",
"THE <font color='red'>WORLD'S GREATEST HOBBY ON TOUR</font> IS COMING TO SACRAMENTO, "+
" AND DEL MAR, CALIFORNIA IN JANUARY 2008!"

];

// Global variables
var timer;          // recursive function variable
var ts = ss = 12;   // speed of timer, lower number is faster, higher slower
var z = -1;         // random variable
var a = 0;          // banners loop variable
var speed = sp = 1; // reverse scroll & speedy exit speed
var o = op = 100;   // default opacity
var j = 0;          // bouncy exit variable
var p = hw = 750;   // width of Trolleyville Times table
var t = tt = 0;     // top of marquee div (tt is holder variable)
var len = 0;        // length of text
var IE = 1;         // Disable some effects if not Internet Explorer

function doMarquee() {

 document.write("<table id='t1' width=100% height=35 border=0");
 document.write(" cellspacing=0 cellpadding=0>");
 document.write("<tr><td>&nbsp;</td></tr></table>");

 tt = getY(document.getElementById("t1")) + 5; t = tt;

 document.write("<table id='t2' style='position:absolute;left:"+hw+";");
 document.write("top:"+(t-10)+";z-index:2;' border=0 width=50% height=150>");
 document.write("<tr><td bgcolor=white>&nbsp;</td></tr></table>");

 document.write("<div id='marquee' class='mtext'>&nbsp;</div>");

 document.getElementById("marquee").style.top  = t;
 document.getElementById("marquee").style.left = hw;
 document.getElementById("marquee").innerHTML  = banners[a];
 len = banners[a].length;

 // Check for Firefox
 if (navigator.userAgent.indexOf("Firefox") != -1) {
  IE = 0;
 }

 runMarquee();
}

// Get top coordinate of object
function getY(element) {
 var y = 0;
 for (var e = element; e; e=e.offsetParent)
  y += e.offsetTop;
 for (e=element.parentNode; e && e != document.body; e = e.parentNode)
  if (e.scrollTop) y -= e.scrollTop;
 return y;
}

function runMarquee() {
 timer = setTimeout("runMarquee()", ts);    // recursive function

 if (z == 1 || z == 6) {
  // rising text
  document.getElementById("marquee").style.top = t--;
  if (t < -25) {
   t = tt;
   document.getElementById("marquee").style.top = tt;
   p = -4000;
  }

 } else if (z == 2 || z == 7) {
  // fading text
  if (o > 0) {
   o--;
   document.getElementById("marquee").style.filter="alpha(opacity="+o+")";
   document.getElementById("marquee").style.opacity=(o*.01);
  } else {
   p = -4000;
   o = op;
   document.getElementById("marquee").style.filter="alpha(opacity=100)";
   document.getElementById("marquee").style.opacity=1;
  }

 } else if (z == 3 || z == 8) {
  //reverse scroll
  if (p < hw) {
   document.getElementById("marquee").style.left = p+=speed;
  } else {
   p = -4000;
  }

 } else if (z == 4 || z == 9) {
  // speedy exit
  speed+=.5;
  p = p - speed;
  document.getElementById("marquee").style.left = p;

 } else if (z == 5 || z == 10) {
  // bouncy exit
  p--;
  document.getElementById("marquee").style.left = p;
  if (j == 0) {
   t++;
   document.getElementById("marquee").style.top = t;
   if (t > tt) { j = 1; }
  }
  if (j == 1) {
   t--;
   document.getElementById("marquee").style.top = t;
   if (t < tt-12) { j = 0; }
  }

 } else if (z == 11 || z == 12) {
  // untype text
  ts = 110;
  document.getElementById("marquee").innerHTML =
  banners[a].substring(0,len--);
  if (len <= 0) {
   p = -4000;
  }

 } else {
  // regular scroll
  document.getElementById("marquee").style.left = p-=speed;  // move it
  // When text centers, pause for 5 seconds
  if (p ==
      Math.ceil((hw-document.getElementById("marquee").offsetWidth)/2) &&
      hw > document.getElementById("marquee").offsetWidth) {
   pause();
  }
 }

 if (p < -document.getElementById("marquee").offsetWidth) {
  // restore default values
  speed = sp;
  z = -1;
  ts = ss;
  a++;
  if (a == banners.length) {
   a = 0;
  }
  p = hw;
  document.getElementById("marquee").style.left= hw;
  document.getElementById("marquee").style.top = tt;
  document.getElementById("marquee").innerHTML = banners[a];
  len = banners[a].length;
 }
}

function pause() {
 clearTimeout(timer);
 // Firefox is allowed one effect
 if (IE == 0) { z = 3; } else { z = random(14); }
 setTimeout("runMarquee()", 5000);  // Wait 5 seconds before continuing
}

function RandomNumberGenerator() {
 var d = new Date();
 this.seed = 2345678901 +
 (d.getSeconds() * 0xFFFFFF) +
 (d.getMinutes() * 0xFFFF);
 this.A = 48271;
 this.M = 2147483647;
 this.Q = this.M / this.A;
 this.R = this.M % this.A;
 this.oneOverM = 1.0 / this.M;
 this.next = NextRandomNumber;
 return this;
}

function NextRandomNumber() {
 var hi = this.seed / this.Q;
 var lo = this.seed % this.Q;
 var test = this.A * lo - this.R * hi;
 if (test > 0) {
  this.seed = test;
 } else {
  this.seed = test + this.M;
 }
 return (this.seed * this.oneOverM);
}

var rand = new RandomNumberGenerator();

// returns random integer between 0 and n
function random(n) {
 return Math.round(n * rand.next());
}
