// opt = 1 -> stop

  
function TWX_CanScroll(obj_name, obj_cont)
{
	var crossobj = document.getElementById(obj_name);
	var contobj = document.getElementById(obj_cont);
	
	var height = contobj.offsetHeight;
 	var contentheight = crossobj.offsetHeight;
 	
  TWX_ScrollLevel(crossobj, contobj);             
 	
  if(contentheight >= height)
 	   return true;
 	else
 	   return false; 	
}

function TWX_ScrollMoveDownStep(obj_name, obj_cont, speed, timer, opt, step, to_pos)
{
	var crossobj = document.getElementById(obj_name);
	var contobj = document.getElementById(obj_cont);
	
	var height = contobj.offsetHeight;
 	var contentheight = crossobj.offsetHeight;
 	
 	var timer_local = timer;
 
  var ctop = DOM_PosTop(crossobj);      

  if(to_pos == -1)
     to_pos = ctop - step;  

  if(ctop <= to_pos)
  {
     TWX_ScrollStop(obj_name);
     TWX_ScrollLevel(crossobj, contobj);
  	 if (window.scroll_moveupsvar) 
         clearTimeout(window.scroll_moveupsvar);     
 	   return;
  }         
          
	if(ctop - height >= (-contentheight))
  { 
     crossobj.style.top = ctop - speed;
     window.scroll_moveupsvar = setTimeout("TWX_ScrollMoveDownStep(\"" + obj_name + "\", \"" + obj_cont + "\", " + speed + ", " + timer + ", " + opt + ", " + step + ", " + to_pos + ")", timer_local);
  }
  else 
  {
  	if (window.scroll_moveupsvar) 
        clearTimeout(window.scroll_moveupsvar);
   }
   TWX_ScrollLevel(crossobj, contobj);                                     	
}

function TWX_ScrollMoveUpStep(obj_name, obj_cont, speed, timer, opt, step, to_pos)
{
	var crossobj = document.getElementById(obj_name);
	var contobj = document.getElementById(obj_cont);
	
	var height = contobj.offsetHeight;
 	var contentheight = crossobj.offsetHeight;
 	
	var timer_local = timer;

  var ctop = DOM_PosTop(crossobj);      

  if(to_pos == -1)
     to_pos = ctop + step;    

  if(ctop >= to_pos)
  {
     TWX_ScrollStop(obj_name);
     TWX_ScrollLevel(crossobj, contobj);
     if (window.scroll_movedownsvar) 
         clearTimeout(scroll_movedownsvar);            
 	   return;
  }   
                              
	if (ctop < 0)
  { 
      crossobj.style.top = ctop + speed;
      window.scroll_movedownsvar = setTimeout("TWX_ScrollMoveUpStep(\"" + obj_name + "\", \"" + obj_cont + "\", " + speed + ", " + timer + ", " + opt  + ", " + step + ", " + to_pos + ")", timer_local);
  }
  else
  {
	    if (window.scroll_movedownsvar) 
          clearTimeout(scroll_movedownsvar);       
  }      
  TWX_ScrollLevel(crossobj, contobj);
}

function TWX_ScrollMoveDown(obj_name, obj_cont, speed, timer, opt, sleep_top)
{
	var crossobj = document.getElementById(obj_name);
	var contobj = document.getElementById(obj_cont);
	
	var height = contobj.offsetHeight;
 	var contentheight = crossobj.offsetHeight;
 	
 	var timer_local = timer;
 
	if (window.scroll_moveupvar) 
        clearTimeout(scroll_moveupvar);

  var ctop = DOM_PosTop(crossobj);        

   if(sleep_top == -2)
   {
     	if(ctop - height < (-contentheight))
 	    {
 	       TWX_ScrollStop(obj_name);
         TWX_ScrollLevel(crossobj, contobj);
       	 if (window.scroll_moveupvar) 
             clearTimeout(scroll_moveupvar);         
     	   return;
      }   
   }

	if(ctop >= (-contentheight)) 
       crossobj.style.top = ctop - speed;
	else
       crossobj.style.top = height;
                              
   if(sleep_top > -1 && sleep_top - speed < ctop && sleep_top + speed > ctop)
      timer_local = 15000;

   window.scroll_moveupvar = setTimeout("TWX_ScrollMoveDown(\"" + obj_name + "\", \"" + obj_cont + "\", " + speed + ", " + timer + ", " + opt + ", " + sleep_top + ")", timer_local);
 	 
 	 TWX_ScrollLevel(crossobj, contobj);
}

