var dragged=null;
var plusx, plusy;
var d=20;
addEvent(window, 'load', InitScrolls);

function InitScrolls()
{
  mocsok=getElementsByClass('kapa_scroll(_disabled)?');
  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');
		
		ScrollTextTo(0, gec2, gec1);
		gec1.style.top=0;
		
		if (gec2.scrollHeight>gec2.offsetHeight)
		{
			ReplaceClass('kapa_scroll_disabled', 'kapa_scroll', mocsok[i]);
			ReplaceClass('kapa_scroll_bogyo_disabled', 'kapa_scroll_bogyo', gec1);
			ReplaceClass('kapa_scroll_text_disabled', 'kapa_scroll_text', gec2);
			ReplaceClass('kapa_scroll_up_disabled', 'kapa_scroll_up', gec3);
			ReplaceClass('kapa_scroll_down_disabled', 'kapa_scroll_down', gec4);

			mocsok[i].style.display='block';
			gec2.style.overflow='hidden';
			gec3.style.display='block';
			gec4.style.display='block';
		
			addEvent(gec1, 'mousedown', BogyoOnclick);
			addEvent(gec3, 'mousedown', GoUp);
			addEvent(gec4, 'mousedown', GoDown);
			addEvent(document.body, '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);  
		}
		else 
		{
			ReplaceClass('kapa_scroll', 'kapa_scroll_disabled', mocsok[i]);
			ReplaceClass('kapa_scroll_bogyo', 'kapa_scroll_bogyo_disabled', gec1);
			ReplaceClass('kapa_scroll_text', 'kapa_scroll_text_disabled', gec2);
			ReplaceClass('kapa_scroll_up', 'kapa_scroll_up_disabled', gec3);
			ReplaceClass('kapa_scroll_down', 'kapa_scroll_down_disabled', 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;
	
	while (szar.className.indexOf('kapa_scroll_text')==-1)
	{
		if (szar.parentNode)
			szar=szar.parentNode;
		else break;
	}

  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 (dragged) alert(dragged.id);
  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;
  //alert(dragged.id);
  if (dragged)
  {
    //eger koordinatai
    var mm=mouseCoords(e);
    MoveBogyoTo(mm.y-plusy, dragged);

    //megszerezzuk a text div id-jet
    var xxx=dragged.id.indexOf('_');
    if (xxx!=-1) var vazzer=dragged.id.substr(0,xxx); else var vazzer=dragged.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);

	if (genyer)
	{
		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');   
		if (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;
}
