/*
Additional JavaScript that can be useful.
*/

function show(id){
  obj = tvl_sb_getObject(id);
  if(obj != undefined){
    obj.style.display = 'block';
  }
}

/*
JavaScript needed for the scrollbar.

Created by: TvL Design
Date: 05 january 2009
Version: 0,9 * Beta
Prefix: tvl_sb stands for TvL Design Scrollbar and is just to make sure you are not overruling any of your variables and functions
*/

var tvl_sb_height = 0;
var tvl_sb_mousex = 0;
var tvl_sb_mousey = 0;
var tvl_sb_grabx = 0;
var tvl_sb_graby = 0;
var tvl_sb_orix = 0;
var tvl_sb_oriy = 0;
var tvl_sb_elex = 0;
var tvl_sb_eley = 0;
var tvl_sb_algor = 0;
var tvl_sb_maxHeight = 0;
var tvl_sb_scrollHeight; //totalheight - height venster
var tvl_sb_slidebarHeight;
var tvl_sb_textboxObj;
var tvl_sb_sliderObj;
var tvl_sb_scroll = true;
var tvl_sb_box_pos;

var tvl_sb_dragobj = null;

/*
if (window.addEventListener){
  window.addEventListener('DOMMouseScroll', tvl_sb_wheel, false);
}
window.onmousewheel = document.onmousewheel = tvl_sb_wheel;
*/

function tvl_sb_init(tvl_sb_box_id, tvl_sb_box_content_id, tvl_sb_slider_id, tvl_sb_slidebar_id){
  
  tvl_sb_box_height = tvl_sb_getObject(tvl_sb_box_id).offsetHeight;
  tvl_sb_box_pos = tvl_sb_findPos(tvl_sb_getObject(tvl_sb_box_id));
  tvl_sb_box_content_height = tvl_sb_getObject(tvl_sb_box_content_id).offsetHeight;
  tvl_sb_slider_height = tvl_sb_getObject(tvl_sb_slider_id).offsetHeight;
  tvl_sb_slidebar_height = tvl_sb_getObject(tvl_sb_slidebar_id).offsetHeight;
  
  if(tvl_sb_box_content_height <= tvl_sb_box_height){
    tvl_sb_scroll = false;
    tvl_sb_getObject(tvl_sb_slidebar_id).style.display = 'none';
    tvl_sb_getObject(tvl_sb_slider_id).style.display = 'none';
  }
  
  tvl_sb_scrollHeight = (tvl_sb_box_content_height - tvl_sb_box_height);
  tvl_sb_slidebarHeight = (tvl_sb_slidebar_height - tvl_sb_slider_height);
  tvl_sb_textboxObj = tvl_sb_box_content_id;
  tvl_sb_sliderObj = tvl_sb_slider_id;
  document.onmousemove = tvl_sb_getMouseXY;
  tvl_sb_getMouseXY();
  if(tvl_sb_maxHeight == 0){
    tvl_sb_obj = tvl_sb_getObject(tvl_sb_sliderObj);
    tvl_sb_pos = tvl_sb_findPos(tvl_sb_obj);
    tvl_sb_maxHeight = 0;
  }
}

function tvl_sb_handle(tvl_sb_delta) {
  if(tvl_sb_scroll != false){
    var tvl_sb_difference = 20;
    if(navigator.userAgent.indexOf("Opera") == 0){
      tvl_sb_difference = -20;
    }
    var tvl_sb_temp = tvl_sb_delta * tvl_sb_difference;
    tvl_sb_height += tvl_sb_temp;
    tvl_sb_sliderHeight = tvl_sb_maxHeight - (tvl_sb_height * (tvl_sb_slidebarHeight / tvl_sb_scrollHeight));
    if(tvl_sb_height >= 0){
      tvl_sb_height = 0;
    }
    if(tvl_sb_height <= -tvl_sb_scrollHeight){
      tvl_sb_height = -tvl_sb_scrollHeight;
    }
    if(tvl_sb_sliderHeight <= tvl_sb_maxHeight){
      tvl_sb_sliderHeight = tvl_sb_maxHeight;
    }
    if(tvl_sb_sliderHeight >= (tvl_sb_maxHeight + tvl_sb_slidebarHeight)){
      tvl_sb_sliderHeight = (tvl_sb_maxHeight + tvl_sb_slidebarHeight);
    }
    tvl_sb_getObject(tvl_sb_textboxObj).style.marginTop = tvl_sb_height + 'px';
    tvl_sb_getObject(tvl_sb_sliderObj).style.top = tvl_sb_sliderHeight + 'px';
  }
}

function tvl_sb_wheel(event){
  if(tvl_sb_scroll != false){
    var tvl_sb_delta = 0;
    if(!event){
      event = window.event;
    }
    if (event.wheelDelta){
      tvl_sb_delta = event.wheelDelta/120;
      if (window.opera){
        tvl_sb_delta = -tvl_sb_delta;
      }
    }
    else if (event.detail){
      tvl_sb_delta = -event.detail/3;
    }
    if(tvl_sb_delta){
      tvl_sb_handle(tvl_sb_delta);
    }
  }
}

function tvl_sb_falsefunc(){
  return false;
}

