slizg=300;
wylink=250;
sBars = {};
sBar.szybk=10;
function sBar(wra,wars,cntId) { this.id=wra;sBars[this.id]=this;this.animString="sBars."+this.id;this.load(wars,cntId); }
sBar.loadLayer=function(wra,id,cntId){if(sBars[wra])sBars[wra].load(id,cntId);};sBar.prototype.load=function(wars,cntId){if(!document.getElementById)return;var wndo,lyr;if(this.wars){lyr=document.getElementById(this.wars);lyr.style.visibility="hidden";}lyr=document.getElementById(wars);wndo=document.getElementById(this.id);lyr.style.top=this.y=0;lyr.style.left=this.x=0;this.maxY=(lyr.offsetHeight-wndo.offsetHeight>0)?lyr.offsetHeight-wndo.offsetHeight:0;this.wd=cntId?document.getElementById(cntId).odstepX:lyr.odstepX;this.maxX=(this.wd-wndo.odstepX>0)?this.wd-wndo.odstepX:0;this.wars=wars;lyr.style.visibility="visible";this.on_load();this.ready=true;};sBar.prototype.on_load=function(){};sBar.prototype.shiftTo=function(lyr,x,y){if(!lyr.style)return;lyr.style.left=(this.x=x)+"px";lyr.style.top=(this.y=y)+"px";};sBar.korektaFire=function(){var ua=navigator.userAgent;if(ua.indexOf("Gecko")>-1&&ua.indexOf("Firefox")==-1&&ua.indexOf("Safari")==-1&&ua.indexOf("Konqueror")==-1){sBar.hold=[];for(var i=0;arguments[i];i++){if(sBars[arguments[i]]){var wndo=document.getElementById(arguments[i]);var holderId=wndo.parentNode.id;var holder=document.getElementById(holderId);document.body.appendChild(holder.removeChild(wndo));wndo.style.zIndex=1000;var pos=getPageOffsets(holder);wndo.style.left=pos.x+"px";wndo.style.top=pos.y+"px";sBar.hold[i]=[arguments[i],holderId];}}window.addEventListener("resize",sBar.rePositionGecko,true);}};sBar.rePositionGecko=function(){if(sBar.hold){for(var i=0;sBar.hold[i];i++){var wndo=document.getElementById(sBar.hold[i][0]);var holder=document.getElementById(sBar.hold[i][1]);var pos=getPageOffsets(holder);wndo.style.left=pos.x+"px";wndo.style.top=pos.y+"px";}}};function getPageOffsets(el){var left=el.offsetLeft;var top=el.offsetTop;if(el.offsetParent&&el.offsetParent.clientLeft||el.offsetParent.clientTop){left+=el.offsetParent.clientLeft;top+=el.offsetParent.clientTop;}while(el=el.offsetParent){left+=el.offsetLeft;top+=el.offsetTop;}return{x:left,y:top};};
sBar.zat = function(wra) { if ( sBars[wra] ) sBars[wra].koniecSuwaka(); }
sBar.acc = function(wra) { if ( sBars[wra] ) sBars[wra].szybk *= 2; }
sBar.odn = function(wra) { if ( sBars[wra] ) sBars[wra].szybk /= 2; }
sBar.prototype.wio = function(szybk) { if (!this.ready) return; if (this.timerId) clearInterval(this.timerId); this.szybk = szybk || sBar.szybk; this.lyr = document.getElementById(this.wars); this.lastTime = ( new Date() ).getTime(); this.on_scroll_zacznij(); this.timerId = setInterval(this.animString + ".suw()", 10); }

sBar.prototype.suw = function() {
  var now = ( new Date() ).getTime();
  var d = (now - this.lastTime)/1000 * this.szybk;
  if (d > 0) { var y = this.y + this.fy * d; if (this.fy == 0) { if (( this.fy == -1 && y > -this.maxY ) || ( this.fy == 1 && y < 0 )) { this.lastTime = now; this.shiftTo(this.lyr, x, y); this.on_suw(x, y); } else { clearInterval(this.timerId); this.timerId = 0; this.shiftTo(this.lyr, this.endX, this.endY); this.on_suw_end(this.endX, this.endY); }} }
}

sBar.prototype.koniecSuwaka = function() {
  if (!this.ready) return;
  if (this.timerId) clearInterval(this.timerId);
  this.timerId = 0;  this.lyr = null;
}

sBar.prototype.on_suw = function() {}
sBar.prototype.on_suw_zacznij = function() {}
sBar.prototype.on_suw_end = function() {}
sBar.prototype.on_slide_zacznij = function() {}
sBar.prototype.on_slide = function() {}
sBar.prototype.on_slide_end = function() {}