function TWX_ScrollMoveUp(obj_name, obj_cont, speed, timer, opt, sleep_top)
{
 	var crossobj = document.getElementById(obj_name);
	var contobj = document.getElementById(obj_cont);
	
	var height = contobj.offsetHeight;
 	var contentheight = crossobj.offsetHeight;
 	
	var timer_local = timer;

  var ctop = parseInt(crossobj.style.top);
  
   if(sleep_top == -2)
   {
 	    if (ctop + speed >= 0)
 	    {
 	       TWX_ScrollStop(obj_name);
         TWX_ScrollLevel(crossobj, contobj);
       	 if (window.scroll_movedownvar) 
             clearTimeout(scroll_movedownvar);
     	   return;
      }   
   }        
                  
	if (ctop <= contentheight) 
        crossobj.style.top = ctop + speed;
	else 
        crossobj.style.top = -height;

   if(sleep_top > -1 && sleep_top - speed < ctop && sleep_top + speed > ctop)
      timer_local = 15000;            

   window.scroll_movedownvar = setTimeout("TWX_ScrollMoveUp(\"" + obj_name + "\", \"" + obj_cont + "\", " + speed + ", " + timer + ", " + opt  + ", " + sleep_top + ")", timer_local);
   
   TWX_ScrollLevel(crossobj, contobj);
}

function TWX_ScrollMoveLeft(obj_name, obj_cont, speed, timer, opt, sleep_top)
{
	var crossobj = document.getElementById(obj_name);
	var contobj = document.getElementById(obj_cont);
	
	var width = contobj.offsetWidth;
 	var contentwidth = crossobj.offsetWidth;
 	
 	var timer_local = timer;
 
  var cleft = parseInt(crossobj.style.left);        
	if(cleft >= (-contentwidth)) 
       crossobj.style.left = cleft - speed;
	else
       crossobj.style.left = width;
                              
   if(sleep_top != -1 && sleep_top - speed < ctop && sleep_top + speed > ctop)
      timer_local = 15000;
   
   window.scroll_moveleftvar = setTimeout("TWX_ScrollMoveLeft(\"" + obj_name + "\", \"" + obj_cont + "\", " + speed + ", " + timer + ", " + opt + ", " + sleep_top + ")", timer_local);
}

function TWX_ScrollMoveRight(obj_name, obj_cont, speed, timer, opt, sleep_top)
{
  var crossobj = document.getElementById(obj_name);
	var contobj = document.getElementById(obj_cont);
	
	var width = contobj.offsetWidth;
 	var contentwidth = crossobj.offsetWidth;
 	
	var timer_local = timer;

  var cleft = parseInt(crossobj.style.left);                
	if (cleft <= contentwidth) 
      crossobj.style.left = cleft + speed;
	else 
      crossobj.style.left = -width;

   if(sleep_top != -1 && sleep_top - speed < ctop && sleep_top + speed > ctop)
      timer_local = 15000;      

   window.scroll_moverightvar = setTimeout("TWX_ScrollMoveRight(\"" + obj_name + "\", \"" + obj_cont + "\", " + speed + ", " + timer + ", " + opt  + ", " + sleep_top + ")", timer_local);
}

function TWX_IsScrolling(obj_name)
{
	if (window.scroll_moveupvar != 0) 
      return true;
	if (window.scroll_movedownvar != 0) 
      return true;
  return false;
}

function TWX_ScrollStop(obj_name)
{
	if (window.scroll_moveupvar) 
      clearTimeout(window.scroll_moveupvar);
	if (window.scroll_movedownvar) 
      clearTimeout(window.scroll_movedownvar);
  window.scroll_moveupvar = 0;
  window.scroll_movedownvar = 0;
}

function TWX_ScrollMoveTop(obj_name)
{
  TWX_ScrollStop(obj_name)
	if(obj_name != "")
	{
       var crossobj = document.getElementById(obj_name);
   	   var contobj = document.getElementById(obj_name + "_frame");

       DOM_SetPosTop(crossobj, 0);
       TWX_ScrollLevel(crossobj, contobj);
  }
}

function TWX_ScrollMoveOffset(offset, obj_name)
{
  TWX_ScrollStop(obj_name)
	if(obj_name != "")
	{
       var crossobj = document.getElementById(obj_name);
   	   var contobj = document.getElementById(obj_name + "_frame");
       
       var height = contobj.offsetHeight;
 	     var contentheight = crossobj.offsetHeight;     	        
       
       var ctop = DOM_PosTop(crossobj);      
       
        ctop += offset;
        
       	if(ctop - height < (-contentheight))
           ctop = - contentheight + height;
        if(ctop > 0)
           ctop = 0; 
              
       DOM_SetPosTop(crossobj, ctop);       
       TWX_ScrollLevel(crossobj, contobj);
  }
}