function tvl_sb_findPos(tvl_sb_obj) {
  var tvl_sb_curleft = tvl_sb_curtop = 0;
  if (tvl_sb_obj.offsetParent) {
    tvl_sb_curleft = tvl_sb_obj.offsetLeft
    tvl_sb_curtop = tvl_sb_obj.offsetTop
    while (tvl_sb_obj = tvl_sb_obj.offsetParent) {
      tvl_sb_curleft += tvl_sb_obj.offsetLeft
      tvl_sb_curtop += tvl_sb_obj.offsetTop
    }
  }
  return [tvl_sb_curleft,tvl_sb_curtop];
}

function tvl_sb_anchor(tvl_sb_obj) {
  var temp_obj = tvl_sb_getObject(tvl_sb_obj);
  var temp_pos = tvl_sb_findPos(temp_obj);
  
  var temp_height = temp_pos[1] - tvl_sb_box_pos[1];
  var scroll_height = (temp_height / tvl_sb_scrollHeight) * (tvl_sb_maxHeight + tvl_sb_slidebarHeight);
  tvl_sb_height = -(temp_height);
  
  if(temp_height > tvl_sb_scrollHeight){
    temp_height = tvl_sb_scrollHeight;
    tvl_sb_height = -(tvl_sb_scrollHeight);
    scroll_height = tvl_sb_maxHeight + tvl_sb_slidebarHeight;
  }
  
  tvl_sb_getObject(tvl_sb_textboxObj).style.marginTop = -(temp_height) + 'px';
  tvl_sb_getObject(tvl_sb_sliderObj).style.top = scroll_height + 'px';
}

function tvl_sb_getMouseXY(e){
  if(tvl_sb_scroll != false){
    if(!e){
      e = window.event;
    }
    if(e){
      if(e.pageX || e.pageY){
        tvl_sb_mousex = e.pageX;
        tvl_sb_mousey = e.pageY;
        tvl_sb_algor = '[e.pageX]';
        if (e.clientX || e.clientY){
          tvl_sb_algor += ' [e.clientX] ';
        }
      }
      else if(e.clientX || e.clientY){
        tvl_sb_mousex = e.clientX + document.body.scrollLeft;
        tvl_sb_mousey = e.clientY + document.body.scrollTop;
        tvl_sb_algor = '[e.clientX]';
        if(e.pageX || e.pageY){
          tvl_sb_algor += ' [e.pageX] ';
        }
      }
    }
  }
}

function tvl_sb_grab(){
  if(tvl_sb_scroll != false){
    document.onmousedown = tvl_sb_falsefunc;
    tvl_sb_dragobj = tvl_sb_getObject(tvl_sb_sliderObj);
    //dragobj = context;
    //dragobj.style.zIndex = 100;
    document.onmousemove = tvl_sb_drag;
    document.onmouseup = tvl_sb_drop;
    tvl_sb_grabx = tvl_sb_mousex;
    tvl_sb_graby = tvl_sb_mousey;
    tvl_sb_pos = tvl_sb_findPos(tvl_sb_dragobj);
    tvl_sb_elex = tvl_sb_orix = tvl_sb_pos[0] - tvl_sb_box_pos[0];
    tvl_sb_eley = tvl_sb_oriy = tvl_sb_pos[1] - tvl_sb_box_pos[1];
    tvl_sb_getMouseXY();
  }
}

function tvl_sb_drag(e){
  if(tvl_sb_scroll != false){
    if (tvl_sb_dragobj){
      document.body.style.cursor = 'pointer';
      tvl_sb_elex = tvl_sb_orix + (tvl_sb_mousex-tvl_sb_grabx);
      tvl_sb_eley = tvl_sb_oriy + (tvl_sb_mousey-tvl_sb_graby);
      //dragobj.style.position = "absolute";
      //dragobj.style.left = elex + 'px';
      if(tvl_sb_eley <= tvl_sb_maxHeight){
        tvl_sb_height = 0;
        tvl_sb_dragobj.style.top = tvl_sb_maxHeight + 'px';
        tvl_sb_getObject(tvl_sb_textboxObj).style.marginTop = 0 + 'px';
      }
      else if(tvl_sb_eley >= (tvl_sb_maxHeight + tvl_sb_slidebarHeight)){
        tvl_sb_height = -tvl_sb_scrollHeight;
        tvl_sb_dragobj.style.top = (tvl_sb_maxHeight + tvl_sb_slidebarHeight) + 'px';
        tvl_sb_getObject(tvl_sb_textboxObj).style.marginTop = -tvl_sb_scrollHeight + 'px';
      }
      else{
        tvl_sb_height = -((tvl_sb_scrollHeight/tvl_sb_slidebarHeight)*(tvl_sb_eley-tvl_sb_maxHeight));
        tvl_sb_dragobj.style.top = tvl_sb_eley + 'px';
        tvl_sb_getObject(tvl_sb_textboxObj).style.marginTop = tvl_sb_height + 'px';
      }
    }
    tvl_sb_getMouseXY(e);
    return false;
  }
}

function tvl_sb_drop(){
  if(tvl_sb_scroll != false){
    if (tvl_sb_dragobj){
      document.body.style.cursor = 'default';
      //dragobj.style.zIndex = 0;
      tvl_sb_dragobj = null;
    }
    tvl_sb_getMouseXY();
    document.onmousemove = tvl_sb_getMouseXY;
    document.onmouseup = null;
    document.onmousedown = null;
  }
}

function tvl_sb_getObject(id){
  tvl_sb_obj = document.getElementById(id);
  if(tvl_sb_obj != undefined){
    return tvl_sb_obj;
  }
}
