function HScroll() {

   this.name =" HScroll";
   this.item = new Array();
   this.itemcount = 0;
   this.currentspeed = 0;
   this.scrollspeed = 50;
   this.pausedelay = 1000;
   this.pausemouseover = false;
   this.stop = false;
   this.type = 1;
   this.height = 15;
   this.width = 150;
   this.stopHeight=0;

   this.add =function () {
	  var text = arguments[0];
	  this.item[this.itemcount] = text;
	  this.itemcount = this.itemcount + 1;
   };

   this.start = function () {
	  this.display();
	  this.currentspeed = this.scrollspeed;
      setTimeout(this.name+'.scroll()',this.currentspeed);
   };

   this.display =function () {
	  document.write('<div id="'+this.name+'" style="height:'+this.height+'px;width:'+this.width+'px;position:relative;overflow:hidden;" OnMouseOver="'+this.name+'.onmouseover();" OnMouseOut="'+this.name+'.onmouseout();">');
	  for(var i = 0; i < this.itemcount; i++) {
         if ( this.type == 1) {
		    document.write('<div id="'+this.name+'item'+i+'"style="left:0px;width:'+this.width+'px;position:absolute;top:'+(this.height*i+1)+'px;">');
            document.write(this.item[i]);
            document.write('</div>');
         } else if ( this.type == 2 ) {
            document.write('<div id="'+this.name+'item'+i+'"style="left:'+(this.width*i+1)+'px;width:'+this.width+'px;position:absolute;top:0px;">');
            document.write(this.item[i]);
            document.write('</div>');
         }
	  }
	  document.write('</div>');
   };

   this.scroll = function () {
      var target = document.getElementById(this.name);
      this._absolutize(target)

	  this.currentspeed = this.scrollspeed;
	  if ( !this.stop ) {
         for (i = 0; i < this.itemcount; i++) {
            obj = document.getElementById(this.name+'item'+i).style;
            if ( this.type == 1 ) {
               var t = obj.top.replace(/p[tx]$/, '') - 1;
               obj.top = t + 'px';
               if (t <= this.height*(-1) ) 
                  obj.top = (this.height * (this.itemcount-1)) + 'px';
               if ( t == 0 || ( this.stopHeight > 0 && this.stopHeight - t == 0 )) 
                  this.currentspeed = this.pausedelay;
            } else if ( this.type == 2 ) {
               var l = obj.left.replace(/p[tx]$/, '') - 1;
               obj.left = l + 'px';
               if (l <= this.left*(-1) ) 
                  obj.left = (l* (this.itemcount-1)) + 'px';
               if (l == 0 ) 
                  this.currentspeed = this.pausedelay;
            }
         }
	  }
	  window.setTimeout(this.name+".scroll()",this.currentspeed);
   };

   this.onmouseover = function () {
	  if ( this.pausemouseover ) {
         this.stop = true;
	  }
   };

   this.onmouseout = function () {
	  if ( this.pausemouseover ) {
         this.stop = false;
	  }
   };



   // absolutize scroll area to minimize CPU usage (esp. on Firefox).
   // functinos extracted from prototype.js

   this._absolutize= function(element) {
      if (element.style.position == 'absolute') return;

      var offsets = this._positionedOffset(element);
      var top     = offsets[1];
      var left    = offsets[0];
      var width   = element.clientWidth;
      var height  = element.clientHeight;
      element._originalLeft   = left - parseFloat(element.style.left  || 0);
      element._originalTop    = top  - parseFloat(element.style.top || 0);
      element._originalWidth  = element.style.width;
      element._originalHeight = element.style.height;

      element.style.position = 'absolute';
      element.style.top    = top + 'px';;
      element.style.left   = left + 'px';;
      element.style.width  = width + 'px';;
      element.style.height = height + 'px';;
   };

   this._positionedOffset = function(element) {
      var valueT = 0, valueL = 0;
      do {
         valueT += element.offsetTop  || 0;
         valueL += element.offsetLeft || 0;
         element = element.offsetParent;
         if (element) {
            p = this._getStyle(element, 'position');
            if (p == 'relative' || p == 'absolute') break;
         }
      } while (element);
      return [valueL, valueT];
   };

   this._getStyle = function(element, style) {
      var value = element.style[style];
      if (!value) {
         if (document.defaultView && document.defaultView.getComputedStyle) {
            var css = document.defaultView.getComputedStyle(element, null);
            value = css ? css.getPropertyValue(style) : null;
         } else if (element.currentStyle) {
            value = element.currentStyle[style];
         }
      }

      //  if (window.opera)
      //   if (this._getStyle(element, 'position') == 'static') value = 'auto';

      return value == 'auto' ? null : value;    
   };

}
