var evtSliderScaleChanged = new gtEventHandler();
var trackAndKnobLoaded    = new gtWaitForAll(onTrackAndKnobLoaded, "trackLoaded", "knobLoaded", "pageLoaded");



function onTrackAndKnobLoaded()
{
  gtBeSliderKnob(
    gtGetElementByName('btnKnob'),
    gtGetElementByName('imgTrack'),
    'btnKnobDown.png',
    'btnKnobActive.png',
    g_tooltip_zoom_drag,
    false,
    0,
    100,
    false); // vertical
  SliderOnLoad();
} // end onTrackAndKnobLoaded()
  


function SliderOnLoad()
{
  g_track = gtGetElementByName("imgTrack");
  g_knob  = gtGetElementByName("btnKnob");
  g_out   = gtGetElementByName("btnZO");
  g_in    = gtGetElementByName("btnZI");
  g_knob.onPress   = onSliderPress;
  g_knob.onRelease = onSliderRelease;
  g_knob.onMove    = onSliderMove;
} // end SliderOnLoad()



sliderSetMapScale = function(scale)
{
  var slider_value = double2Slider(g_min_scale, g_max_scale, scale, 0, 100);
  onSliderMove(slider_value);
  g_knob.setValue(slider_value);
} // end sliderSetMapScale()


function sliderSetBusy(busy)
{
  if (!g_knob)
    return;
  g_knob.setBusy(busy);
  g_in  .setBusy(busy);
  g_out .setBusy(busy);
} // end sliderSetBusy()


// ----------------------------------------------------------------------
//   Slider handling
// ----------------------------------------------------------------------

function px(v) { return v + "px"; }



function formatThousand(number)
{
  if (number >= 1000)
  {
    var newnumber = parseInt(number / 1000);
    var rest = (number - newnumber * 1000).toString();
    if (parseInt(rest) < 10)
      rest = "00" + rest;
    else if (parseInt(rest) < 100)
      rest = "0" + rest;
    return formatThousand(newnumber) + " " + rest;
  }
  else return number;
} // end formatThousand()



function onSliderPress(slider_value)
{
  var map_scale = niceScale(slider2Double(g_min_scale, g_max_scale, 0, 100, slider_value));
  evtSliderScaleChanged.raise(map_scale, "press");
} // end onSliderPress()



function onSliderRelease(slider_value)
{
  var map_scale = niceScale(slider2Double(g_min_scale, g_max_scale, 0, 100, slider_value));
  evtSliderScaleChanged.raise(map_scale, "release");
} // end onSliderRelease()



function onSliderMove(slider_value)
{
  var map_scale = niceScale(slider2Double(g_min_scale, g_max_scale, 0, 100, slider_value));
  if (map_scale != onSliderMove.s_prev_scale)
  {
    displayCurrentScaleAsText(map_scale);
    evtSliderScaleChanged.raise(map_scale, "move");
    onSliderMove.s_prev_scale = map_scale;
  }
} // end onSliderMove()
//      onSliderMove.s_prev_scale = 0;



function pmHandleSliderScaleChanged(scale, state)
{
  switch (state)
  {
    case "press":
    pmHandleSliderScaleChanged.s = scale;
    pmHandleSliderScaleChanged.w = gtGetWidth(g_map);
    pmHandleSliderScaleChanged.h = gtGetHeight(g_map);
    break;
    
    case "move":
    if (pmHandleSliderScaleChanged.s) // ensure bitmap-scaling only is used when dragging the slider
    {
      var f = pmHandleSliderScaleChanged.s / scale;
      var w = f * pmHandleSliderScaleChanged.w;
      var h = f * pmHandleSliderScaleChanged.h;
      gtSetLeft  (g_map.m_img, (pmHandleSliderScaleChanged.w - w) / 2.0);
      gtSetTop   (g_map.m_img, (pmHandleSliderScaleChanged.h - h) / 2.0);
      gtSetWidth (g_map.m_img, w);
      gtSetHeight(g_map.m_img, h);
    }
    break;
    
    case "release":
    g_map.setScale(scale);
    pmHandleSliderScaleChanged.s = 0; // ensure bitmap-scaling only is used when dragging the slider
    break;
  }
} // end pmHandleSliderScaleChanged()
      
      

function onSliderDivEnter()
{
  gtDelClassName(g_div_slider, "Inactive");
  gtAddClassName(g_div_slider, "Active");
} // end onSliderDivEnter()



function onSliderDivLeave()
{
  gtDelClassName(g_div_slider, "Active");
  gtAddClassName(g_div_slider, "Inactive");
} // end onSliderDivLeave()


