var ns4 = (document.layers)? true:false;
var ie4 = (document.all)? true:false;
var dom = (document.getElementById)? true:false;

function GetNS4Object(MyID,MyDocument){
var MyObject= eval('MyDocument.'+MyID);
if (!(MyObject))
	for(var i=0;i<MyDocument.layers.length;i++){
		MyObject = GetNS4Object(MyID,MyDocument.layers[i].document);
		if (MyObject) break;
	}
return MyObject;
}

function GetObject(id){
if( document.getElementById )
  	return document.getElementById( id );
  else if( document.all && document.all( id ) )
  	return document.all( id );
  else if( document.layers && document.layers[ id ] )
  	return document.layers[ id ];
  else
  	return false;
}

function GetCSS(MyObject){
if (dom || ie4) return MyObject.style;
else if (ns4) return MyObject;
else return 0;
}

function GetHeight(MyObject){
if (dom || ie4) return MyObject.offsetHeight;
else if (ns4) return MyObject.clip.height;
else return 0;
}

function GetWidth(MyObject){ 
if (dom || ie4) return MyObject.offsetWidth;
else if (ns4) return MyObject.clip.width;
else return 0;
}

function GetTop(MyObject){
if (dom || ie4) 
  return (MyObject.offsetTop);
if (ns4) return MyObject.y;
  return 0;
}

function GetLeft(MyObject){
if (dom || ie4) return MyObject.offsetLeft;
if (ns4) return MyObject.x;
return 0;
}

function MoveObject(myX,myY){
this.X = myX;
this.Y = myY;
this.CSS.left=this.X+"px";
this.CSS.top=this.Y+"px";
}

function MoveObjectUp(mystep){
this.Y -= mystep;
this.CSS.top=this.Y+"px";
}

function MoveObjectDown(mystep){
this.Y += mystep;
this.CSS.top=this.Y+"px";
}

function CreateObject(DivId,MyObject){
if (MyObject)
  this.Object = MyObject;
else
  this.Object = GetObject(DivId);

if (this.Object){
  this.CSS = GetCSS(this.Object);
  this.Height = GetHeight(this.Object);
  this.Width = GetWidth(this.Object);
  this.X = GetTop(this.Object);
  this.Y = GetLeft(this.Object);
  this.Move = MoveObject;
  this.Up = MoveObjectUp;
  this.Down = MoveObjectDown;
  }
return this;
}

function DelTextNode(MyObject){
var node = MyObject.firstChild;
var next;

while (node){
  next = node.nextSibling;
  if (node.nodeType == 3)
    MyObject.removeChild(node);
  node = next;
  }
}

function CreateChildren(MyObject,HoriSpacer,VertSpacer){
var i=0;
var MyChildren = new Array();
if (dom){
  DelTextNode(MyObject);
  for (i=0;i<MyObject.childNodes.length;i++){
    MyChildren[i] = new CreateObject(0,MyObject.childNodes[i]);
    MyChildren[i].Move(i*HoriSpacer,i*VertSpacer);
    }
  return MyChildren;
  }
if (ie4){
  for (i=0;i<MyObject.children.length;i++){
    MyChildren[i] = new CreateObject(0,MyObject.children(i));
    MyChildren[i].Move(i*HoriSpacer,i*VertSpacer);
    }
  return MyChildren;
  }
if (ns4){
  for (i=0;i<MyObject.document.layers.length;i++){
    MyChildren[i] = new CreateObject(0,MyObject.layers[i]);
    MyChildren[i].Move(i*HoriSpacer,i*VertSpacer);
    }
  return MyChildren;   
  }
}

function ScrollUp(){
var MyInterval = this.Interval1;
this.stop();
if (this.Children[this.FirstChildren].Y<-this.threshold){
  MyInterval = this.Interval2;
  this.Children[this.FirstChildren].Down(this.TotalHeight);
  if (this.FirstChildren<this.Children.length-1){
    this.FirstChildren++;
    this.threshold += this.Children[this.FirstChildren].Height;
    }
  else{
    this.FirstChildren = 0;
    this.threshold = this.Children[this.FirstChildren].Height+this.Spacer;
  }
}
for (var i=0;i<this.Children.length;i++){
  this.Children[i].Up(this.Step);
}
this.ProcessId = setTimeout(this.name + '.start()', MyInterval);
}

  
function ScrollStop(){
if (this.ProcessId)
  clearTimeout(this.ProcessId);
this.ProcessId = null;
}

function Box(BoxName, DivId, myStep, myTempo1, myTempo2, mySpacer){
this.name = BoxName;
this.Step = myStep ? myStep : 1;
this.Interval1 = myTempo1 ? myTempo1 : 100;
this.Interval2 = myTempo2 ? myTempo2 : 100;
this.Spacer = mySpacer ? mySpacer : 0;
this.ProcessId	= null;
this.Container = new CreateObject(DivId);
this.Children = new CreateChildren(this.Container.Object,0,mySpacer);
this.FirstChildren = 0;
this.LastChildren = this.Children.length-1;
this.threshold = this.Children[0].Height+this.Spacer;
var myHeight = 0;
for (var i=0;i<this.Children.length;i++){
  myHeight += (this.Children[i].Height + this.Spacer);
  }
this.TotalHeight = myHeight;
this.Container.visibility = 'visible';
}

Box.prototype.start = ScrollUp;
Box.prototype.stop = ScrollStop;