var TWX_ScrollCapturing = false;
var TWX_ScrollCapturing_X = 0;
var TWX_ScrollCapturing_Y = 0;
var TWX_ScrollCapturing_ObjName = "";

function TWX_ScrollFollowLevelStart(x, y, obj_name)
{    
  	var levelobj = document.getElementById(obj_name + "_scroll_level");
  	var levelcobj = document.getElementById(obj_name + "_scroll_level_container");
  	
    if(levelobj == null || levelcobj == null)
       return;
  	  	    	
    if(DOM_Browser == DOM_IE)
       levelobj.setCapture();
    else
    {
       TWX_ScrollCapturing_ObjName = obj_name;
       document.addEventListener("mousemove", TWX_ScrollFollowLevelMoveMozilla, true);
       document.addEventListener("mouseup", TWX_ScrollFollowLevelUpMozilla, true);
    }
  	
  	TWX_ScrollCapturing_X = x;
  	TWX_ScrollCapturing_Y = y;
  	
  	TWX_ScrollCapturing = true;
}		

function TWX_ScrollFollowLevelStop(obj_name)
{
	  var levelobj = document.getElementById(obj_name + "_scroll_level");
  	var levelcobj = document.getElementById(obj_name + "_scroll_level_container");
  	
    if(levelobj == null || levelcobj == null)
       return;  	

    if(DOM_Browser == DOM_IE)
       levelobj.releaseCapture();
    else
    { 
     	 document.removeEventListener("mousemove", TWX_ScrollFollowLevelMoveMozilla, true);
     	 document.removeEventListener("mouseup", TWX_ScrollFollowLevelUpMozilla, true);
    }

 		TWX_ScrollCapturing = false;
}		

function TWX_ScrollFollowLevelMoveMozilla(e)
{
   TWX_ScrollFollowLevelMove(DOM_MouseX(e), DOM_MouseY(e), TWX_ScrollCapturing_ObjName);
}

function TWX_ScrollFollowLevelUpMozilla(e)
{
   TWX_ScrollFollowLevelStop(TWX_ScrollCapturing_ObjName);
}

function TWX_ScrollFollowLevelMove(x, y, obj_name)
{
    if(!TWX_ScrollCapturing)
        return;
    
    var levelobj = document.getElementById(obj_name + "_scroll_level");
  	var levelcobj = document.getElementById(obj_name + "_scroll_level_container");
  	
    if(levelobj == null || levelcobj == null)
       return;
       	
    var crossobj = document.getElementById(obj_name);
	  var contobj = document.getElementById(obj_name + "_frame");
	  
  	var height = contobj.offsetHeight;
   	var contentheight = crossobj.offsetHeight;
    var ctop = DOM_PosTop(crossobj);      
        
    var lv_h = height * (levelcobj.offsetHeight / contentheight); 
    if(lv_h < 5)
       lv_h = 5;
              	 
    var lv_p = DOM_PosTop(levelobj);
    
    var s_y = TWX_ScrollCapturing_Y - DOM_PosTop(levelcobj) + lv_p;
    
    TWX_ScrollCapturing_X = x;          
    TWX_ScrollCapturing_Y = y;      

    y = y - DOM_PosTop(levelcobj) + lv_p;        
        
    offset = y - s_y;
    lv_p += offset;

    if(lv_p + lv_h > levelcobj.offsetHeight)
       lv_p = levelcobj.offsetHeight - lv_h;
    if(lv_p < 0)
       lv_p = 0; 
       
    DOM_SetPosTop(levelobj, lv_p);
    
    ctop = -lv_p / (levelcobj.offsetHeight / contentheight);      
    DOM_SetPosTop(crossobj, ctop);       	  	 	
}        

function TWX_ScrollLevel(crossobj, contobj)
{
	var levelobj = document.getElementById(crossobj.id + "_scroll_level");
	var levelcobj = document.getElementById(crossobj.id + "_scroll_level_container");
	
	if(levelobj == null || levelcobj == null)
     return;

	var height = contobj.offsetHeight;
 	var contentheight = crossobj.offsetHeight;
  var ctop = DOM_PosTop(crossobj);      
  
  if(contentheight >= height)
  {   
     var lv_h = height * (levelcobj.offsetHeight / contentheight);
     var lv_p;
     
     if(lv_h < 5)
        lv_h = 5;
     
     lv_p = -ctop * (levelcobj.offsetHeight / contentheight);
    
     if(lv_p + lv_h > levelcobj.offsetHeight)
        lv_p = levelcobj.offsetHeight - lv_h;
     if(lv_p < 0)
        lv_p = 0;
               
     DOM_SetPosTop(levelobj, lv_p);
     levelobj.style.height = lv_h;         
  } 
}

