var scroller = Class.create({
   initialize: function (text,speed,displayDiv, spacerChar, classname){
      this.text = text;
      this.speed = speed;
      this.displayDiv = displayDiv;
      this.scrollDiv = null;
      this.textSpan = null;
      this.rightDiv = null;
      this.textCnt = 0;
      this.scrollCnt = 0;
      this.isScrolling = false;
      if(" " == spacerChar) spacerChar = null;
      this.spacerChar = spacerChar;
      this.classname = classname;
      this.timer = null;
      this.setupScroller();
   },
     
   setupScroller: function(){
      if(null != this.timer) window.clearTimeout(this.timer);
      this.displayDiv.innerHTML = " ";
      if(null == this.scrollDiv)
          this.scrollDiv = document.createElement("div");
      else
	  this.scrollDiv.innerHTML = " " ;
      if(window.attachEvent){
          //most reliable resize behavior in IE if set inline
          //this.scrollDiv.style.width="100%";
      }

      var textSpan = document.createElement("div");
      textSpan.className = "special-event-center";
      this.textSpan = textSpan;
      var textSpan1 = document.createElement("span");
      textSpan1.innerHTML = this.text;
      textSpan.appendChild(textSpan1);
      var leftDiv = document.createElement("div");
      leftDiv.className = "special-event-left";
      var rightDiv = document.createElement("div");
      rightDiv.className = "special-event-right";
      this.scrollDiv.appendChild(leftDiv);
      this.scrollDiv.appendChild(textSpan);
      this.scrollDiv.appendChild(rightDiv);

      this.displayDiv.appendChild(this.scrollDiv);
      this.scrollDiv.className = this.classname;
      this.displayDiv.style.display = "";
      var width = this.scrollDiv.clientWidth-26;
      this.textSpan.style.width=width + "px";
      this.textCnt = textSpan.scrollWidth;
      if(textSpan1.scrollWidth >= this.textSpan.clientWidth){
         var textSpan2 = document.createElement("span");
         textSpan2.innerHTML = "&nbsp;" + this.spacerChar + " " + this.text;
         this.textSpan.appendChild(textSpan2);
         this.isScrolling = true;
      } else {
         this.isScrolling = false;
      }
      var scrollfunc = this.scroll(this);
      this.timer = window.setTimeout(scrollfunc,this.speed);
   },
 
   update: function(newText,newSpeed){
      var reset = false;
      if(null != newSpeed && newSpeed != this.speed) {
           this.speed = newSpeed;
           reset = true;
      }
      if (null != newText && newText != this.text){
           this.text = newText;
           reset = true;
      }
      if(reset) this.setupScroller();
  },
  shutdown: function(){
     if(null != this.timer) window.clearTimeout(this.timer);
  },  
  scroll: function (scrollObjEx){
      return (
	function () {
        var scrollObj = scrollObjEx;
        if(null != scrollObj.timer) window.clearTimeout(scrollObj.timer);
        if((scrollObj.textCnt < scrollObj.textSpan.clientWidth && scrollObj.isScrolling)
           || (scrollObj.textCnt > scrollObj.textSpan.clientWidth && !scrollObj.isScrolling)){
           //window has been resized and scrolling either needs to start
           //or stop
           scrollObj.setupScroller();
        } else if (scrollObj.scrollCnt < scrollObj.textCnt){
           scrollObj.textSpan.scrollLeft = scrollObj.textSpan.scrollLeft+1;
           scrollObj.scrollCnt = scrollObj.scrollCnt+1;
        } else if (scrollObj.isScrolling) {
           var newTextSpan = document.createElement("span");
           var text = scrollObj.text;
           var num = text.indexOf(scrollObj.spacerChar);
           if(null != scrollObj.spacerChar && (num > 10 || num == -1)){
              text = "&nbsp;" + scrollObj.spacerChar + " " + text;
              scrollObj.textCnt = scrollObj.textCnt+3;
           }
           newTextSpan.innerHTML = text;
           scrollObj.textSpan.scrollLeft = 0;
           scrollObj.scrollCnt = 0;

           scrollObj.textSpan.firstChild.innerHTML = " ";
           scrollObj.textSpan.removeChild(scrollObj.textSpan.firstChild);
           scrollObj.textCnt = scrollObj.textSpan.scrollWidth;
           scrollObj.textSpan.appendChild(newTextSpan);
        }
       var scrollfunc = scrollObj.scroll(scrollObj);
       scrollObj.timer = window.setTimeout(scrollfunc,scrollObj.speed);
       var width = scrollObj.scrollDiv.clientWidth-26;
       scrollObj.textSpan.style.width=width + "px";

    });
 }
});