var slizgawka = {
  obj: null,
  init: function (bar, track, axis, x, y) {
    x = x || 0; y = y || 0;
    bar.style.left = x + "px"; bar.style.top = y + "px"; bar.axis = axis; track.bar = bar;
    if (axis == "h") {
      bar.trkWd = track.odstepX; 
      bar.maxX = bar.trkWd - bar.odstepX - x; 
      bar.minX = x; bar.maxY = y; bar.minY = y;
    } else { bar.trkHt = track.offsetHeight; bar.maxY = bar.trkHt - bar.offsetHeight - y; bar.maxX = x; bar.minX = x; bar.minY = y; }
    bar.on_drag_zacznij =  bar.on_drag =   bar.on_drag_end = 
    bar.onmousedown = this.zacznijPrzesuwanie; 
  },
  zacznijPrzesuwanie: function (e) {
    e = czynnosc.DOMit(e);
    if ( slizgawka.aniTimer ) clearInterval(slizgawka.aniTimer);
    var bar = slizgawka.obj = this;
    bar.downX = e.clientX; bar.downY = e.clientY;
    bar.zacznijX = parseInt(bar.style.left);
    bar.zacznijY = parseInt(bar.style.top);
    bar.on_drag_zacznij(bar.zacznijX, bar.zacznijY);
    czynnosc.add( document, "mousemove", slizgawka.przesuwaj, true );
    czynnosc.add( document, "mouseup",   slizgawka.konczPrzesuwanie,  true );
    e.stopPropagation();
  },
  przesuwaj: function (e) {
    e = e? e: window.event;
    if (!slizgawka.obj) return;
    var bar = slizgawka.obj; 
    var nx = bar.zacznijX + e.clientX - bar.downX;
    var ny = bar.zacznijY + e.clientY - bar.downY;
    nx = Math.min( Math.max( bar.minX, nx ), bar.maxX);
    ny = Math.min( Math.max( bar.minY, ny ), bar.maxY);
    bar.style.left = nx + "px"; bar.style.top  = ny + "px";
    bar.on_drag(nx,ny);
    return false;  
  },
  konczPrzesuwanie: function () {
    czynnosc.remove( document, "mousemove", slizgawka.przesuwaj, true );
    czynnosc.remove( document, "mouseup",   slizgawka.konczPrzesuwanie,  true );
    if ( !slizgawka.obj ) return;
    slizgawka.obj.on_drag_end( parseInt(slizgawka.obj.style.left), parseInt(slizgawka.obj.style.top) );
    slizgawka.obj = null;  
  }
}

sBar.prototype.bSizeDragBar = true;
sBar.prototype.setUpScrollbar = function(id, trkId, axis, offx, offy) {
  if (!document.getElementById) return;
  var bar = document.getElementById(id);
  var trk = document.getElementById(trkId);
  slizgawka.init(bar, trk, axis, offx, offy);
  bar.wn = sBars[this.id];
  if (axis == "v") this.vBarId = id; else this.hBarId = id;
  if (this.bSizeDragBar) this.ustawSzer();
  if (bar.maxY > 1)
  {
    bar.on_drag_zacznij=bar.on_slide_zacznij=sBar.bierzWindane;
    bar.on_drag_end=bar.on_slide_end=sBar.cosWindane;
    bar.on_drag=bar.on_slide=sBar.aktuWindane;
  }
  else
  {
    bar.style.display = 'none';
    trk.style.display = 'none';
  }
}

sBar.bierzWindane = function()  { this.wnLyr = document.getElementById(this.wn.wars); }
sBar.cosWindane = function() { this.wnLyr = null; }
sBar.aktuWindane = function(x, y) {
  var nx, ny;
  if (this.axis == "v") { nx = this.wn.x; ny = -(y - this.minY) * ( this.wn.maxY / (this.maxY - this.minY) ) || 0;
  } else { ny = this.wn.y; nx = -(x - this.minX) * ( this.wn.maxX / (this.maxX - this.minX) ) || 0; }
  this.wn.shiftTo(this.wnLyr, nx, ny);
}

sBar.prototype.updateScrollbar = function(x, y) {
  var nx, ny;
  if ( this.vBarId ) {
    if (!this.maxY) return;
    ny = -( y * ( (this.vbar.maxY - this.vbar.minY) / this.maxY ) - this.vbar.minY );
    ny = Math.min( Math.max(ny, this.vbar.minY), this.vbar.maxY);  
    nx = parseInt(this.vbar.style.left);
    this.vbar.style.left = nx + "px"; this.vbar.style.top = ny + "px";
  } if ( this.hBarId ) {
    if (!this.maxX) return;
    nx = -( x * ( (this.hbar.maxX - this.hbar.minX) / this.maxX ) - this.hbar.minX );
    nx = Math.min( Math.max(nx, this.hbar.minX), this.hbar.maxX);
    ny = parseInt(this.hbar.style.top);
    this.hbar.style.left = nx + "px"; this.hbar.style.top = ny + "px";
  } 
}

sBar.prototype.restoreScrollbars = function() {
  var bar;
  if (this.vBarId) { bar = document.getElementById(this.vBarId); bar.style.left = bar.minX + "px"; bar.style.top = bar.minY + "px"; }
  if (this.hBarId) { bar = document.getElementById(this.hBarId); bar.style.left = bar.minX + "px"; bar.style.top = bar.minY + "px"; }
}

