
// div scroll V. 2.1
// © markus werner 2004, www.marwerner.de, info@marwerner.de
var timer=null;
var ypos=null; /* initialisierung */
var d=document;

// Hoch- und Runter- Scrollen mit + und - Taste
function scroll(direction,speed){
 if(direction=="up")dir=-speed;
 if(direction=="down")dir=speed;
 if(d.all) {
 	var Kontrolle=d.all.drag.offsetTop;
         var aktY=d.all.scrollCont.offsetTop;
         }
 if(!document.all && d.getElementById) {
 	var Kontrolle=d.getElementById('drag').offsetTop;
         var aktY=d.getElementById('scrollCont').offsetTop;
         }
 //Kontrolle; falls vorher schon der Regler bewegt wurde, ist die y Position des Regler >1 sonst else ...
  if(Kontrolle>1)ypos=aktY + dir;
  else
  ypos = ypos + dir;

  // Aufruf der Werte aus Funktionen unten
  maxY=wieVIEL();
  maxDrag=umWAS();

  // das eigentliche scrollen
         // IE4
         if(document.all){
         // Inhalt Scrollen
	d.all.scrollCont.style.top=ypos;
         // Regler Scrollen
        d.all.drag.style.top=-ypos/maxDrag +"px";
	}
         /* w3c */
      	if(!d.all && d.getElementById){
	d.getElementById("scrollCont").style.top=ypos+"px";
         d.getElementById("drag").style.top=-ypos/maxDrag+"px";
	}

/* Regie */
 if(ypos<= -maxY && direction=="up") {
 	// Stoppbedingung Unten
 	clearTimeout(timer);
         ypos=-maxY /* fixiert den scroll-div an seiner Position, sonst hässliches ruckeln */
         }
         else
 if(ypos>1 && direction=="down") {
 	// Stoppbedingung Oben
 	clearTimeout(timer);
         ypos=0; /* fixiert den scroll-div an seiner Position, sonst hässliches ruckeln */
         }
         else
 	timer = setTimeout("scroll('" + direction + "', " + speed + ")", 30);
 }

function stop() {
clearTimeout(timer);
}

// Verschieben des Scrollbalkens ########################
//Das Objekt, das gerade bewegt wird.
var dragobjekt = null;

// Position, an der das Objekt angeklickt wurde.
var dragy = 0;

// Mausposition
var posy = 0;

function draginit() {
 // Initialisierung der Überwachung der Events
  d.onmousemove = drag;
  d.onmouseup = dragstop;
}

function dragstart(element) {
   //Wird aufgerufen, wenn ein Objekt bewegt werden soll.
  dragobjekt = element;
  dragy = posy - dragobjekt.offsetTop;
}

function dragstop() {
  //Wird aufgerufen, wenn ein Objekt nicht mehr bewegt werden soll.
  dragobjekt=null;
}

function drag(ereignis) {
  //Wird aufgerufen, wenn die Maus bewegt wird und bewegt bei Bedarf das Objekt.
  posy = document.all ? window.event.clientY : ereignis.pageY;
  // posy vermindert um die Y-Position von div "gesamt"
 if(d.all) posy=posy-document.all.gesamt.offsetTop;
 if(!d.all && d.getElementById) posy=posy-d.getElementById('gesamt').offsetTop;

  // stoppbedingung Unten, Abzug: scrollbar Höhe - Höhe Regler(drag)
  if(d.all) var Abzug=d.all.scrollbar.offsetHeight;
  if(!d.all && d.getElementById) var Abzug=d.getElementById("scrollbar").offsetHeight;
  if(posy>=Abzug-2){
  dragstop();
  }
  else
  if(posy<=d.getElementById('drag').offsetHeight-2){
  // stoppbedingung
  dragstop();
  }
  else if(dragobjekt != null ) {
  // + 3 Schönheitskorrektur
   dragobjekt.style.top = (posy - dragy )+3 + "px";
   //inhalt bewegen, +0.1 Schönheitskorrektur
   maxDrag=umWAS();
   d.getElementById("scrollCont").style.top=(-dragobjekt.offsetTop*(maxDrag)+0.1) +"px" ;
  }
}

// Allgemeine Funktionen zur Berechnung der max. Scrollwege
function wieVIEL(){
 // Um wieviel bewegen, Ermitteln der zu Scrollenden Höhe des Scrollfensters
 var min=d.getElementById('scrollContainer').offsetHeight;
 var max=d.getElementById('scrollCont').offsetHeight;
 var maxY=max-min;
 return maxY;
}

function umWAS() {
 // Maximaler Scrollweg des Scrollbalkens
  maxY=wieVIEL();
 // Zahl auf 1 NachkommaStellen runden
 var maxDrag=(maxY/(d.getElementById('scrollbar').offsetHeight-d.getElementById('drag').offsetHeight-4)).toPrecision(2);
 return maxDrag;
}


