var dragged=null;
var plusx, plusy;
var d=20;
addEvent(window, 'load', InitScrolls);

function InitScrolls()
{
  mocsok=getElementsByClass('kapa_scroll');
  var id;
  for (var i=0; i<mocsok.length; i++)
  {
    id=mocsok[i].id;
    
    var gec1=document.getElementById(id+'_bogyo');
    var gec2=document.getElementById(id+'_text');
    var gec3=document.getElementById(id+'_up');
    var gec4=document.getElementById(id+'_down');
    
    addEvent(gec1, 'mousedown', BogyoOnclick);
    addEvent(gec3, 'mousedown', GoUp);
    addEvent(gec4, 'mousedown', GoDown);
    addEvent(mocsok[i], 'mousemove', BogyoMove);
    addEvent(mocsok[i], 'click', ScrollClick);
    if (!window.opera) addEvent(gec2, 'mousewheel', TextOnWheel);    
    addEvent(gec2, 'DOMMouseScroll', TextOnWheel);
    
    //gec2.scrollTop=0;

    disableSelection(mocsok[i]);  
    disableSelection(gec1);
    disableSelection(gec3);  
    disableSelection(gec4);  
  }

  addEvent(window, 'mouseup', Release);
  addEvent(document.body, 'mouseup', Release);  
}

function TextOnWheel(e)
{
  if (window.event) e=window.event;
  if (e.srcElement) var szar=e.srcElement; else var szar=e.target;

  if (e.wheelDelta) /* IE/Opera. */ 
  { 
    delta = -e.wheelDelta/120;
    /** In Opera 9, delta differs in sign as compared to IE.*/
    //if (!window.opera) delta = -delta;
    //alert(delta);
  } 
  else if (e.detail) /* Mozilla */ 
  { 
    /* In Mozilla, sign of delta is different than in IE. Also, delta is multiple of 3. */
    delta = e.detail/3;
  }

  /* delta: + = up, - = down */
  if (delta)
  {
    var xxx=szar.id.indexOf('_');
    var vazzer=szar.id.substr(0,xxx);
    var gec=document.getElementById(vazzer+'_bogyo');
    var scrollh=szar.scrollHeight;
    var lofaszh=gec.parentNode.offsetHeight;
    var mocskh=gec.offsetHeight;
    var hova=szar.scrollTop+delta*3;
    
    //ezt atszamitjuk a szkrollra
    var ezkell=Math.round(hova/(scrollh-szar.clientHeight)*(lofaszh-mocskh));

    var lofasz=findPos(gec.parentNode);
    MoveBogyoTo(ezkell+lofasz[1], gec);
    ScrollTextTo(CutPx(gec.style.top), szar, gec);
  }
  
  return false;
}

function GoUp(e)
{
  if (window.event) e=window.event;
  if (e.srcElement) var szar=e.srcElement; else var szar=e.target;
  var xxx=szar.id.indexOf('_');
  var vazzer=szar.id.substr(0,xxx);
  var gec=document.getElementById(vazzer+'_bogyo');
  var lofasz=findPos(gec.parentNode);
  var textdiv=document.getElementById(vazzer+'_text');
  var hova=CutPx(gec.style.top)*1-d;
  MoveBogyoTo(hova+lofasz[1], gec);
  ScrollTextTo(CutPx(gec.style.top), textdiv, gec);
}

function GoDown(e)
{
  if (window.event) e=window.event;
  if (e.srcElement) var szar=e.srcElement; else var szar=e.target;
  var xxx=szar.id.indexOf('_');
  var vazzer=szar.id.substr(0,xxx);
  var gec=document.getElementById(vazzer+'_bogyo');
  var lofasz=findPos(gec.parentNode);
  var textdiv=document.getElementById(vazzer+'_text');
  var hova=CutPx(gec.style.top)*1+d;
  MoveBogyoTo(hova+lofasz[1], gec);
  ScrollTextTo(CutPx(gec.style.top), textdiv, gec);
}

function BogyoOnclick(e)
{
  if (window.event) e=window.event;
  if (e.srcElement) var szar=e.srcElement; else var szar=e.target;
  dragged=szar;
  if (e.layerX) { plusx=e.layerX; plusy=e.layerY; }
  else { plusx=e.offsetX; plusy=e.offsetY; }
  
  disableSelection(document.body);

  return false;
}

function BogyoMove(e)
{
  if (window.event) e=window.event;
  if (e.srcElement) var szar=e.srcElement; else var szar=e.target;
  if (dragged)
  {
    //eger koordinatai
    var mm=mouseCoords(e);
    MoveBogyoTo(mm.y-plusy, dragged);

    //megszerezzuk a text div id-jet
    var xxx=szar.id.indexOf('_');
    if (xxx!=-1) var vazzer=szar.id.substr(0,xxx); else var vazzer=szar.id;
    var textdiv=document.getElementById(vazzer+'_text');
    
    ScrollTextTo(CutPx(dragged.style.top), textdiv, dragged);
  }

  return false;
}

function Release(e)
{  
  genyer=dragged;

  dragged=null;
  enableSelection(document.body);

  var xxx=genyer.id.indexOf('_');
  var vazzer=genyer.id.substr(0,xxx);
  var textdiv=document.getElementById(vazzer+'_text');
  ScrollTextTo(CutPx(genyer.style.top), textdiv, genyer);    

  return false;
}

function ScrollClick(e)
{
  if (window.event) e=window.event;
  if (e.srcElement) var szar=e.srcElement; else var szar=e.target;
  
  if (dragged!=null) { dragged=null; }   
  if (dragged==null)
  {
    var mm=mouseCoords(e);
    var vazzer=szar.id;
    var bogyo=document.getElementById(vazzer+'_bogyo');   
    var mocskh=bogyo.offsetHeight;
    var hova=mm.y-Math.round(mocskh/2);
    MoveBogyoTo(hova, bogyo);

    //megszerezzuk a text div id-jet
    var textdiv=document.getElementById(vazzer+'_text');    
    ScrollTextTo(CutPx(bogyo.style.top), textdiv, bogyo);
  }
}

function MoveBogyoTo(y, bogyo)
{
    //ez a szkrollbar koordinatai meg magassaga, kell majd hogy vizsgalhassuk kimegy-e
    var lofasz=findPos(bogyo.parentNode);
    var lofaszh=bogyo.parentNode.offsetHeight;
    //bogyo magassaga
    var mocskh=bogyo.offsetHeight;
    //alert('lofasz1 '+lofasz[1]+', lofaszh '+lofaszh+', mocskh '+mocskh+', y '+y);
    
    //mozgatjuk ugy hogy ki ne menjen a kis gecc
    if (y>lofasz[1]) {
      var komp=y-lofasz[1];
      if (komp+mocskh<lofaszh)
        bogyo.style.top=komp+'px';
      else
        bogyo.style.top=lofaszh-mocskh+'px';
    }
    else bogyo.style.top='0px';
}

function ScrollTextTo(hova, textdiv, bogyo)
{
    var scrollh=textdiv.scrollHeight;
    //az opera a paddingot nem szamolja bele a scrollheightba
    if (window.opera) scrollh+=CutPx(textdiv.style.padding);
    var lofaszh=bogyo.parentNode.offsetHeight;
    var mocskh=bogyo.offsetHeight;
    
    //ezt atszamitjuk a teljes dobozra
    var ezkell=Math.round(hova/(lofaszh-mocskh)*(scrollh-textdiv.clientHeight));
    textdiv.scrollTop=ezkell;
}