var g_loadProgress = 0;
var g_loader = null;
var g_sliders = new Object();
var g_baseUrl = window.location;
var g_resultLocation = /\/search\/results/;
var g_embeddedLocation = '/search/embed';
var g_lastUrl = g_baseUrl;

// Real-time updating support
var g_slidersShouldUpdateInRealTime = true;

// Timeout ID for slider updates
var g_sliderTimeoutId = null;

// Disable event handling while building table
var g_slidersActive = false;

/**
  * Refresh table contents with new data, based on slider settings.
  */
function refreshFromSliders()
{
  var url = g_baseUrl;
  for (var i in g_sliders)
  {
    if (g_sliders[i].getValue() != null)
    {
      url += "&" + escape(i + "[weight]") + "=" + escape(g_sliders[i].getValue());
    }
  }
  url = url.replace(g_resultLocation, g_embeddedLocation);

  //window.console.log("url: " + url);
  //jsc_log("url: " + url);

  if (url != g_lastUrl)
  {
    g_lastUrl = url;
    if (g_loader)
    {
      g_loader.abort();
    }
    var loader = new HttpLoader(url);
    document.getElementById("SearchStatusText").innerHTML = "Loading results...";
    document.getElementById("SearchStatusBox").style.display = "block";
    loader.setProgressCallback(function(state)
      {
      });

    loader.setErrorCallback(function (code, text)
        {
          document.getElementById("SearchStatusBox").style.display = "block";
          document.getElementById("SearchStatusText").innerHTML =
            "<strong>Error (" + code + ") loading results from server</strong>: " + text;
          loader = null;
        });
    loader.setDataCallback(function (data)
      {
        document.getElementById("SearchResultsTableContainer").innerHTML = data;
        document.getElementById("SearchStatusBox").style.display = "none";
        updateSliderPositions();
      });
    loader.start();
  }
}

/**
  * Reposition sliders if table has been modified.
  */
function updateSliderPositions()
{
  for (var i in g_sliders)
  {
    var slider = g_sliders[i];     
    var container = document.getElementById(
      slider.widgetElement.id + "_Container");
    var widgetBounds = getAbsoluteBounds(slider.widgetElement);
    var containerBounds = getAbsoluteBounds(container);

    // Resize widget
    widgetBounds.left = containerBounds.left + 
      ((containerBounds.right - containerBounds.left) / 2.0) - 
      ((widgetBounds.right - widgetBounds.left) / 2.0);
    widgetBounds.top = containerBounds.top;
    setAbsoluteBounds(slider.widgetElement, widgetBounds);

    // Position the tooltip
    var tooltipElement = 
      document.getElementById(slider.widgetElement.id + "_Help");
    tooltipElement.style.top = (widgetBounds.bottom - 5) + "px";
    tooltipElement.style.left = widgetBounds.left + "px";
  /**  alert("Dimension: " + i + "\n" +
          "Widget: " + widgetBounds + "\n" +
          "Container: " + containerBounds + "\n" +
          "Tooltip: " + tooltipElement.style.top + ", " + tooltipElement.style.right + ", " + tooltipElement.style.bottom + ", " + tooltipElement.style.left);
  */
  }
}

// Make sure sliders are repositioned on resize  
addEventListenerTo(window, "resize", updateSliderPositions);