sBar.prototype.ustawSzer = function() {
  var bar;
  var lyr = document.getElementById(this.wars);
  var wn = document.getElementById(this.id);
  if (this.vBarId) { bar = document.getElementById(this.vBarId);
    bar.style.height = (lyr.offsetHeight > wn.offsetHeight)? bar.trkHt / ( lyr.offsetHeight / wn.offsetHeight ) + "px": bar.trkHt - 2*bar.minY + "px";
    bar.maxY = bar.trkHt - bar.offsetHeight - bar.minY; 
  }
  if (this.hBarId) { bar = document.getElementById(this.hBarId);
    bar.style.width = (this.wd > wn.odstepX)? bar.trkWd / ( this.wd / wn.odstepX ) + "px": bar.trkWd - 2*bar.minX + "px";
    bar.maxX = bar.trkWd - bar.odstepX - bar.minX; 
  }
}

sBar.prototype.on_load = function() { this.restoreScrollbars(); if (this.bSizeDragBar) this.ustawSzer(); }
sBar.prototype.on_suw = sBar.prototype.on_slide = function(x,y) { this.updateScrollbar(x,y); }
sBar.prototype.on_suw_zacznij = sBar.prototype.on_slide_zacznij = function() { if ( this.vBarId ) this.vbar = document.getElementById(this.vBarId); if ( this.hBarId ) this.hbar = document.getElementById(this.hBarId); }
sBar.prototype.on_suw_end = sBar.prototype.on_slide_end = function(x, y) { this.updateScrollbar(x,y); this.lyr = null; this.bar = null; }

var czynnosc = {
  add: function(obj, etype, fp, cap) { cap = cap || false; if (obj.addEventListener) obj.addEventListener(etype, fp, cap); else if (obj.attachEvent) obj.attachEvent("on" + etype, fp); }, 
  remove: function(obj, etype, fp, cap) { cap = cap || false; if (obj.removeEventListener) obj.removeEventListener(etype, fp, cap);else if (obj.detachEvent) obj.detachEvent("on" + etype, fp);
}, 
  DOMit: function(e) { 
    e = e? e: window.event;
    e.tgt = e.srcElement? e.srcElement: e.target;
    if (!e.preventDefault) e.preventDefault = function () { return false; }
    if (!e.stopPropagation) e.stopPropagation = function () { if (window.event) window.event.cancelBubble = true; }
    return e;
  }
}

//Jays fantastic buttons hack->
function goTop() {
    var dragBarHeight = document.getElementById('dragBar').offsetHeight;
    document.getElementById('lyr1').style.cssText='top:0px;left:0px;visibility:visible;';
    document.getElementById('dragBar').style.cssText='top:1px;left:1px;height:' + dragBarHeight + 'px;';
}

function goBottom() {
    var dragBarHeight = document.getElementById('dragBar').offsetHeight;
    var trackH = document.getElementById('track').offsetHeight;
    var dragbarminusH = document.getElementById('dragBar').offsetHeight;
    var topSpace = document.getElementById('dragBar').offsetTop;
    var dragbarPos = (trackH - dragbarminusH);
    var spaceLeft = (dragbarPos - topSpace);
    //alert("spaceLeft is:" + spaceLeft);
    var incremEnt = (topSpace + 20);
    var ratioMultiplier = (incremEnt / spaceLeft);
    //alert("ratioMultiplier is:" + ratioMultiplier);
    if (spaceLeft > 1) {
    document.getElementById('dragBar').style.cssText='top:' + incremEnt + 'px;left:1px;height:' + dragBarHeight + 'px;';
        }
    
    var totalH = document.getElementById('lyr1').offsetHeight;
    var minusH = document.getElementById('wn1').offsetHeight;
    var lyrTopSpace = document.getElementById('lyr1').offsetTop;
    var bottomPos = (totalH - minusH);
    var contentPosit = (bottomPos - lyrTopSpace);
    //alert("spaceLeft is:" + contentPosit);
    var ratioHeight = (totalH / trackH);
    
   // alert("ratioHeight is:" + ratioHeight);
    var incrementNum = (ratioHeight * 20);
    var incremEntLyr = (lyrTopSpace - incrementNum);
   // alert("incremEntLyr:" + incremEntLyr + " - " + contentPosit);
   
  
    var limitToplyr= -(totalH - minusH ) 
    
    //alert("limitToplyr:" + limitToplyr + "lyrTopSpace" +lyrTopSpace);
 
    if (lyrTopSpace > limitToplyr )
  {
    document.getElementById('lyr1').style.cssText='top:' + incremEntLyr + 'px;left:0px;visibility:visible;';

  }
   
   
    /*document.getElementById('dragBar').style.cssText='top:' + dragbarPos + 'px;left:1px;height:' + dragBarHeight + 'px;';
    */
}